diff --git a/本地化下沉-打包/offline离线安装脚本/appImage_tars/readme.txt b/本地化下沉-打包/offline离线安装脚本/appImage_tars/readme.txt
new file mode 100644
index 0000000..3c8e6d1
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/appImage_tars/readme.txt
@@ -0,0 +1,2 @@
+安心云 应用 镜像 12个
+make-app-tar.sh 脚本执行 后存入当前文件夹
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/appImage_yamls/1-iota/local-iota-dac.yaml b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/1-iota/local-iota-dac.yaml
new file mode 100644
index 0000000..6d1053a
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/1-iota/local-iota-dac.yaml
@@ -0,0 +1,98 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: iota-dac-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: yaml-iota-dac-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yaml-iota-dac-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yaml-iota-dac-d
+ spec:
+ containers: #定义容器信息
+ - name: yaml-iota-dac #容器名,与标签名要相同
+ image: repository.anxinyun.cn/iota/dac:28.21-04-14 #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ env: #环境变量
+ - name: "IOTA_DAC_RUN_MODE" #变量的名字
+ value: "single" #变量的值
+ - name: "IOTA_KAFKA_BROKERS"
+ value: "kafka-service:9092"
+ - name: "IOTA_MQTT"
+ value: "emqx-service:1883"
+ - name: "IOTA_REDIS"
+ value: "redis-service:6379"
+ - name: "IOTA_POSTGRES"
+ value: "postgres://postgres:example@pg-service:5432/iota?sslmode=disable"
+ - name: "IOTA_ALERT_MODE"
+ value: "simple"
+ ports:
+ - containerPort: 5000 #定义容器的端口
+ name: tcp-5000
+ - containerPort: 40001 #定义容器的端口
+ name: tcp-40001
+ - containerPort: 40002 #定义容器的端口
+ name: tcp-40002
+ - containerPort: 40003 #定义容器的端口
+ name: tcp-40003
+ - containerPort: 40004 #定义容器的端口
+ name: tcp-40004
+ - containerPort: 40005 #定义容器的端口
+ name: tcp-40005
+ volumeMounts: #改容器内无法修改hosts 挂载出来修改
+ - name: vol-hosts #挂载设备的名字,与volumes[*].name 需要对应
+ mountPath: /etc/hosts # 容器的数据目录
+ volumes: # volumes和container处于同一层级,别搞错了
+ - name: vol-hosts
+ hostPath:
+ path: /etc/hosts # 宿主机目录 覆盖容器内目录 间接统一hosts
+
+---
+apiVersion: v1 #指定API版本标签
+kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+metadata: #定义资源的元数据信息
+ name: iota-dac-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: iota-dac-s
+spec:
+ selector:
+ app: yaml-iota-dac-d #deployment标签
+ type: NodePort
+ ports:
+ - protocol: TCP
+ port: 5000 # 集群内访问
+ targetPort: 5000 #集群内 容器内端口
+ name: tcp-5000
+ #nodePort: 30500 #集群外访问 范围30000-32767
+ - protocol: TCP
+ port: 40001 # 集群内访问
+ targetPort: 40001 #集群内 容器内端口
+ name: tcp-40001
+ nodePort: 30401 #集群外访问 范围30000-32767
+ - protocol: TCP
+ port: 40002 # 集群内访问
+ targetPort: 40002 #集群内 容器内端口
+ name: tcp-40002
+ nodePort: 30402 #集群外访问 范围30000-32767
+ - protocol: TCP
+ port: 40003 # 集群内访问
+ targetPort: 40003 #集群内 容器内端口
+ name: tcp-40003
+ nodePort: 30403 #集群外访问 范围30000-32767
+ - protocol: TCP
+ port: 40004 # 集群内访问
+ targetPort: 40004 #集群内 容器内端口
+ name: tcp-40004
+ nodePort: 30404 #集群外访问 范围30000-32767
+ - protocol: TCP
+ port: 40005 # 集群内访问
+ targetPort: 40005 #集群内 容器内端口
+ name: tcp-40005
+ nodePort: 30405 #集群外访问 范围30000-32767
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/appImage_yamls/1-iota/local-iota-prometheus.yaml b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/1-iota/local-iota-prometheus.yaml
new file mode 100644
index 0000000..f892267
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/1-iota/local-iota-prometheus.yaml
@@ -0,0 +1,43 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: iota-prometheus-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: yaml-iota-prometheus-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yaml-iota-prometheus-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yaml-iota-prometheus-d
+ spec:
+ containers: #定义容器信息
+ - name: yaml-iota-prometheus #容器名,与标签名要相同
+ image: repository.anxinyun.cn/iota/prometheus:latest #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ ports:
+ - containerPort: 19090 #定义容器的端口
+ name: tcp-19090
+---
+apiVersion: v1 #指定API版本标签
+kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+metadata: #定义资源的元数据信息
+ name: iota-prometheus-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: iota-prometheus-s
+spec:
+ selector:
+ app: yaml-iota-prometheus-d #deployment标签
+ type: NodePort
+ ports:
+ - protocol: TCP
+ port: 19090 # 集群内访问
+ targetPort: 19090 #集群内 容器内端口
+ name: tcp-19090
+ nodePort: 30990 #集群外访问 范围30000-32767
+
diff --git a/本地化下沉-打包/offline离线安装脚本/appImage_yamls/1-iota/local-iota-webapi.yaml b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/1-iota/local-iota-webapi.yaml
new file mode 100644
index 0000000..ffd4f6d
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/1-iota/local-iota-webapi.yaml
@@ -0,0 +1,67 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: iota-webapi-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: yaml-iota-webapi-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yaml-iota-webapi-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yaml-iota-webapi-d
+ spec:
+ containers: #定义容器信息
+ - name: yaml-iota-webapi #容器名,与标签名要相同
+ image: repository.anxinyun.cn/iota/web-console-api:50.21-05-24 #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ env: #环境变量
+ - name: "IOTA_SERVER_PORT" #变量的名字
+ value: "9080" #变量的值
+ - name: "IOTA_KAFKA_BROKERS"
+ value: "kafka-service:9092"
+ - name: "IOTA_ZOOKEEPER_NODES"
+ value: "kafka-service:2182"
+ - name: "IOTA_MQTT_BROKERS"
+ value: "emqx-service:1883"
+ - name: "IOTA_REDIS_SERVER_HOST"
+ value: "redis-service"
+ - name: "IOTA_POSTGRES"
+ value: "postgres://postgres:example@pg-service:5432/iota"
+ - name: "IOTA_ATTACHMENT_IN_CLOUD"
+ value: "true"
+ - name: "IOTA_PROMETHEUS_SERVER"
+ value: "iota-prometheus-service:19090"
+ ports:
+ - containerPort: 9080 #定义容器的端口
+ name: tcp-9080
+ volumeMounts: #改容器内无法修改hosts 挂载出来修改
+ - name: vol-hosts #挂载设备的名字,与volumes[*].name 需要对应
+ mountPath: /etc/hosts # 容器的数据目录
+ volumes: # volumes和container处于同一层级,别搞错了
+ - name: vol-hosts
+ hostPath:
+ path: /etc/hosts # 宿主机目录 覆盖容器内目录 间接统一hosts
+---
+apiVersion: v1 #指定API版本标签
+kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+metadata: #定义资源的元数据信息
+ name: iota-webapi-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: iota-webapi-s
+spec:
+ selector:
+ app: yaml-iota-webapi-d #deployment标签
+ type: NodePort
+ ports:
+ - protocol: TCP
+ port: 9080 # 集群内访问
+ targetPort: 9080 #集群内 容器内端口
+ name: tcp-9080
+ #nodePort: 30980 #集群外访问 范围30000-32767
+
diff --git a/本地化下沉-打包/offline离线安装脚本/appImage_yamls/1-iota/local-iota-z-proxy.yaml b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/1-iota/local-iota-z-proxy.yaml
new file mode 100644
index 0000000..5ac7157
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/1-iota/local-iota-z-proxy.yaml
@@ -0,0 +1,52 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: iota-proxy-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: yaml-iota-proxy-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yaml-iota-proxy-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yaml-iota-proxy-d
+ spec:
+ containers: #定义容器信息
+ - name: yaml-iota-proxy #容器名,与标签名要相同
+ image: repository.anxinyun.cn/anxin/iota-proxy:latest #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ env: #环境变量
+ - name: "ANXINCLOUD_IOTA_API" #变量的名字
+ value: "http://iota-webapi-service:9080" #变量的值
+ - name: "ANXINCLOUD_IOTA_AUTH"
+ value: "MGU0MmFmZTZlNzEwNTVjZWEyNWZjMDA4M2Q4MTY0MjZjNTg2N2I4OTozNWUwYWRmMGEzMDM0NWEzMTA0YTA2YmI4YTY0ODQwMGQ5NGE5YzIw"
+ - name: "ANXINCLOUD_REDIS_HOST"
+ value: "redis-service"
+ - name: "ANXINCLOUD_REDIS_PORT"
+ value: "6379"
+ ports:
+ - containerPort: 8080 #定义容器的端口
+ name: tcp-8080
+---
+apiVersion: v1 #指定API版本标签
+kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+metadata: #定义资源的元数据信息
+ name: iota-proxy-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: iota-proxy-s
+spec:
+ selector:
+ app: yaml-iota-proxy-d #deployment标签
+ type: NodePort
+ ports:
+ - protocol: TCP
+ port: 8091 # 集群内访问
+ targetPort: 8080 #集群内 容器内端口
+ name: tcp-8080
+ nodePort: 30891 #集群外访问 范围30000-32767
+
diff --git a/本地化下沉-打包/offline离线安装脚本/appImage_yamls/1-iota/local-rpc.yaml b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/1-iota/local-rpc.yaml
new file mode 100644
index 0000000..adcaf2a
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/1-iota/local-rpc.yaml
@@ -0,0 +1,43 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: rpc-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: yaml-rpc-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yaml-rpc-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yaml-rpc-d
+ spec:
+ containers: #定义容器信息
+ - name: yaml-rpc #容器名,与标签名要相同
+ image: repository.anxinyun.cn/anxinyun/py.rpc:dragon.32 #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ ports:
+ - containerPort: 5000 #定义容器的端口
+ name: tcp-5000
+---
+apiVersion: v1 #指定API版本标签
+kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+metadata: #定义资源的元数据信息
+ name: rpc-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: rpc-s
+spec:
+ selector:
+ app: yaml-rpc-d #deployment标签
+ type: NodePort
+ ports:
+ - protocol: TCP
+ port: 25000 # 集群内访问
+ targetPort: 5000 #集群内 容器内端口
+ name: tcp-5000
+ #nodePort: 30500 #集群外访问 范围30000-32767
+
diff --git a/本地化下沉-打包/offline离线安装脚本/appImage_yamls/2-anxin_config/local-config-center.yaml b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/2-anxin_config/local-config-center.yaml
new file mode 100644
index 0000000..6e14216
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/2-anxin_config/local-config-center.yaml
@@ -0,0 +1,49 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: config-center-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: yaml-config-center-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yaml-config-center-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yaml-config-center-d
+ spec:
+ containers: #定义容器信息 把数据库里传感器配置,写入redis
+ - name: yaml-config-center #容器名,与标签名要相同
+ image: repository.anxinyun.cn/local/config_center:latest #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ env: #环境变量
+ - name: "CLUSTER" #变量的名字
+ value: "ANXINCLOUD" #变量的值
+ - name: "ANXINCLOUD_API"
+ value: "webapi-service:8092" ##注意 这里要先启动 anxin webapi
+ command: ['java','-jar','/app/config_center.jar','db.url=jdbc:postgresql://pg-service:5432/axy','db.user=postgres','db.pwd=example','iota.api.proxy=http://iota-proxy-service:8091/_iota_api','redis.host=redis-service','redis.port=6379' ,'kafka.brokers=kafka-service:9092']
+ volumeMounts: #改容器内无法修改hosts 挂载出来修改
+ - name: vol-config-centerc #挂载设备的名字,与volumes[*].name 需要对应
+ mountPath: /etc/hosts # 容器的数据目录
+ volumes: # volumes和container处于同一层级,别搞错了
+ - name: vol-config-centerc
+ hostPath:
+ path: /etc/hosts # 宿主机目录 覆盖容器内目录 间接统一hosts
+
+---
+#ET不对外提供服务 不启用service
+# apiVersion: v1 #指定API版本标签
+# kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+# metadata: #定义资源的元数据信息
+ # name: config-center-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ # namespace: lk #默认default
+ # labels: #定义资源标签
+ # app: config-center-s
+# spec:
+ # selector:
+ # app: yaml-config-center-d #deployment标签
+ # type: ClusterIP
+
diff --git a/本地化下沉-打包/offline离线安装脚本/appImage_yamls/3-et/local-et.yaml b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/3-et/local-et.yaml
new file mode 100644
index 0000000..722f8a1
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/3-et/local-et.yaml
@@ -0,0 +1,45 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: et-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: yaml-et-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yaml-et-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yaml-et-d
+ spec:
+ containers: #定义容器信息
+ - name: yaml-et #容器名,与标签名要相同
+ image: repository.anxinyun.cn/local/et:latest #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ command: ['java','-cp','et.jar','et.main.singleton','db.url=jdbc:postgresql://pg-service:5432/axy','db.user=postgres','db.pwd=example','iota.api.proxy="iota-proxy-service:8091/_iota_api"','redis.host=redis-service','redis.port=6379' ,'kafka.brokers=kafka-service:9092','es.cluster.nodes=es-service:9200']
+ #command: ['java -cp et.jar et.main.singleton db.url=jdbc:postgresql://pg-service:5432/axy db.user=postgres db.pwd=example iota.api.proxy="iota-proxy-service:8091/_iota_api" redis.host=redis-service redis.port=6379 kafka.brokers=kafka-service:9092 es.cluster.nodes=es-service:9200']
+ volumeMounts: #改容器内无法修改hosts 挂载出来修改
+ - name: vol-etc #挂载设备的名字,与volumes[*].name 需要对应
+ mountPath: /etc/hosts # 容器的数据目录
+ volumes: # volumes和container处于同一层级,别搞错了
+ - name: vol-etc
+ hostPath:
+ path: /etc/hosts # 宿主机目录 覆盖容器内目录 间接统一hosts
+
+---
+#ET不对外提供服务 不启用service
+# apiVersion: v1 #指定API版本标签
+# kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+# metadata: #定义资源的元数据信息
+ # name: et-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ # namespace: lk #默认default
+ # labels: #定义资源标签
+ # app: et-s
+# spec:
+ # selector:
+ # app: yaml-et-d #deployment标签
+ # type: ClusterIP
+
diff --git a/本地化下沉-打包/offline离线安装脚本/appImage_yamls/4-report/local-report.yaml b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/4-report/local-report.yaml
new file mode 100644
index 0000000..a793c79
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/4-report/local-report.yaml
@@ -0,0 +1,49 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: report-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: yaml-report-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yaml-report-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yaml-report-d
+ spec:
+ containers: #定义容器信息
+ - name: yaml-report #容器名,与标签名要相同
+ image: repository.anxinyun.cn/local/report-client:12.21-10-28 #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ command: ['java','-cp','/app/report.client.jar','report.client.main','db.url=jdbc:postgresql://pg-service:5432/axy','db.user=postgres','db.pwd=example','redis.host=redis-service','redis.port=6379' ,'kafka.brokers=kafka-service:9092','es.cluster.nodes=es-service:9200','thingId_url=http://iota-webapi-service:9080/_iota_api/things/','local.attachment.baseurl=http://webapi-service:8092/attachments']
+ volumeMounts: #改容器内无法修改hosts 挂载出来修改
+ - name: vol-hosts #挂载设备的名字,与volumes[*].name 需要对应
+ mountPath: /etc/hosts # 容器的数据目录
+ # - name: vol-report #挂载设备的名字,与volumes[*].name 需要对应
+ # mountPath: /app # 容器的数据目录
+ volumes: # volumes和container处于同一层级,别搞错了
+ - name: vol-hosts
+ hostPath:
+ path: /etc/hosts # 宿主机目录 覆盖容器内目录 间接统一hosts
+ # - name: vol-report
+ # hostPath:
+ # path: /home/anxin/static/report # 宿主机目录 覆盖容器内目录 间接统一hosts
+
+---
+#ET不对外提供服务 不启用service
+# apiVersion: v1 #指定API版本标签
+# kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+# metadata: #定义资源的元数据信息
+ # name: report-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ # namespace: lk #默认default
+ # labels: #定义资源标签
+ # app: report-s
+# spec:
+ # selector:
+ # app: yaml-report-d #deployment标签
+ # type: ClusterIP
+
diff --git a/本地化下沉-打包/offline离线安装脚本/appImage_yamls/5-alarm/local-alarm.yaml b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/5-alarm/local-alarm.yaml
new file mode 100644
index 0000000..78a3ae5
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/5-alarm/local-alarm.yaml
@@ -0,0 +1,44 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: alarm-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: yaml-alarm-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yaml-alarm-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yaml-alarm-d
+ spec:
+ containers: #定义容器信息
+ - name: yaml-alarm #容器名,与标签名要相同
+ image: repository.anxinyun.cn/anxinyun/smislocal-alarm:latest #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ command: ['java','-jar','alarm.jar','db.url=jdbc:postgresql://pg-service:5432/axy','db.user=postgres','db.pwd=example','redis.host=redis-service','redis.port=6379' ,'kafka.brokers=kafka-service:9092','es.cluster.nodes=es-service:9200']
+ volumeMounts: #改容器内无法修改hosts 挂载出来修改
+ - name: vol-alarm #挂载设备的名字,与volumes[*].name 需要对应
+ mountPath: /etc/hosts # 容器的数据目录
+ volumes: # volumes和container处于同一层级,别搞错了
+ - name: vol-alarm
+ hostPath:
+ path: /etc/hosts # 宿主机目录 覆盖容器内目录 间接统一hosts
+
+---
+#ET不对外提供服务 不启用service
+# apiVersion: v1 #指定API版本标签
+# kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+# metadata: #定义资源的元数据信息
+ # name: alarm-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ # namespace: lk #默认default
+ # labels: #定义资源标签
+ # app: alarm-s
+# spec:
+ # selector:
+ # app: yaml-alarm-d #deployment标签
+ # type: ClusterIP
+
diff --git a/本地化下沉-打包/offline离线安装脚本/appImage_yamls/anxin_webapi_webconsole/local-webapi.yaml b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/anxin_webapi_webconsole/local-webapi.yaml
new file mode 100644
index 0000000..3fd2949
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/anxin_webapi_webconsole/local-webapi.yaml
@@ -0,0 +1,77 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: webapi-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: yaml-webapi-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yaml-webapi-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yaml-webapi-d
+ spec:
+ containers: #定义容器信息
+ - name: yaml-webapi #容器名,与标签名要相同
+ image: repository.anxinyun.cn/anxinyun/api:137.21-08-17
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ env: #环境变量
+ - name: "ANXINCLOUD_PROXY_IOTA" #变量的名字
+ value: "iota-proxy-service:8091" #变量的值
+ - name: "ANXINCLOUD_HDFS_HTTP"
+ value: "http://10.8.30.155:50070"
+ - name: "ANXINCLOUD_KAFKA_BROKERS"
+ value: "kafka-service:9092"
+ - name: "ANXINCLOUD_ES_NODES_REST"
+ value: "es-service:9200"
+ - name: "ANXINCLOUD_DB"
+ value: "postgres://postgres:example@pg-service:5432/axy"
+ - name: "ANXINCLOUD_FC_UPLOAD_PATH"
+ value: "upload"
+ - name: "ANXINCLOUD_FC_LOCAL_ROOT_PATH"
+ value: "static"
+ - name: "ANXINCLOUD_FC_LOCAL_CHILD_PATH"
+ value: "child"
+ - name: "ANXINCLOUD_PYRPC_URL"
+ value: "rpc-service:25000"
+ - name: "PLATFORM_NAME"
+ value: "native"
+ ports:
+ - containerPort: 8080 #定义容器的端口
+ name: tcp-8080
+ command: ['node','server.js','--redis','redis-service:6379']
+ volumeMounts: #改容器内无法修改hosts 挂载出来修改
+ - name: vol-hosts #挂载设备的名字,与volumes[*].name 需要对应
+ mountPath: /etc/hosts # 容器的数据目录
+ - name: vol-static # 报表模板存储
+ mountPath: /var/app/static # 容器的数据目录
+ volumes: # volumes和container处于同一层级,别搞错了
+ - name: vol-hosts
+ hostPath:
+ path: /etc/hosts # 宿主机目录 覆盖容器内目录
+ - name: vol-static
+ hostPath:
+ path: /home/anxinlocal/static # 宿主机目录 覆盖容器内目录
+
+---
+apiVersion: v1 #指定API版本标签
+kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+metadata: #定义资源的元数据信息
+ name: webapi-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: webapi-s
+spec:
+ selector:
+ app: yaml-webapi-d #deployment标签
+ type: NodePort
+ ports:
+ - protocol: TCP
+ port: 8092 # 集群内访问
+ targetPort: 8080 #集群内 容器内端口
+ name: tcp-8080
+ nodePort: 30892 #集群外访问 范围30000-32767
diff --git a/本地化下沉-打包/offline离线安装脚本/appImage_yamls/anxin_webapi_webconsole/local-webconsole.yaml b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/anxin_webapi_webconsole/local-webconsole.yaml
new file mode 100644
index 0000000..b89e81b
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/anxin_webapi_webconsole/local-webconsole.yaml
@@ -0,0 +1,69 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: webconsole-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: yaml-webconsole-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yaml-webconsole-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yaml-webconsole-d
+ spec:
+ containers: #定义容器信息
+ - name: yaml-webconsole #容器名,与标签名要相同
+ image: repository.anxinyun.cn/anxinyun/console-web:75.21-06-10
+ #image: repository.anxinyun.cn/anxinyun/console:latest #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ env: #环境变量
+ - name: ANXINCLOUD_API
+ value: http://webapi-service:8092
+ - name: ANXINCLOUD_IOTA_API
+ value: http://iota-webapi-service:9080
+ - name: ANXINCLOUD_HDFS_HTTP
+ value: http://10.8.30.155:50070
+ - name: ANXINCLOUD_QINIU_AK
+ value: 5XrM4wEB9YU6RQwT64sPzzE6cYFKZgssdP5Kj3uu
+ - name: ANXINCLOUD_QINIU_SK
+ value: w6j2ixR_i-aelc6I7S3HotKIX-ukMzcKmDfH6-M5
+ - name: ANXINCLOUD_QINIU_BUCKET_RESOURCE
+ value: anxinyun-test
+ - name: ANXINCLOUD_QINIU_DOMAIN_QNDMN_RESOURCE
+ value: http://test.resources.anxinyun.cn
+ - name: "ANXINCLOUD_IOTA_AUTH"
+ value: "MGU0MmFmZTZlNzEwNTVjZWEyNWZjMDA4M2Q4MTY0MjZjNTg2N2I4OTozNWUwYWRmMGEzMDM0NWEzMTA0YTA2YmI4YTY0ODQwMGQ5NGE5YzIw"
+ ports:
+ - containerPort: 8080 #定义容器的端口
+ name: tcp-8080
+ command: ['node','server.js','-p','8080']
+ volumeMounts: #改容器内无法修改hosts 挂载出来修改
+ - name: vol-hosts #挂载设备的名字,与volumes[*].name 需要对应
+ mountPath: /etc/hosts # 容器的数据目录
+ volumes: # volumes和container处于同一层级,别搞错了
+ - name: vol-hosts
+ hostPath:
+ path: /etc/hosts # 宿主机目录 覆盖容器内目录 间接统一hosts
+
+---
+apiVersion: v1 #指定API版本标签
+kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+metadata: #定义资源的元数据信息
+ name: webconsole-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: webconsole-s
+spec:
+ selector:
+ app: yaml-webconsole-d #deployment标签
+ type: NodePort
+ ports:
+ - protocol: TCP
+ port: 8072 # 集群内访问
+ targetPort: 8080 #集群内 容器内端口
+ name: tcp-8080
+ nodePort: 30872 #集群外访问 范围30000-32767
diff --git a/本地化下沉-打包/offline离线安装脚本/appImage_yamls/anxin_webapi_webconsole/报表模板static/daily.xlsx b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/anxin_webapi_webconsole/报表模板static/daily.xlsx
new file mode 100644
index 0000000..920ec6b
Binary files /dev/null and b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/anxin_webapi_webconsole/报表模板static/daily.xlsx differ
diff --git a/本地化下沉-打包/offline离线安装脚本/appImage_yamls/anxin_webproject/local-webproject.yaml b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/anxin_webproject/local-webproject.yaml
new file mode 100644
index 0000000..4ac911d
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/anxin_webproject/local-webproject.yaml
@@ -0,0 +1,73 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: webproject-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: yaml-webproject-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yaml-webproject-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yaml-webproject-d
+ spec:
+ containers: #定义容器信息
+ - name: yaml-webproject #容器名,与标签名要相同
+ image: repository.anxinyun.cn/anxinyun/project:latest #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ env: #环境变量
+ - name: "ANXINCLOUD_API" #变量的名字
+ value: "http://webapi-service:8092" #变量的值
+ - name: "ANXINCLOUD_PROXY_IOTA"
+ value: "iota-proxy-service:8091"
+ - name: "ANXINCLOUD_HDFS_HTTP"
+ value: "http://10.8.30.155:50070"
+ #本地化 图片不存在 七牛#
+ - name: "ANXINCLOUD_QINIU_AK"
+ value: "5XrM4wEB9YU6RQwT64sPzzE6cYFKZgssdP5Kj3uu"
+ - name: "ANXINCLOUD_QINIU_SK"
+ value: "w6j2ixR_i-aelc6I7S3HotKIX-ukMzcKmDfH6-M5"
+ - name: "ANXINCLOUD_QINIU_BUCKET_RESOURCE"
+ value: "anxinyun-test"
+ - name: "ANXINCLOUD_QINIU_DOMAIN_QNDMN_RESOURCE"
+ value: "http://test.resources.anxinyun.cn"
+ - name: "ANXINCLOUD_FC_UPLOAD_PATH"
+ value: "upload"
+ - name: "ANXINCLOUD_FC_LOCAL_ROOT_PATH"
+ value: "static"
+ - name: "ANXINCLOUD_FC_LOCAL_CHILD_PATH"
+ value: "child"
+ ports:
+ - containerPort: 8080 #定义容器的端口
+ name: tcp-8080
+ command: ['node','server.js','-p','8080']
+ volumeMounts: #改容器内无法修改hosts 挂载出来修改
+ - name: vol-hosts #挂载设备的名字,与volumes[*].name 需要对应
+ mountPath: /etc/hosts # 容器的数据目录
+ volumes: # volumes和container处于同一层级,别搞错了
+ - name: vol-hosts
+ hostPath:
+ path: /etc/hosts # 宿主机目录 覆盖容器内目录 间接统一hosts
+
+---
+apiVersion: v1 #指定API版本标签
+kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+metadata: #定义资源的元数据信息
+ name: webproject-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: webproject-s
+spec:
+ selector:
+ app: yaml-webproject-d #deployment标签
+ type: NodePort
+ ports:
+ - protocol: TCP
+ port: 8073 # 集群内访问
+ targetPort: 8080 #集群内 容器内端口
+ name: tcp-8080
+ nodePort: 30873 #集群外访问 范围30000-32767
diff --git a/本地化下沉-打包/offline离线安装脚本/appImage_yamls/anxin_webproject/readme.txt b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/anxin_webproject/readme.txt
new file mode 100644
index 0000000..ff63293
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/appImage_yamls/anxin_webproject/readme.txt
@@ -0,0 +1 @@
+用户侧 项目 访问
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_tars/readme.txt b/本地化下沉-打包/offline离线安装脚本/baseImage_tars/readme.txt
new file mode 100644
index 0000000..577d8d5
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_tars/readme.txt
@@ -0,0 +1,3 @@
+安心云 基础 镜像 7个
+
+make-base-tar.sh 脚本执行 后存入当前文件夹
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/docker-compose参考.yml b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/docker-compose参考.yml
new file mode 100644
index 0000000..59276e7
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/docker-compose参考.yml
@@ -0,0 +1,65 @@
+version: '3'
+services:
+ es:
+ image: repository.anxinyun.cn/base-images/es:6.8.2-3.21-04-21
+ container_name: fs_elasticsearch
+ environment:
+ - "cluster.name=elasticsearch"
+ - "discovery.type=single-node"
+ - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
+ volumes:
+ - /data/es/data:/usr/share/elasticsearch/data
+ ports:
+ - 9200:9200
+
+
+ redis:
+ image: repository.anxinyun.cn/base-images/redis:5-1.21-04-13
+ container_name: fs_redis
+ volumes:
+ - /data/redis/data:/data
+ - /data/redis/logs:/logs
+ command:
+ /bin/sh -c "redis-server --protected-mode 'no' --appendonly yes"
+ ports:
+ - 6379:6379
+
+ emqx:
+ image: emqx/emqx
+ container_name: fs_emqx
+ ports:
+ - 18083:18083
+ - 1883:1883
+
+ kafka:
+ image: repository.anxinyun.cn/base-images/kafka-alpine:2.11-1.21-04-19
+ container_name: fs_kafka
+ ports:
+ - 9092:9092
+ - 2182:2182
+
+ pg:
+ image: repository.anxinyun.cn/base-images/pg:12-1.21-04-14
+ container_name: fs_pg
+ environment:
+ - "POSTGRES_PASSWORD=example"
+ volumes:
+ - /data/pg/data:/var/lib/postgresql/data
+ - ./script:/script
+ ports:
+ - 5432:5432
+ adminer:
+ image: adminer
+ restart: always
+ ports:
+ - 8081:8080
+ kibana:
+ image: kibana:6.8.2
+ environment:
+ - "ELASTICSEARCH_HOSTS=http://es:9200"
+ ports:
+ - 5601:5601
+networks:
+ default:
+ external:
+ name: fs-network
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/local-ES.yaml b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/local-ES.yaml
new file mode 100644
index 0000000..10417ff
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/local-ES.yaml
@@ -0,0 +1,55 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: es-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: yamles-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yamles-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yamles-d
+ spec:
+ containers: #定义容器信息
+ - name: yamles #容器名,与标签名要相同
+ image: repository.anxinyun.cn/base-images/es:6.8.2-3.21-04-21 #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ env: #环境变量
+ - name: "cluster.name" #变量的名字
+ value: "elasticsearch" #变量的值
+ - name: "discovery.type"
+ value: "single-node"
+ - name: "ES_JAVA_OPTS"
+ value: "-Xms512m -Xmx512m"
+ ports:
+ - containerPort: 9200 #定义容器的对外端口
+ volumeMounts:
+ - name: vol-data #挂载设备的名字,与volumes[*].name 需要对应
+ mountPath: /usr/share/elasticsearch/data # 容器的数据目录
+ volumes: # volumes和container处于同一层级,别搞错了
+ - name: vol-data
+ hostPath:
+ path: /home/anxinlocal/esdata # 宿主机目录
+
+---
+apiVersion: v1 #指定API版本标签
+kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+metadata: #定义资源的元数据信息
+ name: es-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: es-s
+spec:
+ selector:
+ app: yamles-d #deployment标签
+ type: NodePort
+ ports:
+ - protocol: TCP
+ port: 9200 # 集群内访问
+ targetPort: 9200 #集群内 容器内端口
+ nodePort: 30092 #集群外访问 范围30000-32767
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/local-kabana.yaml b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/local-kabana.yaml
new file mode 100644
index 0000000..9f39d67
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/local-kabana.yaml
@@ -0,0 +1,44 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: kibana-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: kibana-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yamlkibana-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yamlkibana-d
+ spec:
+ containers: #定义容器信息
+ - name: yamlkibana #容器名,与标签名要相同
+ image: repository.anxinyun.cn/base-images/kibana:6.8.2 #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ env: #环境变量
+ - name: "ELASTICSEARCH_HOSTS" #变量的名字
+ value: "http://es-service:9200" #变量的值 注意这里面的es-service 是es的yaml service的name
+ ports:
+ - containerPort: 5601 #定义容器的对外端口
+
+---
+apiVersion: v1 #指定API版本标签
+kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+metadata: #定义资源的元数据信息
+ name: kibana-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: kibana-s
+spec:
+ selector:
+ app: yamlkibana-d #deployment标签
+ type: NodePort
+ ports:
+ - protocol: TCP
+ port: 5601 # 集群内访问
+ targetPort: 5601 #集群内 容器内端口
+ nodePort: 30601 #集群外访问 范围30000-32767
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_aggregation b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_aggregation
new file mode 100644
index 0000000..ef06d8a
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_aggregation
@@ -0,0 +1 @@
+{"settings":{"index":{"refresh_interval":"300s","number_of_shards":"1","number_of_replicas":0,"translog":{"sync_interval":"60s","durability":"async"}}},"mappings":{"_doc":{"dynamic":"false","_all":{"enabled":false},"properties":{"change_data":{"dynamic":"true","properties":{"diffX":{"type":"float"},"direction":{"type":"float"},"displacement":{"type":"float"},"force":{"type":"float"},"humidity":{"type":"float"},"noise":{"type":"float"},"pm10":{"type":"float"},"pm25":{"type":"float"},"speed":{"type":"float"},"temperature":{"type":"float"},"total":{"type":"float"},"waterLevel":{"type":"float"},"x":{"type":"float"},"y":{"type":"float"},"z":{"type":"float"}}},"data":{"dynamic":"true","properties":{"alarm_status":{"type":"float"},"aqi":{"type":"long"},"aqiLevel":{"type":"long"},"bri":{"type":"float"},"co":{"type":"float"},"co_24h":{"type":"float"},"co_24h_iaqi":{"type":"long"},"co_iaqi":{"type":"long"},"diffX":{"type":"float"},"direction":{"type":"float"},"displacement":{"type":"float"},"do":{"type":"float"},"do_24h":{"type":"float"},"end_state":{"type":"long"},"end_time":{"type":"date"},"female_in":{"type":"float"},"female_out":{"type":"float"},"female_stay":{"type":"float"},"force":{"type":"float"},"frequency":{"type":"float"},"from_state":{"type":"long"},"from_time":{"type":"date"},"humidity":{"type":"float"},"inflow":{"type":"float"},"latitude":{"type":"float"},"longitude":{"type":"float"},"male_in":{"type":"float"},"male_out":{"type":"float"},"male_stay":{"type":"float"},"no2":{"type":"float"},"no2_24h":{"type":"float"},"no2_24h_iaqi":{"type":"long"},"no2_iaqi":{"type":"long"},"noise":{"type":"float"},"o3":{"type":"float"},"o3_1h_24h":{"type":"float"},"o3_1h_24h_iaqi":{"type":"long"},"o3_1h_iaqi":{"type":"long"},"o3_8h":{"type":"float"},"o3_8h_24h":{"type":"float"},"o3_8h_24h_iaqi":{"type":"long"},"o3_8h_iaqi":{"type":"long"},"o3_iaqi":{"type":"long"},"on":{"type":"float"},"on_duration":{"type":"long"},"online":{"type":"float"},"outflow":{"type":"float"},"pEnergy":{"type":"float"},"ph":{"type":"float"},"ph_24h":{"type":"float"},"pm10":{"type":"float"},"pm10_24h":{"type":"float"},"pm10_24h_iaqi":{"type":"long"},"pm10_iaqi":{"type":"long"},"pm25":{"type":"float"},"pm2_5":{"type":"float"},"pm2_5_24h":{"type":"float"},"pm2_5_24h_iaqi":{"type":"long"},"pm2_5_iaqi":{"type":"long"},"primaryPollutant":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"rainfall":{"type":"float"},"runtime":{"type":"float"},"so2":{"type":"float"},"so2_24h":{"type":"float"},"so2_24h_iaqi":{"type":"long"},"so2_iaqi":{"type":"long"},"speed":{"type":"float"},"tds":{"type":"float"},"tds_24h":{"type":"float"},"temp":{"type":"float"},"temp_24h":{"type":"float"},"temperature":{"type":"float"},"total":{"type":"float"},"turb":{"type":"float"},"turb_24h":{"type":"float"},"vocs":{"type":"float"},"vocs_24h":{"type":"float"},"voltage":{"type":"float"},"waterLevel":{"type":"float"},"wqLevel":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"x":{"type":"float"},"y":{"type":"float"},"z":{"type":"float"}}},"date":{"type":"date"},"method":{"type":"keyword"},"sensor":{"type":"long"},"type":{"type":"keyword"}}}}}
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_alarm_details b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_alarm_details
new file mode 100644
index 0000000..5f99334
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_alarm_details
@@ -0,0 +1 @@
+{"settings":{"index":{"refresh_interval":"10s","number_of_shards":"1","number_of_replicas":0,"translog":{"sync_interval":"60s","durability":"async"}}},"mappings":{"_doc":{"dynamic":"false","_all":{"enabled":false},"properties":{"alarmId":{"type":"keyword"},"alarmRange":{"type":"integer"},"alarm_code":{"type":"keyword"},"alarm_pic":{"type":"text","norms":false},"alarm_state":{"type":"integer"},"content":{"norms":false,"type":"text"},"current_level":{"type":"integer"},"sponsor":{"type":"keyword"},"time":{"type":"date","format":"yyyy-MM-dd'T'HH:mm:ss.SSSZ"}}}}}
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_alarms b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_alarms
new file mode 100644
index 0000000..675192e
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_alarms
@@ -0,0 +1 @@
+{"settings":{"index":{"refresh_interval":"10s","number_of_shards":"1","number_of_replicas":0,"translog":{"sync_interval":"60s","durability":"async"}}},"mappings":{"_doc":{"dynamic":"false","_all":{"enabled":false},"properties":{"alarm_code":{"type":"keyword"},"alarm_content":{"norms":false,"type":"text"},"alarm_count":{"type":"integer"},"alarm_type_code":{"type":"keyword"},"alarm_type_id":{"type":"integer"},"current_level":{"type":"integer"},"end_time":{"type":"date","format":"yyyy-MM-dd'T'HH:mm:ss.SSSZ"},"initial_level":{"type":"integer"},"source_id":{"type":"keyword"},"source_name":{"type":"text"},"source_type_id":{"type":"integer"},"start_time":{"type":"date","format":"yyyy-MM-dd'T'HH:mm:ss.SSSZ"},"state":{"type":"integer"},"structure_id":{"type":"integer"}}}}}
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_diagnosis b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_diagnosis
new file mode 100644
index 0000000..46a77a8
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_diagnosis
@@ -0,0 +1 @@
+{"settings":{"index":{"refresh_interval":"300s","number_of_shards":"1","number_of_replicas":0,"translog":{"sync_interval":"60s","durability":"async"}}},"mappings":{"_doc":{"dynamic":"false","_all":{"enabled":false},"properties":{"collect_time":{"type":"date","format":"date_time || yyyy-MM-dd HH:mm:ss"},"data":{"type":"text","norms":false,"fields":{"keyword":{"type":"keyword","ignore_above":512}}},"iota_device":{"type":"keyword"}}}}}
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_raws b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_raws
new file mode 100644
index 0000000..b07598f
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_raws
@@ -0,0 +1 @@
+{"settings":{"index":{"refresh_interval":"30s","number_of_shards":"1","number_of_replicas":0,"translog":{"sync_interval":"60s","durability":"async"}}},"mappings":{"_doc":{"dynamic":"false","_all":{"enabled":false},"properties":{"collect_time":{"type":"date","format":"date_time || yyy-MM-dd HH:mm:ss"},"create_time":{"type":"date","format":"date_time || yyyy-MM-dd HH:mm:ss"},"data":{"dynamic":"true","properties":{"Angle":{"type":"long"},"C2H5OH":{"type":"float"},"CH4":{"type":"long"},"DI1":{"type":"long"},"DI2":{"type":"long"},"DI3":{"type":"long"},"DI4":{"type":"long"},"DI5":{"type":"long"},"DI6":{"type":"long"},"DI7":{"type":"long"},"DI8":{"type":"long"},"H2S":{"type":"float"},"Height":{"type":"float"},"Heightdeg":{"type":"float"},"Moment":{"type":"long"},"Multiple":{"type":"long"},"NH3":{"type":"long"},"OU":{"type":"long"},"Obliguity":{"type":"long"},"Obliquitydeg":{"type":"float"},"Odor":{"type":"float"},"PH":{"type":"float"},"PM10":{"type":"long"},"PM25":{"type":"long"},"RRange":{"type":"float"},"Radiusdeg":{"type":"float"},"RatedWeight":{"type":"long"},"Rotationdeg":{"type":"float"},"Speeddeg":{"type":"long"},"TSP":{"type":"long"},"Temp":{"type":"float"},"VOC":{"type":"float"},"VOCS":{"type":"float"},"Weight":{"type":"long"},"Weightdeg":{"type":"float"},"WindLevel":{"type":"long"},"WindSpeed":{"type":"float"},"_acq_number":{"type":"long"},"ack":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"active_power":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"addDate":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"addUser":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"addr":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"address":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"advName":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"alarm":{"type":"long"},"alarmCode":{"type":"long"},"alarm_id":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"alarm_status":{"type":"long"},"allRotationAngle":{"type":"long"},"am":{"type":"float"},"angle":{"type":"float"},"angleX":{"type":"float"},"angleY":{"type":"float"},"anglex":{"type":"float"},"angley":{"type":"float"},"arch":{"type":"long"},"axieSpeed":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"axieWeight":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"axisNum":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"axisSpeed":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"axisWeight":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"axisWeights":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"axisnum":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"azimuthofWind":{"type":"float"},"bri":{"type":"long"},"cableforce":{"type":"long"},"carType":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"cidCode":{"type":"long"},"cidMessage":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"city":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"co":{"type":"float"},"conductivity":{"type":"long"},"controlState":{"type":"long"},"count":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"crossRoad":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"ctemp":{"type":"float"},"current":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"curweight":{"type":"float"},"dblControlZigbeeLamp":{"type":"boolean"},"direction":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"directionAngle":{"type":"long"},"displacement":{"type":"float"},"distance":{"type":"float"},"divisionId":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"doorState":{"type":"long"},"easting":{"type":"float"},"ein":{"type":"float"},"electric":{"type":"long"},"elevationAngle":{"type":"long"},"elongationIndicator":{"type":"float"},"enable_alarm":{"type":"long"},"female_in":{"type":"long"},"female_out":{"type":"long"},"female_stay":{"type":"long"},"floor":{"type":"long"},"force":{"type":"float"},"frequency":{"type":"float"},"gatewayId":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"gatewayName":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"gateway_addr":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"grossWeight":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"h2s":{"type":"long"},"h641mi":{"type":"float"},"heartrate":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"height":{"type":"float"},"high11":{"type":"long"},"high12":{"type":"long"},"high2":{"type":"long"},"hourRainfall":{"type":"long"},"hum":{"type":"long"},"humi":{"type":"float"},"humid":{"type":"float"},"humidity":{"type":"float"},"humidy":{"type":"long"},"inflow":{"type":"long"},"inputState":{"type":"long"},"intensity":{"type":"long"},"interval":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"isOnline":{"type":"long"},"isReply":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"isTrack":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"join":{"type":"long"},"lampControllerType":{"type":"long"},"lampPoleNumber":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"lampPoleType":{"type":"long"},"lamp_ctrl_id":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"lamp_ctrl_type":{"type":"long"},"lamp_post_type":{"type":"long"},"lang":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"lat":{"type":"float"},"latitude":{"type":"float"},"length":{"type":"float"},"level":{"type":"long"},"licence":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"load":{"type":"float"},"loadValue":{"type":"long"},"lon":{"type":"float"},"long":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"longitude":{"type":"float"},"ltype":{"type":"long"},"lvdt":{"type":"float"},"male_in":{"type":"long"},"male_out":{"type":"long"},"male_stay":{"type":"long"},"maxnf":{"type":"float"},"minnf":{"type":"float"},"modifyDate":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"modifyUser":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"moment":{"type":"long"},"name":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"nh3":{"type":"long"},"no2":{"type":"float"},"node":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"noise":{"type":"long"},"northing":{"type":"float"},"o3":{"type":"float"},"obliguityX":{"type":"long"},"obliguityY":{"type":"long"},"obliquity":{"type":"float"},"on":{"type":"long"},"online":{"type":"long"},"orgName":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"organizationId":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"ou":{"type":"long"},"outflow":{"type":"long"},"overload":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"oxy":{"type":"float"},"oxygen":{"type":"long"},"p100":{"type":"float"},"pEnergy":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"peccancy":{"type":"long"},"peopleCnt":{"type":"long"},"ph":{"type":"long"},"physicalvalue":{"type":"float"},"pitstate":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"pm":{"type":"float"},"pm0":{"type":"float"},"pm10":{"type":"long"},"pm100":{"type":"long"},"pm25":{"type":"long"},"pm2_5":{"type":"float"},"pmpm10":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"port_id":{"type":"long"},"power":{"type":"long"},"powerQuantity":{"type":"long"},"pre_on":{"type":"long"},"pre_refresh_time":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"pressure":{"type":"float"},"prjName":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"projectId":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"ptype":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"qEnergy":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"radius":{"type":"float"},"rain":{"type":"long"},"rainFall":{"type":"long"},"rainfall":{"type":"long"},"range":{"type":"float"},"reactive_power":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"readingNumber":{"type":"long"},"recordTime":{"type":"date"},"refresh_time":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"rotation":{"type":"long"},"rotationAngle":{"type":"float"},"runoff":{"type":"long"},"runtime":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"sEnergy":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"safeLoad":{"type":"long"},"sectionId":{"type":"long"},"settling":{"type":"float"},"signals":{"type":"long"},"sleeptype":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"so2":{"type":"float"},"solarRadiation":{"type":"long"},"speed":{"type":"float"},"speedofWind":{"type":"float"},"ssagee":{"type":"float"},"stateCodestr":{"type":"long"},"stateMessagestr":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"stemp":{"type":"long"},"stepvalue":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"stringFactor":{"type":"long"},"stype":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"t65mp":{"type":"float"},"temp":{"type":"float"},"temperature":{"type":"float"},"temperture":{"type":"float"},"temprature":{"type":"long"},"time":{"type":"long"},"timeBegin":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"timeEnd":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"torquePercent":{"type":"long"},"total":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"totalPhosphorus":{"type":"float"},"trash":{"type":"long"},"tunnelface":{"type":"long"},"turbidity":{"type":"long"},"type":{"type":"long"},"typeName":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"uid":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"value":{"type":"float"},"voc":{"type":"long"},"voltage":{"type":"float"},"warning":{"type":"long"},"waterLevel":{"type":"float"},"waterLever":{"type":"float"},"waterPresure":{"type":"long"},"waterTemperature":{"type":"float"},"waterlevel":{"type":"float"},"weight":{"type":"long"},"wind":{"type":"long"},"windDirection":{"type":"long"},"windForce":{"type":"long"},"windLevel":{"type":"long"},"windSpeed":{"type":"float"},"winddir":{"type":"long"},"winddirection":{"type":"long"},"windspeed":{"type":"float"},"x":{"type":"float"},"xDegree":{"type":"float"},"y":{"type":"long"},"yDegree":{"type":"float"},"z":{"type":"float"}}},"iota_device":{"type":"keyword"},"iota_device_name":{"type":"text","norms":false,"fields":{"keyword":{"type":"keyword","ignore_above":100}}},"structId":{"type":"long"}}}}}
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_rt_aggregation b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_rt_aggregation
new file mode 100644
index 0000000..ef06d8a
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_rt_aggregation
@@ -0,0 +1 @@
+{"settings":{"index":{"refresh_interval":"300s","number_of_shards":"1","number_of_replicas":0,"translog":{"sync_interval":"60s","durability":"async"}}},"mappings":{"_doc":{"dynamic":"false","_all":{"enabled":false},"properties":{"change_data":{"dynamic":"true","properties":{"diffX":{"type":"float"},"direction":{"type":"float"},"displacement":{"type":"float"},"force":{"type":"float"},"humidity":{"type":"float"},"noise":{"type":"float"},"pm10":{"type":"float"},"pm25":{"type":"float"},"speed":{"type":"float"},"temperature":{"type":"float"},"total":{"type":"float"},"waterLevel":{"type":"float"},"x":{"type":"float"},"y":{"type":"float"},"z":{"type":"float"}}},"data":{"dynamic":"true","properties":{"alarm_status":{"type":"float"},"aqi":{"type":"long"},"aqiLevel":{"type":"long"},"bri":{"type":"float"},"co":{"type":"float"},"co_24h":{"type":"float"},"co_24h_iaqi":{"type":"long"},"co_iaqi":{"type":"long"},"diffX":{"type":"float"},"direction":{"type":"float"},"displacement":{"type":"float"},"do":{"type":"float"},"do_24h":{"type":"float"},"end_state":{"type":"long"},"end_time":{"type":"date"},"female_in":{"type":"float"},"female_out":{"type":"float"},"female_stay":{"type":"float"},"force":{"type":"float"},"frequency":{"type":"float"},"from_state":{"type":"long"},"from_time":{"type":"date"},"humidity":{"type":"float"},"inflow":{"type":"float"},"latitude":{"type":"float"},"longitude":{"type":"float"},"male_in":{"type":"float"},"male_out":{"type":"float"},"male_stay":{"type":"float"},"no2":{"type":"float"},"no2_24h":{"type":"float"},"no2_24h_iaqi":{"type":"long"},"no2_iaqi":{"type":"long"},"noise":{"type":"float"},"o3":{"type":"float"},"o3_1h_24h":{"type":"float"},"o3_1h_24h_iaqi":{"type":"long"},"o3_1h_iaqi":{"type":"long"},"o3_8h":{"type":"float"},"o3_8h_24h":{"type":"float"},"o3_8h_24h_iaqi":{"type":"long"},"o3_8h_iaqi":{"type":"long"},"o3_iaqi":{"type":"long"},"on":{"type":"float"},"on_duration":{"type":"long"},"online":{"type":"float"},"outflow":{"type":"float"},"pEnergy":{"type":"float"},"ph":{"type":"float"},"ph_24h":{"type":"float"},"pm10":{"type":"float"},"pm10_24h":{"type":"float"},"pm10_24h_iaqi":{"type":"long"},"pm10_iaqi":{"type":"long"},"pm25":{"type":"float"},"pm2_5":{"type":"float"},"pm2_5_24h":{"type":"float"},"pm2_5_24h_iaqi":{"type":"long"},"pm2_5_iaqi":{"type":"long"},"primaryPollutant":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"rainfall":{"type":"float"},"runtime":{"type":"float"},"so2":{"type":"float"},"so2_24h":{"type":"float"},"so2_24h_iaqi":{"type":"long"},"so2_iaqi":{"type":"long"},"speed":{"type":"float"},"tds":{"type":"float"},"tds_24h":{"type":"float"},"temp":{"type":"float"},"temp_24h":{"type":"float"},"temperature":{"type":"float"},"total":{"type":"float"},"turb":{"type":"float"},"turb_24h":{"type":"float"},"vocs":{"type":"float"},"vocs_24h":{"type":"float"},"voltage":{"type":"float"},"waterLevel":{"type":"float"},"wqLevel":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"x":{"type":"float"},"y":{"type":"float"},"z":{"type":"float"}}},"date":{"type":"date"},"method":{"type":"keyword"},"sensor":{"type":"long"},"type":{"type":"keyword"}}}}}
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_sentiment b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_sentiment
new file mode 100644
index 0000000..c983588
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_sentiment
@@ -0,0 +1 @@
+{"settings":{"index":{"refresh_interval":"300s","number_of_shards":"1","number_of_replicas":0,"translog":{"sync_interval":"60s","durability":"async"}}},"mappings":{"_doc":{"dynamic":"false","_all":{"enabled":false},"properties":{"createTime":{"type":"date","format":"date_time || yyyy-MM-dd HH:mm:ss"},"evaluate":{"type":"keyword"},"evaluateTime":{"type":"date","format":"date_time || yyyy-MM-dd HH:mm:ss"},"id":{"type":"keyword"},"job":{"type":"keyword"},"job_id":{"type":"keyword"},"orderNum":{"type":"keyword"},"questionAddress":{"type":"nested","properties":{"sort":{"type":"long"},"t_report_address_id":{"type":"long"},"t_report_address_name":{"type":"text","norms":false,"fields":{"keyword":{"type":"keyword","ignore_above":256}}},"t_report_address_pid":{"type":"long"}}},"questionLocate":{"type":"keyword"},"real_name":{"type":"keyword"},"score":{"type":"keyword"},"status":{"type":"keyword"},"t_job_name":{"type":"keyword"},"t_organization_name":{"type":"keyword"},"t_report_id":{"type":"keyword"},"t_report_name":{"type":"keyword"},"title":{"type":"keyword"},"username":{"type":"keyword"}}}}}
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_themes b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_themes
new file mode 100644
index 0000000..3825bf7
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_themes
@@ -0,0 +1 @@
+{"settings":{"index":{"refresh_interval":"30s","number_of_shards":"1","number_of_replicas":0,"translog":{"sync_interval":"60s","durability":"async"}}},"mappings":{"_doc":{"dynamic":"false","_all":{"enabled":false},"properties":{"batchid":{"type":"keyword"},"collect_time":{"type":"date","format":"date_time || yyy-MM-dd HH:mm:ss"},"create_time":{"type":"date","format":"date_time || yyyy-MM-dd HH:mm:ss"},"data":{"dynamic":"true","properties":{"C2H5OH":{"type":"float"},"CH4":{"type":"float"},"DI1":{"type":"float"},"DI2":{"type":"float"},"DI3":{"type":"float"},"H2S":{"type":"float"},"NH3":{"type":"float"},"OU":{"type":"float"},"Odor":{"type":"float"},"PM10":{"type":"float"},"PM2":{"properties":{"5":{"type":"float"}}},"VOC":{"type":"float"},"VOCS":{"type":"float"},"address":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"alarm":{"type":"float"},"alarm_status":{"type":"float"},"allRotationAngle":{"type":"float"},"angle":{"type":"float"},"arch":{"type":"float"},"arrAcc":{"type":"float"},"axleCount":{"type":"float"},"axleLoad":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"bri":{"type":"float"},"cableForce":{"type":"float"},"carSpeed":{"type":"float"},"city":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"co":{"type":"float"},"controlState":{"type":"float"},"crack":{"type":"float"},"deflection":{"type":"double"},"diffX":{"type":"float"},"direction":{"type":"float"},"directionAngle":{"type":"float"},"displacement":{"type":"float"},"distance":{"type":"float"},"do":{"type":"float"},"doorState":{"type":"float"},"elevationAngle":{"type":"float"},"expansion":{"type":"float"},"female_in":{"type":"float"},"female_out":{"type":"float"},"female_stay":{"type":"float"},"floor":{"type":"float"},"flow":{"type":"long"},"force":{"type":"float"},"frequency":{"type":"float"},"gatewayName":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"gender":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"gravity":{"type":"float"},"h":{"type":"float"},"h2s":{"type":"float"},"heartrate":{"type":"float"},"height":{"type":"float"},"high1":{"type":"long"},"high10":{"type":"long"},"high11":{"type":"long"},"high12":{"type":"long"},"high13":{"type":"long"},"high2":{"type":"long"},"high3":{"type":"long"},"high4":{"type":"long"},"high5":{"type":"long"},"high6":{"type":"long"},"high7":{"type":"long"},"high8":{"type":"long"},"high9":{"type":"long"},"humidity":{"type":"float"},"humility":{"type":"double"},"inflow":{"type":"float"},"inputState":{"type":"float"},"lampPoleNumber":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"lane":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"lang":{"type":"float"},"lat":{"type":"float"},"latitude":{"type":"float"},"license":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"load":{"type":"float"},"lon":{"type":"float"},"long":{"type":"float"},"longitude":{"type":"float"},"male_in":{"type":"float"},"male_out":{"type":"float"},"male_stay":{"type":"float"},"max":{"type":"double"},"min":{"type":"double"},"moment":{"type":"float"},"nh3":{"type":"float"},"no2":{"type":"float"},"noise":{"type":"float"},"o3":{"type":"float"},"obliguityX":{"type":"float"},"obliguityY":{"type":"float"},"obliquity":{"type":"float"},"on":{"type":"float"},"online":{"type":"float"},"outflow":{"type":"float"},"overload":{"type":"float"},"pEnergy":{"type":"float"},"peccancy":{"type":"float"},"peopleCnt":{"type":"float"},"ph":{"type":"float"},"pm10":{"type":"float"},"pm100":{"type":"float"},"pm25":{"type":"float"},"pm2_5":{"type":"float"},"power":{"type":"float"},"powerQuantity":{"type":"float"},"ppv":{"type":"double"},"pressure":{"type":"float"},"pv":{"type":"double"},"rainfall":{"type":"float"},"range":{"type":"float"},"runtime":{"type":"float"},"safeLoad":{"type":"float"},"seepage":{"type":"float"},"settling":{"type":"float"},"signals":{"type":"float"},"so2":{"type":"float"},"solarRadiation":{"type":"float"},"soundLevel":{"type":"double"},"speed":{"type":"float"},"state":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"stateCode":{"type":"float"},"stepvalue":{"type":"float"},"strOverload":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"strain":{"type":"float"},"stress":{"type":"float"},"stringFactor":{"type":"float"},"tds":{"type":"float"},"temp":{"type":"float"},"temperature":{"type":"double"},"torquePercent":{"type":"float"},"total":{"type":"float"},"totalPhosphorus":{"type":"float"},"trms":{"type":"double"},"tunnelface":{"type":"float"},"turb":{"type":"float"},"voc":{"type":"float"},"voltage":{"type":"float"},"volume":{"type":"float"},"warning":{"type":"float"},"waterLevel":{"type":"float"},"weight":{"type":"float"},"weightPercent":{"type":"float"},"windLevel":{"type":"float"},"windSpeed":{"type":"float"},"x":{"type":"float"},"xTotal":{"type":"float"},"y":{"type":"float"},"yTotal":{"type":"float"},"z":{"type":"float"}}},"factor":{"type":"integer"},"factor_proto_code":{"type":"keyword"},"iota_device":{"type":"keyword"},"sensor":{"type":"integer"},"sensor_name":{"type":"text","norms":false,"fields":{"keyword":{"type":"keyword","ignore_above":50}}},"structure":{"type":"long"}}}}}
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_vbraws b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_vbraws
new file mode 100644
index 0000000..0ec7ff4
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/native_vbraws
@@ -0,0 +1 @@
+{"settings":{"index":{"refresh_interval":"30s","number_of_shards":"1","number_of_replicas":0,"translog":{"sync_interval":"60s","durability":"async"}}},"mappings":{"_doc":{"dynamic":"strict","_all":{"enabled":false},"properties":{"collect_time":{"type":"date","format":"date_time || yyy-MM-dd HH:mm:ss"},"create_time":{"type":"date","format":"date_time || yyyy-MM-dd HH:mm:ss"},"data":{"dynamic":"strict","properties":{"raw":{"type":"float"}}},"iota_device":{"type":"keyword"},"iota_device_name":{"type":"text","norms":false,"fields":{"keyword":{"type":"keyword","ignore_above":100}}},"param":{"dynamic":"strict","properties":{"filterFreq":{"type":"float"},"gainAmplifier":{"type":"long"},"sampleFreq":{"type":"float"},"triggerType":{"type":"long"},"version":{"type":"long"}}},"structId":{"type":"long"}}}}}
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/secure_events b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/secure_events
new file mode 100644
index 0000000..99f5d97
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/secure_events
@@ -0,0 +1 @@
+{"settings":{"index":{"refresh_interval":"300s","number_of_shards":"1","number_of_replicas":0,"translog":{"sync_interval":"60s","durability":"async"}}},"mappings":{"_doc":{"dynamic":"false","_all":{"enabled":false},"properties":{"describe":{"type":"text","norms":false},"structId":{"type":"integer"},"time":{"type":"date","format":"date_time || yyy-MM-dd HH:mm:ss"},"title":{"type":"text","norms":false}}}}}
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/secure_patrols b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/secure_patrols
new file mode 100644
index 0000000..407bd8d
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/secure_patrols
@@ -0,0 +1 @@
+{"settings":{"index":{"refresh_interval":"300s","number_of_shards":"1","number_of_replicas":0,"translog":{"sync_interval":"60s","durability":"async"}}},"mappings":{"_doc":{"dynamic":"false","_all":{"enabled":false},"properties":{"picture":{"type":"text","norms":false,"fields":{"keyword":{"type":"keyword","ignore_above":256}}},"confirm":{"type":"boolean"},"content":{"type":"text","norms":false},"diseaseDescribe":{"type":"text","norms":false,"fields":{"keyword":{"type":"keyword","ignore_above":256}}},"diseaseId":{"type":"integer"},"level":{"type":"integer"},"levelDescribe":{"type":"text","norms":false,"fields":{"keyword":{"type":"keyword","ignore_above":256}}},"opinion":{"norms":false,"type":"text"},"parts":{"type":"integer"},"position":{"norms":false,"type":"text"},"result":{"type":"boolean"},"score":{"norms":false,"type":"text"},"structId":{"type":"integer"},"time":{"type":"date","format":"date_time || yyy-MM-dd HH:mm:ss"},"title":{"norms":false,"type":"text"},"weather":{"norms":false,"type":"text"}}}}}
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/secure_ranking b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/secure_ranking
new file mode 100644
index 0000000..d3230a3
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/secure_ranking
@@ -0,0 +1 @@
+{"settings":{"index":{"refresh_interval":"300s","number_of_shards":"1","number_of_replicas":0,"translog":{"sync_interval":"60s","durability":"async"}}},"mappings":{"_doc":{"dynamic":"false","_all":{"enabled":false},"properties":{"incline":{"type":"integer"},"inclineProposal":{"type":"text","norms":false},"inclineWeight":{"type":"double"},"inspection":{"type":"integer"},"inspectionProposal":{"type":"text","norms":false},"inspectionWeight":{"type":"double"},"score":{"type":"double"},"structId":{"type":"integer"},"time":{"type":"date","format":"date_time || yyy-MM-dd HH:mm:ss"},"vehicleFlow":{"type":"integer"},"vehicleFlowProposal":{"type":"text","norms":false},"vehicleFlowWeight":{"type":"double"},"vib":{"type":"integer"},"vibProposal":{"type":"text","norms":false},"vibWeight":{"type":"double"}}}}}
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/init_es_index.sh b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/init_es_index.sh
new file mode 100644
index 0000000..fdd0643
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/初始化ES索引/init_es_index.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+for i in $(ls ./baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/);
+do
+ setting=$(cat ./baseImage_yamls/启动ES和kibana/初始化ES索引/es_index/$i)
+ #30092 是k8s的es-service 的nodePort
+ curl -H "Content-Type: application/json" -XPUT "http://localhost:30092/$i" -d "$setting"
+done
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/命令.txt b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/命令.txt
new file mode 100644
index 0000000..3151e6e
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动ES和kibana/命令.txt
@@ -0,0 +1 @@
+microk8s.kubectl apply -f local-ES.yaml
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动emqx/local-emqx.yaml b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动emqx/local-emqx.yaml
new file mode 100644
index 0000000..214c032
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动emqx/local-emqx.yaml
@@ -0,0 +1,51 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: emqx-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: emqx-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yamlemqx-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yamlemqx-d
+ spec:
+ containers: #定义容器信息
+ - name: yamlemqx #容器名,与标签名要相同
+ image: docker.io/emqx/emqx:4.3.9 #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ ports:
+ - containerPort: 1883 #定义容器的端口
+ name: tcp-emqx
+ - containerPort: 18083 #定义容器的端口
+ name: tcp-emqx-web
+
+
+---
+apiVersion: v1 #指定API版本标签
+kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+metadata: #定义资源的元数据信息
+ name: emqx-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: emqx-s
+spec:
+ selector:
+ app: yamlemqx-d #deployment标签
+ type: NodePort #ClusterIP
+ ports:
+ - protocol: TCP
+ port: 1883 # 集群内访问
+ targetPort: 1883 #集群内 容器内端口
+ name: tcp-1883
+ nodePort: 30883 #集群外访问 范围30000-32767
+ - protocol: TCP
+ port: 18083 # 集群内访问
+ targetPort: 18083 #集群内 容器内端口
+ name: tcp-18083
+ nodePort: 30083 #集群外访问 范围30000-32767
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动kafka/kafka调试发送,接收.txt b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动kafka/kafka调试发送,接收.txt
new file mode 100644
index 0000000..d756395
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动kafka/kafka调试发送,接收.txt
@@ -0,0 +1,20 @@
+
+进入容器 容器名称按照实际的来
+microk8s.kubectl -n lk exec -it kafka-deployment-7f8f466fd8-47z22 bash
+
+生产 TOPIC 主题内容
+cd /usr/local/kafka/kafka_2.11-2.0.0
+
+ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TOPIC
+
+
+
+
+
+
+
+监听 TOPIC 主题内容
+cd /usr/local/kafka/kafka_2.11-2.0.0
+
+bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TOPIC --from-beginning
+
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动kafka/local-kafka.yaml b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动kafka/local-kafka.yaml
new file mode 100644
index 0000000..1ffdad4
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动kafka/local-kafka.yaml
@@ -0,0 +1,54 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: kafka-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: kafka-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yamlkafka-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yamlkafka-d
+ spec:
+ containers: #定义容器信息
+ - name: yamlkafka #容器名,与标签名要相同
+ image: repository.anxinyun.cn/base-images/kafka-alpine:2.11-1.21-04-19 #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ ports:
+ - containerPort: 9092 #定义容器的端口
+ name: tcp-kafka
+ - containerPort: 2181 #定义容器的端口
+ name: tcp-zookeeper
+ # hostNetwork: true
+ # dnsPolicy: ClusterFirstWithHostNet
+
+
+
+---
+apiVersion: v1 #指定API版本标签
+kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+metadata: #定义资源的元数据信息
+ name: kafka-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: kafka-s
+spec:
+ selector:
+ app: yamlkafka-d #deployment标签
+ type: NodePort #ClusterIP
+ ports:
+ - protocol: TCP
+ port: 9092 # 集群内访问
+ targetPort: 9092 #集群内 容器内端口
+ name: tcp-9092
+ nodePort: 30992 #集群外访问 范围30000-32767
+ - protocol: TCP
+ port: 2181 # 集群内访问
+ targetPort: 2181 #集群内 容器内端口
+ name: tcp-2181
+ nodePort: 30181 #集群外访问 范围30000-32767
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/init_pg.sh b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/init_pg.sh
new file mode 100644
index 0000000..021e96f
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/init_pg.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+#k8s的 pod名称获取,后续需需要改进
+#-f 容器内脚本 不加 则 宿主机内脚本
+microk8s.kubectl exec -it pg-deployment-8564d489c8-7xr95 -n lk -- psql -U postgres -f script/create_db.sql
+
+microk8s.kubectl exec -it pg-deployment-8564d489c8-7xr95 -n lk -- psql -U postgres -d iota -f script/iota_create.sql
+
+microk8s.kubectl exec -it pg-deployment-8564d489c8-7xr95 -n lk -- psql -U postgres -d axy -f script/axy_schema.sql
+
+microk8s.kubectl exec -it pg-deployment-8564d489c8-7xr95 -n lk -- psql -U postgres -d axy -f script/axy_data.sql
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/local-adminer-pgweb.yaml b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/local-adminer-pgweb.yaml
new file mode 100644
index 0000000..c2089c0
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/local-adminer-pgweb.yaml
@@ -0,0 +1,40 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: adminer-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: adminer-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yaml-adminer-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yaml-adminer-d
+ spec:
+ containers: #定义容器信息
+ - name: yaml-adminer #容器名,与标签名要相同
+ image: repository.anxinyun.cn/base-images/adminer:latest #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ ports:
+ - containerPort: 8080 #定义容器的对外端口
+---
+apiVersion: v1 #指定API版本标签
+kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+metadata: #定义资源的元数据信息
+ name: adminer-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: adminer-s
+spec:
+ selector:
+ app: yaml-adminer-d #deployment标签
+ type: NodePort
+ ports:
+ - protocol: TCP
+ port: 8081 # 集群内访问
+ targetPort: 8080 #集群内 容器内端口
+ nodePort: 30881 #集群外访问 范围30000-32767
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/local-pg.yaml b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/local-pg.yaml
new file mode 100644
index 0000000..3832e9c
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/local-pg.yaml
@@ -0,0 +1,50 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: pg-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: pg-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yamlpg-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yamlpg-d
+ spec:
+ containers: #定义容器信息
+ - name: yamlpg #容器名,与标签名要相同
+ image: repository.anxinyun.cn/base-images/pg:12-1.21-04-14 #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ env: #环境变量
+ - name: "POSTGRES_PASSWORD" #变量的名字
+ value: "example" #变量的值
+ ports:
+ - containerPort: 5432 #定义容器的对外端口
+ volumeMounts:
+ - name: vol-data #挂载设备的名字,与volumes[*].name 需要对应
+ mountPath: /var/lib/postgresql/data # 容器的数据目录
+ volumes: # volumes和container处于同一层级,别搞错了
+ - name: vol-data
+ hostPath:
+ path: /home/anxinlocal/pgdata # 宿主机目录
+---
+apiVersion: v1 #指定API版本标签
+kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+metadata: #定义资源的元数据信息
+ name: pg-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: pg-s
+spec:
+ selector:
+ app: yamlpg-d #deployment标签
+ type: NodePort
+ ports:
+ - protocol: TCP
+ port: 5432 # 集群内访问
+ targetPort: 5432 #集群内 容器内端口
+ nodePort: 30432 #集群外访问 范围30000-32767
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/01_create_tables.sql b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/01_create_tables.sql
new file mode 100644
index 0000000..f85e6ef
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/01_create_tables.sql
@@ -0,0 +1,1885 @@
+create table if not exists t_abn_report_push_strategy
+(
+ id serial not null
+ constraint t_abn_report_push_strategy_pkey
+ primary key,
+ user_id integer not null,
+ enabled boolean default true not null,
+ structures integer[] not null,
+ created_org integer
+);
+
+create table if not exists t_abn_type
+(
+ id serial not null
+ constraint t_abn_type_pkey
+ primary key,
+ name varchar(50) not null,
+ description varchar(50) not null
+);
+
+create table if not exists t_agg_type
+(
+ id integer not null
+ constraint t_agg_type_pkey
+ primary key,
+ type_name varchar(30) not null,
+ parent_type_id smallint not null,
+ description varchar(30),
+ name varchar(10)
+);
+
+create unique index if not exists t_agg_type_id_uindex
+ on t_agg_type (id);
+
+create table if not exists t_alarm_category
+(
+ id serial not null
+ constraint t_alarm_category_pkey
+ primary key,
+ name varchar(50) not null
+);
+
+create table if not exists t_alarm_code
+(
+ id serial not null
+ constraint t_alarm_code_pkey
+ primary key,
+ code varchar(20) not null,
+ name varchar(255),
+ type_code varchar(20) not null,
+ level integer not null,
+ upgrade_strategy jsonb,
+ enable boolean default true not null
+);
+
+create table if not exists t_alarm_custom_message
+(
+ id serial not null
+ constraint t_alarm_custom_message_pk
+ primary key,
+ structure integer not null,
+ email varchar(255),
+ sms varchar(255)
+);
+
+create table if not exists t_alarm_type
+(
+ id serial not null
+ constraint t_alarm_type_pkey
+ primary key,
+ code varchar(50) not null
+ constraint t_alarm_type_code_key
+ unique,
+ name varchar(50) not null,
+ description varchar(100),
+ category integer not null
+ constraint t_alarm_type_category_fkey
+ references t_alarm_category,
+ enabled boolean not null,
+ upgrade_strategy jsonb
+);
+
+create table if not exists t_api_log
+(
+ id bigserial not null
+ constraint t_api_log_pkey
+ primary key,
+ log_time timestamp(6) with time zone not null,
+ method varchar(20),
+ content varchar(256),
+ parameter varchar(256),
+ parameter_show varchar(256),
+ user_agent varchar(512),
+ url varchar(256),
+ status_code integer,
+ cost integer,
+ visible boolean not null
+);
+
+create index if not exists idx_api_log_status
+ on t_api_log (status_code);
+
+create index if not exists idx_api_log_time
+ on t_api_log (log_time);
+
+create table if not exists t_apply
+(
+ id serial not null
+ constraint t_apply_pkey
+ primary key,
+ phone varchar(11) not null,
+ org varchar(100) not null,
+ province varchar(20) not null,
+ city varchar(20) not null,
+ struct_types varchar(50) not null,
+ reg_code uuid not null,
+ submit_date timestamp(6) with time zone not null,
+ process_date timestamp(6) with time zone,
+ approved boolean,
+ remarks varchar(200)
+);
+
+create table if not exists t_averagerainfall
+(
+ id serial not null
+ constraint t_averagerainfall_pkey
+ primary key,
+ "structId" integer not null,
+ rainfall numeric(8, 3) not null,
+ time timestamp(6) with time zone not null
+);
+
+create table if not exists t_bim_rendering_path
+(
+ id serial not null
+ constraint t_bim_rendering_path_pkey
+ primary key,
+ structure_id varchar(50) not null,
+ bim_rendering_path varchar(200) not null
+);
+
+create table if not exists t_bim_stations
+(
+ id serial not null
+ constraint t_bim_stations_pkey
+ primary key,
+ structure_id varchar(50) not null,
+ stations_id varchar(50) not null,
+ component_id varchar(50) not null,
+ point varchar(256) not null,
+ bbox varchar(256)
+);
+
+create table if not exists t_calendar_type
+(
+ id serial not null
+ constraint t_calendar_type_pkey
+ primary key,
+ name varchar(50) not null
+);
+
+create table if not exists t_component
+(
+ id serial not null
+ constraint t_component_pkey
+ primary key,
+ component varchar(255)
+);
+
+create table if not exists t_construction
+(
+ id serial not null
+ constraint t_construction_pkey
+ primary key,
+ name varchar(50) not null,
+ address varchar(100),
+ longitude numeric(20, 14),
+ latitude numeric(20, 14),
+ des varchar(100) not null,
+ portrait varchar(200) not null,
+ org_built integer not null,
+ org_construct integer not null,
+ org_owner integer not null,
+ org_supervision integer not null,
+ area integer,
+ height integer,
+ design_company varchar(100),
+ construct_begin timestamp(6) with time zone,
+ construct_end timestamp(6) with time zone,
+ project_type integer default 1 not null
+);
+
+create table if not exists t_consumable_category
+(
+ id integer not null
+ constraint t_consumable_category_pkey
+ primary key,
+ name varchar(50) not null
+);
+
+create table if not exists t_consumable
+(
+ id serial not null,
+ category integer not null
+ constraint t_consumable_category_id_fk
+ references t_consumable_category,
+ name varchar(100) not null,
+ vender varchar(200),
+ remark varchar(200)
+);
+
+create unique index if not exists t_consumable_id_uindex
+ on t_consumable (id);
+
+create unique index if not exists t_consumable_category_id_uindex
+ on t_consumable_category (id);
+
+create table if not exists t_data_original
+(
+ id bigserial not null
+ constraint t_data_original_pkey
+ primary key,
+ iota_device_id uuid not null,
+ original_data jsonb not null,
+ collect_time timestamp(6) with time zone not null,
+ batch_no varchar(100) not null
+);
+
+create index if not exists idx_data_original
+ on t_data_original (iota_device_id, collect_time);
+
+create table if not exists t_debug_history
+(
+ id serial not null
+ constraint t_debug_history_pkey
+ primary key,
+ do_user_id integer,
+ do_time timestamp(6) with time zone default now(),
+ package_size varchar(10),
+ use_time integer,
+ result integer,
+ iota_thing_id uuid not null,
+ dtu_id varchar(50) default NULL::character varying,
+
+ device_id varchar(50) not null,
+ is_success boolean
+);
+comment on column t_debug_history.id is 'id';
+
+comment on column t_debug_history.do_user_id is '操作人id';
+
+comment on column t_debug_history.do_time is '操作时间';
+
+comment on column t_debug_history.package_size is '数据包大小';
+
+comment on column t_debug_history.use_time is '耗时';
+
+comment on column t_debug_history.result is '结果';
+
+comment on column t_debug_history.iota_thing_id is 'iotathingid';
+
+comment on column t_debug_history.dtu_id is 'dtuid';
+
+comment on column t_debug_history.device_id is '下发设备id';
+
+comment on column t_debug_history.is_success is '是否成功';
+
+create table if not exists t_dyna_glt_config
+(
+ id serial not null
+ constraint t_dyna_glt_config_pkey
+ primary key,
+ scheme_id uuid not null,
+ glt integer not null,
+ cond jsonb,
+ enable boolean
+);
+
+create table if not exists t_factor_proto
+(
+ code varchar(30) not null
+ constraint t_factor_proto_pkey
+ primary key,
+ name varchar(50)
+);
+
+create table if not exists t_agg_proto_config
+(
+ id serial not null
+ constraint t_agg_proto_config_pkey
+ primary key,
+ name varchar(255) not null,
+ proto varchar(30) not null
+ constraint t_agg_proto_config_t_factor_proto_code_fk
+ references t_factor_proto,
+ aggs jsonb not null,
+ enabled boolean default true not null
+);
+
+create table if not exists t_factor
+(
+ id serial not null
+ constraint t_factor_pkey
+ primary key,
+ name varchar(50) not null,
+ proto varchar(30) not null
+ constraint t_factor_proto_fkey
+ references t_factor_proto,
+ org integer,
+ item jsonb not null
+);
+
+create table if not exists t_factor_proto_item
+(
+ id serial not null
+ constraint t_factor_proto_item_pkey
+ primary key,
+ proto varchar(30) not null
+ constraint t_factor_proto_item_proto_fkey
+ references t_factor_proto,
+ name varchar(50) not null,
+ field_name varchar(50) not null,
+ precision integer
+);
+
+create table if not exists t_filter_enviroment_config
+(
+ id serial not null
+ constraint t_filter_enviroment_config_pkey
+ primary key,
+ project integer not null,
+ params jsonb not null,
+ receiver jsonb not null
+);
+
+create table if not exists t_filter_method
+(
+ id serial not null
+ constraint t_filter_method_pkey
+ primary key,
+ type integer not null,
+ name varchar(50) not null,
+ params jsonb
+);
+
+create table if not exists t_formula
+(
+ id serial not null
+ constraint t_formula_pkey
+ primary key,
+ name varchar(50) not null,
+ expression_shown varchar(255) not null,
+ description varchar(100),
+ params jsonb not null,
+ ioparams jsonb,
+ expression varchar(255),
+ ioparams_ext jsonb,
+ props jsonb
+);
+
+create table if not exists t_factor_proto_device
+(
+ id serial not null
+ constraint t_factor_proto_device_pkey
+ primary key,
+ proto varchar(30) not null
+ constraint t_factor_proto_device_proto_fkey
+ references t_factor_proto,
+ iota_product_code uuid not null,
+ formula integer
+ constraint t_factor_proto_device_formula_fkey
+ references t_formula,
+ fields jsonb,
+ multi boolean default false,
+ multi_formula integer,
+ multi_fields jsonb,
+ input_unitconvert jsonb
+);
+
+create table if not exists t_formula_params_ex
+(
+ id serial not null
+ constraint t_formula_params_ex_pk
+ primary key,
+ name varchar(255),
+ params jsonb not null
+);
+
+create table if not exists t_geofence_picture
+(
+ id serial not null
+ constraint t_geofence_picture_pkey
+ primary key,
+ point_id integer,
+ acquisition_time timestamp(6),
+ picture_link varchar(255) default NULL::character varying
+);
+
+comment on column t_geofence_picture.point_id is '测点id';
+
+comment on column t_geofence_picture.acquisition_time is '采集时间';
+
+comment on column t_geofence_picture.picture_link is '图片链接';
+
+create table if not exists t_geofence_type
+(
+ id serial not null
+ constraint t_geofence_type_pkey
+ primary key,
+ name varchar(60) not null
+);
+
+comment on column t_geofence_type.name is '类型名';
+
+create table if not exists t_geofence
+(
+ id integer not null
+ constraint t_geofence_pkey
+ primary key,
+ name varchar(60) not null,
+ typeid integer
+ constraint t_geofence_typeid_fkey
+ references t_geofence_type,
+ locations text,
+ projectid integer,
+ is_enable boolean,
+ limitspeed numeric(5, 2)
+);
+
+comment on column t_geofence.name is '围栏名称';
+
+comment on column t_geofence.typeid is '围栏类型';
+
+comment on column t_geofence.locations is '围栏点数组字符串';
+
+comment on column t_geofence.projectid is '项目id';
+
+comment on column t_geofence.is_enable is '是否启用';
+
+create table if not exists t_group_type
+(
+ type_code varchar(50) not null
+ constraint t_group_type_pkey
+ primary key,
+ name varchar(50) not null,
+ description varchar(100),
+ params jsonb not null,
+ present boolean not null
+);
+
+create table if not exists t_group_type_factor
+(
+ id serial not null
+ constraint t_group_type_factor_pkey
+ primary key,
+ group_type varchar(50) not null
+ constraint t_group_type_factor_group_type_fkey
+ references t_group_type,
+ proto varchar(30) not null
+ constraint t_group_type_factor_proto_fkey
+ references t_factor_proto
+);
+
+create table if not exists t_item_unit
+(
+ id serial not null
+ constraint t_item_unit_pkey
+ primary key,
+ name varchar(50),
+ item integer not null
+ constraint t_item_unit_item_fkey
+ references t_factor_proto_item,
+ if_default boolean,
+ transform numeric(18, 6)
+);
+
+create table if not exists t_layout_type
+(
+ id serial not null
+ constraint t_layout_type_pkey
+ primary key,
+ name varchar(100)
+);
+
+create table if not exists t_message_type
+(
+ id serial not null
+ constraint t_message_type_pkey
+ primary key,
+ name varchar(100) not null
+);
+
+
+
+create table if not exists t_phone_validate_code
+(
+ id serial not null
+ constraint t_phone_validate_code_pkey
+ primary key,
+ phone varchar(20) not null,
+ code varchar(6) not null,
+ sig varchar(40) not null,
+ expired timestamp(6) with time zone not null
+);
+
+create table if not exists t_project_type
+(
+ id serial not null
+ constraint t_project_type_pkey
+ primary key,
+ type_name varchar(20) not null,
+ description varchar(20) not null
+);
+
+create table if not exists t_rational_device
+(
+ id serial not null
+ constraint t_rational_device_pkey
+ primary key,
+ iota_device_id uuid not null,
+ item integer
+ constraint t_rational_device_item_fkey
+ references t_factor_proto_item,
+ lower numeric(12, 5),
+ upper numeric(12, 5),
+ enabled boolean default true not null
+);
+
+create table if not exists t_recalc_product_formula
+(
+ id serial not null
+ constraint t_recalc_product_formula_pkey
+ primary key,
+ iota_product_code uuid not null,
+ iota_product_formula uuid,
+ formula integer not null
+ constraint t_recalc_product_formula_t_formula_id_fk
+ references t_formula,
+ fields jsonb not null
+);
+
+create table if not exists t_resource
+(
+ code varchar(50) not null
+ constraint t_resource_pkey
+ primary key,
+ name varchar(50) not null,
+ description varchar(100),
+ type integer,
+ parent_resource varchar(50)
+);
+
+create table if not exists t_structure_component
+(
+ id serial not null
+ constraint t_structure_component_pkey
+ primary key,
+ structtypeid integer not null,
+ componentid integer not null
+);
+
+
+
+
+create table if not exists t_structure_type
+(
+ id serial not null
+ constraint t_structure_type_pkey
+ primary key,
+ name varchar(50) not null,
+ description varchar(100),
+ parent_type integer not null,
+ portrait varchar(512)
+);
+
+create table if not exists t_structure_type_factor
+(
+ id serial not null
+ constraint t_structure_type_factor_pkey
+ primary key,
+ structure_type integer not null
+ constraint t_structure_type_factor_structure_type_fkey
+ references t_structure_type,
+ factor integer not null
+ constraint t_structure_type_factor_factor_fkey
+ references t_factor
+);
+
+
+
+
+create table if not exists t_type_alarm_source
+(
+ id integer not null
+ constraint t_type_alarm_source_pkey
+ primary key,
+ name varchar(50),
+ description varchar(100)
+);
+
+create table if not exists t_type_alarm_state
+(
+ id integer not null
+ constraint t_type_alarm_state_pkey
+ primary key,
+ name varchar(50),
+ description varchar(100)
+);
+
+create table if not exists t_type_event_index
+(
+ id serial not null
+ constraint t_type_event_index_pkey
+ primary key,
+ name varchar(10) not null,
+ description varchar(20)
+);
+
+create table if not exists t_type_file_type
+(
+ id serial not null
+ constraint t_type_file_type_pkey
+ primary key,
+ name varchar(50) not null
+);
+
+create table if not exists t_type_institution_role
+(
+ id serial not null
+ constraint t_type_institution_role_pkey
+ primary key,
+ name varchar(50),
+ description varchar(100)
+);
+
+create table if not exists t_institution
+(
+ id serial not null
+ constraint t_institution_pkey
+ primary key,
+ institutionname varchar(50) not null,
+ institutionrole integer not null
+ constraint t_type_institution_role_fkey
+ references t_type_institution_role,
+ orgid integer,
+ institution_corporation varchar(50),
+ institution_corporation_contact varchar(50)
+);
+
+create table if not exists t_type_org_type
+(
+ id serial not null
+ constraint t_type_org_type_pkey
+ primary key,
+ name varchar(50),
+ description varchar(100)
+);
+
+create table if not exists t_organization
+(
+ id serial not null
+ constraint t_organization_pkey
+ primary key,
+ org_type integer not null
+ constraint t_organization_org_type_fkey
+ references t_type_org_type,
+ name varchar(100) not null,
+ domain varchar(100),
+ state integer not null,
+ aptitude_file varchar(512),
+ register_code varchar(50),
+ logo varchar(512),
+ scale varchar(100),
+ region varchar(200),
+ app_key char(40),
+ app_secret char(40)
+);
+
+create table if not exists t_alarm_policy
+(
+ id serial not null
+ constraint t_alarm_policy_pkey
+ primary key,
+ structures integer[] not null,
+ sms_noticed boolean not null,
+ notice_users integer[] not null,
+ enabled boolean not null,
+ created_organization integer not null
+ constraint t_alarm_policy_t_organization_id_fk
+ references t_organization,
+ alarm_categories integer[] not null,
+ email_noticed boolean not null,
+ email_alarm_levels integer[],
+ sms_alarm_levels integer[],
+ wx_noticed boolean default false not null,
+ wx_alarm_levels integer[],
+ extras jsonb,
+ broadcast_noticed boolean default false,
+ broadcast_alarm_levels integer[],
+ broadcast_device_id varchar(50)
+);
+
+create table if not exists t_department
+(
+ id serial not null
+ constraint t_department_pkey
+ primary key,
+ org integer not null
+ constraint t_department_org_fkey
+ references t_organization,
+ name varchar(50) not null,
+ parent_id integer,
+ sort_index integer
+);
+
+comment on column t_department.parent_id is '父级部门id';
+
+comment on column t_department.sort_index is '排序';
+
+create table if not exists t_factor_template
+(
+ id serial not null
+ constraint t_factor_template_pkey
+ primary key,
+ structtype integer not null
+ constraint t_factor_template_structtype_fkey
+ references t_structure_type,
+ name varchar(100) not null,
+ org integer
+ constraint t_factor_template_org_fkey
+ references t_organization,
+ publish boolean not null,
+ description varchar(100)
+);
+
+create table if not exists t_factor_template_factor
+(
+ id serial not null
+ constraint t_factor_template_factor_id_pk
+ primary key,
+ template_id integer not null
+ constraint t_factor_template_factor_t_factor_template_id_fk
+ references t_factor_template,
+ factor integer not null
+ constraint t_factor_template_factor_t_factor_id_fk
+ references t_factor
+
+);
+
+create table if not exists t_structure
+(
+ id serial not null
+ constraint t_structure_pkey
+ primary key,
+ iota_thing_id uuid not null,
+ structure_type integer not null
+ constraint t_structure_structure_type_fkey
+ references t_structure_type,
+ name varchar(50),
+ description varchar(100),
+ region_path varchar(100),
+ longitude numeric(20, 14),
+ latitude numeric(20, 14),
+ address varchar(100),
+ portrait varchar(512),
+ extra_info jsonb,
+ org integer not null
+ constraint t_structure_org_fkey
+ references t_organization,
+ create_time timestamp(6) with time zone default now() not null
+);
+
+create table if not exists t_agg_config
+(
+ id serial not null
+ constraint t_agg_config_pkey
+ primary key,
+ struct_id integer not null
+ constraint t_agg_config_struct_id_fkey
+ references t_structure,
+ factor_id integer not null
+ constraint t_agg_config_factor_id_fkey
+ references t_factor,
+ enabled boolean default true not null,
+ category integer not null,
+ algorithm integer not null,
+ start_day smallint,
+ end_day smallint,
+ start_hour smallint,
+ end_hour smallint,
+ delete boolean default false not null,
+ start_time integer not null,
+ time_range json
+);
+
+create unique index if not exists t_agg_config_id_uindex
+ on t_agg_config (id);
+
+create table if not exists t_agg_threshold_config
+(
+ id serial not null
+ constraint t_agg_threshold_config_pkey
+ primary key,
+ struct_id integer not null
+ constraint t_agg_threshold_config_struct_id_fkey
+ references t_structure,
+ factor_id integer not null
+ constraint t_agg_threshold_config_factor_id_fkey
+ references t_factor,
+ agg_category integer not null,
+ item_id smallint not null,
+ threshold_level smallint not null,
+ threshold_lower double precision not null,
+ threshold_upper double precision not null,
+ start_hour smallint,
+ end_hour smallint
+);
+
+create unique index if not exists t_agg_threshold_config_id_uindex
+ on t_agg_threshold_config (id);
+
+create table if not exists t_alarm
+(
+ id serial not null
+ constraint t_alarm_pkey
+ primary key,
+ alarm_type integer not null
+ constraint t_alarm_alarm_type_fkey
+ references t_alarm_type,
+ source_type integer not null
+ constraint t_alarm_source_type_fkey
+ references t_type_alarm_source,
+ structure integer not null
+ constraint t_alarm_structure_fkey
+ references t_structure,
+ device uuid,
+ sensor integer,
+ alarm_info varchar(256) not null,
+ alarm_level integer not null,
+ alarm_count integer not null,
+ begin_time timestamp(6) with time zone not null,
+ end_time timestamp(6) with time zone,
+ alarm_state integer not null
+ constraint t_alarm_alarm_state_fkey
+ references t_type_alarm_state
+);
+
+create table if not exists t_alarm_detail
+(
+ id bigserial not null
+ constraint t_alarm_detail_pkey
+ primary key,
+ alarm integer not null
+ constraint t_alarm_detail_alarm_fkey
+ references t_alarm,
+ alarm_info varchar(256) not null,
+ alarm_time timestamp(6) with time zone not null
+);
+
+create table if not exists t_calendar
+(
+ id serial not null
+ constraint t_calendar_pkey
+ primary key,
+ org integer not null
+ constraint t_calendar_org_fkey
+ references t_organization,
+ type integer not null
+ constraint t_calendar_type_fkey
+ references t_calendar_type,
+ calendar_time timestamp(6) with time zone not null,
+ calendar_content varchar(512),
+ structure integer
+ constraint t_calendar_t_structure_id_fk
+ references t_structure
+);
+
+create table if not exists t_department_structure
+(
+ id serial not null
+ constraint t_department_structure_pkey
+ primary key,
+ department integer not null
+ constraint t_department_structure_department_fkey
+ references t_department,
+ structure integer not null
+ constraint t_department_structure_structure_fkey
+ references t_structure,
+ role_id integer,
+ user_id integer
+);
+
+create table if not exists t_event_config
+(
+ id serial not null
+ constraint t_event_config_pkey
+ primary key,
+ "structId" integer not null
+ constraint "structId"
+ references t_structure,
+ "indexId" integer not null
+ constraint "indexId"
+ references t_type_event_index,
+ weight integer not null
+);
+
+comment on column t_event_config."indexId" is 't_type_event_index';
+
+comment on column t_event_config.weight is '比重';
+
+create table if not exists t_group
+(
+ id serial not null
+ constraint t_group_pkey
+ primary key,
+ name varchar(50) not null,
+ group_type varchar(50) not null
+ constraint t_group_group_type_fkey
+ references t_group_type,
+ factor integer not null
+ constraint t_group_factor_fkey
+ references t_factor,
+ structure integer not null
+ constraint t_group_structure_fkey
+ references t_structure,
+ params jsonb default '{}'::jsonb not null
+);
+
+create table if not exists t_layout_model
+(
+ id serial not null
+ constraint t_layout_model_pkey
+ primary key,
+ layout integer not null
+ constraint t_layout_model_layout_fkey
+ references t_layout_type,
+ params jsonb not null,
+ structure integer not null
+ constraint t_layout_model_structure_fkey
+ references t_structure
+);
+
+create table if not exists t_sensor
+(
+ id serial not null
+ constraint t_sensor_pkey
+ primary key,
+ structure integer not null
+ constraint t_sensor_structure_fkey
+ references t_structure,
+ name varchar(50) not null,
+ factor integer not null
+ constraint t_sensor_factor_fkey
+ references t_factor,
+ portrait varchar(512),
+ labels varchar(100)[],
+ manual_data boolean default false not null,
+ extras jsonb
+);
+
+create table if not exists t_abn_report_params
+(
+ id serial not null
+ constraint t_abn_report_params_id_pk
+ primary key,
+ station_id integer not null
+ constraint t_abn_report_params_t_sensor_id_fk
+ references t_sensor,
+ factor_proto_code varchar(30) not null
+ constraint t_abn_report_params_t_factor_proto_code_fk
+ references t_factor_proto,
+ itemid integer,
+ abn_type integer
+ constraint t_abn_report_params_t_abn_type_id_fk
+ references t_abn_type,
+ params jsonb not null,
+ enabled boolean default true not null
+);
+
+create unique index if not exists t_abn_report_params_id_uindex
+ on t_abn_report_params (id);
+
+create table if not exists t_data_sensor_latest
+(
+ id serial not null
+ constraint t_data_sensor_latest_pkey
+ primary key,
+ sensor integer not null
+ constraint t_data_sensor_latest_sensor_key
+ unique
+ constraint t_data_sensor_latest_sensor_fkey
+ references t_sensor,
+ latest_data jsonb not null,
+ collect_time timestamp(6) with time zone not null,
+ violate_rational_times integer not null,
+ state integer not null
+);
+
+create table if not exists t_device_sensor
+(
+ id serial not null
+ constraint t_device_sensor_pkey
+ primary key,
+ iota_device_id uuid not null,
+ iota_device_serial integer default 0 not null,
+ sensor integer not null
+ constraint t_device_sensor_sensor_fkey
+ references t_sensor,
+ params jsonb
+);
+
+create table if not exists t_filter_config
+(
+ id serial not null
+ constraint t_filter_config_pkey
+ primary key,
+ sensor integer
+ constraint t_filter_config_sensor_fkey
+ references t_sensor,
+ item integer
+ constraint t_filter_config_item_fkey
+ references t_factor_proto_item,
+ method integer
+ constraint t_filter_config_method_fkey
+ references t_filter_method,
+ window_size integer not null,
+ params jsonb,
+ enable boolean default true not null,
+ updatetime timestamp(6) with time zone not null,
+ iswork text default 'false'::text
+);
+
+create table if not exists t_group_sensor
+(
+ id serial not null
+ constraint t_group_sensor_pkey
+ primary key,
+ group_id integer not null
+ constraint t_group_sensor_group_id_fkey
+ references t_group,
+ sensor integer not null
+ constraint t_group_sensor_sensor_fkey
+ references t_sensor,
+ params_value jsonb
+);
+
+create table if not exists t_rational
+(
+ id serial not null
+ constraint t_rational_pkey
+ primary key,
+ sensor integer
+ constraint t_rational_sensor_fkey
+ references t_sensor,
+ item integer
+ constraint t_rational_item_fkey
+ references t_factor_proto_item,
+ lower numeric(12, 5),
+ upper numeric(12, 5),
+ enabled boolean default true not null
+);
+
+create table if not exists t_rational_filter
+(
+ id serial not null
+ constraint t_rational_filter_pkey
+ primary key,
+ sensor integer not null
+ constraint t_rational_filter_sensor_fkey
+ references t_sensor,
+ item integer not null
+ constraint t_rational_filter_item_fkey
+ references t_factor_proto_item,
+ rationallower numeric(10, 4) not null,
+ rationalupper numeric(10, 4) not null,
+ enabled boolean not null
+);
+
+create table if not exists t_sensor_factor_threshold
+(
+ id serial not null
+ constraint t_sensor_factor_threshold_pkey
+ primary key,
+ batch_no varchar(100),
+ sensor integer
+ constraint t_sensor_factor_threshold_sensor_fkey
+ references t_sensor,
+ item integer
+ constraint t_sensor_factor_threshold_item_fkey
+ references t_factor_proto_item,
+ level integer,
+ lower numeric(12, 5),
+ upper numeric(12, 5),
+ start_hour integer,
+ end_hour integer,
+ description varchar(100)
+);
+
+create table if not exists t_sensor_filter_config
+(
+ id serial not null
+ constraint t_sensor_filter_config_pkey
+ primary key,
+ sensor integer not null
+ constraint t_sensor_filter_config_sensor_fkey
+ references t_sensor,
+ item integer not null
+ constraint t_sensor_filter_config_item_fkey
+ references t_factor_proto_item,
+ method integer not null
+ constraint t_sensor_filter_config_method_fkey
+ references t_filter_method,
+ params_value jsonb not null,
+ enabled boolean not null,
+ update_time timestamp(6) with time zone
+);
+
+create table if not exists t_sensor_formula
+(
+ id serial not null
+ constraint t_sensor_formula_pkey
+ primary key,
+ sensor integer not null
+ constraint t_sensor_formula_sensor_fkey
+ references t_sensor,
+ formula integer not null
+ constraint t_sensor_formula_formula_fkey
+ references t_formula,
+ params_value jsonb not null
+);
+
+create table if not exists t_sensor_layout
+(
+ id serial not null
+ constraint t_sensor_layout_pkey
+ primary key,
+ sensor integer
+ constraint t_sensor_layout_sensor_fkey
+ references t_sensor,
+ model integer not null
+ constraint t_sensor_layout_model_fkey
+ references t_layout_model,
+ position jsonb,
+ modal_layout integer
+ constraint t_sensor_layout_t_layout_model__fk
+ references t_layout_model
+);
+
+create table if not exists t_structure_factor
+(
+ id serial not null
+ constraint t_structure_factor_pkey
+ primary key,
+ structure integer not null
+ constraint t_structure_factor_structure_fkey
+ references t_structure,
+ factor integer not null
+ constraint t_structure_factor_factor_fkey
+ references t_factor,
+ alias_name varchar(50)
+);
+
+
+
+create table if not exists t_type_project_state
+(
+ id integer not null
+ constraint t_type_project_state_pkey
+ primary key,
+ name varchar(50),
+ description varchar(100)
+);
+
+create table if not exists t_project
+(
+ id serial not null
+ constraint t_project_pkey
+ primary key,
+ name varchar(50),
+ logo varchar(256),
+ theme varchar(256),
+ url varchar(256),
+ marked boolean,
+ create_time timestamp(6) with time zone not null,
+ update_time timestamp(6) with time zone,
+ project_state integer not null
+ constraint t_project_project_state_fkey
+ references t_type_project_state,
+ describe varchar(512),
+ type integer default 0 not null,
+ extra jsonb,
+ event_state boolean default false
+);
+
+create table if not exists t_organization_project
+(
+ id serial not null
+ constraint t_organization_project_pkey
+ primary key,
+ org integer not null
+ constraint t_organization_project_org_fkey
+ references t_organization,
+ project integer not null
+ constraint t_organization_project_project_fkey
+ references t_project
+);
+
+create table if not exists t_project_construction
+(
+ id serial not null
+ constraint t_project_construction_pkey
+ primary key,
+ project integer not null
+ constraint t_construction_t_project_id_fk
+ references t_project,
+ construction integer not null
+ constraint t_construction_t_construction_id_fk
+ references t_construction
+);
+
+create table if not exists t_project_structure
+(
+ id serial not null
+ constraint t_project_structure_pkey
+ primary key,
+ project integer not null
+ constraint t_project_structure_project_fkey
+ references t_project,
+ structure integer not null
+ constraint t_project_structure_structure_fkey
+ references t_structure
+);
+
+
+
+create table if not exists t_type_report_state
+(
+ id serial not null
+ constraint t_type_report_state_pkey
+ primary key,
+ name varchar(50),
+ description varchar(100)
+);
+
+create table if not exists t_type_report_type
+(
+ id serial not null
+ constraint t_type_report_type_pkey
+ primary key,
+ name varchar(50),
+ description varchar(100)
+);
+
+create table if not exists t_report_generate
+(
+ id serial not null
+ constraint t_report_generate_pkey
+ primary key,
+ name varchar(50) not null,
+ structure integer not null
+ constraint t_report_generate_structure_fkey
+ references t_structure,
+ report_type integer not null
+ constraint t_report_generate_report_type_fkey
+ references t_type_report_type,
+ template_cfg jsonb not null,
+ interval varchar(50) not null,
+ confirm boolean not null,
+ enabled boolean not null,
+ manual_monitoring boolean default false,
+ agg_config jsonb,
+ doc_type varchar(5)
+);
+
+create table if not exists t_report_template
+(
+ id serial not null
+ constraint t_report_template_pkey
+ primary key,
+ name varchar(50) not null,
+ description varchar(100),
+ handler varchar(50) not null,
+ file_link varchar(512) not null,
+ factor_proto varchar(30),
+ report_type integer not null
+ constraint t_report_template_report_type_fkey
+ references t_type_report_type,
+ struct_type integer[] default '{}'::integer[] not null,
+ cells jsonb,
+ manual boolean default false,
+ structs integer[] default '{}'::integer[],
+ params jsonb,
+ doc_type varchar(5)
+);
+
+
+
+create table if not exists t_type_role_type
+(
+ code varchar(2) not null
+ constraint t_type_role_type_pkey
+ primary key,
+ description varchar(20) not null
+);
+
+create table if not exists t_unit
+(
+ id serial not null
+ constraint t_unit_pkey
+ primary key,
+ name varchar(10) not null
+);
+
+
+
+create unique index if not exists t_unit_id_uindex
+ on t_unit (id);
+
+create table if not exists t_units
+(
+ name varchar(20) not null,
+ dimension varchar(20),
+ description varchar(255),
+ coef numeric(32, 16),
+ base boolean default false not null,
+ alternative varchar(255)
+);
+
+create table if not exists t_upload_comm_http
+(
+ id serial not null
+ constraint t_upload_comm_http_pkey
+ primary key,
+ content json not null,
+ enable boolean default true not null,
+ description varchar(255)
+);
+
+comment on table t_upload_comm_http is 'ET数据上报消费者(upload)普通HTTP上报类配置表';
+
+create table if not exists t_upload_params
+(
+ id serial not null
+ constraint t_upload_params_pkey
+ primary key,
+ name varchar(50) not null,
+ params jsonb,
+ description varchar(255)
+);
+
+create table if not exists t_user_token
+(
+ token uuid not null
+ constraint t_user_token_copy1_pkey
+ primary key,
+ user_info jsonb not null,
+ expired timestamp(6) with time zone not null
+);
+
+comment on column t_user_token.token is '登录令牌';
+
+comment on column t_user_token.user_info is '用户信息';
+
+create table if not exists t_vehicle_overload
+(
+ id serial not null
+ constraint t_vehicle_overload_pkey
+ primary key,
+ axis_num varchar(100) not null,
+ overload_standard numeric(18, 6) not null,
+ over_heigth numeric(18, 6) not null,
+ over_len numeric(18, 6) not null,
+ overwidth numeric(18, 6) not null
+);
+
+create table if not exists t_video_nvr_vendor
+(
+ id serial not null
+ constraint t_video_nvr_vendor_pkey
+ primary key,
+ name varchar(50) not null,
+ enabled boolean default false not null
+);
+
+create table if not exists t_video_nvr
+(
+ id serial not null
+ constraint t_video_nvr_pkey
+ primary key,
+ name varchar(50) not null,
+ ip varchar(50) not null,
+ port integer not null,
+ username varchar(50) not null,
+ password varchar(50) not null,
+ channels_total integer not null,
+ vendor integer not null
+ constraint t_video_nvr_t_video_nvr_vendor_id_fk
+ references t_video_nvr_vendor,
+ structure integer not null
+ constraint t_video_nvr_t_structure_id_fk
+ references t_structure
+);
+
+create table if not exists t_video_push_server
+(
+ id serial not null
+ constraint t_video_push_server_pkey
+ primary key,
+ name varchar(50) not null,
+ ip varchar(15) not null,
+ port integer not null
+);
+
+create table if not exists t_video_ipc
+(
+ id serial not null
+ constraint t_video_ipc_pkey
+ primary key,
+ name varchar(50) not null,
+ channel_no integer,
+ push_server integer
+ constraint t_video_ipc_t_video_push_server_id_fk
+ references t_video_push_server,
+ nvr integer
+ constraint t_video_ipc_t_video_nvr_id_fk
+ references t_video_nvr,
+ structure integer not null
+ constraint t_video_ipc_t_structure_id_fk
+ references t_structure,
+ has_ptz boolean default false not null,
+ longitude numeric(20, 14),
+ latitude numeric(20, 14),
+ type varchar(10) default 'original'::character varying not null,
+ uid varchar(255),
+ username varchar(255),
+ password varchar(255),
+ serial_no varchar(50),
+ rtmp_address varchar(255),
+ hls_address varchar(255)
+);
+
+create table if not exists t_video_ipc_station
+(
+ id serial not null
+ constraint t_video_ipc_station_pkey
+ primary key,
+ ipc integer not null
+ constraint t_video_ipc_station_t_video_ipc_id_fk
+ references t_video_ipc,
+ station integer not null
+ constraint t_video_ipc_station_t_sensor_id_fk
+ references t_sensor
+);
+
+create table if not exists t_weather_history
+(
+ id serial not null
+ constraint t_weather_history_pkey
+ primary key,
+ "structId" integer not null,
+ weather varchar(20) not null,
+ date date not null
+);
+
+create table if not exists t_wise_config
+(
+ id serial not null
+ constraint t_wise_config_pkey
+ primary key,
+ structid varchar(50) not null,
+ config jsonb not null
+);
+
+create table if not exists t_workflow_business
+(
+ id serial not null
+ constraint t_workflow_business_pkey
+ primary key,
+ procdef_key varchar(100) not null,
+ procdef_id varchar(100) not null,
+ procinst_id integer,
+ created_by varchar(50) not null,
+ created_at timestamp(6) with time zone default now() not null
+);
+
+comment on column t_workflow_business.created_by is '创建人';
+
+comment on column t_workflow_business.created_at is '创建时间';
+
+create table if not exists t_workflow_form_proto
+(
+ id serial not null
+ constraint t_workflow_form_proto_pkey
+ primary key,
+ name varchar(100) not null,
+ form_metas jsonb not null,
+ procdef_key varchar(100) not null,
+ procdef_id varchar(100) not null,
+ actdef_key varchar(100) not null,
+ belongto_startevent boolean default false not null
+);
+
+create table if not exists t_wx_subscribe
+(
+ open_id varchar(50) not null
+ constraint t_wx_subscribe_pkey
+ primary key,
+ union_id varchar(50) not null
+);
+
+create table if not exists tmp_role_resource
+(
+ role integer,
+ resource varchar(50)
+);
+
+create table if not exists t_role_group
+(
+ id serial not null
+ constraint t_role_group_pk
+ primary key,
+ name varchar(60) not null,
+ org integer not null
+ constraint t_role_group_t_organization_id_fk
+ references t_organization
+);
+
+comment on table t_role_group is '角色组表';
+
+comment on column t_role_group.name is '角色组名称';
+
+comment on column t_role_group.org is '所属组织id';
+
+create table if not exists t_role
+(
+ id serial not null
+ constraint t_role_pkey
+ primary key,
+ name varchar(50) not null,
+ portal varchar(2) default 'AC'::character varying not null,
+ description varchar(100),
+ group_id integer not null
+ constraint t_role_t_role_group_id_fk
+ references t_role_group
+);
+
+comment on column t_role.group_id is '所属角色组';
+
+create table if not exists t_role_resource
+(
+ id serial not null
+ constraint t_role_resource_pkey
+ primary key,
+ role integer not null
+ constraint t_role_resource_role_fkey
+ references t_role,
+ resource varchar(50) not null
+ constraint t_role_resource_resource_fkey
+ references t_resource,
+ constraint t_role_resource_role_resource_uindex
+ unique (role, resource)
+);
+
+create table if not exists t_type_post
+(
+ id serial not null
+ constraint t_type_post_pk
+ primary key,
+ name varchar(60) not null,
+ allow_set_num integer default 0 not null,
+ code varchar(60) not null
+);
+
+comment on table t_type_post is '职位固化表';
+
+comment on column t_type_post.name is '职位名称';
+
+comment on column t_type_post.allow_set_num is '可配置人数,0不限制';
+
+create table if not exists t_user
+(
+ id serial not null
+ constraint t_user_pkey
+ primary key,
+ name varchar(50) not null,
+ name_present varchar(50),
+ password varchar(256),
+ phone varchar(50),
+ email varchar(50),
+ avator varchar(512),
+ org integer not null
+ constraint t_user_org_fkey
+ references t_organization,
+ register_time timestamp(6) with time zone,
+ mail_notice boolean default false not null,
+ sms_notice boolean default false not null,
+ no_disturb boolean default false not null,
+ enabled boolean not null,
+ open_id varchar(50),
+ nick_name varchar(50),
+ wx_notice boolean default false not null,
+ union_id varchar(50),
+ institution_role varchar(50) default NULL::character varying,
+ dep integer not null
+ constraint t_user_t_department_id_fk
+ references t_department,
+ post integer not null
+ constraint t_user_t_type_post_id_fk
+ references t_type_post,
+ sort_index integer
+);
+
+comment on column t_user.dep is '直属部门id';
+
+comment on column t_user.post is '职位id';
+
+comment on column t_user.sort_index is '排序';
+
+create table if not exists t_alarm_deal
+(
+ id serial not null
+ constraint t_alarm_deal_pkey
+ primary key,
+ alarm integer not null
+ constraint t_alarm_deal_alarm_fkey
+ references t_alarm,
+ deal_user integer not null
+ constraint t_alarm_deal_deal_user_fkey
+ references t_user,
+ deal_info varchar(256),
+ deal_time timestamp(6) with time zone not null
+);
+
+create table if not exists t_app_message
+(
+ id serial not null
+ constraint t_app_message_pkey
+ primary key,
+ project_id integer not null
+ constraint t_app_message_project_id_fkey
+ references t_project
+ on delete cascade,
+ title varchar(128) not null,
+ content varchar(4096) not null,
+ post_time timestamp(6) with time zone not null,
+ post_user_id integer not null
+ constraint t_app_message_post_user_id_fkey
+ references t_user
+ on delete cascade,
+ expired_time timestamp(6) with time zone not null
+);
+
+create table if not exists t_message
+(
+ id serial not null
+ constraint t_message_pkey
+ primary key,
+ user_id integer not null
+ constraint t_message_user_id_fkey
+ references t_user,
+ message_type integer not null
+ constraint t_message_message_type_fkey
+ references t_message_type,
+ generate_time timestamp(6) with time zone not null,
+ content varchar(512),
+ read_time timestamp(6) with time zone,
+ readed boolean default false not null
+);
+
+create table if not exists t_netdisk_file
+(
+ id serial not null
+ constraint t_netdisk_file_pkey
+ primary key,
+ file_type integer not null
+ constraint t_netdisk_file_file_type_fkey
+ references t_type_file_type,
+ file_name varchar(100) not null,
+ file_ext varchar(30),
+ file_size integer not null,
+ file_link varchar(512) not null,
+ update_user integer not null
+ constraint t_netdisk_file_update_user_fkey
+ references t_user,
+ update_time timestamp(6) with time zone,
+ extra_info jsonb
+);
+
+create table if not exists t_project_approve
+(
+ id serial not null
+ constraint t_project_approve_pkey
+ primary key,
+ project integer not null
+ constraint t_project_approve_project_fkey
+ references t_project,
+ approve_user integer not null
+ constraint t_project_approve_approve_user_fkey
+ references t_user,
+ approve_time timestamp(6) with time zone not null,
+ project_state integer not null,
+ approve_info varchar(2048)
+);
+
+create index if not exists idx_project_approve
+ on t_project_approve (project, approve_time, project_state);
+
+create table if not exists t_task_recalculate
+(
+ id serial not null
+ constraint t_task_recalculate_pkey
+ primary key,
+ name varchar(50) not null,
+ emit_user integer not null
+ constraint t_task_recalculate_emit_user_fkey
+ references t_user,
+ station_id integer not null,
+ data_begin_time timestamp(6) with time zone not null,
+ data_end_time timestamp(6) with time zone not null,
+ task_begin_time timestamp(6) with time zone,
+ task_end_time timestamp(6) with time zone,
+ task_state integer not null,
+ task_result jsonb,
+ msg_id uuid not null
+);
+
+create index if not exists idx_task_recalculate_d_time
+ on t_task_recalculate (data_begin_time, data_end_time);
+
+create index if not exists idx_task_recalculate_t_time
+ on t_task_recalculate (task_begin_time, task_end_time);
+
+create table if not exists t_user_favorite
+(
+ id serial not null
+ constraint t_user_favorite_pkey
+ primary key,
+ user_id integer not null
+ constraint t_user_favorite_user_id_fkey
+ references t_user,
+ file_type integer not null
+ constraint t_user_favorite_file_type_fkey
+ references t_type_file_type,
+ path integer not null
+);
+
+create table if not exists t_wx_bind_result
+(
+ id serial not null
+ constraint t_wx_bind_result_pkey
+ primary key,
+ user_id integer not null
+ constraint t_wx_bind_result_user_id_fkey
+ references t_user,
+ open_id varchar(100) not null,
+ union_id varchar(100) not null,
+ result boolean not null,
+ error varchar(255),
+ time timestamp(6) with time zone not null
+);
+
+create table if not exists t_user_role
+(
+ id serial not null
+ constraint t_user_role_pk
+ primary key,
+ user_id integer not null
+ constraint t_user_role_t_user_id_fk
+ references t_user,
+ role_id integer not null
+ constraint t_user_role_t_role_id_fk
+ references t_role
+);
+
+comment on table t_user_role is '用户角色关联表';
+
+comment on column t_user_role.user_id is '用户id';
+
+comment on column t_user_role.role_id is '角色id';
+
+create unique index if not exists t_type_post_code_uindex
+ on t_type_post (code);
+
+create table if not exists t_role_structures
+(
+ id serial not null
+ constraint t_role_structures_pk
+ primary key,
+ role_id integer not null
+ constraint t_role_structures_t_role_id_fk
+ references t_role,
+ struct_id integer not null
+ constraint t_role_structures_t_structure_id_fk
+ references t_structure
+);
+
+comment on table t_role_structures is '角色关注结构物';
+
+comment on column t_role_structures.role_id is '角色id';
+
+comment on column t_role_structures.struct_id is '结构物id';
+
+create table if not exists t_constant
+(
+ id serial not null
+ constraint t_constant_pk
+ primary key,
+ category varchar(30) not null,
+ name varchar(60) not null,
+ "desc" varchar(60),
+ org integer
+);
+
+comment on table t_constant is '固化数据表';
+
+comment on column t_constant.category is '类型标识';
+
+comment on column t_constant.name is '名称';
+
+comment on column t_constant.org is '所属组织';
+
+create table if not exists t_bridge_part
+(
+ id serial not null
+ constraint t_bridge_part_pk
+ primary key,
+ name varchar(30) not null
+);
+
+comment on table t_bridge_part is '桥梁部位固化表';
+
+comment on column t_bridge_part.name is '名称';
+
+create table if not exists t_bridge_component
+(
+ id serial not null
+ constraint t_bridge_component_pk
+ primary key,
+ name varchar(60) not null,
+ type_id integer not null
+ constraint t_bridge_component_t_structure_type_id_fk
+ references t_structure_type,
+ part_id integer not null
+ constraint t_bridge_component_t_bridge_part_id_fk
+ references t_bridge_part
+);
+
+comment on table t_bridge_component is '桥梁部件固化表';
+
+comment on column t_bridge_component.name is '名称';
+
+comment on column t_bridge_component.type_id is '结构物类型id';
+
+comment on column t_bridge_component.part_id is '部位id';
+
+create table if not exists t_bridge_member
+(
+ id serial not null
+ constraint t_bridge_member_pk
+ primary key,
+ name varchar(30) not null,
+ structure_id integer not null
+ constraint t_bridge_member_t_structure_id_fk
+ references t_structure,
+ part_id integer not null
+ constraint t_bridge_member_t_bridge_part_id_fk
+ references t_bridge_part,
+ component_id integer not null
+ constraint t_bridge_member_t_bridge_component_id_fk
+ references t_bridge_component,
+ isdeleted boolean not null
+);
+
+comment on table t_bridge_member is '桥梁构建成员表';
+
+comment on column t_bridge_member.name is '名称';
+
+comment on column t_bridge_member.structure_id is '结构物id';
+
+comment on column t_bridge_member.part_id is '所属部位id';
+
+comment on column t_bridge_member.component_id is '所属部件id';
+
+comment on column t_bridge_member.isdeleted is '是否删除';
+
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/02_insert_table_data.sql b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/02_insert_table_data.sql
new file mode 100644
index 0000000..01a0de9
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/02_insert_table_data.sql
@@ -0,0 +1,3875 @@
+DO
+$$
+BEGIN
+
+IF NOT exists(select * from public.t_abn_type)
+THEN
+INSERT INTO public.t_abn_type (id, name, description) VALUES (1, 'interrupt', '数据中断');
+INSERT INTO public.t_abn_type (id, name, description) VALUES (2, 'burr', '毛刺');
+INSERT INTO public.t_abn_type (id, name, description) VALUES (3, 'trend', '趋势');
+END IF;
+
+
+IF NOT exists(select * from public.t_agg_type)
+THEN
+INSERT INTO public.t_agg_type (id, type_name, parent_type_id, description, name) VALUES (1000, '分类', 0, null, null);
+INSERT INTO public.t_agg_type (id, type_name, parent_type_id, description, name) VALUES (1001, '算法', 0, null, null);
+INSERT INTO public.t_agg_type (id, type_name, parent_type_id, description, name) VALUES (2001, '日聚集', 1000, null, 'd');
+INSERT INTO public.t_agg_type (id, type_name, parent_type_id, description, name) VALUES (2002, '周聚集', 1000, null, 'w');
+INSERT INTO public.t_agg_type (id, type_name, parent_type_id, description, name) VALUES (2003, '月聚集', 1000, null, 'm');
+INSERT INTO public.t_agg_type (id, type_name, parent_type_id, description, name) VALUES (2004, '年聚集', 1000, null, 'y');
+INSERT INTO public.t_agg_type (id, type_name, parent_type_id, description, name) VALUES (2005, '时聚集', 1000, null, 'h');
+INSERT INTO public.t_agg_type (id, type_name, parent_type_id, description, name) VALUES (3001, '平均值', 1001, null, 'avg');
+INSERT INTO public.t_agg_type (id, type_name, parent_type_id, description, name) VALUES (3002, '最大值', 1001, null, 'max');
+INSERT INTO public.t_agg_type (id, type_name, parent_type_id, description, name) VALUES (3003, '最小值', 1001, null, 'min');
+INSERT INTO public.t_agg_type (id, type_name, parent_type_id, description, name) VALUES (3004, '中值', 1001, null, 'mid');
+END IF;
+
+
+IF NOT exists(select * from public.t_alarm_category)
+THEN
+INSERT INTO public.t_alarm_category (id, name) VALUES (1, '设备类');
+INSERT INTO public.t_alarm_category (id, name) VALUES (2, '数据类');
+INSERT INTO public.t_alarm_category (id, name) VALUES (3, '开发类');
+END IF;
+
+
+IF NOT exists(select * from public.t_alarm_type)
+THEN
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (1, '2001', 'DTU下线', 'DTU下线时触发', 1, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (2, '3001', '设备诊断异常', '采集时传感器返回诊断错误码', 1, true, '{"total": 2, "upgrade1": 10, "upgrade2": 20}');
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (3, '3003', '采集超时', 'DAC下发采集指令后20s未接收到返回码', 1, true, '{"total": 2, "upgrade1": 10, "upgrade2": 20}');
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (4, '3004', '采集错误', 'DAC解析返回码出现错误', 1, true, '{"total": 2, "upgrade1": 10, "upgrade2": 20}');
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (5, '3005', '数据超量程', '采集数据超过传感器量程', 1, true, '{"total": 2, "upgrade1": 10, "upgrade2": 20}');
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (6, '3006', '数据中断', '连续3轮未采集到数据', 1, true, '{"total": 2, "upgrade1": 10, "upgrade2": 20}');
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (7, '5001', '网关无响应', '网关程序无响应', 1, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (8, '6001', '低电量', '节点电量低', 1, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (9, '6002', '未传输数据过多', '节点唤醒,数据量>100时触发', 1, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (10, '6003', '节点未苏醒', '节点未在指定时刻苏醒过来', 1, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (11, '3007', '数据超阈值', '数据超过设置的告警阈值', 2, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (12, '3008', '变化速率超阈值', '采集数据变化速率超过设置的告警阈值', 2, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (13, '1001', 'DAC内部错误', 'DAC内部错误', 3, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (14, '2002', 'DTU通信异常', 'DTU串口写失败或者DTU忙碌状态下发送指令时', 3, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (15, '3002', '协议错误', 'DAC下发采集指令时发生错误', 3, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (17, '3009', '聚集数据超阈值', '时/日聚集数据超过设置的告警阈值', 2, true, '{"independent": true}');
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (18, '7002', '烟感告警', '烟感告警', 1, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (19, '7003', '垃圾箱设备异常', '垃圾箱设备异常', 1, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (20, '7004', '烟雾火警', '烟雾火警', 1, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (21, '3010', '数据异常', '数据识别为异常', 2, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (22, '7005', 'RTU告警', 'RTU告警', 1, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (23, '3031', '渣土车超速告警', '渣土车超速告警', 2, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (24, '3032', '渣土车防驶入告警', '渣土车防驶入告警', 2, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (25, '3033', '渣土车防驶出告警', '渣土车防驶出告警', 2, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (26, '3034', '渣土车抓拍', '渣土车抓拍', 2, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (33, '3011', '限产', '限产', 2, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (34, '3012', '停产', '停产', 2, true, null);
+INSERT INTO public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) VALUES (35, '3013', '未正常运行', '未正常运行', 2, true, null);
+END IF;
+
+
+IF NOT exists(select * from public.t_alarm_code)
+THEN
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (1, '30010403', '正常操作发生异常', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (2, '30010016', '设备自动采集', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (3, '30010301', '华云雨量计同步时间', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (4, '10010006', '该传感器不参与采集', '1001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (5, '2003', '维度任务交叠', '3004', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (6, '50010001', '网关与服务端之间心跳超时', '5001', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (7, '60010002', '电量不高于20%', '6001', 2, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (8, '3008', '脚本调用异常', '3004', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (9, '10010002', '无效DTU', '1001', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (10, '30080002', '传感器数据变化速率超过2级告警阈值', '3008', 2, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (11, '3003', '协议初始化异常', '3004', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (12, '30010005', '项目号错误', '3001', 2, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (13, '1001', '采集超时', '3003', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (14, '30010026', '测斜仪类传感器初始角度设置错误', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (15, '2002', '维度未使用能力', '3004', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (16, '30010023', '振弦传感器短路', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (17, '30030001', '采集超时', '3003', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (18, '30040003', '无效数据', '3004', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (19, '30010011', '采集的频率异常', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (20, '2004', '维度在开始前被终止', '3004', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (21, '30010031', '设备电量异常', '3001', 2, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (22, '30080001', '传感器数据变化速率超过1级告警阈值', '3008', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (23, '30010020', '时间设置错误', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (24, '30010201', '频率线异常', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (25, '30070001', '传感器测量值超过1级告警阈值', '3007', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (26, '30010006', '广播号错误', '3001', 2, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (27, '30010017', '系统忙碌', '3001', 2, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (28, '30010007', '读取传感器信息错误', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (29, '3002', '无法建立连接', '3004', 3, null, false);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (30, '30010024', '温度传感器断路', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (31, '20020003', '采集命令下发错误', '2002', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (32, '30010029', '器件初始化/复位失败', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (33, '30010101', '模块号错误', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (34, '30010025', '温度传感器短路', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (35, '2001', '任务已过期', '3004', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (36, '30010501', '激光返回错误', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (37, '3005', '协议数据格式异常', '3004', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (38, '60010001', '电量不高于10%', '6001', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (39, '10010003', '沉降分组计算没有基点数据', '1001', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (40, '30040002', '接收数据为空', '3004', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (41, '30010010', '通道号错误', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (42, '30010402', '寄存器错误', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (43, '3001', '协议定义错误', '3004', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (44, '30010003', '校验码错误', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (45, '10010007', '找不到该传感器信息', '1001', 2, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (46, '30010030', 'I2C总线忙', '3001', 2, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (47, '30070002', '传感器测量值超过2级告警阈值', '3007', 2, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (48, '30050001', '采集数据超出传感器量程', '3005', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (49, '2005', '维度达到最大调用次数', '3004', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (50, '30010014', '采集的电压异常', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (51, '30010008', '读取设备信息错误', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (52, '20020002', 'DTU忙碌', '2002', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (53, '30010002', '单总线短路检测', '3001', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (54, '3006', '协议加载异常', '3004', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (55, '30010401', '功能号错误', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (56, '30010018', '数据存储错误', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (57, '30010028', '磁通量传感器采集积分电压异常', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (58, '30040001', '解析数据失败', '3004', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (59, '30010021', '数据存储错误', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (60, '30010013', '采集的湿度异常', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (61, '10010004', '编译错误', '1001', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (62, '5001', '数据有效性判断: 违例', '3005', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (63, '30010202', '温度线异常', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (64, '30010004', '功能码错误', '3001', 2, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (65, '30010009', '采集时间错误', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (66, '10010005', '采集命令构造错误', '1001', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (67, '30080003', '传感器数据变化速率超过3级告警阈值', '3008', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (68, '20020001', '写串口异常', '2002', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (69, '30070003', '传感器测量值超过3级告警阈值', '3007', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (70, '20010001', 'DTU未连接', '2001', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (71, '60010003', '电量不高于30%', '6001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (72, '30010015', '采集的角度异常', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (73, '10010001', '发送数据为空', '1001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (74, '30010027', '测斜仪类传感器温补系数设置错误', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (75, '30020002', '不受支持的协议', '3002', 2, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (76, '30060001', '传感器数据中断', '3006', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (77, '30010203', '频率线温度线都异常', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (78, '30010012', '采集的温度异常', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (79, '30010001', '单总线忙', '3001', 2, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (80, '30020001', '协议错误', '3002', 2, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (81, '3007', '协议脚本中缺少函数', '3004', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (82, '30010019', '数据读取错误', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (83, '30010022', '振弦传感器断路', '3001', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (84, '3010', '协议缺失', '3004', 1, null, false);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (85, '30090001', '聚集数据超过1级告警阈值', '3009', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (86, '30090002', '聚集数据超过2级告警阈值', '3009', 2, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (87, '30090003', '聚集数据超过3级告警阈值', '3009', 3, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (88, '70021100', '24小时紧急', '7002', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (89, '70021101', '个人救护', '7002', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (90, '70021110', '火警报警', '7002', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (91, '70021111', '燃气报警', '7002', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (92, '70021112', '水浸报警', '7002', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (93, '70021130', '瞬时报警', '7002', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (94, '70021384', '无线探测器低压', '7002', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (95, '70021140', '温感报警', '7002', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (96, '70021400', '周期检测', '7002', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (97, '70021485', '巡更', '7002', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (98, '70021609', 'IP设置', '7002', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (99, '70021702', '无线探测器防拆', '7002', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (100, '70030001', '垃圾箱状态异常', '7003', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (101, '70040001', '电流小于阈值', '7004', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (102, '70040002', '电流大于阈值', '7004', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (103, '70040003', '电压小于阈值', '7004', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (104, '70040004', '电压大于阈值', '7004', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (105, '70040005', '离线', '7004', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (106, '10037', '温度过高告警', '3007', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (109, '30100001', '数据异常', '3010', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (110, '70050001', 'RTU告警', '7005', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (111, '30310001', '渣土车超速告警', '3031', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (112, '30320001', '渣土车防驶入告警', '3032', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (113, '30330001', '渣土车防驶出告警', '3033', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (114, '30340001', '渣土车抓拍告警', '3034', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (118, '30110001', '限产', '3011', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (119, '30120001', '停产', '3012', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (120, '30130001', '未正常运行', '3013', 1, null, true);
+INSERT INTO public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) VALUES (121, '30010601', '设备断线', '3001', 3, null, true);
+END IF;
+
+
+
+
+
+
+IF NOT exists(select * from public.t_calendar_type)
+THEN
+INSERT INTO public.t_calendar_type (id, name) VALUES (1, '工程进度');
+INSERT INTO public.t_calendar_type (id, name) VALUES (2, '人工巡检');
+INSERT INTO public.t_calendar_type (id, name) VALUES (3, '集成配置');
+INSERT INTO public.t_calendar_type (id, name) VALUES (4, '系统跟踪');
+INSERT INTO public.t_calendar_type (id, name) VALUES (5, '重大事件');
+END IF;
+
+
+IF NOT exists(select * from public.t_component)
+THEN
+INSERT INTO public.t_component (id, component) VALUES (1, '桥跨结构');
+INSERT INTO public.t_component (id, component) VALUES (2, '支座系统');
+INSERT INTO public.t_component (id, component) VALUES (3, '桥墩');
+INSERT INTO public.t_component (id, component) VALUES (4, '桥台');
+INSERT INTO public.t_component (id, component) VALUES (5, '墩台基础');
+INSERT INTO public.t_component (id, component) VALUES (6, '桥跨铺装');
+INSERT INTO public.t_component (id, component) VALUES (7, '排水防水系统');
+INSERT INTO public.t_component (id, component) VALUES (8, '栏杆');
+INSERT INTO public.t_component (id, component) VALUES (9, '伸缩缝');
+INSERT INTO public.t_component (id, component) VALUES (10, '桥头平顺');
+END IF;
+
+
+
+
+
+INSERT INTO public.t_factor_proto (code, name) VALUES ('0001', '状态');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1001', '风速风向');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1002', '温湿度');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1003', '雨量');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1004', '温度');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1005', '地下水位');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1006', '湿度');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1007', '噪声');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1008', '渗流量');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1009', '浸润线');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1010', '干滩和库水位');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1011', '电流');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1012', '气压');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1013', '液位');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1014', '流量');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1015', '蚀度');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1016', 'ph值');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1017', '氧气/氮气浓度');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1018', '气体浓度');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1019', '爆炸性气体');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1020', '光照');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1021', '辐射');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1022', '风速');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1023', '液体浓度');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1024', '窨井水位');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1025', '路面积水');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1026', '粉尘/颗粒物监测');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1027', '大气污染指数');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1028', '结冰');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1029', '风向');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1030', '能见度');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1031', '一氧化碳浓度');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1032', '大气监测仪');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1033', '气象站监测');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1034', '扬尘');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1035', '气象站');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1042', '功率');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1043', '流速');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1045', '库流量');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1046', '库容');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1050', '河流监测');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1051', '百叶气象');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('1052', '太阳辐射');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('2001', '索力');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('2002', '车流量');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('2003', '压力');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('2004', '受力');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('2005', '重力');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('2006', '钢筋混凝土支撑轴力');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('3001', '应变');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('3002', '应变花');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('3003', '应力');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4001', '单向位移');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4002', '双向位移');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4003', '三向位移');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4004', '挠度');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4005', '深层水平位移');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4006', '单向角度');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4007', '双向角度');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4008', '裂缝');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4009', '伸缩缝');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4010', '杆塔倾斜');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4011', '拱顶沉降');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4012', '三向角度');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4013', '全站位移');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4014', '塔吊');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4015', '升降机');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4016', '高程');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4017', '基坑沉降');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4018', '机器人位移监测');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4020', '相邻沉降');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4025', '崩塌');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4027', '机器人位移监测(m)');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4031', '全站位移(m)');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('4100', '差异沉降倾斜监测');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('5001', '振动速度');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('5002', '振动加速度');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('5003', '动应变');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('5005', '振动等效声级');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('5006', '三向振动');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('5041', '烟感报警');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('6001', '起重机主起');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('6002', '起重机副起');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('6003', '起重机大车');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('6004', '起重机小车');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('6010', '安全帽');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('7001', '立杆倾斜与轴力');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('7002', '倾斜与支架水平位移');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('7003', '倾斜与模板沉降');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('7007', '垃圾容量');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('7008', '智能垃圾');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('7010', '消火栓');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('7011', '电气火灾');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('7012', '渣土车监测');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('7030', '三相电表');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('7035', '停车场');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('7042', '升降监测');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('7043', '卸料监测');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('7044', '人脸识别');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('7530', '微动');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('8001', '空气质量');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('8002', '地表水环境质量');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('8003', '睡眠');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('8004', '求救');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('8005', '电量');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('8006', '跌倒定位');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('8007', '定位');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('8008', '心率');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('8009', '运动数据');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('8010', '恶臭');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('8011', '移动空气质量');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('8012', '水质监测');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('8013', '路灯');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('8022', '环境气体监测');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('8033', '人员定位');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('9001', '用电量');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('9002', '用水量');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('9003', '厕所人流量');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('9004', '厕所环境');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('9005', '空间转换门');
+INSERT INTO public.t_factor_proto (code, name) VALUES ('9010', '人流量');
+
+
+
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (1, '风速风向', '1001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (2, '温湿度', '1002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (3, '雨量', '1003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (4, '温度', '1004', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (5, '噪声', '1007', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (6, '索力', '2001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (7, '车辆称重', '2002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (8, '加固钢板应变', '3001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (9, '钢管拱肋应变', '3001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (10, '混凝土拱肋应变', '3001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (11, '应变', '3001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (12, '应变花', '3002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (13, '表面位移', '4003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (14, '塔顶偏位', '4003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (15, '桥墩倾斜', '4007', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (16, '主梁挠度', '4004', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (17, '桥梁伸缩缝', '4009', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (18, '裂缝', '4008', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (19, '挠度', '4004', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (20, '支座位移', '4001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (21, '倾角', '4006', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (22, '桥塔倾斜', '4002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (23, '拱座转角', '4006', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (24, '位移', '4001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (25, '梁体振动', '5002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (26, '振动速度', '5001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (27, '动应变', '5003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (28, '桥面振动', '5002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (31, '地下水位', '1005', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (33, '锚索受力', '2004', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (34, '孔隙水压', '2003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (35, '钢支撑轴力', '2004', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (36, '支撑轴力', '2004', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (37, '围护墙内力', '2004', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (38, '支撑内力', '2004', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (39, '立柱内力', '2004', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (40, '锚杆内力', '2004', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (41, '土钉内力', '2004', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (42, '围护墙侧向土压力', '2003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (43, '钢筋混凝土应力应变', '3001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (44, '围护墙顶部水平位移', '4002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (45, '围护墙竖向位移', '4001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (46, '立柱竖向位移', '4001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (47, '土体分层竖向位移', '4001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (48, '周边地表竖向位移', '4001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (49, '地表裂缝', '4008', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (50, '水平位移', '4002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (51, '竖向位移', '4001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (52, '深层水平位移', '4005', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (58, '土体压力', '2003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (60, '锚杆拉力', '2004', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (61, '支护结构应力', '3003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (63, '支护结构变形', '4002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (65, '沉降', '4001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (70, '渗流量', '1008', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (71, '扬压力', '2003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (72, '渗透压力', '2003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (75, '坝体位移', '4003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (76, '坝基位移', '4003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (77, '近坝岸坡位移', '4003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (79, '倾斜', '4002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (84, '毒害气体', '1018', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (85, '初衬受压力', '2003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (86, '涌水', '2003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (88, '初支与二衬接触压力', '2003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (89, '围岩与初支接触压力', '2003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (90, '二衬钢筋应力', '3003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (91, '拉索应力', '3003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (92, '剪切件应力', '3003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (93, '钢筋应力', '3003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (94, '混凝土应力', '3003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (95, '初支衬砌应变', '3001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (96, '二次衬砌应变', '3001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (97, '钢支撑应力', '3001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (98, '锚杆轴力', '3001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (102, '拱顶沉降', '4011', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (103, '净空收敛', '4001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (104, '管片变形', '4007', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (105, '围岩体内部位移', '4005', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (106, '隧道结构水平位移', '4002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (107, '道床及拱腰结构沉降', '4001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (108, '隧道壁振动', '5002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (109, '轨道板振动', '5002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (112, '渗流', '1008', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (113, '浸润线', '1009', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (114, '干滩和库水位', '1010', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (116, '深部水平位移', '4005', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (117, '干滩高程', '4001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (127, '建筑物倾斜', '4007', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (129, '周边土体振动', '5002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (131, '杆塔倾斜', '4010', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (133, '蚀度', '1015', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (134, 'PH值', '1016', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (135, '电流', '1011', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (137, '气压', '1012', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (138, '液位', '1013', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (139, '流量', '1014', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (140, '压力', '2003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (142, '杆塔倾斜', '4002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (143, '振动加速度', '5002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (145, '起重机主起', '6001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (146, '起重机副起', '6002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (147, '起重机大车', '6003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (148, '起重机小车', '6004', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (151, '湿度', '1006', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (152, 'CO2浓度', '1018', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (153, '光照', '1020', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (155, '辐射', '1021', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (156, '风速', '1022', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (158, '土温', '1004', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (159, '土湿', '1006', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (160, '土壤温湿度', '1002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (161, '土壤盐分', '1023', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (162, '窨井水位', '1024', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (163, '路面积水', '1025', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (164, '排水管渠气体浓度', '1018', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (165, '氧气/氮气浓度', '1017', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (166, '其他常规气体', '1018', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (167, '爆炸性气体', '1019', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (168, '有机化合物气体', '1018', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (169, '船舶姿态', '4007', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (170, '粉尘', '1026', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (171, 'PM', '1027', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (173, '建筑物倾斜(位移)', '4002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (174, '路面结冰', '1028', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (205, '分层沉降', '4001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (206, '风向', '1029', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (211, '油压', '2003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (214, '烟雾', '1018', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (215, 'CO浓度', '1018', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (216, 'NO2浓度', '1018', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (217, 'O3浓度', '1018', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (218, 'PM2.5浓度', '1026', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (219, 'PM10浓度', '1026', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (220, 'SO2浓度', '1018', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (222, '水平收敛', '4001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (223, '绳索张力', '2005', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (226, '重量', '2005', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (227, '倾角', '4012', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (228, '能见度', '1030', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (231, 'CO浓度', '1031', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (232, 'O2浓度', '1017', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (234, '塔体', '4007', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (237, '应力', '3003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (238, '地表沉降', '4001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (239, '全站仪位移', '4013', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (241, '钢筋混凝土支撑轴力', '2006', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (242, '空气质量', '1032', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (243, '大气监测', '1033', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (249, '新建桥梁水位', '1005', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (250, '高支模倾斜', '4007', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (251, '塔吊', '4014', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (252, '扬尘', '1034', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (253, '立杆倾斜与立杆轴力', '7001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (254, '倾斜与支架水平位移', '7002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (255, '立杆倾斜与模板沉降', '7003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (256, '扬尘', '1034', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (258, '温湿度123', '1002', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (260, '温度桥', '1002', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (262, '建筑物倾斜(位移)', '4002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (263, '风压', '1012', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (264, '空气质量指数', '8001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (265, '测试11', '4001', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (266, '试1', '4001', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (267, '中小桥一体化', '1006', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (275, '用电量', '9001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (276, '用水量', '9002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (277, '厕所人流量', '9003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (278, '厕所坑位', '0001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (279, '厕所环境', '9004', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (280, '地表水环境质量', '8002', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (281, '应力', '3003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (284, '升降机', '4015', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (285, '升降机监测', '4015', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (286, '气象站', '1035', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (287, '混凝土应变', '3001', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (288, '沉降高程', '4016', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (289, '睡眠', '8003', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (290, '求救', '8004', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (291, '电量', '8005', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (292, '跌倒定位', '8006', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (293, '定位', '8007', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (294, '心率', '8008', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (295, '运动数据', '8009', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (296, '周边地表沉降监测', '4017', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (297, '围护墙沉降监测', '4017', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (298, '垃圾容量', '7007', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (299, '砼支撑轴力 ', '2006', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (300, '墙顶水平位移', '4017', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (301, '恶臭', '8010', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (302, '恶臭', '8010', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (303, '移动空气质量', '8011', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (304, '功率', '1042', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (305, '流速', '1043', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (306, '空间转换门', '9005', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (307, '载重', '2005', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (308, '库流量', '1045', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (309, '人流量', '9010', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (311, '人员定位', '6010', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (316, '爬架倾斜', '4007', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (318, '水位监测', '1005', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (319, '相邻沉降', '4020', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (320, '路灯', '8013', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (321, '出水量', '1045', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (322, '烟感报警', '5041', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (323, '路灯', '8013', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (324, '智能垃圾', '7008', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (325, '二次供水水质监测', '8002', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (327, '视频监控', '0001', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (328, '水质', '8002', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (329, '水流量', '1008', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (330, '水压', '2003', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (331, '消防水池', '1005', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (333, '消火栓', '7010', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (334, '电气火灾', '7011', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (335, '消火栓', '7010', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (336, '建筑物振动', '5005', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (337, '烟感', '5041', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (338, '可燃气体', '1019', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (339, '建筑物振动', '5005', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (340, '可燃气体监测', '1018', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (342, '河流监测', '1050', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (343, '河流监测', '1050', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (344, '水位', '1005', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (347, '太阳辐射', '1052', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (348, '百叶气象', '1051', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (349, '平面位移', '4002', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (351, '基坑拱顶沉降', '4011', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (352, '墙体深层水平位移', '4005', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (354, '因素调试', '1002', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (355, '库容', '1046', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (356, '消火栓1', '8001', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (357, '桥梁厕所环境', '9004', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (358, '崩塌', '4025', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (359, '倾角位移监测', '4007', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (360, '水平位移', '4002', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (362, '表面位移', '4003', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (363, '机器人位移监测', '4018', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (364, '机器人', '4018', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (366, '机器人位移监测(m)', '4027', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (367, '差异沉降倾斜监测', '4100', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (369, '爆破振动', '5006', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (370, '环境气体监测', '8022', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (372, '振动加速度', '5002', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (373, '人员定位', '8033', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (374, '应变(隧道)', '3001', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (375, '桥梁扬尘', '1034', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (376, '全站位移(m)', '4031', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (377, '全站位移(m)', '4031', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (378, '振动加速度', '5002', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (380, '微动', '7530', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (385, '水质监测', '8012', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (394, '渣土车监测', '7012', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (395, '车辆称重', '2002', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (396, '氨气监测', '1018', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (397, '三相电表', '7030', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (398, '升降监测', '7042', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (399, '卸料监测', '7043', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (400, '人脸识别', '7044', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (401, '治污监测', '7030', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (402, '产污监测', '7030', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (404, '停车场', '7035', null, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (405, '桩顶水平位移', '4002', 1, '{}');
+INSERT INTO public.t_factor (id, name, proto, org, item) VALUES (406, '建筑物沉降监测', '4001', 1, '{}');
+
+
+
+
+
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (100, '减初值公式', 'phy=DAQi-DAQ0', null, '[{"name": "DAQ0", "alias": "初值"}]', '{"input": ["DAQi"], "output": ["phy"]}', 'phy=DAQi-DAQ0', '{"input": [{"name": "DAQi"}], "output": [{"name": "phy"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (101, '测斜减初值公式', 'phy=DAQi-DAQ0', null, '[{"name": "x0", "alias": "初值1"}, {"name": "y0", "alias": "初值2"}]', '{"input": ["xi", "yi"], "output": ["x", "y"]}', 'x=xi-x0;y=yi-y0', '{"input": [{"name": "xi"}, {"name": "yi"}], "output": [{"name": "x"}, {"name": "y"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (102, '测斜公式', 'Δl=c*[sin(αi)-sin(α0)]', null, '[{"name": "c", "unit": "mm", "alias": "测斜杆间距离长(mm)"}, {"name": "xα0", "unit": "°", "alias": "x方向角度初值(°)"}, {"name": "yα0", "unit": "°", "alias": "y方向角度初值(°)"}]', '{"input": ["αx", "αy"], "output": ["x", "y"]}', 'x=c*(sin(αx*π/180)-sin(xα0*π/180));y=c*(sin(αy*π/180)-sin(yα0*π/180))', '{"input": [{"name": "αx", "unit": "°"}, {"name": "αy", "unit": "°"}], "output": [{"name": "x", "unit": "mm"}, {"name": "y", "unit": "mm"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (103, '水位公式', 'H=h+h0', null, '[{"name": "h0", "alias": "深度初值(m)"}]', '{"input": ["h"], "output": ["H"]}', 'H=h+h0', '{"input": [{"name": "h"}], "output": [{"name": "H"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (104, '压力变送器公式', 'Δh=(Pi-P0)/(ρ*g)+H0', null, '[{"name": "ρ", "unit": "10^3kg/m^3", "alias": "密度(10^3kg/m^3)"}, {"name": "P0", "unit": "kPa", "alias": "压强初值(kPa)"}, {"name": "H0", "unit": "mm", "alias": "安装高程(mm)", "default": 0.0}]', '{"input": ["Pi"], "output": ["Δh"]}', 'Δh=(Pi-P0)*1000/(ρ*9.8)+H0', '{"input": [{"name": "Pi", "unit": "KPa"}], "output": [{"name": "Δh", "unit": "mm"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (105, '压强测水位公式', 'h=(Pi/pg)', null, '[{"name": "ρ", "unit": "10^3kg/m^3", "alias": "密度(10^3kg/m^3)"}]', '{"input": ["Pi"], "output": ["h"]}', 'h=Pi*1000/(ρ*9.8)', '{"input": [{"name": "Pi", "unit": "kPa"}], "output": [{"name": "h", "unit": "m"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (106, '渗流计算', 'v=k*(h1-h2)/L', null, '[{"name": "type", "type": "enum", "alias": "量水堰类型", "range": ["三角堰", "矩形堰", "梯形堰"]}, {"name": "h", "unit": "m", "alias": "底长(m)"}, {"name": "H0", "unit": "m", "alias": "堰上水头初始值(m)"}, {"name": "P0", "unit": "kPa", "alias": "压力初始值(kPa)"}, {"name": "ρ", "unit": "10^3kg/m^3", "alias": "密度(10^3kg/m^3)"}]', '{"input": ["p"], "output": ["v"]}', null, '{"input": [{"name": "p", "unit": "kPa"}], "output": [{"name": "v", "unit": "m3/s"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (107, '干滩长度计算', 'l=(H-(h+hi))/s', null, '[{"name": "H", "unit": "m", "alias": "滩顶高程(m)"}, {"name": "h", "unit": "m", "alias": "安装高程(m)"}, {"name": "s", "alias": "坡比"}]', '{"input": ["hi"], "output": ["L"]}', 'L=(H-(h0+hi))/s', '{"input": [{"name": "hi", "unit": "m"}], "output": [{"name": "L", "unit": "m"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (108, '振动物理量转换公式', 'A=V/k', '弃用公式', '[{"name": "k", "alias": "转换系数"}]', '{"input": [""], "output": [""]}', null, null, null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (109, '三维位移转换公式', 'X=(y-y0)*sinθ-(x-x0)*cosθ;Y=(y-y0)*cosθ+(x-x0)*sinθ;Z=z-z0', null, '[{"name": "x0", "unit": "mm", "alias": "x方向初始大地坐标(mm)"}, {"name": "y0", "unit": "mm", "alias": "y方向初始大地坐标(mm)"}, {"name": "z0", "unit": "mm", "alias": "z方向初始大地坐标(mm)"}, {"name": "θ", "unit": "°", "alias": "偏角(°)"}]', '{"input": ["xi", "yi", "zi"], "output": ["X", "Y", "Z"]}', 'X=(yi-y0)*sin(θ*π/180)-(xi-x0)*cos(θ*π/180);Y=(yi-y0)*cos(θ*π/180)+(xi-x0)*sin(θ*π/180);Z=zi-z0', '{"input": [{"name": "xi", "unit": "mm"}, {"name": "yi", "unit": "mm"}, {"name": "zi", "unit": "mm"}], "output": [{"name": "X", "unit": "mm"}, {"name": "Y", "unit": "mm"}, {"name": "Z", "unit": "mm"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (111, '初值减测值', 'phy=C0-Ci', null, '[{"name": "C0", "alias": "初值"}]', '{"input": ["Ci"], "output": ["phy"]}', 'phy=C0-Ci', '{"input": [{"name": "Ci"}], "output": [{"name": "phy"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (113, '应变计计算轴力', 'F=A*E*[(∑εi)/n]+F0', null, '[{"name": "E", "unit": "kN/mm^2", "alias": "钢材弹性模量(kN/mm^2)"}, {"name": "A", "unit": "mm^2", "alias": "钢材截面积(mm^2)"}, {"name": "F0", "unit": "kN", "alias": "初值(kN)"}]', '{"input": ["ε"], "output": ["F"]}', 'F=ε*E*A+F0', '{"input": [{"name": "ε", "unit": "με"}], "output": [{"name": "F", "unit": "kN"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (114, '路面积水液位计算', 'Hc=h+hsi', null, '[{"name": "h", "unit": "mm", "alias": "安装高度(mm)"}]', '{"input": ["hsi"], "output": ["Hc"]}', 'Hc=h+hsi', '{"input": [{"name": "hsi", "unit": "mm"}], "output": [{"name": "Hc", "unit": "mm"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (115, '荷载分布', 't=(sl+ql)/v', '弃用公式', '[{"name": "SL", "alias": "距离上桥距离(m)"}, {"name": "SRP", "type": "enum", "alias": "距离桥梁相对位置", "range": ["上桥", "下桥"]}]', '{"input": [""], "output": [""]}', null, null, null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (116, '逆初值基准值公式', 'phy=-(DAQi-DAQ0)+D', null, '[{"name": "D", "unit": "mm", "alias": "初始裂缝宽度(mm)"}, {"name": "C0", "unit": "mm", "alias": "初值(mm)"}]', '{"input": ["DAQi"], "output": ["phy"]}', 'phy=-(DAQi-C0)+D', '{"input": [{"name": "DAQi", "unit": "mm"}], "output": [{"name": "phy", "unit": "mm"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (117, '初值基准值公式', 'phy=DAQi-DAQ0+D', null, '[{"name": "D", "unit": "mm", "alias": "初始裂缝宽度(mm)"}, {"name": "C0", "unit": "mm", "alias": "初值(mm)"}]', '{"input": ["DAQi"], "output": ["phy"]}', 'phy=DAQi-C0+D', '{"input": [{"name": "DAQi", "unit": "mm"}], "output": [{"name": "phy", "unit": "mm"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (118, '测斜倾角计算挠度', 'Yn=Yn-1+((Xn-Xn-1)/2)*((An-1*π/180)+(An*π/180)–2*M', '弃用公式', '[{"name": "L", "alias": "距基点位置(m)"}]', '{"input": [""], "output": [""]}', null, null, null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (119, '激光测沉降', 'Δh=(Li-L0)/tanθ', null, '[{"name": "L0", "alias": "初始测值(m)"}, {"name": "θ", "alias": "挡光板与垂直方向的夹角(°)"}]', '{"input": ["Li"], "output": ["Δh"]}', 'Δh=(Li-L0)/tan(θ*π/180)', '{"input": [{"name": "Li"}], "output": [{"name": "Δh"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (120, '振动索力识别公式', 'T=4*m*l^2*f1^2/1000', null, '[{"name": "l", "alias": "索长(m)"}, {"name": "m", "alias": "线密度(kg/m)"}, {"name": "f1", "alias": "基频(Hz)"}, {"name": "δ", "alias": "误差范围(Hz)"}]', '{"input": [""], "output": ["force"]}', null, '{"input": [], "output": [{"name": "force", "unit": "kN"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (121, '测斜垂直方向位移计算', 'Δl=c*[cos(αi)-cos(α0)]', null, '[{"name": "xα0", "alias": "x方向角度初值(°)"}, {"name": "yα0", "alias": "y方向角度初值(°)"}, {"name": "c", "alias": "初始高(m)"}]', '{"input": ["αx", "αy"], "output": ["x", "y"]}', 'x=c*1000*(cos(αx*π/180)-cos(xα0*π/180));y=c*1000*(cos(αy*π/180)-cos(yα0*π/180))', '{"input": [{"name": "αx", "unit": "°"}, {"name": "αy", "unit": "°"}], "output": [{"name": "x", "unit": "mm"}, {"name": "y", "unit": "mm"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (122, '振动特征参数计算', 'phy={pv,ppv,rms}', null, '[]', '{"input": [""], "output": [""]}', null, null, null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (123, '应变计算应力', 'σ=Eε', null, '[{"name": "E", "unit": "MPa", "alias": "弹性模量(MPa)"}]', '{"input": ["ε"], "output": ["σ"]}', 'σ=ε*0.000001*E', '{"input": [{"name": "ε", "unit": "με"}], "output": [{"name": "σ", "unit": "MPa"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (124, '压力变送器公式', 'Δh=(Pi-P0)/(ρ*g)+H0', null, '[{"name": "ρ", "unit": "10^3kg/m^3", "alias": "密度(10^3kg/m^3)"}, {"name": "P0", "unit": "kPa", "alias": "压强初值(kPa)"}, {"name": "H0", "unit": "m", "alias": "安装高程(m)"}]', '{"input": ["Pi"], "output": ["Δh"]}', 'Δh=(Pi-P0)/(ρ*g)+H0', '{"input": [{"name": "Pi", "unit": "kPa"}], "output": [{"name": "Δh", "unit": "m"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (125, '力转应力', 'σ=F/A', null, '[{"name": "A", "unit": "mm^2", "alias": "钢筋计有效面积(mm^2)"}]', '{"input": ["F"], "output": ["σ"]}', 'σ=F*1000/A', '{"input": [{"name": "F", "unit": "kN"}], "output": [{"name": "σ", "unit": "MPa"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (126, '系数修正', 'f=k*fi', null, '[{"name": "k", "alias": "修正系数"}]', '{"input": ["fi"], "output": ["f"]}', 'f=k*fi', '{"input": [{"name": "fi"}], "output": [{"name": "f"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (127, '相反数', 'p=-v', null, '[]', '{"input": ["v"], "output": ["p"]}', 'p=-v', '{"input": [{"name": "v"}], "output": [{"name": "p"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (128, '一元线性公式', 'p=(v-a)*b+c', null, '[{"name": "a", "alias": "初值"}, {"name": "b", "alias": "系数"}, {"name": "c", "alias": "常量", "default": 0}]', '{"input": ["v"], "output": ["p"]}', 'p=(v-a)*b+c', '{"input": [{"name": "v"}], "output": [{"name": "p"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (129, '露点计算公式', 'X=(0.66077+(7.5*温度/(237.3+温度))+(Lg(湿度)-2);露点温度=((0.66077-X)*237.3)/(X-8.16077)', null, '[]', '{"input": ["temperature", "humidity"], "output": ["dew"]}', 'dew=((0.66077-X)*237.3)/(X-8.16077),X=0.66077+(7.5*temperature/(237.3+temperature))+(log(humidity)-2)', '{"input": [{"name": "temperature"}, {"name": "humidity"}], "output": [{"name": "dew"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (135, '力转应力(kN/mm^2)', 'σ=F/A', 'NULL', '[{"name": "A", "unit": "mm^2", "alias": "钢筋计有效面积(mm^2)"}]', '{"input": ["F"], "output": ["σ"]}', 'σ=F/A;Ai=A', '{"input": [{"name": "F", "unit": "kN"}], "output": [{"name": "σ", "unit": "kN/mm^2"}, {"name": "Ai", "unit": "mm^2"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (136, '出水量计算', 'E=f(p)', null, '[]', '{"input": ["p"], "output": ["E"]}', null, '{"input": [{"name": "p", "unit": "kPa"}], "output": [{"name": "E", "unit": "m^3/s"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (137, '三角堰经验公式', 'Q=C*(H-h1)^(5/2)', null, '[{"name": "h1", "unit": "cm", "alias": "传感器至三角堰下豁口高差(cm)"}]', '{"input": ["H"], "output": ["Q"]}', null, '{"input": [{"name": "H", "unit": "cm"}], "output": [{"name": "Q", "unit": "L/s"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (139, '减初值公式', 'X=xi-x0;Y=yi-y0;Z=zi-z0', null, '[{"name": "x0", "unit": "mm", "alias": "x方向初值(mm)"}, {"name": "y0", "unit": "mm", "alias": "y方向初值(mm)"}, {"name": "z0", "unit": "mm", "alias": "z方向初值(mm)"}]', '{"input": ["xi", "yi", "zi"], "output": ["X", "Y", "Z"]}', 'X=xi-x0;Y=yi-y0;Z=zi-z0', '{"input": [{"name": "xi", "unit": "mm"}, {"name": "yi", "unit": "mm"}, {"name": "zi", "unit": "mm"}], "output": [{"name": "X", "unit": "mm"}, {"name": "Y", "unit": "mm"}, {"name": "Z", "unit": "mm"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (141, '振动等效声级计算', 'phy={soundLevel,arrAcc}', null, '[]', '{"input": [""], "output": [""]}', null, null, null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (142, '空气数据修正公式', 'V=k*x+c', null, '[{"name": "k_no2", "alias": "no2修正系数", "default": 1}, {"name": "c_no2", "alias": "no2修正常数项", "default": 0}, {"name": "k_so2", "alias": "so2修正系数", "default": 1}, {"name": "c_so2", "alias": "so2修正常数项", "default": 0}, {"name": "k_o3", "alias": "o3修正系数", "default": 1}, {"name": "c_o3", "alias": "o3修正常数项", "default": 0}, {"name": "k_co", "alias": "co修正系数", "default": 1}, {"name": "c_co", "alias": "co修正常数项", "default": 0}]', '{"input": ["no2", "so2", "o3", "co"], "output": ["v_no2", "v_so2", "v_o3", "v_co"]}', 'v_no2=k_no2*no2+c_no2;v_so2=k_so2*so2+c_so2;v_o3=k_o3*o3+c_o3;v_co=k_co*co+c_co;', '{"input": [{"name": "no2"}, {"name": "so2"}, {"name": "o3"}, {"name": "co"}], "output": [{"name": "v_no2"}, {"name": "v_so2"}, {"name": "v_o3"}, {"name": "v_co"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (144, '水位插值计算', 'Δh=(Pi-P0)/(ρ*g)+H0;V=(V2-V1)/(h2-h1)*(Δh-h1)+V1', null, '[{"name": "ρ", "unit": "10^3kg/m^3", "alias": "密度(10^3kg/m^3)"}, {"name": "P0", "unit": "kPa", "alias": "压强初值(kPa)"}, {"name": "H0", "unit": "m", "alias": "安装高程(m)"}, {"name": "_index", "alias": "插值队列索引"}]', '{"input": ["Pi"], "output": ["V"]}', 'Δh=(Pi-P0)/(ρ*g)+H0;V=(V2-V1)/(h2-h1)*(Δh-h1)+V1', '{"input": [{"name": "Pi", "unit": "KPa"}], "output": [{"name": "V"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (148, '动应变计算公式', 'r=(i-p)*u/d', '动应变计算公式', '[{"name": "u", "unit": "mV/V", "alias": "灵敏度系数"}, {"name": "d", "unit": "V", "alias": "供电电压"}, {"name": "p", "unit": "mV", "alias": "原始电压值"}]', '{"input": ["i"], "output": ["r"]}', 'r=(i-p)*u/d', '{"input": [{"name": "i", "unit": "mV"}], "output": [{"name": "r"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (149, '建筑物倾斜率计算', 'F=tan(θi-θ0)', null, '[{"name": "x0", "alias": "x方向初始角度"}, {"name": "y0", "alias": "y方向初始角度"}]', '{"input": ["xi", "yi"], "output": ["Fx", "Fy"]}', 'Fx=tan((xi-x0)*π/180);Fy=tan((yi-y0)*π/180)', '{"input": [{"name": "xi"}, {"name": "yi"}], "output": [{"name": "Fx"}, {"name": "Fy"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (150, '水位公式', 'H=h/ρ+h0', null, '[{"name": "h0", "alias": "传感器安装高度(mm)"}, {"name": "ρ", "alias": "计算系数"}]', '{"input": ["h"], "output": ["H"]}', 'H=h/ρ+h0', '{"input": [{"name": "h", "unit": "mm"}], "output": [{"name": "H", "unit": "mm"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (151, '功率判定', 'S=p?p0', null, '[{"name": "p0", "alias": "启停功率"}, {"name": "pe", "alias": "额定功率"}]', '{"input": ["p"], "output": ["S"]}', null, '{"input": [{"name": "p", "unit": ""}], "output": [{"name": "S", "unit": ""}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (152, '压力变送器温补公式', 'Δh=(Pi-P0)/(ρ*g)+H0+Kt*(Ti-T0)', null, '[{"name": "ρ", "unit": "10^3kg/m^3", "alias": "密度(10^3kg/m^3)"}, {"name": "P0", "unit": "kPa", "alias": "压强初值(kPa)"}, {"name": "H0", "unit": "mm", "alias": "安装高程(mm)", "default": 0.0}, {"name": "Kt", "alias": "温度修正系数", "default": 0.0}, {"name": "T0", "alias": "初始温度", "default": 0.0}]', '{"input": ["Pi", "Ti"], "output": ["Δh"]}', 'Δh=(Pi-P0)*1000/(ρ*9.8)+H0+Kt*(Ti-T0)', '{"input": [{"name": "Pi", "unit": "KPa"}, {"name": "Ti"}], "output": [{"name": "Δh", "unit": "mm"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (153, '三向角度位移公式', 'X=sin(x-x0)*h;Y=sin(y-y0)*h;Z=sin(z-z0)*h;', null, '[{"name": "x0", "unit": "°", "alias": "x方向初始角度(°)"}, {"name": "y0", "unit": "°", "alias": "y方向初始角度(°)"}, {"name": "z0", "unit": "°", "alias": "z方向初始角度(°)"}, {"name": "h", "unit": "mm", "alias": "高度(mm)"}]', '{"input": ["x", "y", "z"], "output": ["X", "Y", "Z"]}', 'X=sin((x-x0)*π/180)*h;Y=sin((y-y0)*π/180)*h;Z=sin((z-z0)*π/180)*h', '{"input": [{"name": "x", "unit": "°"}, {"name": "y", "unit": "°"}, {"name": "z", "unit": "°"}], "output": [{"name": "X", "unit": "mm"}, {"name": "Y", "unit": "mm"}, {"name": "Z", "unit": "mm"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (154, '干滩长度计算公式', 'L=l+sum(pv)/sin(a)', '干滩长度计算公式', '[{"name": "l", "unit": "m", "alias": "初始干滩长度"}, {"name": "a", "alias": "角度"}]', '{"input": ["pv"], "output": ["L"]}', 'L=l+m/sin(a),m=SUM(pv)', '{"input": [{"name": "pv", "unit": "m"}], "output": [{"name": "L", "unit": "m"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (201, '激光测距', 'Δh=(len0-leni)*H/len0', null, '[{"name": "len0", "unit": "m", "alias": "初始位置(m)"}, {"name": "H", "unit": "m", "alias": "设备高程(m)"}]', '{"input": ["leni"], "output": ["Δh"]}', 'Δh=(len0*1000-abs(leni))*H/len0', '{"input": [{"name": "leni", "unit": "mm"}], "output": [{"name": "Δh", "unit": "mm"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (202, '组内平均', 'Δh=∑pv/n', null, '[]', '{"input": ["pv"], "output": ["Δh"]}', 'Δh=AVG(pv)', '{"input": [{"name": "pv"}], "output": [{"name": "Δh"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (203, '组内最大值', 'pmax=MAX(pv)', null, '[]', '{"input": ["pv"], "output": ["pmax"]}', 'pmax=MAX(pv)', '{"input": [{"name": "pv"}], "output": [{"name": "pmax"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (204, '支撑轴力计算', 'Nc=δ(Ec*Ac/Ei+Ai),δ=(∑[k*(fi^2-f0^2)/Aj])/n', null, '[{"name": "Ec", "alias": "混凝土弹性模量(kN/mm^2)"}, {"name": "Es", "alias": "钢筋弹性模量(kN/mm^2)"}, {"name": "Ac", "alias": "混凝土净截面面积(mm^2)"}, {"name": "As", "alias": "钢筋总面积(mm^2)"}]', '{"input": ["δi"], "output": ["Nc"]}', 'Nc=δ(Ec*Ac/Es+As),δ=AVG(δi)', '{"input": [{"name": "δi", "unit": "kN/mm^2"}], "output": [{"name": "Nc", "unit": "kN"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (205, '虚拟基点公式', 'Δh=Base-(RefS-RefB)', '弃用公式', '[]', '{"input": ["h"], "output": ["Δh"]}', null, null, null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (206, '虚拟基点公式(二级)', 'Δh=Base0-(RefS0-RefB0)-(RefS1-RefB1)', '弃用公式', '[]', '{"input": ["h"], "output": ["Δh"]}', null, null, null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (207, '应变花计算公式', 'Sr=1/2*E+1/(2*(1-μ))|Sr=1/3*E+1/(3*(1-μ))|Sr=1/4*E+1/(2*(1-μ))|Sr=1/2*E+4/(3*(1-μ))', '需要配置3个关联传感器,安装位置对应的角度分别为0度,45度,90度', '[{"name": "E", "alias": "弹性模量"}, {"name": "μ", "alias": "泊松比"}, {"name": "shape", "type": "enum", "alias": "应变花类型", "range": ["三片直角形", "三片等角形", "四片直角形", "T-△形"]}]', '{"input": ["εi"], "output": ["σ", "ε", "α"]}', null, '{"input": [{"name": "εi"}], "output": [{"name": "σ"}, {"name": "ε"}, {"name": "α"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (211, '应变计计算钢筋混凝土支撑轴力', 'N=(Ec*Ac+Es*As)*ε;ε=AVG(εi);As=SUM(Ai)', null, '[{"name": "Ac", "alias": "混凝土截面积(mm^2)"}, {"name": "Ec", "alias": "混凝土弹性模量(kN/mm^2)"}, {"name": "Ai", "alias": "钢筋计截面积(mm^2)"}, {"name": "Es", "alias": "钢筋弹性模量(kN/mm^2)"}]', '{"input": ["εi"], "output": ["N"]}', 'N=(Ec*Ac+Es*As)*ε;ε=AVG(εi);As=SUM(Ai)', '{"input": [{"name": "εi"}], "output": [{"name": "N"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (212, '输电塔自动调平计算公式', 'h(i,j)=[i*a*sin(θ_x) + j*b*sin(θ_y)]/2; d = min{h(i,j)}; H(i,j) = h(i,j) - d; {i=±1,j=±1}', null, '[{"name": "L", "alias": "长度(mm)"}, {"name": "W", "alias": "宽度(mm)"}]', '{"input": ["θx", "θy"], "output": ["angX", "angY", "Ha", "Hb", "Hc", "Hd"]}', null, '{"input": [{"name": "θx"}, {"name": "θy"}], "output": [{"name": "angX"}, {"name": "angY"}, {"name": "Ha"}, {"name": "Hb"}, {"name": "Hc"}, {"name": "Hd"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (213, '雷达物位计干滩计算公式', 'l=(H-(h+hi))/s;s=((h01-hi1)-(h02-hi2))/L', null, '[{"name": "H", "alias": "滩顶高程(m)"}, {"name": "h", "alias": "水位计安装高程(m)"}, {"name": "h01", "alias": "雷达物位计1安装高程(m)"}, {"name": "h02", "alias": "雷达物位计2安装高程(m)"}, {"name": "L", "alias": "水平距离(m)"}]', '{"input": ["hi"], "output": ["l"]}', null, '{"input": [{"name": "hi"}], "output": [{"name": "l"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (214, '单轴倾角仪测量双向角度', '', '配置2个传感器,第一个代表X方向,第二个代表Y方向', '[]', '{"input": ["v"], "output": ["x", "y"]}', null, '{"input": [{"name": "v"}], "output": [{"name": "x"}, {"name": "y"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (215, '单向位移计测三向位移', '', '配置3个传感器,第一个代表X方向,第二个代表Y方向,第三个代表Z方向', '[]', '{"input": ["v"], "output": ["x", "y", "z"]}', null, '{"input": [{"name": "v"}], "output": [{"name": "x"}, {"name": "y"}, {"name": "z"}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (221, '差异沉降倾斜率计算', 'diff=h2-h1;slope=diff/D', null, '[{"name": "D", "unit": "mm", "alias": "水平距离(mm)"}]', '{"input": ["hi"], "output": ["diff", "slope"]}', null, '{"input": [{"name": "hi", "unit": "mm"}], "output": [{"name": "diff", "unit": "mm"}, {"name": "slope", "unit": ""}]}', null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (222, '三向振动极值', 'x=pv(x);y=pv(y);z=pv(z);', null, '[]', '{"input": [""], "output": [""]}', null, null, null);
+INSERT INTO public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) VALUES (301, '通用振弦计算公式', 'ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)', null, '[{"name": "K", "alias": "模量系数"}, {"name": "Kt", "alias": "温度补偿系数"}, {"name": "Fo", "alias": "初始频率"}, {"name": "To", "alias": "初始温度"}]', '{"input": ["Fi", "Ti"], "output": ["ε"]}', 'ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)', null, null);
+
+
+
+
+
+
+
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (1, '1004', '3bf186e9-5049-40e4-ba57-b40d90cd1543', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (2, '4006', 'd3245ff1-0781-49bd-b37c-e245a350a709', 101, '{"x": "angle", "angleX": "xi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (3, '4005', 'fd3ad887-4a33-4d80-b3bb-d5d48ced0e7b', 102, '{"anglex": "αx", "angley": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (4, '4007', 'fd3ad887-4a33-4d80-b3bb-d5d48ced0e7b', 101, '{"anglex": "xi", "angley": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (5, '4007', '1c210656-dc67-470f-b8c3-d653c82e3bb0', 101, '{"angleX": "xi", "angleY": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (6, '4005', 'c094bbbe-bc2a-4223-bba7-539edb03d3b0', 102, '{"angleX": "αx", "angleY": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (7, '4007', 'c094bbbe-bc2a-4223-bba7-539edb03d3b0', 101, '{"angleX": "xi", "angleY": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (8, '4005', 'd32b2513-a8bb-465c-aabf-0832f355ef6b', 102, '{"AngleX": "αx", "AngleY": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (9, '4007', 'd32b2513-a8bb-465c-aabf-0832f355ef6b', 101, '{"AngleX": "xi", "AngleY": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (10, '4007', '7e6111e8-0a68-4af8-92ae-6238b7f3c631', 101, '{"angleX": "xi", "angleY": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (11, '1002', '6f16c6fa-6d60-481b-95ec-e450227fe268', null, '{"humi": "humidity", "temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (12, '1004', '6f16c6fa-6d60-481b-95ec-e450227fe268', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (13, '1006', '6f16c6fa-6d60-481b-95ec-e450227fe268', null, '{"humi": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (14, '4001', 'eb1c1781-cea9-411f-8c15-39aafc8ee62c', 104, '{"Δh": "displacement", "Pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (15, '4009', '0357e07d-3afb-4d4b-b196-766688a5b2b2', 117, '{"phy": "expansion", "elongationIndicator": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (16, '1001', 'fd8e5a82-2b93-4d83-9132-4666b974079d', null, '{"windSpeed": "speed", "windDirection": "direction"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (17, '1022', 'fd8e5a82-2b93-4d83-9132-4666b974079d', null, '{"windSpeed": "speed"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (18, '4001', 'e833a38c-2409-474d-8d23-86ff4d45b199', 100, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (19, '1022', 'd523046b-7e32-486b-a1ab-cac779eb6209', null, '{"windSpeed": "speed"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (20, '4001', '5bc92012-60a1-48ac-840f-575cb4e94c48', 100, '{"phy": "displacement", "distance": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (21, '1007', 'a8a32974-fa53-4e18-a264-58c885d3c409', null, '{"noise": "soundLevel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (22, '4001', '65bd339b-0469-4019-8c96-55a6dbc6b697', 101, '{"length": "displacement"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (23, '1003', '003540d0-616c-4611-92c1-1cd31005eabf', null, '{"rainFall": "rainfall"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (24, '1002', 'c7528fab-94f4-4110-9aaf-8964afa09c20', null, '{"humi": "humidity", "temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (25, '1004', 'c7528fab-94f4-4110-9aaf-8964afa09c20', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (26, '1006', 'c7528fab-94f4-4110-9aaf-8964afa09c20', null, '{"humi": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (27, '1002', '497ca51c-dd0a-46cb-8651-ac4bb7bd45c0', null, '{"hum": "humidity", "temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (28, '1004', '497ca51c-dd0a-46cb-8651-ac4bb7bd45c0', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (29, '1006', '497ca51c-dd0a-46cb-8651-ac4bb7bd45c0', null, '{"hum": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (30, '4005', 'ae93a369-2ef8-4e20-83d6-d2f89076b115', 102, '{"xDegree": "αx", "yDegree": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (31, '4007', 'ae93a369-2ef8-4e20-83d6-d2f89076b115', 101, '{"xDegree": "xi", "yDegree": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (32, '4001', 'f9cf9002-bdbd-458c-8534-37db6183e217', 117, '{"phy": "displacement", "distance": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (33, '4005', '77d3bafd-4986-4848-b3c9-dfe847c6750e', 102, '{"angleX": "αx", "angleY": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (34, '4007', '77d3bafd-4986-4848-b3c9-dfe847c6750e', 101, '{"angleX": "xi", "angleY": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (35, '1002', 'f672fbb3-ce35-4c54-8e37-b50ce49c8978', null, '{"Hum": "humidity", "Temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (36, '1004', 'f672fbb3-ce35-4c54-8e37-b50ce49c8978', null, '{"Temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (37, '1006', 'f672fbb3-ce35-4c54-8e37-b50ce49c8978', null, '{"Hum": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (38, '4001', '584a210b-20f2-49cf-906a-9d6b4883af09', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (39, '4004', '584a210b-20f2-49cf-906a-9d6b4883af09', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (40, '3001', 'abd08d4d-9de2-4f58-88be-94ec9aff0304', null, '{"force": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (41, '4008', 'a0bf9003-9dbd-4cc7-8bea-7da81ce69f32', 116, '{"phy": "crack", "elongationIndicator": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (42, '4009', 'a0bf9003-9dbd-4cc7-8bea-7da81ce69f32', 116, '{"phy": "expansion", "elongationIndicator": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (43, '4008', '2bee8b28-3a7d-4a6d-96e7-e81b94afa48c', 117, '{"phy": "crack", "elongationIndicator": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (44, '4009', '2bee8b28-3a7d-4a6d-96e7-e81b94afa48c', 117, '{"phy": "expansion", "elongationIndicator": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (45, '1001', '1d4b6c8a-8a37-4ba0-9612-ad63ea6f1f3a', null, '{"windSpeed": "speed", "windDirection": "direction"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (46, '1022', '1d4b6c8a-8a37-4ba0-9612-ad63ea6f1f3a', null, '{"windSpeed": "speed"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (47, '4001', 'c9946e27-bce7-41eb-b341-d6b03a7f115f', 102, '{"x": "displacement", "anglex": "αx"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (48, '4005', 'c9946e27-bce7-41eb-b341-d6b03a7f115f', 102, '{"anglex": "αx", "angley": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (49, '4007', 'c9946e27-bce7-41eb-b341-d6b03a7f115f', 101, '{"anglex": "xi", "angley": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (50, '4001', '0a25e0b7-784b-46fb-8fa3-d1a99593f343', 111, '{"phy": "displacement", "length": "Ci"}', false, null, '{}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (51, '4011', '0a25e0b7-784b-46fb-8fa3-d1a99593f343', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (52, '4005', '28abcb7f-eb40-406b-a798-fc280b30638e', 102, '{"xDegree": "αx", "yDegree": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (53, '4007', '28abcb7f-eb40-406b-a798-fc280b30638e', 101, '{"xDegree": "xi", "yDegree": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (54, '4005', '3e462bff-8f09-4e70-90e3-231a08906309', 102, '{"xDegree": "αx", "YyDegree": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (55, '4007', '3e462bff-8f09-4e70-90e3-231a08906309', 101, '{"xDegree": "xi", "YyDegree": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (56, '1002', 'b3f251c1-ab5e-4427-8b38-9180d6544783', null, '{"temp": "temperature", "humid": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (57, '1004', 'b3f251c1-ab5e-4427-8b38-9180d6544783', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (58, '1006', 'b3f251c1-ab5e-4427-8b38-9180d6544783', null, '{"humid": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (59, '1004', '193a9dcf-959d-4cd5-a186-637c11ae97a0', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (60, '4001', '9e8050a9-f38a-45c3-a02b-40670bdf19b7', 102, '{"x": "displacement", "anglex": "αx"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (61, '4002', '9e8050a9-f38a-45c3-a02b-40670bdf19b7', 102, '{"anglex": "αx", "angley": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (62, '4005', '9e8050a9-f38a-45c3-a02b-40670bdf19b7', 102, '{"x": "x", "y": "y", "anglex": "αx", "angley": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (63, '4006', '9e8050a9-f38a-45c3-a02b-40670bdf19b7', null, '{"anglex": "angle"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (64, '4007', '9e8050a9-f38a-45c3-a02b-40670bdf19b7', 101, '{"x": "x", "y": "y", "anglex": "xi", "angley": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (65, '4010', '9e8050a9-f38a-45c3-a02b-40670bdf19b7', 101, '{"Δθx": "θix", "Δθy": "θiy", "anglex": "θx", "angley": "θy"}', true, 212, '{"Ha": "a", "Hb": "b", "Hc": "c", "Hd": "d", "angX": "x", "angY": "y", "anglex": "θx", "angley": "θy"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (66, '2001', '870242c3-963d-417d-85fa-21add06c9e0a', null, '{"cableforce": "cableForce"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (67, '3001', '9110f259-e269-446d-afa3-798069f4534d', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (68, '1002', '131c98fc-2216-4f0f-9cd3-581d88f9affd', null, '{"humidity": "humidity", "temperature": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (69, '1004', '131c98fc-2216-4f0f-9cd3-581d88f9affd', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (70, '1006', '131c98fc-2216-4f0f-9cd3-581d88f9affd', null, '{"humid": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (71, '4001', '38d818a3-1e2d-42bd-af74-e6ed5fe0c8fd', 119, '{"Δh": "displacement", "length": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (72, '1004', 'be246ea1-fd75-4151-92c6-54b278d11287', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (375, '2004', '3f953006-06c8-41a6-a6ae-55b9991e284b', null, null, false, null, '{}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (73, '1002', '34e17d2c-cfa7-42a7-88d0-fc64f13f68c2', null, '{"Hum": "humidity", "Temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (74, '1004', '34e17d2c-cfa7-42a7-88d0-fc64f13f68c2', null, '{"Temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (75, '1006', '34e17d2c-cfa7-42a7-88d0-fc64f13f68c2', null, '{"Hum": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (76, '2004', '002f9d36-6c13-406f-aa9d-c1c53e4c0d50', null, '{}', true, 204, '{"Nc": "force", "force": "δi"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (77, '1002', 'e5b27a73-2d4c-4b53-8bcd-86583097a730', null, '{"humi": "humidity", "temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (78, '4007', 'c52cea56-d5aa-4b14-ad9f-05fb6974e528', null, '{"xDegree": "x", "yDegree": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (79, '4007', '43e2a07a-c33e-4e54-ba5e-0a948ae4ba61', null, '{"xDegree": "x", "yDegree": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (80, '1002', '8ae3c80d-72ae-4e4f-b6e7-fd2dda6cc125', null, '{"humidity": "humidity", "temperature": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (81, '1012', '8ae3c80d-72ae-4e4f-b6e7-fd2dda6cc125', null, '{"pressure": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (82, '1026', '3f80f427-4615-44ae-b2e8-e783733d0ea5', null, '{"value": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (83, '1018', 'f86c7d29-f504-474d-8665-d484e5c41e8a', null, '{"co2": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (84, '1020', 'cff552ac-d565-4a44-8400-e0f4382ce853', null, '{"illuminance": "lumen"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (85, '4007', 'dfbedf15-8cef-4760-9cad-efaab883db3d', null, '{"xDegree": "x", "yDegree": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (86, '4002', '409f2510-dd44-4990-b530-096bf2bcb592', null, '{"strain": "y", "displacement": "x"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (87, '4007', '96870c78-2ed9-4141-9438-e9415cd6eeb8', null, '{"xDegree": "x", "yDegree": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (88, '1027', 'abb38d23-09f3-48fc-b9ee-4dfaf1db995b', null, '{"PM10": "pm10", "PM25": "pm25"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (89, '2003', '6aa982a5-d7a3-48ee-b1dc-afe4686ce796', null, '{"force": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (90, '1027', '61db6668-b790-47e8-9429-55bfa4f98b90', null, '{"TSP": "suspended", "PM10": "pm10", "PM25": "pm25"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (91, '4001', '4d48086d-804a-426d-9867-0e87efdc74fe', 117, '{"phy": "displacement", "settlement": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (92, '4004', '4d48086d-804a-426d-9867-0e87efdc74fe', null, '{"settlement": "deflection"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (93, '4003', '7776a9dc-8e14-417c-a5fe-4b1dd1c869d7', 109, '{"x": "x", "y": "y", "z": "z"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (94, '4001', '701ab719-e85b-4428-ad59-1b7adff31c56', 117, '{"phy": "displacement", "settlement": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (95, '1027', '57bf451a-e6f5-4df5-a4a7-c2c42a46546f', null, '{"PM10": "pm10", "PM25": "pm25"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (96, '4001', 'b56e401a-75e7-47ea-84db-6638fd421792', 117, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (97, '1028', '7c1b8df9-4088-4cc7-b07b-3299d827d7d0', null, '{"temp": "temp", "thickness": "thickness"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (98, '1017', '9604d366-28f8-4291-a5bd-5d049b1e90eb', null, '{"concentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (99, '1018', '9604d366-28f8-4291-a5bd-5d049b1e90eb', null, '{"concentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (100, '1013', '6039a6d8-af54-411e-a520-451b20b6d089', null, '{"physicalvalue": "liquidLevel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (101, '1012', 'dfffdb75-6ad1-4092-95d2-ac6596b3c4ce', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (102, '1004', '235b7fe6-cf6f-4cf4-8d40-a3103cc0fba7', null, '{"physicalvalue": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (103, '4007', '7c4c667b-dbf0-4c9b-9d7d-7ad9b61b200e', null, '{"xDegree": "x", "yDegree": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (104, '1005', '8e782506-4bab-4798-9e24-315107e3cc15', null, '{"pressure": "waterLevel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (105, '1014', 'd51cfe97-0f8a-4f38-95fb-34208b171056', null, '{"flow": "instant", "cumulant": "total"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (106, '1014', 'ab34de76-f758-4311-8bfc-dc7054a58ecf', null, '{"standardTotalFlow": "total", "standardInstanceFlow": "instant"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (107, '1020', '05d70310-6689-4174-b4ae-274ab5e8f287', null, '{"illumination": "lumen"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (108, '1018', 'ed599be6-4811-4a09-a065-4b29586a4c00', null, '{"concentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (109, '4008', 'e7a84149-53b0-4ba3-88e7-fe7e0e0f21d4', null, '{"lvdt": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (110, '4001', '112843b4-e834-4892-9ef3-260fe3d90c24', 116, '{"phy": "displacement", "height": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (111, '4005', 'fb1119c8-c430-4066-9f02-60a558d92a68', 102, '{"y": "y", "phy": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (112, '3001', 'e8ccf6dc-5626-4bb7-9f88-9bf8972619b4', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (113, '3001', '9e56c900-b85f-4abd-b53f-3162016875ad', null, '{"value1": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (114, '4001', '1f00228f-9138-4060-9b9b-1ae22f803af7', 117, '{"phy": "displacement", "level": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (115, '4007', 'c02185df-1224-4e63-aab4-3d284c8bb526', null, '{"angleX": "x", "angleY": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (116, '4007', '42fbfa5f-4ca7-4e1d-b42f-08f4f641657a', null, '{"angleX": "x", "angleY": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (117, '4007', 'e47f8159-ee4b-45c0-b827-30b69d0328d8', null, '{"angleX": "x", "angleY": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (118, '4007', 'ff38a597-0318-47bb-a647-5ad78dd2dca8', null, '{"angleX": "x", "angleY": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (119, '4007', 'addad535-5578-4010-9d74-dbeab2b9e9eb', null, '{"angleX": "x", "angleY": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (120, '4007', '70177dd0-b5ab-45c0-8338-a6f69138f85f', null, '{"angleX": "x", "angleY": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (121, '4007', '72b0bf25-78ae-4ab5-995b-c83cfbf52484', null, '{"angleX": "x", "angleY": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (122, '4007', '0bae88b4-e518-4869-96ea-c833160a9914', null, '{"angleX": "x", "angleY": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (123, '4007', '0d123bba-3d2e-4252-a27e-af567da8aca1', null, '{"angleX": "x", "angleY": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (124, '2003', '660c0ba2-d714-4ad3-8166-a1fa25a9d7d1', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (125, '1005', 'd8860bee-374c-497a-a33a-258af59e3690', 103, '{"H": "waterLevel", "physicalvalue": "h"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (126, '2004', '6c0d843c-169e-49b8-8dde-188699cc3077', null, '{}', true, 204, '{"Nc": "force", "physicalvalue": "δi"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (127, '3001', '17c35362-c638-46de-bea3-840893daf864', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (128, '2004', 'abfa6634-cca0-4696-b67e-1c2eb2e57c9b', null, '{"physicalvalue": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (129, '2004', 'c50b3ecc-a416-4991-b64f-f2c79d8d1848', null, '{"physicalvalue": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (130, '2004', 'ecfacbbe-037c-42cb-89ce-68a2e6170758', null, '{}', true, 214, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (131, '3001', 'd77b7e20-7877-47dc-aef4-37a663bac660', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (132, '1004', '22d007b2-5200-4bf6-85dc-c755a7a75bcf', null, '{"temperature": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (133, '2002', '6f1f679a-d9b7-4fe3-945d-8b83105284a8', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (134, '4007', 'fb1119c8-c430-4066-9f02-60a558d92a68', null, null, true, 214, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (135, '4010', '77d3bafd-4986-4848-b3c9-dfe847c6750e', null, null, true, 212, '{"Ha": "a", "Hb": "b", "Hc": "c", "Hd": "d", "angX": "x", "angY": "y", "angleX": "θx", "angleY": "θy"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (136, '4010', '28abcb7f-eb40-406b-a798-fc280b30638e', null, null, true, 212, '{"Ha": "a", "Hb": "b", "Hc": "c", "Hd": "d", "angX": "x", "angY": "y", "xDegree": "θx", "yDegree": "θy"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (137, '4001', 'ac32d002-0463-4bc7-a307-86236e6307a7', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (138, '4004', 'ac32d002-0463-4bc7-a307-86236e6307a7', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (139, '4001', '0aae766a-5d82-479a-bd71-7eb1e0e4e20f', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (140, '4004', '0aae766a-5d82-479a-bd71-7eb1e0e4e20f', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (141, '4001', '91372b00-3bf7-4eb0-9495-ad544dfb04ca', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (142, '4004', '91372b00-3bf7-4eb0-9495-ad544dfb04ca', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (143, '4001', 'e8d9a100-9650-4afc-a260-9c7bcdea9263', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (144, '4004', 'e8d9a100-9650-4afc-a260-9c7bcdea9263', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (145, '4001', 'f3ad3df8-e1ad-4e05-b479-185ac5ae8602', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (146, '4004', 'f3ad3df8-e1ad-4e05-b479-185ac5ae8602', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (147, '4001', '0c5d070d-fb83-4f78-acc0-a0bd12be6cc2', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (148, '4004', '0c5d070d-fb83-4f78-acc0-a0bd12be6cc2', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (376, '2004', '147442dd-5edb-439c-aa56-d592cf1fa32f', null, null, false, null, '{}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (149, '4001', '13126536-b6af-48d0-b43e-25144b65dd8d', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (150, '4004', '13126536-b6af-48d0-b43e-25144b65dd8d', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (151, '4001', '16ca7eed-6c64-4c4b-a495-6c5f785b86cd', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (152, '4004', '16ca7eed-6c64-4c4b-a495-6c5f785b86cd', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (153, '4001', '4d523084-bf91-421f-bafc-f278a63c5541', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (154, '4004', '4d523084-bf91-421f-bafc-f278a63c5541', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (155, '4008', '10f69514-4a4b-4ecd-a318-f8bf0c81a965', null, '{"physicalvalue": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (156, '4007', 'ef4d9187-0ca8-44c7-b7f5-42e6c0904fd5', null, '{"angleX": "x", "angleY": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (157, '4007', '79ef29a0-9796-43ce-957d-952d3b16d70a', null, '{"angleX": "x", "angleY": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (158, '4007', 'abefa36d-6587-4818-bb39-e14a51c26b4e', null, '{"angleX": "x", "angleY": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (159, '4007', 'c0b0b779-cafb-4d7f-b4ff-64534e422738', null, '{"anglex": "x", "angley": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (160, '4006', 'ef4d9187-0ca8-44c7-b7f5-42e6c0904fd5', null, '{"angleX": "angle"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (161, '4006', '79ef29a0-9796-43ce-957d-952d3b16d70a', null, '{"angleX": "angle"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (162, '4006', 'abefa36d-6587-4818-bb39-e14a51c26b4e', null, '{"angleX": "angle"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (163, '4006', 'c0b0b779-cafb-4d7f-b4ff-64534e422738', null, '{"anglex": "angle"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (164, '1002', 'ddf17ba9-fcef-4ef4-97f0-c09e0503dfa3', null, '{"humi": "humidity", "temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (165, '4008', '3eb1b2e4-ba3a-4329-a821-33a7f5bec873', 117, '{"phy": "crack", "value": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (166, '1002', '85ba72e3-3754-4b11-a144-757d7a01f1dc', null, '{"temp": "temperature", "value": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (167, '3001', '70ed36c0-d58f-482d-8337-fafed8a2e6ac', null, '{"value": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (168, '4001', '14f67669-6cec-42c0-a7ca-4b60950ec7b5', 117, '{"phy": "displacement", "value": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (169, '4001', 'e08c86d5-195d-4cf6-a1a5-1cfd113ddd52', 117, '{"phy": "displacement", "value": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (170, '4007', 'f5d141ad-ea96-4398-8712-2a802af988f8', null, '{"value": "x", "offsetValue": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (171, '1005', '931fef11-654a-4f36-bf37-dbc168c46e84', 104, '{"Δh": "waterLevel", "value": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (172, '2003', '931fef11-654a-4f36-bf37-dbc168c46e84', null, '{"value": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (173, '2003', '4d523084-bf91-421f-bafc-f278a63c5541', 117, '{"Δl": "pressure", "pressure": "ci"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (174, '1022', '745e1f26-ee66-45dd-9606-052a34a944fc', null, '{"windSpeed": "speed"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (175, '1018', '67becf68-18c7-4ab3-83b2-d306f89bd25d', null, '{"smoke": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (176, '4001', 'e58ee78a-e499-483c-acc8-a42683d62149', null, '{"phy": "displacement"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (177, '4004', 'd148ae2e-c0dd-4e57-a0e8-833d32107f31', 100, '{"phy": "deflection", "level": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (178, '4001', '1c332609-ad1d-4066-b0fa-67df29181432', 117, '{"phy": "displacement", "distance": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (179, '2004', 'b1c85f0b-c610-4243-83a4-3a1e87b411ad', null, '{"phy": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (180, '2004', 'f0b38ea6-f88e-4e79-b7bb-02d09ef2cf03', null, '{"phy": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (181, '2004', '92d06569-3e06-4ceb-91e5-d28589632145', null, '{"phy": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (182, '4001', '5ecfc751-afb0-4596-a6f7-85a31eca40c3', 117, '{"phy": "displacement", "level": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (183, '4011', '1c332609-ad1d-4066-b0fa-67df29181432', 117, '{"phy": "displacement", "distance": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (184, '4001', 'd87be87a-12ba-4e65-97ba-816bcb3e2e62', null, '{"value": "displacement"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (185, '3001', 'c98659b5-30ec-471f-9654-41f5f8df47b0', null, '{"value": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (186, '4007', '7fefd73e-8fd9-48a6-8d7a-76f5796a8197', null, null, true, 214, '{"value": "v"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (187, '4007', 'fdf34922-d64e-4616-9313-96d7d94b8412', null, null, true, 214, '{"value": "v"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (188, '1008', '24b365fd-4e6e-4800-ad48-d3f082c9b2b8', 106, '{"v": "seepage", "pressure": "p"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (189, '1008', 'e015d9d3-542e-4d54-80c6-39db4ba20877', 106, '{"v": "seepage", "pressure": "p"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (190, '1008', '65f4e736-8261-40cc-b3b8-948ab0e4252e', 106, '{"v": "seepage", "pressure": "p"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (191, '1008', '6bd546bc-55b0-4ee4-8b58-34feec8cdb6c', 106, '{"v": "seepage", "pressure": "p"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (192, '1008', '3462227d-e989-421c-9f48-c0ae7a573b78', 106, '{"v": "seepage", "pressure": "p"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (193, '1008', '16ca7eed-6c64-4c4b-a495-6c5f785b86cd', 106, '{"v": "seepage", "pressure": "p"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (194, '1008', '13126536-b6af-48d0-b43e-25144b65dd8d', 106, '{"v": "seepage", "pressure": "p"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (195, '1008', '0c5d070d-fb83-4f78-acc0-a0bd12be6cc2', 106, '{"v": "seepage", "pressure": "p"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (196, '1008', 'f3ad3df8-e1ad-4e05-b479-185ac5ae8602', 106, '{"v": "seepage", "pressure": "p"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (197, '1008', 'e8d9a100-9650-4afc-a260-9c7bcdea9263', 106, '{"v": "seepage", "pressure": "p"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (198, '1008', 'd7912272-424d-4546-a3c1-43a24365dde0', 106, '{"v": "seepage", "pressure": "p"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (199, '1008', '91372b00-3bf7-4eb0-9495-ad544dfb04ca', 106, '{"v": "seepage", "pressure": "p"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (200, '1008', '0aae766a-5d82-479a-bd71-7eb1e0e4e20f', 106, '{"v": "seepage", "pressure": "p"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (201, '1008', 'ac32d002-0463-4bc7-a307-86236e6307a7', 106, '{"v": "seepage", "pressure": "p"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (202, '1008', '584a210b-20f2-49cf-906a-9d6b4883af09', 106, '{"v": "seepage", "pressure": "p"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (203, '4001', 'a8e0db23-0d35-4eb1-a5b8-deadd9c3d80d', 117, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (204, '4004', 'a8e0db23-0d35-4eb1-a5b8-deadd9c3d80d', 117, '{"phy": "deflection", "settlement": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (205, '3001', 'cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (206, '3001', '11f0a3dc-13ad-4c40-ae16-1b2f1d139564', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (207, '3001', '13ee1f91-04cc-48af-820e-ffc0ed179b6c', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (208, '1018', 'ad41eeec-8dff-4cbb-9a3a-8d42db92bca8', null, '{"concentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (209, '1018', '6bf32a53-c1d4-4014-b0b9-da1af43bda76', null, '{"concentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (210, '1018', '676795c3-0d71-441d-aa0e-62b82dff8193', null, '{"concentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (211, '1018', 'ac8a15b2-1daa-48ce-b77f-52e2429c66bd', null, '{"concentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (212, '1026', '5e96e066-3520-443f-80a4-9a3a1a7badd6', null, '{"concentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (213, '1026', '2f8c4ab2-42a9-44d8-bd3d-cfa9d1f55252', null, '{"concentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (214, '1004', '1cdf6eb6-fcd9-4346-992d-6ddc41b956cf', null, '{"concentration": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (215, '1006', '3da31fde-9ea8-406f-9a1b-4a9932dbc2df', null, '{"concentration": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (216, '1006', 'f55d7414-2db9-4c07-ad9b-34637318171e', null, '{"humi": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (217, '1004', '608c11f3-91d9-4d92-9459-a4f7eb20bf1d', null, '{"phy": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (218, '3001', '608c11f3-91d9-4d92-9459-a4f7eb20bf1d', null, '{"phy": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (219, '1004', '947fdddf-6d80-4972-88cc-601559ca3458', null, '{"phy": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (220, '3001', '947fdddf-6d80-4972-88cc-601559ca3458', null, '{"phy": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (221, '4005', '771be2fa-a2f9-4ba8-8c08-76b091627b87', 102, '{"anglex": "αx", "angley": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (222, '1004', 'cb339f74-5895-4180-a0dc-a3cf12151b0b', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (223, '4001', '35d1f34b-ccac-4110-9bb6-7e0a3327ef18', null, '{"physicalvalue": "displacement"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (224, '2004', 'd14c6b02-4298-4713-b970-eba0aafee88b', 113, '{"F": "force", "physicalvalue": "ε"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (225, '4001', '448efd11-ceec-4f64-93a0-ad7133e38b8d', null, '{"phy": "displacement"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (226, '4002', 'd32eacce-7db0-4c15-b17c-f1d870389c14', 121, '{}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (227, '4001', '2e2456a6-9738-456c-abf1-94d5ebad124a', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (228, '4001', '0f4f59de-cde7-4aec-a402-703e5426bb76', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (229, '4001', 'cef1d2a2-c44e-4143-84bd-2a65140e33d0', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (230, '4001', '9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (231, '3001', '61165e71-48f1-4c09-835c-9b72dbc867b5', null, '{"force": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (232, '3001', '5bac98f9-a11e-447c-a180-0f039480625e', null, '{"force": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (233, '3001', '2e030981-497c-4ba5-9580-2438239e32bc', null, '{"force": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (234, '2004', '73a7b800-25d7-41ad-872d-96cc4f9430de', null, '{"physicalvalue": "force"}', false, null, '{}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (235, '2004', 'b77b1ad2-2546-4219-bbe8-dc6b71d7fe01', null, '{"physicalvalue": "force"}', false, null, '{}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (236, '2004', '473aee20-7c00-41cd-bd6e-b44c35c758ea', null, '{"physicalvalue": "force"}', false, null, '{}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (237, '2004', '0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1', null, '{"physicalvalue": "force"}', false, null, '{}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (238, '1005', 'c9eacd36-38d6-48b9-9672-e76406906ea3', 104, '{"Δh": "waterLevel", "physicalvalue": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (239, '1005', '91766d07-1ae8-4f40-9fed-0d9a21eaf6f3', 103, '{"H": "waterLevel", "physicalvalue": "h"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (240, '1005', '2aba0129-a2af-4e99-ad8e-ca8e20aa62f6', 103, '{"H": "waterLevel", "physicalvalue": "h"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (241, '1005', 'cb4eb310-0876-492a-9e06-8cd0a5542c5b', 103, '{"H": "waterLevel", "physicalvalue": "h"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (242, '1005', 'c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d', 103, '{"H": "waterLevel", "physicalvalue": "h"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (243, '1005', '37c046eb-9a0e-49b0-95fb-f0128338f381', 103, '{"H": "waterLevel", "physicalvalue": "h"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (244, '2003', '1f3f14a2-a6d4-44a5-859b-3406794e7b37', null, '{"phy": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (245, '1005', '157090bc-b53c-4ae3-94fc-4b3804ed6433', 100, '{"phy": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (246, '4007', '684a2261-481c-4504-9f4b-665baf97aae6', null, '{"value1": "x", "value2": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (247, '4005', '684a2261-481c-4504-9f4b-665baf97aae6', 102, '{"value1": "αx", "value2": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (248, '1002', 'c36c08c3-4f22-474e-b748-c6c32288c802', null, '{"data1": "temperature", "data2": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (249, '1002', '2b6f224d-770e-41bc-b28b-5afbe3b213c4', null, '{"data1": "temperature", "data2": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (250, '1022', '09e8eef6-6b70-4cda-84c2-a7680f7a535f', null, '{"data2": "speed"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (251, '6001', '2078f06f-be3c-4d10-90b1-200f3bdb00ae', null, '{"mainCurrt": "electricity", "mainSpeed": "rotateSpeed", "mainTorque": "torque", "mainWeight": "weight", "mainVoltage": "outputVoltage", "mainGVoltage": "busbarVoltage", "mainPosition": "location"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (252, '6002', '2078f06f-be3c-4d10-90b1-200f3bdb00ae', null, '{"deputyWeight": "weight", "deputyPosition": "location"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (253, '6003', '2078f06f-be3c-4d10-90b1-200f3bdb00ae', null, '{"lCarCurrt": "electricity", "lCarSpeed": "rotateSpeed", "lCarTorque": "torque", "lCarVoltage": "outputVoltage", "lCarGVoltage": "busbarVoltage", "lCarPosition": "location"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (254, '6004', '2078f06f-be3c-4d10-90b1-200f3bdb00ae', null, '{"sCarCurrt": "electricity", "sCarSpeed": "rotateSpeed", "sCarTorque": "torque", "sCarVoltage": "outputVoltage", "sCarGVoltage": "busbarVoltage", "sCarPosition": "location"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (255, '1002', '5f908b85-0f3a-48c0-bc83-8e191731a754', null, '{"humi": "humidity", "temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (256, '4011', '38d818a3-1e2d-42bd-af74-e6ed5fe0c8fd', 201, '{"Δh": "displacement", "length": "leni"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (257, '2003', 'abaf6bf4-288f-4d21-9fab-515213e6dcac', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (258, '2003', '424f45f6-916c-4383-bce4-c71153f82e63', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (259, '2003', '780ffe7d-7369-4d2f-9184-32790466f2ba', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (260, '2003', 'ccb72dc5-f9bc-424d-a3ec-e6e9121bc534', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (261, '2003', 'd2a5375c-0240-4435-9b8f-a62372fafaca', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (262, '4007', 'af1cd7e8-52e1-4411-9c9a-20bc82a2786d', 101, '{"angleX": "xi", "angleY": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (263, '2005', '219cbb09-9c49-4167-846d-00a8bdfadb9a', null, '{"pressure": "gravity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (264, '4001', '24b365fd-4e6e-4800-ad48-d3f082c9b2b8', 152, '{"Δh": "displacement", "pressure": "Pi", "temperature": "Ti"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (265, '4004', '24b365fd-4e6e-4800-ad48-d3f082c9b2b8', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (266, '4001', 'e015d9d3-542e-4d54-80c6-39db4ba20877', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (267, '4004', 'e015d9d3-542e-4d54-80c6-39db4ba20877', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (268, '4001', '65f4e736-8261-40cc-b3b8-948ab0e4252e', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (269, '4004', '65f4e736-8261-40cc-b3b8-948ab0e4252e', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (270, '4001', '6bd546bc-55b0-4ee4-8b58-34feec8cdb6c', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (271, '4004', '6bd546bc-55b0-4ee4-8b58-34feec8cdb6c', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (272, '4001', '3462227d-e989-421c-9f48-c0ae7a573b78', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (273, '4004', '3462227d-e989-421c-9f48-c0ae7a573b78', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (274, '4001', 'd7912272-424d-4546-a3c1-43a24365dde0', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (275, '4004', 'd7912272-424d-4546-a3c1-43a24365dde0', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (276, '1013', '8e782506-4bab-4798-9e24-315107e3cc15', null, '{"pressure": "liquidLevel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (277, '4002', '0c5bca0d-95b8-416e-865b-1f09bb49285f', 102, '{"x": "x", "y": "y", "xDegree": "αx", "yDegree": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (278, '4007', '0c5bca0d-95b8-416e-865b-1f09bb49285f', 101, '{"xDegree": "xi", "yDegree": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (279, '4005', '0c5bca0d-95b8-416e-865b-1f09bb49285f', 102, '{"xDegree": "αx", "yDegree": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (280, '1005', 'eccb6310-f340-4668-9469-3df210aa471d', null, '{"waterLevel": "waterLevel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (281, '1005', '6850f742-c5b7-4984-b1ef-d01b16015eb9', 100, '{"phy": "waterLevel", "waterLevel": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (282, '4004', '6850f742-c5b7-4984-b1ef-d01b16015eb9', null, '{"waterLevel": "deflection"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (283, '1018', 'ac3a0caf-7018-44d2-9337-32c7194ec412', null, '{"concentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (284, '1018', 'a96f169e-56b9-49c8-a5cd-caade25fbf14', null, '{"concentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (285, '1018', '3415a2e9-2c44-402f-872c-f0187cef058f', null, '{"concentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (286, '4001', 'cdf69820-94cb-45a3-acfe-21aa83737595', 100, '{"phy": "displacement", "location1": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (287, '4004', 'cdf69820-94cb-45a3-acfe-21aa83737595', 100, '{"phy": "deflection", "location1": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (288, '4001', '831ab1f7-fe76-4152-b7a0-3359bdf7c3bd', 100, '{"phy": "displacement", "Offset": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (289, '4004', '831ab1f7-fe76-4152-b7a0-3359bdf7c3bd', 100, '{"phy": "deflection", "Offset": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (290, '4005', '7e6111e8-0a68-4af8-92ae-6238b7f3c631', 102, '{"angleX": "αx", "angleY": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (291, '4002', '7e6111e8-0a68-4af8-92ae-6238b7f3c631', 102, '{"angleX": "αx", "angleY": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (292, '2002', 'ca7ff65b-b5a0-49f3-ad0b-6821012604ce', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (293, '4008', 'fe65a1cd-2040-403c-bb6f-529d4063bc45', 117, '{"phy": "crack", "elongationIndicator": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (294, '4008', 'f2c96428-649e-47e9-9b6f-e5749195cb33', 117, '{"phy": "crack", "elongationIndicator": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (295, '1004', '8d1d1382-984f-4aa9-8e57-c2a2c21e0c06', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (296, '1022', 'e2d93988-c0e0-4581-b406-e43e455f7864', null, '{"windSpeed": "speed"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (297, '4001', '93f84dd4-087b-46ef-bdda-9db4adfdb16b', 100, '{"phy": "displacement", "liquidLevel": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (298, '4004', '93f84dd4-087b-46ef-bdda-9db4adfdb16b', 100, '{"phy": "deflection", "liquidLevel": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (299, '4001', '40b8c657-2644-4ce2-b490-cf61523a4012', null, '{"length": "displacement"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (300, '4001', 'e889420f-f8d0-4e0d-aab2-1f2f965e75bb', null, '{"length": "displacement"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (301, '4007', '6c19e60e-0ed7-4e22-abb4-ddc9caf20d91', null, '{"angleX": "x", "angleY": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (302, '4005', '6c19e60e-0ed7-4e22-abb4-ddc9caf20d91', 102, '{"angleX": "αx", "angleY": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (303, '4002', '6c19e60e-0ed7-4e22-abb4-ddc9caf20d91', 102, '{"angleX": "αx", "angleY": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (304, '1013', '21d99b83-6a52-4465-90c4-125d8330e1c1', null, '{"level": "liquidLevel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (305, '2003', 'aa86893b-e991-4c57-94a7-b29e7349fe50', null, '{"weight": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (306, '4007', '7118fecd-555d-4d6c-9b3a-63b6ed0d2a45', 101, '{"xDegree": "xi", "yDegree": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (307, '4007', '183c2cd5-5a53-4985-80aa-33a6ce2f82d4', 101, '{"angleX": "xi", "angleY": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (308, '1016', '5fcd559a-c3dc-4c38-acde-b4b1749b4ab3', null, '{"ph": "ph"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (309, '4007', 'ef2cc4b4-23d3-4ff0-981b-84a8c98113ab', 101, '{"angleX": "xi", "angleY": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (310, '4002', 'ef2cc4b4-23d3-4ff0-981b-84a8c98113ab', 102, '{"angleX": "αx", "angleY": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (311, '4005', 'ef2cc4b4-23d3-4ff0-981b-84a8c98113ab', 102, '{"angleX": "αx", "angleY": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (312, '4011', 'd2e5e59c-47f9-4eb9-98ce-c6dc6f2f0d66', 119, '{"Δh": "displacement", "distance": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (313, '4011', '0fc23377-9f3d-4511-ab1b-8b8df0259d2f', 119, '{"Δh": "displacement", "distance": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (314, '4011', '14bab7df-524d-4a64-a618-23d4ebcc9b5e', 119, '{"Δh": "displacement", "distance": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (315, '4011', 'efcb4c3e-fc6f-447b-8f73-3fdff1d77fc6', 119, '{"Δh": "displacement", "distance": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (316, '4011', '4255e295-7830-45af-ab7c-44fee1668641', 119, '{"Δh": "displacement", "diatance": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (317, '4011', 'ceed540f-d7a3-48bc-b8d0-e861e21499a4', 119, '{"Δh": "displacement", "distance": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (318, '4011', '31cb6c0b-e369-46b0-9be4-1de3737503fc', 119, '{"Δh": "displacement", "distance": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (319, '4011', 'ea797ffb-87b5-4e0a-8da4-7f627c347b2f', 119, '{"Δh": "displacement", "distance": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (320, '4011', '8583cb29-4726-4532-9530-a5b338d3483c', 119, '{"Δh": "displacement", "distance": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (321, '4011', 'dc5bdee9-14f3-4040-ad1c-faf008358890', 119, '{"Δh": "displacement", "distance": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (322, '1014', 'ef629030-d691-43fa-b6b4-b1465e60dace', null, '{"totalFlow": "total", "transientFlow": "instant"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (323, '4009', '24064f03-7c7e-493b-99f2-c926717d28fc', 100, '{"phy": "expansion", "elongationIndicator": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (324, '4008', '24064f03-7c7e-493b-99f2-c926717d28fc', 100, '{"phy": "crack", "elongationIndicator": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (325, '1002', '2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b', null, '{"temp": "temperature", "humidity": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (326, '1004', '2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (327, '1006', '2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b', null, '{"humidity": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (328, '1002', '10018134-99f1-486e-8071-dc652f44d152', null, '{"temp": "temperature", "humidity": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (329, '1004', '10018134-99f1-486e-8071-dc652f44d152', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (330, '1006', '10018134-99f1-486e-8071-dc652f44d152', null, '{"humidity": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (331, '1002', '5cd62211-11dd-4deb-83bf-2873ae7dd42f', null, '{"temp": "temperature", "humidity": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (332, '1004', '5cd62211-11dd-4deb-83bf-2873ae7dd42f', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (333, '1006', '5cd62211-11dd-4deb-83bf-2873ae7dd42f', null, '{"humidity": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (334, '1002', 'b475bf8f-00a0-457f-ad96-95b187dba62f', null, '{"temp": "temperature", "humidity": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (335, '1004', 'b475bf8f-00a0-457f-ad96-95b187dba62f', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (336, '1006', 'b475bf8f-00a0-457f-ad96-95b187dba62f', null, '{"humidity": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (337, '1002', '63b7958b-9b1b-49ca-b01c-62ebe4df6376', null, '{"temp": "temperature", "humidity": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (338, '1004', '63b7958b-9b1b-49ca-b01c-62ebe4df6376', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (339, '1006', '63b7958b-9b1b-49ca-b01c-62ebe4df6376', null, '{"humidity": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (340, '1002', '41da65aa-dd1b-4a8f-8758-13f624e45dad', null, '{"temp": "temperature", "humidity": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (341, '1004', '41da65aa-dd1b-4a8f-8758-13f624e45dad', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (342, '1006', '41da65aa-dd1b-4a8f-8758-13f624e45dad', null, '{"humidity": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (343, '1002', '16f7e5ff-fb7a-4aa6-a701-9776f7638689', null, '{"temp": "temperature", "humidity": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (344, '1004', '16f7e5ff-fb7a-4aa6-a701-9776f7638689', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (345, '1006', '16f7e5ff-fb7a-4aa6-a701-9776f7638689', null, '{"humidity": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (346, '4002', 'a30d283e-1af2-4531-ab6b-be1186799eea', 102, '{"angleX": "αx", "angleY": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (347, '4005', 'a30d283e-1af2-4531-ab6b-be1186799eea', 102, '{"angleX": "αx", "angleY": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (348, '4007', 'a30d283e-1af2-4531-ab6b-be1186799eea', 101, '{"angleX": "xi", "angleY": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (349, '1015', '0eb7e920-0359-4b8b-b604-14bc1136e8f5', null, '{"turbidity": "corrosion"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (350, '1018', '466241f9-ceea-4552-b9c6-114413124018', null, '{"concentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (351, '1002', '6af0f3be-6cb5-43c8-a588-490e10fdf4b7', null, '{"temp": "temperature", "humid": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (352, '1004', '6af0f3be-6cb5-43c8-a588-490e10fdf4b7', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (353, '1006', '6af0f3be-6cb5-43c8-a588-490e10fdf4b7', null, '{"humid": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (354, '3001', '30da8546-87f0-4a5c-bd4f-f9919c954c82', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (355, '4008', 'feb1fe0d-208d-41cf-9533-596f78fa835c', null, '{"physicalvalue": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (356, '1005', '0530f690-1f3c-430e-97c7-6dc82f96fd47', 104, '{"Δh": "waterLevel", "physicalvalue": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (357, '1009', '0530f690-1f3c-430e-97c7-6dc82f96fd47', 104, '{"phy": "Pi", "Δh": "waterLevel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (358, '2003', '27f99320-b0dc-4b93-bc24-f5ccf9337356', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (359, '4001', 'b750e865-af38-40e9-a478-16fefb4cb618', null, '{"physicalvalue": "displacement"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (360, '3001', '5f4e4e99-20b3-4bf7-95cb-a2f507595b2d', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (361, '3001', 'b6095ab3-88ff-4a71-8f42-f0656b301e1e', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (362, '1005', '607fa5aa-d8d7-48be-bf60-b8a6d0de2e8e', 104, '{"Δh": "waterLevel", "physicalvalue": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (363, '1009', '607fa5aa-d8d7-48be-bf60-b8a6d0de2e8e', 104, '{"phy": "Pi", "Δh": "waterLevel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (364, '1005', '49b0b2b7-b6e7-4ec8-adf8-4c94dcfb2eae', 104, '{"Δh": "waterLevel", "physicalvalue": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (365, '1009', '49b0b2b7-b6e7-4ec8-adf8-4c94dcfb2eae', 104, '{"phy": "Pi", "Δh": "waterLevel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (366, '1005', 'e6a3a1f5-2a8f-48a0-9758-407065bae1e9', null, '{"physicalvalue": "waterLevel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (367, '2003', 'efc6301f-2fc6-4a50-bd12-7e8bc5781548', null, '{"force": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (368, '2003', '9cc32a4d-ed64-4c32-b842-9f26e1e8ed23', null, '{"force": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (369, '2003', '3373edde-44d6-4f67-b601-26c2259f2985', null, '{"force": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (370, '2003', 'ef58c31b-1e6e-45a2-810e-2262ef946d6e', null, '{"force": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (371, '2003', '3789ab33-cabd-4aa8-95e4-ca757f9c6879', null, '{"force": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (372, '3001', '9abfc35c-6cff-489a-8257-b868954725f4', null, '{"phy": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (373, '2004', 'a306aea9-07ce-4e58-a228-bd9cc769f099', null, null, false, null, '{}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (374, '2004', '2ed7c823-4bfa-426a-92e3-08a05afc3017', null, null, false, null, '{}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (377, '3001', '5267450d-6f94-457a-b539-4cc950707872', null, '{"force": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (378, '3001', '84cbcd56-78c4-4ff3-9dbe-f21ac6c736ba', null, '{"force": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (379, '3001', '2d9520e9-143b-48c2-960f-5c9dca7a21b4', null, '{}', true, 202, '{"Δh": "strain", "physicalvalue": "pv"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (380, '4007', 'd32eacce-7db0-4c15-b17c-f1d870389c14', 101, '{"Δθx": "x", "Δθy": "y", "anglex": "θix", "angley": "θiy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (381, '1004', 'bc476c11-0887-40fb-ae9e-06ab514a44c0', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (382, '1006', 'bc476c11-0887-40fb-ae9e-06ab514a44c0', null, '{"humid": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (383, '1002', 'bc476c11-0887-40fb-ae9e-06ab514a44c0', null, '{"temp": "temperature", "humid": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (384, '1002', '5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed', null, '{"temp": "temperature", "humid": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (385, '1004', '5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (386, '1006', '5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed', null, '{"humid": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (387, '3001', '5eb050b5-8b57-4528-adce-b3633e613b6c', null, '{"phy": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (388, '2003', '7802bcc3-5fdb-441d-a57a-a89ca2ec158b', null, '{"phy": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (389, '2004', 'd55af283-4d11-4eb7-8099-890d98bfcc0c', null, '{"phy": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (390, '2003', '223ac440-c7b0-4005-8144-f33ce926d9bf', null, '{"phy": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (391, '2003', 'e3713c95-6aa3-4a2e-ad89-579a16cb1a03', null, '{"phy": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (392, '4009', '8e812d09-7b95-4c07-ad74-d4c66104e7a7', null, '{"phy": "expansion"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (393, '4008', '8e812d09-7b95-4c07-ad74-d4c66104e7a7', null, '{"phy": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (394, '4008', '3c8c9002-2d60-43f0-9a2c-52daa53cab54', null, '{"phy": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (395, '3001', '5c18688a-731b-40d0-b4dd-4ba002026bb3', null, '{"phy": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (396, '3001', '9bdf8d5c-e571-4dd4-9614-0099745b0a73', null, '{"phy": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (397, '2004', 'f90de97b-b6e8-417a-b628-7b8e4bb9e335', null, '{"phy": "force"}', false, null, '{}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (398, '3001', '44c42c98-a486-411a-8813-c6ba48aab00c', null, '{"phy": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (399, '4008', 'e55e2ee6-c58a-481c-9bd3-9df2b38dfa3f', null, '{"elongationIndicator": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (400, '4008', '4253e350-b64f-4b81-b19b-bcd45c6181ad', null, '{"elongationIndicator": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (401, '4008', '0eab3179-48cc-4e55-8ec9-b7516415aa75', null, '{"elongationIndicator": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (402, '4001', '962c0a4a-535e-4f86-a25c-f38e3aa6f144', null, '{"phy": "displacement"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (403, '3001', 'f5f27d3f-b8fd-44ee-97e2-8a78748a424f', null, '{"phy": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (404, '2004', 'e2d104b1-9c57-4a16-8d05-07817bc8b785', null, '{"phy": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (405, '4001', '666e753c-f0b0-478d-b5f5-839117db13f9', 119, '{"Δh": "displacement", "lvdt": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (406, '4001', 'f9331a24-582f-45b8-bea8-b919ffd48516', 119, '{"Δh": "displacement", "lvdt": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (407, '4001', '8ea772de-0c69-4a35-bbbb-7e0fb97d7c2f', 119, '{"Δh": "displacement", "lvdt": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (408, '4001', '03db4d1f-c0bf-47b0-9f10-0a0a5d6cfca3', 119, '{"Δh": "displacement", "lvdt": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (409, '4001', 'd3ae39b6-419c-4d57-a353-69768f82908a', 119, '{"Δh": "displacement", "lvdt": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (410, '1022', 'f446b0ec-ee0f-40bb-a6fc-9767fbd78a2b', null, '{"windSpeed": "speed"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (411, '1022', 'de0bfd26-fb8e-4f9d-8e0a-0119650952c6', null, '{"windSpeed": "speed"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (412, '1022', 'bfc79caf-826f-4f9d-a709-241529e118b5', null, '{"windSpeed": "speed"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (413, '1004', 'a54c400e-8b31-47ec-9820-550d04916f47', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (414, '1004', '933a027b-e620-4a6e-8340-d10c7aa29009', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (415, '4007', 'a3b4fd36-dd87-463c-84af-254647a24cc5', 101, '{"xDegree": "xi", "yDegree": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (416, '4007', 'e718c1a2-1c56-4da0-8cb3-36445c6b4f26', 101, '{"xDegree": "xi", "yDegree": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (417, '4007', 'c7f01571-7f09-4bef-99d3-fdc2da5fcaa2', 101, '{"xDegree": "xi", "yDegree": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (418, '1004', '5f908b85-0f3a-48c0-bc83-8e191731a754', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (419, '1006', '5f908b85-0f3a-48c0-bc83-8e191731a754', null, '{"humi": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (420, '2001', '537cf41f-69a4-47de-81ee-63485ab8df1d', null, '{"force": "cableForce"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (421, '2001', '2dead818-122a-42d9-8f52-3aa8d92ab0c3', null, '{"force": "cableForce"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (422, '1003', 'db974c14-3d61-403d-b847-e0523ad53964', null, '{"phy": "rainfall"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (423, '3001', '4696ff30-0685-4f87-bc16-25d640a014a6', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (424, '2004', '90a2bc12-2214-43ff-9154-9b9212de2c10', null, '{"physicalvalue": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (425, '2004', '5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8', null, '{"physicalvalue": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (426, '2004', '5e7775c1-0766-436e-b701-b1102833b98d', null, '{"physicalvalue": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (427, '2004', '099c6283-519f-4946-aa9d-f0059a76b832', null, '{"physicalvalue": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (428, '2004', 'c0cde67c-9734-4a3c-bb52-0caba0ae8724', null, '{"physicalvalue": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (429, '2004', 'bbfa13d3-fd42-4230-97e6-792463dbaf85', null, '{"physicalvalue": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (430, '2004', 'f6b98e0f-0bfe-4a95-808c-d6d10b4c803b', null, '{"physicalvalue": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (431, '2004', '1bcd78b8-bd96-4c95-8e19-27a1ac7356c9', null, '{"physicalvalue": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (432, '2004', '8bab3e11-dc23-4082-97ec-a04e78fa19c3', null, '{"physicalvalue": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (433, '4001', '38b81b7d-bb3e-4885-aaea-6035faf20d1b', null, '{"distance": "displacement"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (434, '4001', '11a0df92-8921-470b-af9c-d7593b8b1f78', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (435, '4004', '11a0df92-8921-470b-af9c-d7593b8b1f78', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (436, '4001', '75c932d0-2df0-4628-81dd-0e9c1f11ff60', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (437, '4004', '75c932d0-2df0-4628-81dd-0e9c1f11ff60', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (438, '4001', '9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (439, '4004', '9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (440, '4001', '76288807-186e-4444-a1ce-6be599aacfd2', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (441, '4004', '76288807-186e-4444-a1ce-6be599aacfd2', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (442, '1004', '780de52c-47eb-46cb-b77b-3d919bae5ffb', null, '{"temp": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (443, '4001', '1d48c633-6d83-4b96-a572-6f59a0100c9b', 100, '{"phy": "displacement", "physicalvalue": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (444, '4001', '50600703-5c4c-4ceb-a44d-d0b79882b1dc', 100, '{"phy": "displacement", "physicalvalue": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (445, '4001', '27930598-2f6e-4932-a816-9685f17969b5', 100, '{"phy": "displacement", "physicalvalue": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (446, '4001', 'e5f12d4b-bb3c-4158-b98e-8af3579bd2cc', 100, '{"phy": "displacement", "physicalvalue": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (447, '4001', '362018b7-e626-4eab-a6ad-214d85cfcc03', 100, '{"phy": "displacement", "physicalvalue": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (448, '4006', '7fefd73e-8fd9-48a6-8d7a-76f5796a8197', null, '{"value": "angle"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (449, '4001', '9137c92c-6de6-4b00-bafc-a995288280f7', null, '{"value": "displacement"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (450, '4006', 'fdf34922-d64e-4616-9313-96d7d94b8412', null, '{"value": "angle"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (451, '4006', 'b53146b9-7737-46cd-a305-e2c9cb286d3d', null, '{"value": "angle"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (452, '4007', 'b53146b9-7737-46cd-a305-e2c9cb286d3d', null, null, true, 214, '{"value": "v"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (453, '4001', '12adcb99-432b-46f5-9240-dad30ec75ea6', 100, '{"phy": "displacement", "lvdt": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (454, '4008', '12adcb99-432b-46f5-9240-dad30ec75ea6', null, '{"lvdt": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (455, '4001', 'bcc5cadb-0395-464b-8ead-ac3917b49e30', 100, '{"phy": "displacement", "lvdt": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (456, '4008', 'bcc5cadb-0395-464b-8ead-ac3917b49e30', null, '{"lvdt": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (457, '4001', '8e752366-9256-4bab-a79b-276a89aea484', 100, '{"phy": "displacement", "lvdt": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (458, '4008', '8e752366-9256-4bab-a79b-276a89aea484', null, '{"lvdt": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (459, '4001', '87bf38c3-0b08-4bcf-98b4-12060fd9a345', 100, '{"phy": "displacement", "lvdt": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (460, '4008', '87bf38c3-0b08-4bcf-98b4-12060fd9a345', null, '{"lvdt": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (461, '4001', '167d20c6-d128-4532-9974-d4a55788823e', 100, '{"phy": "displacement", "lvdt": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (462, '4008', '167d20c6-d128-4532-9974-d4a55788823e', null, '{"lvdt": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (463, '4001', '10ac4010-ff56-4d05-9e45-55f84f4292aa', 100, '{"phy": "displacement", "lvdt": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (464, '4008', '10ac4010-ff56-4d05-9e45-55f84f4292aa', null, '{"lvdt": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (465, '4001', '1f16c362-1f8e-4cbc-8b2c-8f43dd306390', 100, '{"phy": "displacement", "lvdt": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (466, '4008', '1f16c362-1f8e-4cbc-8b2c-8f43dd306390', null, '{"lvdt": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (467, '4001', '8571c1b0-8472-45b5-955f-5a7614a2f08c', 100, '{"phy": "displacement", "lvdt": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (468, '4008', '8571c1b0-8472-45b5-955f-5a7614a2f08c', null, '{"lvdt": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (469, '4001', 'a570a2de-ca66-488a-a078-6c6b14b71f2a', 100, '{"phy": "displacement", "lvdt": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (470, '4008', 'a570a2de-ca66-488a-a078-6c6b14b71f2a', null, '{"lvdt": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (471, '4001', 'd54f6d25-04dc-4847-8dda-9c54d54b2d8f', 100, '{"phy": "displacement", "lvdt": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (472, '4008', 'd54f6d25-04dc-4847-8dda-9c54d54b2d8f', null, '{"lvdt": "crack"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (473, '4001', 'c69575ab-795c-45ec-8901-f370255beff1', null, '{"liquidLevel": "displacement"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (474, '4003', 'a1923ce2-b8a5-45cb-9d98-6a42901cee7c', 109, '{"X": "x", "Y": "y", "Z": "z", "x": "xi", "y": "yi", "z": "zi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (475, '4006', '965b3938-ddd0-422d-9716-bdb2d44f8c56', null, '{"phy": "angle"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (476, '2004', '68cb03f4-a381-4eaa-9068-d375ae3500e8', null, '{"phy": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (477, '2004', '3a8c62b6-14dc-497e-90e8-68c2160e7d08', null, '{"phy": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (478, '1002', 'b3b4f0f1-7cdc-4892-9e6a-f4936931472c', null, '{"humidity": "humidity", "temperature": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (479, '4006', '874e1ee5-94fe-49aa-94b0-6d6bfef680bc', null, '{"xDegree": "angle"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (480, '3001', '1f6ae927-989f-48b3-9fa4-18518326953b', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (481, '1001', '4d5a3f58-0eda-4443-9dcc-c64bb1785d88', null, '{"speedofWind": "speed", "azimuthofWind": "direction"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (482, '1022', '4d5a3f58-0eda-4443-9dcc-c64bb1785d88', null, '{"speedofWind": "speed"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (483, '1029', '4d5a3f58-0eda-4443-9dcc-c64bb1785d88', null, '{"azimuthofWind": "direction"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (484, '4009', '9137c92c-6de6-4b00-bafc-a995288280f7', null, '{"value": "expansion"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (485, '1005', 'e7a84149-53b0-4ba3-88e7-fe7e0e0f21d4', 100, '{"phy": "waterLevel", "lvdt": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (486, '4010', '43e2a07a-c33e-4e54-ba5e-0a948ae4ba61', null, null, true, 212, '{"Ha": "a", "Hb": "b", "Hc": "c", "Hd": "d", "angX": "x", "angY": "y", "xDegree": "θx", "yDegree": "θy"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (487, '1011', '7c42d86a-5801-4ef2-94df-2b5c702ff7f5', null, '{"pressure": "electricity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (488, '2003', 'b6d1b7db-4a04-40af-a1e9-ed944a65b0b8', null, '{"pressure": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (489, '1004', '61f09dd0-ba56-40e4-a2d1-45dab1143900', null, '{"phy": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (490, '3001', '12a0ae21-df74-42b4-94ce-492125b941bd', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (491, '4004', '14f67669-6cec-42c0-a7ca-4b60950ec7b5', 117, '{"phy": "deflection", "value": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (492, '4004', 'e08c86d5-195d-4cf6-a1a5-1cfd113ddd52', 117, '{"phy": "deflection", "value": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (493, '5002', 'fbc83633-74fd-494b-b1b7-75d289358b27', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (494, '4007', 'ba349741-3d03-49c6-a2cf-9e2156fd36c4', null, '{"anglex": "x", "angley": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (495, '4002', 'ba349741-3d03-49c6-a2cf-9e2156fd36c4', null, '{"changedx": "x", "changedy": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (496, '4005', 'ba349741-3d03-49c6-a2cf-9e2156fd36c4', null, '{"changedx": "x", "changedy": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (498, '2005', '717279c9-81b5-4bfe-8dd3-906297d70e41', null, '{"elongationIndicator": "gravity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (499, '4012', '1e20c41f-4f52-4d61-94e4-ae8496163aed', null, '{"anglex": "x", "angley": "y", "anglez": "z"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (500, '4012', '00b58795-1a49-4171-b60f-a0e32a25f6f6', null, '{"anglex": "x", "angley": "y", "anglez": "z"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (501, '5002', 'c8fd3080-b416-4381-8bcc-e84c12471281', null, '{"pv": "pv", "ppv": "ppv", "rms": "trms"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (502, '5001', 'c8fd3080-b416-4381-8bcc-e84c12471281', null, '{"pv": "pv", "ppv": "ppv", "rms": "trms"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (503, '5001', '09252236-560b-47e1-bf81-f774d303ba26', 122, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (504, '5002', '09252236-560b-47e1-bf81-f774d303ba26', 122, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (505, '1030', '1489127c-8f48-448b-a86e-1604f08894ce', null, '{"length": "visibility"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (506, '1027', '1e7003bf-2cd1-4dcb-9ad9-116151f49ae6', null, '{"airq_pm10": "pm10", "airq_pm2_5": "pm25"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (507, '1030', '1e7003bf-2cd1-4dcb-9ad9-116151f49ae6', null, '{"airq_pm10": "visibility"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (508, '5003', '09252236-560b-47e1-bf81-f774d303ba26', 122, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (509, '4008', '0bf78d42-85ee-486c-bf43-c62c3168ee33', 117, '{"phy": "crack", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (510, '4008', '4142b1cc-3576-456b-b0e4-31e68cc16b32', 117, '{"Δl": "crack", "length": "ci"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (511, '1005', '3f493145-8216-487c-b145-d58dacf9c570', 124, '{"Δh": "waterLevel", "physicalvalue": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (512, '1005', '7f76a800-a32e-483a-a948-919fc9e7d075', 124, '{"Δh": "waterLevel", "physicalvalue": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (513, '1005', 'ea2cc9e5-072a-4994-a232-f79655536c64', 124, '{"Δh": "waterLevel", "physicalvalue": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (514, '1005', '624610fd-38ca-4e72-92c8-0492eb66412a', 124, '{"Δh": "waterLevel", "physicalvalue": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (515, '1005', 'cf54dd7a-2c8a-4f16-9f92-7484af585f13', 124, '{"Δh": "waterLevel", "physicalvalue": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (516, '1005', 'f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d', 124, '{"Δh": "waterLevel", "physicalvalue": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (517, '4001', '8185c197-338c-42e3-acfc-acba2bb1b180', 100, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (518, '1003', '6def140f-5189-490c-ab4c-57e84dfcd3bf', null, '{"雨量": "rainfall"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (519, '4006', 'c15c6be6-83b0-47ea-ac05-38d625eb8ac8', null, '{"anglex": "angle"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (520, '4007', 'f4976287-96c1-42a2-aedf-0d8e8ab739c5', 101, '{"anglex": "xi", "angley": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (521, '4005', 'f4976287-96c1-42a2-aedf-0d8e8ab739c5', 102, '{"anglex": "αx", "angley": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (522, '4008', '83d8bf62-35f8-48c5-afa2-0d454cb19f70', 117, '{"phy": "crack", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (523, '4007', '8c2579cd-6aca-4902-a9d6-61e916a4541e', 101, '{"anglex": "xi", "angley": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (524, '4005', '8c2579cd-6aca-4902-a9d6-61e916a4541e', 102, '{"anglex": "αx", "angley": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (525, '1002', '65b984f5-c294-49fa-8433-510d38416095', null, '{"humidity": "humidity", "temperature": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (526, '2003', 'f30482b9-b518-4048-8217-bd64158911e6', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (527, '2003', '0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (528, '2003', '3aba791d-d6b2-4175-bb20-109f210f4065', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (529, '2003', 'a9d42f6d-8409-415c-937e-aea8bebf7a50', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (530, '2003', 'fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (531, '2004', 'd3763c4f-94ba-4ae4-b35e-ccff2340c16a', null, '{}', true, 202, '{"Δh": "force", "physicalvalue": "pv"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (532, '2004', 'aab61193-270e-4d06-9bdf-9da5194c744a', null, '{}', true, 202, '{"Δh": "force", "physicalvalue": "pv"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (533, '2004', '0b09cbd9-3881-4b4a-8910-0e8730d5d935', null, '{}', true, 202, '{"Δh": "force", "physicalvalue": "pv"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (534, '2004', 'ca6af9e3-f1dc-4992-8029-d0e438ef99b5', null, '{}', true, 202, '{"Δh": "force", "physicalvalue": "pv"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (535, '3001', '9297adfa-1972-45e3-a5c4-0f31a0acbe84', null, '{}', true, 202, '{"physicalvalue": "pv"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (536, '3001', 'd31031ab-0237-41a5-adc0-867c1e9952f7', null, '{}', true, 202, '{"Δh": "strain", "physicalvalue": "pv"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (537, '3001', '1bda935e-56de-4365-b60e-f02d19299795', null, '{"physicalvalue": "strain"}', false, null, '{}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (538, '3001', '2e0d00cd-a321-4504-b716-41813848cbdb', null, '{}', true, 202, '{"Δh": "strain", "physicalvalue": "pv"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (539, '3001', '02513eed-ba94-456b-86e0-89ea996b879d', null, '{}', true, 202, '{"Δh": "strain", "physicalvalue": "pv"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (540, '3001', '388cca81-7338-40d3-ba1f-89ec9d5aa2f7', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (541, '4003', '526c42ea-d9a9-48d1-9862-b3118a7ef211', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (542, '1002', '63429c67-5b55-4b88-998c-65d4464623c8', null, '{"data1": "temperature", "data2": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (543, '1001', 'b55b3b15-5db9-4946-a5a9-b0d352de6a24', null, '{"data1": "speed", "data2": "direction"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (544, '4007', 'd52af3c0-c4b0-4091-96c6-ac3e97535f92', 101, '{"Δθx": "x", "Δθy": "y", "anglex": "θix", "angley": "θiy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (545, '4007', '4a0f1cd5-1e52-4ec3-8976-0b1f82031d28', 101, '{"anglex": "xi", "angley": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (546, '4005', '4a0f1cd5-1e52-4ec3-8976-0b1f82031d28', 102, '{"x": "x", "y": "y", "anglex": "αx", "angley": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (547, '3001', '28d8942e-d1ab-40ee-878a-c3b2f60da896', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (548, '3001', '4d3ecec5-32b4-4d9b-aa02-a08275dd10c7', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (549, '2003', '4af8678b-8f9b-48e6-b8f0-ea7ec7ed53ee', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (550, '1005', 'aa6f3b0e-9bd2-41e8-801d-730aca3e32fb', 105, '{"h": "waterLevel", "physicalvalue": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (551, '3001', '5d399cb2-7e5a-4a27-bff0-e1769f43499d', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (552, '3001', '384f80e3-ad51-400e-b0aa-8a3885961cec', null, '{"physicalvalue": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (553, '2005', '21c691a7-7a5a-4262-a3fe-cedb0c37e5fe', null, '{"pressure": "gravity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (554, '1022', '85f5b6fd-92cc-4d22-9dff-952c59003e3f', null, '{"physicalvalue": "speed"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (555, '1029', '0beb606c-f306-4476-8526-31646c8107e5', null, '{"physicalvalue": "direction"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (556, '1006', '92bad770-f845-4bd8-8e2b-55e5343a2201', null, '{"physicalvalue": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (557, '1003', '6e1d3878-3ea2-4c73-9137-0ef98781be0c', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (558, '2004', '20ff998d-3014-4f62-ad12-37b56883c435', null, '{"physicalvalue": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (559, '2004', 'c60cc02d-8c37-447a-9f9d-947aa66b7f39', null, '{"physicalvalue": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (560, '2004', 'df68d6a9-c963-4bc4-a122-332e3d1435ac', null, '{"physicalvalue": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (561, '2004', '84deac79-cd1d-4320-bcc6-3a0cdd4451da', null, '{"physicalvalue": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (562, '2004', '110a38a6-8cb9-43c5-9682-4b1ba0e9d01f', null, '{"physicalvalue": "force"}', true, 202, '{"Δh": "force", "force": "pv"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (563, '2004', '4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66', null, '{}', true, 202, '{"Δh": "force", "physicalvalue": "pv"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (564, '2004', '4a7b8b8f-6ba0-4731-af44-8f3f6d30a928', null, '{}', true, 202, '{"Δh": "force", "physicalvalue": "pv"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (565, '2004', '7674c64d-e09e-4257-8726-c64a26ed309a', null, '{}', true, 202, '{"Δh": "force", "physicalvalue": "pv"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (566, '3001', 'd75d2473-6ed4-437c-8509-682f55d0d407', null, '{"value": "strain"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (567, '1026', '8fb33fdb-3378-44a4-8e48-ec79ff29a37e', null, '{"pmstandard": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (568, '1026', 'cda0b115-60d6-4169-8f45-4a92d6801fb3', null, '{"pmstandard": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (569, '4007', 'c15c6be6-83b0-47ea-ac05-38d625eb8ac8', null, null, true, 214, '{"anglex": "v"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (570, '4007', '874e1ee5-94fe-49aa-94b0-6d6bfef680bc', null, null, true, 214, '{"anglex": "v"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (571, '4007', 'd3245ff1-0781-49bd-b37c-e245a350a709', 100, '{"phy": "v", "angleX": "DAQi"}', true, 214, '{}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (572, '1017', '5efb0ea9-ca31-4a41-9389-be6c24b3ad2c', null, '{"physicalvalue": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (573, '1019', 'ae8d62c1-09f0-4fcd-bc62-add087919ff0', null, '{"physicalvalue": "lel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (574, '2001', '219cbb09-9c49-4167-846d-00a8bdfadb9a', null, '{"pressure": "cableForce"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (575, '4001', 'd148ae2e-c0dd-4e57-a0e8-833d32107f31', 100, '{"phy": "displacement", "level": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (576, '1031', 'fbe11da9-a717-4a5e-bd90-93f394b46ccc', null, '{"physicalvalue": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (577, '1001', '1cfa35c8-129a-45eb-9304-2b105bc22380', null, '{"speed": "speed", "direction": "direction"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (578, '4007', '901073b9-b411-427c-9eb6-43a935ec8c27', null, '{"anglex": "x", "angley": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (579, '4006', '077f4241-fe27-4cbc-9918-cf5b8d1c8283', null, '{"physicalvalue": "angle"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (580, '2001', 'd14c6b02-4298-4713-b970-eba0aafee88b', 113, '{"F": "cableForce", "physicalvalue": "ε"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (581, '1004', 'd77b7e20-7877-47dc-aef4-37a663bac660', null, '{"temperature": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (582, '2003', '40a69ace-03f8-4acf-8cf7-6acf43ac2de8', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (583, '4007', '9d6f5e3b-2821-48f0-b5c5-997baf346f39', 101, '{"anglex": "xi", "angley": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (584, '1022', '7c2ff6f1-5bb6-4736-91cd-1bd068e760aa', null, '{"physicalvalue": "speed"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (585, '4006', '200655be-879b-4a82-8a17-1ff1ccb9f961', null, '{"physicalvalue": "angle"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (586, '3003', 'd77b7e20-7877-47dc-aef4-37a663bac660', 123, '{"σ": "stress", "physicalvalue": "ε"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (587, '4001', '563221c8-bdb4-4511-b781-25cab72585a7', 100, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (588, '2003', 'd8860bee-374c-497a-a33a-258af59e3690', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (589, '5001', '51654fb3-cd61-405e-890f-ade3931c8b7e', 122, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (590, '5002', '51654fb3-cd61-405e-890f-ade3931c8b7e', 122, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (591, '4008', 'bff19d80-ce20-4c3d-b158-df091a1fb5ac', 117, '{"Δl": "crack", "length": "ci"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (592, '4011', '260e307b-9a7c-4f75-90cd-79710a7d0221', 119, '{"Δh": "displacement", "length": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (593, '4011', '66717a8f-3c59-41e0-ab21-bf6bcdde55ea', 119, '{"Δh": "displacement", "length": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (594, '4001', '66717a8f-3c59-41e0-ab21-bf6bcdde55ea', 100, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (595, '4001', '260e307b-9a7c-4f75-90cd-79710a7d0221', 100, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (596, '4001', 'fb7bb438-ec7d-41fa-b7f5-737c395901bc', 100, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (597, '4001', 'e458516d-60cf-4395-8ec5-df491ae97d3e', 100, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (598, '4011', 'fb7bb438-ec7d-41fa-b7f5-737c395901bc', 119, '{"Δh": "displacement", "length": "Li"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (599, '4011', 'e458516d-60cf-4395-8ec5-df491ae97d3e', 100, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (600, '4001', '5ac91988-c93a-4176-9f33-7c6ba110590f', 100, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (601, '4004', '5ac91988-c93a-4176-9f33-7c6ba110590f', 100, '{"phy": "deflection", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (602, '1010', '24b365fd-4e6e-4800-ad48-d3f082c9b2b8', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (603, '1009', '24b365fd-4e6e-4800-ad48-d3f082c9b2b8', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (604, '1009', 'e015d9d3-542e-4d54-80c6-39db4ba20877', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (605, '1010', 'e015d9d3-542e-4d54-80c6-39db4ba20877', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (606, '1009', '65f4e736-8261-40cc-b3b8-948ab0e4252e', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (607, '1010', '65f4e736-8261-40cc-b3b8-948ab0e4252e', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (608, '1009', '6bd546bc-55b0-4ee4-8b58-34feec8cdb6c', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (609, '1010', '6bd546bc-55b0-4ee4-8b58-34feec8cdb6c', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (610, '1009', '3462227d-e989-421c-9f48-c0ae7a573b78', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (611, '1010', '3462227d-e989-421c-9f48-c0ae7a573b78', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (612, '1009', '16ca7eed-6c64-4c4b-a495-6c5f785b86cd', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (613, '1010', '16ca7eed-6c64-4c4b-a495-6c5f785b86cd', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (614, '1009', '13126536-b6af-48d0-b43e-25144b65dd8d', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (615, '1010', '13126536-b6af-48d0-b43e-25144b65dd8d', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (616, '1009', '0c5d070d-fb83-4f78-acc0-a0bd12be6cc2', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (617, '1010', '0c5d070d-fb83-4f78-acc0-a0bd12be6cc2', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (618, '1009', 'f3ad3df8-e1ad-4e05-b479-185ac5ae8602', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (619, '1010', 'f3ad3df8-e1ad-4e05-b479-185ac5ae8602', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (620, '1009', 'e8d9a100-9650-4afc-a260-9c7bcdea9263', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (621, '1010', 'e8d9a100-9650-4afc-a260-9c7bcdea9263', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (622, '1009', 'd7912272-424d-4546-a3c1-43a24365dde0', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (623, '1010', 'd7912272-424d-4546-a3c1-43a24365dde0', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (624, '1009', '91372b00-3bf7-4eb0-9495-ad544dfb04ca', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (625, '1010', '91372b00-3bf7-4eb0-9495-ad544dfb04ca', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (626, '1009', '0aae766a-5d82-479a-bd71-7eb1e0e4e20f', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (627, '1010', '0aae766a-5d82-479a-bd71-7eb1e0e4e20f', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (628, '1009', 'ac32d002-0463-4bc7-a307-86236e6307a7', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (629, '1010', 'ac32d002-0463-4bc7-a307-86236e6307a7', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (630, '1009', '584a210b-20f2-49cf-906a-9d6b4883af09', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (631, '1010', '584a210b-20f2-49cf-906a-9d6b4883af09', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (632, '4007', 'c9a11ba9-fb0d-4a82-b480-7539948c9b56', 102, '{"x": "x", "y": "y", "xDegree": "αy", "yDegree": "αx"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (633, '4001', '83881bee-4e8c-4ad6-a11f-45810d035b3d', 100, '{"phy": "displacement", "level": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (634, '4008', 'b15a4ae0-8100-4809-978d-50914fdc2f32', 117, '{"phy": "crack", "physicalvalue": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (635, '4001', '1991c0ef-7dd2-4290-ad34-c8bc82161d2f', 100, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (636, '4001', 'b2d406aa-3d16-4f6a-a0cf-201673678a8f', 100, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (637, '4001', '9fbee940-6591-45b4-a3a9-83abc9c76e85', 100, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (638, '4008', 'b2d406aa-3d16-4f6a-a0cf-201673678a8f', 100, '{"phy": "crack", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (639, '4004', 'aa4c3887-4040-4ac1-a908-4ae45f754c3b', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (640, '2004', '6c650368-cf3e-4a75-a30d-01b2a37356fb', null, null, true, 202, '{"Δh": "force", "physicalvalue": "pv"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (641, '2004', '2e0d00cd-a321-4504-b716-41813848cbdb', null, null, true, 211, '{"F": "force", "physicalvalue": "εi"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (642, '2004', '02513eed-ba94-456b-86e0-89ea996b879d', null, null, true, 211, '{"F": "force", "physicalvalue": "εi"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (643, '2004', '2d9520e9-143b-48c2-960f-5c9dca7a21b4', null, null, true, 211, '{"F": "force", "physicalvalue": "εi"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (644, '4007', 'a045d540-6405-495e-af5f-ea705c094472', null, '{"anglex": "x", "angley": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (645, '2006', 'd3763c4f-94ba-4ae4-b35e-ccff2340c16a', 125, '{"σ": "δi", "physicalvalue": "F"}', true, 204, '{"Nc": "force"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (646, '2006', 'aab61193-270e-4d06-9bdf-9da5194c744a', 125, '{"σ": "δi", "physicalvalue": "F"}', true, 204, '{"Nc": "force"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (647, '2006', '0b09cbd9-3881-4b4a-8910-0e8730d5d935', 125, '{"σ": "δi", "physicalvalue": "F"}', true, 204, '{"Nc": "force"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (648, '2006', 'ca6af9e3-f1dc-4992-8029-d0e438ef99b5', 125, '{"σ": "δi", "physicalvalue": "F"}', true, 204, '{"Nc": "force"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (649, '1005', 'd56a9be3-7a4a-4c75-91ec-f524bb273574', 100, '{"phy": "waterLevel", "pressure": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (650, '1004', '948c741a-f999-4abe-ae1f-64c23e27462c', null, '{"temperature": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (651, '2003', '7f76a800-a32e-483a-a948-919fc9e7d075', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (652, '2003', '3f493145-8216-487c-b145-d58dacf9c570', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (653, '2003', 'ea2cc9e5-072a-4994-a232-f79655536c64', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (654, '2003', '624610fd-38ca-4e72-92c8-0492eb66412a', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (655, '2003', 'cf54dd7a-2c8a-4f16-9f92-7484af585f13', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (656, '2003', 'f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (657, '1032', '0f179575-cae8-4888-a644-1b66be3f8de2', null, '{"CO": "CO", "O3": "O3", "NO2": "NO2", "SO2": "SO2", "PM10": "PM10", "PM25": "PM2.5", "TVOC": "TVOC", "humidity": "humidity", "temperature": "temp"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (658, '1004', '20e28988-ea9b-4757-9f79-22dce525207a', null, '{"temperature": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (659, '4004', 'b56e401a-75e7-47ea-84db-6638fd421792', 100, '{"phy": "deflection", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (660, '4004', '515030fd-3993-442a-89f7-ca844c5671c0', 100, '{"phy": "deflection", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (661, '4001', '515030fd-3993-442a-89f7-ca844c5671c0', 100, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (662, '2002', '32349c76-d117-4331-8a10-9b7ea057c2ab', null, '{"axisnum": "axleCount", "licence": "license", "overload": "overload", "crossRoad": "lane", "direction": "direction"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (663, '4007', '427e8976-edd3-4467-8900-587c12fbf6cf', 101, '{"anglex": "xi", "angley": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (664, '4005', '427e8976-edd3-4467-8900-587c12fbf6cf', 102, '{"anglex": "αx", "angley": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (665, '4001', '70dd7ed7-45de-4c9c-a299-7c0686775dc3', 100, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (666, '4004', '70dd7ed7-45de-4c9c-a299-7c0686775dc3', 100, '{"phy": "deflection", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (667, '4007', '0f6fd3af-59cc-4fa8-8ff5-f42f173ac9fa', 101, '{"anglex": "xi", "angley": "yi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (668, '4005', '0f6fd3af-59cc-4fa8-8ff5-f42f173ac9fa', 102, '{"anglex": "αx", "angley": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (669, '4001', 'aa4c3887-4040-4ac1-a908-4ae45f754c3b', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (670, '1022', '8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea', null, '{"speed": "speed"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (671, '1029', 'a6d30b7e-a718-4cbf-80be-2ddefa2445ab', null, '{"direction": "direction"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (672, '1033', '9fab42c0-0c95-4fd2-a470-08437473a2f4', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (673, '2004', '8fcb81d8-34ce-41b8-93c9-69d15060fa40', null, '{"physicalvalue": "force"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (674, '2004', 'f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17', null, '{"physicalvalue": "force"}', false, null, '{}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (675, '4002', 'd52af3c0-c4b0-4091-96c6-ac3e97535f92', 102, '{"anglex": "αix", "angley": "αiy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (676, '4002', 'af1cd7e8-52e1-4411-9c9a-20bc82a2786d', 102, '{"angleX": "αx", "angleY": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (677, '1034', '4a1c835d-1f99-4d95-8d21-ceab11c714d3', null, '{"pm10": "pm10", "pm25": "pm25", "noise": "noise", "speed": "speed", "direction": "direction"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (678, '4014', '7da8e64c-b909-4802-9639-84077cefa569', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (679, '7001', '3bd37805-2e49-4fdb-8bab-d54c72112de8', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (680, '7002', '1f235ab7-7bbb-4c4a-b106-7a0a435448bf', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (681, '7003', '3c312b4a-0bd1-4ee4-acf1-5a51f99ed087', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (682, '1034', 'e1f36777-486a-4527-a30f-61d17b7a8796', null, '{"pm10": "pm10", "pm25": "pm25", "noise": "noise", "speed": "speed", "direction": "direction", "temperature": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (683, '5001', 'e32efbee-3c36-4be6-a4d3-d5058acf1fda', 122, '{"physicalvalue": "ppv"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (684, '5002', 'e32efbee-3c36-4be6-a4d3-d5058acf1fda', 122, '{}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (685, '8001', '0f179575-cae8-4888-a644-1b66be3f8de2', null, '{"CO": "co", "O3": "o3", "NO2": "no2", "SO2": "so2", "PM10": "pm10", "PM25": "pm2_5", "TVOC": "vocs"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (686, '4004', '2e2456a6-9738-456c-abf1-94d5ebad124a', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (687, '4004', '0f4f59de-cde7-4aec-a402-703e5426bb76', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (688, '4004', 'cef1d2a2-c44e-4143-84bd-2a65140e33d0', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (689, '4004', '9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (690, '4008', '362018b7-e626-4eab-a6ad-214d85cfcc03', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (691, '4008', 'e5f12d4b-bb3c-4158-b98e-8af3579bd2cc', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (692, '4008', '27930598-2f6e-4932-a816-9685f17969b5', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (693, '4014', 'ba3d723e-88ac-4e9a-976f-43d43081e621', null, '{"speed": "speed", "height": "height", "radius": "range", "rotation": "angle", "curweight": "load"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (694, '4014', '039664c3-5d24-4edb-b251-7540c98dc2ce', null, '{"height": "height", "radius": "range", "loadValue": "load", "windSpeed": "speed", "rotationAngle": "angle", "torquePercent": "moment"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (695, '2003', '4142b1cc-3576-456b-b0e4-31e68cc16b32', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (696, '8001', '27503c42-1dec-4321-ad45-eab67190afb5', null, '{"co": "co", "o3": "o3", "pm": "pm2_5", "no2": "no2", "so2": "so2", "pm10": "pm10"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (697, '1005', '177e7e33-3dae-4163-8d7d-1778e70b4a8b', 124, '{"Δh": "waterLevel", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (698, '9001', '4a91ace7-e5da-44c8-843d-43fb6a130847', null, '{"readingNumber": "total"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (699, '9003', 'd5bfb91e-3d09-4068-ac33-5974e8b7f039', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (700, '0001', '3bae74f8-5224-45f9-bbcd-f40968ed1ce2', null, '{"urinalstate": "state"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (701, '0001', '64cdcb08-1dd0-47be-a6ca-2b5b57df74c8', null, '{"pitstate": "state"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (702, '0001', 'a5dda81c-6a85-4e7b-97f3-be45b980646e', null, '{"pitstate": "state"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (703, '9004', '9a7f532a-63de-46f5-a9e5-77435225673a', null, '{"NH3": "nh3"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (704, '9004', 'cbabe26d-4987-41c1-949b-e3084ea06fda', null, '{"NH3": "nh3"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (705, '9004', 'b03b1516-7e4a-41a4-9765-a1a485bb998a', null, '{"NH3": "nh3"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (706, '8002', 'c1831563-faaf-4e2a-9d49-6b483abbd040', null, '{"ph": "ph", "oxygen": "do", "turbidity": "turb", "conductivity": "tds"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (707, '9002', 'b440e042-3173-43c6-887c-3cf4ce8a49e4', null, '{"readingNumber": "total"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (708, '8002', '55d8d331-c61d-4523-886d-2d69f350cde0', null, '{"PH": "ph", "oxy": "do", "temp": "temp", "turbidity": "turb", "conductivity": "tds"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (709, '4015', '5f1f2736-2744-4339-b456-50c5626ea641', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (710, '4014', '5e44f909-0d21-4d00-82f5-d3502e192e18', null, '{"Angle": "angle", "Height": "height", "Moment": "moment", "RRange": "range", "Weight": "load", "Obliguity": "obliquity", "WindSpeed": "speed"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (711, '1034', '7734e171-78b3-4a47-bccf-b812a1cf30f3', null, '{"windSpeed": "speed", "windDirection": "direction"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (712, '1034', '3ad4be85-c6f9-46b8-97dd-39d01e4ef858', null, '{"pm10": "pm10", "pm25": "pm25", "temp": "temperature", "noise": "noise", "winddir": "direction", "humidity": "humidity", "windspeed": "speed"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (713, '1034', '24946992-8d23-4862-ab23-0844e246fb46', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (714, '1034', 'a820a6a6-2302-4291-bf8a-e6beb3e7f663', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (715, '8003', 'e996ef32-944e-448f-9370-862fd5ed719d', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (716, '8004', '3d8fcd19-8b2a-4d02-8dd3-de8e2c082dcc', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (717, '8005', '9db37a62-7896-4477-a3c4-7d317d28f26e', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (718, '8006', '4eb4d7ed-2199-4514-9411-9c12d59f72e3', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (719, '8007', 'a91dd10c-af61-4fcf-8294-1d200a035664', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (720, '8008', 'a23e3c37-7ab4-4ed4-b73b-a791c96d596c', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (721, '8009', 'ccfcd1c0-1cf5-4123-9be8-ca521b1e79d3', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (722, '7007', '0794ccbd-2a6e-49b6-9b42-abf93957b33c', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (723, '8010', '7f8fac16-3dbd-4d0a-bf38-322c5818e096', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (724, '9005', '9aa975c7-a3d4-42ec-a384-17d0425e602a', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (725, '2001', '73a7b800-25d7-41ad-872d-96cc4f9430de', null, '{"physicalvalue": "cableForce"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (726, '4011', '584a210b-20f2-49cf-906a-9d6b4883af09', 124, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (745, '2005', '5e44f909-0d21-4d00-82f5-d3502e192e18', null, '{"Weight": "gravity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (746, '2005', '82ec14e4-a0ee-4d21-9fcb-24cde7cf551b', null, '{"Weight": "gravity", "WeightPercent": "weightPercent"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (747, '9010', 'a9dc9dd4-9a62-4dfa-968a-69e2c4472a0a', null, '{"inflow": "inflow", "outflow": "outflow"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (748, '6010', 'ff67a769-94ed-4f3d-b944-b1f4d4468eec', null, '{"speed": "speed", "latitude": "lang", "longitude": "long"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (749, '6010', 'd5ce913e-4a89-473e-b69b-bdfbc0fa6753', null, '{"lang": "lang", "long": "long"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (750, '2006', 'b77b1ad2-2546-4219-bbe8-dc6b71d7fe01', 135, '{"σ": "δi", "physicalvalue": "F"}', true, 204, '{"Nc": "force"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (751, '1032', '0f3aa84f-d64b-4135-8ce1-f3a704751a4c', null, '{"co": "CO", "o3": "O3", "no2": "NO2", "so2": "SO2", "voc": "TVOC", "pm10": "PM10", "pm2_5": "CO", "humidity": "humidity", "temperature": "temp"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (752, '4020', '53070eae-7839-46df-9492-f1b4c0b0b101', 104, '{"Δh": "x", "physicalvalue": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (753, '8001', '0f3aa84f-d64b-4135-8ce1-f3a704751a4c', 142, '{"co": "co", "o3": "o3", "no2": "no2", "so2": "so2", "pm10": "pm10", "v_co": "co", "v_o3": "o3", "pm2_5": "pm2_5", "v_no2": "no2", "v_so2": "so2"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (754, '8013', '6cb2c0f8-0c45-42e6-97ca-56d97a4a3484', null, '{"voltage": "voltage", "frequency": "frequency", "lampPoleNumber": "lampPoleNumber"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (755, '1008', 'f929d6c9-de63-4cb0-89f9-f9e7a22cbadb', 137, '{"Q": "seepage", "ssagee": "H"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (756, '1045', 'f929d6c9-de63-4cb0-89f9-f9e7a22cbadb', 136, '{"E": "flow", "pressure": "p"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (757, '5041', '1dcd0084-9a2d-43ef-9b10-1e8305ce8b06', null, '{"cidCode": "stateCode", "signals": "signals", "voltage": "voltage", "cidMessage": "stateMessage"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (758, '7008', '213e2ff2-285b-445d-8661-24f6f91bf7b8', null, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (759, '4004', '53070eae-7839-46df-9492-f1b4c0b0b101', 104, '{"Δh": "deflection", "physicalvalue": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (760, '2002', 'ba311e19-eea2-4eff-8674-1a146dab66c3', null, '{"speed": "carSpeed", "axisNum": "axleCount", "overload": "overload", "crossRoad": "lane", "direction": "direction", "axieWeight": "axleLoad", "grossWeight": "load"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (761, '4008', 'ff8195ce-78e0-4668-81bb-8f26e83411a9', 100, '{"phy": "crack", "displacement": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (762, '1001', '1d7e6445-a676-42b9-9314-837415832451', null, '{"windSpeed": "speed", "windDirection": "direction"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (763, '1001', 'a8dd8956-f9ae-40d0-b207-8f5cf9669545', null, '{"windSpeed": "speed", "windDirection": "direction"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (764, '1005', '79d3e66b-d0ad-4c0f-b724-11eca0d0c0cb', null, '{"waterLever": "waterLevel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (765, '1003', '52c7f175-bdd6-4c4c-948d-aa2a7868cd82', null, '{"hourRainfall": "rainfall"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (766, '4001', '31be3fb7-3369-4966-8e26-b561dc31b6fd', 100, '{"phy": "displacement", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (767, '4009', 'bff19d80-ce20-4c3d-b158-df091a1fb5ac', 100, '{"phy": "expansion", "length": "DAQi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (768, '5005', '09252236-560b-47e1-bf81-f774d303ba26', 141, '{"physicalvalue": "soundLevel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (769, '1007', 'afba576d-0e5e-48cf-a9fa-18a3f986d812', null, '{"ein": "soundLevel", "maxnf": "max", "minnf": "min"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (770, '5005', '56c84083-d705-4aa0-94d2-34b731f75f97', 141, '{"physicalvalue": "soundLevel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (774, '1018', 'adcecf0d-2b34-4a55-abc2-78a2439b1567', null, '{"gasConcentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (775, '1019', 'cd24ff84-fef3-40d2-8397-dfa240a13d17', null, '{"gasConcentration": "lel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (776, '1019', 'fe0f0fce-4a90-4c6a-bd8a-26a48e5808e4', null, '{"gasConcentration": "lel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (780, '1019', '4abe48e9-ae10-4cd4-85a6-ad3970d8b928', null, '{"gasConcentration": "lel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (781, '1019', '1f143b2d-d58a-4b04-bec7-8a396e900c90', null, '{"gasConcentration": "lel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (783, '1018', '1352d63c-d97b-4dd4-8289-0de6cad01db0', null, '{"gasConcentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (784, '1019', '28dd8b68-38c2-47ad-af2f-80cabb2e5af7', null, '{"gasConcentration": "lel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (785, '1019', '23ecb98e-e536-4313-9234-07622fea082f', null, '{"gasConcentration": "lel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (786, '1019', '72c4a62b-a2d2-4e68-9686-cc325cd79f74', null, '{"gasConcentration": "lel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (787, '1018', 'd6aefb14-b750-4133-94f4-e51c3df7743f', null, '{"gasConcentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (788, '1017', '457137ac-994e-4445-8acf-12172464a82d', null, '{"gasConcentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (789, '1018', '742ee585-31d3-413c-b4f0-44d175b45bf5', null, '{"gasConcentration": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (790, '1050', 'c1e63dc1-8a68-4dad-a180-c652ea587e83', null, '{"totalPhosphorus": "totalPhosphorus"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (793, '1026', 'c730d30c-6a9d-4e3e-b347-7dfbe40a217d', null, '{"realTimeGasCon": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (794, '1002', 'fd94699e-65db-45b8-bbe9-88c147ba1e0a', null, '{"humidity": "humidity", "temperature": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (795, '4001', '1e4fb0f1-79a1-4246-a85c-478b55f8df95', 104, '{"Δh": "displacement", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (796, '1004', 'f070a6a5-406b-4567-ab70-0ba9cc204545', null, '{"temperature": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (797, '5002', '56c84083-d705-4aa0-94d2-34b731f75f97', 122, null, false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (798, '1052', '12f885d6-8a49-4495-909e-8a938e23ec8b', null, '{"solarRadiation": "solarRadiation"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (799, '1051', 'a21dbc9a-38d2-4468-8149-8324e875fc8a', null, '{"pm10": "pm10", "pm25": "pm25", "noise": "noise", "humidity": "humidity", "pressure": "pressure", "intensity": "intensity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (800, '2001', '09252236-560b-47e1-bf81-f774d303ba26', 120, '{"force": "cableForce"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (801, '2001', '1bcd78b8-bd96-4c95-8e19-27a1ac7356c9', null, null, true, 202, '{"Δh": "cableForce", "physicalvalue": "pv"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (802, '2001', '56c84083-d705-4aa0-94d2-34b731f75f97', 120, '{"force": "cableForce"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (804, '1046', 'c9eacd36-38d6-48b9-9672-e76406906ea3', 144, '{"V": "volume", "physicalvalue": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (805, '2006', '2e9595c1-ff54-4c5f-953e-f61a7837200e', null, null, true, 204, '{"Nc": "force", "physicalvalue": "δi"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (806, '4002', 'c9946e27-bce7-41eb-b341-d6b03a7f115f', 102, '{"x": "x", "y": "y", "anglex": "αx", "angley": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (807, '4004', 'dcac1d14-912a-4868-8be8-08d1e86d2fa5', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (808, '4004', 'dcac1d14-912a-4868-8be8-08d1e86d2fa5', 104, '{"Δh": "deflection", "pressure": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (809, '1003', 'b9092f6a-8c04-44c9-97ea-49b5389f5580', null, '{"length": "rainfall"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (810, '4002', 'f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43', 102, '{"anglex": "αx", "angley": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (811, '4005', 'f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43', 102, '{"anglex": "αx", "angley": "αy"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (813, '1001', 'e3d9aa70-13e8-419c-939b-953b239eb4b0', null, '{"speed": "speed", "direction": "direction"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (814, '1002', '6f6f83fa-1af9-4e4c-8d3f-53c2a4d1b4ca', null, '{"humidity": "humidity", "temperature": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (815, '4002', 'd2e74fbe-59fe-420d-b127-c61ba8236f42', null, '{"anglex": "x", "angley": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (816, '4001', '43060aae-0e85-4ec6-9fc9-b05216b11e13', null, '{"length": "displacement"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (817, '4100', '53070eae-7839-46df-9492-f1b4c0b0b101', 104, '{"Δh": "hi", "physicalvalue": "Pi"}', true, 221, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (818, '4001', '53070eae-7839-46df-9492-f1b4c0b0b101', 104, '{"Δh": "displacement", "physicalvalue": "Pi"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (819, '3003', '780ffe7d-7369-4d2f-9184-32790466f2ba', null, '{"physicalvalue": "stress"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (820, '4001', 'c991c138-3b47-4a21-af81-9ba1df554176', null, '{"anglex": "displacement"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (821, '4002', 'c991c138-3b47-4a21-af81-9ba1df554176', null, '{"anglex": "x", "angley": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (822, '2003', '90e48651-6ab9-4f11-95e9-c2c7eb4c3c15', null, '{"physicalvalue": "pressure"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (823, '1005', 'b7dd781d-dba7-4228-b49f-8aee75e42625', null, '{"waterlevel": "waterLevel"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (824, '4001', '0b84defc-2160-4d4a-8d71-6f350b4d6666', null, '{"length": "displacement"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (825, '4003', 'e92738ba-66bf-4ec9-85c5-c1f2b4d7780e', null, '{"x": "x", "y": "y", "z": "z"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (826, '5006', '56c84083-d705-4aa0-94d2-34b731f75f97', null, null, true, 222, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (827, '5006', '09252236-560b-47e1-bf81-f774d303ba26', null, null, true, 222, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (828, '8022', '403dcab2-df50-4fda-a92e-c2100bb9a242', null, '{"co": "CO", "o3": "O3", "ch4": "CH4", "h2s": "H2S", "humidity": "humidity", "temperature": "temp"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (829, '8033', '5ab3d59e-efe3-45c3-b69d-36ec4af9fd8c', null, '{"state": "state", "distance": "distance", "station_id": "station_id"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (830, '3001', '56c84083-d705-4aa0-94d2-34b731f75f97', 148, '{"r": "strain", "physicalvalue": "i"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (831, '4013', '2d2bb5aa-7dae-4123-bf05-5cdc08d7480f', 139, '{"X": "x", "Y": "y", "Z": "h", "height": "zi", "easting": "xi", "northing": "yi", "heightDiff": "height", "eastingDiff": "vert", "northingDiff": "position"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (832, '5002', '7c054865-5f77-4df5-9d1b-ed2c6f1bb27e', null, '{"anglex": "ppv", "angley": "pv", "anglez": "trms"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (833, '5002', '8f03b15b-fbb7-4bca-ae92-2230abf071b7', null, '{"physicalvalue_x": "pv", "physicalvalue_y": "ppv", "physicalvalue_z": "trms"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (834, '8012', '82ef7aea-b59f-49e6-a6e2-5367df363559', null, '{"ph": "ph", "codmn": "codmn"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (835, '8002', '82ef7aea-b59f-49e6-a6e2-5367df363559', null, '{"ph": "ph", "codmn": "codmn"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (836, '7012', '3a6fb76d-551e-4bf2-a7e9-6a856fa3b3d8', null, '{"oil": "oil", "speed": "speed", "mileage": "mileage", "latitude": "latitude", "direction": "direction", "longitude": "longitude"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (837, '7042', '10b47cb4-4bf3-4fe7-b02b-ba8bd855f6d1', null, '{"tilt": "angle", "speed": "speed", "height": "Height", "weight": "Weight"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (838, '7043', '67b10a83-c5aa-4293-b79e-8d237be48a90', null, '{"tilt": "angle", "weight": "Weight"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (839, '7044', 'a38cf799-aac7-400a-88a1-320d5ed1e2d3', null, '{"UserId": "UserId", "dumpnumber": "dumpnumber", "StrUserName": "StrUserName", "Cidentitynumber": "Cidentitynumber", "CertificateNumber": "CertificateNumber"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (840, '1002', 'd5bf6f22-3d7a-4ab0-9043-1020e9516bcc', null, '{"Temp": "temperature", "humidy": "humidity"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (841, '1018', '89fb363a-19d1-4e23-a9af-b2a2c310eb4f', null, '{"NH3": "concentration"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (842, '7030', 'f8803e24-c7c9-4089-8f06-5a00433131b1', 151, '{"frequency": "frequency", "A_phase_volt": "A_phase_volt", "B_phase_volt": "B_phase_volt", "C_phase_volt": "C_phase_volt", "currentState": "currentState", "total_energy": "total_energy", "A_active_power": "A_active_power", "A_power_factor": "A_power_factor", "B_active_power": "B_active_power", "B_power_factor": "B_power_factor", "C_active_power": "C_active_power", "C_power_factor": "C_power_factor", "A_phase_current": "A_phase_current", "B_phase_current": "B_phase_current", "C_phase_current": "C_phase_current", "total_active_power": "total_active_power", "total_power_factor": "total_power_factor", "total_phase_current": "total_phase_current"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (843, '1004', 'c2a5bb3b-ee71-478d-9987-425bd6b8fda0', null, '{"Price": "temperature"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (844, '7035', '806d55f2-d53f-4389-9076-3680e9ad880f', null, '{"paidFee": "paidFee", "payType": "payType", "useTime": "useTime", "carStatus": "carStatus", "plateNumber": "plateNumber", "str_enterTime": "str_enterTime", "str_leaveTime": "str_leaveTime"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (845, '9010', 'c892bb1b-57aa-4b52-b1eb-79172e95a8fb', null, '{"inCount": "inflow", "outCount": "outflow"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (846, '4002', '0bb520bf-1e78-4fea-93b1-e9df880c9c89', null, '{"anglex": "x", "angley": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (847, '4013', 'f1bce989-488d-4adb-ae75-1aca4c363149', null, '{"x": "x", "y": "y", "z": "h", "dx": "horz", "dy": "vert", "dz": "height"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (848, '4001', 'f1bce989-488d-4adb-ae75-1aca4c363149', null, '{"dy": "displacement"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (849, '4002', 'f1bce989-488d-4adb-ae75-1aca4c363149', null, '{"dx": "x", "dy": "y"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (850, '4003', 'f1bce989-488d-4adb-ae75-1aca4c363149', null, '{"dx": "x", "dy": "y", "dz": "z"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (851, '1008', '6adebf83-92d7-446d-b507-ca16b4122a64', 137, '{"Q": "seepage", "length": "H"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (852, '1010', '4c4f61ff-2f8d-403e-831c-dc756a26492c', 100, '{"phy": "pv", "length": "DAQi"}', true, 154, '{"L": "beachWidth"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (853, '1010', '83117a25-f083-4a3a-b94c-8f33dce57f93', 100, '{"phy": "pv", "length": "DAQi"}', true, 154, '{"L": "beachWidth"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (854, '2006', '73a7b800-25d7-41ad-872d-96cc4f9430de', 135, '{"σ": "δi", "physicalvalue": "F"}', true, 204, '{"Nc": "force"}', null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (855, '1034', '8b28bc71-ea1a-4941-896e-aa426e0cb1a9', null, '{"pm10": "pm10", "pm25": "pm25", "noise": "noise", "humidity": "humidity", "windSpeed": "speed", "temperature": "temperature", "windDirection": "direction"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (856, '7035', '89584b5d-4128-4421-bb15-042e92e83ee2', null, '{"paidFee": "paidFee", "payType": "payType", "useTime": "useTime", "enterTime": "str_enterTime", "leaveTime": "str_leaveTime", "plateNumber": "plateNumber"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (857, '9010', 'eea520e3-d5a7-48a9-8e0d-c1bd85f492bb', null, '{"inflow": "inflow", "outflow": "outflow"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (858, '9010', '9f1910e2-f1ab-479d-96fc-2ee443ca661b', null, '{"inflow": "inflow", "outflow": "outflow"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (859, '7035', 'bf8030cc-c1bf-4621-96ba-e43ea75130a1', null, '{"paidFee": "paidFee", "payType": "payType", "useTime": "useTime", "enterTime": "str_enterTime", "leaveTime": "str_leaveTime", "plateNumber": "plateNumber"}', false, null, null, null);
+INSERT INTO public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) VALUES (860, '8002', '4ca8c15e-836f-4c1a-93c9-b0809828ed11', null, '{"ph": "ph", "cod": "cod"}', false, null, null, null);
+
+
+
+
+
+
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (1, '1001', '风速', 'speed', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (2, '1001', '风向', 'direction', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (3, '1002', '温度', 'temperature', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (4, '1002', '湿度', 'humidity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (5, '1003', '降雨量', 'rainfall', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (6, '1004', '温度', 'temperature', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (7, '1005', '水位', 'waterLevel', 2);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (8, '1006', '湿度', 'humidity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (9, '1007', '等效声级', 'soundLevel', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (10, '1007', '最小', 'min', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (11, '1007', '最大', 'max', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (12, '1008', '渗流量', 'seepage', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (13, '1009', '地下水位', 'waterLevel', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (14, '1010', '干滩长度', 'beachWidth', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (15, '1010', '库水位', 'waterLevel', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (16, '1011', '电流', 'electricity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (17, '1012', '压强', 'pressure', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (18, '1013', '液位', 'liquidLevel', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (19, '1014', '累计流量', 'total', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (20, '1014', '瞬时流量', 'instant', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (21, '1015', '蚀度', 'corrosion', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (22, '1016', 'ph值', 'ph', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (23, '1017', '浓度', 'concentration', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (24, '1018', '浓度', 'concentration', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (25, '1019', '爆炸下限', 'lel', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (26, '1020', '流明', 'lumen', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (27, '1021', '辐射强度', 'radiation', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (28, '1022', '风速', 'speed', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (29, '1023', '浓度', 'concentration', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (30, '1024', '井底液位', 'liquidLevel', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (31, '1024', '井口液位', 'liquidLevel', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (32, '1025', '主用液位', 'liquidLevel', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (33, '1025', '备用液位', 'liquidLevel', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (34, '2001', '索力', 'cableForce', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (35, '2002', '车重', 'load', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (37, '2003', '压力', 'pressure', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (38, '2004', '受力', 'force', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (39, '3001', '应变', 'strain', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (40, '3002', '最大主应力', 'stress', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (41, '3002', '主应力方向', 'direction', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (42, '3003', '应力', 'stress', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (43, '4001', '位移', 'displacement', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (44, '4002', 'X方向位移', 'x', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (45, '4002', 'Y方向位移', 'y', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (46, '4003', 'X方向位移', 'x', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (47, '4003', 'Y方向位移', 'y', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (48, '4003', 'Z方向位移', 'z', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (49, '4004', '挠度', 'deflection', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (50, '4005', 'X方向位移', 'x', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (51, '4005', 'Y方向位移', 'y', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (52, '4005', 'X方向累积位移', 'xTotal', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (53, '4005', 'Y方向累积位移', 'yTotal', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (54, '4006', '角度', 'angle', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (55, '4007', 'X方向角度', 'x', 2);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (56, '4007', 'Y方向角度', 'y', 2);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (57, '4008', '裂缝', 'crack', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (58, '4009', '伸缩缝', 'expansion', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (59, '4010', 'X方向倾角', 'x', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (60, '4010', 'Y方向倾角', 'y', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (61, '4010', '顶升高度A', 'a', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (62, '4010', '顶升高度B', 'b', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (63, '4010', '顶升高度C', 'c', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (64, '4010', '顶升高度D', 'd', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (65, '5001', '峰值', 'pv', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (66, '5001', '峰峰值', 'ppv', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (67, '5001', '有效值', 'trms', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (68, '5002', '峰值', 'pv', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (69, '5002', '峰峰值', 'ppv', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (70, '5002', '有效值', 'trms', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (71, '5003', '应变', 'pv', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (74, '6001', '主起变频输出转速', 'rotateSpeed', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (75, '6001', '主起变频输出电流', 'electricity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (76, '6001', '主起变频输出转矩', 'torque', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (77, '6001', '主起变频输出电压', 'outputVoltage', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (78, '6001', '主起变频母线电压', 'busbarVoltage', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (79, '6001', '主起位置', 'location', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (80, '6001', '主起重量', 'weight', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (81, '6002', '副起位置', 'location', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (82, '6002', '副起重量', 'weight', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (83, '6003', '大车变频输出转速', 'rotateSpeed', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (84, '6003', '大车变频输出电流', 'electricity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (85, '6003', '大车变频输出转矩', 'torque', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (86, '6003', '大车变频输出电压', 'outputVoltage', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (87, '6003', '大车变频母线电压', 'busbarVoltage', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (88, '6003', '大车位置', 'location', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (89, '6004', '小车变频输出转速', 'rotateSpeed', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (90, '6004', '小车变频输出电流', 'electricity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (91, '6004', '小车变频输出转矩', 'torque', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (92, '6004', '小车变频输出电压', 'outputVoltage', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (93, '6004', '小车变频母线电压', 'busbarVoltage', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (94, '6004', '主起位置', 'location', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (95, '4011', '位移', 'displacement', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (96, '1026', '浓度', 'concentration', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (97, '1027', 'PM2.5', 'pm25', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (98, '1027', 'PM10', 'pm10', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (99, '1027', '悬浮物', 'suspended', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (100, '1028', '温度', 'temp', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (101, '1028', '结冰厚度', 'thickness', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (103, '1029', '风向', 'direction', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (104, '2005', '重量', 'gravity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (105, '4012', 'X轴角度', 'x', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (106, '4012', 'Y轴角度', 'y', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (107, '4012', 'Z轴角度', 'z', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (108, '1030', '能见度', 'visibility', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (109, '1031', '浓度', 'concentration', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (110, '2002', '超载', 'overload', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (111, '2002', '车道', 'lane', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (112, '2002', '车牌', 'license', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (113, '2002', '方向', 'direction', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (114, '2002', '轴数', 'axleCount', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (115, '2002', '轴重', 'axleLoad', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (116, '4013', '横向变化量', 'horz', 6);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (117, '4013', '纵向变化量', 'vert', 6);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (118, '4013', '位移变化量', 'position', 6);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (119, '4013', '高程变化量', 'height', 6);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (120, '4013', 'X北坐标', 'x', 6);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (121, '4013', 'Y横坐标', 'y', 6);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (122, '4013', 'H高程', 'h', 6);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (123, '2006', '支撑轴力', 'force', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (124, '1032', 'PM2.5浓度', 'PM2.5', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (125, '1032', 'PM10浓度', 'PM10', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (126, '1032', 'SO2浓度', 'SO2', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (127, '1032', 'NO2浓度', 'NO2', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (128, '1032', 'CO浓度', 'CO', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (129, '1032', 'O3浓度', 'O3', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (130, '1032', '总挥发性有机物浓度', 'TVOC', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (131, '1032', '温度', 'temp', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (132, '1032', '湿度', 'humidity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (133, '1033', '露点', 'dewpoint', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (134, '1033', '光辐射', 'radiation', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (135, '1033', 'CO2浓度', 'CO2', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (137, '1033', '温度', 'temperature', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (138, '1033', '湿度', 'humidity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (159, '4014', '载重', 'load', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (160, '4014', '幅度', 'range', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (161, '4014', '风速', 'speed', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (162, '4014', '角度', 'angle', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (163, '4014', '高度', 'height', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (164, '1034', '温度', 'temperature', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (165, '1034', '湿度', 'humidity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (166, '1034', 'PM2.5', 'pm25', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (167, '1034', 'PM10', 'pm10', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (168, '1034', '风速', 'speed', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (169, '1034', '噪声', 'noise', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (170, '7001', 'X方向角度', 'x', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (171, '7001', 'Y方向角度', 'y', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (172, '7001', '轴力', 'force', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (173, '7002', 'X方向角度', 'x', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (174, '7002', 'Y方向角度', 'y', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (175, '7002', '支架水平位移', 'displacement', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (176, '7003', 'X方向角度', 'x', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (177, '7003', 'Y方向角度', 'y', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (178, '7003', '模板沉降', 'settling', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (179, '1034', '风向', 'direction', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (180, '8001', 'SO2', 'so2', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (181, '8001', 'NO2', 'no2', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (182, '8001', 'CO', 'co', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (183, '8001', 'O3', 'o3', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (184, '8001', 'PM10', 'pm10', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (185, '8001', 'PM2.5', 'pm2_5', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (186, '8001', 'VOCs', 'vocs', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (187, '4014', '倾斜', 'obliquity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (188, '4014', '力矩', 'moment', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (189, '9001', '电表示数', 'total', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (190, '9002', '水表示数', 'total', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (191, '9003', '女厕驻留人数', 'female_stay', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (192, '9003', '女厕出流量', 'female_out', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (193, '9003', '女厕进流量', 'female_in', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (194, '9003', '男厕驻留人数', 'male_stay', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (195, '9003', '男厕出流量', 'male_out', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (196, '9003', '男厕进流量', 'male_in', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (197, '0001', '状态', 'state', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (198, '9004', '温度', 'temperature', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (199, '9004', '湿度', 'humidity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (200, '9004', '氨气浓度', 'nh3', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (201, '8002', 'PH值', 'ph', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (202, '8002', '电导', 'tds', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (203, '8002', '溶解氧', 'do', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (204, '8002', '浊度', 'turb', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (205, '8002', '温度', 'temp', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (226, '4015', '笼门开关状态', 'doorState', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (227, '4015', '风级', 'windLevel', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (228, '4015', '风速', 'windSpeed', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (229, '4015', '倾角X', 'obliguityX', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (230, '4015', '倾角Y', 'obliguityY', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (231, '4015', '楼层', 'floor', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (232, '4015', '高度', 'height', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (233, '4015', '速度', 'speed', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (234, '4015', '载重', 'weight', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (235, '4015', '人数', 'peopleCnt', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (236, '1035', 'PM2.5', 'pm25', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (237, '1035', 'PM10', 'pm10', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (238, '1035', '噪声', 'noise', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (239, '1035', '温度', 'temperature', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (240, '1035', '湿度', 'humidity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (241, '4016', '高程', 'height', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (242, '8003', '间隔', 'interval', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (243, '8003', '次数', 'total', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (244, '8003', '结束时间', 'timeEnd', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (245, '8003', '开始时间', 'timeBegin', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (246, '8004', '心跳', 'heartrate', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (247, '8004', '纬度', 'lat', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (248, '8004', '经度', 'lon', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (249, '8004', '地址', 'address', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (250, '8004', '城市', 'city', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (251, '8005', '电量', 'power', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (252, '8006', '纬度', 'lat', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (253, '8006', '经度', 'lon', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (254, '8006', '地址', 'address', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (255, '8006', '城市', 'city', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (256, '8007', '纬度', 'lat', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (257, '8007', '经度', 'lon', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (258, '8007', '地址', 'address', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (259, '8007', '城市', 'city', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (260, '8008', '心率', 'heartrate', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (261, '8009', '步数', 'stepvalue', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (262, '8003', '次数', 'count', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (263, '8003', '睡眠类型', 'sleeptype', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (264, '4017', '基坑沉降', 'settling', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (265, '7007', '塑料垃圾容量', 'high1', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (266, '7007', '纸类垃圾容量', 'high2', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (267, '7007', '金属垃圾容量', 'high3', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (268, '7007', '衣服垃圾容量', 'high4', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (269, '7007', '玻璃垃圾容量', 'high5', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (270, '7007', '有害垃圾容量', 'high6', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (271, '7007', '电子垃圾容量', 'high7', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (272, '7007', '纸塑品垃圾容量', 'high8', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (273, '7007', '餐厨垃圾容量', 'high9', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (274, '7007', '可回收垃圾容量', 'high10', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (275, '7007', '塑料垃圾容量', 'high11', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (276, '7007', '瓶罐垃圾容量', 'high12', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (277, '7007', '不可回收垃圾容量', 'high13', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (278, '8010', 'NH3', 'nh3', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (279, '8010', 'VOC', 'voc', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (280, '8010', 'H2S', 'h2s', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (281, '8011', '温度', 'temperature', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (282, '8011', '湿度', 'humidity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (283, '8011', 'PM100浓度', 'pm100', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (284, '8011', 'PM2.5浓度', 'pm2_5', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (285, '8011', 'PM10浓度', 'pm10', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (286, '8011', '经度', 'longitude', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (287, '8011', '纬度', 'latitude', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (288, '8011', 'SO2浓度', 'so2', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (289, '8011', 'NO2浓度', 'no2', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (290, '8011', 'O3浓度', 'o3', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (291, '8011', 'CO浓度', 'co', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (292, '8011', 'VOC浓度', 'voc', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (293, '1042', '功率', 'power', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (294, '1043', '流速', 'current speed', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (295, '9005', '门1', 'DI1', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (296, '9005', '门2', 'DI2', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (297, '9005', '门3', 'DI3', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (298, '1045', '流量', 'flow', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (299, '2005', '载重百分比', 'weightPercent', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (300, '9010', '进入流量', 'inflow', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (301, '9010', '出去流量', 'outflow', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (305, '6010', '经度', 'lang', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (306, '6010', '纬度', 'long', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (307, '6010', '电量', 'power', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (308, '6010', '速度', 'speed', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (309, '4020', '沉降', 'x', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (310, '4020', '相邻沉降', 'diffX', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (311, '8013', '有功电能', 'pEnergy', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (312, '8013', '灯杆编号', 'lampPoleNumber', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (313, '8013', '频率', 'frequency', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (314, '8013', '亮度(百分比)', 'bri', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (315, '8013', '状态(1开灯,0关灯)', 'on', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (316, '8013', '电压', 'voltage', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (317, '5041', '状态码', 'stateCode', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (318, '5041', '状态信息', 'stateMessage', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (319, '5041', '电压', 'voltage', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (320, '5041', '信号强度', 'signals', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (321, '8013', '运行时长', 'runtime', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (322, '8013', '在线状态(0不在线,1在线)', 'online', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (323, '8013', '告警状态', 'alarm_status', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (324, '8013', '纬度', 'latitude', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (325, '8013', '经度', 'longitude', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (326, '8013', '网关名称', 'gatewayName', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (327, '7008', '重量', 'weight', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (328, '7008', '垃圾量', 'trash', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (329, '7008', '温度', 'temprature', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (330, '7008', '日用电量', 'usedelectric', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (331, '7008', '日充电量', 'electric', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (332, '7008', '信号强度', 'signal', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (333, '7008', '纬度', 'latitude', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (334, '7008', '经度', 'longitude', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (335, '7008', '状态码', 'stateCode', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (336, '7008', '状态信息', 'stateMessage', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (337, '2002', '车速', 'carSpeed', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (338, '7010', '水压', 'pressure', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (339, '7010', '倾斜角度', 'angle', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (340, '7011', '电流', 'current', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (341, '7011', '温度', 'temperature', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (342, '5005', '分频最大振级', 'soundLevel', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (343, '5005', '振动加速度级', 'arrAcc', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (345, '1050', '总磷', 'totalPhosphorus', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (346, '1051', '温度', 'temperature', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (347, '1051', '湿度', 'humidity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (348, '1051', '气压', 'pressure', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (349, '1051', '噪声', 'noise', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (350, '1051', '光照强度', 'intensity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (351, '1051', 'pm2.5', 'pm25', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (352, '1051', 'pm10', 'pm10', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (353, '1052', '太阳辐射值', 'solarRadiation', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (354, '1046', '库容', 'volume', 2);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (355, '4025', 'X轴角度', 'x', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (356, '4025', 'Y轴角度', 'y', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (357, '4025', 'Z轴角度', 'z', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (358, '4025', 'X轴加速度', 'xAcc', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (359, '4025', 'Y轴加速度', 'yAcc', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (360, '4025', 'Z轴加速度', 'zAcc', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (361, '4025', '信号', 'signal', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (362, '4025', '电压', 'Voltage', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (363, '4025', '传感器状态', 'state', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (364, '4018', 'Dx', 'eastingDiff', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (365, '4018', 'Dy', 'northingDiff', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (366, '4018', 'Dz', 'heightDiff', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (367, '4018', 'Y坐标', 'northing', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (368, '4018', 'X坐标', 'easting', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (369, '4018', 'Z坐标', 'height', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (379, '4027', 'X坐标', 'easting', 4);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (380, '4027', 'Y坐标', 'northing', 4);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (381, '4027', 'Z坐标', 'height', 4);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (382, '4027', 'Dx', 'eastingDiff', 4);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (383, '4027', 'Dy', 'northingDiff', 4);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (384, '4027', 'Dz', 'heightDiff', 4);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (385, '4100', '差值', 'diff', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (386, '4100', '倾斜率', 'slope', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (387, '5006', 'X峰值', 'x', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (388, '5006', 'Y峰值', 'y', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (389, '5006', 'Z峰值', 'z', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (390, '8022', '一氧化碳', 'CO', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (391, '8022', '氨气', 'CH4', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (392, '8022', '硫化氢', 'H2S', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (393, '8022', '臭氧', 'O3', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (394, '8022', '温度', 'temp', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (395, '8022', '湿度', 'humidity', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (396, '8033', '标签与基站距离', 'distance', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (397, '8033', '标签状态', 'state', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (398, '8033', '基站ID', 'station_id', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (399, '4031', '纵向变化量', 'vert', 5);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (400, '4031', 'H高程', 'h', 5);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (401, '4031', 'Y横坐标', 'y', 5);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (402, '4031', 'X北坐标', 'x', 5);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (403, '4031', '横向变化量', 'horz', 5);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (404, '4031', '高程变化量', 'height', 5);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (405, '4031', '位移变化量', 'position', 5);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (406, '7530', '信号强度', 'xhqd', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (407, '7530', 'x角度', 'anglex', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (408, '7530', 'y角度', 'angley', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (409, '7530', 'z角度', 'anglez', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (410, '7530', 'x振幅', 'amx', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (411, '7530', 'y振幅', 'amy', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (412, '7530', 'z振幅', 'amz', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (413, '7530', '合成振幅', 'amtotal', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (414, '7530', '合成速度', 'speedtotal', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (415, '7530', 'x频率', 'frequencyx', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (416, '7530', 'y频率', 'frequencyy', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (417, '7530', 'z频率', 'frequencyz', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (418, '7530', 'x最大振幅', 'max_amx', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (419, '7530', 'y最大振幅', 'max_amy', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (420, '7530', 'z最大振幅', 'max_amz', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (421, '7530', 'x最大频率', 'max_frequencyx', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (422, '7530', 'y最大频率', 'max_frequencyy', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (423, '7530', 'z最大频率', 'max_frequencyz', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (424, '7530', 'x加速度', 'accelerated_speedx', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (425, '7530', 'y加速度', 'accelerated_speedy', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (426, '7530', 'z加速度', 'accelerated_speedz', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (427, '8012', 'PH值', 'ph', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (428, '8012', '高锰酸盐指数', 'codmn', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (477, '7012', '经度', 'longitude', 6);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (478, '7012', '纬度', 'latitude', 6);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (479, '7012', '速度', 'speed', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (480, '7012', '方向', 'direction', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (481, '7012', '里程', 'mileage', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (483, '8002', '高锰酸盐指数', 'codmn', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (484, '7030', 'A相电压', 'A_phase_volt', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (485, '7030', 'B相电压', 'B_phase_volt', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (486, '7030', 'C相电压', 'C_phase_volt', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (487, '7030', 'A相电流', 'A_phase_current', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (488, '7030', 'B相电流', 'B_phase_current', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (489, '7030', 'C相电流', 'C_phase_current', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (490, '7030', '三相电流矢量和', 'total_phase_current', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (491, '7030', 'A相有功功率', 'A_active_power', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (492, '7030', 'B相有功功率', 'B_active_power', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (493, '7030', 'C相有功功率', 'C_active_power', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (494, '7030', '总有功功率', 'total_active_power', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (495, '7030', 'A相功率因数', 'A_power_factor', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (496, '7030', 'B相功率因数', 'B_power_factor', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (497, '7030', 'C相功率因数', 'C_power_factor', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (498, '7030', '总相功率因数', 'total_power_factor', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (499, '7030', '频率', 'frequency', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (500, '7030', '总有功电能', 'total_energy', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (501, '7042', '称重', 'Weight', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (502, '7042', '高度', 'Height', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (503, '7042', '倾角', 'angle', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (504, '7043', '测重', 'Weight', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (506, '7043', '倾角', 'angle', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (507, '7042', '速度', 'speed', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (508, '7044', '设备编号', 'dumpnumber', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (509, '7044', '人员编号号(工号)', 'UserId', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (510, '7044', '人员姓名', 'StrUserName', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (511, '7044', '证件号码1(身份证号)', 'Cidentitynumber', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (512, '7044', '证件号码2(操作证号)', 'CertificateNumber', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (513, '7030', '总无功功率', 'total_reactive_power', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (514, '7030', '设备状态', 'powerState', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (522, '7035', '车牌号', 'plateNumber', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (523, '7035', '车辆状态', 'carStatus', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (524, '7035', '进场时间', 'str_enterTime', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (525, '7035', '离场时间', 'str_leaveTime', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (526, '7035', '停车时长', 'useTime', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (527, '7035', '本次停车总现金支付', 'paidFee', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (528, '7035', '支付方式', 'payType', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (529, '7030', '电流状态', 'currentState', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (534, '8002', '化学需氧量', 'cod', null);
+INSERT INTO public.t_factor_proto_item (id, proto, name, field_name, precision) VALUES (535, '8002', '化学需氧量', 'cod', null);
+
+
+
+
+
+
+
+
+
+INSERT INTO public.t_filter_method (id, type, name, params) VALUES (1, 1, '取中值', '{"窗口": "正整数"}');
+INSERT INTO public.t_filter_method (id, type, name, params) VALUES (2, 1, '限幅', '{"波幅": "正数"}');
+INSERT INTO public.t_filter_method (id, type, name, params) VALUES (3, 1, '滑动平均', '{"窗口": "正整数"}');
+INSERT INTO public.t_filter_method (id, type, name, params) VALUES (4, 2, '方差判断平均', '{"倍数": "正数", "窗口": "正整数"}');
+INSERT INTO public.t_filter_method (id, type, name, params) VALUES (5, 2, '滤波算法', '{"D": "正整数", "K": "正数", "ReCalc": "正整数", "窗口": "正整数"}');
+INSERT INTO public.t_filter_method (id, type, name, params) VALUES (6, 2, '去极值移动平均', '{"上限": "数字", "下限": "数字", "窗口": "正整数"}');
+INSERT INTO public.t_filter_method (id, type, name, params) VALUES (7, 2, '加权滑动平均', '{"窗口": "正整数"}');
+INSERT INTO public.t_filter_method (id, type, name, params) VALUES (8, 2, '中值平均', '{"窗口": "正整数"}');
+INSERT INTO public.t_filter_method (id, type, name, params) VALUES (9, 2, '限幅平均', '{"波幅": "正数", "窗口": "正整数"}');
+
+
+
+
+
+
+
+
+
+INSERT INTO public.t_group_type (type_code, name, description, params, present) VALUES ('001', '展示分组', '普通展示分组', '{}', true);
+INSERT INTO public.t_group_type (type_code, name, description, params, present) VALUES ('101', '浸润线分组', '浸润线展示分组', '{"height": {"name": "高度", "type": "number", "unit": "m"}}', true);
+INSERT INTO public.t_group_type (type_code, name, description, params, present) VALUES ('102', '索力分组', '索力展示分组', '{"location": {"name": "位置", "type": "number", "unit": "m"}}', true);
+INSERT INTO public.t_group_type (type_code, name, description, params, present) VALUES ('103', '挠度分组', '挠度展示分组', '{"location": {"name": "位置", "type": "number", "unit": "m"}}', true);
+INSERT INTO public.t_group_type (type_code, name, description, params, present) VALUES ('104', '深层水平位移分组', '深层水平位移展示分组', '{"depth": {"name": "深度", "type": "number", "unit": "m"}}', true);
+INSERT INTO public.t_group_type (type_code, name, description, params, present) VALUES ('201', '深层水平位移计算分组', '深层水平位移计算分组', '{"depth": {"name": "深度", "type": "number", "unit": "m"}}', false);
+INSERT INTO public.t_group_type (type_code, name, description, params, present) VALUES ('202', '压差测沉降计算分组', '压差连通管计算分组', '{"base": {"name": "基准点", "type": "boolean", "unit": ""}}', false);
+
+
+
+
+
+INSERT INTO public.t_group_type_factor (id, group_type, proto) VALUES (1, '101', '1009');
+INSERT INTO public.t_group_type_factor (id, group_type, proto) VALUES (2, '102', '2001');
+INSERT INTO public.t_group_type_factor (id, group_type, proto) VALUES (3, '103', '4004');
+INSERT INTO public.t_group_type_factor (id, group_type, proto) VALUES (4, '104', '4005');
+
+
+
+
+
+
+
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (1, 'm/s', 1, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (2, '°', 2, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (3, '℃', 3, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (4, '%RH', 4, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (5, 'mm', 5, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (6, '℃', 6, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (7, 'm', 7, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (8, '%RH', 8, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (9, 'dB', 9, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (10, 'dB', 10, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (11, 'dB', 11, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (12, 'm3/s', 12, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (13, 'm', 13, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (14, 'm', 14, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (15, 'm', 15, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (16, 'A', 16, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (17, 'kPa', 17, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (18, 'm', 18, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (19, 'm^3', 19, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (20, 'Nm^3h', 20, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (21, 'NTU', 21, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (22, 'ph', 22, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (23, '%Vol', 23, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (24, 'ppm', 24, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (25, '%LEL', 25, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (26, 'Lux', 26, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (27, 'W/sr', 27, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (28, 'm/s', 28, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (29, 'ms/cm', 29, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (30, 'm', 30, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (31, 'm', 31, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (32, 'mm', 32, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (33, 'mm', 33, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (34, 'kN', 34, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (35, 'T', 35, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (36, 'MPa', 37, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (37, 'kN', 38, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (38, 'με', 39, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (39, 'MPa', 40, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (40, '°', 41, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (41, 'MPa', 42, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (42, 'mm', 43, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (43, 'mm', 44, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (44, 'mm', 45, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (45, 'mm', 46, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (46, 'mm', 47, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (47, 'mm', 48, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (48, 'mm', 49, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (49, 'mm', 50, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (50, 'mm', 51, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (51, 'mm', 52, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (52, 'mm', 53, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (53, '°', 54, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (54, '°', 55, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (55, '°', 56, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (56, 'mm', 57, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (57, 'mm', 58, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (58, '°', 59, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (59, '°', 60, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (60, 'mm', 61, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (61, 'mm', 62, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (62, 'mm', 63, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (63, 'mm', 64, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (64, 'cm/s', 65, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (65, 'cm/s', 66, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (66, 'cm/s', 67, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (67, 'gal', 68, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (68, 'gal', 69, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (69, 'gal', 70, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (70, 'με', 71, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (73, 'r/min', 74, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (74, 'A', 75, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (75, '%', 76, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (76, 'V', 77, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (77, 'V', 78, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (78, 'm', 79, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (79, 'T', 80, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (80, 'm', 81, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (81, 'T', 82, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (82, 'r/min', 83, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (83, 'A', 84, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (84, '%', 85, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (85, 'V', 86, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (86, 'V', 87, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (87, 'm', 88, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (88, 'r/min', 89, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (89, 'A', 90, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (90, '%', 91, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (91, 'V', 92, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (92, 'V', 93, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (93, 'm', 94, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (94, 'mm', 95, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (95, 'μg/m3', 96, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (96, 'μg/m3', 97, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (97, 'μg/m3', 98, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (98, 'μg/m3', 99, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (99, '℃', 100, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (100, 'mm', 101, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (101, '°', 103, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (102, 'kg', 104, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (103, '°', 105, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (104, '°', 106, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (105, '°', 107, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (106, 'm', 108, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (107, 'μmol/mol', 109, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (108, '', 110, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (109, '', 111, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (110, '', 112, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (111, '', 113, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (112, '', 114, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (113, 'Kg', 115, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (114, 'mm', 116, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (115, 'mm', 117, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (116, 'mm', 118, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (117, 'mm', 119, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (118, 'mm', 120, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (119, 'mm', 121, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (120, 'mm', 122, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (121, 'kN', 123, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (122, 'ug/m3', 124, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (123, 'ug/m3', 125, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (124, 'ppb', 126, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (125, 'ppb', 127, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (126, 'ppm', 128, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (127, 'ppb', 129, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (128, 'ppm', 130, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (129, '℃', 131, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (130, '%RH', 132, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (131, '℃', 133, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (132, 'μM/m^2', 134, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (133, 'ppm', 135, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (134, '℃', 137, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (135, '%', 138, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (156, 'T', 159, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (157, 'm', 160, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (158, 'm/s', 161, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (159, '°', 162, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (160, 'm', 163, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (161, '℃', 164, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (162, '%RH', 165, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (163, 'μg/m3', 166, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (164, 'μg/m3', 167, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (165, 'm/s', 168, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (166, 'dB', 169, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (167, '°', 170, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (168, '°', 171, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (169, 'kN', 172, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (170, '°', 173, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (171, '°', 174, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (172, 'mm', 175, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (173, '°', 176, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (174, '°', 177, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (175, 'mm', 178, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (176, '°', 179, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (177, 'μg/m3', 180, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (178, 'μg/m3', 181, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (179, 'mg/m3', 182, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (180, 'μg/m3', 183, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (181, 'μg/m3', 184, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (182, 'μg/m3', 185, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (183, 'μg/m3', 186, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (184, '°', 187, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (185, '%', 188, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (186, 'kW·h', 189, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (187, 'm3', 190, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (188, '人', 191, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (189, '人', 192, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (190, '人', 193, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (191, '人', 194, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (192, '人', 195, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (193, '人', 196, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (194, '', 197, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (195, '℃', 198, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (196, '%RH', 199, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (197, 'ppm', 200, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (198, 'pH', 201, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (199, 'μS/cm', 202, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (200, 'mg/L', 203, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (201, 'NTU', 204, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (202, '℃', 205, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (223, ' ', 226, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (224, '级', 227, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (225, 'm/s', 228, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (226, '°', 229, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (227, '°', 230, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (228, '层', 231, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (229, 'm', 232, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (230, 'm/s', 233, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (231, 't', 234, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (232, '人', 235, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (233, 'μg/m3', 236, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (234, 'μg/m3', 237, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (235, 'dB', 238, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (236, '℃', 239, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (237, '%RH', 240, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (238, 'm', 241, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (239, 'min', 242, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (240, '次', 243, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (241, '', 244, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (242, '', 245, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (243, 'bpm', 246, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (244, '°', 247, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (245, '°', 248, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (246, '', 249, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (247, '', 250, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (248, '%', 251, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (249, '°', 252, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (250, '°', 253, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (251, '', 254, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (252, '', 255, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (253, '°', 256, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (254, '°', 257, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (255, '', 258, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (256, '', 259, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (257, 'bpm', 260, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (258, '步', 261, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (259, '次', 262, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (260, '', 263, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (261, 'm', 264, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (262, '%', 265, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (263, '%', 266, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (264, '%', 267, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (265, '%', 268, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (266, '%', 269, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (267, '%', 270, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (268, '%', 271, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (269, '%', 272, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (270, '%', 273, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (271, '%', 274, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (272, '%', 275, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (273, '%', 276, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (274, '%', 277, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (275, 'ppm', 278, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (276, 'ppm', 279, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (277, 'ppm', 280, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (278, '℃', 281, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (279, '%RH', 282, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (280, 'μg/m3', 283, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (281, 'μg/m3', 284, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (282, 'μg/m3', 285, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (283, '°', 286, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (284, '°', 287, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (285, 'μg/m3', 288, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (286, 'μg/m3', 289, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (287, 'μg/m3', 290, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (288, 'μg/m3', 291, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (289, 'μg/m3', 292, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (290, 'KW', 293, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (291, 'm3/h', 294, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (292, '', 295, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (293, '', 296, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (294, '', 297, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (296, 'm³/s', 298, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (297, '%', 299, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (298, '人', 300, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (299, '人', 301, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (303, '°', 305, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (304, '°', 306, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (305, '%', 307, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (306, 'm/s', 308, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (307, 'mm', 309, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (308, 'mm', 310, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (309, 'KW', 311, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (310, '', 312, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (311, 'HZ', 313, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (312, '%', 314, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (313, '', 315, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (314, 'V', 316, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (315, '', 317, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (316, ' ', 318, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (317, 'V', 319, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (318, 'dB', 320, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (319, 'h', 321, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (320, ' ', 322, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (321, ' ', 323, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (322, ' ', 324, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (323, ' ', 325, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (324, ' ', 326, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (325, 'kg', 327, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (326, '%', 328, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (327, '℃', 329, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (328, '瓦', 330, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (329, '瓦', 331, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (330, 'dB', 332, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (331, '°', 333, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (332, '', 335, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (333, '', 336, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (334, 'km/h', 337, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (335, 'MPa', 338, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (336, '°', 339, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (337, 'mA', 340, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (338, '℃', 341, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (339, 'dB', 342, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (340, 'dB', 343, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (341, '°', 334, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (342, 'mg/L', 345, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (343, '℃', 346, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (344, '%RH', 347, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (345, 'Kpa', 348, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (346, 'dB', 349, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (347, 'Lux', 350, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (348, 'ug/m3', 351, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (349, 'ug/m3', 352, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (350, 'W/㎡', 353, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (351, '万m³', 354, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (352, '°', 355, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (353, '°', 356, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (354, '°', 357, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (355, 'mg', 358, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (356, 'mg', 359, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (357, 'mg', 360, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (358, '', 361, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (359, 'V', 362, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (360, '', 363, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (361, 'mm', 364, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (362, 'mm', 365, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (363, 'mm', 366, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (364, 'mm', 367, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (365, 'mm', 368, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (366, 'mm', 369, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (376, 'm', 379, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (377, 'm', 380, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (378, 'm', 381, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (379, 'm', 382, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (380, 'm', 383, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (381, 'm', 384, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (382, 'mm', 385, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (383, '', 386, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (384, 'cm/s', 387, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (385, 'cm/s', 388, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (386, 'cm/s', 389, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (387, 'ppm', 390, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (388, 'ppm', 391, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (389, 'ppm', 392, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (390, 'ppm', 393, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (391, '℃', 394, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (392, '%', 395, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (393, 'm', 396, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (394, ' ', 397, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (395, ' ', 398, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (396, 'm', 399, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (397, 'm', 400, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (398, 'm', 401, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (399, 'm', 402, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (400, 'm', 403, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (401, 'm', 404, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (402, 'm', 405, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (403, 'db', 406, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (404, '°', 407, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (405, '°', 408, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (406, '°', 409, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (407, 'mm', 410, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (408, 'mm', 411, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (409, 'mm', 412, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (410, 'mm', 413, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (411, 'mm/s', 414, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (412, 'hz', 415, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (413, 'hz', 416, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (414, 'hz', 417, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (415, 'mm', 418, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (416, 'mm', 419, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (417, 'mm', 420, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (418, 'hz', 421, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (419, 'hz', 422, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (420, 'hz', 423, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (421, 'mm/s2', 424, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (422, 'mm/s2', 425, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (423, 'mm/s2', 426, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (424, '', 427, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (425, 'mg/L', 428, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (474, ' ', 477, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (475, ' ', 478, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (476, 'km/h', 479, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (477, '°', 480, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (478, 'km', 481, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (480, 'mg/L', 483, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (481, 'V', 484, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (482, 'V', 485, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (483, 'V', 486, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (484, 'A', 487, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (485, 'A', 488, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (486, 'A', 489, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (487, 'A', 490, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (488, 'KW', 491, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (489, 'KW', 492, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (490, 'KW', 493, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (491, 'KW', 494, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (492, ' ', 495, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (493, ' ', 496, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (494, ' ', 497, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (495, ' ', 498, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (496, 'HZ', 499, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (497, 'KW*h', 500, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (498, 't', 501, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (499, 'm', 502, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (500, '°', 503, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (501, 't', 504, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (503, '°', 506, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (504, 'm/s', 507, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (505, ' ', 508, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (506, ' ', 509, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (507, ' ', 510, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (508, ' ', 511, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (509, ' ', 512, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (510, 'KW', 513, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (511, ' ', 514, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (519, '', 522, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (520, '', 523, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (521, '', 524, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (522, '', 525, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (523, 'min', 526, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (524, '¥', 527, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (525, '', 528, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (526, '', 529, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (527, 'mg/L', 534, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (528, 'mg/L', 534, true, 1.000000);
+INSERT INTO public.t_item_unit (id, name, item, if_default, transform) VALUES (529, 'mg/L', 535, true, 1.000000);
+
+
+
+
+
+
+
+INSERT INTO public.t_layout_type (id, name) VALUES (1, '2d整体');
+INSERT INTO public.t_layout_type (id, name) VALUES (2, '2d部件');
+INSERT INTO public.t_layout_type (id, name) VALUES (3, '3d整体');
+INSERT INTO public.t_layout_type (id, name) VALUES (4, '3d部件');
+
+
+
+
+
+INSERT INTO public.t_message_type (id, name) VALUES (1, '系统公告');
+
+
+
+
+
+
+INSERT INTO public.t_recalc_product_formula (id, iota_product_code, iota_product_formula, formula, fields) VALUES (1, '11f0a3dc-13ad-4c40-ae16-1b2f1d139564', '265b6e0c-ccfe-4cbd-bde2-362c37e12a44', 301, '{"ε": "physicalvalue", "frequency": "Fi", "temperature": "Ti"}');
+
+
+
+
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (1, '桥梁', '', 0, 'http://images.theiota.cn/upload/things/1b2d8739-627e-4b7d-9480-3eee6e9396fe/7418cb16-87dc-4578-a184-c6e4c96ad9d9/3c94bdc6ab3b2-image.png');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (2, '基坑', '', 0, 'http://images.theiota.cn/upload/things/1b2d8739-627e-4b7d-9480-3eee6e9396fe/b6367626-6ec4-4fcc-97b0-37648b00d89e/32886e26ae94d-image.png');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (3, '边坡', '', 0, '');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (4, '大坝', '', 0, '');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (5, '隧道', '', 0, '');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (6, '尾矿库', '', 0, 'http://images.theiota.cn/upload/things/1b2d8739-627e-4b7d-9480-3eee6e9396fe/64dac38a-762b-4e20-a8dd-ce74468c3384/a6e49c6219f1e-image.png');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (7, '建筑物', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (8, '铁塔', '', 0, 'http://images.theiota.cn/upload/things/1b2d8739-627e-4b7d-9480-3eee6e9396fe/e9bb0894-e1c5-4e35-a8e7-8da4bd78a877/4fa68079e2e07-image.png');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (9, '特种设备', '', 0, 'http://images.theiota.cn/upload/things/1b2d8739-627e-4b7d-9480-3eee6e9396fe/45adc283-b8b0-4200-89a0-87a7c466f853/387e3fd1af8e3-image.png');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (10, '气象监测站', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (11, '市政管网', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (12, '涵洞', null, 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (14, '梁式桥', '', 1, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (15, '拱式桥', '', 1, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (16, '钢架桥', '', 1, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (17, '斜拉桥', '', 1, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (18, '悬索桥', '', 1, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (20, '塔吊', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (21, '扬尘', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (22, '高支模', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (23, '深基坑', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (26, '智慧路灯', null, 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (27, '0822结构物类型', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (29, '0822结11构物', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (30, '卸料平台', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (38, 'xxx结构物类型', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (39, '调试', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (40, '爬架', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (41, '小区', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (42, '河流', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (43, '管道管线', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (44, '消防', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (45, '公厕', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (46, '消火栓', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (47, '园区企业', '', 0, '');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (48, '水质监测站', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (49, 'private', '', 0, '');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (53, '升降机', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (54, '河长', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (55, '路长制', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (56, '医护', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (57, '垃圾箱容量', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (58, '定位设备', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (61, 'test', '', 0, 'http://images.theiota.cn/upload/things/1b2d8739-627e-4b7d-9480-3eee6e9396fe/ece71edb-f41a-4001-b3bd-aba84e4f5284/f219b9d986473-image.png');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (63, 'test1', '', 0, 'http://images.theiota.cn/upload/things/1b2d8739-627e-4b7d-9480-3eee6e9396fe/36cef46f-51e3-46c3-9108-fb9a1528bb08/0ef21949cf9c-image.png');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (64, 'test11', '', 0, 'http://images.theiota.cn/upload/things/1b2d8739-627e-4b7d-9480-3eee6e9396fe/d79d9906-2b70-4150-b8c5-560a77632a3c/a0861c6f78fff-image.png');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (65, '烟囱', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (66, 'test3', '', 0, '');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (67, '地灾', '', 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (68, '图片测试', '', 0, 'http://images.theiota.cn/upload/things/1b2d8739-627e-4b7d-9480-3eee6e9396fe/7502ba1e-e9e3-4600-b120-1701bd858422/7fae061d0b6e4-image.png');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (71, '123456', '', 0, 'http://images.theiota.cn/upload/things/1b2d8739-627e-4b7d-9480-3eee6e9396fe/b6e597af-1fec-4888-9970-248a6d43bad5/70a4e00d864d6-image.png');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (74, '是否', '', 0, '');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (83, '渣土运输', null, 0, null);
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (84, '旅游', '', 0, '');
+INSERT INTO public.t_structure_type (id, name, description, parent_type, portrait) VALUES (86, '停车场', null, 0, null);
+
+
+
+
+
+
+
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1, 1, 1);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (2, 1, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (3, 1, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (4, 1, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (5, 1, 5);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (6, 1, 6);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (7, 1, 7);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (8, 1, 8);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (9, 1, 9);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (10, 1, 10);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (11, 1, 11);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (12, 1, 12);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (13, 1, 13);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (14, 1, 14);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (15, 1, 15);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (16, 1, 16);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (17, 1, 17);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (18, 1, 18);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (19, 1, 19);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (20, 1, 20);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (21, 1, 21);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (22, 1, 22);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (23, 1, 23);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (24, 1, 24);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (25, 1, 25);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (26, 1, 26);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (27, 1, 27);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (28, 1, 28);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (37, 2, 37);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (43, 2, 43);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (46, 2, 46);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (49, 2, 49);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (52, 2, 52);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (54, 3, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (55, 3, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (56, 3, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (62, 3, 13);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (64, 3, 24);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (65, 3, 65);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (66, 3, 52);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (67, 4, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (68, 4, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (69, 4, 31);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (70, 4, 70);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (71, 4, 71);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (72, 4, 72);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (73, 4, 58);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (74, 4, 43);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (75, 4, 75);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (76, 4, 76);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (77, 4, 77);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (78, 4, 18);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (79, 4, 79);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (83, 5, 31);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (98, 5, 98);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (99, 5, 13);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (101, 5, 65);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (102, 5, 102);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (103, 5, 103);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (110, 6, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (111, 6, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (112, 6, 112);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (113, 6, 113);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (115, 6, 13);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (116, 6, 116);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (118, 7, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (119, 7, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (122, 7, 31);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (127, 7, 127);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (128, 7, 18);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (130, 7, 26);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (149, 10, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (150, 10, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (151, 10, 151);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (152, 10, 152);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (153, 10, 153);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (154, 10, 137);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (155, 10, 155);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (156, 10, 156);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (157, 10, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (158, 10, 158);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (159, 10, 159);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (160, 10, 160);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (161, 10, 161);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (170, 10, 170);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (171, 10, 171);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (204, 3, 18);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (208, 10, 11);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (212, 12, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (213, 12, 65);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (214, 12, 11);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (215, 12, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (219, 1, 156);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (221, 10, 215);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (222, 10, 216);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (223, 10, 217);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (224, 10, 218);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (225, 10, 219);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (226, 10, 220);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (231, 1, 206);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (234, 1, 228);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (242, 1, 65);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (252, 10, 242);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (253, 10, 243);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (271, 14, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (272, 14, 7);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (273, 14, 15);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (274, 14, 28);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (275, 15, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (276, 15, 7);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (277, 15, 15);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (278, 15, 28);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (279, 16, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (280, 16, 7);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (281, 16, 15);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (282, 16, 28);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (283, 17, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (284, 17, 7);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (285, 17, 15);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (286, 17, 28);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (287, 18, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (288, 18, 7);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (289, 18, 15);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (290, 18, 28);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (291, 22, 250);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (292, 21, 256);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (293, 20, 237);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (294, 20, 251);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (298, 22, 255);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (299, 22, 254);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (300, 22, 253);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (301, 23, 52);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (302, 21, 252);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (303, 16, 258);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (304, 2, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (305, 2, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (306, 2, 31);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (307, 2, 5);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (308, 2, 33);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (311, 2, 36);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (320, 2, 48);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (321, 2, 50);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (323, 2, 26);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (326, 2, 205);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (327, 2, 222);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (334, 1, 260);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (338, 1, 242);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (340, 10, 264);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (341, 20, 19);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (342, 20, 65);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (343, 2, 265);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (354, 1, 266);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (355, 1, 264);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (357, 1, 267);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (366, 30, 307);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (367, 6, 308);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (368, 45, 309);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (369, 6, 249);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (371, 30, 226);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (373, 58, 311);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (388, 58, 24);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (389, 40, 316);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (390, 40, 253);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (391, 40, 255);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (392, 40, 254);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (398, 41, 280);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (399, 4, 318);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (400, 2, 319);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (402, 41, 252);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (404, 41, 276);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (405, 41, 275);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (408, 41, 320);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (409, 4, 321);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (411, 38, 323);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (412, 1, 324);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (413, 41, 322);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (414, 41, 324);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (415, 41, 325);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (417, 42, 327);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (418, 43, 328);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (419, 43, 329);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (420, 43, 330);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (421, 44, 331);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (426, 44, 334);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (428, 46, 335);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (429, 46, 333);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (430, 46, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (431, 46, 1);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (432, 1, 336);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (433, 44, 337);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (434, 44, 322);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (436, 44, 338);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (444, 47, 84);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (445, 47, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (446, 47, 170);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (447, 47, 340);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (449, 1, 342);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (450, 42, 343);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (451, 48, 280);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (452, 42, 344);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (453, 47, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (454, 1, 347);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (455, 1, 348);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (457, 10, 348);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (458, 26, 320);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (459, 2, 349);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (470, 2, 351);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (472, 5, 352);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (478, 39, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (479, 39, 354);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (480, 11, 162);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (481, 11, 163);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (482, 11, 164);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (483, 11, 165);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (484, 11, 166);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (485, 11, 167);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (486, 11, 168);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (487, 11, 174);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (488, 11, 211);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (489, 11, 214);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (490, 11, 226);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (491, 11, 159);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (492, 4, 355);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (493, 46, 356);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (494, 1, 357);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (651, 45, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (652, 45, 275);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (653, 45, 276);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (654, 45, 277);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (655, 45, 278);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (656, 3, 31);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (657, 3, 58);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (658, 3, 33);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (659, 3, 60);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (660, 3, 61);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (661, 3, 63);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (662, 3, 156);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (663, 3, 151);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (664, 3, 206);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (665, 3, 35);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (666, 3, 36);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (667, 3, 241);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (668, 45, 279);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (679, 10, 280);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (688, 2, 40);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (695, 2, 65);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (706, 29, 1);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (707, 29, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (708, 29, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (709, 29, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (710, 29, 5);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (711, 29, 6);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (712, 29, 7);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (713, 29, 8);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (714, 29, 9);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (715, 29, 10);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (716, 29, 11);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (717, 29, 13);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (718, 29, 14);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (719, 29, 15);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (720, 29, 16);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (721, 29, 17);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (722, 29, 18);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (723, 29, 19);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (724, 29, 20);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (725, 29, 21);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (726, 29, 22);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (727, 29, 23);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (728, 29, 24);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (729, 29, 25);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (730, 29, 26);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (731, 29, 27);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (732, 29, 28);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (733, 29, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (734, 29, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (735, 29, 31);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (736, 29, 5);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (737, 29, 33);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (738, 29, 36);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (739, 29, 37);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (740, 29, 38);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (741, 29, 39);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (742, 29, 40);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (743, 29, 41);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (744, 29, 42);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (745, 29, 43);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (746, 29, 44);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (747, 29, 45);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (748, 29, 46);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (749, 29, 47);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (750, 29, 48);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (751, 29, 49);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (752, 29, 50);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (753, 29, 51);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (754, 29, 52);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (755, 29, 26);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (756, 29, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (757, 29, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (758, 29, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (759, 29, 31);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (760, 29, 58);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (761, 29, 33);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (762, 29, 60);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (763, 29, 61);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (764, 29, 13);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (765, 29, 63);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (766, 29, 24);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (767, 29, 65);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (768, 29, 52);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (769, 29, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (770, 29, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (771, 29, 31);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (772, 29, 70);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (773, 29, 71);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (774, 29, 72);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (775, 29, 58);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (776, 29, 43);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (777, 29, 75);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (778, 29, 76);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (779, 29, 77);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (780, 29, 18);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (781, 29, 79);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (782, 29, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (783, 29, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (784, 29, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (785, 29, 31);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (786, 29, 84);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (787, 29, 85);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (788, 29, 86);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (789, 29, 88);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (790, 29, 89);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (791, 29, 90);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (792, 29, 91);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (793, 29, 92);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (794, 29, 93);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (795, 29, 94);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (796, 29, 95);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (797, 29, 96);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (798, 29, 97);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (799, 29, 98);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (800, 29, 13);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (801, 29, 18);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (802, 29, 65);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (803, 29, 102);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (804, 29, 103);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (805, 29, 104);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (806, 29, 105);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (807, 29, 106);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (808, 29, 107);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (809, 29, 108);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (810, 29, 109);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (811, 29, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (812, 29, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (813, 29, 112);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (814, 29, 113);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (815, 29, 114);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (816, 29, 13);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (817, 29, 116);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (818, 29, 117);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (819, 29, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (820, 29, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (821, 29, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (822, 29, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (823, 29, 31);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (824, 29, 5);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (825, 29, 11);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (826, 29, 13);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (827, 29, 65);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (828, 29, 127);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (829, 29, 18);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (830, 29, 129);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (831, 29, 26);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (832, 29, 131);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (833, 29, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (834, 29, 133);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (835, 29, 134);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (836, 29, 135);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (837, 29, 5);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (838, 29, 137);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (839, 29, 138);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (840, 29, 12);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (841, 29, 35);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (842, 29, 139);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (843, 29, 140);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (844, 29, 11);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (845, 29, 142);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (846, 29, 143);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (847, 29, 26);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (848, 29, 145);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (849, 29, 146);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (850, 29, 147);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (851, 29, 148);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (852, 29, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (853, 29, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (854, 29, 151);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (855, 29, 152);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (856, 29, 153);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (857, 29, 137);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (858, 29, 155);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (859, 29, 156);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (860, 29, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (861, 29, 158);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (862, 29, 159);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (863, 29, 160);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (864, 29, 161);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (865, 29, 162);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (866, 29, 163);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (867, 29, 164);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (868, 29, 165);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (869, 29, 166);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (870, 29, 167);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (871, 29, 168);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (872, 29, 169);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (873, 29, 170);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (874, 29, 171);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (875, 29, 34);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (876, 29, 173);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (877, 29, 174);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (878, 29, 5);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (879, 29, 156);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (880, 29, 166);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (881, 29, 18);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (882, 29, 156);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (883, 29, 151);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (884, 29, 11);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (885, 29, 65);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (886, 29, 205);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (887, 29, 206);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (888, 29, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (889, 29, 65);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (890, 29, 11);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (891, 29, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (892, 29, 34);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (893, 29, 34);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (894, 29, 211);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (895, 29, 36);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (896, 29, 214);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (897, 29, 215);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (898, 29, 216);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (899, 29, 217);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (900, 29, 218);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (901, 29, 219);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (902, 29, 220);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (903, 29, 222);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (904, 29, 223);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (905, 29, 223);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (906, 29, 206);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (907, 29, 226);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (908, 29, 227);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (909, 29, 228);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (910, 29, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (911, 29, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (912, 29, 231);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (913, 29, 232);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (914, 29, 167);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (915, 29, 234);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (916, 29, 226);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (917, 29, 65);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (918, 29, 237);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (919, 29, 238);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (920, 29, 239);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (921, 29, 24);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (922, 29, 35);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (923, 29, 241);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (924, 29, 242);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (925, 29, 243);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (926, 29, 251);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (927, 29, 252);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (928, 29, 253);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (929, 29, 254);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (930, 29, 255);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (931, 29, 280);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (932, 29, 281);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (933, 29, 262);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (934, 29, 263);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (935, 29, 264);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (936, 29, 275);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (937, 29, 276);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (938, 29, 277);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (939, 29, 278);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (940, 29, 279);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (947, 27, 1);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (948, 27, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (949, 27, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (950, 27, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (953, 20, 284);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (954, 53, 285);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (955, 53, 284);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (956, 1, 281);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (959, 54, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (960, 54, 252);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (961, 54, 280);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (962, 54, 31);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (963, 55, 252);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (964, 26, 286);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (965, 3, 116);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (966, 21, 275);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (967, 21, 276);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (968, 3, 287);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (969, 2, 288);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (970, 1, 289);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (971, 1, 290);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (972, 1, 291);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (973, 1, 292);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (974, 1, 293);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (975, 1, 294);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (976, 1, 295);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (977, 56, 295);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (978, 56, 294);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (979, 56, 292);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (980, 56, 293);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (981, 56, 291);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (982, 56, 290);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (983, 56, 289);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (986, 2, 296);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (987, 2, 297);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (988, 2, 34);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (989, 2, 35);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (992, 2, 42);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (993, 2, 44);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (994, 2, 45);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (995, 2, 47);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (996, 2, 127);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (999, 2, 241);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1000, 2, 262);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1003, 2, 13);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1004, 1, 298);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1005, 57, 298);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1006, 2, 299);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1007, 2, 300);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1009, 10, 302);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1010, 10, 303);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1011, 1, 304);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1012, 1, 305);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1013, 45, 306);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1218, 49, 1);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1257, 65, 359);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1258, 5, 360);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1317, 5, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1318, 5, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1320, 5, 5);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1323, 5, 153);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1324, 5, 156);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1326, 5, 89);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1335, 5, 92);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1339, 5, 50);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1344, 5, 109);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1347, 7, 129);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1348, 7, 173);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1349, 7, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1350, 7, 5);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1351, 7, 34);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1352, 7, 11);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1353, 7, 65);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1354, 7, 13);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1355, 7, 237);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1356, 7, 140);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1357, 7, 156);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1358, 7, 21);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1359, 7, 263);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1360, 7, 223);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1361, 7, 24);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1362, 7, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1363, 7, 301);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1364, 7, 322);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1365, 7, 339);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1366, 5, 362);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1367, 5, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1368, 5, 166);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1369, 5, 84);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1370, 5, 34);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1371, 5, 88);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1372, 5, 86);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1373, 5, 85);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1374, 5, 97);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1375, 5, 96);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1376, 5, 95);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1377, 5, 94);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1378, 5, 93);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1379, 5, 91);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1380, 5, 90);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1381, 5, 107);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1382, 5, 106);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1383, 5, 105);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1384, 5, 104);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1385, 5, 18);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1386, 5, 108);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1387, 1, 52);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1391, 14, 364);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1392, 1, 363);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1394, 67, 1);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1395, 67, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1396, 67, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1397, 67, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1398, 67, 5);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1399, 67, 6);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1400, 67, 7);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1401, 67, 8);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1402, 67, 9);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1403, 67, 10);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1404, 67, 11);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1405, 67, 13);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1406, 67, 14);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1407, 67, 15);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1408, 67, 16);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1409, 67, 17);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1410, 67, 18);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1411, 67, 19);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1412, 67, 20);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1413, 67, 21);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1414, 67, 22);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1415, 67, 23);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1416, 67, 24);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1417, 67, 25);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1418, 67, 26);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1419, 67, 27);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1420, 67, 28);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1421, 67, 286);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1422, 67, 288);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1423, 67, 31);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1424, 67, 289);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1425, 67, 33);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1426, 67, 36);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1427, 67, 37);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1428, 67, 38);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1429, 67, 39);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1430, 67, 40);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1431, 67, 41);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1432, 67, 42);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1433, 67, 43);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1434, 67, 44);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1435, 67, 45);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1436, 67, 46);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1437, 67, 47);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1438, 67, 48);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1439, 67, 49);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1440, 67, 50);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1441, 67, 51);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1442, 67, 52);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1443, 67, 290);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1444, 67, 291);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1445, 67, 292);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1446, 67, 293);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1447, 67, 294);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1448, 67, 58);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1449, 67, 295);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1450, 67, 60);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1451, 67, 61);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1452, 67, 63);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1453, 67, 65);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1454, 67, 70);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1455, 67, 71);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1456, 67, 72);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1457, 67, 75);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1458, 67, 76);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1459, 67, 77);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1460, 67, 79);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1461, 67, 84);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1462, 67, 85);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1463, 67, 86);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1464, 67, 88);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1465, 67, 89);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1466, 67, 90);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1467, 67, 91);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1468, 67, 92);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1469, 67, 93);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1470, 67, 94);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1471, 67, 95);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1472, 67, 96);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1473, 67, 97);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1474, 67, 98);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1475, 67, 102);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1476, 67, 103);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1477, 67, 104);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1478, 67, 105);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1479, 67, 106);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1480, 67, 107);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1481, 67, 108);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1482, 67, 109);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1483, 67, 112);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1484, 67, 113);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1485, 67, 114);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1486, 67, 116);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1487, 67, 117);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1488, 67, 127);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1489, 67, 129);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1490, 67, 131);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1491, 67, 133);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1492, 67, 134);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1493, 67, 135);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1494, 67, 137);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1495, 67, 138);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1496, 67, 12);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1497, 67, 35);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1498, 67, 139);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1499, 67, 140);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1500, 67, 287);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1501, 67, 142);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1502, 67, 143);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1503, 67, 145);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1504, 67, 146);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1505, 67, 147);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1506, 67, 148);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1507, 67, 151);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1508, 67, 152);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1509, 67, 153);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1510, 67, 155);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1511, 67, 156);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1512, 67, 158);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1513, 67, 159);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1514, 67, 160);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1515, 67, 161);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1516, 67, 162);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1517, 67, 163);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1518, 67, 164);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1519, 67, 165);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1520, 67, 166);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1521, 67, 167);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1522, 67, 168);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1523, 67, 169);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1524, 67, 170);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1525, 67, 171);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1526, 67, 173);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1527, 67, 174);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1528, 67, 205);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1529, 67, 206);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1530, 67, 211);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1531, 67, 214);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1532, 67, 215);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1533, 67, 216);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1534, 67, 217);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1535, 67, 218);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1536, 67, 219);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1537, 67, 220);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1538, 67, 222);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1539, 67, 223);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1540, 67, 226);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1541, 67, 227);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1542, 67, 228);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1543, 67, 231);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1544, 67, 232);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1545, 67, 237);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1546, 67, 238);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1547, 67, 239);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1548, 67, 241);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1549, 67, 242);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1550, 67, 243);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1551, 67, 251);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1552, 67, 252);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1553, 67, 253);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1554, 67, 254);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1555, 67, 255);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1556, 67, 280);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1557, 67, 281);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1558, 67, 262);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1559, 67, 263);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1560, 67, 264);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1561, 67, 275);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1562, 67, 276);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1563, 67, 277);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1564, 67, 278);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1565, 67, 279);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1566, 67, 284);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1567, 67, 234);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1568, 67, 34);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1569, 67, 298);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1570, 67, 301);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1571, 67, 302);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1572, 67, 303);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1573, 67, 304);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1574, 67, 305);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1575, 67, 306);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1576, 67, 309);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1577, 67, 311);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1578, 67, 319);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1579, 67, 320);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1580, 67, 322);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1581, 67, 323);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1582, 67, 324);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1583, 67, 333);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1584, 67, 334);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1585, 67, 339);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1586, 67, 342);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1587, 67, 347);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1588, 67, 348);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1589, 67, 355);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1590, 67, 358);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1591, 67, 359);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1592, 67, 363);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1602, 2, 39);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1603, 2, 41);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1604, 2, 223);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1605, 2, 239);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1606, 2, 38);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1607, 2, 51);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1608, 2, 102);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1609, 1, 366);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1610, 6, 114);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1611, 6, 117);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1612, 6, 238);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1613, 8, 131);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1614, 8, 227);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1615, 8, 234);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1616, 8, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1617, 8, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1674, 9, 133);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1675, 9, 134);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1676, 9, 135);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1677, 9, 137);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1678, 9, 138);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1679, 9, 139);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1680, 9, 140);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1681, 9, 142);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1682, 9, 143);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1683, 9, 145);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1684, 9, 146);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1685, 9, 147);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1686, 9, 148);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1687, 9, 169);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1688, 9, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1689, 9, 5);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1690, 9, 11);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1691, 9, 26);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1692, 9, 226);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1693, 9, 231);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1694, 9, 232);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1695, 9, 167);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1716, 66, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1717, 63, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1718, 63, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1722, 64, 1);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1723, 64, 5);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1724, 64, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1725, 68, 1);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1726, 7, 367);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1746, 71, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1747, 71, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1748, 71, 4);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1750, 61, 1);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1751, 61, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1752, 61, 3);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1755, 5, 369);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1756, 5, 370);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1758, 5, 372);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1759, 5, 373);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1760, 5, 374);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1761, 1, 375);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1762, 1, 377);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1763, 1, 378);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1771, 74, 2);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1772, 1, 380);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1773, 2, 380);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1775, 7, 380);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1776, 48, 385);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1785, 83, 394);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1786, 1, 395);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1787, 45, 396);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1789, 43, 397);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1790, 47, 275);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1791, 47, 397);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1792, 53, 398);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1793, 30, 399);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1794, 53, 400);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1795, 47, 401);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1796, 47, 402);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1800, 84, 264);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1801, 84, 277);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1802, 84, 309);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1804, 86, 404);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1805, 84, 404);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1810, 3, 7);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1811, 3, 348);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1812, 3, 358);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1813, 3, 380);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1814, 3, 5);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1815, 2, 405);
+INSERT INTO public.t_structure_type_factor (id, structure_type, factor) VALUES (1816, 2, 406);
+
+
+
+
+
+
+
+
+INSERT INTO public.t_type_alarm_source (id, name, description) VALUES (0, 'DTU', null);
+INSERT INTO public.t_type_alarm_source (id, name, description) VALUES (1, '传感器', null);
+INSERT INTO public.t_type_alarm_source (id, name, description) VALUES (2, '测点', null);
+
+
+
+
+INSERT INTO public.t_type_alarm_state (id, name, description) VALUES (0, '未恢复', null);
+INSERT INTO public.t_type_alarm_state (id, name, description) VALUES (1, '人工恢复', null);
+INSERT INTO public.t_type_alarm_state (id, name, description) VALUES (2, '自动回复', null);
+
+
+
+
+
+INSERT INTO public.t_type_event_index (id, name, description) VALUES (1, '暴雨预警', null);
+INSERT INTO public.t_type_event_index (id, name, description) VALUES (2, '平台数据类告警', null);
+INSERT INTO public.t_type_event_index (id, name, description) VALUES (3, '近十日降雨量', null);
+INSERT INTO public.t_type_event_index (id, name, description) VALUES (4, '地震发生情况', null);
+INSERT INTO public.t_type_event_index (id, name, description) VALUES (5, '地灾发生情况', null);
+
+
+
+
+INSERT INTO public.t_type_file_type (id, name) VALUES (1, '应用文件');
+INSERT INTO public.t_type_file_type (id, name) VALUES (2, '报表文件');
+INSERT INTO public.t_type_file_type (id, name) VALUES (3, '数据文件');
+INSERT INTO public.t_type_file_type (id, name) VALUES (4, '审核报告');
+
+
+
+
+INSERT INTO public.t_type_institution_role (id, name, description) VALUES (1, '住建局', '');
+INSERT INTO public.t_type_institution_role (id, name, description) VALUES (2, '监理单位', '');
+INSERT INTO public.t_type_institution_role (id, name, description) VALUES (3, '施工单位', '');
+INSERT INTO public.t_type_institution_role (id, name, description) VALUES (4, '建设单位', '');
+
+
+
+
+INSERT INTO public.t_type_org_type (id, name, description) VALUES (1001, 'Agent', '集成商');
+INSERT INTO public.t_type_org_type (id, name, description) VALUES (1002, 'Owner', '业主');
+INSERT INTO public.t_type_org_type (id, name, description) VALUES (1003, 'Assess', '评估商');
+INSERT INTO public.t_type_org_type (id, name, description) VALUES (1004, 'Operator', '运营商');
+
+
+
+
+
+
+
+
+INSERT INTO public.t_type_post (id, name, allow_set_num, code) VALUES (1, '部门主管', 1, 'leader');
+INSERT INTO public.t_type_post (id, name, allow_set_num, code) VALUES (2, '一般成员', 0, 'general');
+
+
+
+
+INSERT INTO public.t_type_project_state (id, name, description) VALUES (-1, '已删除', '项目已删除');
+INSERT INTO public.t_type_project_state (id, name, description) VALUES (0, '待发审', '等待发起审核');
+INSERT INTO public.t_type_project_state (id, name, description) VALUES (1, '待审核', '审核处理中');
+INSERT INTO public.t_type_project_state (id, name, description) VALUES (2, '待修改', '审核未通过,等待修改');
+INSERT INTO public.t_type_project_state (id, name, description) VALUES (3, '审核通过', '项目已审核通过');
+INSERT INTO public.t_type_project_state (id, name, description) VALUES (4, '已发布', '项目已发布');
+
+
+
+INSERT INTO public.t_type_report_state (id, name, description) VALUES (0, '未确认', null);
+INSERT INTO public.t_type_report_state (id, name, description) VALUES (1, '已确认', null);
+
+
+
+
+INSERT INTO public.t_type_report_type (id, name, description) VALUES (0, '日报', null);
+INSERT INTO public.t_type_report_type (id, name, description) VALUES (1, '周报', null);
+INSERT INTO public.t_type_report_type (id, name, description) VALUES (2, '月报', null);
+INSERT INTO public.t_type_report_type (id, name, description) VALUES (3, '年报', null);
+
+
+
+
+INSERT INTO public.t_type_role_type (code, description) VALUES ('A', '注册机构的所有者');
+INSERT INTO public.t_type_role_type (code, description) VALUES ('B', '运营机构的管理员');
+INSERT INTO public.t_type_role_type (code, description) VALUES ('C', '项目机构的管理员');
+INSERT INTO public.t_type_role_type (code, description) VALUES ('CC', '非管理员子角色');
+
+
+
+
+INSERT INTO public.t_unit (id, name) VALUES (1, '个');
+INSERT INTO public.t_unit (id, name) VALUES (2, '吨');
+INSERT INTO public.t_unit (id, name) VALUES (3, '度');
+INSERT INTO public.t_unit (id, name) VALUES (4, '把');
+INSERT INTO public.t_unit (id, name) VALUES (5, '瓶');
+INSERT INTO public.t_unit (id, name) VALUES (6, '卷');
+INSERT INTO public.t_unit (id, name) VALUES (7, '条');
+
+
+
+
+
+INSERT INTO public.t_upload_params (id, name, params, description) VALUES (1, 'qingdao_kancha', '[{"http": {"url": "http://119.3.182.231:8080/zdhjc/plugin/zdhjc/submitEvent.htm", "name": "青岛勘察院数据上报", "resp": {"code": 0}, "method": "N/A", "globals": {"name": "青岛国际院士研究院南延项目东地块基坑自动化监测"}, "contents": [{"body": "<${label.name}>预应力锚杆轴力监测${sensor.name}${data[0]}${label.name}>", "filter": {"proto": "2004"}}, {"body": "<${label.name}>地下水位监测${sensor.name}${data[0]}${label.name}>", "filter": {"proto": "1005"}}]}, "name": "青岛勘察院数据上报", "filter": {"things": ["6fc7d7b5-9863-4c29-aa36-9435a1140dc9"]}}, {"http": {"url": "http://47.105.89.156:8090/zdhjc/plugin/zdhjc/submitEvent.htm", "name": "青岛勘察院数据上报2", "resp": {"code": 0}, "method": "N/A", "globals": {"name": "青岛国际院士研究院南延项目东地块基坑自动化监测"}, "contents": [{"body": "<${label.name}>预应力锚杆轴力监测${sensor.name}${data[0]}${label.name}>", "filter": {"proto": "2004"}}, {"body": "<${label.name}>地下水位监测${sensor.name}${data[0]}${label.name}>", "filter": {"proto": "1005"}}]}, "name": "青岛勘察院数据上报2", "custom": {"6525093b-9632-4bdf-93fe-6d5cad92b720": "青岛国际院士港新材料版块基坑自动化监测工程", "aafc9476-75af-4bf8-88f6-724d06cbd42a": "青岛国际院士港研究院习水路项目基坑监测工程", "e0a3b518-140d-4a93-a4e7-44d9b0999133": "和达·秦岭路17号项目基坑监测"}, "filter": {"things": ["aafc9476-75af-4bf8-88f6-724d06cbd42a", "6525093b-9632-4bdf-93fe-6d5cad92b720", "e0a3b518-140d-4a93-a4e7-44d9b0999133"]}}]', '青岛勘察院数据上报');
+INSERT INTO public.t_upload_params (id, name, params, description) VALUES (3, 'mawan', '[{"http": {"url": "http://139.9.195.74:8877/api", "app_key": "GX", "app_secret": "2ec4635a87914c1092ed44fa6f6796"}, "name": "妈湾", "protos": {"4001": {"name": "沉降", "graph": 1, "fields": {"x": {"init": ["DAQ0"], "field": "displacement"}}}, "4007": {"name": "倾斜", "graph": 2, "fields": {"x": {"init": ["x0"], "field": "x"}, "y": {"init": ["y0"], "field": "y"}}}, "4008": {"name": "裂缝", "graph": 1, "fields": {"x": {"init": ["DAQ0"], "field": "crack"}}}}, "things": {"23633132-0481-4f93-8a43-84e6bfb60350": {"name": "大铲湾边检楼", "externAreaId": "547b7abd-294a-4145-8dc3-530250bb3d97", "externAreaSubId": "e068c150-9d33-4575-8078-86dad55cb330"}, "ea65c3a6-9be2-4308-b129-0e527a56ee64": {"name": "大铲湾码头大楼", "externAreaId": "547b7abd-294a-4145-8dc3-530250bb3d97", "externAreaSubId": "e068c150-9d33-4575-8078-86dad55cb330"}, "fc8550a4-b239-4214-beb5-81e13eb87369": {"name": "大铲湾工程楼", "externAreaId": "547b7abd-294a-4145-8dc3-530250bb3d97", "externAreaSubId": "5b651041-c489-4c20-b471-333792496ce1"}}}]', '妈湾数据上报');
+INSERT INTO public.t_upload_params (id, name, params, description) VALUES (4, 'huhanggaotie', '[{"pwd": "0e4f3bba5811d2a3556f6f22549645f1", "url": "https://monitor.051mos.com/WebService/TransOtherDeviceData.asmx", "data": [{"coef": 0.001, "group": "NH92-212", "proto": "4001", "deviceCode": "4", "lineFormat": "${sensor.name},${time:yyyy-MM-dd HH:mm:ss},${data[0]},0,0"}], "desc": "德清跨宁杭特大桥92#-212# - 宁杭高铁NH92-212_215060-219001", "user": "dqknh92-212", "cache": {"newTimeTrigger": false, "timeoutMinutes": 15, "tolerantMinutes": 10}, "enable": true, "emailUrl": [{"name": "rui.li", "email": "rui.li@masios.com"}, {"name": "sales", "email": "sales@masios.com"}, {"name": "wangming.wan", "email": "wangming.wan@masios.com"}, {"name": "haihui.luo", "email": "haihui.luo@masios.com"}, {"name": "hong.zhang", "email": "hong.zhang@masios.com"}], "structId": 3937}, {"pwd": "0e4f3bba5811d2a3556f6f22549645f1", "url": "https://monitor.051mos.com/WebService/TransOtherDeviceData.asmx", "data": [{"coef": 0.001, "group": "1-102", "proto": "4001", "deviceCode": "4", "lineFormat": "${sensor.name},${time:yyyy-MM-dd HH:mm:ss},${data[0]},0,0"}], "desc": "京杭运河特大桥0#-102# - 宁杭高铁JH1-102_220331-223535", "user": "jhyh0-102", "cache": {"newTimeTrigger": false, "timeoutMinutes": 15, "tolerantMinutes": 10}, "enable": true, "emailUrl": [{"name": "rui.li", "email": "rui.li@masios.com"}, {"name": "sales", "email": "sales@masios.com"}, {"name": "wangming.wan", "email": "wangming.wan@masios.com"}, {"name": "haihui.luo", "email": "haihui.luo@masios.com"}, {"name": "hong.zhang", "email": "hong.zhang@masios.com"}], "structId": 3084}, {"pwd": "0e4f3bba5811d2a3556f6f22549645f1", "url": "https://monitor.051mos.com/WebService/TransOtherDeviceData.asmx", "data": [{"coef": 0.001, "group": "103-192", "proto": "4001", "deviceCode": "4", "lineFormat": "${sensor.name},${time:yyyy-MM-dd HH:mm:ss},${data[0]},0,0"}], "desc": "京杭运河特大桥103#-192# - 宁杭高铁JH103-192_223782-226547", "user": "jhyh103-192", "cache": {"newTimeTrigger": false, "timeoutMinutes": 15, "tolerantMinutes": 10}, "enable": true, "emailUrl": [{"name": "rui.li", "email": "rui.li@masios.com"}, {"name": "sales", "email": "sales@masios.com"}, {"name": "wangming.wan", "email": "wangming.wan@masios.com"}, {"name": "haihui.luo", "email": "haihui.luo@masios.com"}, {"name": "hong.zhang", "email": "hong.zhang@masios.com"}], "structId": 3911}, {"pwd": "TJjscs@123", "url": "http://montrans.tjcehui.cn/WebService/TransOtherDeviceData.asmx", "data": [{"coef": 0.001, "group": "JS01", "proto": "4001", "deviceCode": "4", "lineFormat": "${sensor.name},${time:yyyy-MM-dd HH:mm:ss},${data[0]},0,0"}], "desc": "郑太线沉降监测", "user": "tjjscs", "cache": {"newTimeTrigger": false, "timeoutMinutes": 15, "tolerantMinutes": 10}, "enable": true, "emailUrl": [{"name": "rui.li", "email": "rui.li@masios.com"}, {"name": "sales", "email": "sales@masios.com"}, {"name": "wangming.wan", "email": "wangming.wan@masios.com"}, {"name": "haihui.luo", "email": "haihui.luo@masios.com"}, {"name": "hong.zhang", "email": "hong.zhang@masios.com"}], "structId": 4820}]', '湖杭高铁数据上报');
+INSERT INTO public.t_upload_params (id, name, params, description) VALUES (5, 'dianbiao', '{"url": "http://101.132.154.10:8891/DistributionBox/InsertDistributionBox", "structIds": [892]}', '电表数据上报');
+
+
+
+
+INSERT INTO public.t_project (name, logo, theme, url, marked, create_time, update_time, project_state, describe, type, extra, event_state) VALUES ('吉林省桥梁健康监测与综合管理平台', null, null, 'default', null, '2021-09-16 10:59:52.041000', '2021-09-16 10:59:55.614000', 4, '', 0, null, false);
+
+
+INSERT INTO public.t_organization (org_type, name, domain, state, aptitude_file, register_code, logo, scale, region, app_key, app_secret) VALUES (1002, '吉林省桥梁健康监测与综合管理平台', 'anxinyun', 1, null, '9e370b8f-4c3e-4032-a366-4acb146711bc', 'image/6eaec9cb-9d75-4a63-bb28-5f6f7e2aacd8/image.png', '21-50人', '649,705,708', '654e52caf15361dd09419addd42edcc40e7f9870', '4c5a064360b9ba35fe59440efab3b1c720c34c9a');
+
+
+INSERT INTO public.t_department (org, name, parent_id, sort_index) SELECT currval('t_organization_id_seq'), '默认', null, 0;
+
+
+
+
+INSERT INTO public.t_organization_project (org, project) SELECT currval('t_organization_id_seq'), currval('t_project_id_seq');
+
+
+INSERT INTO public.t_role_group (name, org) SELECT '默认', currval('t_organization_id_seq');
+
+
+
+INSERT INTO public.t_role (name, portal, description, group_id) SELECT '所有者', 'A', null, currval('t_role_group_id_seq');
+
+
+INSERT INTO public.t_user (name, name_present, password, phone, email, avator, org, register_time, mail_notice, sms_notice, no_disturb, enabled, open_id, nick_name, wx_notice, union_id, institution_role, dep, post, sort_index) SELECT 'SuperAdmin', '超级管理员', 'e10adc3949ba59abbe56e057f20f883e', '13775545292', null, '1.png', currval('t_organization_id_seq'), '2021-09-16 15:05:34.661000', false, false, false, true, null, null, false, null, null, currval('t_department_id_seq'), 1, null;
+
+
+
+INSERT INTO public.t_user_role (user_id, role_id) SELECT currval('t_user_id_seq'), currval('t_role_id_seq');
+
+
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('001', '告警推送管理', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('001001', '新增告警推送策略', null, null, '001');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('001002', '修改告警推送策略', null, null, '001');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('001003', '删除告警推送策略', null, null, '001');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('002', '结构物管理', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('002001', '新增结构物', null, null, '002');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('002002', '修改结构物信息', null, null, '002');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('002003', '删除结构物', null, null, '002');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('003', '设备组网', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('003001', '编辑设备组网', null, null, '003');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('004', '2D布设', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('004001', '添加布设图', null, null, '004');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('004002', '修改布设图', null, null, '004');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('004003', '删除布设图', null, null, '004');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('004004', '测点布设', null, null, '004');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('005', '监测模型管理', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('005001', '新增结构物类型', null, null, '005');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('005002', '修改结构物类型', null, null, '005');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('005003', '删除结构物类型', null, null, '005');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('005004', '新增监测因素', null, null, '005');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('005005', '修改监测因素', null, null, '005');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('005006', '删除监测因素', null, null, '005');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('005007', '新增监测模板', null, null, '005');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('005008', '修改监测模板', null, null, '005');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('005009', '删除监测模板', null, null, '005');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('006', '测点管理', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('006001', '新增测点', null, null, '006');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('006002', '修改测点信息', null, null, '006');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('006003', '删除测点', null, null, '006');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('007', '3D布设', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('007001', '更新模型', null, null, '007');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('007002', '测点布设', null, null, '007');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('007003', '截面配置', null, null, '007');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('007004', '添加模型', null, null, '007');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('008', '组合计算配置', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('008001', '新增分组', null, null, '008');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('008002', '修改分组', null, null, '008');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('008003', '删除分组', null, null, '008');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('009', '报表生成配置', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('009001', '新增生成规则', null, null, '009');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('009002', '修改生成规则', null, null, '009');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('009003', '删除生成规则', null, null, '009');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('009004', '立即生成报表', null, null, '009');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('010', '项目管理', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('010001', '新建项目', null, null, '010');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('010002', '修改项目', null, null, '010');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('010003', '修改项目管理员', null, null, '010');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('010004', '删除项目', null, null, '010');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('010005', '发起审核', null, null, '010');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('010006', '项目审核', null, null, '010');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('010007', '项目发布', null, null, '010');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('010008', '查看已发布', null, null, '010');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('011', '文档管理', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('011001', '上传文件', null, null, '011');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('011002', '删除文件', null, null, '011');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('011003', '下载', null, null, '011');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('012', '事记', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('012001', '新增事记', null, null, '012');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('012002', '修改事记', null, null, '012');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('012003', '删除事记', null, null, '012');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('013001', '新增部门', null, null, '013');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('013002', '修改部门', null, null, '013');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('013003', '删除部门', null, null, '013');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('014', '企业管理', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('014001', '修改企业信息', null, null, '014');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('014002', '修改企业logo', null, null, '014');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('014003', '删除企业', null, null, '014');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('014004', '转让企业', null, null, '014');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('015', '告警管理', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('015001', '人工确认告警恢复', null, null, '015');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('015002', '查看设备类告警', null, null, '015');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('015003', '查看数据类告警', null, null, '015');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('016', '阈值配置', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('016001', '新增阈值配置', null, null, '016');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('016002', '修改阈值配置', null, null, '016');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('016003', '删除阈值配置', null, null, '016');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('017', '视频管理', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('017001', '新增NVR', null, null, '017');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('017002', '修改NVR', null, null, '017');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('017003', '删除NVR', null, null, '017');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('017004', '新增摄像头', null, null, '017');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('017005', '修改摄像头', null, null, '017');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('017006', '删除摄像头', null, null, '017');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('019', '事件评分指标权重', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('019002', '设置事件评分指标权重', null, null, '019');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('019003', '删除事件评分指标权重', null, null, '019');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('019004', '新增结构物年平均降雨量', null, null, '019');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('020', '聚集配置', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('020002', '添加聚集配置', null, null, '020');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('020003', '修改聚集配置', null, null, '020');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('020004', '删除聚集配置', null, null, '020');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('021', '变化速率阈值配置', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('021001', '添加变化速率阈值配置', null, null, '021');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('021002', '修改变化速率阈值配置', null, null, '021');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('021003', '删除变化速率阈值配置', null, null, '021');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('022', '通信状态', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('022001', '查看通信状态', null, null, '022');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('023', '异常推送配置', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('023001', '异常推送配置', null, null, '023');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('024', '数据计算', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('024001', '数据计算', null, null, '024');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('026', '动态采集', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('026001', '新增动态采集', null, null, '026');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('026002', '编辑动态采集', null, null, '026');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('026003', '删除动态采集', null, null, '026');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('027', 'BIM模型', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('027001', '添加模型', null, null, '027');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('027002', '更新模型', null, null, '027');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('027003', '测点布设', null, null, '027');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('028', '项目公告', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('028001', '新建项目公告', null, null, '028');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('028002', '编辑项目公告', null, null, '028');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('028003', '删除项目公告', null, null, '028');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('029', '单个项目总览', '', null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('029001', '项目简介', '', null, '029');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('029002', '三维展示', null, null, '029');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('029003', 'VR展示', null, null, '029');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('029004', 'BIM展示', null, null, '029');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('013004', '新增角色', null, null, '013');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('013007', '新增用户', null, null, '013');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('013011', '禁用用户', null, null, '013');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('013', '系统管理', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('013010', '启用用户', null, null, '013');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('013009', '删除用户', null, null, '013');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('013006', '删除角色', null, null, '013');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('013012', '修改角色权限', null, null, '013');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('013008', '修改用户', null, null, '013');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('013013', '修改监测范围', null, null, '013');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('013005', '修改角色', null, null, '013');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('030', '桥梁管理', null, null, null);
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('030001', '桥梁信息维护', null, null, '030');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('030002', '添加构件', '', null, '030');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('030003', '编辑构件', null, null, '030');
+INSERT INTO public.t_resource (code, name, description, type, parent_resource) VALUES ('030004', '删除构件', null, null, '030');
+
+
+
+
+
+
+
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '001001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '001002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '001003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '011';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '011001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '011002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '011003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '012';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '012001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '012002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '012003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '013';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '013001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '013002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '013003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '013004';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '013005';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '013006';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '013007';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '013008';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '013009';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '013010';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '013011';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '013012';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '015';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '015001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '015003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '016';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '016001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '016002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '016003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '029';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '029001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '029002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '029003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '029004';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '013013';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '007';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '007001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '007002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '007003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '007004';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '008';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '008001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '008002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '008003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '015002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '017';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '017001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '017002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '017003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '017004';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '017005';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '017006';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '026';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '026001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '026002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '026003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '027';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '027001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '027002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '027003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '030';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '030001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '030002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '030003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '030004';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '002001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '002002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '002003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '003001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '004';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '004001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '004002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '004003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '004004';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '006';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '006001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '006002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '006003';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '021';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '021001';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '021002';
+INSERT INTO public.t_role_resource (role, resource) SELECT currval('t_role_id_seq'), '021003';
+
+
+
+INSERT INTO public.t_bridge_part (id, name) VALUES (1, '上部结构');
+INSERT INTO public.t_bridge_part (id, name) VALUES (2, '下部结构');
+INSERT INTO public.t_bridge_part (id, name) VALUES (3, '桥面系');
+
+
+
+INSERT INTO public.t_bridge_component (id, name, type_id, part_id) VALUES (1, '横向联系', 14, 1);
+INSERT INTO public.t_bridge_component (id, name, type_id, part_id) VALUES (2, '主梁', 14, 1);
+INSERT INTO public.t_bridge_component (id, name, type_id, part_id) VALUES (3, '耳墙(翼墙)', 14, 2);
+INSERT INTO public.t_bridge_component (id, name, type_id, part_id) VALUES (4, '支座', 14, 2);
+INSERT INTO public.t_bridge_component (id, name, type_id, part_id) VALUES (5, '锥坡', 14, 2);
+INSERT INTO public.t_bridge_component (id, name, type_id, part_id) VALUES (6, '台身/墩身', 14, 2);
+INSERT INTO public.t_bridge_component (id, name, type_id, part_id) VALUES (7, '台帽/盖梁', 14, 2);
+INSERT INTO public.t_bridge_component (id, name, type_id, part_id) VALUES (8, '基础', 14, 2);
+INSERT INTO public.t_bridge_component (id, name, type_id, part_id) VALUES (9, '冲刷', 14, 2);
+INSERT INTO public.t_bridge_component (id, name, type_id, part_id) VALUES (10, '人行道', 14, 3);
+INSERT INTO public.t_bridge_component (id, name, type_id, part_id) VALUES (11, '伸缩装置', 14, 3);
+INSERT INTO public.t_bridge_component (id, name, type_id, part_id) VALUES (12, '桥面铺装', 14, 3);
+INSERT INTO public.t_bridge_component (id, name, type_id, part_id) VALUES (13, '桥头平顺', 14, 3);
+INSERT INTO public.t_bridge_component (id, name, type_id, part_id) VALUES (14, '栏杆或护栏', 14, 3);
+INSERT INTO public.t_bridge_component (id, name, type_id, part_id) VALUES (15, '排水系统', 14, 3);
+
+
+IF NOT exists(select * from public.t_constant)
+THEN
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (1, 'maintainCate', 'I', '桥梁养护类别', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (2, 'maintainCate', 'II', '桥梁养护类别', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (3, 'maintainCate', 'III', '桥梁养护类别', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (4, 'maintainCate', 'IV', '桥梁养护类别', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (5, 'maintainCate', 'V', '桥梁养护类别', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (6, 'maintainLevel', 'I', '桥梁养护等级', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (7, 'maintainLevel', 'II', '桥梁养护等级', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (8, 'maintainLevel', 'III', '桥梁养护等级', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (9, 'bridgeState', '正常使用', '桥梁运行状态', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (10, 'bridgeState', '限载通行', '桥梁运行状态', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (11, 'bridgeState', '维修施工', '桥梁运行状态', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (12, 'bridgeState', '路径分类', '桥梁运行状态', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (13, 'bridgeState', '已经拆除', '桥梁运行状态', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (14, 'bridgeState', '交通封闭', '桥梁运行状态', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (15, 'bridgeState', '荷载检测', '桥梁运行状态', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) SELECT 16, 'maintainCompany', '某某养护单位', '桥梁养护单位', currval('t_organization_id_seq');
+INSERT INTO public.t_constant (id, category, name, "desc", org) SELECT 17, 'manageCompany', '某某管理单位', '桥梁管理单位', currval('t_organization_id_seq');
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (18, 'roadLevel', '快速路', '桥梁道路等级', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (19, 'roadLevel', '支路', '桥梁道路等级', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (20, 'roadLevel', '次主干路', '桥梁道路等级', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (21, 'roadLevel', '主干路', '桥梁道路等级', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (22, 'bridgeType', '连续箱梁', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (23, 'bridgeType', '刚构桥', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (24, 'bridgeType', '斜拉索', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (25, 'bridgeType', 'T形刚构桥', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (26, 'bridgeType', '连续刚构桥', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (27, 'bridgeType', '钢箱梁桥', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (28, 'bridgeType', '钢析架桥', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (29, 'bridgeType', '斜腿刚构桥', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (30, 'bridgeType', '薄壁刚构桥', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (31, 'bridgeType', '刚架拱桥', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (32, 'bridgeType', '双曲拱桥', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (33, 'bridgeType', '析架拱桥', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (34, 'bridgeType', '场工拱桥', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (35, 'bridgeType', '连续梁桥', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (36, 'bridgeType', '箱涵', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (37, 'bridgeType', '简支梁桥', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (38, 'bridgeType', '系杆拱桥', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (39, 'bridgeType', '板拱桥', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (40, 'bridgeType', '管涵', '桥梁结构类型', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (41, 'bridgeWeight', '城-A级', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (42, 'bridgeWeight', '城-A级、公路-l级', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (43, 'bridgeWeight', '8t', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (44, 'bridgeWeight', '5KN/平方米', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (45, 'bridgeWeight', '汽-8、拖30', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (46, 'bridgeWeight', '汽-8', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (47, 'bridgeWeight', '城-A级、汽20、挂100级', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (48, 'bridgeWeight', '城-A级、汽15、挂80级', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (49, 'bridgeWeight', '公路l级', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (50, 'bridgeWeight', '城-B级', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (51, 'bridgeWeight', '公路-ll级、3.5KN/平方米', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (52, 'bridgeWeight', '公路ll级', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (53, 'bridgeWeight', '汽-2', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (54, 'bridgeWeight', '汽15、挂80级', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (55, 'bridgeWeight', '汽-6', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (56, 'bridgeWeight', '汽-20', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (57, 'bridgeWeight', '汽20、挂100级', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (58, 'bridgeWeight', '汽10、拖30', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (59, 'bridgeWeight', '汽13、拖60', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (60, 'bridgeWeight', '汽13、挂60', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (61, 'bridgeWeight', '人行桥', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (62, 'bridgeWeight', '0.4KN/m2', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (63, 'bridgeWeight', '3.5KN/m2', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (64, 'bridgeWeight', '4.OKN/m2', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (65, 'bridgeWeight', '5.0KN/m2', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (66, 'bridgeWeight', '15t', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (67, 'bridgeWeight', '10t', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (68, 'bridgeWeight', '汽车荷载:汽-20级,挂-100,人群荷载:4.0kpa', '桥梁设计荷载', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (69, 'bridgeSeismicIntensity', '7度', '桥梁抗震烈度', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (70, 'bridgeSeismicIntensity', '地震动峰值加速度0.05G', '桥梁抗震烈度', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (71, 'bridgeSeismicIntensity', '6度', '桥梁抗震烈度', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (72, 'riverLevel', '一级河道', '桥梁河道等级', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (73, 'riverLevel', '二级河道', '桥梁河道等级', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (74, 'riverLevel', '三级河道', '桥梁河道等级', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (75, 'riverLevel', '四级河道', '桥梁河道等级', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) VALUES (76, 'riverLevel', '五级河道', '桥梁河道等级', null);
+INSERT INTO public.t_constant (id, category, name, "desc", org) SELECT 77, 'region', '某某区', '所在地区', currval('t_organization_id_seq');
+END IF;
+
+
+
+
+INSERT INTO public.t_vehicle_overload (id, axis_num, overload_standard, over_heigth, over_len, overwidth) VALUES (1, '单轴', 20000.000000, 4.000000, 18.000000, 2.500000);
+INSERT INTO public.t_vehicle_overload (id, axis_num, overload_standard, over_heigth, over_len, overwidth) VALUES (2, '二轴', 20000.000000, 4.000000, 18.000000, 2.500000);
+INSERT INTO public.t_vehicle_overload (id, axis_num, overload_standard, over_heigth, over_len, overwidth) VALUES (3, '三轴', 30000.000000, 4.000000, 18.000000, 2.500000);
+INSERT INTO public.t_vehicle_overload (id, axis_num, overload_standard, over_heigth, over_len, overwidth) VALUES (4, '四轴', 40000.000000, 4.200000, 18.000000, 2.500000);
+INSERT INTO public.t_vehicle_overload (id, axis_num, overload_standard, over_heigth, over_len, overwidth) VALUES (5, '五轴', 50000.000000, 4.200000, 18.000000, 2.500000);
+INSERT INTO public.t_vehicle_overload (id, axis_num, overload_standard, over_heigth, over_len, overwidth) VALUES (6, '六轴及六轴以上', 55000.000000, 4.200000, 18.000000, 2.500000);
+
+
+
+
+
+INSERT INTO public.t_video_nvr_vendor (id, name, enabled) VALUES (1, '海康威视', true);
+INSERT INTO public.t_video_nvr_vendor (id, name, enabled) VALUES (2, '浙江大华技术股份有限公司', true);
+
+
+
+
+INSERT INTO public.t_video_push_server (id, name, ip, port) VALUES (1, '知物云推流服务器', '218.3.150.106', 9090);
+INSERT INTO public.t_video_push_server (id, name, ip, port) VALUES (2, '测试推流服务器', '10.8.30.163', 9090);
+INSERT INTO public.t_video_push_server (id, name, ip, port) VALUES (3, '测试推流', '61.153.27.86', 9090);
+INSERT INTO public.t_video_push_server (id, name, ip, port) VALUES (4, '大华推流', '10.8.30.33', 9090);
+INSERT INTO public.t_video_push_server (id, name, ip, port) VALUES (5, '合并推流', '10.8.30.101', 9090);
+
+
+
+END
+$$;
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/axy_data.sql b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/axy_data.sql
new file mode 100644
index 0000000..6d242b0
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/axy_data.sql
@@ -0,0 +1,3769 @@
+--
+-- PostgreSQL database dump
+--
+
+-- Dumped from database version 12.1
+-- Dumped by pg_dump version 12.1
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET idle_in_transaction_session_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SELECT pg_catalog.set_config('search_path', '', false);
+SET check_function_bodies = false;
+SET xmloption = content;
+SET client_min_messages = warning;
+SET row_security = off;
+
+--
+-- Data for Name: t_abn_type; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_abn_type (id, name, description) FROM stdin;
+3 trend 趋势
+1 interrupt 数据中断
+2 burr 毛刺
+\.
+
+
+--
+-- Data for Name: t_agg_type; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_agg_type (id, type_name, parent_type_id, description, name) FROM stdin;
+1000 分类 0 \N \N
+1001 算法 0 \N \N
+2001 日聚集 1000 \N d
+2002 周聚集 1000 \N w
+2003 月聚集 1000 \N m
+2004 年聚集 1000 \N y
+2005 时聚集 1000 \N h
+3001 平均值 1001 \N avg
+3002 最大值 1001 \N max
+3003 最小值 1001 \N min
+3004 中值 1001 \N med
+3005 求和 1001 \N sum
+\.
+
+
+--
+-- Data for Name: t_alarm_category; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_alarm_category (id, name) FROM stdin;
+1 设备类
+2 数据类
+3 开发类
+\.
+
+
+--
+-- Data for Name: t_alarm_code; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_alarm_code (id, code, name, type_code, level, upgrade_strategy, enable) FROM stdin;
+1 30010403 正常操作发生异常 3001 3 \N t
+2 30010016 设备自动采集 3001 3 \N t
+3 30010301 华云雨量计同步时间 3001 3 \N t
+4 10010006 该传感器不参与采集 1001 3 \N t
+5 2003 维度任务交叠 3004 3 \N t
+6 50010001 网关与服务端之间心跳超时 5001 1 \N t
+7 60010002 电量不高于20% 6001 2 \N t
+8 3008 脚本调用异常 3004 3 \N t
+9 10010002 无效DTU 1001 1 \N t
+10 30080002 传感器数据变化速率超过2级告警阈值 3008 2 \N t
+11 3003 协议初始化异常 3004 3 \N t
+12 30010005 项目号错误 3001 2 \N t
+13 1001 采集超时 3003 3 \N t
+14 30010026 测斜仪类传感器初始角度设置错误 3001 3 \N t
+15 2002 维度未使用能力 3004 3 \N t
+16 30010023 振弦传感器短路 3001 3 \N t
+17 30030001 采集超时 3003 3 \N t
+18 30040003 无效数据 3004 3 \N t
+19 30010011 采集的频率异常 3001 3 \N t
+20 2004 维度在开始前被终止 3004 3 \N t
+21 30010031 设备电量异常 3001 2 \N t
+22 30080001 传感器数据变化速率超过1级告警阈值 3008 1 \N t
+23 30010020 时间设置错误 3001 3 \N t
+24 30010201 频率线异常 3001 3 \N t
+25 30070001 传感器测量值超过1级告警阈值 3007 1 \N t
+26 30010006 广播号错误 3001 2 \N t
+27 30010017 系统忙碌 3001 2 \N t
+28 30010007 读取传感器信息错误 3001 3 \N t
+30 30010024 温度传感器断路 3001 3 \N t
+31 20020003 采集命令下发错误 2002 1 \N t
+32 30010029 器件初始化/复位失败 3001 3 \N t
+33 30010101 模块号错误 3001 3 \N t
+34 30010025 温度传感器短路 3001 3 \N t
+35 2001 任务已过期 3004 3 \N t
+36 30010501 激光返回错误 3001 3 \N t
+37 3005 协议数据格式异常 3004 3 \N t
+38 60010001 电量不高于10% 6001 1 \N t
+39 10010003 沉降分组计算没有基点数据 1001 1 \N t
+40 30040002 接收数据为空 3004 3 \N t
+41 30010010 通道号错误 3001 3 \N t
+42 30010402 寄存器错误 3001 3 \N t
+43 3001 协议定义错误 3004 3 \N t
+44 30010003 校验码错误 3001 3 \N t
+45 10010007 找不到该传感器信息 1001 2 \N t
+46 30010030 I2C总线忙 3001 2 \N t
+47 30070002 传感器测量值超过2级告警阈值 3007 2 \N t
+48 30050001 采集数据超出传感器量程 3005 3 \N t
+49 2005 维度达到最大调用次数 3004 3 \N t
+50 30010014 采集的电压异常 3001 3 \N t
+51 30010008 读取设备信息错误 3001 3 \N t
+52 20020002 DTU忙碌 2002 3 \N t
+53 30010002 单总线短路检测 3001 1 \N t
+54 3006 协议加载异常 3004 3 \N t
+55 30010401 功能号错误 3001 3 \N t
+56 30010018 数据存储错误 3001 3 \N t
+57 30010028 磁通量传感器采集积分电压异常 3001 3 \N t
+58 30040001 解析数据失败 3004 3 \N t
+59 30010021 数据存储错误 3001 3 \N t
+60 30010013 采集的湿度异常 3001 3 \N t
+61 10010004 编译错误 1001 1 \N t
+62 5001 数据有效性判断: 违例 3005 3 \N t
+63 30010202 温度线异常 3001 3 \N t
+64 30010004 功能码错误 3001 2 \N t
+65 30010009 采集时间错误 3001 3 \N t
+66 10010005 采集命令构造错误 1001 1 \N t
+67 30080003 传感器数据变化速率超过3级告警阈值 3008 3 \N t
+68 20020001 写串口异常 2002 1 \N t
+69 30070003 传感器测量值超过3级告警阈值 3007 3 \N t
+70 20010001 DTU未连接 2001 1 \N t
+71 60010003 电量不高于30% 6001 3 \N t
+72 30010015 采集的角度异常 3001 3 \N t
+73 10010001 发送数据为空 1001 3 \N t
+74 30010027 测斜仪类传感器温补系数设置错误 3001 3 \N t
+75 30020002 不受支持的协议 3002 2 \N t
+76 30060001 传感器数据中断 3006 3 \N t
+77 30010203 频率线温度线都异常 3001 3 \N t
+78 30010012 采集的温度异常 3001 3 \N t
+79 30010001 单总线忙 3001 2 \N t
+80 30020001 协议错误 3002 2 \N t
+81 3007 协议脚本中缺少函数 3004 3 \N t
+82 30010019 数据读取错误 3001 3 \N t
+83 30010022 振弦传感器断路 3001 3 \N t
+84 3010 协议缺失 3004 1 \N f
+29 3002 无法建立连接 3004 3 \N f
+85 30090001 聚集数据超过1级告警阈值 3009 1 \N t
+86 30090002 聚集数据超过2级告警阈值 3009 2 \N t
+87 30090003 聚集数据超过3级告警阈值 3009 3 \N t
+88 70021100 24小时紧急 7002 1 \N t
+89 70021101 个人救护 7002 1 \N t
+90 70021110 火警报警 7002 1 \N t
+91 70021111 燃气报警 7002 1 \N t
+92 70021112 水浸报警 7002 1 \N t
+93 70021130 瞬时报警 7002 1 \N t
+94 70021384 无线探测器低压 7002 1 \N t
+95 70021140 温感报警 7002 1 \N t
+96 70021400 周期检测 7002 1 \N t
+97 70021485 巡更 7002 1 \N t
+98 70021609 IP设置 7002 1 \N t
+99 70021702 无线探测器防拆 7002 1 \N t
+100 70030001 垃圾箱状态异常 7003 1 \N t
+101 70040001 电流小于阈值 7004 1 \N t
+102 70040002 电流大于阈值 7004 1 \N t
+103 70040003 电压小于阈值 7004 1 \N t
+104 70040004 电压大于阈值 7004 1 \N t
+105 70040005 离线 7004 1 \N t
+106 30100001 数据异常 3010 1 \N t
+107 70050001 RTU告警 7005 1 \N t
+\.
+
+
+--
+-- Data for Name: t_alarm_type; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_alarm_type (id, code, name, description, category, enabled, upgrade_strategy) FROM stdin;
+1 2001 DTU下线 DTU下线时触发 1 t \N
+7 5001 网关无响应 网关程序无响应 1 t \N
+8 6001 低电量 节点电量低 1 t \N
+9 6002 未传输数据过多 节点唤醒,数据量>100时触发 1 t \N
+10 6003 节点未苏醒 节点未在指定时刻苏醒过来 1 t \N
+11 3007 数据超阈值 数据超过设置的告警阈值 2 t \N
+12 3008 变化速率超阈值 采集数据变化速率超过设置的告警阈值 2 t \N
+13 1001 DAC内部错误 DAC内部错误 3 t \N
+14 2002 DTU通信异常 DTU串口写失败或者DTU忙碌状态下发送指令时 3 t \N
+15 3002 协议错误 DAC下发采集指令时发生错误 3 t \N
+2 3001 设备诊断异常 采集时传感器返回诊断错误码 1 t {"total": 2, "upgrade1": 10, "upgrade2": 10}
+3 3003 采集超时 DAC下发采集指令后20s未接收到返回码 1 t {"total": 2, "upgrade1": 10, "upgrade2": 10}
+4 3004 数据解析错误 DAC解析返回码出现错误 1 t {"total": 2, "upgrade1": 10, "upgrade2": 10}
+5 3005 数据超量程 采集数据超过传感器量程 1 t {"total": 2, "upgrade1": 10, "upgrade2": 10}
+6 3006 数据中断 连续3轮未采集到数据 1 t {"total": 2, "upgrade1": 10, "upgrade2": 10}
+17 7002 烟感告警 烟感告警 1 t \N
+18 7003 垃圾箱设备异常 垃圾箱设备异常 1 t \N
+19 7004 烟雾火警 烟雾火警 1 t \N
+16 3009 聚集数据超阈值 时/日聚集数据超过设置的告警阈值 2 t {"independent": true}
+20 3010 数据异常 数据识别为异常 2 t \N
+21 7005 RTU告警 RTU告警 1 t \N
+\.
+
+
+--
+-- Data for Name: t_calendar_type; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_calendar_type (id, name) FROM stdin;
+1 工程进度
+2 人工巡检
+3 集成配置
+4 系统跟踪
+5 重大事件
+\.
+
+
+--
+-- Data for Name: t_component; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_component (id, component) FROM stdin;
+1 桥跨结构
+2 支座系统
+3 桥墩
+4 桥台
+5 墩台基础
+6 桥跨铺装
+7 排水防水系统
+8 栏杆
+9 伸缩缝
+10 灯光照明
+\.
+
+
+--
+-- Data for Name: t_factor_proto; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_factor_proto (code, name) FROM stdin;
+1001 风速风向
+1002 温湿度
+1003 雨量
+1004 温度
+1005 地下水位
+1006 湿度
+1007 噪声
+1008 渗流量
+1009 浸润线
+1010 干滩和库水位
+1011 电流
+1012 气压
+1013 液位
+1014 流量
+1015 蚀度
+1016 ph值
+1017 氧气/氮气浓度
+1018 气体浓度
+1019 爆炸性气体
+1020 光照
+1021 辐射
+1022 风速
+1023 液体浓度
+1024 窨井水位
+1025 路面积水
+2001 索力
+2002 车流量
+2003 压力
+2004 受力
+3001 应变
+3002 应变花
+3003 应力
+4001 单向位移
+4002 双向位移
+4003 三向位移
+4004 挠度
+4005 深层水平位移
+4006 单向角度
+4007 双向角度
+4008 裂缝
+4009 伸缩缝
+4010 杆塔倾斜
+4011 拱顶沉降
+5001 振动速度
+5002 振动加速度
+5003 动应变
+6001 起重机主起
+6002 起重机副起
+6003 起重机大车
+6004 起重机小车
+1026 粉尘/颗粒物监测
+1027 大气污染指数
+1028 结冰
+1029 风向
+2005 重力
+4012 三向角度
+1030 能见度
+1031 一氧化碳浓度
+4013 全站位移
+2006 钢筋混凝土支撑轴力
+1032 大气监测仪
+1033 气象站监测
+4014 塔吊
+1034 扬尘
+7001 立杆倾斜与轴力
+7002 倾斜与支架水平位移
+7003 倾斜与模板沉降
+8001 空气质量指数
+8002 地表水环境质量
+9001 用电量
+9002 用水量
+9003 厕所人流量
+9004 厕所环境
+0001 状态
+4015 升降机
+1041 盐分电导率
+6010 安全帽
+1035 气象站
+4016 高程
+8003 睡眠
+8004 求救
+8005 电量
+8006 跌倒定位
+8007 定位
+8008 心率
+8009 运动数据
+7007 垃圾容量
+8010 恶臭
+8011 移动空气质量
+9005 空间转换门
+4018 安全步距监测
+9010 人流量
+1045 库流量
+1046 库容
+1047 进水量
+8012 恶臭排放量
+1048 烟感报警
+3006 管道应力
+4020 相邻沉降
+8013 路灯
+5041 烟感报警
+7008 站台限界
+7009 智能垃圾
+4021 桩顶水平及竖向位移
+5005 振动等效声级
+1050 河流监测
+2014 受力与温度
+3007 应力(Kpa)
+1052 太阳辐射
+1051 百叶气象
+4023 恶臭气体四项监测
+4022 恶臭气体六项监测
+4024 恶臭气体四项监测-2
+7010 消火栓
+7011 电气火灾
+4025 崩塌
+4026 恶臭气体三项监测
+8022 环境气体监测
+5006 三向振动
+8033 人员定位
+7030 三相电表
+\.
+
+
+--
+-- Data for Name: t_factor; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_factor (id, name, proto, org, item) FROM stdin;
+1 风速风向 1001 \N {}
+2 温湿度 1002 \N {}
+3 雨量 1003 \N {}
+4 温度 1004 \N {}
+5 噪声 1007 \N {}
+6 索力 2001 \N {}
+7 车流量 2002 \N {}
+8 加固钢板应变 3001 \N {}
+9 钢管拱肋应变 3001 \N {}
+10 混凝土拱肋应变 3001 \N {}
+11 应变 3001 \N {}
+13 表面位移 4003 \N {}
+14 塔顶偏位 4003 \N {}
+15 桥墩倾斜 4007 \N {}
+16 主梁挠度 4004 \N {}
+17 桥梁伸缩缝 4009 \N {}
+18 裂缝 4008 \N {}
+19 挠度 4004 \N {}
+20 支座位移 4001 \N {}
+21 倾角 4006 \N {}
+22 桥塔倾斜 4002 \N {}
+23 拱座转角 4006 \N {}
+24 位移 4001 \N {}
+25 梁体振动 5002 \N {}
+26 振动速度 5001 \N {}
+27 动应变 5003 \N {}
+28 桥面振动 5002 \N {}
+31 地下水位 1005 \N {}
+33 锚索受力 2004 \N {}
+36 支撑轴力 2004 \N {}
+37 围护墙内力 2004 \N {}
+38 支撑内力 2004 \N {}
+39 立柱内力 2004 \N {}
+40 锚杆内力 2004 \N {}
+41 土钉内力 2004 \N {}
+42 围护墙侧向土压力 2003 \N {}
+43 钢筋混凝土应力应变 3001 \N {}
+44 围护墙顶部水平位移 4002 \N {}
+45 围护墙竖向位移 4001 \N {}
+46 立柱竖向位移 4001 \N {}
+47 土体分层竖向位移 4001 \N {}
+48 周边地表竖向位移 4001 \N {}
+49 地表裂缝 4008 \N {}
+50 水平位移 4002 \N {}
+51 竖向位移 4001 \N {}
+52 深层水平位移 4005 \N {}
+58 土体压力 2003 \N {}
+60 锚杆拉力 2004 \N {}
+61 支护结构应力 3003 \N {}
+63 支护结构变形 4002 \N {}
+70 渗流量 1008 \N {}
+71 扬压力 2003 \N {}
+72 渗透压力 2003 \N {}
+75 坝体位移 4003 \N {}
+76 坝基位移 4003 \N {}
+77 近坝岸坡位移 4003 \N {}
+79 倾斜 4002 \N {}
+84 毒害气体 1018 \N {}
+85 初衬受压力 2003 \N {}
+86 涌水 2003 \N {}
+88 初支与二衬接触压力 2003 \N {}
+89 围岩与初支接触压力 2003 \N {}
+90 二衬钢筋应力 3003 \N {}
+91 拉索应力 3003 \N {}
+92 剪切件应力 3003 \N {}
+93 钢筋应力 3003 \N {}
+94 混凝土应力 3003 \N {}
+95 初支衬砌应变 3001 \N {}
+96 二次衬砌应变 3001 \N {}
+97 钢支撑应力 3001 \N {}
+98 锚杆轴力 3001 \N {}
+102 拱顶沉降 4011 \N {}
+103 净空收敛 4001 \N {}
+104 管片变形 4007 \N {}
+105 围岩体内部位移 4005 \N {}
+106 隧道结构水平位移 4002 \N {}
+107 道床及拱腰结构沉降 4001 \N {}
+108 隧道壁振动 5002 \N {}
+109 轨道板振动 5002 \N {}
+112 渗流 1008 \N {}
+113 浸润线 1009 \N {}
+114 干滩和库水位 1010 \N {}
+116 深部水平位移 4005 \N {}
+117 干滩高程 4001 \N {}
+127 建筑物倾斜 4007 \N {}
+129 周边土体振动 5002 \N {}
+131 杆塔倾斜 4010 \N {}
+133 蚀度 1015 \N {}
+134 PH值 1016 \N {}
+135 电流 1011 \N {}
+137 气压 1012 \N {}
+138 液位 1013 \N {}
+12 应变花 3002 \N {}
+35 钢支撑轴力 2004 \N {}
+139 流量 1014 \N {}
+140 压力 2003 \N {}
+142 杆塔倾斜 4002 \N {}
+143 振动加速度 5002 \N {}
+145 起重机主起 6001 \N {}
+146 起重机副起 6002 \N {}
+147 起重机大车 6003 \N {}
+148 起重机小车 6004 \N {}
+151 湿度 1006 \N {}
+152 CO2浓度 1018 \N {}
+153 光照 1020 \N {}
+155 辐射 1021 \N {}
+156 风速 1022 \N {}
+158 土温 1004 \N {}
+159 土湿 1006 \N {}
+160 土壤温湿度 1002 \N {}
+161 土壤盐分 1023 \N {}
+162 窨井水位 1024 \N {}
+163 路面积水 1025 \N {}
+164 排水管渠气体浓度 1018 \N {}
+165 氧气/氮气浓度 1017 \N {}
+166 其他常规气体 1018 \N {}
+167 爆炸性气体 1019 \N {}
+168 有机化合物气体 1018 \N {}
+169 船舶姿态 4007 \N {}
+170 粉尘 1026 \N {}
+171 PM 1027 \N {}
+173 建筑物倾斜(位移) 4002 \N {}
+174 路面结冰 1028 \N {}
+204 沉降 4001 \N {}
+205 分层沉降 4001 \N {}
+206 风向 1029 \N {}
+211 油压 2003 \N {}
+214 烟雾 1018 \N {}
+215 CO浓度 1018 \N {}
+216 NO2浓度 1018 \N {}
+217 O3浓度 1018 \N {}
+218 PM2.5浓度 1026 \N {}
+219 PM10浓度 1026 \N {}
+220 SO2浓度 1018 \N {}
+222 水平收敛 4001 \N {}
+223 绳索张力 2005 \N {}
+226 重量 2005 \N {}
+227 倾角 4012 \N {}
+228 能见度 1030 \N {}
+231 CO浓度 1031 \N {}
+232 O2浓度 1017 \N {}
+234 塔体倾斜 4007 \N {}
+237 应力 3003 \N {}
+238 地表沉降 4001 \N {}
+239 全站仪位移 4013 \N {}
+241 钢筋混凝土支撑轴力 2006 \N {}
+242 空气质量 1032 \N {}
+243 大气监测 1033 \N {}
+249 塔吊 4014 \N {}
+250 扬尘 1034 \N {}
+251 立杆倾斜与立杆轴力 7001 \N {}
+252 倾斜与支架水平位移 7002 \N {}
+253 立杆倾斜与模板沉降 7003 \N {}
+254 高支模倾斜 4007 1 {}
+255 空气质量指数 8001 \N {}
+256 地表水环境质量 8002 \N {}
+259 用电量 9001 \N {}
+260 用水量 9002 \N {}
+261 厕所人流量 9003 \N {}
+262 厕所坑位 0001 \N {}
+263 厕所环境 9004 \N {}
+264 升降机 4015 \N {}
+266 盐分电导率 1041 \N {}
+267 土壤温湿度 1002 \N {}
+269 土壤PH值 1016 \N {}
+34 孔隙水压 2003 \N {}
+272 空气五项 1035 \N {}
+271 人员定位 6010 \N {}
+273 沉降高程 4016 \N {}
+274 睡眠 8003 \N {}
+275 求救 8004 \N {}
+276 电量 8005 \N {}
+277 跌倒定位 8006 \N {}
+278 定位 8007 \N {}
+279 心率 8008 \N {}
+280 运动数据 8009 \N {}
+283 水位 1005 1 {}
+284 垃圾容量 7007 \N {}
+285 恶臭 8010 \N {}
+286 围护墙水平位移 4001 1 {}
+287 移动空气质量 8011 \N {}
+288 空间转换门 9005 \N {}
+289 安全步距监测 4018 \N {}
+290 水位监测 1005 1 {}
+292 振动加速度监测 5002 1 {}
+293 人流量 9010 \N {}
+294 库流量 1045 1 {}
+296 库容监测 1046 1 {}
+291 出水量监测 1045 1 {}
+295 进水量监测 1047 1 {}
+297 载重 2005 \N {}
+299 建筑物裂缝监测 4008 1 {}
+301 燃气管线沉降 4001 1 {}
+300 围护墙顶部沉降监测 4001 1 {}
+298 建筑物沉降监测 4001 1 {}
+302 堆石高度监测 4001 1 {}
+303 恶臭排放量 8012 \N {}
+304 恶臭排放量 8012 1 {}
+306 爬架倾斜 4007 1 {}
+307 燃气管道应变 3001 1 {}
+308 水池水位 1005 1 {}
+309 钢筋应力 3003 1 {}
+310 管道应力 3006 \N {}
+311 全站仪三向位移 4003 1 {}
+312 相邻沉降 4020 \N {}
+313 相邻沉降 4020 \N {}
+314 路灯 8013 \N {}
+315 烟感报警 5041 \N {}
+316 站台限界 7008 \N {}
+317 坝体单向表面位移 4001 1 {}
+319 智能垃圾 7009 \N {}
+320 智能垃圾 7009 \N {}
+321 桩顶水平及竖向位移 4021 \N {}
+322 环境监测 1034 1 {}
+323 建筑物振动 5005 \N {}
+324 挡土墙倾斜 4007 1 {}
+325 河流监测 1050 \N {}
+326 河流监测 1050 1 {}
+327 支撑轴力与温度 2014 \N {}
+328 应力(Kpa) 3007 \N {}
+329 太阳辐射 1052 \N {}
+330 百叶气象 1051 \N {}
+332 恶臭气体四项监测 4023 \N {}
+333 恶臭气体六项监测 4022 \N {}
+335 周边地表竖向位移 4001 1 {}
+336 围护墙顶部水平位移(位移) 4001 1 {}
+337 恶臭气体四项监测-2 4024 \N {}
+338 山体裂缝监测 4008 1 {}
+339 消防水池 1005 1 {}
+340 烟感 1048 1 {}
+341 可燃气体 1019 1 {}
+342 消火栓 7010 \N {}
+343 电气火灾 7011 \N {}
+344 断面收敛 4011 1 {}
+345 断面沉降 4001 1 {}
+346 崩塌 4025 \N {}
+347 土壤温湿度 1002 1 {}
+348 倾角位移监测 4007 \N {}
+349 恶臭气体三项监测 4026 \N {}
+350 抗滑桩倾角 4007 1 {}
+353 环境气体监测 8022 \N {}
+354 爆破振动 5006 \N {}
+355 振动爆破 5006 1 {}
+356 人员定位 8033 \N {}
+357 三轴倾角 4012 1 {}
+359 三相电表 7030 \N {}
+\.
+
+
+--
+-- Data for Name: t_formula; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_formula (id, name, expression_shown, description, params, ioparams, expression, ioparams_ext, props) FROM stdin;
+125 力转应力 σ=F/A \N [{"name": "A", "unit": "mm^2", "alias": "钢筋计有效面积(mm^2)"}] {"input": ["F"], "output": ["σ"]} σ=F*1000/A {"input": [{"name": "F", "unit": "kN"}], "output": [{"name": "σ", "unit": "MPa"}]} \N
+100 减初值公式 phy=DAQi-DAQ0 \N [{"name": "DAQ0", "alias": "初值"}] {"input": ["DAQi"], "output": ["phy"]} phy=DAQi-DAQ0 {"input": [{"name": "DAQi"}], "output": [{"name": "phy"}]} \N
+120 振动索力识别公式 T=4*m*l^2*f1^2/1000 \N [{"name": "l", "alias": "索长(m)"}, {"name": "m", "alias": "线密度(kg/m)"}, {"name": "f1", "alias": "基频(Hz)"}, {"name": "δ", "alias": "误差范围(Hz)"}] {"input": [""], "output": ["force"]} \N {"input": [], "output": [{"name": "force", "unit": "kN"}]} \N
+105 压强测水位公式 h=(Pi/pg) \N [{"name": "ρ", "unit": "10^3kg/m^3", "alias": "密度(10^3kg/m^3)"}] {"input": ["Pi"], "output": ["h"]} h=Pi*1000/(ρ*9.8) {"input": [{"name": "Pi", "unit": "kPa"}], "output": [{"name": "h", "unit": "m"}]} \N
+107 干滩长度计算 l=(H-(h+hi))/s \N [{"name": "H", "unit": "m", "alias": "滩顶高程(m)"}, {"name": "h", "unit": "m", "alias": "安装高程(m)"}, {"name": "s", "alias": "坡比"}] {"input": ["hi"], "output": ["L"]} L=(H-(h0+hi))/s {"input": [{"name": "hi", "unit": "m"}], "output": [{"name": "L", "unit": "m"}]} \N
+108 振动物理量转换公式 A=V/k 弃用公式 [{"name": "k", "alias": "转换系数"}] {"input": [""], "output": [""]} \N \N \N
+111 初值减测值 phy=C0-Ci \N [{"name": "C0", "alias": "初值"}] {"input": ["Ci"], "output": ["phy"]} phy=C0-Ci {"input": [{"name": "Ci"}], "output": [{"name": "phy"}]} \N
+113 应变计计算轴力 F=A*E*[(∑εi)/n]+F0 \N [{"name": "E", "unit": "kN/mm^2", "alias": "钢材弹性模量(kN/mm^2)"}, {"name": "A", "unit": "mm^2", "alias": "钢材截面积(mm^2)"}, {"name": "F0", "unit": "kN", "alias": "初值(kN)"}] {"input": ["ε"], "output": ["F"]} F=ε*E*A+F0 {"input": [{"name": "ε", "unit": "με"}], "output": [{"name": "F", "unit": "kN"}]} \N
+114 路面积水液位计算 Hc=h+hsi \N [{"name": "h", "unit": "mm", "alias": "安装高度(mm)"}] {"input": ["hsi"], "output": ["Hc"]} Hc=h+hsi {"input": [{"name": "hsi", "unit": "mm"}], "output": [{"name": "Hc", "unit": "mm"}]} \N
+116 逆初值基准值公式 phy=-(DAQi-DAQ0)+D \N [{"name": "D", "unit": "mm", "alias": "初始裂缝宽度(mm)"}, {"name": "C0", "unit": "mm", "alias": "初值(mm)"}] {"input": ["DAQi"], "output": ["phy"]} phy=-(DAQi-C0)+D {"input": [{"name": "DAQi", "unit": "mm"}], "output": [{"name": "phy", "unit": "mm"}]} \N
+118 测斜倾角计算挠度 Yn=Yn-1+((Xn-Xn-1)/2)*((An-1*π/180)+(An*π/180)–2*M 弃用公式 [{"name": "L", "alias": "距基点位置(m)"}] {"input": [""], "output": [""]} \N \N \N
+119 激光测沉降 Δh=(Li-L0)/tanθ \N [{"name": "L0", "alias": "初始测值(m)"}, {"name": "θ", "alias": "挡光板与垂直方向的夹角(°)"}] {"input": ["Li"], "output": ["Δh"]} Δh=(Li-L0)/tan(θ*π/180) {"input": [{"name": "Li"}], "output": [{"name": "Δh"}]} \N
+122 振动特征参数计算 phy={pv,ppv,rms} \N [] {"input": [""], "output": [""]} \N \N \N
+124 压力变送器公式 Δh=(Pi-P0)/(ρ*g)+H0 \N [{"name": "ρ", "unit": "10^3kg/m^3", "alias": "密度(10^3kg/m^3)"}, {"name": "P0", "unit": "kPa", "alias": "压强初值(kPa)"}, {"name": "H0", "unit": "m", "alias": "安装高程(m)"}] {"input": ["Pi"], "output": ["Δh"]} Δh=(Pi-P0)/(ρ*g)+H0 {"input": [{"name": "Pi", "unit": "kPa"}], "output": [{"name": "Δh", "unit": "m"}]} \N
+202 组内平均 Δh=∑pv/n \N [] {"input": ["pv"], "output": ["Δh"]} Δh=AVG(pv) {"input": [{"name": "pv"}], "output": [{"name": "Δh"}]} \N
+203 组内最大值 pmax=MAX(pv) \N [] {"input": ["pv"], "output": ["pmax"]} pmax=MAX(pv) {"input": [{"name": "pv"}], "output": [{"name": "pmax"}]} \N
+205 虚拟基点公式 Δh=Base-(RefS-RefB) 弃用公式 [] {"input": ["h"], "output": ["Δh"]} \N \N \N
+206 虚拟基点公式(二级) Δh=Base0-(RefS0-RefB0)-(RefS1-RefB1) 弃用公式 [] {"input": ["h"], "output": ["Δh"]} \N \N \N
+212 输电塔自动调平计算公式 h(i,j)=[i*a*sin(θ_x) + j*b*sin(θ_y)]/2; d = min{h(i,j)}; H(i,j) = h(i,j) - d; {i=±1,j=±1} \N [{"name": "L", "alias": "长度(mm)"}, {"name": "W", "alias": "宽度(mm)"}] {"input": ["θx", "θy"], "output": ["angX", "angY", "Ha", "Hb", "Hc", "Hd"]} \N {"input": [{"name": "θx"}, {"name": "θy"}], "output": [{"name": "angX"}, {"name": "angY"}, {"name": "Ha"}, {"name": "Hb"}, {"name": "Hc"}, {"name": "Hd"}]} \N
+213 雷达物位计干滩计算公式 l=(H-(h+hi))/s;s=((h01-hi1)-(h02-hi2))/L \N [{"name": "H", "alias": "滩顶高程(m)"}, {"name": "h", "alias": "水位计安装高程(m)"}, {"name": "h01", "alias": "雷达物位计1安装高程(m)"}, {"name": "h02", "alias": "雷达物位计2安装高程(m)"}, {"name": "L", "alias": "水平距离(m)"}] {"input": ["hi"], "output": ["l"]} \N {"input": [{"name": "hi"}], "output": [{"name": "l"}]} \N
+214 单轴倾角仪测量双向角度 配置2个传感器,第一个代表X方向,第二个代表Y方向 [] {"input": ["v"], "output": ["x", "y"]} \N {"input": [{"name": "v"}], "output": [{"name": "x"}, {"name": "y"}]} \N
+215 单向位移计测三向位移 配置3个传感器,第一个代表X方向,第二个代表Y方向,第三个代表Z方向 [] {"input": ["v"], "output": ["x", "y", "z"]} \N {"input": [{"name": "v"}], "output": [{"name": "x"}, {"name": "y"}, {"name": "z"}]} \N
+103 水位公式 H=h+h0 \N [{"name": "h0", "alias": "深度初值(m)"}] {"input": ["h"], "output": ["H"]} H=h+h0 {"input": [{"name": "h", "unit": "m"}], "output": [{"name": "H", "unit": "m"}]} \N
+126 系数修正 f=k*fi \N [{"name": "k", "alias": "修正系数"}] {"input": ["fi"], "output": ["f"]} f=k*fi {"input": [{"name": "fi"}], "output": [{"name": "f"}]} \N
+127 相反数 p=-v \N [] {"input": ["v"], "output": ["p"]} p=-v {"input": [{"name": "v"}], "output": [{"name": "p"}]} \N
+128 一元线性公式 p=(v-a)*b \N [{"name": "a", "alias": "初值"}, {"name": "b", "alias": "系数"}] {"input": ["v"], "output": ["p"]} p=(v-a)*b {"input": [{"name": "v"}], "output": [{"name": "p"}]} \N
+129 露点计算公式 X=(0.66077+(7.5*温度/(237.3+温度))+(Lg(湿度)-2);露点温度=((0.66077-X)*237.3)/(X-8.16077) \N [] {"input": ["temperature", "humidity"], "output": ["dew"]} dew=((0.66077-X)*237.3)/(X-8.16077),X=0.66077+(7.5*temperature/(237.3+temperature))+(log(humidity)-2) {"input": [{"name": "temperature"}, {"name": "humidity"}], "output": [{"name": "dew"}]} \N
+101 测斜减初值公式 phy=DAQi-DAQ0 \N [{"name": "x0", "alias": "初值1"}, {"name": "y0", "alias": "初值2"}] {"input": ["xi", "yi"], "output": ["x", "y"]} x=xi-x0;y=yi-y0 {"input": [{"name": "xi"}, {"name": "yi"}], "output": [{"name": "x"}, {"name": "y"}]} \N
+102 测斜公式 Δl=c*[sin(αi)-sin(α0)] \N [{"name": "c", "unit": "mm", "alias": "测斜杆间距离长(mm)"}, {"name": "xα0", "unit": "°", "alias": "x方向角度初值(°)"}, {"name": "yα0", "unit": "°", "alias": "y方向角度初值(°)"}] {"input": ["αx", "αy"], "output": ["x", "y"]} x=c*(sin(αx*π/180)-sin(xα0*π/180));y=c*(sin(αy*π/180)-sin(yα0*π/180)) {"input": [{"name": "αx", "unit": "°"}, {"name": "αy", "unit": "°"}], "output": [{"name": "x", "unit": "mm"}, {"name": "y", "unit": "mm"}]} \N
+104 压力变送器公式 Δh=(Pi-P0)/(ρ*g)+H0 \N [{"name": "ρ", "unit": "10^3kg/m^3", "alias": "密度(10^3kg/m^3)"}, {"name": "P0", "unit": "kPa", "alias": "压强初值(kPa)"}, {"name": "H0", "unit": "mm", "alias": "安装高程(mm)", "default": 0.0}] {"input": ["Pi"], "output": ["Δh"]} Δh=(Pi-P0)*1000/(ρ*9.8)+H0 {"input": [{"name": "Pi", "unit": "KPa"}], "output": [{"name": "Δh", "unit": "mm"}]} \N
+106 渗流计算 v=k*(h1-h2)/L \N [{"name": "type", "type": "enum", "alias": "量水堰类型", "range": ["三角堰", "矩形堰", "梯形堰"]}, {"name": "h", "unit": "m", "alias": "底长(m)"}, {"name": "H0", "unit": "m", "alias": "堰上水头初始值(m)"}, {"name": "P0", "unit": "kPa", "alias": "压力初始值(kPa)"}, {"name": "ρ", "unit": "10^3kg/m^3", "alias": "密度(10^3kg/m^3)"}] {"input": ["p"], "output": ["v"]} \N {"input": [{"name": "p", "unit": "kPa"}], "output": [{"name": "v", "unit": "m3/s"}]} \N
+109 三维位移转换公式 X=(y-y0)*sinθ-(x-x0)*cosθ;Y=(y-y0)*cosθ+(x-x0)*sinθ;Z=z-z0 \N [{"name": "x0", "unit": "mm", "alias": "x方向初始大地坐标(mm)"}, {"name": "y0", "unit": "mm", "alias": "y方向初始大地坐标(mm)"}, {"name": "z0", "unit": "mm", "alias": "z方向初始大地坐标(mm)"}, {"name": "θ", "unit": "°", "alias": "偏角(°)"}] {"input": ["xi", "yi", "zi"], "output": ["X", "Y", "Z"]} X=(yi-y0)*sin(θ*π/180)-(xi-x0)*cos(θ*π/180);Y=(yi-y0)*cos(θ*π/180)+(xi-x0)*sin(θ*π/180);Z=zi-z0 {"input": [{"name": "xi", "unit": "mm"}, {"name": "yi", "unit": "mm"}, {"name": "zi", "unit": "mm"}], "output": [{"name": "X", "unit": "mm"}, {"name": "Y", "unit": "mm"}, {"name": "Z", "unit": "mm"}]} \N
+115 荷载分布 t=(sl+ql)/v 弃用公式 [{"name": "SL", "alias": "距离上桥距离(m)"}, {"name": "SRP", "type": "enum", "alias": "距离桥梁相对位置", "range": ["上桥", "下桥"]}] {"input": [""], "output": [""]} \N \N \N
+117 初值基准值公式 phy=DAQi-DAQ0+D \N [{"name": "D", "unit": "mm", "alias": "初始裂缝宽度(mm)"}, {"name": "C0", "unit": "mm", "alias": "初值(mm)"}] {"input": ["DAQi"], "output": ["phy"]} phy=DAQi-C0+D {"input": [{"name": "DAQi", "unit": "mm"}], "output": [{"name": "phy", "unit": "mm"}]} \N
+123 应变计算应力 σ=Eε \N [{"name": "E", "unit": "MPa", "alias": "弹性模量(MPa)"}] {"input": ["ε"], "output": ["σ"]} σ=ε*0.000001*E {"input": [{"name": "ε", "unit": "με"}], "output": [{"name": "σ", "unit": "MPa"}]} \N
+201 激光测距 Δh=(len0-leni)*H/len0 \N [{"name": "len0", "unit": "m", "alias": "初始位置(m)"}, {"name": "H", "unit": "m", "alias": "设备高程(m)"}] {"input": ["leni"], "output": ["Δh"]} Δh=(len0*1000-abs(leni))*H/len0 {"input": [{"name": "leni", "unit": "mm"}], "output": [{"name": "Δh", "unit": "mm"}]} \N
+207 应变花计算公式 Sr=1/2*E+1/(2*(1-μ))|Sr=1/3*E+1/(3*(1-μ))|Sr=1/4*E+1/(2*(1-μ))|Sr=1/2*E+4/(3*(1-μ)) 需要配置3个关联传感器,安装位置对应的角度分别为0度,45度,90度 [{"name": "E", "alias": "弹性模量"}, {"name": "μ", "alias": "泊松比"}, {"name": "shape", "type": "enum", "alias": "应变花类型", "range": ["三片直角形", "三片等角形", "四片直角形", "T-△形"]}] {"input": ["εi"], "output": ["σ", "ε", "α"]} \N {"input": [{"name": "εi"}], "output": [{"name": "σ"}, {"name": "ε"}, {"name": "α"}]} \N
+121 测斜垂直方向位移计算 Δl=c*[sin(αi)-sin(α0)] 工讯定制 [{"name": "xα0", "alias": "x方向角度初值(°)"}, {"name": "yα0", "alias": "y方向角度初值(°)"}, {"name": "c", "alias": "初始高(m)"}] {"input": ["αx", "αy"], "output": ["x", "y"]} x=c*1000*(sin(αx*π/180)-sin(xα0*π/180));y=c*1000*(sin(αy*π/180)-sin(yα0*π/180)) {"input": [{"name": "αx", "unit": "°"}, {"name": "αy", "unit": "°"}], "output": [{"name": "x", "unit": "mm"}, {"name": "y", "unit": "mm"}]} \N
+211 应变计计算钢筋混凝土支撑轴力 N=(Ec*Ac+Es*As)*ε;ε=AVG(εi);As=SUM(Ai) \N [{"name": "Ac", "alias": "混凝土截面积(mm^2)"}, {"name": "Ec", "alias": "混凝土弹性模量(kN/mm^2)"}, {"name": "Ai", "alias": "钢筋计截面积(mm^2)"}, {"name": "Es", "alias": "钢筋弹性模量(kN/mm^2)"}] {"input": ["εi"], "output": ["N"]} N=(Ec*Ac+Es*As)*ε;ε=AVG(εi);As=SUM(Ai) {"input": [{"name": "εi"}], "output": [{"name": "N"}]} \N
+110 流量计算 Qi=vi*Δt \N [] {"input": ["vi"], "output": ["Qi"]} Qi=vi*Δt {"input": [{"name": "vi", "unit": "m/s"}], "output": [{"name": "Qi", "unit": "m³"}]} \N
+112 库容计算 V=ax³+bx²+cx+d \N [{"name": "a", "alias": "3次项系数"}, {"name": "b", "alias": "2次项系数"}, {"name": "c", "alias": "1次项系数"}, {"name": "d", "alias": "常数项"}] {"input": ["x"], "output": ["V"]} V=a*x^3+b*x^2+c*x+d {"input": [{"name": "x", "unit": "m"}], "output": [{"name": "V", "unit": "m³"}]} \N
+136 出水量计算 E=f(p) \N [] {"input": ["p"], "output": ["E"]} \N {"input": [{"name": "p", "unit": "kPa"}], "output": [{"name": "E", "unit": "m^3/s"}]} \N
+137 三角堰经验公式 Q=C*(H-h1)^(5/2) \N [{"name": "h1", "unit": "cm", "alias": "传感器至三角堰下豁口高差(cm)"}] {"input": ["H"], "output": ["Q"]} \N {"input": [{"name": "H", "unit": "cm"}], "output": [{"name": "Q", "unit": "L/s"}]} \N
+208 进水量计算 Qi=V_i - V_i_1 + Qo \N [] {"input": ["Qo", "V_i"], "output": ["Qi"]} Qi=V_i - V_i_1 + Qo {"output": [{"name": "Qi", "unit": "m³"}]} \N
+138 三角堰经验公式(C) Q=C*(H-h1)^(5/2) \N [{"name": "h1", "unit": "cm", "alias": "传感器至三角堰下豁口高差(cm)"}, {"name": "C", "unit": "", "alias": "系数"}] {"input": ["H"], "output": ["Q"]} Q=C*(H-h1)^(5/2) {"input": [{"name": "H", "unit": "cm"}], "output": [{"name": "Q", "unit": "L/s"}]} \N
+139 减初值公式 X=xi-x0;Y=yi-y0;Z=zi-z0 \N [{"name": "x0", "unit": "mm", "alias": "x方向初值(mm)"}, {"name": "y0", "unit": "mm", "alias": "y方向初值(mm)"}, {"name": "z0", "unit": "mm", "alias": "z方向初值(mm)"}] {"input": ["xi", "yi", "zi"], "output": ["X", "Y", "Z"]} X=xi-x0;Y=yi-y0;Z=zi-z0 {"input": [{"name": "xi", "unit": "mm"}, {"name": "yi", "unit": "mm"}, {"name": "zi", "unit": "mm"}], "output": [{"name": "X", "unit": "mm"}, {"name": "Y", "unit": "mm"}, {"name": "Z", "unit": "mm"}]} \N
+133 排放量计算公式 P=Q*C/1e6 \N [] {"input": ["Qn", "Qh", "Qv", "Qo", "C"], "output": ["Pn", "Ph", "Pv", "Po"]} Pn=Qn*C/1e3;Ph=Qh*C/1e3;Pv=Qv*C/1e3;Po=Qo; {"input": [{"name": "Qn", "unit": "ppm"}, {"name": "Qh", "unit": "ppm"}, {"name": "Qv", "unit": "ppm"}, {"name": "Qo", "unit": ""}, {"name": "C", "unit": ""}], "output": [{"name": "Pn", "unit": "g/h"}, {"name": "Ph", "unit": "g/h"}, {"name": "Pv", "unit": "g/h"}, {"name": "Po", "unit": ""}]} {"type": "combine"}
+135 力转应力(kN/mm^2) σ=F/A NULL [{"name": "A", "unit": "mm^2", "alias": "钢筋计有效面积(mm^2)"}] {"input": ["F"], "output": ["σ"]} σ=F/A;Ai=A {"input": [{"name": "F", "unit": "kN"}], "output": [{"name": "σ", "unit": "kN/mm^2"}, {"name": "Ai", "unit": "mm^2"}]} \N
+204 支撑轴力计算 Nc=δ(Ec*Ac/Ei+Ai),δ=(∑[k*(fi^2-f0^2)/Aj])/n \N [{"name": "Ec", "alias": "混凝土弹性模量(kN/mm^2)"}, {"name": "Es", "alias": "钢筋弹性模量(kN/mm^2)"}, {"name": "Ac", "alias": "混凝土净截面面积(mm^2)"}, {"name": "As", "alias": "钢筋总面积(mm^2)"}] {"input": ["δi"], "output": ["Nc"]} Nc=δ(Ec*Ac/Es+As),δ=AVG(δi) {"input": [{"name": "δi", "unit": "kN/mm^2"}], "output": [{"name": "Nc", "unit": "kN"}]} \N
+216 管道轴向应力 σL=σt+σp+σe+σb 配置3个传感器,第一个代表L(9点钟)方向,第二个代表U(12点钟)方向,第三个代表R(3点钟)方向 [{"name": "E", "alias": "钢材弹性模量(GPa)"}, {"name": "σp", "alias": "内压波桑应力(MPa)"}] {"input": ["v"], "output": ["σL"]} \N {"input": [{"name": "v", "unit": "uε"}], "output": [{"name": "σL", "unit": "MPa"}]} \N
+217 应变计计算轴力(组合) F=A*E*[(∑εi)/n]+F0 \N [{"name": "E", "unit": "kN/mm^2", "alias": "钢材弹性模量(kN/mm^2)"}, {"name": "A", "unit": "mm^2", "alias": "钢材截面积(mm^2)"}, {"name": "F0", "unit": "kN", "alias": "初值(kN)", "default": 0.0}] {"input": ["εi"], "output": ["F"]} F=ε*1e-6*E*A+F0,ε=AVG(εi) {"input": [{"name": "εi", "unit": "με"}], "output": [{"name": "F", "unit": "kN"}]} \N
+218 钢筋混凝土支撑轴力计算 Nc=[δ(Ec*Ac/Ei+Ai)]/(Ai/n),δ=(∑δi)/n \N [{"name": "Ec", "alias": "混凝土弹性模量(kN/mm^2)"}, {"name": "Ei", "alias": "钢筋弹性模量(kN/mm^2)"}, {"name": "Ac", "alias": "混凝土净截面面积(mm^2)"}, {"name": "Ai", "alias": "钢筋总面积(mm^2)"}, {"name": "n", "alias": "钢筋个数"}] {"input": ["δi"], "output": ["Nc"]} Nc=δ(Ec*Ac/Ei+Ai)/(Ai/n),δ=AVG(δi) {"input": [{"name": "δi", "unit": "kN"}], "output": [{"name": "Nc", "unit": "kN"}]} \N
+140 轨心距计算公式 L=(X0*S1)/S-l+L0 \N [{"name": "X0", "unit": "mm", "alias": "轨腰中点到设备安装点的水平距离X0(mm)"}, {"name": "S", "unit": "mm", "alias": "轨腰中点到设备安装点的距离S(mm)"}, {"name": "l", "unit": "mm", "alias": "帽沿宽度l(mm)"}, {"name": "L0", "unit": "mm", "alias": "轨距的一半L0(mm)"}] {"input": ["S1"], "output": ["L"]} L=(X0*S1)/S-l+L0 {"input": [{"name": "S1", "unit": "mm"}], "output": [{"name": "L", "unit": "mm"}]} \N
+141 振动等效声级计算 phy={soundLevel,arrAcc} \N [] {"input": [""], "output": [""]} \N \N \N
+220 支撑轴力计算(温度平均) Nc=δ(Ec*Ac/Ei+Ai),δ=(∑[k*(fi^2-f0^2)/Aj])/n;Δt=Δt,Δt=AVG(tv) \N [{"name": "Ec", "alias": "混凝土弹性模量(kN/mm^2)"}, {"name": "Es", "alias": "钢筋弹性模量(kN/mm^2)"}, {"name": "Ac", "alias": "混凝土净截面面积(mm^2)"}, {"name": "As", "alias": "钢筋总面积(mm^2)"}] {"input": ["δi", "tv"], "output": ["Nc", "Δt"]} Nc=δ(Ec*Ac/Es+As),δ=AVG(δi),Δt=AVG(tv) {"input": [{"name": "δi", "unit": "kN/mm^2"}, {"name": "tv"}], "output": [{"name": "Nc", "unit": "kN"}, {"name": "Δt"}]} \N
+142 空气数据修正公式 V=k*x+c \N [{"name": "k_no2", "alias": "no2修正系数", "default": 1}, {"name": "c_no2", "alias": "no2修正常数项", "default": 0}, {"name": "k_so2", "alias": "so2修正系数", "default": 1}, {"name": "c_so2", "alias": "so2修正常数项", "default": 0}, {"name": "k_o3", "alias": "o3修正系数", "default": 1}, {"name": "c_o3", "alias": "o3修正常数项", "default": 0}, {"name": "k_co", "alias": "co修正系数", "default": 1}, {"name": "c_co", "alias": "co修正常数项", "default": 0}] {"input": ["no2", "so2", "o3", "co"], "output": ["v_no2", "v_so2", "v_o3", "v_co"]} v_no2=k_no2*no2+c_no2;v_so2=k_so2*so2+c_so2;v_o3=k_o3*o3+c_o3;v_co=k_co*co+c_co; {"input": [{"name": "no2"}, {"name": "so2"}, {"name": "o3"}, {"name": "co"}], "output": [{"name": "v_no2"}, {"name": "v_so2"}, {"name": "v_o3"}, {"name": "v_co"}]} \N
+144 水位插值计算 Δh=(Pi-P0)/(ρ*g)+H0;V=(V2-V1)/(h2-h1)*(Δh-h1)+V1 \N [{"name": "ρ", "unit": "10^3kg/m^3", "alias": "密度(10^3kg/m^3)"}, {"name": "P0", "unit": "kPa", "alias": "压强初值(kPa)"}, {"name": "H0", "unit": "m", "alias": "安装高程(m)"}, {"name": "_index", "alias": "插值队列索引"}] {"input": ["Pi"], "output": ["V"]} Δh=(Pi-P0)/(ρ*g)+H0;V=(V2-V1)/(h2-h1)*(Δh-h1)+V1 {"input": [{"name": "Pi", "unit": "KPa"}], "output": [{"name": "V"}]} \N
+145 昊胜静力水准仪沉降计算 ΔH=(H-h0)/ρ \N [{"name": "ρ", "unit": "", "alias": "防冻液密度和水密度的比值"}, {"name": "h0", "unit": "mm", "alias": "初始值(mm)"}] {"input": ["H"], "output": ["ΔH"]} ΔH=(H-h0)/ρ {"input": [{"name": "H", "unit": "mm"}], "output": [{"name": "ΔH", "unit": "mm"}]} \N
+222 三向振动极值 x=pv(x);y=pv(y);z=pv(z); \N [] {"input": [""], "output": [""]} \N \N \N
+147 三向测斜公式 Δl=c*[sin(αi)-sin(α0)] \N [{"name": "c", "unit": "mm", "alias": "杆间距离(mm)"}, {"name": "xα0", "unit": "°", "alias": "x方向角度初值(°)"}, {"name": "yα0", "unit": "°", "alias": "y方向角度初值(°)"}, {"name": "zα0", "unit": "°", "alias": "z方向角度初值(°)"}] {"input": ["αx", "αy", "αz"], "output": ["x", "y", "z"]} x=c*(sin(αx*π/180)-sin(xα0*π/180));y=c*(sin(αy*π/180)-sin(yα0*π/180));z=c*(sin(αz*π/180)-sin(zα0*π/180)) {"input": [{"name": "αx", "unit": "°"}, {"name": "αy", "unit": "°"}, {"name": "αz", "unit": "°"}], "output": [{"name": "x", "unit": "mm"}, {"name": "y", "unit": "mm"}, {"name": "z", "unit": "mm"}]} \N
+148 动应变计算公式 r=(i-p)*u/d 动应变计算公式 [{"name": "u", "unit": "mV/V", "alias": "灵敏度系数"}, {"name": "d", "unit": "V", "alias": "供电电压"}, {"name": "p", "unit": "mV", "alias": "原始电压值"}] {"input": ["i"], "output": ["r"]} r=(i-p)*u/d {"input": [{"name": "i", "unit": "mV"}], "output": [{"name": "r"}]} \N
+150 水位系数公式 H=h/ρ+h0 \N [{"name": "h0", "alias": "传感器安装高度(mm)"}, {"name": "ρ", "alias": "计算系数"}] {"input": ["h"], "output": ["H"]} H=h/ρ+h0 {"input": [{"name": "h", "unit": "mm"}], "output": [{"name": "H", "unit": "mm"}]} \N
+\.
+
+
+--
+-- Data for Name: t_factor_proto_device; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_factor_proto_device (id, proto, iota_product_code, formula, fields, multi, multi_formula, multi_fields, input_unitconvert) FROM stdin;
+1 1004 3bf186e9-5049-40e4-ba57-b40d90cd1543 \N {"temp": "temperature"} f \N \N \N
+2 4006 d3245ff1-0781-49bd-b37c-e245a350a709 101 {"x": "angle", "angleX": "xi"} f \N \N \N
+5 4007 1c210656-dc67-470f-b8c3-d653c82e3bb0 101 {"angleX": "xi", "angleY": "yi"} f \N \N \N
+6 4005 c094bbbe-bc2a-4223-bba7-539edb03d3b0 102 {"angleX": "αx", "angleY": "αy"} f \N \N \N
+7 4007 c094bbbe-bc2a-4223-bba7-539edb03d3b0 101 {"angleX": "xi", "angleY": "yi"} f \N \N \N
+8 4005 d32b2513-a8bb-465c-aabf-0832f355ef6b 102 {"AngleX": "αx", "AngleY": "αy"} f \N \N \N
+9 4007 d32b2513-a8bb-465c-aabf-0832f355ef6b 101 {"AngleX": "xi", "AngleY": "yi"} f \N \N \N
+10 4007 7e6111e8-0a68-4af8-92ae-6238b7f3c631 101 {"angleX": "xi", "angleY": "yi"} f \N \N \N
+11 1002 6f16c6fa-6d60-481b-95ec-e450227fe268 \N {"humi": "humidity", "temp": "temperature"} f \N \N \N
+12 1004 6f16c6fa-6d60-481b-95ec-e450227fe268 \N {"temp": "temperature"} f \N \N \N
+13 1006 6f16c6fa-6d60-481b-95ec-e450227fe268 \N {"humi": "humidity"} f \N \N \N
+14 4001 eb1c1781-cea9-411f-8c15-39aafc8ee62c 104 {"Δh": "displacement", "Pressure": "Pi"} f \N \N \N
+15 4009 0357e07d-3afb-4d4b-b196-766688a5b2b2 117 {"phy": "expansion", "elongationIndicator": "DAQi"} f \N \N \N
+19 1022 d523046b-7e32-486b-a1ab-cac779eb6209 \N {"windSpeed": "speed"} f \N \N \N
+21 1007 a8a32974-fa53-4e18-a264-58c885d3c409 \N {"noise": "soundLevel"} f \N \N \N
+22 4001 65bd339b-0469-4019-8c96-55a6dbc6b697 101 {"length": "displacement"} f \N \N \N
+23 1003 003540d0-616c-4611-92c1-1cd31005eabf \N {"rainFall": "rainfall"} f \N \N \N
+24 1002 c7528fab-94f4-4110-9aaf-8964afa09c20 \N {"humi": "humidity", "temp": "temperature"} f \N \N \N
+25 1004 c7528fab-94f4-4110-9aaf-8964afa09c20 \N {"temp": "temperature"} f \N \N \N
+26 1006 c7528fab-94f4-4110-9aaf-8964afa09c20 \N {"humi": "humidity"} f \N \N \N
+30 4005 ae93a369-2ef8-4e20-83d6-d2f89076b115 102 {"xDegree": "αx", "yDegree": "αy"} f \N \N \N
+31 4007 ae93a369-2ef8-4e20-83d6-d2f89076b115 101 {"xDegree": "xi", "yDegree": "yi"} f \N \N \N
+35 1002 f672fbb3-ce35-4c54-8e37-b50ce49c8978 \N {"Hum": "humidity", "Temp": "temperature"} f \N \N \N
+36 1004 f672fbb3-ce35-4c54-8e37-b50ce49c8978 \N {"Temp": "temperature"} f \N \N \N
+37 1006 f672fbb3-ce35-4c54-8e37-b50ce49c8978 \N {"Hum": "humidity"} f \N \N \N
+38 4001 584a210b-20f2-49cf-906a-9d6b4883af09 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+39 4004 584a210b-20f2-49cf-906a-9d6b4883af09 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+40 3001 abd08d4d-9de2-4f58-88be-94ec9aff0304 \N {"force": "strain"} f \N \N \N
+41 4008 a0bf9003-9dbd-4cc7-8bea-7da81ce69f32 116 {"phy": "crack", "elongationIndicator": "DAQi"} f \N \N \N
+42 4009 a0bf9003-9dbd-4cc7-8bea-7da81ce69f32 116 {"phy": "expansion", "elongationIndicator": "DAQi"} f \N \N \N
+43 4008 2bee8b28-3a7d-4a6d-96e7-e81b94afa48c 117 {"phy": "crack", "elongationIndicator": "DAQi"} f \N \N \N
+44 4009 2bee8b28-3a7d-4a6d-96e7-e81b94afa48c 117 {"phy": "expansion", "elongationIndicator": "DAQi"} f \N \N \N
+45 1001 1d4b6c8a-8a37-4ba0-9612-ad63ea6f1f3a \N {"windSpeed": "speed", "windDirection": "direction"} f \N \N \N
+46 1022 1d4b6c8a-8a37-4ba0-9612-ad63ea6f1f3a \N {"windSpeed": "speed"} f \N \N \N
+50 4001 0a25e0b7-784b-46fb-8fa3-d1a99593f343 111 {"phy": "displacement", "length": "Ci"} f \N {} \N
+51 4011 0a25e0b7-784b-46fb-8fa3-d1a99593f343 \N \N f \N \N \N
+52 4005 28abcb7f-eb40-406b-a798-fc280b30638e 102 {"xDegree": "αx", "yDegree": "αy"} f \N \N \N
+53 4007 28abcb7f-eb40-406b-a798-fc280b30638e 101 {"xDegree": "xi", "yDegree": "yi"} f \N \N \N
+54 4005 3e462bff-8f09-4e70-90e3-231a08906309 102 {"xDegree": "αx", "YyDegree": "αy"} f \N \N \N
+55 4007 3e462bff-8f09-4e70-90e3-231a08906309 101 {"xDegree": "xi", "YyDegree": "yi"} f \N \N \N
+56 1002 b3f251c1-ab5e-4427-8b38-9180d6544783 \N {"temp": "temperature", "humid": "humidity"} f \N \N \N
+57 1004 b3f251c1-ab5e-4427-8b38-9180d6544783 \N {"temp": "temperature"} f \N \N \N
+58 1006 b3f251c1-ab5e-4427-8b38-9180d6544783 \N {"humid": "humidity"} f \N \N \N
+59 1004 193a9dcf-959d-4cd5-a186-637c11ae97a0 \N {"temp": "temperature"} f \N \N \N
+69 1004 131c98fc-2216-4f0f-9cd3-581d88f9affd \N {"temp": "temperature"} f \N \N \N
+70 1006 131c98fc-2216-4f0f-9cd3-581d88f9affd \N {"humid": "humidity"} f \N \N \N
+71 4001 38d818a3-1e2d-42bd-af74-e6ed5fe0c8fd 119 {"Δh": "displacement", "length": "Li"} f \N \N \N
+72 1004 be246ea1-fd75-4151-92c6-54b278d11287 \N {"temp": "temperature"} f \N \N \N
+73 1002 34e17d2c-cfa7-42a7-88d0-fc64f13f68c2 \N {"Hum": "humidity", "Temp": "temperature"} f \N \N \N
+74 1004 34e17d2c-cfa7-42a7-88d0-fc64f13f68c2 \N {"Temp": "temperature"} f \N \N \N
+75 1006 34e17d2c-cfa7-42a7-88d0-fc64f13f68c2 \N {"Hum": "humidity"} f \N \N \N
+76 2004 002f9d36-6c13-406f-aa9d-c1c53e4c0d50 \N {} t 204 {"Nc": "force", "force": "δi"} \N
+78 4007 c52cea56-d5aa-4b14-ad9f-05fb6974e528 \N {"xDegree": "x", "yDegree": "y"} f \N \N \N
+79 4007 43e2a07a-c33e-4e54-ba5e-0a948ae4ba61 \N {"xDegree": "x", "yDegree": "y"} f \N \N \N
+80 1002 8ae3c80d-72ae-4e4f-b6e7-fd2dda6cc125 \N {"humidity": "humidity", "temperature": "temperature"} f \N \N \N
+81 1012 8ae3c80d-72ae-4e4f-b6e7-fd2dda6cc125 \N {"pressure": "pressure"} f \N \N \N
+82 1026 3f80f427-4615-44ae-b2e8-e783733d0ea5 \N {"value": "concentration"} f \N \N \N
+87 4007 96870c78-2ed9-4141-9438-e9415cd6eeb8 \N {"xDegree": "x", "yDegree": "y"} f \N \N \N
+94 4001 701ab719-e85b-4428-ad59-1b7adff31c56 117 {"phy": "displacement", "settlement": "DAQi"} f \N \N \N
+66 2001 870242c3-963d-417d-85fa-21add06c9e0a \N {"cableforce": "cableForce"} f \N \N \N
+16 1001 fd8e5a82-2b93-4d83-9132-4666b974079d \N {"windSpeed": "speed", "windDirection": "direction"} f \N \N \N
+27 1002 497ca51c-dd0a-46cb-8651-ac4bb7bd45c0 \N {"hum": "humidity", "temp": "temperature"} f \N \N \N
+28 1004 497ca51c-dd0a-46cb-8651-ac4bb7bd45c0 \N {"temp": "temperature"} f \N \N \N
+29 1006 497ca51c-dd0a-46cb-8651-ac4bb7bd45c0 \N {"hum": "humidity"} f \N \N \N
+17 1022 fd8e5a82-2b93-4d83-9132-4666b974079d \N {"windSpeed": "speed"} f \N \N \N
+18 4001 e833a38c-2409-474d-8d23-86ff4d45b199 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+33 4005 77d3bafd-4986-4848-b3c9-dfe847c6750e 102 {"angleX": "αx", "angleY": "αy"} f \N \N \N
+34 4007 77d3bafd-4986-4848-b3c9-dfe847c6750e 101 {"angleX": "xi", "angleY": "yi"} f \N \N \N
+68 1002 131c98fc-2216-4f0f-9cd3-581d88f9affd \N {"humidity": "humidity", "temperature": "temperature"} f \N \N \N
+67 3001 9110f259-e269-446d-afa3-798069f4534d \N {"physicalvalue": "strain"} f \N \N \N
+47 4001 c9946e27-bce7-41eb-b341-d6b03a7f115f 102 {"x": "displacement", "anglex": "αx"} f \N \N \N
+48 4005 c9946e27-bce7-41eb-b341-d6b03a7f115f 102 {"anglex": "αx", "angley": "αy"} f \N \N \N
+63 4006 9e8050a9-f38a-45c3-a02b-40670bdf19b7 \N {"anglex": "angle"} f \N \N \N
+62 4005 9e8050a9-f38a-45c3-a02b-40670bdf19b7 102 {"anglex": "αx", "angley": "αy"} f \N \N \N
+60 4001 9e8050a9-f38a-45c3-a02b-40670bdf19b7 102 {"x": "displacement", "anglex": "αx"} f \N \N \N
+49 4007 c9946e27-bce7-41eb-b341-d6b03a7f115f 101 {"anglex": "xi", "angley": "yi"} f \N \N \N
+3 4005 fd3ad887-4a33-4d80-b3bb-d5d48ced0e7b 102 {"anglex": "αx", "angley": "αy"} f \N \N \N
+4 4007 fd3ad887-4a33-4d80-b3bb-d5d48ced0e7b 101 {"anglex": "xi", "angley": "yi"} f \N \N \N
+83 1018 f86c7d29-f504-474d-8665-d484e5c41e8a \N {"co2": "concentration"} f \N \N \N
+84 1020 cff552ac-d565-4a44-8400-e0f4382ce853 \N {"illuminance": "lumen"} f \N \N \N
+85 4007 dfbedf15-8cef-4760-9cad-efaab883db3d \N {"xDegree": "x", "yDegree": "y"} f \N \N \N
+86 4002 409f2510-dd44-4990-b530-096bf2bcb592 \N {"strain": "y", "displacement": "x"} f \N \N \N
+88 1027 abb38d23-09f3-48fc-b9ee-4dfaf1db995b \N {"PM10": "pm10", "PM25": "pm25"} f \N \N \N
+89 2003 6aa982a5-d7a3-48ee-b1dc-afe4686ce796 \N {"force": "pressure"} f \N \N \N
+90 1027 61db6668-b790-47e8-9429-55bfa4f98b90 \N {"TSP": "suspended", "PM10": "pm10", "PM25": "pm25"} f \N \N \N
+92 4004 4d48086d-804a-426d-9867-0e87efdc74fe \N {"settlement": "deflection"} f \N \N \N
+93 4003 7776a9dc-8e14-417c-a5fe-4b1dd1c869d7 109 {"x": "x", "y": "y", "z": "z"} f \N \N \N
+91 4001 4d48086d-804a-426d-9867-0e87efdc74fe 117 {"phy": "displacement", "settlement": "DAQi"} f \N \N \N
+95 1027 57bf451a-e6f5-4df5-a4a7-c2c42a46546f \N {"PM10": "pm10", "PM25": "pm25"} f \N \N \N
+97 1028 7c1b8df9-4088-4cc7-b07b-3299d827d7d0 \N {"temp": "temp", "thickness": "thickness"} f \N \N \N
+98 1017 9604d366-28f8-4291-a5bd-5d049b1e90eb \N {"concentration": "concentration"} f \N \N \N
+99 1018 9604d366-28f8-4291-a5bd-5d049b1e90eb \N {"concentration": "concentration"} f \N \N \N
+103 4007 7c4c667b-dbf0-4c9b-9d7d-7ad9b61b200e \N {"xDegree": "x", "yDegree": "y"} f \N \N \N
+104 1005 8e782506-4bab-4798-9e24-315107e3cc15 \N {"pressure": "waterLevel"} f \N \N \N
+105 1014 d51cfe97-0f8a-4f38-95fb-34208b171056 \N {"flow": "instant", "cumulant": "total"} f \N \N \N
+106 1014 ab34de76-f758-4311-8bfc-dc7054a58ecf \N {"standardTotalFlow": "total", "standardInstanceFlow": "instant"} f \N \N \N
+107 1020 05d70310-6689-4174-b4ae-274ab5e8f287 \N {"illumination": "lumen"} f \N \N \N
+108 1018 ed599be6-4811-4a09-a065-4b29586a4c00 \N {"concentration": "concentration"} f \N \N \N
+109 4008 e7a84149-53b0-4ba3-88e7-fe7e0e0f21d4 \N {"lvdt": "crack"} f \N \N \N
+111 4005 fb1119c8-c430-4066-9f02-60a558d92a68 102 {"y": "y", "phy": "αy"} f \N \N \N
+110 4001 112843b4-e834-4892-9ef3-260fe3d90c24 116 {"phy": "displacement", "height": "DAQi"} f \N \N \N
+113 3001 9e56c900-b85f-4abd-b53f-3162016875ad \N {"value1": "strain"} f \N \N \N
+125 1005 d8860bee-374c-497a-a33a-258af59e3690 103 {"H": "waterLevel", "physicalvalue": "h"} f \N \N \N
+115 4007 c02185df-1224-4e63-aab4-3d284c8bb526 \N {"angleX": "x", "angleY": "y"} f \N \N \N
+116 4007 42fbfa5f-4ca7-4e1d-b42f-08f4f641657a \N {"angleX": "x", "angleY": "y"} f \N \N \N
+117 4007 e47f8159-ee4b-45c0-b827-30b69d0328d8 \N {"angleX": "x", "angleY": "y"} f \N \N \N
+118 4007 ff38a597-0318-47bb-a647-5ad78dd2dca8 \N {"angleX": "x", "angleY": "y"} f \N \N \N
+119 4007 addad535-5578-4010-9d74-dbeab2b9e9eb \N {"angleX": "x", "angleY": "y"} f \N \N \N
+120 4007 70177dd0-b5ab-45c0-8338-a6f69138f85f \N {"angleX": "x", "angleY": "y"} f \N \N \N
+121 4007 72b0bf25-78ae-4ab5-995b-c83cfbf52484 \N {"angleX": "x", "angleY": "y"} f \N \N \N
+122 4007 0bae88b4-e518-4869-96ea-c833160a9914 \N {"angleX": "x", "angleY": "y"} f \N \N \N
+123 4007 0d123bba-3d2e-4252-a27e-af567da8aca1 \N {"angleX": "x", "angleY": "y"} f \N \N \N
+132 1004 22d007b2-5200-4bf6-85dc-c755a7a75bcf \N {"temperature": "temperature"} f \N \N \N
+133 2002 6f1f679a-d9b7-4fe3-945d-8b83105284a8 \N \N f \N \N \N
+134 4007 fb1119c8-c430-4066-9f02-60a558d92a68 \N \N t 214 \N \N
+135 4010 77d3bafd-4986-4848-b3c9-dfe847c6750e \N \N t 212 {"Ha": "a", "Hb": "b", "Hc": "c", "Hd": "d", "angX": "x", "angY": "y", "angleX": "θx", "angleY": "θy"} \N
+136 4010 28abcb7f-eb40-406b-a798-fc280b30638e \N \N t 212 {"Ha": "a", "Hb": "b", "Hc": "c", "Hd": "d", "angX": "x", "angY": "y", "xDegree": "θx", "yDegree": "θy"} \N
+137 4001 ac32d002-0463-4bc7-a307-86236e6307a7 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+138 4004 ac32d002-0463-4bc7-a307-86236e6307a7 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+139 4001 0aae766a-5d82-479a-bd71-7eb1e0e4e20f 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+140 4004 0aae766a-5d82-479a-bd71-7eb1e0e4e20f 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+141 4001 91372b00-3bf7-4eb0-9495-ad544dfb04ca 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+142 4004 91372b00-3bf7-4eb0-9495-ad544dfb04ca 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+143 4001 e8d9a100-9650-4afc-a260-9c7bcdea9263 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+144 4004 e8d9a100-9650-4afc-a260-9c7bcdea9263 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+145 4001 f3ad3df8-e1ad-4e05-b479-185ac5ae8602 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+146 4004 f3ad3df8-e1ad-4e05-b479-185ac5ae8602 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+147 4001 0c5d070d-fb83-4f78-acc0-a0bd12be6cc2 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+148 4004 0c5d070d-fb83-4f78-acc0-a0bd12be6cc2 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+149 4001 13126536-b6af-48d0-b43e-25144b65dd8d 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+150 4004 13126536-b6af-48d0-b43e-25144b65dd8d 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+77 1002 e5b27a73-2d4c-4b53-8bcd-86583097a730 \N {"humi": "humidity", "temp": "temperature"} f \N \N \N
+151 4001 16ca7eed-6c64-4c4b-a495-6c5f785b86cd 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+152 4004 16ca7eed-6c64-4c4b-a495-6c5f785b86cd 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+153 4001 4d523084-bf91-421f-bafc-f278a63c5541 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+154 4004 4d523084-bf91-421f-bafc-f278a63c5541 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+96 4001 b56e401a-75e7-47ea-84db-6638fd421792 117 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+156 4007 ef4d9187-0ca8-44c7-b7f5-42e6c0904fd5 \N {"angleX": "x", "angleY": "y"} f \N \N \N
+157 4007 79ef29a0-9796-43ce-957d-952d3b16d70a \N {"angleX": "x", "angleY": "y"} f \N \N \N
+158 4007 abefa36d-6587-4818-bb39-e14a51c26b4e \N {"angleX": "x", "angleY": "y"} f \N \N \N
+160 4006 ef4d9187-0ca8-44c7-b7f5-42e6c0904fd5 \N {"angleX": "angle"} f \N \N \N
+161 4006 79ef29a0-9796-43ce-957d-952d3b16d70a \N {"angleX": "angle"} f \N \N \N
+162 4006 abefa36d-6587-4818-bb39-e14a51c26b4e \N {"angleX": "angle"} f \N \N \N
+164 1002 ddf17ba9-fcef-4ef4-97f0-c09e0503dfa3 \N {"humi": "humidity", "temp": "temperature"} f \N \N \N
+165 4008 3eb1b2e4-ba3a-4329-a821-33a7f5bec873 117 {"phy": "crack", "value": "DAQi"} f \N \N \N
+166 1002 85ba72e3-3754-4b11-a144-757d7a01f1dc \N {"temp": "temperature", "value": "humidity"} f \N \N \N
+114 4001 1f00228f-9138-4060-9b9b-1ae22f803af7 117 {"phy": "displacement", "level": "DAQi"} f \N \N \N
+124 2003 660c0ba2-d714-4ad3-8166-a1fa25a9d7d1 \N {"physicalvalue": "pressure"} f \N \N \N
+112 3001 e8ccf6dc-5626-4bb7-9f88-9bf8972619b4 \N {"physicalvalue": "strain"} f \N \N \N
+131 3001 d77b7e20-7877-47dc-aef4-37a663bac660 \N {"physicalvalue": "strain"} f \N \N \N
+127 3001 17c35362-c638-46de-bea3-840893daf864 \N {"physicalvalue": "strain"} f \N \N \N
+155 4008 10f69514-4a4b-4ecd-a318-f8bf0c81a965 \N {"physicalvalue": "crack"} f \N \N \N
+167 3001 70ed36c0-d58f-482d-8337-fafed8a2e6ac 100 {"phy": "strain", "value": "DAQi"} f \N \N \N
+163 4006 c0b0b779-cafb-4d7f-b4ff-64534e422738 \N {"anglex": "angle"} f \N \N \N
+159 4007 c0b0b779-cafb-4d7f-b4ff-64534e422738 \N {"anglex": "x", "angley": "y"} f \N \N \N
+102 1004 235b7fe6-cf6f-4cf4-8d40-a3103cc0fba7 \N {"physicalvalue": "temperature"} f \N \N \N
+101 1012 dfffdb75-6ad1-4092-95d2-ac6596b3c4ce \N {"physicalvalue": "pressure"} f \N \N \N
+130 2004 ecfacbbe-037c-42cb-89ce-68a2e6170758 \N {} t 214 \N \N
+168 4001 14f67669-6cec-42c0-a7ca-4b60950ec7b5 117 {"phy": "displacement", "value": "DAQi"} f \N \N \N
+169 4001 e08c86d5-195d-4cf6-a1a5-1cfd113ddd52 117 {"phy": "displacement", "value": "DAQi"} f \N \N \N
+170 4007 f5d141ad-ea96-4398-8712-2a802af988f8 \N {"value": "x", "offsetValue": "y"} f \N \N \N
+171 1005 931fef11-654a-4f36-bf37-dbc168c46e84 104 {"Δh": "waterLevel", "value": "Pi"} f \N \N \N
+172 2003 931fef11-654a-4f36-bf37-dbc168c46e84 \N {"value": "pressure"} f \N \N \N
+173 2003 4d523084-bf91-421f-bafc-f278a63c5541 117 {"phy": "pressure", "pressure": "DAQi"} f \N \N \N
+174 1022 745e1f26-ee66-45dd-9606-052a34a944fc \N {"windSpeed": "speed"} f \N \N \N
+175 1018 67becf68-18c7-4ab3-83b2-d306f89bd25d \N {"smoke": "concentration"} f \N \N \N
+176 4001 e58ee78a-e499-483c-acc8-a42683d62149 \N {"phy": "displacement"} f \N \N \N
+32 4001 f9cf9002-bdbd-458c-8534-37db6183e217 117 {"phy": "displacement", "distance": "DAQi"} f \N \N \N
+178 4001 1c332609-ad1d-4066-b0fa-67df29181432 117 {"phy": "displacement", "distance": "DAQi"} f \N \N \N
+179 2004 b1c85f0b-c610-4243-83a4-3a1e87b411ad \N {"phy": "force"} f \N \N \N
+180 2004 f0b38ea6-f88e-4e79-b7bb-02d09ef2cf03 \N {"phy": "force"} f \N \N \N
+181 2004 92d06569-3e06-4ceb-91e5-d28589632145 \N {"phy": "force"} f \N \N \N
+235 2004 b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 \N {"physicalvalue": "force"} f \N {} \N
+183 4011 1c332609-ad1d-4066-b0fa-67df29181432 117 {"phy": "displacement", "distance": "DAQi"} f \N \N \N
+184 4001 d87be87a-12ba-4e65-97ba-816bcb3e2e62 \N {"value": "displacement"} f \N \N \N
+185 3001 c98659b5-30ec-471f-9654-41f5f8df47b0 \N {"value": "strain"} f \N \N \N
+186 4007 7fefd73e-8fd9-48a6-8d7a-76f5796a8197 \N \N t 214 {"value": "v"} \N
+187 4007 fdf34922-d64e-4616-9313-96d7d94b8412 \N \N t 214 {"value": "v"} \N
+188 1008 24b365fd-4e6e-4800-ad48-d3f082c9b2b8 106 {"v": "seepage", "pressure": "p"} f \N \N \N
+189 1008 e015d9d3-542e-4d54-80c6-39db4ba20877 106 {"v": "seepage", "pressure": "p"} f \N \N \N
+190 1008 65f4e736-8261-40cc-b3b8-948ab0e4252e 106 {"v": "seepage", "pressure": "p"} f \N \N \N
+191 1008 6bd546bc-55b0-4ee4-8b58-34feec8cdb6c 106 {"v": "seepage", "pressure": "p"} f \N \N \N
+192 1008 3462227d-e989-421c-9f48-c0ae7a573b78 106 {"v": "seepage", "pressure": "p"} f \N \N \N
+193 1008 16ca7eed-6c64-4c4b-a495-6c5f785b86cd 106 {"v": "seepage", "pressure": "p"} f \N \N \N
+194 1008 13126536-b6af-48d0-b43e-25144b65dd8d 106 {"v": "seepage", "pressure": "p"} f \N \N \N
+195 1008 0c5d070d-fb83-4f78-acc0-a0bd12be6cc2 106 {"v": "seepage", "pressure": "p"} f \N \N \N
+197 1008 e8d9a100-9650-4afc-a260-9c7bcdea9263 106 {"v": "seepage", "pressure": "p"} f \N \N \N
+198 1008 d7912272-424d-4546-a3c1-43a24365dde0 106 {"v": "seepage", "pressure": "p"} f \N \N \N
+199 1008 91372b00-3bf7-4eb0-9495-ad544dfb04ca 106 {"v": "seepage", "pressure": "p"} f \N \N \N
+200 1008 0aae766a-5d82-479a-bd71-7eb1e0e4e20f 106 {"v": "seepage", "pressure": "p"} f \N \N \N
+201 1008 ac32d002-0463-4bc7-a307-86236e6307a7 106 {"v": "seepage", "pressure": "p"} f \N \N \N
+202 1008 584a210b-20f2-49cf-906a-9d6b4883af09 106 {"v": "seepage", "pressure": "p"} f \N \N \N
+177 4004 d148ae2e-c0dd-4e57-a0e8-833d32107f31 100 {"phy": "deflection", "level": "DAQi"} f \N \N \N
+204 4004 a8e0db23-0d35-4eb1-a5b8-deadd9c3d80d 117 {"phy": "deflection", "settlement": "DAQi"} f \N \N \N
+208 1018 ad41eeec-8dff-4cbb-9a3a-8d42db92bca8 \N {"concentration": "concentration"} f \N \N \N
+209 1018 6bf32a53-c1d4-4014-b0b9-da1af43bda76 \N {"concentration": "concentration"} f \N \N \N
+210 1018 676795c3-0d71-441d-aa0e-62b82dff8193 \N {"concentration": "concentration"} f \N \N \N
+211 1018 ac8a15b2-1daa-48ce-b77f-52e2429c66bd \N {"concentration": "concentration"} f \N \N \N
+212 1026 5e96e066-3520-443f-80a4-9a3a1a7badd6 \N {"concentration": "concentration"} f \N \N \N
+213 1026 2f8c4ab2-42a9-44d8-bd3d-cfa9d1f55252 \N {"concentration": "concentration"} f \N \N \N
+214 1004 1cdf6eb6-fcd9-4346-992d-6ddc41b956cf \N {"concentration": "temperature"} f \N \N \N
+215 1006 3da31fde-9ea8-406f-9a1b-4a9932dbc2df \N {"concentration": "humidity"} f \N \N \N
+216 1006 f55d7414-2db9-4c07-ad9b-34637318171e \N {"humi": "humidity"} f \N \N \N
+217 1004 608c11f3-91d9-4d92-9459-a4f7eb20bf1d \N {"phy": "temperature"} f \N \N \N
+218 3001 608c11f3-91d9-4d92-9459-a4f7eb20bf1d \N {"phy": "strain"} f \N \N \N
+219 1004 947fdddf-6d80-4972-88cc-601559ca3458 \N {"phy": "temperature"} f \N \N \N
+220 3001 947fdddf-6d80-4972-88cc-601559ca3458 \N {"phy": "strain"} f \N \N \N
+221 4005 771be2fa-a2f9-4ba8-8c08-76b091627b87 102 {"xDegree": "αx", "yDegree": "αy"} f \N \N \N
+222 1004 cb339f74-5895-4180-a0dc-a3cf12151b0b \N {"temp": "temperature"} f \N \N \N
+225 4001 448efd11-ceec-4f64-93a0-ad7133e38b8d \N {"phy": "displacement"} f \N \N \N
+227 4001 2e2456a6-9738-456c-abf1-94d5ebad124a 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+228 4001 0f4f59de-cde7-4aec-a402-703e5426bb76 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+229 4001 cef1d2a2-c44e-4143-84bd-2a65140e33d0 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+230 4001 9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+231 3001 61165e71-48f1-4c09-835c-9b72dbc867b5 \N {"force": "strain"} f \N \N \N
+232 3001 5bac98f9-a11e-447c-a180-0f039480625e \N {"force": "strain"} f \N \N \N
+233 3001 2e030981-497c-4ba5-9580-2438239e32bc \N {"force": "strain"} f \N \N \N
+245 1005 157090bc-b53c-4ae3-94fc-4b3804ed6433 100 {"phy": "DAQi"} f \N \N \N
+246 4007 684a2261-481c-4504-9f4b-665baf97aae6 \N {"value1": "x", "value2": "y"} f \N \N \N
+247 4005 684a2261-481c-4504-9f4b-665baf97aae6 102 {"value1": "αx", "value2": "αy"} f \N \N \N
+248 1002 c36c08c3-4f22-474e-b748-c6c32288c802 \N {"data1": "temperature", "data2": "humidity"} f \N \N \N
+249 1002 2b6f224d-770e-41bc-b28b-5afbe3b213c4 \N {"data1": "temperature", "data2": "humidity"} f \N \N \N
+250 1022 09e8eef6-6b70-4cda-84c2-a7680f7a535f \N {"data2": "speed"} f \N \N \N
+325 1002 2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b \N {"temp": "temperature", "humidity": "humidity"} f \N \N \N
+205 3001 cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3 \N {"physicalvalue": "strain"} f \N \N \N
+224 2004 d14c6b02-4298-4713-b970-eba0aafee88b 113 {"F": "force", "physicalvalue": "ε"} f \N \N \N
+223 4001 35d1f34b-ccac-4110-9bb6-7e0a3327ef18 \N {"physicalvalue": "displacement"} f \N \N \N
+234 2004 73a7b800-25d7-41ad-872d-96cc4f9430de \N {"physicalvalue": "force"} f \N {} \N
+206 3001 11f0a3dc-13ad-4c40-ae16-1b2f1d139564 \N {"physicalvalue": "strain"} f \N \N \N
+207 3001 13ee1f91-04cc-48af-820e-ffc0ed179b6c \N {"physicalvalue": "strain"} f \N \N \N
+412 1022 bfc79caf-826f-4f9d-a709-241529e118b5 \N {"windSpeed": "speed"} f \N \N \N
+203 4001 a8e0db23-0d35-4eb1-a5b8-deadd9c3d80d 117 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+196 1008 f3ad3df8-e1ad-4e05-b479-185ac5ae8602 106 {"v": "seepage", "pressure": "p"} f \N \N \N
+226 4002 d32eacce-7db0-4c15-b17c-f1d870389c14 121 {"anglex": "αx", "angley": "αy"} f \N \N \N
+251 6001 2078f06f-be3c-4d10-90b1-200f3bdb00ae \N {"mainCurrt": "electricity", "mainSpeed": "rotateSpeed", "mainTorque": "torque", "mainWeight": "weight", "mainVoltage": "outputVoltage", "mainGVoltage": "busbarVoltage", "mainPosition": "location"} f \N \N \N
+252 6002 2078f06f-be3c-4d10-90b1-200f3bdb00ae \N {"deputyWeight": "weight", "deputyPosition": "location"} f \N \N \N
+253 6003 2078f06f-be3c-4d10-90b1-200f3bdb00ae \N {"lCarCurrt": "electricity", "lCarSpeed": "rotateSpeed", "lCarTorque": "torque", "lCarVoltage": "outputVoltage", "lCarGVoltage": "busbarVoltage", "lCarPosition": "location"} f \N \N \N
+335 1004 b475bf8f-00a0-457f-ad96-95b187dba62f \N {"temp": "temperature"} f \N \N \N
+336 1006 b475bf8f-00a0-457f-ad96-95b187dba62f \N {"humidity": "humidity"} f \N \N \N
+254 6004 2078f06f-be3c-4d10-90b1-200f3bdb00ae \N {"sCarCurrt": "electricity", "sCarSpeed": "rotateSpeed", "sCarTorque": "torque", "sCarVoltage": "outputVoltage", "sCarGVoltage": "busbarVoltage", "sCarPosition": "location"} f \N \N \N
+255 1002 5f908b85-0f3a-48c0-bc83-8e191731a754 \N {"humi": "humidity", "temp": "temperature"} f \N \N \N
+256 4011 38d818a3-1e2d-42bd-af74-e6ed5fe0c8fd 201 {"Δh": "displacement", "length": "leni"} f \N \N \N
+263 2005 219cbb09-9c49-4167-846d-00a8bdfadb9a \N {"pressure": "gravity"} f \N \N \N
+264 4001 24b365fd-4e6e-4800-ad48-d3f082c9b2b8 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+265 4004 24b365fd-4e6e-4800-ad48-d3f082c9b2b8 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+266 4001 e015d9d3-542e-4d54-80c6-39db4ba20877 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+267 4004 e015d9d3-542e-4d54-80c6-39db4ba20877 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+268 4001 65f4e736-8261-40cc-b3b8-948ab0e4252e 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+269 4004 65f4e736-8261-40cc-b3b8-948ab0e4252e 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+270 4001 6bd546bc-55b0-4ee4-8b58-34feec8cdb6c 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+271 4004 6bd546bc-55b0-4ee4-8b58-34feec8cdb6c 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+272 4001 3462227d-e989-421c-9f48-c0ae7a573b78 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+273 4004 3462227d-e989-421c-9f48-c0ae7a573b78 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+274 4001 d7912272-424d-4546-a3c1-43a24365dde0 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+275 4004 d7912272-424d-4546-a3c1-43a24365dde0 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+20 4001 5bc92012-60a1-48ac-840f-575cb4e94c48 100 {"phy": "displacement", "distance": "DAQi"} f \N \N \N
+276 1013 8e782506-4bab-4798-9e24-315107e3cc15 \N {"pressure": "liquidLevel"} f \N \N \N
+278 4007 0c5bca0d-95b8-416e-865b-1f09bb49285f 101 {"xDegree": "xi", "yDegree": "yi"} f \N \N \N
+279 4005 0c5bca0d-95b8-416e-865b-1f09bb49285f 102 {"xDegree": "αx", "yDegree": "αy"} f \N \N \N
+280 1005 eccb6310-f340-4668-9469-3df210aa471d \N {"waterLevel": "waterLevel"} f \N \N \N
+281 1005 6850f742-c5b7-4984-b1ef-d01b16015eb9 100 {"phy": "waterLevel", "waterLevel": "DAQi"} f \N \N \N
+282 4004 6850f742-c5b7-4984-b1ef-d01b16015eb9 \N {"waterLevel": "deflection"} f \N \N \N
+283 1018 ac3a0caf-7018-44d2-9337-32c7194ec412 \N {"concentration": "concentration"} f \N \N \N
+284 1018 a96f169e-56b9-49c8-a5cd-caade25fbf14 \N {"concentration": "concentration"} f \N \N \N
+285 1018 3415a2e9-2c44-402f-872c-f0187cef058f \N {"concentration": "concentration"} f \N \N \N
+286 4001 cdf69820-94cb-45a3-acfe-21aa83737595 100 {"phy": "displacement", "location1": "DAQi"} f \N \N \N
+287 4004 cdf69820-94cb-45a3-acfe-21aa83737595 100 {"phy": "deflection", "location1": "DAQi"} f \N \N \N
+288 4001 831ab1f7-fe76-4152-b7a0-3359bdf7c3bd 100 {"phy": "displacement", "Offset": "DAQi"} f \N \N \N
+289 4004 831ab1f7-fe76-4152-b7a0-3359bdf7c3bd 100 {"phy": "deflection", "Offset": "DAQi"} f \N \N \N
+290 4005 7e6111e8-0a68-4af8-92ae-6238b7f3c631 102 {"angleX": "αx", "angleY": "αy"} f \N \N \N
+291 4002 7e6111e8-0a68-4af8-92ae-6238b7f3c631 102 {"angleX": "αx", "angleY": "αy"} f \N \N \N
+292 2002 ca7ff65b-b5a0-49f3-ad0b-6821012604ce \N \N f \N \N \N
+293 4008 fe65a1cd-2040-403c-bb6f-529d4063bc45 117 {"phy": "crack", "elongationIndicator": "DAQi"} f \N \N \N
+294 4008 f2c96428-649e-47e9-9b6f-e5749195cb33 117 {"phy": "crack", "elongationIndicator": "DAQi"} f \N \N \N
+295 1004 8d1d1382-984f-4aa9-8e57-c2a2c21e0c06 \N {"temp": "temperature"} f \N \N \N
+296 1022 e2d93988-c0e0-4581-b406-e43e455f7864 \N {"windSpeed": "speed"} f \N \N \N
+297 4001 93f84dd4-087b-46ef-bdda-9db4adfdb16b 100 {"phy": "displacement", "liquidLevel": "DAQi"} f \N \N \N
+298 4004 93f84dd4-087b-46ef-bdda-9db4adfdb16b 100 {"phy": "deflection", "liquidLevel": "DAQi"} f \N \N \N
+299 4001 40b8c657-2644-4ce2-b490-cf61523a4012 \N {"length": "displacement"} f \N \N \N
+300 4001 e889420f-f8d0-4e0d-aab2-1f2f965e75bb \N {"length": "displacement"} f \N \N \N
+301 4007 6c19e60e-0ed7-4e22-abb4-ddc9caf20d91 \N {"angleX": "x", "angleY": "y"} f \N \N \N
+302 4005 6c19e60e-0ed7-4e22-abb4-ddc9caf20d91 102 {"angleX": "αx", "angleY": "αy"} f \N \N \N
+303 4002 6c19e60e-0ed7-4e22-abb4-ddc9caf20d91 102 {"angleX": "αx", "angleY": "αy"} f \N \N \N
+304 1013 21d99b83-6a52-4465-90c4-125d8330e1c1 \N {"level": "liquidLevel"} f \N \N \N
+305 2003 aa86893b-e991-4c57-94a7-b29e7349fe50 \N {"weight": "pressure"} f \N \N \N
+306 4007 7118fecd-555d-4d6c-9b3a-63b6ed0d2a45 101 {"xDegree": "xi", "yDegree": "yi"} f \N \N \N
+307 4007 183c2cd5-5a53-4985-80aa-33a6ce2f82d4 101 {"angleX": "xi", "angleY": "yi"} f \N \N \N
+308 1016 5fcd559a-c3dc-4c38-acde-b4b1749b4ab3 \N {"ph": "ph"} f \N \N \N
+309 4007 ef2cc4b4-23d3-4ff0-981b-84a8c98113ab 101 {"angleX": "xi", "angleY": "yi"} f \N \N \N
+310 4002 ef2cc4b4-23d3-4ff0-981b-84a8c98113ab 102 {"angleX": "αx", "angleY": "αy"} f \N \N \N
+311 4005 ef2cc4b4-23d3-4ff0-981b-84a8c98113ab 102 {"angleX": "αx", "angleY": "αy"} f \N \N \N
+312 4011 d2e5e59c-47f9-4eb9-98ce-c6dc6f2f0d66 119 {"Δh": "displacement", "distance": "Li"} f \N \N \N
+313 4011 0fc23377-9f3d-4511-ab1b-8b8df0259d2f 119 {"Δh": "displacement", "distance": "Li"} f \N \N \N
+238 1005 c9eacd36-38d6-48b9-9672-e76406906ea3 124 {"Δh": "waterLevel", "physicalvalue": "Pi"} f \N \N \N
+239 1005 91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 104 {"Δh": "waterLevel", "physicalvalue": "Pi"} f \N \N \N
+242 1005 c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d 104 {"Δh": "waterLevel", "physicalvalue": "Pi"} f \N \N \N
+243 1005 37c046eb-9a0e-49b0-95fb-f0128338f381 104 {"Δh": "waterLevel", "physicalvalue": "Pi"} f \N \N \N
+241 1005 cb4eb310-0876-492a-9e06-8cd0a5542c5b 104 {"Δh": "waterLevel", "physicalvalue": "Pi"} f \N \N \N
+314 4011 14bab7df-524d-4a64-a618-23d4ebcc9b5e 119 {"Δh": "displacement", "distance": "Li"} f \N \N \N
+315 4011 efcb4c3e-fc6f-447b-8f73-3fdff1d77fc6 119 {"Δh": "displacement", "distance": "Li"} f \N \N \N
+316 4011 4255e295-7830-45af-ab7c-44fee1668641 119 {"Δh": "displacement", "diatance": "Li"} f \N \N \N
+317 4011 ceed540f-d7a3-48bc-b8d0-e861e21499a4 119 {"Δh": "displacement", "distance": "Li"} f \N \N \N
+318 4011 31cb6c0b-e369-46b0-9be4-1de3737503fc 119 {"Δh": "displacement", "distance": "Li"} f \N \N \N
+319 4011 ea797ffb-87b5-4e0a-8da4-7f627c347b2f 119 {"Δh": "displacement", "distance": "Li"} f \N \N \N
+320 4011 8583cb29-4726-4532-9530-a5b338d3483c 119 {"Δh": "displacement", "distance": "Li"} f \N \N \N
+321 4011 dc5bdee9-14f3-4040-ad1c-faf008358890 119 {"Δh": "displacement", "distance": "Li"} f \N \N \N
+322 1014 ef629030-d691-43fa-b6b4-b1465e60dace \N {"totalFlow": "total", "transientFlow": "instant"} f \N \N \N
+323 4009 24064f03-7c7e-493b-99f2-c926717d28fc 100 {"phy": "expansion", "elongationIndicator": "DAQi"} f \N \N \N
+324 4008 24064f03-7c7e-493b-99f2-c926717d28fc 100 {"phy": "crack", "elongationIndicator": "DAQi"} f \N \N \N
+258 2003 424f45f6-916c-4383-bce4-c71153f82e63 \N {"physicalvalue": "pressure"} f \N \N \N
+259 2003 780ffe7d-7369-4d2f-9184-32790466f2ba \N {"physicalvalue": "pressure"} f \N \N \N
+260 2003 ccb72dc5-f9bc-424d-a3ec-e6e9121bc534 \N {"physicalvalue": "pressure"} f \N \N \N
+261 2003 d2a5375c-0240-4435-9b8f-a62372fafaca \N {"physicalvalue": "pressure"} f \N \N \N
+326 1004 2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b \N {"temp": "temperature"} f \N \N \N
+327 1006 2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b \N {"humidity": "humidity"} f \N \N \N
+328 1002 10018134-99f1-486e-8071-dc652f44d152 \N {"temp": "temperature", "humidity": "humidity"} f \N \N \N
+329 1004 10018134-99f1-486e-8071-dc652f44d152 \N {"temp": "temperature"} f \N \N \N
+330 1006 10018134-99f1-486e-8071-dc652f44d152 \N {"humidity": "humidity"} f \N \N \N
+331 1002 5cd62211-11dd-4deb-83bf-2873ae7dd42f \N {"temp": "temperature", "humidity": "humidity"} f \N \N \N
+332 1004 5cd62211-11dd-4deb-83bf-2873ae7dd42f \N {"temp": "temperature"} f \N \N \N
+333 1006 5cd62211-11dd-4deb-83bf-2873ae7dd42f \N {"humidity": "humidity"} f \N \N \N
+334 1002 b475bf8f-00a0-457f-ad96-95b187dba62f \N {"temp": "temperature", "humidity": "humidity"} f \N \N \N
+337 1002 63b7958b-9b1b-49ca-b01c-62ebe4df6376 \N {"temp": "temperature", "humidity": "humidity"} f \N \N \N
+338 1004 63b7958b-9b1b-49ca-b01c-62ebe4df6376 \N {"temp": "temperature"} f \N \N \N
+339 1006 63b7958b-9b1b-49ca-b01c-62ebe4df6376 \N {"humidity": "humidity"} f \N \N \N
+340 1002 41da65aa-dd1b-4a8f-8758-13f624e45dad \N {"temp": "temperature", "humidity": "humidity"} f \N \N \N
+341 1004 41da65aa-dd1b-4a8f-8758-13f624e45dad \N {"temp": "temperature"} f \N \N \N
+342 1006 41da65aa-dd1b-4a8f-8758-13f624e45dad \N {"humidity": "humidity"} f \N \N \N
+343 1002 16f7e5ff-fb7a-4aa6-a701-9776f7638689 \N {"temp": "temperature", "humidity": "humidity"} f \N \N \N
+344 1004 16f7e5ff-fb7a-4aa6-a701-9776f7638689 \N {"temp": "temperature"} f \N \N \N
+345 1006 16f7e5ff-fb7a-4aa6-a701-9776f7638689 \N {"humidity": "humidity"} f \N \N \N
+346 4002 a30d283e-1af2-4531-ab6b-be1186799eea 102 {"angleX": "αx", "angleY": "αy"} f \N \N \N
+347 4005 a30d283e-1af2-4531-ab6b-be1186799eea 102 {"angleX": "αx", "angleY": "αy"} f \N \N \N
+348 4007 a30d283e-1af2-4531-ab6b-be1186799eea 101 {"angleX": "xi", "angleY": "yi"} f \N \N \N
+349 1015 0eb7e920-0359-4b8b-b604-14bc1136e8f5 \N {"turbidity": "corrosion"} f \N \N \N
+350 1018 466241f9-ceea-4552-b9c6-114413124018 \N {"concentration": "concentration"} f \N \N \N
+351 1002 6af0f3be-6cb5-43c8-a588-490e10fdf4b7 \N {"temp": "temperature", "humid": "humidity"} f \N \N \N
+352 1004 6af0f3be-6cb5-43c8-a588-490e10fdf4b7 \N {"temp": "temperature"} f \N \N \N
+353 1006 6af0f3be-6cb5-43c8-a588-490e10fdf4b7 \N {"humid": "humidity"} f \N \N \N
+357 1009 0530f690-1f3c-430e-97c7-6dc82f96fd47 104 {"phy": "Pi", "Δh": "waterLevel"} f \N \N \N
+363 1009 607fa5aa-d8d7-48be-bf60-b8a6d0de2e8e 104 {"phy": "Pi", "Δh": "waterLevel"} f \N \N \N
+365 1009 49b0b2b7-b6e7-4ec8-adf8-4c94dcfb2eae 104 {"phy": "Pi", "Δh": "waterLevel"} f \N \N \N
+367 2003 efc6301f-2fc6-4a50-bd12-7e8bc5781548 \N {"force": "pressure"} f \N \N \N
+368 2003 9cc32a4d-ed64-4c32-b842-9f26e1e8ed23 \N {"force": "pressure"} f \N \N \N
+369 2003 3373edde-44d6-4f67-b601-26c2259f2985 \N {"force": "pressure"} f \N \N \N
+370 2003 ef58c31b-1e6e-45a2-810e-2262ef946d6e \N {"force": "pressure"} f \N \N \N
+371 2003 3789ab33-cabd-4aa8-95e4-ca757f9c6879 \N {"force": "pressure"} f \N \N \N
+372 3001 9abfc35c-6cff-489a-8257-b868954725f4 \N {"phy": "strain"} f \N \N \N
+377 3001 5267450d-6f94-457a-b539-4cc950707872 \N {"force": "strain"} f \N \N \N
+378 3001 84cbcd56-78c4-4ff3-9dbe-f21ac6c736ba \N {"force": "strain"} f \N \N \N
+381 1004 bc476c11-0887-40fb-ae9e-06ab514a44c0 \N {"temp": "temperature"} f \N \N \N
+382 1006 bc476c11-0887-40fb-ae9e-06ab514a44c0 \N {"humid": "humidity"} f \N \N \N
+383 1002 bc476c11-0887-40fb-ae9e-06ab514a44c0 \N {"temp": "temperature", "humid": "humidity"} f \N \N \N
+384 1002 5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed \N {"temp": "temperature", "humid": "humidity"} f \N \N \N
+385 1004 5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed \N {"temp": "temperature"} f \N \N \N
+386 1006 5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed \N {"humid": "humidity"} f \N \N \N
+387 3001 5eb050b5-8b57-4528-adce-b3633e613b6c \N {"phy": "strain"} f \N \N \N
+388 2003 7802bcc3-5fdb-441d-a57a-a89ca2ec158b \N {"phy": "pressure"} f \N \N \N
+389 2004 d55af283-4d11-4eb7-8099-890d98bfcc0c \N {"phy": "force"} f \N \N \N
+390 2003 223ac440-c7b0-4005-8144-f33ce926d9bf \N {"phy": "pressure"} f \N \N \N
+391 2003 e3713c95-6aa3-4a2e-ad89-579a16cb1a03 \N {"phy": "pressure"} f \N \N \N
+392 4009 8e812d09-7b95-4c07-ad74-d4c66104e7a7 \N {"phy": "expansion"} f \N \N \N
+393 4008 8e812d09-7b95-4c07-ad74-d4c66104e7a7 \N {"phy": "crack"} f \N \N \N
+394 4008 3c8c9002-2d60-43f0-9a2c-52daa53cab54 \N {"phy": "crack"} f \N \N \N
+395 3001 5c18688a-731b-40d0-b4dd-4ba002026bb3 \N {"phy": "strain"} f \N \N \N
+396 3001 9bdf8d5c-e571-4dd4-9614-0099745b0a73 \N {"phy": "strain"} f \N \N \N
+398 3001 44c42c98-a486-411a-8813-c6ba48aab00c \N {"phy": "strain"} f \N \N \N
+244 2003 1f3f14a2-a6d4-44a5-859b-3406794e7b37 \N {"phy": "pressure"} f \N \N \N
+399 4008 e55e2ee6-c58a-481c-9bd3-9df2b38dfa3f \N {"elongationIndicator": "crack"} f \N \N \N
+400 4008 4253e350-b64f-4b81-b19b-bcd45c6181ad \N {"elongationIndicator": "crack"} f \N \N \N
+402 4001 962c0a4a-535e-4f86-a25c-f38e3aa6f144 \N {"phy": "displacement"} f \N \N \N
+403 3001 f5f27d3f-b8fd-44ee-97e2-8a78748a424f \N {"phy": "strain"} f \N \N \N
+404 2004 e2d104b1-9c57-4a16-8d05-07817bc8b785 \N {"phy": "force"} f \N \N \N
+405 4001 666e753c-f0b0-478d-b5f5-839117db13f9 119 {"Δh": "displacement", "lvdt": "Li"} f \N \N \N
+406 4001 f9331a24-582f-45b8-bea8-b919ffd48516 119 {"Δh": "displacement", "lvdt": "Li"} f \N \N \N
+407 4001 8ea772de-0c69-4a35-bbbb-7e0fb97d7c2f 119 {"Δh": "displacement", "lvdt": "Li"} f \N \N \N
+408 4001 03db4d1f-c0bf-47b0-9f10-0a0a5d6cfca3 119 {"Δh": "displacement", "lvdt": "Li"} f \N \N \N
+560 2004 df68d6a9-c963-4bc4-a122-332e3d1435ac \N {"physicalvalue": "force"} f \N \N \N
+409 4001 d3ae39b6-419c-4d57-a353-69768f82908a 119 {"Δh": "displacement", "lvdt": "Li"} f \N \N \N
+410 1022 f446b0ec-ee0f-40bb-a6fc-9767fbd78a2b \N {"windSpeed": "speed"} f \N \N \N
+411 1022 de0bfd26-fb8e-4f9d-8e0a-0119650952c6 \N {"windSpeed": "speed"} f \N \N \N
+413 1004 a54c400e-8b31-47ec-9820-550d04916f47 \N {"temp": "temperature"} f \N \N \N
+373 2004 a306aea9-07ce-4e58-a228-bd9cc769f099 \N \N f \N {} \N
+374 2004 2ed7c823-4bfa-426a-92e3-08a05afc3017 \N \N f \N {} \N
+375 2004 3f953006-06c8-41a6-a6ae-55b9991e284b \N \N f \N {} \N
+376 2004 147442dd-5edb-439c-aa56-d592cf1fa32f \N \N f \N {} \N
+397 2004 f90de97b-b6e8-417a-b628-7b8e4bb9e335 \N {"phy": "force"} f \N {} \N
+366 1005 e6a3a1f5-2a8f-48a0-9758-407065bae1e9 \N {"physicalvalue": "waterLevel"} f \N \N \N
+364 1005 49b0b2b7-b6e7-4ec8-adf8-4c94dcfb2eae 104 {"Δh": "waterLevel", "physicalvalue": "Pi"} f \N \N \N
+362 1005 607fa5aa-d8d7-48be-bf60-b8a6d0de2e8e 104 {"Δh": "waterLevel", "physicalvalue": "Pi"} f \N \N \N
+356 1005 0530f690-1f3c-430e-97c7-6dc82f96fd47 104 {"Δh": "waterLevel", "physicalvalue": "Pi"} f \N \N \N
+358 2003 27f99320-b0dc-4b93-bc24-f5ccf9337356 \N {"physicalvalue": "pressure"} f \N \N \N
+354 3001 30da8546-87f0-4a5c-bd4f-f9919c954c82 \N {"physicalvalue": "strain"} f \N \N \N
+359 4001 b750e865-af38-40e9-a478-16fefb4cb618 \N {"physicalvalue": "displacement"} f \N \N \N
+355 4008 feb1fe0d-208d-41cf-9533-596f78fa835c \N {"physicalvalue": "crack"} f \N \N \N
+360 3001 5f4e4e99-20b3-4bf7-95cb-a2f507595b2d \N {"physicalvalue": "strain"} f \N \N \N
+380 4007 d32eacce-7db0-4c15-b17c-f1d870389c14 101 {"anglex": "xi", "angley": "yi"} f \N \N \N
+100 1013 6039a6d8-af54-411e-a520-451b20b6d089 \N {"physicalvalue": "liquidLevel"} f \N \N \N
+379 3001 2d9520e9-143b-48c2-960f-5c9dca7a21b4 \N {} t 202 {"Δh": "strain", "physicalvalue": "pv"} \N
+414 1004 933a027b-e620-4a6e-8340-d10c7aa29009 \N {"temp": "temperature"} f \N \N \N
+415 4007 a3b4fd36-dd87-463c-84af-254647a24cc5 101 {"xDegree": "xi", "yDegree": "yi"} f \N \N \N
+416 4007 e718c1a2-1c56-4da0-8cb3-36445c6b4f26 101 {"xDegree": "xi", "yDegree": "yi"} f \N \N \N
+417 4007 c7f01571-7f09-4bef-99d3-fdc2da5fcaa2 101 {"xDegree": "xi", "yDegree": "yi"} f \N \N \N
+418 1004 5f908b85-0f3a-48c0-bc83-8e191731a754 \N {"temp": "temperature"} f \N \N \N
+419 1006 5f908b85-0f3a-48c0-bc83-8e191731a754 \N {"humi": "humidity"} f \N \N \N
+422 1003 db974c14-3d61-403d-b847-e0523ad53964 \N {"phy": "rainfall"} f \N \N \N
+433 4001 38b81b7d-bb3e-4885-aaea-6035faf20d1b \N {"distance": "displacement"} f \N \N \N
+434 4001 11a0df92-8921-470b-af9c-d7593b8b1f78 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+435 4004 11a0df92-8921-470b-af9c-d7593b8b1f78 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+436 4001 75c932d0-2df0-4628-81dd-0e9c1f11ff60 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+437 4004 75c932d0-2df0-4628-81dd-0e9c1f11ff60 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+438 4001 9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+439 4004 9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+440 4001 76288807-186e-4444-a1ce-6be599aacfd2 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+441 4004 76288807-186e-4444-a1ce-6be599aacfd2 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+442 1004 780de52c-47eb-46cb-b77b-3d919bae5ffb \N {"temp": "temperature"} f \N \N \N
+182 4001 5ecfc751-afb0-4596-a6f7-85a31eca40c3 117 {"phy": "displacement", "level": "DAQi"} f \N \N \N
+448 4006 7fefd73e-8fd9-48a6-8d7a-76f5796a8197 \N {"value": "angle"} f \N \N \N
+449 4001 9137c92c-6de6-4b00-bafc-a995288280f7 \N {"value": "displacement"} f \N \N \N
+450 4006 fdf34922-d64e-4616-9313-96d7d94b8412 \N {"value": "angle"} f \N \N \N
+451 4006 b53146b9-7737-46cd-a305-e2c9cb286d3d \N {"value": "angle"} f \N \N \N
+452 4007 b53146b9-7737-46cd-a305-e2c9cb286d3d \N \N t 214 {"value": "v"} \N
+453 4001 12adcb99-432b-46f5-9240-dad30ec75ea6 100 {"phy": "displacement", "lvdt": "DAQi"} f \N \N \N
+454 4008 12adcb99-432b-46f5-9240-dad30ec75ea6 \N {"lvdt": "crack"} f \N \N \N
+455 4001 bcc5cadb-0395-464b-8ead-ac3917b49e30 100 {"phy": "displacement", "lvdt": "DAQi"} f \N \N \N
+456 4008 bcc5cadb-0395-464b-8ead-ac3917b49e30 \N {"lvdt": "crack"} f \N \N \N
+457 4001 8e752366-9256-4bab-a79b-276a89aea484 100 {"phy": "displacement", "lvdt": "DAQi"} f \N \N \N
+458 4008 8e752366-9256-4bab-a79b-276a89aea484 \N {"lvdt": "crack"} f \N \N \N
+459 4001 87bf38c3-0b08-4bcf-98b4-12060fd9a345 100 {"phy": "displacement", "lvdt": "DAQi"} f \N \N \N
+461 4001 167d20c6-d128-4532-9974-d4a55788823e 100 {"phy": "displacement", "lvdt": "DAQi"} f \N \N \N
+463 4001 10ac4010-ff56-4d05-9e45-55f84f4292aa 100 {"phy": "displacement", "lvdt": "DAQi"} f \N \N \N
+464 4008 10ac4010-ff56-4d05-9e45-55f84f4292aa \N {"lvdt": "crack"} f \N \N \N
+465 4001 1f16c362-1f8e-4cbc-8b2c-8f43dd306390 100 {"phy": "displacement", "lvdt": "DAQi"} f \N \N \N
+466 4008 1f16c362-1f8e-4cbc-8b2c-8f43dd306390 \N {"lvdt": "crack"} f \N \N \N
+467 4001 8571c1b0-8472-45b5-955f-5a7614a2f08c 100 {"phy": "displacement", "lvdt": "DAQi"} f \N \N \N
+468 4008 8571c1b0-8472-45b5-955f-5a7614a2f08c \N {"lvdt": "crack"} f \N \N \N
+469 4001 a570a2de-ca66-488a-a078-6c6b14b71f2a 100 {"phy": "displacement", "lvdt": "DAQi"} f \N \N \N
+470 4008 a570a2de-ca66-488a-a078-6c6b14b71f2a \N {"lvdt": "crack"} f \N \N \N
+472 4008 d54f6d25-04dc-4847-8dda-9c54d54b2d8f \N {"lvdt": "crack"} f \N \N \N
+473 4001 c69575ab-795c-45ec-8901-f370255beff1 \N {"liquidLevel": "displacement"} f \N \N \N
+475 4006 965b3938-ddd0-422d-9716-bdb2d44f8c56 \N {"phy": "angle"} f \N \N \N
+476 2004 68cb03f4-a381-4eaa-9068-d375ae3500e8 \N {"phy": "force"} f \N \N \N
+477 2004 3a8c62b6-14dc-497e-90e8-68c2160e7d08 \N {"phy": "force"} f \N \N \N
+129 2004 c50b3ecc-a416-4991-b64f-f2c79d8d1848 \N {"physicalvalue": "force"} f \N \N \N
+128 2004 abfa6634-cca0-4696-b67e-1c2eb2e57c9b \N {"physicalvalue": "force"} f \N \N \N
+423 3001 4696ff30-0685-4f87-bc16-25d640a014a6 \N {"physicalvalue": "strain"} f \N \N \N
+478 1002 b3b4f0f1-7cdc-4892-9e6a-f4936931472c \N {"humidity": "humidity", "temperature": "temperature"} f \N \N \N
+479 4006 874e1ee5-94fe-49aa-94b0-6d6bfef680bc \N {"xDegree": "angle"} f \N \N \N
+480 3001 1f6ae927-989f-48b3-9fa4-18518326953b \N {"physicalvalue": "strain"} f \N \N \N
+481 1001 4d5a3f58-0eda-4443-9dcc-c64bb1785d88 \N {"speedofWind": "speed", "azimuthofWind": "direction"} f \N \N \N
+482 1022 4d5a3f58-0eda-4443-9dcc-c64bb1785d88 \N {"speedofWind": "speed"} f \N \N \N
+483 1029 4d5a3f58-0eda-4443-9dcc-c64bb1785d88 \N {"azimuthofWind": "direction"} f \N \N \N
+484 4009 9137c92c-6de6-4b00-bafc-a995288280f7 \N {"value": "expansion"} f \N \N \N
+485 1005 e7a84149-53b0-4ba3-88e7-fe7e0e0f21d4 100 {"phy": "waterLevel", "lvdt": "DAQi"} f \N \N \N
+471 4001 d54f6d25-04dc-4847-8dda-9c54d54b2d8f 116 {"phy": "displacement", "lvdt": "DAQi"} f \N \N \N
+460 4008 87bf38c3-0b08-4bcf-98b4-12060fd9a345 100 {"phy": "crack", "lvdt": "DAQi"} f \N \N \N
+486 4010 43e2a07a-c33e-4e54-ba5e-0a948ae4ba61 \N \N t 212 {"Ha": "a", "Hb": "b", "Hc": "c", "Hd": "d", "angX": "x", "angY": "y", "xDegree": "θx", "yDegree": "θy"} \N
+487 1011 7c42d86a-5801-4ef2-94df-2b5c702ff7f5 \N {"pressure": "electricity"} f \N \N \N
+488 2003 b6d1b7db-4a04-40af-a1e9-ed944a65b0b8 \N {"pressure": "pressure"} f \N \N \N
+489 1004 61f09dd0-ba56-40e4-a2d1-45dab1143900 \N {"phy": "temperature"} f \N \N \N
+490 3001 12a0ae21-df74-42b4-94ce-492125b941bd \N {"physicalvalue": "strain"} f \N \N \N
+491 4004 14f67669-6cec-42c0-a7ca-4b60950ec7b5 117 {"phy": "deflection", "value": "DAQi"} f \N \N \N
+492 4004 e08c86d5-195d-4cf6-a1a5-1cfd113ddd52 117 {"phy": "deflection", "value": "DAQi"} f \N \N \N
+493 5002 fbc83633-74fd-494b-b1b7-75d289358b27 \N \N f \N \N \N
+494 4007 ba349741-3d03-49c6-a2cf-9e2156fd36c4 \N {"anglex": "x", "angley": "y"} f \N \N \N
+495 4002 ba349741-3d03-49c6-a2cf-9e2156fd36c4 \N {"changedx": "x", "changedy": "y"} f \N \N \N
+496 4005 ba349741-3d03-49c6-a2cf-9e2156fd36c4 \N {"changedx": "x", "changedy": "y"} f \N \N \N
+236 2004 473aee20-7c00-41cd-bd6e-b44c35c758ea \N {"physicalvalue": "force"} f \N {} \N
+237 2004 0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1 \N {"physicalvalue": "force"} f \N {} \N
+420 2001 537cf41f-69a4-47de-81ee-63485ab8df1d \N {"force": "cableForce"} f \N \N \N
+424 2004 90a2bc12-2214-43ff-9154-9b9212de2c10 \N {"physicalvalue": "force"} f \N \N \N
+425 2004 5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8 \N {"physicalvalue": "force"} f \N \N \N
+426 2004 5e7775c1-0766-436e-b701-b1102833b98d \N {"physicalvalue": "force"} f \N \N \N
+446 4001 e5f12d4b-bb3c-4158-b98e-8af3579bd2cc 100 {"phy": "displacement", "physicalvalue": "DAQi"} f \N \N \N
+445 4001 27930598-2f6e-4932-a816-9685f17969b5 100 {"phy": "displacement", "physicalvalue": "DAQi"} f \N \N \N
+443 4001 1d48c633-6d83-4b96-a572-6f59a0100c9b 100 {"phy": "displacement", "physicalvalue": "DAQi"} f \N \N \N
+126 2004 6c0d843c-169e-49b8-8dde-188699cc3077 \N {} t 204 {"Nc": "force", "physicalvalue": "δi"} \N
+498 2005 717279c9-81b5-4bfe-8dd3-906297d70e41 \N {"elongationIndicator": "gravity"} f \N \N \N
+257 2003 abaf6bf4-288f-4d21-9fab-515213e6dcac \N {"physicalvalue": "pressure"} f \N \N \N
+427 2004 099c6283-519f-4946-aa9d-f0059a76b832 \N {"physicalvalue": "force"} f \N \N \N
+361 3001 b6095ab3-88ff-4a71-8f42-f0656b301e1e \N {"physicalvalue": "strain"} f \N \N \N
+447 4001 362018b7-e626-4eab-a6ad-214d85cfcc03 100 {"phy": "displacement", "physicalvalue": "DAQi"} f \N \N \N
+444 4001 50600703-5c4c-4ceb-a44d-d0b79882b1dc 100 {"phy": "displacement", "physicalvalue": "DAQi"} f \N \N \N
+65 4010 9e8050a9-f38a-45c3-a02b-40670bdf19b7 \N {} t 212 {"Ha": "a", "Hb": "b", "Hc": "c", "Hd": "d", "angX": "x", "angY": "y", "anglex": "θx", "angley": "θy"} \N
+499 4012 1e20c41f-4f52-4d61-94e4-ae8496163aed \N {"anglex": "x", "angley": "y", "anglez": "z"} f \N \N \N
+500 4012 00b58795-1a49-4171-b60f-a0e32a25f6f6 \N {"anglex": "x", "angley": "y", "anglez": "z"} f \N \N \N
+504 5002 09252236-560b-47e1-bf81-f774d303ba26 \N \N f \N \N \N
+505 1030 1489127c-8f48-448b-a86e-1604f08894ce \N {"length": "visibility"} f \N \N \N
+506 1027 1e7003bf-2cd1-4dcb-9ad9-116151f49ae6 \N {"airq_pm10": "pm10", "airq_pm2_5": "pm25"} f \N \N \N
+507 1030 1e7003bf-2cd1-4dcb-9ad9-116151f49ae6 \N {"airq_pm10": "visibility"} f \N \N \N
+508 5003 09252236-560b-47e1-bf81-f774d303ba26 \N \N f \N \N \N
+510 4008 4142b1cc-3576-456b-b0e4-31e68cc16b32 117 {"phy": "crack", "length": "DAQi"} f \N \N \N
+517 4001 8185c197-338c-42e3-acfc-acba2bb1b180 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+518 1003 6def140f-5189-490c-ab4c-57e84dfcd3bf \N {"雨量": "rainfall"} f \N \N \N
+519 4006 c15c6be6-83b0-47ea-ac05-38d625eb8ac8 \N {"anglex": "angle"} f \N \N \N
+520 4007 f4976287-96c1-42a2-aedf-0d8e8ab739c5 101 {"anglex": "xi", "angley": "yi"} f \N \N \N
+521 4005 f4976287-96c1-42a2-aedf-0d8e8ab739c5 102 {"anglex": "αx", "angley": "αy"} f \N \N \N
+522 4008 83d8bf62-35f8-48c5-afa2-0d454cb19f70 117 {"phy": "crack", "length": "DAQi"} f \N \N \N
+523 4007 8c2579cd-6aca-4902-a9d6-61e916a4541e 101 {"anglex": "xi", "angley": "yi"} f \N \N \N
+524 4005 8c2579cd-6aca-4902-a9d6-61e916a4541e 102 {"anglex": "αx", "angley": "αy"} f \N \N \N
+525 1002 65b984f5-c294-49fa-8433-510d38416095 \N {"humidity": "humidity", "temperature": "temperature"} f \N \N \N
+526 2003 f30482b9-b518-4048-8217-bd64158911e6 \N {"physicalvalue": "pressure"} f \N \N \N
+527 2003 0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83 \N {"physicalvalue": "pressure"} f \N \N \N
+528 2003 3aba791d-d6b2-4175-bb20-109f210f4065 \N {"physicalvalue": "pressure"} f \N \N \N
+529 2003 a9d42f6d-8409-415c-937e-aea8bebf7a50 \N {"physicalvalue": "pressure"} f \N \N \N
+530 2003 fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45 \N {"physicalvalue": "pressure"} f \N \N \N
+540 3001 388cca81-7338-40d3-ba1f-89ec9d5aa2f7 \N {"physicalvalue": "strain"} f \N \N \N
+541 4003 526c42ea-d9a9-48d1-9862-b3118a7ef211 \N \N f \N \N \N
+542 1002 63429c67-5b55-4b88-998c-65d4464623c8 \N {"data1": "temperature", "data2": "humidity"} f \N \N \N
+543 1001 b55b3b15-5db9-4946-a5a9-b0d352de6a24 \N {"data1": "speed", "data2": "direction"} f \N \N \N
+544 4007 d52af3c0-c4b0-4091-96c6-ac3e97535f92 101 {"anglex": "xi", "angley": "yi"} f \N \N \N
+545 4007 4a0f1cd5-1e52-4ec3-8976-0b1f82031d28 101 {"anglex": "xi", "angley": "yi"} f \N \N \N
+546 4005 4a0f1cd5-1e52-4ec3-8976-0b1f82031d28 102 {"anglex": "αx", "angley": "αy"} f \N \N \N
+547 3001 28d8942e-d1ab-40ee-878a-c3b2f60da896 \N {"physicalvalue": "strain"} f \N \N \N
+548 3001 4d3ecec5-32b4-4d9b-aa02-a08275dd10c7 \N {"physicalvalue": "strain"} f \N \N \N
+549 2003 4af8678b-8f9b-48e6-b8f0-ea7ec7ed53ee \N {"physicalvalue": "pressure"} f \N \N \N
+550 1005 aa6f3b0e-9bd2-41e8-801d-730aca3e32fb 105 {"h": "waterLevel", "physicalvalue": "Pi"} f \N \N \N
+551 3001 5d399cb2-7e5a-4a27-bff0-e1769f43499d \N {"physicalvalue": "strain"} f \N \N \N
+552 3001 384f80e3-ad51-400e-b0aa-8a3885961cec \N {"physicalvalue": "strain"} f \N \N \N
+553 2005 21c691a7-7a5a-4262-a3fe-cedb0c37e5fe \N {"pressure": "gravity"} f \N \N \N
+554 1022 85f5b6fd-92cc-4d22-9dff-952c59003e3f \N {"physicalvalue": "speed"} f \N \N \N
+555 1029 0beb606c-f306-4476-8526-31646c8107e5 \N {"physicalvalue": "direction"} f \N \N \N
+556 1006 92bad770-f845-4bd8-8e2b-55e5343a2201 \N {"physicalvalue": "humidity"} f \N \N \N
+557 1003 6e1d3878-3ea2-4c73-9137-0ef98781be0c \N \N f \N \N \N
+558 2004 20ff998d-3014-4f62-ad12-37b56883c435 \N {"physicalvalue": "force"} f \N \N \N
+559 2004 c60cc02d-8c37-447a-9f9d-947aa66b7f39 \N {"physicalvalue": "force"} f \N \N \N
+421 2001 2dead818-122a-42d9-8f52-3aa8d92ab0c3 \N {"cableforce": "cableForce"} f \N \N \N
+561 2004 84deac79-cd1d-4320-bcc6-3a0cdd4451da \N {"physicalvalue": "force"} f \N \N \N
+566 3001 d75d2473-6ed4-437c-8509-682f55d0d407 \N {"value": "strain"} f \N \N \N
+567 1026 8fb33fdb-3378-44a4-8e48-ec79ff29a37e \N {"pmstandard": "concentration"} f \N \N \N
+568 1026 cda0b115-60d6-4169-8f45-4a92d6801fb3 \N {"pmstandard": "concentration"} f \N \N \N
+569 4007 c15c6be6-83b0-47ea-ac05-38d625eb8ac8 \N \N t 214 {"anglex": "v"} \N
+570 4007 874e1ee5-94fe-49aa-94b0-6d6bfef680bc \N \N t 214 {"anglex": "v"} \N
+765 2003 c9eacd36-38d6-48b9-9672-e76406906ea3 \N {"physicalvalue": "pressure"} f \N \N \N
+429 2004 bbfa13d3-fd42-4230-97e6-792463dbaf85 \N {"physicalvalue": "force"} t 202 {"Δh": "force", "force": "pv"} \N
+428 2004 c0cde67c-9734-4a3c-bb52-0caba0ae8724 \N {"physicalvalue": "force"} t 202 {"Δh": "force", "force": "pv"} \N
+431 2004 1bcd78b8-bd96-4c95-8e19-27a1ac7356c9 \N {"physicalvalue": "force"} t 202 {"Δh": "force", "force": "pv"} \N
+571 4007 d3245ff1-0781-49bd-b37c-e245a350a709 100 {"phy": "v", "angleX": "DAQi"} t 214 {} \N
+572 1017 5efb0ea9-ca31-4a41-9389-be6c24b3ad2c \N {"physicalvalue": "concentration"} f \N \N \N
+573 1019 ae8d62c1-09f0-4fcd-bc62-add087919ff0 \N {"physicalvalue": "lel"} f \N \N \N
+574 2001 219cbb09-9c49-4167-846d-00a8bdfadb9a \N {"pressure": "cableForce"} f \N \N \N
+575 4001 d148ae2e-c0dd-4e57-a0e8-833d32107f31 100 {"phy": "displacement", "level": "DAQi"} f \N \N \N
+516 1005 f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d 124 {"Δh": "waterLevel", "physicalvalue": "Pi"} f \N \N \N
+514 1005 624610fd-38ca-4e72-92c8-0492eb66412a 124 {"Δh": "waterLevel", "physicalvalue": "Pi"} f \N \N \N
+513 1005 ea2cc9e5-072a-4994-a232-f79655536c64 124 {"Δh": "waterLevel", "physicalvalue": "Pi"} f \N \N \N
+512 1005 7f76a800-a32e-483a-a948-919fc9e7d075 124 {"Δh": "waterLevel", "physicalvalue": "Pi"} f \N \N \N
+511 1005 3f493145-8216-487c-b145-d58dacf9c570 124 {"Δh": "waterLevel", "physicalvalue": "Pi"} f \N \N \N
+565 2004 7674c64d-e09e-4257-8726-c64a26ed309a \N {} t 202 {"Δh": "force", "physicalvalue": "pv"} \N
+564 2004 4a7b8b8f-6ba0-4731-af44-8f3f6d30a928 \N {} t 202 {"Δh": "force", "physicalvalue": "pv"} \N
+563 2004 4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66 \N {} t 202 {"Δh": "force", "physicalvalue": "pv"} \N
+562 2004 110a38a6-8cb9-43c5-9682-4b1ba0e9d01f \N {} t 202 {"Δh": "force", "physicalvalue": "pv"} \N
+531 2004 d3763c4f-94ba-4ae4-b35e-ccff2340c16a \N {} t 202 {"Δh": "force", "physicalvalue": "pv"} \N
+534 2004 ca6af9e3-f1dc-4992-8029-d0e438ef99b5 \N {} t 202 {"Δh": "force", "physicalvalue": "pv"} \N
+539 3001 02513eed-ba94-456b-86e0-89ea996b879d \N {} t 202 {"Δh": "strain", "physicalvalue": "pv"} \N
+538 3001 2e0d00cd-a321-4504-b716-41813848cbdb \N {} t 202 {"Δh": "strain", "physicalvalue": "pv"} \N
+535 3001 9297adfa-1972-45e3-a5c4-0f31a0acbe84 \N {} t 202 {"Δh": "strain", "physicalvalue": "pv"} \N
+576 1031 fbe11da9-a717-4a5e-bd90-93f394b46ccc \N {"physicalvalue": "concentration"} f \N \N \N
+577 1001 1cfa35c8-129a-45eb-9304-2b105bc22380 \N {"speed": "speed", "direction": "direction"} f \N \N \N
+578 4007 901073b9-b411-427c-9eb6-43a935ec8c27 \N {"anglex": "x", "angley": "y"} f \N \N \N
+579 4006 077f4241-fe27-4cbc-9918-cf5b8d1c8283 \N {"physicalvalue": "angle"} f \N \N \N
+581 1004 d77b7e20-7877-47dc-aef4-37a663bac660 \N {"temperature": "temperature"} f \N \N \N
+582 2003 40a69ace-03f8-4acf-8cf7-6acf43ac2de8 \N {"physicalvalue": "pressure"} f \N \N \N
+583 4007 9d6f5e3b-2821-48f0-b5c5-997baf346f39 101 {"anglex": "xi", "angley": "yi"} f \N \N \N
+584 1022 7c2ff6f1-5bb6-4736-91cd-1bd068e760aa \N {"physicalvalue": "speed"} f \N \N \N
+585 4006 200655be-879b-4a82-8a17-1ff1ccb9f961 \N {"physicalvalue": "angle"} f \N \N \N
+586 3003 d77b7e20-7877-47dc-aef4-37a663bac660 123 {"σ": "stress", "physicalvalue": "ε"} f \N \N \N
+587 4001 563221c8-bdb4-4511-b781-25cab72585a7 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+588 2003 d8860bee-374c-497a-a33a-258af59e3690 \N {"physicalvalue": "pressure"} f \N \N \N
+626 1009 0aae766a-5d82-479a-bd71-7eb1e0e4e20f 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+616 1009 0c5d070d-fb83-4f78-acc0-a0bd12be6cc2 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+589 5001 51654fb3-cd61-405e-890f-ade3931c8b7e 122 \N f \N \N \N
+590 5002 51654fb3-cd61-405e-890f-ade3931c8b7e 122 \N f \N \N \N
+591 4008 bff19d80-ce20-4c3d-b158-df091a1fb5ac 117 {"phy": "crack", "length": "DAQi"} f \N \N \N
+592 4011 260e307b-9a7c-4f75-90cd-79710a7d0221 119 {"Δh": "displacement", "length": "Li"} f \N \N \N
+593 4011 66717a8f-3c59-41e0-ab21-bf6bcdde55ea 119 {"Δh": "displacement", "length": "Li"} f \N \N \N
+594 4001 66717a8f-3c59-41e0-ab21-bf6bcdde55ea 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+595 4001 260e307b-9a7c-4f75-90cd-79710a7d0221 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+596 4001 fb7bb438-ec7d-41fa-b7f5-737c395901bc 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+597 4001 e458516d-60cf-4395-8ec5-df491ae97d3e 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+598 4011 fb7bb438-ec7d-41fa-b7f5-737c395901bc 119 {"Δh": "displacement", "length": "Li"} f \N \N \N
+599 4011 e458516d-60cf-4395-8ec5-df491ae97d3e 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+600 4001 5ac91988-c93a-4176-9f33-7c6ba110590f 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+601 4004 5ac91988-c93a-4176-9f33-7c6ba110590f 100 {"phy": "deflection", "length": "DAQi"} f \N \N \N
+502 5001 c8fd3080-b416-4381-8bcc-e84c12471281 \N {"pv": "pv", "ppv": "ppv", "rms": "trms"} f \N \N \N
+501 5002 c8fd3080-b416-4381-8bcc-e84c12471281 \N {"pv": "pv", "ppv": "ppv", "rms": "trms"} f \N \N \N
+632 4007 c9a11ba9-fb0d-4a82-b480-7539948c9b56 102 {"x": "x", "y": "y", "xDegree": "αy", "yDegree": "αx"} f \N \N \N
+633 4001 83881bee-4e8c-4ad6-a11f-45810d035b3d 100 {"phy": "displacement", "level": "DAQi"} f \N \N \N
+606 1009 65f4e736-8261-40cc-b3b8-948ab0e4252e 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+614 1009 13126536-b6af-48d0-b43e-25144b65dd8d 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+618 1009 f3ad3df8-e1ad-4e05-b479-185ac5ae8602 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+620 1009 e8d9a100-9650-4afc-a260-9c7bcdea9263 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+610 1009 3462227d-e989-421c-9f48-c0ae7a573b78 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+612 1009 16ca7eed-6c64-4c4b-a495-6c5f785b86cd 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+622 1009 d7912272-424d-4546-a3c1-43a24365dde0 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+624 1009 91372b00-3bf7-4eb0-9495-ad544dfb04ca 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+628 1009 ac32d002-0463-4bc7-a307-86236e6307a7 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+604 1009 e015d9d3-542e-4d54-80c6-39db4ba20877 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+603 1009 24b365fd-4e6e-4800-ad48-d3f082c9b2b8 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+630 1009 584a210b-20f2-49cf-906a-9d6b4883af09 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+608 1009 6bd546bc-55b0-4ee4-8b58-34feec8cdb6c 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+609 1010 6bd546bc-55b0-4ee4-8b58-34feec8cdb6c 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+627 1010 0aae766a-5d82-479a-bd71-7eb1e0e4e20f 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+625 1010 91372b00-3bf7-4eb0-9495-ad544dfb04ca 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+629 1010 ac32d002-0463-4bc7-a307-86236e6307a7 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+623 1010 d7912272-424d-4546-a3c1-43a24365dde0 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+631 1010 584a210b-20f2-49cf-906a-9d6b4883af09 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+602 1010 24b365fd-4e6e-4800-ad48-d3f082c9b2b8 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+613 1010 16ca7eed-6c64-4c4b-a495-6c5f785b86cd 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+615 1010 13126536-b6af-48d0-b43e-25144b65dd8d 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+605 1010 e015d9d3-542e-4d54-80c6-39db4ba20877 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+621 1010 e8d9a100-9650-4afc-a260-9c7bcdea9263 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+619 1010 f3ad3df8-e1ad-4e05-b479-185ac5ae8602 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+611 1010 3462227d-e989-421c-9f48-c0ae7a573b78 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+617 1010 0c5d070d-fb83-4f78-acc0-a0bd12be6cc2 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+607 1010 65f4e736-8261-40cc-b3b8-948ab0e4252e 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+277 4002 0c5bca0d-95b8-416e-865b-1f09bb49285f 102 {"x": "x", "y": "y", "xDegree": "αx", "yDegree": "αy"} f \N \N \N
+634 4008 b15a4ae0-8100-4809-978d-50914fdc2f32 117 {"phy": "crack", "physicalvalue": "DAQi"} f \N \N \N
+635 4001 1991c0ef-7dd2-4290-ad34-c8bc82161d2f 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+636 4001 b2d406aa-3d16-4f6a-a0cf-201673678a8f 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+637 4001 9fbee940-6591-45b4-a3a9-83abc9c76e85 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+638 4008 b2d406aa-3d16-4f6a-a0cf-201673678a8f 100 {"phy": "crack", "length": "DAQi"} f \N \N \N
+639 4004 aa4c3887-4040-4ac1-a908-4ae45f754c3b 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+515 1005 cf54dd7a-2c8a-4f16-9f92-7484af585f13 124 {"Δh": "waterLevel", "physicalvalue": "Pi"} f \N \N \N
+537 3001 1bda935e-56de-4365-b60e-f02d19299795 \N {} t 202 {"Δh": "strain", "physicalvalue": "pv"} \N
+640 2004 6c650368-cf3e-4a75-a30d-01b2a37356fb \N \N t 202 {"Δh": "force", "physicalvalue": "pv"} \N
+641 2004 2e0d00cd-a321-4504-b716-41813848cbdb \N \N t 211 {"F": "force", "physicalvalue": "εi"} \N
+642 2004 02513eed-ba94-456b-86e0-89ea996b879d \N \N t 211 {"F": "force", "physicalvalue": "εi"} \N
+643 2004 2d9520e9-143b-48c2-960f-5c9dca7a21b4 \N \N t 211 {"F": "force", "physicalvalue": "εi"} \N
+644 4007 a045d540-6405-495e-af5f-ea705c094472 \N {"anglex": "x", "angley": "y"} f \N \N \N
+580 2001 d14c6b02-4298-4713-b970-eba0aafee88b 113 {"F": "cableForce", "physicalvalue": "ε"} f \N \N \N
+532 2004 aab61193-270e-4d06-9bdf-9da5194c744a \N {} t 202 {"Δh": "force", "physicalvalue": "pv"} \N
+533 2004 0b09cbd9-3881-4b4a-8910-0e8730d5d935 \N {} t 202 {"Δh": "force", "physicalvalue": "pv"} \N
+645 2006 d3763c4f-94ba-4ae4-b35e-ccff2340c16a 125 {"σ": "δi", "physicalvalue": "F"} t 204 {"Nc": "force"} \N
+646 2006 aab61193-270e-4d06-9bdf-9da5194c744a 125 {"σ": "δi", "physicalvalue": "F"} t 204 {"Nc": "force"} \N
+647 2006 0b09cbd9-3881-4b4a-8910-0e8730d5d935 125 {"σ": "δi", "physicalvalue": "F"} t 204 {"Nc": "force"} \N
+648 2006 ca6af9e3-f1dc-4992-8029-d0e438ef99b5 125 {"σ": "δi", "physicalvalue": "F"} t 204 {"Nc": "force"} \N
+649 1005 d56a9be3-7a4a-4c75-91ec-f524bb273574 100 {"phy": "waterLevel", "pressure": "DAQi"} f \N \N \N
+650 1004 948c741a-f999-4abe-ae1f-64c23e27462c \N {"temperature": "temperature"} f \N \N \N
+651 2003 7f76a800-a32e-483a-a948-919fc9e7d075 \N {"physicalvalue": "pressure"} f \N \N \N
+652 2003 3f493145-8216-487c-b145-d58dacf9c570 \N {"physicalvalue": "pressure"} f \N \N \N
+653 2003 ea2cc9e5-072a-4994-a232-f79655536c64 \N {"physicalvalue": "pressure"} f \N \N \N
+654 2003 624610fd-38ca-4e72-92c8-0492eb66412a \N {"physicalvalue": "pressure"} f \N \N \N
+655 2003 cf54dd7a-2c8a-4f16-9f92-7484af585f13 \N {"physicalvalue": "pressure"} f \N \N \N
+656 2003 f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d \N {"physicalvalue": "pressure"} f \N \N \N
+657 1032 0f179575-cae8-4888-a644-1b66be3f8de2 \N {"CO": "CO", "O3": "O3", "NO2": "NO2", "SO2": "SO2", "PM10": "PM10", "PM25": "PM2.5", "TVOC": "TVOC", "humidity": "humidity", "temperature": "temp"} f \N \N \N
+658 1004 20e28988-ea9b-4757-9f79-22dce525207a \N {"temperature": "temperature"} f \N \N \N
+659 4004 b56e401a-75e7-47ea-84db-6638fd421792 100 {"phy": "deflection", "length": "DAQi"} f \N \N \N
+660 4004 515030fd-3993-442a-89f7-ca844c5671c0 100 {"phy": "deflection", "length": "DAQi"} f \N \N \N
+661 4001 515030fd-3993-442a-89f7-ca844c5671c0 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+663 4007 427e8976-edd3-4467-8900-587c12fbf6cf 101 {"anglex": "xi", "angley": "yi"} f \N \N \N
+664 4005 427e8976-edd3-4467-8900-587c12fbf6cf 102 {"anglex": "αx", "angley": "αy"} f \N \N \N
+665 4001 70dd7ed7-45de-4c9c-a299-7c0686775dc3 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+666 4004 70dd7ed7-45de-4c9c-a299-7c0686775dc3 100 {"phy": "deflection", "length": "DAQi"} f \N \N \N
+667 4007 0f6fd3af-59cc-4fa8-8ff5-f42f173ac9fa 101 {"anglex": "xi", "angley": "yi"} f \N \N \N
+668 4005 0f6fd3af-59cc-4fa8-8ff5-f42f173ac9fa 102 {"anglex": "αx", "angley": "αy"} f \N \N \N
+669 4001 aa4c3887-4040-4ac1-a908-4ae45f754c3b 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+670 1022 8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea \N {"speed": "speed"} f \N \N \N
+671 1029 a6d30b7e-a718-4cbf-80be-2ddefa2445ab \N {"direction": "direction"} f \N \N \N
+672 1033 9fab42c0-0c95-4fd2-a470-08437473a2f4 \N \N f \N \N \N
+673 2004 8fcb81d8-34ce-41b8-93c9-69d15060fa40 \N {"physicalvalue": "force"} f \N \N \N
+674 2004 f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17 \N {"physicalvalue": "force"} f \N {} \N
+675 4002 d52af3c0-c4b0-4091-96c6-ac3e97535f92 102 {"anglex": "αx", "angley": "αy"} f \N \N \N
+678 1034 4a1c835d-1f99-4d95-8d21-ceab11c714d3 \N \N f \N \N \N
+679 1034 e1f36777-486a-4527-a30f-61d17b7a8796 \N {"pm10": "pm10", "pm25": "pm25", "noise": "noise", "speed": "speed", "direction": "direction"} f \N \N \N
+680 7001 8e67e334-231e-467c-8868-c41461d9463e \N \N f \N \N \N
+681 7002 6b4905df-caae-4bcc-a8a7-c99cb7866e06 \N \N f \N \N \N
+682 7003 705738a1-f330-4875-a2a0-23c30ec9f5d4 \N \N f \N \N \N
+683 4007 77a4b2d1-adf0-4cab-be7e-5f4635e4063f \N \N f \N \N \N
+684 4001 0e7784d1-0cbf-46aa-b156-e3361a3251e4 201 {"Δh": "displacement", "length": "Li"} f \N \N \N
+686 5001 e32efbee-3c36-4be6-a4d3-d5058acf1fda 122 \N f \N \N \N
+687 5002 e32efbee-3c36-4be6-a4d3-d5058acf1fda 122 \N f \N \N \N
+688 4014 ba3d723e-88ac-4e9a-976f-43d43081e621 \N {"speed": "speed", "height": "height", "radius": "range", "rotation": "angle", "curweight": "load", "obliquity": "obliquity"} f \N \N \N
+689 4001 19bb2b93-6e2e-4861-95df-67a68bc71fc4 \N {"length": "displacement"} f \N \N \N
+690 4008 19bb2b93-6e2e-4861-95df-67a68bc71fc4 100 {"p": "crack", "length": "ci"} f \N \N \N
+691 1005 177e7e33-3dae-4163-8d7d-1778e70b4a8b 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+763 1005 68885fd4-0280-410a-bf22-3afadec546f2 103 {"H": "waterLevel", "level": "h"} f \N \N \N
+764 1048 390e46cc-b69d-4966-89f4-d305afdd4649 \N {"alarmCode": "stateCode"} f \N \N \N
+64 4007 9e8050a9-f38a-45c3-a02b-40670bdf19b7 101 {"x": "x", "y": "y", "anglex": "xi", "angley": "yi"} f \N \N \N
+692 1034 3ad4be85-c6f9-46b8-97dd-39d01e4ef858 \N {"pm10": "pm10", "pm25": "pm25", "temp": "temperature", "noise": "noise", "winddir": "direction", "humidity": "humidity", "windspeed": "speed"} f \N \N \N
+677 4014 039664c3-5d24-4edb-b251-7540c98dc2ce \N {"height": "height", "radius": "range", "loadValue": "load", "obliquity": "obliquity", "windSpeed": "speed", "rotationAngle": "angle", "torquePercent": "moment"} f \N \N \N
+693 8001 27503c42-1dec-4321-ad45-eab67190afb5 \N {"co": "co", "o3": "o3", "pm": "pm2_5", "no2": "no2", "so2": "so2", "pm10": "pm10"} f \N \N \N
+694 8002 c1831563-faaf-4e2a-9d49-6b483abbd040 \N {"ph": "ph", "oxygen": "do", "turbidity": "turb", "temperature": "temp", "conductivity": "tds"} f \N \N \N
+695 1034 24946992-8d23-4862-ab23-0844e246fb46 \N {"pm10": "pm10", "pm25": "pm25", "noise": "noise", "speed": "speed", "humidity": "humidity", "direction": "direction", "temperature": "temperature"} f \N \N \N
+696 8002 55d8d331-c61d-4523-886d-2d69f350cde0 \N {"PH": "ph", "oxy": "do", "temp": "temp", "turbidity": "turb", "conductivity": "tds"} f \N \N \N
+697 1034 7734e171-78b3-4a47-bccf-b812a1cf30f3 \N {"pm10": "pm10", "pm25": "pm25", "noise": "noise", "humidity": "humidity", "windSpeed": "speed", "temperature": "temperature", "windDirection": "direction"} f \N \N \N
+699 4015 5f1f2736-2744-4339-b456-50c5626ea641 \N \N f \N \N \N
+700 9002 b440e042-3173-43c6-887c-3cf4ce8a49e4 \N {"readingNumber": "total"} f \N \N \N
+701 9001 4a91ace7-e5da-44c8-843d-43fb6a130847 \N {"readingNumber": "total"} f \N \N \N
+702 0001 3bae74f8-5224-45f9-bbcd-f40968ed1ce2 \N {"urinalstate": "state"} f \N \N \N
+703 0001 a5dda81c-6a85-4e7b-97f3-be45b980646e \N {"pitstate": "state"} f \N \N \N
+704 9004 b03b1516-7e4a-41a4-9765-a1a485bb998a \N {"NH3": "nh3", "humidity": "humidity", "temperature": "temperature"} f \N \N \N
+705 9003 d5bfb91e-3d09-4068-ac33-5974e8b7f039 \N \N f \N \N \N
+706 1034 a820a6a6-2302-4291-bf8a-e6beb3e7f663 \N \N f \N \N \N
+707 1016 0209176c-7c91-4fe0-9a00-e751fe24c8f8 \N {"ph": "ph"} f \N \N \N
+708 1018 800e5478-374c-4de8-ab05-d9aa4be45cdb \N {"concentration": "concentration"} f \N \N \N
+709 1002 3b867352-5d0b-4016-a55f-4d68d0dcbaa4 \N \N f \N \N \N
+710 1020 dff02ef2-0438-415d-9327-cdd883c38c81 \N {"intensity": "lumen"} f \N \N \N
+711 1041 d199daf3-83a4-4bcc-b23b-b6ca37fba927 \N \N f \N \N \N
+676 4002 af1cd7e8-52e1-4411-9c9a-20bc82a2786d 102 {"angleX": "αx", "angleY": "αy"} f \N \N \N
+61 4002 9e8050a9-f38a-45c3-a02b-40670bdf19b7 102 {"anglex": "αx", "angley": "αy"} f \N \N \N
+262 4007 af1cd7e8-52e1-4411-9c9a-20bc82a2786d 101 {"angleX": "xi", "angleY": "yi"} f \N \N \N
+712 1001 495526a7-7701-4e9c-8dfd-bbfd7e0b163b \N {"windspeed": "speed", "winddirection": "direction"} f \N \N \N
+713 1035 11c61b7f-9d36-4273-b679-898a09fe21e9 \N {"pm10": "pm10", "pm25": "pm25", "temp": "temperature", "noise": "noise", "humidy": "humidity"} f \N \N \N
+734 5002 56c84083-d705-4aa0-94d2-34b731f75f97 122 \N f \N \N \N
+714 2003 7efbc3e8-ff6b-433b-9041-c76b9df89644 104 {"Δh": "pressure", "pressure": "Pi"} f \N \N \N
+715 6010 d5ce913e-4a89-473e-b69b-bdfbc0fa6753 \N \N f \N \N \N
+474 4003 a1923ce2-b8a5-45cb-9d98-6a42901cee7c 109 {"X": "x", "Y": "y", "Z": "z", "x": "xi", "y": "yi", "z": "zi"} f \N \N \N
+716 8003 e996ef32-944e-448f-9370-862fd5ed719d \N \N f \N \N \N
+717 8004 3d8fcd19-8b2a-4d02-8dd3-de8e2c082dcc \N \N f \N \N \N
+718 8005 9db37a62-7896-4477-a3c4-7d317d28f26e \N \N f \N \N \N
+719 8006 4eb4d7ed-2199-4514-9411-9c12d59f72e3 \N \N f \N \N \N
+720 8007 a91dd10c-af61-4fcf-8294-1d200a035664 \N \N f \N \N \N
+721 8008 a23e3c37-7ab4-4ed4-b73b-a791c96d596c \N \N f \N \N \N
+722 8009 ccfcd1c0-1cf5-4123-9be8-ca521b1e79d3 \N \N f \N \N \N
+723 7007 0794ccbd-2a6e-49b6-9b42-abf93957b33c \N \N f \N \N \N
+725 2003 b21b534c-d8f1-4caf-a405-1682a99dc1a9 128 {"p": "pressure", "voltage": "v"} f \N \N \N
+726 8010 7f8fac16-3dbd-4d0a-bf38-322c5818e096 \N \N f \N \N \N
+728 1034 bb3ec092-4644-42eb-93ba-f9ae9b4b6601 \N {"pm10": "pm10", "pm25": "pm25"} f \N \N \N
+729 9005 9aa975c7-a3d4-42ec-a384-17d0425e602a \N \N f \N \N \N
+730 4018 3027f2cf-70b8-4ff6-92ee-7432a8b26887 \N {"arch": "arch", "tunnelface": "tunnelface"} f \N \N \N
+731 4001 9922afa7-509c-4ee2-8cfa-094233cf6eb1 \N {"length": "displacement"} f \N \N \N
+733 4018 85e05ea0-94ca-4806-9393-78780b771a4b \N {"arch": "arch", "tunnelface": "tunnelface"} f \N \N \N
+735 1008 11a0df92-8921-470b-af9c-d7593b8b1f78 106 {"v": "seepage", "pressure": "p"} f \N \N \N
+738 4011 9922afa7-509c-4ee2-8cfa-094233cf6eb1 \N {"length": "displacement"} f \N \N \N
+740 1002 d5bf6f22-3d7a-4ab0-9043-1020e9516bcc \N {"Temp": "temperature", "humidy": "humidity"} f \N \N \N
+741 9004 89fb363a-19d1-4e23-a9af-b2a2c310eb4f \N {"NH3": "nh3"} f \N \N \N
+742 9010 a9dc9dd4-9a62-4dfa-968a-69e2c4472a0a \N {"inflow": "inflow", "outflow": "outflow"} f \N \N \N
+743 8007 ff67a769-94ed-4f3d-b944-b1f4d4468eec \N {"latitude": "lat", "longitude": "lon"} f \N \N \N
+744 6010 ff67a769-94ed-4f3d-b944-b1f4d4468eec \N {"speed": "speed", "latitude": "lang", "longitude": "long"} f \N \N \N
+745 1009 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 103 {"H": "waterLevel", "physicalvalue": "h"} f \N \N \N
+746 1010 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 107 {"L": "beachWidth", "physicalvalue": "hi"} f \N \N \N
+739 4011 82e60098-d956-499c-97c8-810ba64a8589 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+732 4001 82e60098-d956-499c-97c8-810ba64a8589 100 {"phy": "displacement", "length": "DAQi"} f \N {} \N
+747 2005 82ec14e4-a0ee-4d21-9fcb-24cde7cf551b \N {"Weight": "gravity", "WeightPercent": "weightPercent"} f \N \N \N
+750 1047 f929d6c9-de63-4cb0-89f9-f9e7a22cbadb 110 {"Qi": "Qo", "ssagee": "vi"} t 208 {"Qi": "volume"} \N
+751 1047 6bc95aa6-88cd-4473-98fc-7f4a1d76fc4a 112 {"V": "V_i", "waterlevel": "x"} t 208 {"Qi": "volume"} \N
+752 4004 7efbc3e8-ff6b-433b-9041-c76b9df89644 104 {"Δh": "deflection", "pressure": "Pi"} f \N \N \N
+736 1005 6bc95aa6-88cd-4473-98fc-7f4a1d76fc4a 103 {"H": "waterLevel", "waterlevel": "h"} f \N \N \N
+748 1046 6bc95aa6-88cd-4473-98fc-7f4a1d76fc4a 112 {"V": "volume", "waterlevel": "x"} f \N {} \N
+749 1045 f929d6c9-de63-4cb0-89f9-f9e7a22cbadb 136 {"E": "flow", "pressure": "p"} f \N \N \N
+727 8011 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 142 {"v_co": "co", "v_o3": "o3", "v_no2": "no2", "v_so2": "so2"} f \N \N \N
+724 1005 c6a59efb-40c2-4104-9b26-7895bb8e072d 100 {"phy": "waterLevel", "length": "DAQi"} f \N \N \N
+401 4008 0eab3179-48cc-4e55-8ec9-b7516415aa75 116 {"phy": "crack", "elongationIndicator": "DAQi"} f \N \N \N
+761 8001 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 142 {"v_co": "co", "v_o3": "o3", "v_no2": "no2", "v_so2": "so2"} f \N \N \N
+756 4001 53070eae-7839-46df-9492-f1b4c0b0b101 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+757 4001 7efbc3e8-ff6b-433b-9041-c76b9df89644 104 {"Δh": "displacement", "pressure": "Pi"} f \N \N \N
+758 8012 e8b1dd32-dd34-4923-a91d-e21f81210749 \N \N t 133 {"Ph": "H2S", "Pn": "NH3", "Po": "Odor", "Pv": "VOCS", "H2S": "Qh", "NH3": "Qn", "Odor": "Qo", "VOCS": "Qv"} \N
+759 8012 676c48ff-13c3-426f-9871-989570d76ef9 \N \N t 133 {"runoff": "C"} \N
+760 3001 4fa8750d-807d-4c0c-9526-2662418f6f2f \N {"physicalvalue": "strain"} f \N \N \N
+762 1005 c8b20fe8-531f-47aa-96cd-3d48ea0bc238 103 {"H": "waterLevel", "pressure": "h"} f \N \N \N
+767 2006 73a7b800-25d7-41ad-872d-96cc4f9430de \N {"physicalvalue": "force"} t 204 {"Nc": "force", "physicalvalue": "δi"} \N
+768 2006 473aee20-7c00-41cd-bd6e-b44c35c758ea \N {} t 204 {"Nc": "force", "physicalvalue": "δi"} \N
+769 2006 0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1 \N {} t 204 {"Nc": "force", "physicalvalue": "δi"} \N
+771 1003 8c23f875-86cf-4fe7-a315-526c7a1d0187 \N {"physicalvalue": "rainfall"} f \N \N \N
+774 3003 b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 125 {"σ": "stress", "physicalvalue": "F"} f \N \N \N
+770 3001 b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 \N {"physicalvalue": "strain"} f \N \N \N
+775 4003 c3ed0f20-828b-46bd-b8ef-b7821cd0fcce 109 {"X": "x", "Y": "y", "Z": "z", "x": "xi", "y": "yi", "z": "zi"} f \N \N \N
+776 1005 0a341896-3c5d-4e60-af19-fe5f645c6967 124 {"pressure": "Pi"} f \N \N \N
+777 1005 aa630d67-b466-4f6a-9a04-fe5744954d20 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+778 1005 e600502e-b2ff-466a-9fa6-b9e9e554647c 124 {"Δh": "waterLevel", "pressure": "Pi"} f \N \N \N
+779 3006 11f0a3dc-13ad-4c40-ae16-1b2f1d139564 \N \N t 216 {"σL": "stress", "physicalvalue": "v"} \N
+780 1002 c89d02cd-f052-4004-aa3e-93906248a62b \N {"humidity": "humidity", "temperature": "temperature"} f \N \N \N
+781 4004 53070eae-7839-46df-9492-f1b4c0b0b101 104 {"Δh": "deflection", "physicalvalue": "Pi"} f \N \N \N
+782 4009 bff19d80-ce20-4c3d-b158-df091a1fb5ac 117 {"phy": "expansion", "length": "DAQi"} f \N \N \N
+783 4009 d54f6d25-04dc-4847-8dda-9c54d54b2d8f 117 {"phy": "expansion", "lvdt": "DAQi"} f \N \N \N
+698 4014 5e44f909-0d21-4d00-82f5-d3502e192e18 \N {"Angle": "angle", "Height": "height", "Moment": "moment", "RRange": "range", "Weight": "load", "isOnline": "online", "Obliguity": "obliquity", "WindSpeed": "speed"} f \N \N \N
+784 1003 c96dced7-2915-4087-9ba5-b6f9bdc35f89 \N {"rain": "rainfall"} f \N \N \N
+785 1004 673195ba-381a-4dea-93e1-4f65f4d84079 \N {"temperature": "temperature"} f \N \N \N
+786 4020 53070eae-7839-46df-9492-f1b4c0b0b101 104 {"Δh": "x", "physicalvalue": "Pi"} f \N \N \N
+787 3003 11f0a3dc-13ad-4c40-ae16-1b2f1d139564 123 {"σ": "stress", "physicalvalue": "ε"} f \N \N \N
+788 8013 6cb2c0f8-0c45-42e6-97ca-56d97a4a3484 \N \N f \N \N \N
+509 4008 0bf78d42-85ee-486c-bf43-c62c3168ee33 116 {"phy": "crack", "length": "DAQi"} f \N \N \N
+240 1005 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 104 {"Δh": "waterLevel", "physicalvalue": "Pi"} f \N \N \N
+773 1005 6039a6d8-af54-411e-a520-451b20b6d089 103 {"H": "waterLevel", "physicalvalue": "h"} f \N \N \N
+737 1008 f929d6c9-de63-4cb0-89f9-f9e7a22cbadb 138 {"Q": "seepage", "ssagee": "H"} f \N \N \N
+790 1005 b86fdc56-591d-40c5-b4f8-cb5b2a265be8 100 {"phy": "waterLevel", "length": "DAQi"} f \N \N \N
+791 4013 6431292f-5b95-41f0-8291-ff902e58b376 139 {"X": "x", "Y": "y", "Z": "h", "height": "zi", "easting": "xi", "northing": "yi"} f \N \N \N
+792 3003 73a7b800-25d7-41ad-872d-96cc4f9430de 125 {"σ": "stress", "physicalvalue": "F"} f \N \N \N
+793 1005 407a002b-de7c-4a76-9732-e4e8aaaafec3 100 {"phy": "waterLevel", "length": "DAQi"} f \N \N \N
+794 4001 0e96ddaf-1acc-419b-afca-18854f8c25d8 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+795 4001 5b338441-75c4-4186-9fc3-23aa8d614e19 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+796 4001 4698f1de-2051-4283-9fe5-2c62b1687239 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+797 4001 446a08d7-c237-4f0b-acfb-3d9310da742d 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+798 4001 b1353bed-cda0-44a5-b1e9-94cb166962a5 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+799 4001 ee878563-3f80-4c7d-8888-319c875c8a5e 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+800 4001 e1118b87-bfea-42be-b365-1c99d35511cc 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+801 4001 43060aae-0e85-4ec6-9fc9-b05216b11e13 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+802 4001 868f47ed-fe83-49c4-be2c-70731b436220 102 {"x": "displacement", "anglex": "αx"} f \N \N \N
+803 4002 a0d06bbf-dedc-47dc-8d1e-52e2a282a93a 102 {"anglex": "αx", "angley": "αy"} f \N \N \N
+804 4007 a0d06bbf-dedc-47dc-8d1e-52e2a282a93a 100 {"anglex": "x", "angley": "y"} f \N \N \N
+805 4006 868f47ed-fe83-49c4-be2c-70731b436220 100 {"phy": "DAQi", "anglex": "DAQi"} f \N \N \N
+806 1002 6f6f83fa-1af9-4e4c-8d3f-53c2a4d1b4ca \N {"humidity": "humidity", "temperature": "temperature"} f \N \N \N
+849 1052 12f885d6-8a49-4495-909e-8a938e23ec8b \N \N f \N \N \N
+807 2004 cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3 \N {} t 217 {"F": "force", "physicalvalue": "εi"} \N
+808 1010 6039a6d8-af54-411e-a520-451b20b6d089 \N {"physicalvalue": "waterLevel"} f \N \N \N
+809 1009 6bc95aa6-88cd-4473-98fc-7f4a1d76fc4a \N {"waterlevel": "waterLevel"} f \N \N \N
+810 1034 7e5507c8-b21b-47c0-b9de-f79f09875fc7 \N {"pm10": "pm10", "pm25": "pm25", "noise": "noise", "speed": "speed", "humidity": "humidity", "direction": "direction", "temperature": "temperature"} f \N \N \N
+812 7008 1c9756ed-dcf4-4156-9a43-09ce478d2038 140 {"L": "distance", "length": "S1"} f \N \N \N
+813 7009 213e2ff2-285b-445d-8661-24f6f91bf7b8 \N {"trash": "trash", "signal": "signal", "weight": "weight", "electric": "electric", "latitude": "latitude", "stateCode": "stateCode ", "temprature": "temprature", "stateMessage": "stateMessage", "usedelectric": "usedelectric"} f \N \N \N
+814 4001 6431292f-5b95-41f0-8291-ff902e58b376 100 {"phy": "displacement", "height": "DAQi"} f \N \N \N
+815 4021 6431292f-5b95-41f0-8291-ff902e58b376 101 {"x": "y", "y": "z", "height": "yi", "northing": "xi"} f \N \N \N
+850 2001 56c84083-d705-4aa0-94d2-34b731f75f97 120 {"force": "cableForce"} f \N \N \N
+816 1004 7d9b7e21-42e2-4040-86d7-4bdbba095e43 \N {"temperature": "temperature"} f \N \N \N
+817 4001 bff19d80-ce20-4c3d-b158-df091a1fb5ac 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+818 3003 cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3 123 {"σ": "stress", "physicalvalue": "ε"} f \N \N \N
+819 4001 31be3fb7-3369-4966-8e26-b561dc31b6fd 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+820 1001 1d7e6445-a676-42b9-9314-837415832451 \N {"windSpeed": "speed", "windDirection": "direction"} f \N \N \N
+821 1001 a8dd8956-f9ae-40d0-b207-8f5cf9669545 \N {"windSpeed": "speed", "windDirection": "direction"} f \N \N \N
+822 1005 79d3e66b-d0ad-4c0f-b724-11eca0d0c0cb 103 {"H": "waterLevel", "waterLever": "h"} f \N \N \N
+823 1003 52c7f175-bdd6-4c4c-948d-aa2a7868cd82 \N {"hourRainfall": "rainfall"} f \N \N \N
+824 4008 ff8195ce-78e0-4668-81bb-8f26e83411a9 100 {"phy": "crack", "displacement": "DAQi"} f \N \N \N
+825 4009 bcc5cadb-0395-464b-8ead-ac3917b49e30 100 {"phy": "expansion", "lvdt": "DAQi"} f \N \N \N
+826 2001 1bcd78b8-bd96-4c95-8e19-27a1ac7356c9 \N \N t 202 {"Δh": "cableForce", "physicalvalue": "pv"} \N
+847 2001 e32efbee-3c36-4be6-a4d3-d5058acf1fda 120 {"force": "cableForce"} f \N \N \N
+851 2001 09252236-560b-47e1-bf81-f774d303ba26 \N {} t 222 \N \N
+828 1007 afba576d-0e5e-48cf-a9fa-18a3f986d812 \N {"ein": "soundLevel", "maxnf": "max", "minnf": "min"} f \N \N \N
+827 5005 56c84083-d705-4aa0-94d2-34b731f75f97 141 {} f \N \N \N
+829 4005 868f47ed-fe83-49c4-be2c-70731b436220 102 {"anglex": "αy"} f \N \N \N
+830 1050 c1e63dc1-8a68-4dad-a180-c652ea587e83 \N {"totalPhosphorus": "totalPhosphorus"} f \N \N \N
+831 2014 0b09cbd9-3881-4b4a-8910-0e8730d5d935 125 {"σ": "δi", "physicalvalue": "F"} t 220 {"Nc": "force", "Δt": "temperature", "temperature": "tv"} \N
+832 2014 ca6af9e3-f1dc-4992-8029-d0e438ef99b5 125 {"σ": "δi", "physicalvalue": "F"} t 220 {"Nc": "force", "Δt": "temperature", "temperature": "tv"} \N
+833 2014 d3763c4f-94ba-4ae4-b35e-ccff2340c16a 125 {"σ": "δi", "physicalvalue": "F"} t 220 {"Nc": "force", "Δt": "temperature", "temperature": "tv"} \N
+834 2014 aab61193-270e-4d06-9bdf-9da5194c744a 125 {"σ": "δi", "physicalvalue": "F"} t 220 {"Nc": "force", "Δt": "temperature", "temperature": "tv"} \N
+835 3007 4fa8750d-807d-4c0c-9526-2662418f6f2f \N {"physicalvalue": "force"} f \N \N \N
+836 4005 a0d06bbf-dedc-47dc-8d1e-52e2a282a93a 102 {"anglex": "αx", "angley": "αy"} f \N \N \N
+837 1007 20d96ea0-8995-453b-aa12-191acb05eced \N {"noise": "soundLevel"} f \N \N \N
+839 4008 31be3fb7-3369-4966-8e26-b561dc31b6fd 100 {"phy": "crack", "length": "DAQi"} f \N \N \N
+841 1004 d31031ab-0237-41a5-adc0-867c1e9952f7 \N {"temperature": "temperature"} f \N \N \N
+843 1002 fd94699e-65db-45b8-bbe9-88c147ba1e0a \N {"humidity": "humidity", "temperature": "temperature"} f \N \N \N
+844 1026 c730d30c-6a9d-4e3e-b347-7dfbe40a217d \N {"realTimeGasCon": "concentration"} f \N \N \N
+845 1032 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 142 {"v_co": "co", "v_o3": "o3", "v_no2": "no2", "v_so2": "so2"} f \N \N \N
+846 3003 0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1 125 {"σ": "stress", "physicalvalue": "F"} f \N \N \N
+859 1002 a2a6365d-ec0a-453a-be54-35e11b324d63 \N {"humidity": "humidity", "temperature": "temperature"} f \N \N \N
+848 1051 a21dbc9a-38d2-4468-8149-8324e875fc8a \N \N f \N \N \N
+852 4003 39e6fe98-3dea-458b-9f64-143d18617cc4 \N {"height": "z", "easting": "x", "northing": "y"} f \N \N \N
+853 4013 39e6fe98-3dea-458b-9f64-143d18617cc4 139 {"X": "x", "Y": "y", "Z": "h", "height": "zi", "easting": "xi", "northing": "yi"} f \N \N \N
+854 4021 39e6fe98-3dea-458b-9f64-143d18617cc4 101 {"x": "y", "y": "z", "height": "yi", "northing": "xi"} f \N \N \N
+855 4022 e867f531-f1a3-44c8-9876-368efe947b7d \N {"OU": "OU", "NH3": "NH3", "VOC": "VOC", "PM10": "PM10", "PM25": "PM2.5", "C2H5OH": "C2H5OH"} f \N \N \N
+856 4023 d86466d8-8892-45e2-a86a-56e283df30ac \N {"OU": "OU", "CH4": "CH4", "H2S": "H2S", "NH3": "NH3"} f \N \N \N
+857 4001 39e6fe98-3dea-458b-9f64-143d18617cc4 100 {"phy": "displacement", "height": "DAQi"} f \N \N \N
+858 4024 e867f531-f1a3-44c8-9876-368efe947b7d \N {"OU": "OU", "NH3": "NH3", "VOC": "VOC", "C2H5OH": "C2H5OH"} f \N \N \N
+860 1046 91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 144 {"V": "volume", "physicalvalue": "Pi"} f \N \N \N
+861 1005 1a7f1970-6142-4919-a1e7-110829051ba9 \N {"physicalvalue": "waterLevel"} f \N \N \N
+862 4008 43060aae-0e85-4ec6-9fc9-b05216b11e13 100 {"phy": "crack", "length": "DAQi"} f \N {} \N
+462 4008 167d20c6-d128-4532-9974-d4a55788823e 100 {"phy": "crack", "lvdt": "DAQi"} f \N \N \N
+863 4003 ff948ead-5a62-4990-b5c9-a440be471988 109 {"x": "x", "y": "y", "z": "z", "dx": "xi", "dy": "yi", "dz": "zi"} f \N \N \N
+864 8002 07977267-d666-4b82-8976-d533e9afde5b \N {"PH": "temp", "oxy": "do", "turbidity": "turb", "temperature": "ph", "conductivity": "tds"} f \N \N \N
+865 1048 1dcd0084-9a2d-43ef-9b10-1e8305ce8b06 \N {"cidCode": "stateCode", "signals": "signals", "voltage": "voltage", "cidMessage": "stateMessage"} f \N \N \N
+866 4026 d86466d8-8892-45e2-a86a-56e283df30ac \N \N f \N \N \N
+867 9001 11b16ed9-a251-4907-b941-5a31ea559da1 \N {"readingNumber": "total"} f \N \N \N
+868 1046 c9eacd36-38d6-48b9-9672-e76406906ea3 144 {"V": "volume", "physicalvalue": "Pi"} f \N \N \N
+869 4007 d9aab088-57f5-43ba-b30b-3342219a4b75 \N {"X": "x", "Y": "y"} f \N \N \N
+870 5002 12253047-b588-4225-9f55-e6282003788a 122 \N f \N \N \N
+871 4014 e4de5a5f-c4cc-4e7e-bb0b-b34c28a89925 \N {"speed": "speed", "height": "height", "moment": "moment", "radius": "moment", "weight": "angle", "rotation": "angle", "obliquity": "obliquity"} f \N \N \N
+838 4002 d2e74fbe-59fe-420d-b127-c61ba8236f42 \N {"anglex": "x", "angley": "y"} f \N \N \N
+872 3001 73a7b800-25d7-41ad-872d-96cc4f9430de \N {"physicalvalue": "strain"} f \N \N \N
+879 1003 c51512a6-3e90-4b6e-8a21-987464b10ca9 \N {"physicalvalue": "rainfall"} f \N \N \N
+685 4001 1c9756ed-dcf4-4156-9a43-09ce478d2038 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+880 4001 2d0ff832-a7e0-4029-94bf-d7203c1fa793 \N {"length": "displacement"} f \N \N \N
+884 9010 085307b7-181b-4059-9e81-1cbfff8fa061 \N {"data_in": "inflow", "data_out": "outflow"} f \N \N \N
+875 9010 f3a9238e-8d1c-4876-a81d-f2bb05755585 \N {"inCount": "inflow", "outCount": "outflow"} f \N \N \N
+874 1005 b7dd781d-dba7-4228-b49f-8aee75e42625 \N {"waterlevel": "waterLevel"} f \N \N \N
+878 2003 90e48651-6ab9-4f11-95e9-c2c7eb4c3c15 \N {"physicalvalue": "pressure"} f \N \N \N
+877 4001 c991c138-3b47-4a21-af81-9ba1df554176 \N {"anglex": "displacement"} f \N \N \N
+876 4002 c991c138-3b47-4a21-af81-9ba1df554176 \N {"anglex": "x", "angley": "y"} f \N \N \N
+873 4001 0b84defc-2160-4d4a-8d71-6f350b4d6666 \N {"length": "displacement"} f \N \N \N
+840 4003 e92738ba-66bf-4ec9-85c5-c1f2b4d7780e \N {"x": "x", "y": "y", "z": "z"} f \N \N \N
+503 5001 09252236-560b-47e1-bf81-f774d303ba26 122 \N t 122 \N \N
+881 5001 56c84083-d705-4aa0-94d2-34b731f75f97 122 \N t 122 \N \N
+885 3001 56c84083-d705-4aa0-94d2-34b731f75f97 148 {"r": "strain", "physicalvalue": "i"} f \N \N \N
+766 2006 b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 135 {"σ": "δi", "physicalvalue": "F"} t 204 {"Nc": "force"} \N
+882 5006 56c84083-d705-4aa0-94d2-34b731f75f97 \N \N t 222 \N \N
+883 5006 09252236-560b-47e1-bf81-f774d303ba26 \N \N t 222 \N \N
+536 3001 d31031ab-0237-41a5-adc0-867c1e9952f7 \N {"physicalvalue": "strain"} t 202 {"Δh": "strain", "physicalvalue": "pv"} \N
+842 4011 1c9756ed-dcf4-4156-9a43-09ce478d2038 201 {"Δh": "displacement", "length": "leni"} f \N \N \N
+886 5003 56c84083-d705-4aa0-94d2-34b731f75f97 148 {"r": "trms", "physicalvalue": "i"} f \N \N \N
+888 1005 e2ad2fb6-75a3-490f-82ae-eac117102885 \N {"waterlevel": "waterLevel"} f \N \N \N
+889 1006 c677c2a2-bc09-4171-ad9c-f9ddfbf3d046 \N {"waterrate": "humidity"} f \N \N \N
+890 1004 d1b7163a-96fb-4364-a1ec-73b29be3dbc0 \N {"temperature": "temperature"} f \N \N \N
+891 4012 ecf4b234-2797-4fbc-bf0d-0f3f41dbd017 \N {"x": "x", "y": "y", "z": "z"} f \N \N \N
+892 4003 7d999707-8940-47f8-995e-f50b44e48ede \N {"gx": "x", "gy": "y", "gz": "z"} f \N \N \N
+887 1001 27e93aa0-1ec0-40df-aa0e-de4152459a66 \N {"windSpeed": "speed", "windDirection": "direction"} f \N \N \N
+894 4012 7c054865-5f77-4df5-9d1b-ed2c6f1bb27e \N {"anglex": "x", "angley": "y", "anglez": "z"} f \N \N \N
+430 2004 f6b98e0f-0bfe-4a95-808c-d6d10b4c803b \N {"physicalvalue": "force"} t 202 {"Δh": "force", "force": "pv"} \N
+901 4007 7c054865-5f77-4df5-9d1b-ed2c6f1bb27e \N {"anglex": "x", "angley": "y"} f \N \N \N
+902 4001 dadaf677-ed6c-4f61-ba61-d030f157dd14 100 {"phy": "displacement", "length": "DAQi"} f \N \N \N
+899 5002 8f03b15b-fbb7-4bca-ae92-2230abf071b7 122 \N f \N \N \N
+898 5002 5ab5659c-c875-43de-a5cb-c2c09a6b738d 122 {} f \N \N \N
+900 5002 a7e6bd92-16dd-49b0-a4c1-115a6c8b272f 122 \N f \N \N \N
+811 2002 ba311e19-eea2-4eff-8674-1a146dab66c3 \N {"speed": "carSpeed", "axisNum": "axleCount", "overload": "strOverload", "axisSpeed": "license", "crossRoad": "lane", "direction": "direction", "axieWeight": "axleLoad", "grossWeight": "load"} f \N \N \N
+662 2002 32349c76-d117-4331-8a10-9b7ea057c2ab \N {"axisnum": "axleCount", "licence": "license", "overload": "strOverload", "axieSpeed": "carSpeed", "crossRoad": "lane", "direction": "direction", "axieWeight": "axleLoad", "grossWeight": "load"} f \N \N \N
+903 9010 c892bb1b-57aa-4b52-b1eb-79172e95a8fb \N {"inCount": "inflow", "outCount": "outflow"} f \N \N \N
+904 7030 f8803e24-c7c9-4089-8f06-5a00433131b1 \N {"frequency": "frequency", "A_phase_volt": "A_phase_volt", "B_phase_volt": "B_phase_volt", "C_phase_volt": "C_phase_volt", "total_energy": "total_energy", "A_active_power": "A_active_power", "A_power_factor": "A_power_factor", "B_active_power": "B_active_power", "B_power_factor": "B_power_factor", "C_active_power": "C_active_power", "C_power_factor": "C_power_factor", "A_phase_current": "A_phase_current", "B_phase_current": "B_phase_current", "C_phase_current": "C_phase_current", "total_active_power": "total_active_power", "total_power_factor": "total_power_factor", "total_phase_current": "total_phase_current"} f \N \N \N
+905 4009 31be3fb7-3369-4966-8e26-b561dc31b6fd 100 {"phy": "expansion", "length": "DAQi"} f \N \N \N
+432 2004 8bab3e11-dc23-4082-97ec-a04e78fa19c3 \N {"physicalvalue": "force"} t 202 {"Δh": "force", "force": "pv"} \N
+\.
+
+
+--
+-- Data for Name: t_factor_proto_item; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_factor_proto_item (id, proto, name, field_name, "precision") FROM stdin;
+1 1001 风速 speed \N
+2 1001 风向 direction \N
+3 1002 温度 temperature \N
+4 1002 湿度 humidity \N
+5 1003 降雨量 rainfall \N
+6 1004 温度 temperature \N
+8 1006 湿度 humidity \N
+9 1007 等效声级 soundLevel \N
+10 1007 最小 min \N
+11 1007 最大 max \N
+12 1008 渗流量 seepage \N
+13 1009 地下水位 waterLevel \N
+14 1010 干滩长度 beachWidth \N
+15 1010 库水位 waterLevel \N
+16 1011 电流 electricity \N
+17 1012 压强 pressure \N
+18 1013 液位 liquidLevel \N
+19 1014 累计流量 total \N
+20 1014 瞬时流量 instant \N
+21 1015 蚀度 corrosion \N
+22 1016 ph值 ph \N
+23 1017 浓度 concentration \N
+24 1018 浓度 concentration \N
+25 1019 爆炸下限 lel \N
+26 1020 流明 lumen \N
+27 1021 辐射强度 radiation \N
+28 1022 风速 speed \N
+29 1023 浓度 concentration \N
+30 1024 井底液位 liquidLevel \N
+31 1024 井口液位 liquidLevel \N
+32 1025 主用液位 liquidLevel \N
+33 1025 备用液位 liquidLevel \N
+34 2001 索力 cableForce \N
+35 2002 车重 load \N
+37 2003 压力 pressure \N
+38 2004 受力 force \N
+39 3001 应变 strain \N
+40 3002 最大主应力 stress \N
+41 3002 主应力方向 direction \N
+42 3003 应力 stress \N
+44 4002 X方向位移 x \N
+45 4002 Y方向位移 y \N
+46 4003 X方向位移 x \N
+47 4003 Y方向位移 y \N
+48 4003 Z方向位移 z \N
+49 4004 挠度 deflection \N
+50 4005 X方向位移 x \N
+51 4005 Y方向位移 y \N
+52 4005 X方向累积位移 xTotal \N
+53 4005 Y方向累积位移 yTotal \N
+54 4006 角度 angle \N
+57 4008 裂缝 crack \N
+58 4009 伸缩缝 expansion \N
+59 4010 X方向倾角 x \N
+60 4010 Y方向倾角 y \N
+61 4010 顶升高度A a \N
+62 4010 顶升高度B b \N
+63 4010 顶升高度C c \N
+64 4010 顶升高度D d \N
+66 5001 峰峰值 ppv \N
+67 5001 有效值 trms \N
+69 5002 峰峰值 ppv \N
+70 5002 有效值 trms \N
+72 5003 峰峰值 ppv \N
+73 5003 有效值 trms \N
+74 6001 主起变频输出转速 rotateSpeed \N
+75 6001 主起变频输出电流 electricity \N
+76 6001 主起变频输出转矩 torque \N
+77 6001 主起变频输出电压 outputVoltage \N
+78 6001 主起变频母线电压 busbarVoltage \N
+79 6001 主起位置 location \N
+80 6001 主起重量 weight \N
+81 6002 副起位置 location \N
+82 6002 副起重量 weight \N
+83 6003 大车变频输出转速 rotateSpeed \N
+84 6003 大车变频输出电流 electricity \N
+85 6003 大车变频输出转矩 torque \N
+86 6003 大车变频输出电压 outputVoltage \N
+87 6003 大车变频母线电压 busbarVoltage \N
+88 6003 大车位置 location \N
+89 6004 小车变频输出转速 rotateSpeed \N
+90 6004 小车变频输出电流 electricity \N
+91 6004 小车变频输出转矩 torque \N
+92 6004 小车变频输出电压 outputVoltage \N
+93 6004 小车变频母线电压 busbarVoltage \N
+94 6004 主起位置 location \N
+95 4011 位移 displacement \N
+96 1026 浓度 concentration \N
+97 1027 PM2.5 pm25 \N
+98 1027 PM10 pm10 \N
+99 1027 悬浮物 suspended \N
+100 1028 温度 temp \N
+101 1028 结冰厚度 thickness \N
+103 1029 风向 direction \N
+104 2005 重量 gravity \N
+105 4012 X轴角度 x \N
+106 4012 Y轴角度 y \N
+107 4012 Z轴角度 z \N
+108 1030 能见度 visibility \N
+109 1031 浓度 concentration \N
+111 2002 车道 lane \N
+112 2002 车牌 license \N
+113 2002 方向 direction \N
+114 2002 轴数 axleCount \N
+115 2002 轴重 axleLoad \N
+68 5002 峰值 pv \N
+65 5001 峰值 pv \N
+71 5003 峰值 pv \N
+116 4013 横向变化量 horz \N
+117 4013 纵向变化量 vert \N
+118 4013 位移变化量 position \N
+119 4013 高程变化量 height \N
+120 4013 X北坐标 x \N
+121 4013 Y横坐标 y \N
+122 4013 H高程 h \N
+123 2006 支撑轴力 force \N
+124 1032 PM2.5浓度 PM2.5 \N
+125 1032 PM10浓度 PM10 \N
+126 1032 SO2浓度 SO2 \N
+127 1032 NO2浓度 NO2 \N
+128 1032 CO浓度 CO \N
+129 1032 O3浓度 O3 \N
+130 1032 总挥发性有机物浓度 TVOC \N
+131 1032 温度 temp \N
+132 1032 湿度 humidity \N
+133 1033 露点 dewpoint \N
+134 1033 光辐射 radiation \N
+137 1033 温度 temperature \N
+138 1033 湿度 humidity \N
+135 1033 CO2浓度 CO2 \N
+43 4001 位移 displacement 2
+55 4007 X方向角度 x 2
+159 4014 载重 load \N
+160 4014 幅度 range \N
+161 4014 风速 speed \N
+162 4014 角度 angle \N
+163 4014 高度 height \N
+164 1034 温度 temperature \N
+165 1034 湿度 humidity \N
+166 1034 PM2.5 pm25 \N
+167 1034 PM10 pm10 \N
+168 1034 风速 speed \N
+169 1034 噪声 noise \N
+170 7001 X方向角度 x \N
+171 7001 Y方向角度 y \N
+172 7001 轴力 force \N
+173 7002 X方向角度 x \N
+174 7002 Y方向角度 y \N
+175 7002 支架水平位移 displacement \N
+176 7003 X方向角度 x \N
+177 7003 Y方向角度 y \N
+178 7003 模板沉降 settling \N
+179 1034 风向 direction \N
+180 4014 倾斜 obliquity \N
+181 8001 SO2 so2 \N
+182 8001 NO2 no2 \N
+183 8001 CO co \N
+184 8001 O3 o3 \N
+185 8001 PM10 pm10 \N
+186 8001 PM2.5 pm2_5 \N
+187 8001 VOCs vocs \N
+188 4014 力矩 moment \N
+206 9001 电表示数 total \N
+207 9002 水表示数 total \N
+208 9003 女厕驻留人数 female_stay \N
+209 9003 女厕出流量 female_out \N
+210 9003 女厕进流量 female_in \N
+211 9003 男厕驻留人数 male_stay \N
+212 9003 男厕出流量 male_out \N
+213 9003 男厕进流量 male_in \N
+214 9004 温度 temperature \N
+215 9004 湿度 humidity \N
+216 9004 氨气浓度 nh3 \N
+217 0001 状态 state \N
+219 4015 风级 windLevel \N
+220 4015 风速 windSpeed \N
+221 4015 倾角X obliguityX \N
+222 4015 倾角Y obliguityY \N
+223 4015 楼层 floor \N
+224 4015 高度 height \N
+225 4015 速度 speed \N
+226 4015 载重 weight \N
+227 4015 人数 peopleCnt \N
+218 4015 笼门开关状态 doorState \N
+228 1041 盐分 saltContent \N
+229 1041 电导率 conductivity \N
+230 6010 经度 lang \N
+231 6010 纬度 long \N
+232 6010 电量 power \N
+233 1035 PM2.5 pm25 \N
+234 1035 PM10 pm10 \N
+235 1035 噪声 noise \N
+236 1035 温度 temperature \N
+237 1035 湿度 humidity \N
+238 4016 高程 height \N
+239 8003 间隔 interval \N
+240 8003 次数 total \N
+241 8003 结束时间 timeEnd \N
+242 8003 开始时间 timeBegin \N
+243 8004 心跳 heartrate \N
+244 8004 纬度 lat \N
+245 8004 经度 lon \N
+246 8004 地址 address \N
+247 8004 城市 city \N
+248 8005 电量 power \N
+249 8006 纬度 lat \N
+250 8006 经度 lon \N
+251 8006 地址 address \N
+252 8006 城市 city \N
+253 8007 纬度 lat \N
+254 8007 经度 lon \N
+255 8007 地址 address \N
+256 8007 城市 city \N
+257 8008 心率 heartrate \N
+258 8009 步数 stepvalue \N
+259 8003 次数 count \N
+260 8003 睡眠类型 sleeptype \N
+261 7007 塑料垃圾容量 high1 \N
+262 7007 纸类垃圾容量 high2 \N
+263 7007 金属垃圾容量 high3 \N
+264 7007 衣服垃圾容量 high4 \N
+265 7007 玻璃垃圾容量 high5 \N
+266 7007 有害垃圾容量 high6 \N
+267 7007 电子垃圾容量 high7 \N
+268 7007 纸塑品垃圾容量 high8 \N
+269 7007 餐厨垃圾容量 high9 \N
+270 7007 可回收垃圾容量 high10 \N
+271 7007 塑料垃圾容量 high11 \N
+272 7007 瓶罐垃圾容量 high12 \N
+273 7007 不可回收垃圾容量 high13 \N
+274 8010 NH3 nh3 \N
+275 8010 VOC voc \N
+276 8010 H2S h2s \N
+277 8011 温度 temperature \N
+278 8011 湿度 humidity \N
+279 8011 PM100浓度 pm100 \N
+280 8011 PM2.5浓度 pm2_5 \N
+281 8011 PM10浓度 pm10 \N
+282 8011 经度 longitude \N
+283 8011 纬度 latitude \N
+284 8011 SO2浓度 so2 \N
+285 8011 NO2浓度 no2 \N
+286 8011 O3浓度 o3 \N
+287 8011 CO浓度 co \N
+288 8011 VOC浓度 voc \N
+289 9005 门1 DI1 \N
+290 9005 门2 DI2 \N
+291 9005 门3 DI3 \N
+292 4018 仰拱安全步距 arch \N
+293 4018 掌子面安全步距 tunnelface \N
+294 9010 进入流量 inflow \N
+295 9010 出去流量 outflow \N
+296 6010 速度 speed \N
+297 2005 载重百分比 weightPercent \N
+299 1045 流量 flow \N
+301 1047 进水量 volume \N
+302 8012 恶臭 Odor \N
+303 8012 氨气 NH3 \N
+304 8012 硫化氢 H2S \N
+305 8012 VOCS VOCS \N
+306 1048 状态码 stateCode \N
+110 2002 超载 strOverload \N
+307 3006 应力 stress \N
+308 4014 在线状态 online \N
+309 4020 沉降 x \N
+310 4020 相邻沉降 diffX \N
+311 8013 运行时长 runtime \N
+312 8013 有功电能 pEnergy \N
+313 8013 在线状态(0不在线,1在线) online \N
+314 8013 电压 voltage \N
+315 8013 状态(1开灯,0关灯) on \N
+316 8013 亮度(百分比) bri \N
+317 8013 频率 frequency \N
+318 8013 灯杆编号 lampPoleNumber \N
+319 5041 状态码 stateCode \N
+189 8002 PH值 ph 2
+190 8002 电导 tds 2
+191 8002 溶解氧 do 2
+192 8002 浊度 turb 2
+193 8002 温度 temp 2
+320 1048 状态信息 stateMessage \N
+321 1048 电压 voltage \N
+322 1048 信号强度 signals \N
+323 7008 轨心距 distance \N
+324 5041 状态信息 stateMessage \N
+325 5041 电压 voltage \N
+326 5041 信号强度 signals \N
+327 8013 告警状态 alarm_status \N
+328 8013 纬度 latitude \N
+329 8013 经度 longitude \N
+330 8013 网关名称 gatewayName \N
+331 7009 重量 weight \N
+332 7009 垃圾量 trash \N
+333 7009 温度 temprature \N
+334 7009 日用电量 usedelectric \N
+335 7009 日充电量 electric \N
+336 7009 信号强度 signal \N
+337 7009 纬度 latitude \N
+338 7009 经度 longitude \N
+339 7009 状态码 stateCode \N
+340 7009 状态信息 stateMessage \N
+342 4021 Y方向位移 y \N
+343 4021 Z方向位移 z \N
+344 2002 车速 carSpeed \N
+346 5005 振动加速度级 arrAcc \N
+347 1050 总磷 totalPhosphorus \N
+348 2014 受力 force \N
+349 2014 温度 temperature \N
+345 5005 分频最大振级 soundLevel \N
+350 3007 应力 force \N
+351 1052 太阳辐射值 solarRadiation \N
+352 1051 温度 temperature \N
+353 1051 湿度 humidity \N
+354 1051 气压 pressure \N
+355 4023 氨气 NH3 \N
+356 4023 硫化氢 H2S \N
+357 4023 甲烷 CH4 \N
+358 4023 臭气 OU \N
+359 4022 氨气 NH3 \N
+360 4022 乙醇 C2H5OH \N
+361 4022 PM2.5 PM2.5 \N
+362 4022 PM10 PM10 \N
+363 4022 VOC VOC \N
+364 4022 臭气 OU \N
+365 4024 氨气 NH3 \N
+366 4024 乙醇 C2H5OH \N
+367 4024 VOC VOC \N
+368 4024 臭气 OU \N
+56 4007 Y方向角度 y 2
+369 7010 水压 pressure \N
+370 7010 倾斜角度 angle \N
+371 7011 电流 current \N
+372 7011 温度 temperature \N
+373 4025 X轴角度 x \N
+374 4025 Y轴角度 y \N
+375 4025 Z轴角度 z \N
+376 4025 X轴加速度 xAcc \N
+377 4025 Y轴加速度 yAcc \N
+378 4025 Z轴加速度 zAcc \N
+379 4025 信号 signal \N
+380 4025 电压 Voltage \N
+381 4025 传感器状态 state \N
+382 4026 氨气 NH3 \N
+383 4026 硫化氢 H2S \N
+384 4026 臭气 OU \N
+7 1005 水位 waterLevel 2
+300 1046 库容 volume 2
+385 8022 一氧化碳 CO \N
+386 8022 氨气 CH4 \N
+387 8022 硫化氢 H2S \N
+388 8022 臭氧 O3 \N
+389 8022 温度 temp \N
+390 8022 湿度 humidity \N
+391 5006 X峰值 x \N
+392 5006 Y峰值 y \N
+393 5006 Z峰值 z \N
+394 8033 标签与基站距离 distance \N
+395 8033 标签状态 state \N
+396 8033 基站ID station_id \N
+397 7030 A相电压 A_phase_volt \N
+398 7030 B相电压 B_phase_volt \N
+399 7030 C相电压 C_phase_volt \N
+400 7030 A相电流 A_phase_current \N
+401 7030 B相电流 B_phase_current \N
+402 7030 C相电流 C_phase_current \N
+403 7030 三相电流矢量和 total_phase_current \N
+404 7030 A相有功功率 A_active_power \N
+405 7030 B相有功功率 B_active_power \N
+406 7030 C相有功功率 C_active_power \N
+407 7030 总有功功率 total_active_power \N
+408 7030 A相功率因数 A_power_factor \N
+409 7030 B相功率因数 B_power_factor \N
+410 7030 C相功率因数 C_power_factor \N
+411 7030 总相功率因数 total_power_factor \N
+412 7030 频率 frequency \N
+413 7030 频率 total_energy \N
+\.
+
+
+--
+-- Data for Name: t_filter_method; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_filter_method (id, type, name, params) FROM stdin;
+1 1 取中值 {"窗口": "正整数"}
+2 1 限幅 {"波幅": "正数"}
+3 1 滑动平均 {"窗口": "正整数"}
+4 2 方差判断平均 {"倍数": "正数", "窗口": "正整数"}
+5 2 滤波算法 {"D": "正整数", "K": "正数", "ReCalc": "正整数", "窗口": "正整数"}
+6 2 去极值移动平均 {"上限": "数字", "下限": "数字", "窗口": "正整数"}
+7 2 加权滑动平均 {"窗口": "正整数"}
+8 2 中值平均 {"窗口": "正整数"}
+9 2 限幅平均 {"波幅": "正数", "窗口": "正整数"}
+9999 3 SJTH {}
+\.
+
+
+--
+-- Data for Name: t_group_type; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_group_type (type_code, name, description, params, present) FROM stdin;
+001 展示分组 普通展示分组 {} t
+101 浸润线分组 浸润线展示分组 {"height": {"name": "高度", "type": "number", "unit": "m"}} t
+102 索力分组 索力展示分组 {"location": {"name": "位置", "type": "number", "unit": "m"}} t
+103 挠度分组 挠度展示分组 {"location": {"name": "位置", "type": "number", "unit": "m"}} t
+104 深层水平位移分组 深层水平位移展示分组 {"depth": {"name": "深度", "type": "number", "unit": "m"}} t
+201 深层水平位移计算分组 深层水平位移计算分组 {"depth": {"name": "深度", "type": "number", "unit": "m"}} f
+202 压差测沉降计算分组 压差连通管计算分组 {"base": {"name": "基准点", "type": "boolean", "unit": ""}} f
+\.
+
+
+--
+-- Data for Name: t_group_type_factor; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_group_type_factor (id, group_type, proto) FROM stdin;
+1 101 1009
+2 102 2001
+3 103 4004
+4 104 4005
+\.
+
+
+--
+-- Data for Name: t_item_unit; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_item_unit (id, name, item, if_default, transform) FROM stdin;
+1 m/s 1 t 1.000000
+2 ° 2 t 1.000000
+3 ℃ 3 t 1.000000
+4 %RH 4 t 1.000000
+5 mm 5 t 1.000000
+6 ℃ 6 t 1.000000
+7 m 7 t 1.000000
+8 %RH 8 t 1.000000
+9 dB 9 t 1.000000
+10 dB 10 t 1.000000
+11 dB 11 t 1.000000
+12 m3/s 12 t 1.000000
+13 m 13 t 1.000000
+14 m 14 t 1.000000
+15 m 15 t 1.000000
+16 A 16 t 1.000000
+17 kPa 17 t 1.000000
+18 m 18 t 1.000000
+19 m^3 19 t 1.000000
+20 Nm^3h 20 t 1.000000
+21 NTU 21 t 1.000000
+22 ph 22 t 1.000000
+23 %Vol 23 t 1.000000
+24 ppm 24 t 1.000000
+25 %LEL 25 t 1.000000
+26 Lux 26 t 1.000000
+27 W/sr 27 t 1.000000
+28 m/s 28 t 1.000000
+29 ms/cm 29 t 1.000000
+30 m 30 t 1.000000
+31 m 31 t 1.000000
+32 mm 32 t 1.000000
+33 mm 33 t 1.000000
+34 kN 34 t 1.000000
+35 T 35 t 1.000000
+37 kN 38 t 1.000000
+38 με 39 t 1.000000
+39 MPa 40 t 1.000000
+40 ° 41 t 1.000000
+41 MPa 42 t 1.000000
+42 mm 43 t 1.000000
+43 mm 44 t 1.000000
+44 mm 45 t 1.000000
+45 mm 46 t 1.000000
+46 mm 47 t 1.000000
+47 mm 48 t 1.000000
+48 mm 49 t 1.000000
+49 mm 50 t 1.000000
+50 mm 51 t 1.000000
+51 mm 52 t 1.000000
+52 mm 53 t 1.000000
+53 ° 54 t 1.000000
+54 ° 55 t 1.000000
+55 ° 56 t 1.000000
+56 mm 57 t 1.000000
+57 mm 58 t 1.000000
+58 ° 59 t 1.000000
+59 ° 60 t 1.000000
+60 mm 61 t 1.000000
+61 mm 62 t 1.000000
+62 mm 63 t 1.000000
+63 mm 64 t 1.000000
+64 cm/s 65 t 1.000000
+65 cm/s 66 t 1.000000
+66 cm/s 67 t 1.000000
+67 gal 68 t 1.000000
+68 gal 69 t 1.000000
+69 gal 70 t 1.000000
+70 με 71 t 1.000000
+71 με 72 t 1.000000
+72 με 73 t 1.000000
+73 r/min 74 t 1.000000
+74 A 75 t 1.000000
+75 % 76 t 1.000000
+76 V 77 t 1.000000
+77 V 78 t 1.000000
+78 m 79 t 1.000000
+79 T 80 t 1.000000
+80 m 81 t 1.000000
+81 T 82 t 1.000000
+82 r/min 83 t 1.000000
+83 A 84 t 1.000000
+84 % 85 t 1.000000
+85 V 86 t 1.000000
+86 V 87 t 1.000000
+87 m 88 t 1.000000
+88 r/min 89 t 1.000000
+89 A 90 t 1.000000
+90 % 91 t 1.000000
+91 V 92 t 1.000000
+92 V 93 t 1.000000
+93 m 94 t 1.000000
+94 mm 95 t 1.000000
+95 μg/m3 96 t 1.000000
+96 μg/m3 97 t 1.000000
+97 μg/m3 98 t 1.000000
+98 μg/m3 99 t 1.000000
+99 ℃ 100 t 1.000000
+100 mm 101 t 1.000000
+101 ° 103 t 1.000000
+102 kg 104 t 1.000000
+103 ° 105 t 1.000000
+104 ° 106 t 1.000000
+105 ° 107 t 1.000000
+106 m 108 t 1.000000
+107 μmol/mol 109 t 1.000000
+108 110 t 1.000000
+109 111 t 1.000000
+110 112 t 1.000000
+111 113 t 1.000000
+112 114 t 1.000000
+121 kN 123 t 1.000000
+122 ug/m3 124 t 1.000000
+123 ug/m3 125 t 1.000000
+124 ppb 126 t 1.000000
+125 ppb 127 t 1.000000
+126 ppm 128 t 1.000000
+127 ppb 129 t 1.000000
+128 ppm 130 t 1.000000
+129 ℃ 131 t 1.000000
+130 %RH 132 t 1.000000
+131 ℃ 133 t 1.000000
+132 μM/m^2 134 t 1.000000
+133 ppm 135 t 1.000000
+134 ℃ 137 t 1.000000
+135 % 138 t 1.000000
+156 T 159 t 1.000000
+157 m 160 t 1.000000
+158 m/s 161 t 1.000000
+159 ° 162 t 1.000000
+160 m 163 t 1.000000
+167 ° 170 t 1.000000
+168 ° 171 t 1.000000
+169 kN 172 t 1.000000
+170 ° 173 t 1.000000
+171 ° 174 t 1.000000
+172 mm 175 t 1.000000
+173 ° 176 t 1.000000
+174 ° 177 t 1.000000
+175 mm 178 t 1.000000
+163 μg/m3 166 t 1.000000
+164 μg/m3 167 t 1.000000
+161 ℃ 164 t 1.000000
+162 %RH 165 t 1.000000
+165 m/s 168 t 1.000000
+166 dB 169 t 1.000000
+36 KPa 37 t 1.000000
+114 mm 116 t 1.000000
+113 T 115 t 1.000000
+177 ° 180 t 1.000000
+178 μg/m3 181 t 1.000000
+179 μg/m3 182 t 1.000000
+180 mg/m3 183 t 1.000000
+181 μg/m3 184 t 1.000000
+182 μg/m3 185 t 1.000000
+183 μg/m3 186 t 1.000000
+184 μg/m3 187 t 1.000000
+185 % 188 t 1.000000
+186 pH 189 t 1.000000
+187 μS/cm 190 t 1.000000
+188 mg/L 191 t 1.000000
+189 NTU 192 t 1.000000
+190 ℃ 193 t 1.000000
+203 kW·h 206 t 1.000000
+204 m3 207 t 1.000000
+205 人 208 t 1.000000
+206 人 209 t 1.000000
+207 人 210 t 1.000000
+208 人 211 t 1.000000
+209 人 212 t 1.000000
+210 人 213 t 1.000000
+211 ℃ 214 t 1.000000
+212 %RH 215 t 1.000000
+213 ppm 216 t 1.000000
+214 217 t 1.000000
+215 218 t 1.000000
+216 级 219 t 1.000000
+217 级 220 t 1.000000
+218 ° 221 t 1.000000
+219 ° 222 t 1.000000
+220 层 223 t 1.000000
+221 m 224 t 1.000000
+222 m/s 225 t 1.000000
+223 t 226 t 1.000000
+224 人 227 t 1.000000
+176 ° 179 t 1.000000
+225 mg/L 228 t 1.000000
+226 mS/cm 229 t 1.000000
+227 ° 230 t 1.000000
+228 ° 231 t 1.000000
+229 % 232 t 1.000000
+230 μg/m3 233 t 1.000000
+231 μg/m3 234 t 1.000000
+232 dB 235 t 1.000000
+233 ℃ 236 t 1.000000
+234 %RH 237 t 1.000000
+235 m 238 t 1.000000
+236 min 239 t 1.000000
+237 次 240 t 1.000000
+238 241 t 1.000000
+239 242 t 1.000000
+240 bpm 243 t 1.000000
+241 ° 244 t 1.000000
+242 ° 245 t 1.000000
+243 246 t 1.000000
+244 247 t 1.000000
+245 % 248 t 1.000000
+246 ° 249 t 1.000000
+247 ° 250 t 1.000000
+248 251 t 1.000000
+249 252 t 1.000000
+250 ° 253 t 1.000000
+251 ° 254 t 1.000000
+252 255 t 1.000000
+253 256 t 1.000000
+254 bpm 257 t 1.000000
+255 步 258 t 1.000000
+256 次 259 t 1.000000
+257 260 t 1.000000
+258 % 261 t 1.000000
+259 % 262 t 1.000000
+260 % 263 t 1.000000
+261 % 264 t 1.000000
+262 % 265 t 1.000000
+263 % 266 t 1.000000
+264 % 267 t 1.000000
+265 % 268 t 1.000000
+266 % 269 t 1.000000
+267 % 270 t 1.000000
+268 % 271 t 1.000000
+269 % 272 t 1.000000
+270 % 273 t 1.000000
+271 mg/m3 274 t 1.000000
+272 mg/m3 275 t 1.000000
+273 mg/m3 276 t 1.000000
+274 ℃ 277 t 1.000000
+275 %RH 278 t 1.000000
+276 μg/m3 279 t 1.000000
+277 μg/m3 280 t 1.000000
+278 μg/m3 281 t 1.000000
+279 ° 282 t 1.000000
+280 ° 283 t 1.000000
+281 μg/m3 284 t 1.000000
+282 μg/m3 285 t 1.000000
+283 μg/m3 286 t 1.000000
+284 μg/m3 287 t 1.000000
+285 μg/m3 288 t 1.000000
+286 289 t 1.000000
+287 290 t 1.000000
+288 291 t 1.000000
+289 cm 292 t 1.000000
+290 cm 293 t 1.000000
+291 人 294 t 1.000000
+292 人 295 t 1.000000
+293 m/s 296 t 1.000000
+294 % 297 t 1.000000
+298 m³ 301 t 1.000000
+299 302 t 1.000000
+300 g/h 303 t 1.000000
+301 g/h 304 t 1.000000
+302 g/h 305 t 1.000000
+303 306 t 1.000000
+304 MPa 307 t 1.000000
+305 308 t 1.000000
+306 mm 309 t 1.000000
+307 mm 310 t 1.000000
+308 h 311 t 1.000000
+309 KW 312 t 1.000000
+310 313 t 1.000000
+311 V 314 t 1.000000
+312 315 t 1.000000
+313 % 316 t 1.000000
+314 HZ 317 t 1.000000
+315 318 t 1.000000
+316 319 t 1.000000
+317 320 t 1.000000
+318 V 321 t 1.000000
+319 dB 322 t 1.000000
+297 万m³ 300 t 1.000000
+320 mm 323 t 1.000000
+115 mm 117 t 1.000000
+116 mm 118 t 1.000000
+117 mm 119 t 1.000000
+118 mm 120 t 1.000000
+119 mm 121 t 1.000000
+120 mm 122 t 1.000000
+321 324 t 1.000000
+322 V 325 t 1.000000
+323 dB 326 t 1.000000
+324 327 t 1.000000
+325 328 t 1.000000
+326 329 t 1.000000
+327 330 t 1.000000
+328 kg 331 t 1.000000
+329 % 332 t 1.000000
+330 ℃ 333 t 1.000000
+331 瓦 334 t 1.000000
+332 瓦 335 t 1.000000
+333 dB 336 t 1.000000
+334 ° 337 t 1.000000
+335 339 t 1.000000
+336 340 t 1.000000
+337 mm 342 t 1.000000
+338 mm 343 t 1.000000
+339 ° 338 t 1.000000
+340 km/h 344 t 1.000000
+341 dB 345 t 1.000000
+342 dB 346 t 1.000000
+343 mg/L 347 t 1.000000
+344 kN 348 t 1.000000
+345 ℃ 349 t 1.000000
+346 kPa 350 t 1.000000
+347 W/㎡ 351 t 1.000000
+348 ℃ 352 t 1.000000
+349 %RH 353 t 1.000000
+350 Kpa 354 t 1.000000
+367 mA 371 t 1.000000
+355 mg/m3 359 t 1.000000
+356 mg/m3 360 t 1.000000
+357 mg/m3 361 t 1.000000
+361 mg/m3 365 t 1.000000
+362 mg/m3 366 t 1.000000
+364 368 t 1.000000
+365 MPa 369 t 1.000000
+366 ° 370 t 1.000000
+360 364 t 1.000000
+359 mg/m3 363 t 1.000000
+368 ℃ 372 t 1.000000
+358 mg/m3 362 t 1.000000
+351 mg/m3 355 t 1.000000
+353 mg/m3 357 t 1.000000
+352 mg/m3 356 t 1.000000
+363 mg/m3 367 t 1.000000
+354 358 t 1.000000
+369 ° 373 t 1.000000
+370 ° 374 t 1.000000
+371 ° 375 t 1.000000
+372 mg 376 t 1.000000
+373 mg 377 t 1.000000
+374 mg 378 t 1.000000
+375 379 t 1.000000
+376 V 380 t 1.000000
+377 381 t 1.000000
+378 mg/m3 382 t 1.000000
+379 mg/m3 383 t 1.000000
+380 384 t 1.000000
+296 m³/s 299 t 1.000000
+381 ppm 385 t 1.000000
+382 ppm 386 t 1.000000
+383 ppm 387 t 1.000000
+384 ppm 388 t 1.000000
+385 ℃ 389 t 1.000000
+386 % 390 t 1.000000
+387 cm/s 391 t 1.000000
+388 cm/s 392 t 1.000000
+389 cm/s 393 t 1.000000
+390 m 394 t 1.000000
+391 395 t 1.000000
+392 396 t 1.000000
+393 V 397 t 1.000000
+394 V 398 t 1.000000
+395 V 399 t 1.000000
+396 A 400 t 1.000000
+397 A 401 t 1.000000
+398 A 402 t 1.000000
+399 A 403 t 1.000000
+400 KW 404 t 1.000000
+401 KW 405 t 1.000000
+402 KW 406 t 1.000000
+403 KW 407 t 1.000000
+404 408 t 1.000000
+405 409 t 1.000000
+406 410 t 1.000000
+407 411 t 1.000000
+408 HZ 412 t 1.000000
+409 KW 413 t 1.000000
+\.
+
+
+--
+-- Data for Name: t_layout_type; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_layout_type (id, name) FROM stdin;
+1 2d整体
+2 2d部件
+3 3d整体
+4 3d部件
+\.
+
+
+--
+-- Data for Name: t_message_type; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_message_type (id, name) FROM stdin;
+1 系统公告
+\.
+
+
+--
+-- Data for Name: t_project_type; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_project_type (id, type_name, description) FROM stdin;
+1 smartsite 智慧工地
+2 bridge 中小桥
+4 community 小区
+5 smartToilet 智慧公厕
+6 smartWorkSafety 智慧安监
+7 smartFireControl 智慧消防
+\.
+
+
+--
+-- Data for Name: t_type_report_type; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_type_report_type (id, name, description) FROM stdin;
+0 日报 \N
+1 周报 \N
+2 月报 \N
+3 年报 \N
+\.
+
+
+--
+-- Data for Name: t_report_template; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_report_template (id, name, description, handler, file_link, factor_proto, structure, report_type, manual, cells, struct_type, structs, params) FROM stdin;
+4 通用日报模板 通用模板 temp_comm daily/daily.xlsx \N \N 0 f {"data": {"count": 7, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"index": 1, "valueType": "init-value", "coords_col": 1, "factor_items": ""}, {"index": 2, "valueType": "last-mv", "coords_col": 2, "factor_items": ""}, {"index": 3, "valueType": "current-mv", "coords_col": 3, "factor_items": ""}, {"index": 4, "valueType": "last-cv", "coords_col": 4, "factor_items": ""}, {"index": 5, "valueType": "current-cv", "coords_col": 5, "factor_items": ""}, {"index": 6, "valueType": "current-accum-cv", "coords_col": 6, "factor_items": ""}], "sortByExt": null, "coords_row": 5}, "tempType": "daily", "head_items": [{"name": "[factorName]", "coords": {"row": 0, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 1, "colum": 0}}, {"name": "[lastMonitorDate]", "coords": {"row": 2, "colum": 0}}, {"name": "[thisMonitorDate]", "coords": {"row": 2, "colum": 4}}, {"name": "[itemName]", "coords": {"row": 4, "colum": 1}}, {"name": "[unit]", "coords": {"row": 4, "colum": 1}}, {"name": "[itemName]", "coords": {"row": 4, "colum": 2}}, {"name": "[unit]", "coords": {"row": 4, "colum": 2}}, {"name": "[itemName]", "coords": {"row": 4, "colum": 3}}, {"name": "[unit]", "coords": {"row": 4, "colum": 3}}, {"name": "[itemName]", "coords": {"row": 4, "colum": 4}}, {"name": "[unit]", "coords": {"row": 4, "colum": 4}}, {"name": "[itemName]", "coords": {"row": 4, "colum": 5}}, {"name": "[unit]", "coords": {"row": 4, "colum": 5}}, {"name": "[itemName]", "coords": {"row": 4, "colum": 6}}, {"name": "[unit]", "coords": {"row": 4, "colum": 6}}], "sheetIndex": 0, "tail_items": null, "chart_coords": null, "extGroupItems": null} {} {} \N
+6 通用周报模板 \N temp_comm weekly/weekly.xlsx \N \N 1 f {"data": {"count": 11, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"index": 1, "valueType": "init-value", "coords_col": 1, "factor_items": ""}, {"index": 2, "valueType": "every-accum-cv", "coords_col": 2, "factor_items": ""}, {"index": 3, "valueType": "current-cv", "coords_col": 9, "factor_items": ""}, {"index": 4, "valueType": "current-accum-cv", "coords_col": 10, "factor_items": ""}], "sortByExt": null, "coords_row": 7}, "tempType": "weekly", "head_items": [{"name": "[factorName]", "coords": {"row": 2, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 0, "colum": 0}}, {"name": "[dateFrom]", "coords": {"row": 3, "colum": 0}}, {"name": "[dateTo]", "coords": {"row": 3, "colum": 0}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 1}}, {"name": "[unit]", "coords": {"row": 6, "colum": 1}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 2}}, {"name": "[unit]", "coords": {"row": 6, "colum": 2}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 3}}, {"name": "[unit]", "coords": {"row": 6, "colum": 3}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 4}}, {"name": "[unit]", "coords": {"row": 6, "colum": 4}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 5}}, {"name": "[unit]", "coords": {"row": 6, "colum": 5}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 6}}, {"name": "[unit]", "coords": {"row": 6, "colum": 6}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 7}}, {"name": "[unit]", "coords": {"row": 6, "colum": 7}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 8}}, {"name": "[unit]", "coords": {"row": 6, "colum": 8}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 9}}, {"name": "[unit]", "coords": {"row": 6, "colum": 9}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 10}}, {"name": "[unit]", "coords": {"row": 6, "colum": 10}}], "sheetIndex": 0, "tail_items": null, "chart_coords": null, "extGroupItems": null} {} {} \N
+7 通用月报模板 \N temp_comm monthly/monthly.xlsx \N \N 2 f {"data": {"count": 11, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"index": 1, "valueType": "init-value", "coords_col": 1, "factor_items": ""}, {"index": 2, "valueType": "every-accum-cv", "coords_col": 2, "factor_items": ""}, {"index": 3, "valueType": "current-cv", "coords_col": 33, "factor_items": ""}, {"index": 4, "valueType": "current-accum-cv", "coords_col": 34, "factor_items": ""}, {"index": 5, "valueType": "c-speed", "coords_col": 35, "factor_items": ""}], "sortByExt": null, "coords_row": 7}, "tempType": "monthly", "head_items": [{"name": "[factorName]", "coords": {"row": 2, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 0, "colum": 0}}, {"name": "[dateFrom]", "coords": {"row": 3, "colum": 0}}, {"name": "[dateTo]", "coords": {"row": 3, "colum": 0}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 1}}, {"name": "[unit]", "coords": {"row": 6, "colum": 1}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 2}}, {"name": "[unit]", "coords": {"row": 6, "colum": 2}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 3}}, {"name": "[unit]", "coords": {"row": 6, "colum": 3}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 4}}, {"name": "[unit]", "coords": {"row": 6, "colum": 4}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 5}}, {"name": "[unit]", "coords": {"row": 6, "colum": 5}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 6}}, {"name": "[unit]", "coords": {"row": 6, "colum": 6}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 7}}, {"name": "[unit]", "coords": {"row": 6, "colum": 7}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 8}}, {"name": "[unit]", "coords": {"row": 6, "colum": 8}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 9}}, {"name": "[unit]", "coords": {"row": 6, "colum": 9}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 10}}, {"name": "[unit]", "coords": {"row": 6, "colum": 10}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 11}}, {"name": "[unit]", "coords": {"row": 6, "colum": 11}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 12}}, {"name": "[unit]", "coords": {"row": 6, "colum": 12}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 13}}, {"name": "[unit]", "coords": {"row": 6, "colum": 13}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 14}}, {"name": "[unit]", "coords": {"row": 6, "colum": 14}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 15}}, {"name": "[unit]", "coords": {"row": 6, "colum": 15}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 16}}, {"name": "[unit]", "coords": {"row": 6, "colum": 16}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 17}}, {"name": "[unit]", "coords": {"row": 6, "colum": 17}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 18}}, {"name": "[unit]", "coords": {"row": 6, "colum": 18}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 19}}, {"name": "[unit]", "coords": {"row": 6, "colum": 19}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 20}}, {"name": "[unit]", "coords": {"row": 6, "colum": 20}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 21}}, {"name": "[unit]", "coords": {"row": 6, "colum": 21}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 22}}, {"name": "[unit]", "coords": {"row": 6, "colum": 22}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 23}}, {"name": "[unit]", "coords": {"row": 6, "colum": 23}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 24}}, {"name": "[unit]", "coords": {"row": 6, "colum": 24}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 25}}, {"name": "[unit]", "coords": {"row": 6, "colum": 25}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 26}}, {"name": "[unit]", "coords": {"row": 6, "colum": 26}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 27}}, {"name": "[unit]", "coords": {"row": 6, "colum": 27}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 28}}, {"name": "[unit]", "coords": {"row": 6, "colum": 28}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 29}}, {"name": "[unit]", "coords": {"row": 6, "colum": 29}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 30}}, {"name": "[unit]", "coords": {"row": 6, "colum": 30}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 31}}, {"name": "[unit]", "coords": {"row": 6, "colum": 31}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 32}}, {"name": "[unit]", "coords": {"row": 6, "colum": 32}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 33}}, {"name": "[unit]", "coords": {"row": 6, "colum": 33}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 34}}, {"name": "[unit]", "coords": {"row": 6, "colum": 34}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 35}}, {"name": "[unit]", "coords": {"row": 6, "colum": 35}}], "sheetIndex": 0, "tail_items": null, "chart_coords": null, "extGroupItems": null} {} {} \N
+8 通用人工监测日报模板 通用模板 temp_mcomm daily/mc-daily.xlsx \N \N 0 t {"data": {"count": 11, "station": [{"index": 0, "valueType": "data-index", "coords_col": 0, "factor_items": ""}, {"index": 1, "valueType": "location", "coords_col": 1, "factor_items": ""}, {"index": 2, "valueType": "init-value", "coords_col": 2, "factor_items": ""}, {"index": 3, "valueType": "last-mv", "coords_col": 3, "factor_items": ""}, {"index": 4, "valueType": "current-mv", "coords_col": 4, "factor_items": ""}, {"index": 5, "valueType": "current-cv", "coords_col": 5, "factor_items": ""}, {"index": 6, "valueType": "c-speed", "coords_col": 6, "factor_items": ""}, {"index": 7, "valueType": "current-accum-cv", "coords_col": 7, "factor_items": ""}], "sortByExt": null, "coords_row": 7}, "tempType": "daily", "head_items": [{"name": "[factorName]", "coords": {"row": 0, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 2, "colum": 0}}, {"name": "[lastMonitorDate]", "coords": {"row": 6, "colum": 3}}, {"name": "[thisMonitorDate]", "coords": {"row": 3, "colum": 0}}, {"name": "[thisMonitorDate]", "coords": {"row": 6, "colum": 4}}, {"name": "[unit]", "coords": {"row": 5, "colum": 2}}, {"name": "[unit]", "coords": {"row": 5, "colum": 3}}, {"name": "[unit]", "coords": {"row": 5, "colum": 4}}, {"name": "[unit]", "coords": {"row": 5, "colum": 5}}, {"name": "[unit]", "coords": {"row": 5, "colum": 6}}, {"name": "[unit]", "coords": {"row": 5, "colum": 7}}, {"name": "[unit]", "coords": {"row": 5, "colum": 8}}], "sheetIndex": 0, "tail_items": null, "chart_coords": [{"coords": {"endCol": 9, "endRow": 21, "startCol": 0, "startRow": 20}, "factorItem": ""}], "extGroupItems": null} {} {} \N
+5 内部位移 通用模板 temp_internal_displacement-comm daily/daily.xlsx \N \N 0 f {"data": {"count": 20, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"index": 1, "valueType": "last-mv", "coords_col": 2, "factor_items": "xTotal,yTotal"}, {"index": 3, "valueType": "current-mv", "coords_col": 4, "factor_items": "xTotal,yTotal"}, {"index": 5, "valueType": "current-cv", "coords_col": 6, "factor_items": "xTotal,yTotal"}], "sortByExt": "depth", "coords_row": 5}, "tempType": "daily", "head_items": [{"name": "[structureName]", "coords": {"row": 1, "colum": 0}}, {"name": "[LastDate]", "coords": {"row": 2, "colum": 0}}, {"name": "[ThisDate]", "coords": {"row": 2, "colum": 6}}], "sheetIndex": 0, "tail_items": null, "chart_coords": [{"coords": {"endCol": 10, "endRow": 25, "startCol": 8, "startRow": 3}, "factorItem": "xTotal"}, {"coords": {"endCol": 13, "endRow": 25, "startCol": 11, "startRow": 3}, "factorItem": "yTotal"}], "extGroupItems": [{"name": "depth", "colum": 1}]} {} {} \N
+11 Word报表通用模板 \N \N \N 0 f {"body": [{"index": 1, "title": "项目概况", "content": "structure"}, {"index": 2, "title": "监测数据分析", "content": "factors"}, {"index": 4, "title": "结论与建议", "content": "summary"}], "covers": [{"row": 3, "index": 1, "content": "$structure_name$自动化监测报告"}]} {} {} \N
+12 刘家坪日模板 \N temp_daily_ljp daily/ljp-daily.xlsx \N \N 0 f {"data": {"count": 25, "station": [{"index": 0, "valueType": "current-mv", "coords_col": 1, "factor_items": ""}, {"index": 1, "valueType": "data_time", "coords_col": 0, "factor_items": ""}], "sortByExt": null, "coords_row": 4}, "tempType": "daily", "head_items": [{"name": "[structureName]", "coords": {"row": 0, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 1, "colum": 0}}, {"name": "[thisMonitorDate]", "coords": {"row": 29, "colum": 5}}, {"name": "[unit]", "coords": {"row": 3, "colum": 1}}, {"name": "[factorName]", "coords": {"row": 3, "colum": 1}}], "sheetIndex": 0, "tail_items": null, "chart_coords": null, "extGroupItems": null} {} {} \N
+13 刘家坪月模板 \N temp_month_ljp daily/ljp-daily.xlsx \N \N 2 f {"data": {"count": 1, "station": [{"index": 0, "valueType": "current-mv", "coords_col": 1, "factor_items": ""}], "sortByExt": null, "coords_row": 4}, "tempType": "monthly", "head_items": [{"name": "[structureName]", "coords": {"row": 0, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 1, "colum": 0}}, {"name": "[thisMonitorDate]", "coords": {"row": 5, "colum": 6}}, {"name": "[thisMonitorDate]", "coords": {"row": 4, "colum": 0}}, {"name": "[unit]", "coords": {"row": 3, "colum": 1}}, {"name": "[factorName]", "coords": {"row": 3, "colum": 1}}], "sheetIndex": 0, "tail_items": null, "chart_coords": null, "extGroupItems": null} {} {} \N
+10 沉降类人工监测模板 \N temp_mcomm_subside daily/mc-daily.xlsx \N 0 t {"data": {"count": 11, "station": [{"index": 0, "valueType": "data-index", "coords_col": 0, "factor_items": ""}, {"index": 1, "valueType": "location", "coords_col": 1, "factor_items": ""}, {"index": 2, "valueType": "init-value", "coords_col": 2, "factor_items": ""}, {"index": 3, "valueType": "last-mv", "coords_col": 3, "factor_items": ""}, {"index": 4, "valueType": "current-mv", "coords_col": 4, "factor_items": ""}, {"coef": 1000.0, "index": 5, "valueType": "current-cv", "coords_col": 5, "factor_items": ""}, {"coef": 1000.0, "index": 6, "valueType": "c-speed", "coords_col": 6, "factor_items": ""}, {"coef": 1000.0, "index": 7, "valueType": "current-accum-cv", "coords_col": 7, "factor_items": ""}], "sortByExt": null, "coords_row": 7}, "tempType": "daily", "head_items": [{"name": "[factorName]", "coords": {"row": 0, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 2, "colum": 0}}, {"name": "[lastMonitorDate]", "coords": {"row": 6, "colum": 3}}, {"name": "[thisMonitorDate]", "coords": {"row": 3, "colum": 0}}, {"name": "[thisMonitorDate]", "coords": {"row": 6, "colum": 4}}, {"name": "[unit]", "coords": {"row": 5, "colum": 2}}, {"name": "[unit]", "coords": {"row": 5, "colum": 3}}, {"name": "[unit]", "coords": {"row": 5, "colum": 4}}, {"name": "[unit]", "coords": {"row": 5, "colum": 5}}, {"name": "[unit]", "coords": {"row": 5, "colum": 6}}, {"name": "[unit]", "coords": {"row": 5, "colum": 7}}, {"name": "[unit]", "coords": {"row": 5, "colum": 8}}, {"name": "[weather]", "coords": {"row": 3, "colum": 3}}, {"name": "[calendar_content]", "coords": {"row": 19, "colum": 2}}, {"name": "[stage]", "coords": {"row": 1, "colum": 6}}, {"name": "[observe_days]", "coords": {"row": 3, "colum": 4}}], "sheetIndex": 0, "tail_items": null, "chart_coords": [{"coords": {"endCol": 9, "endRow": 21, "startCol": 0, "startRow": 20}, "factorItem": ""}], "extGroupItems": null} {} {} \N
+9 深部水平位移人工监测模板 深部水平位移人工监测模板 temp_mc_internal_displacement daily/mc-daily.xlsx 4005 \N 0 t {"data": {"count": 38, "station": [{"index": 1, "valueType": "current-cv", "coords_col": 1, "factor_items": "yTotal"}, {"index": 2, "valueType": "last-accum-cv", "coords_col": 2, "factor_items": "yTotal"}, {"index": 3, "valueType": "current-accum-cv", "coords_col": 3, "factor_items": "yTotal"}, {"index": 4, "valueType": "c-speed", "coords_col": 4, "factor_items": "yTotal"}], "sortType": "asc", "sortByExt": "depth", "coords_row": 7}, "tempType": "daily", "head_items": [{"name": "[factorName]", "coords": {"row": 0, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 2, "colum": 0}}, {"name": "[thisMonitorDate]", "coords": {"row": 3, "colum": 0}}, {"name": "[weather]", "coords": {"row": 3, "colum": 3}}, {"name": "[calendar_content]", "coords": {"row": 46, "colum": 2}}, {"name": "[stage]", "coords": {"row": 1, "colum": 6}}], "sheetIndex": 4, "tail_items": null, "chart_coords": [{"coords": {"endCol": 9, "endRow": 45, "startCol": 5, "startRow": 7}, "factorItem": "yTotal"}], "extGroupItems": [{"name": "depth", "colum": 0}]} {} {} \N
+14 地下水位人工模板 \N temp_mcomm_waterlevel daily/mc-daily.xlsx \N \N 0 t {"data": {"count": 11, "station": [{"index": 0, "valueType": "data-index", "coords_col": 0, "factor_items": ""}, {"index": 1, "valueType": "location", "coords_col": 1, "factor_items": ""}, {"index": 2, "valueType": "init-value", "coords_col": 2, "factor_items": ""}, {"index": 3, "valueType": "last-mv", "coords_col": 3, "factor_items": ""}, {"index": 4, "valueType": "current-mv", "coords_col": 4, "factor_items": ""}, {"index": 5, "valueType": "current-cv", "coords_col": 5, "factor_items": ""}, {"index": 6, "valueType": "c-speed", "coords_col": 6, "factor_items": ""}, {"index": 7, "valueType": "current-accum-cv", "coords_col": 7, "factor_items": ""}], "sortByExt": null, "coords_row": 7}, "tempType": "daily", "head_items": [{"name": "[factorName]", "coords": {"row": 0, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 2, "colum": 0}}, {"name": "[lastMonitorDate]", "coords": {"row": 6, "colum": 3}}, {"name": "[thisMonitorDate]", "coords": {"row": 3, "colum": 0}}, {"name": "[thisMonitorDate]", "coords": {"row": 6, "colum": 4}}, {"name": "[unit]", "coords": {"row": 5, "colum": 2}}, {"name": "[unit]", "coords": {"row": 5, "colum": 3}}, {"name": "[unit]", "coords": {"row": 5, "colum": 4}}, {"name": "[unit]", "coords": {"row": 5, "colum": 5}}, {"name": "[unit]", "coords": {"row": 5, "colum": 6}}, {"name": "[unit]", "coords": {"row": 5, "colum": 7}}, {"name": "[unit]", "coords": {"row": 5, "colum": 8}}, {"name": "[weather]", "coords": {"row": 3, "colum": 3}}, {"name": "[calendar_content]", "coords": {"row": 19, "colum": 2}}, {"name": "[observe_days]", "coords": {"row": 3, "colum": 4}}, {"name": "[stage]", "coords": {"row": 1, "colum": 6}}], "sheetIndex": 0, "tail_items": null, "chart_coords": [{"coords": {"endCol": 9, "endRow": 21, "startCol": 0, "startRow": 20}, "factorItem": ""}], "extGroupItems": null} {} {} \N
+24 苏州人工监测水位模板 苏州人工监测水位模板 temp_water-level daily/suzhou-template.xlsx \N \N 0 t {"data": {"count": 25, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"unit": "mm", "index": 1, "valueType": "current-cv", "coords_col": 1, "factor_items": ""}, {"unit": "mm", "index": 2, "valueType": "current-accum-cv", "coords_col": 2, "factor_items": ""}, {"unit": "mm", "index": 3, "valueType": "c-speed", "coords_col": 3, "factor_items": ""}, {"unit": "mm", "index": 4, "valueType": "init-value", "coords_col": 4, "factor_items": ""}, {"unit": "mm", "index": 5, "valueType": "last-mv", "coords_col": 5, "factor_items": ""}, {"unit": "mm", "index": 6, "valueType": "current-mv", "coords_col": 6, "factor_items": ""}], "sortByExt": null, "coords_row": 10}, "tempType": "daily", "manCovers": [{"sheet": "封面", "statistics": [{"count": 11, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-cv", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 3, "valueType": "[unit]", "coords_col": 3}, {"index": 4, "valueType": "current-cv", "coords_col": 4}, {"index": 5, "valueType": "factor_speed_unit", "coords_col": 5}, {"index": 6, "valueType": "yellow_thresholds_current-cv", "coords_col": 6}, {"index": 7, "valueType": "current-accum-cv", "coords_col": 7}, {"index": 8, "valueType": "current-accum-cv", "coords_col": 8}, {"index": 9, "valueType": "[unit]", "coords_col": 9}, {"index": 10, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 10}], "coords_row": 55}]}, {"sheet": "巡视"}], "head_items": [{"name": "[factorName]", "coords": {"row": 3, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 2, "colum": 0}}, {"name": "[thisMonitorDate]", "coords": {"row": 4, "colum": 1}}], "sheetIndex": 0, "tail_items": null, "chart_coords": [{"coords": {"endCol": 7, "endRow": 44, "startCol": 0, "startRow": 35}, "factorItem": ""}], "extGroupItems": null} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}]
+33 苏州人工监测沉降模板 苏州人工监测沉降模板 temp_subside daily/suzhou-template.xlsx \N \N 0 t {"data": {"count": 24, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"index": 1, "valueType": "current-cv", "coords_col": 1, "factor_items": ""}, {"index": 2, "valueType": "current-accum-cv", "coords_col": 2, "factor_items": ""}, {"index": 3, "valueType": "c-speed", "coords_col": 3, "factor_items": ""}, {"index": 4, "valueType": "init-value", "coords_col": 4, "factor_items": ""}, {"index": 5, "valueType": "last-mv", "coords_col": 5, "factor_items": ""}, {"index": 6, "valueType": "current-mv", "coords_col": 6, "factor_items": ""}], "sortByExt": null, "coords_row": 8}, "tempType": "daily", "manCovers": [{"sheet": "封面", "statistics": [{"count": 11, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-cv", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 3, "valueType": "[unit]", "coords_col": 3}, {"index": 4, "valueType": "current-cv", "coords_col": 4}, {"index": 5, "valueType": "factor_speed_unit", "coords_col": 5}, {"index": 6, "valueType": "yellow_thresholds_current-cv", "coords_col": 6}, {"index": 7, "valueType": "current-accum-cv", "coords_col": 7}, {"index": 8, "valueType": "current-accum-cv", "coords_col": 8}, {"index": 9, "valueType": "[unit]", "coords_col": 9}, {"index": 10, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 10}], "coords_row": 55}]}, {"sheet": "巡视"}], "head_items": [{"name": "[factorName]", "coords": {"row": 3, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 2, "colum": 0}}, {"name": "[thisMonitorDate]", "coords": {"row": 4, "colum": 1}}], "sheetIndex": 4, "tail_items": null, "chart_coords": [{"coords": {"endCol": 7, "endRow": 39, "startCol": 0, "startRow": 32}, "factorItem": ""}], "extGroupItems": null} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}]
+41 昆明人工监测墙顶水平位移模板 昆明人工监测墙顶水平位移模板 temp_displacement daily/kunming-template.xlsx \N \N 0 t {"data": {"count": 30, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"index": 1, "valueType": "init-value", "coords_col": 1, "factor_items": ""}, {"index": 2, "valueType": "last-cv", "coords_col": 2, "factor_items": ""}, {"index": 3, "valueType": "current-cv", "coords_col": 3, "factor_items": ""}, {"index": 4, "valueType": "current-accum-cv", "coords_col": 4, "factor_items": ""}, {"index": 5, "valueType": "c-speed", "coords_col": 5, "factor_items": ""}], "sortByExt": null, "coords_row": 4}, "tempType": "daily", "manCovers": [{"sheet": "封面"}, {"sheet": "审核"}, {"sheet": "巡视检查表"}, {"sheet": "监测数据汇总表", "statistics": [{"count": 6, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-accum-cv", "coords_col": 2}, {"index": 2, "valueType": "current-accum-cv", "coords_col": 3}, {"index": 3, "valueType": "current-cv", "coords_col": 4}, {"index": 4, "valueType": "current-cv", "coords_col": 5}, {"index": 5, "valueType": "alarm_value", "coords_col": 6}], "coords_row": 3}]}, {"sheet": "监测结论"}], "head_items": [{"name": "[factorName]", "coords": {"row": 0, "colum": 1}}, {"name": "[lastMonitorDate]", "coords": {"row": 0, "colum": 4}}, {"name": "[thisMonitorDate]", "coords": {"row": 1, "colum": 4}}, {"name": "[unit]", "coords": {"row": 3, "colum": 1}}, {"name": "[unit]", "coords": {"row": 3, "colum": 2}}, {"name": "[unit]", "coords": {"row": 3, "colum": 3}}, {"name": "[unit]", "coords": {"row": 3, "colum": 4}}, {"name": "[unit]", "coords": {"row": 3, "colum": 5}}, {"name": "[unit]", "coords": {"row": 3, "colum": 6}}], "sheetIndex": 0, "tail_items": null, "chart_coords": [{"coords": {"endCol": 6, "endRow": 45, "startCol": 1, "startRow": 36}, "factorItem": ""}], "extGroupItems": null} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "alarm_value", "type": "factor", "alias": "控制值/预警值"}]
+43 长春人工监测通用模板_单参数 长春人工监测通用模板_单参数 temp_common_1 daily/changchun-template.xlsx \N \N 0 t {"data": {"count": 38, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"unit": "m", "index": 1, "valueType": "init-value", "coords_col": 1, "factor_items": ""}, {"unit": "m", "index": 2, "valueType": "last-mv", "coords_col": 2, "factor_items": ""}, {"unit": "m", "index": 3, "valueType": "current-mv", "coords_col": 3, "factor_items": ""}, {"unit": "mm", "index": 4, "valueType": "current-accum-cv", "coords_col": 4, "factor_items": ""}, {"unit": "mm", "index": 5, "valueType": "current-cv", "coords_col": 5, "factor_items": ""}, {"unit": "mm", "index": 6, "valueType": "c-speed", "coords_col": 6, "factor_items": ""}, {"index": 7, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 7, "factor_items": ""}, {"index": 8, "valueType": "yellow_thresholds_current-cv", "coords_col": 8, "factor_items": ""}], "sortByExt": null, "coords_row": 6}, "tempType": "daily", "manCovers": [{"sheet": "封面"}, {"sheet": "图纸"}, {"sheet": "分析", "statistics": [{"count": 11, "datas": [{"index": 1, "valueType": "[factorName]", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 3, "valueType": "current-cv", "coords_col": 3}, {"index": 4, "valueType": "current-cv", "coords_col": 4}, {"index": 5, "valueType": "current-accum-cv", "coords_col": 5}, {"index": 6, "valueType": "current-accum-cv", "coords_col": 6}], "coords_row": 7}]}, {"sheet": "巡查表"}, {"sheet": "巡查照片"}], "head_items": [{"name": "[factorName]", "coords": {"row": 0, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 1, "colum": 2}}, {"name": "[lastMonitorDate]", "coords": {"row": 4, "colum": 2}}, {"name": "[thisMonitorDate]", "coords": {"row": 2, "colum": 2}}], "sheetIndex": 0, "tail_items": null, "chart_coords": null, "extGroupItems": null} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}]
+45 长春人工监测通用模板_双参数 长春人工监测通用模板_双参数 temp_common_2 daily/changchun-template.xlsx \N \N 0 t {"data": {"count": 16, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": "x,y"}, {"unit": "m", "index": 1, "valueType": "init-value", "coords_col": 1, "factor_items": "x,y"}, {"unit": "m", "index": 2, "valueType": "last-mv", "coords_col": 3, "factor_items": "x,y"}, {"unit": "m", "index": 3, "valueType": "current-mv", "coords_col": 5, "factor_items": "x,y"}, {"unit": "mm", "index": 4, "valueType": "current-accum-cv", "coords_col": 7, "factor_items": "x"}, {"unit": "mm", "index": 5, "valueType": "current-cv", "coords_col": 8, "factor_items": "x"}, {"unit": "mm", "index": 6, "valueType": "current-cv", "coords_col": 9, "factor_items": "x"}, {"index": 7, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 10, "factor_items": ""}, {"index": 8, "valueType": "yellow_thresholds_current-cv", "coords_col": 11, "factor_items": ""}], "sortByExt": null, "coords_row": 6}, "tempType": "daily", "manCovers": [{"sheet": "封面"}, {"sheet": "图纸"}, {"sheet": "分析", "statistics": [{"count": 11, "datas": [{"index": 1, "valueType": "[factorName]", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 3, "valueType": "current-cv", "coords_col": 3}, {"index": 4, "valueType": "current-cv", "coords_col": 4}, {"index": 5, "valueType": "current-accum-cv", "coords_col": 5}, {"index": 6, "valueType": "current-accum-cv", "coords_col": 6}], "coords_row": 7}]}, {"sheet": "巡查表"}, {"sheet": "巡查照片"}], "head_items": [{"name": "[factorName]", "coords": {"row": 0, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 1, "colum": 2}}, {"name": "[lastMonitorDate]", "coords": {"row": 4, "colum": 2}}, {"name": "[thisMonitorDate]", "coords": {"row": 2, "colum": 2}}], "sheetIndex": 0, "tail_items": null, "chart_coords": null, "extGroupItems": null} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}]
+47 长春人工监测ZQT模板 长春人工监测ZQT模板 temp_ZQT daily/changchun-template.xlsx \N \N 0 t {"data": {"count": 55, "station": [{"index": 1, "valueType": "next-to-last-accum-cv", "coords_col": 1, "factor_items": "yTotal"}, {"index": 2, "valueType": "last-accum-cv", "coords_col": 2, "factor_items": "yTotal"}, {"index": 3, "valueType": "current-accum-cv", "coords_col": 3, "factor_items": "yTotal"}, {"index": 4, "valueType": "current-cv", "coords_col": 4, "factor_items": "yTotal"}, {"index": 5, "valueType": "current-cv", "coords_col": 5, "factor_items": "yTotal"}], "sortType": "asc", "sortByExt": "depth", "coords_row": 6}, "tempType": "daily", "manCovers": [{"sheet": "封面"}, {"sheet": "图纸"}, {"sheet": "分析", "statistics": [{"count": 11, "datas": [{"index": 1, "valueType": "[factorName]", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 3, "valueType": "current-cv", "coords_col": 3}, {"index": 4, "valueType": "current-cv", "coords_col": 4}, {"index": 5, "valueType": "current-accum-cv", "coords_col": 5}, {"index": 6, "valueType": "current-accum-cv", "coords_col": 6}], "coords_row": 7}]}, {"sheet": "巡查表"}, {"sheet": "巡查照片"}], "head_items": [{"name": "[factorName]", "coords": {"row": 0, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 1, "colum": 2}}, {"name": "[lastMonitorDate]", "coords": {"row": 4, "colum": 2}}, {"name": "[thisMonitorDate]", "coords": {"row": 2, "colum": 2}}], "sheetIndex": 4, "tail_items": null, "chart_coords": [{"coords": {"endCol": 11, "endRow": 63, "startCol": 7, "startRow": 4}, "factorItem": "yTotal"}], "extGroupItems": [{"name": "depth", "colum": 0}]} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}]
+28 杭州人工监测通用模板_上海地铁 杭州人工监测通用模板_上海地铁 temp_common daily/hangzhou-sh-template.xlsx \N \N 0 t {"data": {"count": 26, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"index": 1, "valueType": "last-accum-cv", "coords_col": 1, "factor_items": ""}, {"index": 2, "valueType": "current-accum-cv", "coords_col": 2, "factor_items": ""}, {"index": 3, "valueType": "current-cv", "coords_col": 3, "factor_items": ""}, {"index": 4, "valueType": "current-cv", "coords_col": 4, "factor_items": ""}, {"index": 5, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 5, "factor_items": ""}, {"index": 6, "valueType": "yellow_thresholds_current-cv", "coords_col": 6, "factor_items": ""}, {"index": 7, "valueType": "station.label.region", "coords_col": 7, "factor_items": ""}], "sortByExt": null, "coords_row": 8}, "tempType": "daily", "manCovers": [{"sheet": "封面"}, {"sheet": "审核单"}, {"sheet": "分析报告", "statistics": [{"count": 10, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-cv", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 3, "valueType": "current-accum-cv", "coords_col": 3}, {"index": 4, "valueType": "current-accum-cv", "coords_col": 4}, {"index": 5, "valueType": "yellow_thresholds_current-cv", "coords_col": 5}, {"index": 6, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 6}], "coords_row": 24}, {"count": 10, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "factor_station_actually_num", "coords_col": 1}, {"index": 2, "valueType": "factor_station_num", "coords_col": 2}, {"index": 3, "default": 0, "valueType": "", "coords_col": 3}, {"index": 4, "valueType": "factor_station_invalid_num", "coords_col": 4}, {"index": 5, "valueType": "factor_station_valid_rate", "coords_col": 5}], "coords_row": 36}]}, {"sheet": "巡查表"}], "head_items": [{"name": "[factorName]", "coords": {"row": 3, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 2, "colum": 0}}, {"name": "[lastMonitorDate]", "coords": {"row": 4, "colum": 2}}, {"name": "[thisMonitorDate]", "coords": {"row": 5, "colum": 2}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 1}}, {"name": "[unit]", "coords": {"row": 6, "colum": 1}}, {"name": "[unit]", "coords": {"row": 6, "colum": 4}}, {"name": "[unit]", "coords": {"row": 7, "colum": 5}}, {"name": "[unit]", "coords": {"row": 7, "colum": 6}}], "sheetIndex": 0, "tail_items": null, "chart_coords": null, "extGroupItems": null} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}, {"name": "instrument_name", "type": "factor", "alias": "仪器名称"}, {"name": "instrument_number", "type": "factor", "alias": "仪器编号"}]
+30 杭州人工监测水位模板_上海地铁 杭州人工监测水位模板_上海地铁 temp_water-level daily/hangzhou-sh-template.xlsx \N \N 0 t {"data": {"count": 25, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"unit": "mm", "index": 1, "valueType": "last-accum-cv", "coords_col": 1, "factor_items": ""}, {"unit": "mm", "index": 2, "valueType": "current-accum-cv", "coords_col": 2, "factor_items": ""}, {"unit": "mm", "index": 3, "valueType": "accum-cv", "coords_col": 3, "factor_items": ""}, {"unit": "mm", "index": 4, "valueType": "accum-cv", "coords_col": 4, "factor_items": ""}, {"index": 5, "valueType": "station.label.waterDeep", "coords_col": 5, "factor_items": ""}, {"index": 6, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 6, "factor_items": ""}, {"index": 7, "valueType": "yellow_thresholds_current-cv", "coords_col": 7, "factor_items": ""}, {"index": 8, "valueType": "station.label.region", "coords_col": 8, "factor_items": ""}], "sortByExt": null, "coords_row": 8}, "tempType": "daily", "manCovers": [{"sheet": "封面"}, {"sheet": "审核单"}, {"sheet": "分析报告", "statistics": [{"count": 10, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-cv", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 3, "valueType": "current-accum-cv", "coords_col": 3}, {"index": 4, "valueType": "current-accum-cv", "coords_col": 4}, {"index": 5, "valueType": "yellow_thresholds_current-cv", "coords_col": 5}, {"index": 6, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 6}], "coords_row": 24}, {"count": 10, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "factor_station_actually_num", "coords_col": 1}, {"index": 2, "valueType": "factor_station_num", "coords_col": 2}, {"index": 3, "default": 0, "valueType": "", "coords_col": 3}, {"index": 4, "valueType": "factor_station_invalid_num", "coords_col": 4}, {"index": 5, "valueType": "factor_station_valid_rate", "coords_col": 5}], "coords_row": 36}]}, {"sheet": "巡查表"}], "head_items": [{"name": "[factorName]", "coords": {"row": 3, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 2, "colum": 0}}, {"name": "[lastMonitorDate]", "coords": {"row": 4, "colum": 2}}, {"name": "[thisMonitorDate]", "coords": {"row": 5, "colum": 2}}, {"name": "[unit]", "coords": {"row": 5, "colum": 7}}], "sheetIndex": 0, "tail_items": null, "chart_coords": null, "extGroupItems": null} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}, {"name": "instrument_name", "type": "factor", "alias": "仪器名称"}, {"name": "instrument_number", "type": "factor", "alias": "仪器编号"}]
+19 昆明人工监测通用模板 昆明人工监测通用模板 temp_common daily/kunming-template.xlsx \N \N 0 t {"data": {"count": 30, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"unit": "m", "index": 1, "valueType": "init-value", "coords_col": 1, "factor_items": ""}, {"unit": "m", "index": 2, "valueType": "last-mv", "coords_col": 2, "factor_items": ""}, {"unit": "m", "index": 3, "valueType": "current-mv", "coords_col": 3, "factor_items": ""}, {"unit": "mm", "index": 4, "valueType": "current-cv", "coords_col": 4, "factor_items": ""}, {"unit": "mm", "index": 5, "valueType": "current-accum-cv", "coords_col": 5, "factor_items": ""}, {"unit": "mm", "index": 6, "valueType": "c-speed", "coords_col": 6, "factor_items": ""}], "sortByExt": null, "coords_row": 4}, "tempType": "daily", "manCovers": [{"sheet": "封面"}, {"sheet": "审核"}, {"sheet": "巡视检查表"}, {"sheet": "监测数据汇总表", "statistics": [{"count": 6, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-accum-cv", "coords_col": 2}, {"index": 2, "valueType": "current-accum-cv", "coords_col": 3}, {"index": 3, "valueType": "current-cv", "coords_col": 4}, {"index": 4, "valueType": "current-cv", "coords_col": 5}, {"index": 5, "valueType": "alarm_value", "coords_col": 6}], "coords_row": 3}]}, {"sheet": "监测结论"}], "head_items": [{"name": "[factorName]", "coords": {"row": 0, "colum": 1}}, {"name": "[lastMonitorDate]", "coords": {"row": 0, "colum": 4}}, {"name": "[thisMonitorDate]", "coords": {"row": 1, "colum": 4}}, {"name": "[unit]", "coords": {"row": 3, "colum": 1}}, {"name": "[unit]", "coords": {"row": 3, "colum": 2}}, {"name": "[unit]", "coords": {"row": 3, "colum": 3}}, {"name": "[unit]", "coords": {"row": 3, "colum": 4}}, {"name": "[unit]", "coords": {"row": 3, "colum": 5}}, {"name": "[unit]", "coords": {"row": 3, "colum": 6}}], "sheetIndex": 0, "tail_items": null, "chart_coords": [{"coords": {"endCol": 7, "endRow": 45, "startCol": 1, "startRow": 36}, "factorItem": ""}], "extGroupItems": null} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "alarm_value", "type": "factor", "alias": "控制值/预警值"}]
+35 杭州人工监测水位模板_浙江五洲 杭州人工监测水位模板_浙江五洲 temp_water-level daily/hangzhou-zj-template.xlsx \N \N 0 t {"data": {"count": 30, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"unit": "mm", "index": 1, "valueType": "last-accum-cv", "coords_col": 1, "factor_items": ""}, {"unit": "mm", "index": 2, "valueType": "current-accum-cv", "coords_col": 2, "factor_items": ""}, {"unit": "mm", "index": 3, "valueType": "accum-cv", "coords_col": 3, "factor_items": ""}, {"unit": "mm", "index": 4, "valueType": "accum-cv", "coords_col": 4, "factor_items": ""}, {"index": 5, "valueType": "station.label.waterDeep", "coords_col": 5, "factor_items": ""}, {"index": 6, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 6, "factor_items": ""}, {"index": 7, "valueType": "yellow_thresholds_current-cv", "coords_col": 7, "factor_items": ""}, {"index": 8, "valueType": "station.label.region", "coords_col": 8, "factor_items": ""}], "sortByExt": null, "coords_row": 8}, "tempType": "daily", "manCovers": [{"sheet": "封面"}, {"sheet": "审核单"}, {"sheet": "监测分析日报表", "statistics": [{"count": 10, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-cv", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 5, "valueType": "current-accum-cv", "coords_col": 5}, {"index": 6, "valueType": "current-accum-cv", "coords_col": 6}, {"index": 3, "valueType": "yellow_thresholds_current-cv", "coords_col": 3}, {"index": 7, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 7}], "coords_row": 8}, {"count": 11, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 2, "valueType": "factor_station_actually_num", "coords_col": 2}, {"index": 1, "valueType": "factor_station_num", "coords_col": 1}, {"index": 3, "valueType": "factor_station_invalid_num", "coords_col": 3}, {"index": 5, "valueType": "factor_station_valid_rate", "coords_col": 5}], "coords_row": 21}]}, {"sheet": "巡视检查报表"}], "head_items": [{"name": "[structureName]", "coords": {"row": 0, "colum": 0}}, {"name": "[factorName]", "coords": {"row": 3, "colum": 0}}, {"name": "[lastMonitorDate]", "coords": {"row": 4, "colum": 1}}, {"name": "[thisMonitorDate]", "coords": {"row": 5, "colum": 1}}, {"name": "[unit]", "coords": {"row": 6, "colum": 1}}, {"name": "[unit]", "coords": {"row": 6, "colum": 4}}, {"name": "[unit]", "coords": {"row": 7, "colum": 5}}, {"name": "[unit]", "coords": {"row": 7, "colum": 6}}], "sheetIndex": 0, "tail_items": null, "chart_coords": [{"coords": {"endCol": 9, "endRow": 52, "startCol": 1, "startRow": 38}, "factorItem": ""}], "extGroupItems": null} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}, {"name": "instrument_name", "type": "factor", "alias": "仪器名称"}, {"name": "instrument_number", "type": "factor", "alias": "仪器编号"}]
+40 杭州人工监测支撑轴力模板_浙江五洲 杭州人工监测支撑轴力模板_浙江五洲 temp_support-force daily/hangzhou-zj-template.xlsx \N \N 0 t {"data": {"count": 33, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"index": 1, "valueType": "last-mv", "coords_col": 1, "factor_items": ""}, {"index": 2, "valueType": "current-mv", "coords_col": 2, "factor_items": ""}, {"index": 3, "valueType": "current-cv", "coords_col": 3, "factor_items": ""}, {"index": 4, "valueType": "current-cv", "coords_col": 4, "factor_items": ""}, {"index": 5, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 5, "factor_items": ""}, {"index": 6, "valueType": "yellow_thresholds_current-cv", "coords_col": 6, "factor_items": ""}, {"index": 7, "valueType": "station.label.region", "coords_col": 7, "factor_items": ""}], "sortByExt": null, "coords_row": 8}, "tempType": "daily", "manCovers": [{"sheet": "封面"}, {"sheet": "审核单"}, {"sheet": "监测分析日报表", "statistics": [{"count": 10, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-cv", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 5, "valueType": "current-accum-cv", "coords_col": 5}, {"index": 6, "valueType": "current-accum-cv", "coords_col": 6}, {"index": 3, "valueType": "yellow_thresholds_current-cv", "coords_col": 3}, {"index": 7, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 7}], "coords_row": 8}, {"count": 11, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 2, "valueType": "factor_station_actually_num", "coords_col": 2}, {"index": 1, "valueType": "factor_station_num", "coords_col": 1}, {"index": 3, "valueType": "factor_station_invalid_num", "coords_col": 3}, {"index": 5, "valueType": "factor_station_valid_rate", "coords_col": 5}], "coords_row": 21}]}, {"sheet": "巡视检查报表"}], "head_items": [{"name": "[factorName]", "coords": {"row": 3, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 2, "colum": 0}}, {"name": "[lastMonitorDate]", "coords": {"row": 4, "colum": 1}}, {"name": "[thisMonitorDate]", "coords": {"row": 5, "colum": 1}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 1}}, {"name": "[unit]", "coords": {"row": 6, "colum": 1}}, {"name": "[unit]", "coords": {"row": 6, "colum": 4}}, {"name": "[unit]", "coords": {"row": 7, "colum": 5}}, {"name": "[unit]", "coords": {"row": 7, "colum": 6}}], "sheetIndex": 0, "tail_items": null, "chart_coords": [{"coords": {"endCol": 8, "endRow": 49, "startCol": 1, "startRow": 41}, "factorItem": ""}], "extGroupItems": null} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}, {"name": "instrument_name", "type": "factor", "alias": "仪器名称"}, {"name": "instrument_number", "type": "factor", "alias": "仪器编号"}]
+21 昆明人工监测ZQT模板 昆明人工监测ZQT模板 temp_ZQT daily/kunming-template.xlsx \N \N 0 t {"data": {"count": 50, "station": [{"index": 1, "valueType": "current-cv", "coords_col": 1, "factor_items": "yTotal"}, {"index": 2, "valueType": "last-accum-cv", "coords_col": 2, "factor_items": "yTotal"}, {"index": 3, "valueType": "current-accum-cv", "coords_col": 3, "factor_items": "yTotal"}, {"index": 4, "valueType": "c-speed", "coords_col": 4, "factor_items": "yTotal"}], "sortType": "asc", "sortByExt": "depth", "coords_row": 2}, "tempType": "daily", "manCovers": [{"sheet": "封面"}, {"sheet": "审核"}, {"sheet": "巡视检查表"}, {"sheet": "监测数据汇总表", "statistics": [{"count": 6, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-accum-cv", "coords_col": 2}, {"index": 2, "valueType": "current-accum-cv", "coords_col": 3}, {"index": 3, "valueType": "current-cv", "coords_col": 4}, {"index": 4, "valueType": "current-cv", "coords_col": 5}, {"index": 5, "valueType": "alarm_value", "coords_col": 6}], "coords_row": 3}]}, {"sheet": "监测结论"}], "head_items": [{"name": "[factorName]", "coords": {"row": 0, "colum": 0}}], "sheetIndex": 4, "tail_items": null, "chart_coords": [{"coords": {"endCol": 8, "endRow": 51, "startCol": 5, "startRow": 1}, "factorItem": "yTotal"}], "extGroupItems": [{"name": "depth", "colum": 0}]} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "alarm_value", "type": "factor", "alias": "控制值/预警值"}]
+23 苏州人工监测水平位移模板 苏州人工监测水平位移模板 temp_displacement daily/suzhou-template.xlsx \N \N 0 t {"data": {"count": 28, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"unit": "mm", "index": 1, "valueType": "current-cv", "coords_col": 1, "factor_items": ""}, {"unit": "mm", "index": 2, "valueType": "current-accum-cv", "coords_col": 2, "factor_items": ""}, {"unit": "mm", "index": 3, "valueType": "c-speed", "coords_col": 3, "factor_items": ""}, {"unit": "m", "index": 4, "valueType": "init-value", "coords_col": 4, "factor_items": ""}, {"unit": "m", "index": 5, "valueType": "last-mv", "coords_col": 6, "factor_items": ""}, {"unit": "m", "index": 6, "valueType": "current-mv", "coords_col": 8, "factor_items": ""}], "sortByExt": null, "coords_row": 10}, "tempType": "daily", "manCovers": [{"sheet": "封面", "statistics": [{"count": 11, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-cv", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 3, "valueType": "[unit]", "coords_col": 3}, {"index": 4, "valueType": "current-cv", "coords_col": 4}, {"index": 5, "valueType": "factor_speed_unit", "coords_col": 5}, {"index": 6, "valueType": "yellow_thresholds_current-cv", "coords_col": 6}, {"index": 7, "valueType": "current-accum-cv", "coords_col": 7}, {"index": 8, "valueType": "current-accum-cv", "coords_col": 8}, {"index": 9, "valueType": "[unit]", "coords_col": 9}], "coords_row": 55}]}, {"sheet": "巡视"}], "head_items": [{"name": "[factorName]", "coords": {"row": 3, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 2, "colum": 0}}, {"name": "[lastMonitorDate]", "coords": {"row": 5, "colum": 4}}, {"name": "[thisMonitorDate]", "coords": {"row": 4, "colum": 0}}, {"name": "[weather]", "coords": {"row": 3, "colum": 4}}, {"name": "[stage]", "coords": {"row": 2, "colum": 7}}], "sheetIndex": 0, "tail_items": null, "chart_coords": [{"coords": {"endCol": 10, "endRow": 47, "startCol": 0, "startRow": 38}, "factorItem": ""}], "extGroupItems": null} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}]
+25 苏州人工监测测斜模板 苏州人工监测测斜模板 temp_CX daily/suzhou-template.xlsx \N \N 0 t {"data": {"count": 70, "station": [{"index": 1, "valueType": "last-accum-cv", "coords_col": 1, "factor_items": "yTotal"}, {"index": 2, "valueType": "current-accum-cv", "coords_col": 2, "factor_items": "yTotal"}, {"index": 3, "valueType": "current-cv", "coords_col": 3, "factor_items": "yTotal"}, {"index": 4, "valueType": "c-speed", "coords_col": 4, "factor_items": "yTotal"}], "sortType": "asc", "sortByExt": "depth", "coords_row": 10}, "tempType": "daily", "manCovers": [{"sheet": "封面", "statistics": [{"count": 11, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-cv", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 3, "valueType": "[unit]", "coords_col": 3}, {"index": 4, "valueType": "current-cv", "coords_col": 4}, {"index": 5, "valueType": "factor_speed_unit", "coords_col": 5}, {"index": 6, "valueType": "yellow_thresholds_current-cv", "coords_col": 6}, {"index": 7, "valueType": "current-accum-cv", "coords_col": 7}, {"index": 8, "valueType": "current-accum-cv", "coords_col": 8}, {"index": 9, "valueType": "[unit]", "coords_col": 9}, {"index": 10, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 10}], "coords_row": 55}]}, {"sheet": "巡视"}], "head_items": [{"name": "[factorName]", "coords": {"row": 3, "colum": 0}}, {"name": "[thisMonitorDate]", "coords": {"row": 4, "colum": 1}}, {"name": "[stage]", "coords": {"row": 2, "colum": 5}}], "sheetIndex": 4, "tail_items": null, "chart_coords": [{"coords": {"endCol": 7, "endRow": 79, "startCol": 5, "startRow": 8}, "factorItem": "yTotal"}], "extGroupItems": [{"name": "depth", "colum": 0}]} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}]
+26 杭州人工监测通用模板_浙江五洲 杭州人工监测通用模板_浙江五洲 temp_common daily/hangzhou-zj-template.xlsx \N \N 0 t {"data": {"count": 26, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"index": 1, "valueType": "last-accum-cv", "coords_col": 1, "factor_items": ""}, {"index": 2, "valueType": "current-accum-cv", "coords_col": 2, "factor_items": ""}, {"index": 3, "valueType": "current-cv", "coords_col": 3, "factor_items": ""}, {"index": 4, "valueType": "current-cv", "coords_col": 4, "factor_items": ""}, {"index": 5, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 5, "factor_items": ""}, {"index": 6, "valueType": "yellow_thresholds_current-cv", "coords_col": 6, "factor_items": ""}, {"index": 7, "valueType": "station.label.region", "coords_col": 7, "factor_items": ""}], "sortByExt": null, "coords_row": 8}, "tempType": "daily", "manCovers": [{"sheet": "封面"}, {"sheet": "审核单"}, {"sheet": "监测分析日报表", "statistics": [{"count": 10, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-cv", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 5, "valueType": "current-accum-cv", "coords_col": 5}, {"index": 6, "valueType": "current-accum-cv", "coords_col": 6}, {"index": 3, "valueType": "yellow_thresholds_current-cv", "coords_col": 3}, {"index": 7, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 7}], "coords_row": 8}, {"count": 11, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 2, "valueType": "factor_station_actually_num", "coords_col": 2}, {"index": 1, "valueType": "factor_station_num", "coords_col": 1}, {"index": 3, "valueType": "factor_station_invalid_num", "coords_col": 3}, {"index": 5, "valueType": "factor_station_valid_rate", "coords_col": 5}], "coords_row": 21}]}, {"sheet": "巡视检查报表"}], "head_items": [{"name": "[factorName]", "coords": {"row": 3, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 2, "colum": 0}}, {"name": "[lastMonitorDate]", "coords": {"row": 4, "colum": 1}}, {"name": "[thisMonitorDate]", "coords": {"row": 5, "colum": 1}}, {"name": "[itemName]", "coords": {"row": 6, "colum": 1}}, {"name": "[unit]", "coords": {"row": 6, "colum": 1}}, {"name": "[unit]", "coords": {"row": 6, "colum": 4}}, {"name": "[unit]", "coords": {"row": 7, "colum": 5}}, {"name": "[unit]", "coords": {"row": 7, "colum": 6}}], "sheetIndex": 0, "tail_items": null, "chart_coords": [{"coords": {"endCol": 8, "endRow": 54, "startCol": 1, "startRow": 44}, "factorItem": ""}], "extGroupItems": null} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}, {"name": "instrument_name", "type": "factor", "alias": "仪器名称"}, {"name": "instrument_number", "type": "factor", "alias": "仪器编号"}]
+27 杭州人工监测ZQT模板_浙江五洲 杭州人工监测ZQT模板_浙江五洲 temp_ZQT daily/hangzhou-zj-template.xlsx \N \N 0 t {"data": {"count": 50, "station": [{"index": 1, "valueType": "last-accum-cv", "coords_col": 1, "factor_items": "yTotal"}, {"index": 2, "valueType": "current-accum-cv", "coords_col": 2, "factor_items": "yTotal"}, {"index": 3, "valueType": "current-cv", "coords_col": 3, "factor_items": "yTotal"}, {"index": 4, "valueType": "current-cv", "coords_col": 4, "factor_items": "yTotal"}], "sortType": "asc", "sortByExt": "depth", "coords_row": 9}, "tempType": "daily", "manCovers": [{"sheet": "封面"}, {"sheet": "审核单"}, {"sheet": "监测分析日报表", "statistics": [{"count": 10, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-cv", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 5, "valueType": "current-accum-cv", "coords_col": 5}, {"index": 6, "valueType": "current-accum-cv", "coords_col": 6}, {"index": 3, "valueType": "yellow_thresholds_current-cv", "coords_col": 3}, {"index": 7, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 7}], "coords_row": 8}, {"count": 11, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 2, "valueType": "factor_station_actually_num", "coords_col": 2}, {"index": 1, "valueType": "factor_station_num", "coords_col": 1}, {"index": 3, "valueType": "factor_station_invalid_num", "coords_col": 3}, {"index": 5, "valueType": "factor_station_valid_rate", "coords_col": 5}], "coords_row": 21}]}, {"sheet": "巡视检查报表"}, {"sheet": "测斜统计表", "statistics": [{"type": "group", "count": 45, "datas": [{"ps": {"combine": true}, "index": 0, "default": "墙体深层水平位移", "valueType": "", "coords_col": 0}, {"index": 1, "valueType": "c-speed", "coords_col": 1}, {"index": 2, "valueType": "c-speed", "coords_col": 2}, {"ps": {"combine": true}, "index": 3, "valueType": "yellow_thresholds_current-cv", "coords_col": 3}, {"index": 5, "valueType": "current-accum-cv", "coords_col": 5}, {"index": 6, "valueType": "current-accum-cv", "coords_col": 6}, {"ps": {"combine": true}, "index": 7, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 7}], "coords_row": 3}]}], "head_items": [{"name": "[factorName]", "coords": {"row": 4, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 0, "colum": 0}}, {"name": "[lastMonitorDate]", "coords": {"row": 5, "colum": 2}}, {"name": "[thisMonitorDate]", "coords": {"row": 6, "colum": 2}}], "sheetIndex": 4, "tail_items": null, "chart_coords": [{"coords": {"endCol": 8, "endRow": 58, "startCol": 5, "startRow": 7}, "factorItem": "yTotal"}], "extGroupItems": [{"name": "depth", "colum": 0}]} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}, {"name": "instrument_name", "type": "factor", "alias": "仪器名称"}, {"name": "instrument_number", "type": "factor", "alias": "仪器编号"}]
+29 杭州人工监测支撑轴力模板_上海地铁 杭州人工监测支撑轴力模板_上海地铁 temp_support-force daily/hangzhou-sh-template.xlsx \N \N 0 t {"data": {"count": 24, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"index": 1, "valueType": "last-mv", "coords_col": 1, "factor_items": ""}, {"index": 2, "valueType": "current-mv", "coords_col": 2, "factor_items": ""}, {"index": 3, "valueType": "current-cv", "coords_col": 3, "factor_items": ""}, {"index": 4, "valueType": "current-cv", "coords_col": 4, "factor_items": ""}, {"index": 5, "valueType": "alarm_param1", "coords_col": 5, "factor_items": ""}, {"index": 6, "valueType": "alarm_param2", "coords_col": 6, "factor_items": ""}, {"index": 7, "valueType": "station.label.region", "coords_col": 7, "factor_items": ""}], "sortByExt": null, "coords_row": 8}, "tempType": "daily", "manCovers": [{"sheet": "封面"}, {"sheet": "审核单"}, {"sheet": "分析报告", "statistics": [{"count": 10, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-cv", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 3, "valueType": "current-accum-cv", "coords_col": 3}, {"index": 4, "valueType": "current-accum-cv", "coords_col": 4}, {"index": 5, "valueType": "yellow_thresholds_current-cv", "coords_col": 5}, {"index": 6, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 6}], "coords_row": 24}, {"count": 10, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "factor_station_actually_num", "coords_col": 1}, {"index": 2, "valueType": "factor_station_num", "coords_col": 2}, {"index": 3, "default": 0, "valueType": "", "coords_col": 3}, {"index": 4, "valueType": "factor_station_invalid_num", "coords_col": 4}, {"index": 5, "valueType": "factor_station_valid_rate", "coords_col": 5}], "coords_row": 36}]}, {"sheet": "巡查表"}], "head_items": [{"name": "[factorName]", "coords": {"row": 3, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 2, "colum": 0}}, {"name": "[lastMonitorDate]", "coords": {"row": 4, "colum": 2}}, {"name": "[thisMonitorDate]", "coords": {"row": 5, "colum": 2}}, {"name": "[unit]", "coords": {"row": 5, "colum": 7}}], "sheetIndex": 0, "tail_items": null, "chart_coords": null, "extGroupItems": null} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}, {"name": "instrument_name", "type": "factor", "alias": "仪器名称"}, {"name": "instrument_number", "type": "factor", "alias": "仪器编号"}]
+32 杭州人工监测ZQT_TST模板_上海地铁 杭州人工监测ZQT_TST模板_上海地铁 temp_ZQT_TST daily/hangzhou-sh-template.xlsx \N \N 0 t {"data": {"count": 50, "station": [{"index": 1, "valueType": "last-accum-cv", "coords_col": 1, "factor_items": "yTotal"}, {"index": 2, "valueType": "current-accum-cv", "coords_col": 2, "factor_items": "yTotal"}, {"index": 3, "valueType": "current-mv", "coords_col": 3, "factor_items": "yTotal"}, {"index": 4, "valueType": "current-mv", "coords_col": 4, "factor_items": "yTotal"}], "sortType": "asc", "sortByExt": "depth", "coords_row": 9}, "tempType": "daily", "manCovers": [{"sheet": "封面"}, {"sheet": "审核单"}, {"sheet": "分析报告", "statistics": [{"count": 10, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-cv", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 3, "valueType": "current-accum-cv", "coords_col": 3}, {"index": 4, "valueType": "current-accum-cv", "coords_col": 4}, {"index": 5, "valueType": "yellow_thresholds_current-cv", "coords_col": 5}, {"index": 6, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 6}], "coords_row": 24}, {"count": 10, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "factor_station_actually_num", "coords_col": 1}, {"index": 2, "valueType": "factor_station_num", "coords_col": 2}, {"index": 3, "default": 0, "valueType": "", "coords_col": 3}, {"index": 4, "valueType": "factor_station_invalid_num", "coords_col": 4}, {"index": 5, "valueType": "factor_station_valid_rate", "coords_col": 5}], "coords_row": 36}]}, {"sheet": "巡查表"}, {"sheet": "测斜统计", "statistics": [{"type": "group", "count": 19, "datas": [{"index": 0, "valueType": "group_name", "coords_col": 0}, {"index": 1, "valueType": "c-speed", "coords_col": 1}, {"index": 2, "valueType": "c-speed", "coords_col": 2}, {"index": 3, "valueType": "current-accum-cv", "coords_col": 3}, {"index": 4, "valueType": "current-accum-cv", "coords_col": 4}, {"index": 5, "valueType": "", "coords_col": 5}], "coords_row": 8}]}], "head_items": [{"name": "[factorName]", "coords": {"row": 4, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 2, "colum": 0}}, {"name": "[lastMonitorDate]", "coords": {"row": 5, "colum": 2}}, {"name": "[thisMonitorDate]", "coords": {"row": 6, "colum": 2}}], "sheetIndex": 4, "tail_items": null, "chart_coords": [{"coords": {"endCol": 8, "endRow": 58, "startCol": 5, "startRow": 9}, "factorItem": "yTotal"}], "extGroupItems": [{"name": "depth", "colum": 0}]} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}, {"name": "instrument_name", "type": "factor", "alias": "仪器名称"}, {"name": "instrument_number", "type": "factor", "alias": "仪器编号"}]
+34 苏州人工监测支撑轴力模板 苏州人工监测支撑轴力模板 temp_support-force daily/suzhou-template.xlsx \N \N 0 t {"data": {"count": 27, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"index": 1, "valueType": "current-mv", "coords_col": 2, "factor_items": ""}, {"index": 2, "valueType": "current-cv", "coords_col": 3, "factor_items": ""}, {"index": 3, "valueType": "current-accum-cv", "coords_col": 4, "factor_items": ""}], "sortByExt": null, "coords_row": 10}, "tempType": "daily", "manCovers": [{"sheet": "封面", "statistics": [{"count": 11, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-cv", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 3, "valueType": "[unit]", "coords_col": 3}, {"index": 4, "valueType": "current-cv", "coords_col": 4}, {"index": 5, "valueType": "factor_speed_unit", "coords_col": 5}, {"index": 6, "valueType": "yellow_thresholds_current-cv", "coords_col": 6}, {"index": 7, "valueType": "current-accum-cv", "coords_col": 7}, {"index": 8, "valueType": "current-accum-cv", "coords_col": 8}, {"index": 9, "valueType": "[unit]", "coords_col": 9}, {"index": 10, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 10}], "coords_row": 55}]}, {"sheet": "巡视"}], "head_items": [{"name": "[factorName]", "coords": {"row": 3, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 2, "colum": 0}}, {"name": "[thisMonitorDate]", "coords": {"row": 4, "colum": 1}}], "sheetIndex": 0, "tail_items": null, "chart_coords": [{"coords": {"endCol": 11, "endRow": 47, "startCol": 0, "startRow": 37}, "factorItem": ""}], "extGroupItems": null} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}]
+42 昆明人工监测支撑轴力模板 昆明人工监测支撑轴力模板 temp_support-force daily/kunming-template.xlsx \N \N 0 t {"data": {"count": 37, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"index": 1, "valueType": "init-value", "coords_col": 1, "factor_items": ""}, {"index": 2, "valueType": "last-accum-cv", "coords_col": 2, "factor_items": ""}, {"index": 3, "valueType": "current-accum-cv", "coords_col": 3, "factor_items": ""}, {"index": 4, "valueType": "current_cv", "coords_col": 4, "factor_items": ""}, {"index": 5, "valueType": "current-accum-cv", "coords_col": 5, "factor_items": ""}, {"index": 6, "valueType": "c-speed", "coords_col": 6, "factor_items": ""}], "sortByExt": null, "coords_row": 4}, "tempType": "daily", "manCovers": [{"sheet": "封面"}, {"sheet": "审核"}, {"sheet": "巡视检查表"}, {"sheet": "监测数据汇总表", "statistics": [{"count": 6, "datas": [{"index": 0, "valueType": "[factorName]", "coords_col": 0}, {"index": 1, "valueType": "current-accum-cv", "coords_col": 2}, {"index": 2, "valueType": "current-accum-cv", "coords_col": 3}, {"index": 3, "valueType": "current-cv", "coords_col": 4}, {"index": 4, "valueType": "current-cv", "coords_col": 5}, {"index": 5, "valueType": "alarm_value", "coords_col": 6}], "coords_row": 3}]}, {"sheet": "监测结论"}], "head_items": [{"name": "[factorName]", "coords": {"row": 0, "colum": 1}}, {"name": "[lastMonitorDate]", "coords": {"row": 0, "colum": 4}}, {"name": "[thisMonitorDate]", "coords": {"row": 1, "colum": 4}}, {"name": "[unit]", "coords": {"row": 3, "colum": 1}}, {"name": "[unit]", "coords": {"row": 3, "colum": 2}}, {"name": "[unit]", "coords": {"row": 3, "colum": 3}}, {"name": "[unit]", "coords": {"row": 3, "colum": 4}}, {"name": "[unit]", "coords": {"row": 3, "colum": 5}}, {"name": "[unit]", "coords": {"row": 3, "colum": 6}}], "sheetIndex": 0, "tail_items": null, "chart_coords": [{"coords": {"endCol": 7, "endRow": 48, "startCol": 1, "startRow": 43}, "factorItem": ""}], "extGroupItems": null} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "alarm_value", "type": "factor", "alias": "控制值/预警值"}]
+46 长春人工监测支撑轴力模板 长春人工监测支撑轴力模板 temp_support-force daily/changchun-template.xlsx \N \N 0 t {"data": {"count": 16, "station": [{"index": 0, "valueType": "location", "coords_col": 0, "factor_items": ""}, {"index": 1, "valueType": "init-value", "coords_col": 1, "factor_items": ""}, {"index": 2, "valueType": "last-mv", "coords_col": 2, "factor_items": ""}, {"index": 3, "valueType": "current-mv", "coords_col": 3, "factor_items": ""}, {"index": 4, "valueType": "current-accum-cv", "coords_col": 4, "factor_items": ""}, {"index": 5, "valueType": "current-cv", "coords_col": 5, "factor_items": ""}, {"index": 6, "valueType": "c-speed", "coords_col": 6, "factor_items": ""}, {"index": 7, "valueType": "yellow_thresholds_current-accum-cv", "coords_col": 7, "factor_items": ""}, {"index": 8, "valueType": "yellow_thresholds_current-cv", "coords_col": 8, "factor_items": ""}], "sortByExt": null, "coords_row": 6}, "tempType": "daily", "manCovers": [{"sheet": "封面"}, {"sheet": "图纸"}, {"sheet": "分析", "statistics": [{"count": 11, "datas": [{"index": 1, "valueType": "[factorName]", "coords_col": 1}, {"index": 2, "valueType": "current-cv", "coords_col": 2}, {"index": 3, "valueType": "current-cv", "coords_col": 3}, {"index": 4, "valueType": "current-cv", "coords_col": 4}, {"index": 5, "valueType": "current-accum-cv", "coords_col": 5}, {"index": 6, "valueType": "current-accum-cv", "coords_col": 6}], "coords_row": 7}]}, {"sheet": "巡查表"}, {"sheet": "巡查照片"}], "head_items": [{"name": "[factorName]", "coords": {"row": 0, "colum": 0}}, {"name": "[structureName]", "coords": {"row": 1, "colum": 2}}, {"name": "[lastMonitorDate]", "coords": {"row": 4, "colum": 2}}, {"name": "[thisMonitorDate]", "coords": {"row": 2, "colum": 2}}], "sheetIndex": 0, "tail_items": null, "chart_coords": null, "extGroupItems": null} {} {} [{"name": "project_section", "alias": "工程名称"}, {"name": "construct_unit", "alias": "施工单位"}, {"name": "construct_control_unit", "alias": "监理单位"}, {"name": "construct_monitor_unit", "alias": "施工方监测单位"}, {"name": "thirdpart_monitor_unit", "alias": "第三方监测单位"}, {"name": "report_code", "alias": "编号"}, {"name": "last_stage", "alias": "上次期数"}, {"name": "monitoring_instructions", "type": "factor", "alias": "监测说明"}, {"name": "yellow_thresholds_current-cv", "type": "factor", "alias": "报警值日变量"}, {"name": "yellow_thresholds_current-accum-cv", "type": "factor", "alias": "报警值累计量"}]
+\.
+
+
+--
+-- Data for Name: t_resource; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_resource (code, name, description, type, parent_resource) FROM stdin;
+002 结构物管理 \N \N \N
+002001 新增结构物 \N \N 002
+002002 修改结构物信息 \N \N 002
+002003 删除结构物 \N \N 002
+003 设备组网 \N \N \N
+003001 编辑设备组网 \N \N 003
+004 2D布设 \N \N \N
+004001 添加布设图 \N \N 004
+004002 修改布设图 \N \N 004
+004003 删除布设图 \N \N 004
+004004 测点布设 \N \N 004
+005 监测模型管理 \N \N \N
+005001 新增结构物类型 \N \N 005
+005002 修改结构物类型 \N \N 005
+005003 删除结构物类型 \N \N 005
+005004 新增监测因素 \N \N 005
+005005 修改监测因素 \N \N 005
+005006 删除监测因素 \N \N 005
+005007 新增监测模板 \N \N 005
+005008 修改监测模板 \N \N 005
+005009 删除监测模板 \N \N 005
+006 测点管理 \N \N \N
+006001 新增测点 \N \N 006
+006002 修改测点信息 \N \N 006
+006003 删除测点 \N \N 006
+007 3D布设 \N \N \N
+007001 更新模型 \N \N 007
+007002 测点布设 \N \N 007
+007003 截面配置 \N \N 007
+008 组合计算配置 \N \N \N
+008001 新增分组 \N \N 008
+008002 修改分组 \N \N 008
+008003 删除分组 \N \N 008
+009 报表生成配置 \N \N \N
+009001 新增生成规则 \N \N 009
+009002 修改生成规则 \N \N 009
+009003 删除生成规则 \N \N 009
+009004 立即生成报表 \N \N 009
+010 项目管理 \N \N \N
+010001 新建项目 \N \N 010
+010002 修改项目 \N \N 010
+010003 修改项目管理员 \N \N 010
+010004 删除项目 \N \N 010
+011 文档管理 \N \N \N
+011001 上传文件 \N \N 011
+011002 删除文件 \N \N 011
+011003 下载 \N \N 011
+012 事记 \N \N \N
+012001 新增事记 \N \N 012
+012002 修改事记 \N \N 012
+012003 删除事记 \N \N 012
+013 企业成员管理 \N \N \N
+013001 新增部门 \N \N 013
+013002 修改部门 \N \N 013
+013003 删除部门 \N \N 013
+013004 新增职务 \N \N 013
+013005 修改职务 \N \N 013
+013006 删除职务 \N \N 013
+013007 新增成员 \N \N 013
+013008 修改成员 \N \N 013
+013009 删除成员 \N \N 013
+013010 启用成员 \N \N 013
+013011 禁用成员 \N \N 013
+013012 修改职位权限 \N \N 013
+013013 修改数据范围 \N \N 013
+014 企业管理 \N \N \N
+014001 修改企业信息 \N \N 014
+014002 修改企业logo \N \N 014
+014003 删除企业 \N \N 014
+014004 转让企业 \N \N 014
+015 告警管理 \N \N \N
+015001 人工确认告警恢复 \N \N 015
+016 阈值配置 \N \N \N
+016001 新增阈值配置 \N \N 016
+016002 修改阈值配置 \N \N 016
+016003 删除阈值配置 \N \N 016
+017 视频管理 \N \N \N
+017001 新增NVR \N \N 017
+017002 修改NVR \N \N 017
+017003 删除NVR \N \N 017
+017004 新增摄像头 \N \N 017
+017005 修改摄像头 \N \N 017
+017006 删除摄像头 \N \N 017
+001 告警推送管理 \N \N \N
+001001 新增告警推送策略 \N \N 001
+001002 修改告警推送策略 \N \N 001
+001003 删除告警推送策略 \N \N 001
+018 智慧工地 \N \N \N
+018001 新增机构 \N \N 018
+018002 修改机构 \N \N 018
+018003 删除机构 \N \N 018
+018004 新增工地 \N \N 018
+018005 修改工地 \N \N 018
+018006 删除工地 \N \N 018
+019 事件评分指标权重 \N \N \N
+019002 设置事件评分指标权重 \N \N 019
+019003 删除事件评分指标权重 \N \N 019
+019004 新增结构物年平均降雨量 \N \N 019
+021 变化速率阈值配置 \N \N \N
+021001 添加变化速率阈值配置 \N \N 021
+021002 修改变化速率阈值配置 \N \N 021
+021003 删除变化速率阈值配置 \N \N 021
+020 聚集配置 \N \N \N
+020002 添加聚集配置 \N \N 020
+020003 修改聚集配置 \N \N 020
+020004 删除聚集配置 \N \N 020
+015002 查看设备类告警 \N \N 015
+015003 查看数据类告警 \N \N 015
+022 通信状态 \N \N \N
+022001 查看通信状态 \N \N 022
+007004 添加模型 \N \N 007
+023 异常推送配置 \N \N \N
+023001 异常推送配置 \N \N 023
+024 数据计算 \N \N \N
+024001 数据计算 \N \N 024
+025 结构物群 \N \N \N
+025001 新建结构物群 \N \N 025
+025002 编辑结构物群 \N \N 025
+025003 关联结构物 \N \N 025
+025004 删除结构物群 \N \N 025
+010005 发起审核 \N \N 010
+010006 项目审核 \N \N 010
+010007 项目发布 \N \N 010
+010008 查看已发布 \N \N 010
+026 动态采集 \N \N \N
+026001 新增动态采集 \N \N 026
+026002 编辑动态采集 \N \N 026
+026003 删除动态采集 \N \N 026
+027 BIM模型 \N \N \N
+027001 添加模型 \N \N 027
+027002 更新模型 \N \N 027
+027003 测点布设 \N \N 027
+028 项目公告 \N \N \N
+028001 新建项目公告 \N \N 028
+028002 编辑项目公告 \N \N 028
+028003 删除项目公告 \N \N 028
+\.
+
+
+--
+-- Data for Name: t_structure_type; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_structure_type (id, name, description, parent_type, portrait) FROM stdin;
+4 大坝 0 \N
+5 隧道 0 \N
+6 尾矿库 0 \N
+7 建筑物 0 \N
+9 特种设备 0 \N
+10 气象监测站 0 \N
+11 市政管网 0 \N
+12 涵洞 \N 0 \N
+14 梁式桥 1 \N
+15 拱式桥 1 \N
+16 钢架桥 1 \N
+17 斜拉桥 1 \N
+18 悬索桥 1 \N
+19 塔吊 0 \N
+21 高支模 0 \N
+23 公厕 0 \N
+26 智慧路灯 0 \N
+20 扬尘 0 \N
+28 医护 0 \N
+29 垃圾箱 0 \N
+27 河流 0 \N
+31 卸料平台 0 \N
+25 定位设备 0 \N
+35 升降机 \N 0 \N
+36 爬架 0 \N
+3 边坡 0 \N
+2 基坑 0 \N
+8 铁塔 0 \N
+38 路灯 \N 0 \N
+40 水质监测站 \N 0 \N
+41 站台 0 \N
+39 小区 \N 0 \N
+42 管道管线 0 \N
+43 园区企业 0 \N
+33 地灾 0 \N
+1 桥梁 0 \N
+48 烟囱 0 \N
+47 消火栓 0 \N
+46 消防 0 \N
+24 农业 0
+\.
+
+
+--
+-- Data for Name: t_structure_type_factor; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_structure_type_factor (id, structure_type, factor) FROM stdin;
+1 1 1
+2 1 2
+3 1 3
+4 1 4
+5 1 5
+6 1 6
+7 1 7
+8 1 8
+9 1 9
+10 1 10
+11 1 11
+12 1 12
+13 1 13
+14 1 14
+15 1 15
+16 1 16
+17 1 17
+18 1 18
+19 1 19
+20 1 20
+21 1 21
+22 1 22
+23 1 23
+24 1 24
+25 1 25
+26 1 26
+27 1 27
+28 1 28
+31 2 31
+33 2 33
+34 2 34
+35 2 35
+36 2 36
+37 2 37
+38 2 38
+39 2 39
+40 2 40
+41 2 41
+42 2 42
+43 2 43
+44 2 44
+45 2 45
+46 2 46
+47 2 47
+48 2 48
+49 2 49
+50 2 50
+51 2 51
+52 2 52
+1046 7 332
+1047 7 333
+58 3 58
+1050 2 336
+1051 7 337
+1052 33 338
+1053 46 339
+1055 46 341
+70 4 70
+71 4 71
+72 4 72
+75 4 75
+76 4 76
+77 4 77
+79 4 79
+1057 46 1
+84 5 84
+85 5 85
+86 5 86
+88 5 88
+89 5 89
+90 5 90
+91 5 91
+92 5 92
+93 5 93
+94 5 94
+95 5 95
+96 5 96
+97 5 97
+98 5 98
+102 5 102
+103 5 103
+104 5 104
+105 5 105
+106 5 106
+107 5 107
+108 5 108
+109 5 109
+112 6 112
+113 6 113
+114 6 114
+116 6 116
+117 6 117
+1058 46 2
+1060 46 342
+1061 46 343
+127 7 127
+129 7 129
+133 9 133
+134 9 134
+135 9 135
+137 9 137
+138 9 138
+139 9 139
+140 9 140
+142 9 142
+143 9 143
+145 9 145
+146 9 146
+147 9 147
+148 9 148
+1066 1 325
+1067 5 344
+151 10 151
+152 10 152
+153 10 153
+155 10 155
+156 10 156
+158 10 158
+159 10 159
+160 10 160
+161 10 161
+162 11 162
+163 11 163
+164 11 164
+165 11 165
+166 11 166
+167 11 167
+168 11 168
+169 9 169
+170 10 170
+171 10 171
+173 7 173
+174 11 174
+175 2 127
+176 5 153
+209 2 204
+210 2 205
+29 2 2
+55 3 3
+67 4 3
+81 5 3
+110 6 3
+120 7 3
+30 2 4
+68 4 4
+82 5 4
+111 6 4
+57 3 31
+69 4 31
+83 5 31
+122 7 31
+32 2 5
+123 7 5
+136 9 5
+201 5 5
+154 10 137
+203 5 166
+202 5 156
+73 4 58
+87 5 34
+172 7 34
+74 4 43
+124 7 11
+141 9 11
+208 10 11
+62 3 13
+99 5 13
+115 6 13
+125 7 13
+66 3 52
+78 4 18
+100 5 18
+128 7 18
+53 2 26
+130 7 26
+144 9 26
+101 5 204
+126 7 204
+216 11 211
+219 1 156
+220 11 214
+221 10 215
+222 10 216
+223 10 217
+224 10 218
+225 10 219
+226 10 220
+228 2 222
+229 2 223
+232 9 226
+234 1 228
+237 9 231
+238 9 232
+240 8 234
+243 7 237
+244 7 140
+245 7 156
+246 7 21
+247 6 238
+248 2 239
+250 2 241
+252 10 242
+253 10 243
+254 19 249
+255 20 250
+256 21 251
+257 21 252
+258 21 253
+259 21 254
+260 14 2
+261 14 7
+262 14 15
+263 14 28
+264 15 2
+265 15 7
+266 15 15
+267 15 28
+268 16 2
+269 16 7
+270 16 15
+271 16 28
+272 17 2
+273 17 7
+274 17 15
+275 17 28
+276 18 2
+277 18 7
+278 18 15
+279 18 28
+280 10 255
+281 10 256
+289 23 259
+290 23 260
+291 23 261
+292 23 263
+293 23 262
+294 23 2
+295 19 264
+298 24 267
+302 25 271
+303 26 1
+304 26 242
+118 7 2
+54 3 2
+80 5 2
+119 7 2
+149 10 2
+212 12 2
+235 8 2
+157 10 3
+121 7 4
+132 9 4
+150 10 4
+215 12 4
+239 9 167
+231 1 206
+414 3 310
+230 7 223
+241 11 226
+214 12 11
+282 1 237
+249 7 24
+312 28 274
+313 28 275
+213 12 204
+242 1 204
+305 26 272
+306 20 259
+307 2 273
+310 27 256
+311 27 250
+314 28 276
+315 28 277
+316 28 278
+317 28 279
+318 28 280
+352 27 283
+353 1 284
+354 29 284
+355 27 3
+356 27 31
+357 10 285
+358 2 286
+359 10 287
+360 23 288
+361 5 289
+362 4 290
+363 4 291
+364 4 292
+365 23 293
+366 6 294
+367 4 295
+368 4 296
+369 31 297
+371 2 299
+374 2 301
+375 2 300
+376 2 298
+378 33 3
+379 33 31
+380 33 302
+381 1 303
+382 10 304
+383 35 264
+385 36 306
+388 36 251
+389 36 253
+390 36 252
+391 3 60
+392 3 61
+393 3 63
+394 3 4
+395 3 151
+396 3 156
+397 3 33
+398 3 24
+399 3 18
+400 3 204
+401 3 206
+402 3 241
+403 3 35
+404 3 36
+405 3 11
+406 3 307
+407 6 308
+408 2 94
+409 2 309
+415 8 131
+416 8 227
+417 8 3
+418 8 156
+419 8 206
+420 8 11
+422 2 311
+423 2 312
+424 5 313
+425 38 314
+426 7 315
+427 40 256
+428 41 316
+430 6 317
+431 39 256
+432 39 250
+433 39 260
+434 39 259
+435 39 314
+436 39 315
+438 1 319
+439 1 320
+440 39 320
+441 2 321
+442 20 322
+443 42 256
+444 42 70
+445 42 140
+446 7 323
+447 3 324
+449 27 326
+450 2 327
+451 1 328
+452 33 1
+453 33 2
+454 33 4
+455 33 5
+456 33 6
+457 33 7
+458 33 8
+459 33 9
+460 33 10
+461 33 11
+462 33 13
+463 33 14
+464 33 15
+465 33 16
+466 33 17
+467 33 18
+468 33 19
+469 33 20
+470 33 21
+471 33 22
+472 33 23
+473 33 24
+474 33 25
+475 33 26
+476 33 27
+477 33 28
+478 33 33
+479 33 36
+480 33 37
+481 33 38
+482 33 39
+483 33 40
+484 33 41
+485 33 42
+486 33 43
+487 33 44
+488 33 45
+489 33 46
+490 33 47
+491 33 48
+492 33 49
+493 33 50
+494 33 51
+495 33 52
+496 33 58
+497 33 60
+498 33 61
+499 33 63
+500 33 70
+501 33 71
+502 33 72
+503 33 75
+504 33 76
+505 33 77
+506 33 79
+507 33 84
+508 33 85
+509 33 86
+510 33 88
+511 33 89
+512 33 90
+513 33 91
+514 33 92
+515 33 93
+516 33 94
+517 33 95
+518 33 96
+519 33 97
+520 33 98
+521 33 102
+522 33 103
+523 33 104
+524 33 105
+525 33 106
+526 33 107
+527 33 108
+528 33 109
+529 33 112
+530 33 113
+531 33 114
+532 33 116
+533 33 117
+534 33 127
+535 33 129
+536 33 131
+537 33 133
+538 33 134
+539 33 135
+540 33 137
+541 33 138
+542 33 12
+543 33 35
+544 33 139
+545 33 140
+546 33 142
+547 33 143
+548 33 145
+549 33 146
+550 33 147
+551 33 148
+552 33 151
+553 33 152
+554 33 153
+555 33 155
+556 33 156
+557 33 158
+558 33 159
+559 33 160
+560 33 161
+561 33 162
+562 33 163
+563 33 164
+564 33 165
+565 33 166
+566 33 167
+567 33 168
+568 33 169
+569 33 170
+570 33 171
+571 33 173
+572 33 174
+573 33 204
+574 33 205
+575 33 206
+576 33 211
+577 33 214
+578 33 215
+579 33 216
+580 33 217
+581 33 218
+582 33 219
+583 33 220
+584 33 222
+585 33 223
+586 33 226
+587 33 227
+588 33 228
+589 33 231
+590 33 232
+591 33 234
+592 33 237
+593 33 238
+594 33 239
+595 33 241
+596 33 242
+597 33 243
+598 33 249
+599 33 250
+600 33 251
+601 33 252
+602 33 253
+603 33 255
+604 33 256
+605 33 259
+606 33 260
+607 33 261
+608 33 262
+609 33 263
+610 33 264
+611 33 266
+612 33 267
+613 33 269
+614 33 34
+615 33 272
+616 33 271
+617 33 273
+618 33 274
+619 33 275
+620 33 276
+621 33 277
+622 33 278
+623 33 279
+624 33 280
+625 33 284
+626 33 285
+627 33 287
+628 33 288
+629 33 289
+630 33 293
+631 33 297
+632 33 303
+633 33 310
+634 33 312
+635 33 313
+636 33 314
+637 33 315
+638 33 316
+639 33 319
+640 33 320
+641 33 321
+642 33 323
+643 33 325
+644 33 327
+645 33 328
+646 1 329
+647 1 330
+648 3 330
+649 10 330
+1049 2 335
+1054 46 340
+1068 5 345
+1069 3 346
+1070 3 347
+1071 48 348
+1072 46 315
+1074 47 342
+1075 47 315
+1076 7 349
+1077 43 259
+1078 3 350
+1103 24 266
+1104 24 269
+1105 24 152
+1106 24 153
+1107 24 250
+1108 24 3
+1111 5 353
+1112 5 354
+1113 2 355
+1114 5 356
+1115 1 357
+1118 43 359
+\.
+
+
+--
+-- Data for Name: t_type_alarm_source; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_type_alarm_source (id, name, description) FROM stdin;
+0 DTU \N
+1 传感器 \N
+2 测点 \N
+\.
+
+
+--
+-- Data for Name: t_type_alarm_state; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_type_alarm_state (id, name, description) FROM stdin;
+0 未恢复 \N
+1 人工恢复 \N
+2 自动回复 \N
+\.
+
+
+--
+-- Data for Name: t_type_event_index; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_type_event_index (id, name, description) FROM stdin;
+1 暴雨预警 \N
+2 平台数据类告警 \N
+3 近十日降雨量 \N
+4 地震发生情况 \N
+5 地灾发生情况 \N
+\.
+
+
+--
+-- Data for Name: t_type_file_type; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_type_file_type (id, name) FROM stdin;
+2 报表文件
+3 数据文件
+1 应用文件
+4 审核报告
+\.
+
+
+--
+-- Data for Name: t_type_institution_role; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_type_institution_role (id, name, description) FROM stdin;
+1 住建局
+2 监理单位
+3 施工单位
+4 建设单位
+\.
+
+
+--
+-- Data for Name: t_type_org_type; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_type_org_type (id, name, description) FROM stdin;
+1002 Owner 业主
+1001 Agent 集成商
+1003 Assess 评估商
+1004 Operator 运营商
+\.
+
+
+--
+-- Data for Name: t_type_project_state; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_type_project_state (id, name, description) FROM stdin;
+0 待发审 等待发起审核
+1 待审核 审核处理中
+2 待修改 审核未通过,等待修改
+3 审核通过 项目已审核通过
+4 已发布 项目已发布
+-1 已删除 项目已删除
+\.
+
+
+--
+-- Data for Name: t_type_report_state; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_type_report_state (id, name, description) FROM stdin;
+0 未确认 \N
+1 已确认 \N
+\.
+
+
+--
+-- Data for Name: t_type_role_type; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_type_role_type (code, description) FROM stdin;
+A 注册机构的所有者
+C 项目机构的管理员
+CC 非管理员子角色
+B 运营机构的管理员
+\.
+
+
+--
+-- Data for Name: t_units; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_units (name, dimension, description, coef, base, alternative) FROM stdin;
+km length 千米 1000.0000000000000000 f \N
+dm length 分米 0.1000000000000000 f \N
+cm length 厘米 0.0100000000000000 f \N
+mm length 毫米 0.0010000000000000 f \N
+um length 微米 0.0000010000000000 f \N
+nm length 纳米 0.0000000010000000 f \N
+pm length 皮米 0.0000000000010000 f \N
+ly length 光年 9460700000000000.0000000000000000 f \N
+AU length 天文单位 149600000000.0000000000000000 f \N
+in length 英寸,inch 0.0254000000000000 f \N
+ft length 英尺 0.3048000000000000 f \N
+yd length 码 0.9144000000000000 f \N
+mi length 英里 1609.3440000000000000 f \N
+nmi length 海里 1852.0000000000000000 f \N
+fm length 英寻 1.8288000000000000 f \N
+fur length 弗隆 201.1680000000000000 f \N
+里 length 里 500.0000000000000000 f \N
+丈 length 丈 3.3333333000000000 f \N
+尺 length 尺 0.3333333000000000 f \N
+寸 length 寸 0.0333333000000000 f \N
+分 length 分 0.0033333000000000 f \N
+厘 length 厘 0.0003333000000000 f \N
+毫 length 毫 0.0000333000000000 f \N
+g weight 克 0.0010000000000000 f \N
+mg weight 毫克 0.0000010000000000 f \N
+ug weight 微克 0.0000000010000000 f \N
+t weight 吨 1000.0000000000000000 f \N
+q weight 公担 100.0000000000000000 f \N
+ct weight 克拉 0.0002000000000000 f \N
+point weight 分 0.0000020000000000 f \N
+dwt weight 英钱 1.3607800000000000 f \N
+oz weight 盎司 0.0283495000000000 f \N
+lb weight 磅 0.4535924000000000 f \N
+dr weight 打兰 0.0017718000000000 f \N
+两 weight 两 0.0500000000000000 f \N
+钱 weight 钱 0.0050000000000000 f \N
+斤 weight 斤,市斤 0.5000000000000000 f \N
+yr time 年,year 31536000.0000000000000000 f \N
+week time 周,week 604800.0000000000000000 f \N
+d time 天,day 86400.0000000000000000 f \N
+h time 时,小时,hour 3600.0000000000000000 f \N
+min time 分,分钟,minute 60.0000000000000000 f \N
+ms time 毫秒 0.0010000000000000 f \N
+us time 微秒 0.0000010000000000 f \N
+ns time 纳秒 0.0000000010000000 f \N
+kA current 千安 1000.0000000000000000 f \N
+MA current 兆安 1000000.0000000000000000 f \N
+mA current 毫安 0.0010000000000000 f \N
+uA current 微安 0.0000010000000000 f \N
+nA current 纳安 0.0000000010000000 f \N
+m length 米 1.0000000000000000 t \N
+kg weight 千克,公斤 1.0000000000000000 t \N
+s time 秒,second 1.0000000000000000 t \N
+A current 安 1.0000000000000000 t \N
+℃ temperature 摄氏度 274.1500000000000000 f \N
+℉ temperature 华氏度 255.9277778000000000 f \N
+kPa pressure 千帕 1000.0000000000000000 f \N
+MPa pressure 兆帕 1000000.0000000000000000 f \N
+hPa pressure 百帕 100.0000000000000000 f \N
+atm pressure 标准大气压 101325.0000000000000000 f \N
+bar pressure 巴 100000.0000000000000000 f \N
+mmHg pressure 毫米汞柱 133.3223684000000000 f \N
+mmH2O pressure 毫米水柱 9.8066136000000000 f \N
+mH2O pressure 米水柱 9806.6136000000000000 f \N
+mbar pressure 毫巴 100.0000000000000000 f \N
+K temperature 开氏度 1.0000000000000000 t \N
+kN force 千牛 1000.0000000000000000 f \N
+kgf force 千克力 9.8066500000000000 f \N
+kg/dm3 density 千克/立方分米 1000.0000000000000000 f \N
+kg/cm3 density 千克/立方厘米 1000000.0000000000000000 f \N
+kJ work 千焦 1000.0000000000000000 f \N
+kW·h work 千瓦·时,度 3600000.0000000000000000 f \N
+cal work 卡 4.1858518000000000 f \N
+kcal work 千卡 4185.8518208000000000 f \N
+N force 牛 1.0000000000000000 t \N
+kg/m3 density 千克/立方米 1.0000000000000000 t \N
+J work 焦耳 1.0000000000000000 t \N
+kW power 千瓦 1000.0000000000000000 f \N
+kg·m/s power 公斤·米/秒 9.8066500000000000 f \N
+N·m/s power 牛顿·米/秒 1.0000000000000000 f \N
+J/s power 焦耳/秒 1.0000000000000000 f \N
+W power 瓦,瓦特 1.0000000000000000 t \N
+l volume 升 0.0010000000000000 f \N
+mm3 volume 立方毫米 0.0000000010000000 f \N
+ml volume 毫升 0.0000010000000000 f \N
+cm3 volume 立方厘米 0.0000010000000000 f \N
+dm3 volume 立方分米 0.0010000000000000 f \N
+m3 volume 立方米 1.0000000000000000 t \N
+km2 area 平方千米 1000000.0000000000000000 f \N
+dm2 area 平方分米 0.0100000000000000 f \N
+cm2 area 平方厘米 0.0001000000000000 f \N
+mm2 area 平方毫米 0.0000010000000000 f \N
+m2 area 平方米 1.0000000000000000 t \N
+C/s current C/s 0.1000000000000000 f \N
+GA current GA 1000000000.0000000000000000 f \N
+Pa pressure 帕斯卡,帕 1.0000000000000000 t N/m2
+kN/mm2 pressure kN/mm^2 1000000000.0000000000000000 f \N
+ε strain ε 1.0000000000000000 t _
+uε strain με 0.0000010000000000 f \N
+m3/s flow 立方米每秒 1.0000000000000000 t m^3/s
+L/s flow 升每秒 0.0010000000000000 f \N
+t force 吨 10000.0000000000000000 f \N
+\.
+
+
+--
+-- Data for Name: t_video_nvr_vendor; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.t_video_nvr_vendor (id, name, enabled) FROM stdin;
+1 海康威视 t
+2 浙江大华技术股份有限公司 t
+\.
+
+
+--
+-- Name: t_alarm_category_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_alarm_category_id_seq', 1, false);
+
+
+--
+-- Name: t_alarm_code_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_alarm_code_id_seq', 107, true);
+
+
+--
+-- Name: t_alarm_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_alarm_type_id_seq', 21, true);
+
+
+--
+-- Name: t_calendar_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_calendar_type_id_seq', 3, true);
+
+
+--
+-- Name: t_component_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_component_id_seq', 1, false);
+
+
+--
+-- Name: t_factor_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_factor_id_seq', 359, true);
+
+
+--
+-- Name: t_factor_proto_device_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_factor_proto_device_id_seq', 905, true);
+
+
+--
+-- Name: t_factor_proto_item_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_factor_proto_item_id_seq', 413, true);
+
+
+--
+-- Name: t_filter_method_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_filter_method_id_seq', 1, false);
+
+
+--
+-- Name: t_formula_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_formula_id_seq', 1, false);
+
+
+--
+-- Name: t_group_type_factor_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_group_type_factor_id_seq', 4, true);
+
+
+--
+-- Name: t_item_unit_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_item_unit_id_seq', 409, true);
+
+
+--
+-- Name: t_report_template_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_report_template_id_seq', 14, true);
+
+
+--
+-- Name: t_structure_type_factor_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_structure_type_factor_id_seq', 1118, true);
+
+
+--
+-- Name: t_structure_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_structure_type_id_seq', 50, true);
+
+
+--
+-- Name: t_type_event_index_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_type_event_index_id_seq', 1, false);
+
+
+--
+-- Name: t_video_nvr_vendor_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.t_video_nvr_vendor_id_seq', 2, true);
+
+
+--
+-- PostgreSQL database dump complete
+--
+
+
+
+INSERT INTO public.t_organization (id, org_type, name, domain, state, aptitude_file, register_code, logo, scale, region, app_key, app_secret) VALUES (1, 1001, '江西飞尚科技有限公司云平台', 'anxinyun', 1, null, '9e370b8f-4c3e-4032-a366-4acb146711bc', 'image/6eaec9cb-9d75-4a63-bb28-5f6f7e2aacd8/image.png', '21-50人', '649,705,708', '654e52caf15361dd09419addd42edcc40e7f9870', '4c5a064360b9ba35fe59440efab3b1c720c34c9a');
+
+INSERT INTO public.t_department (id, org, name) VALUES (1, 1, '默认');
+
+INSERT INTO public.t_role (id, dep, name, portal, description, type) VALUES (1, 1, '所有者', 'A', null, false);
+
+INSERT INTO public.t_user (id, name, name_present, password, phone, email, avator, org, role, register_time, mail_notice, sms_notice, no_disturb, enabled, open_id, nick_name, wx_notice, union_id, institution_role) VALUES (1, 'SuperAdmin', '超级管理员', 'c8a1b2245ee704e7657b2c9a7c9086af', '', 'admin@god.com', '8.png', 1, 1, '2018-07-25 08:00:28.465074', true, false, true, true, null, null, false, null, null);
+
+
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '007004');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '002001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '002002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '002003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '003001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '004');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '004001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '004002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '004003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '004004');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '005');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '005001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '005002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '005003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '005004');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '005005');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '005006');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '005007');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '005008');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '005009');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '006');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '006001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '006002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '006003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '007');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '007001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '007002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '007003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '008');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '008001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '008002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '008003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '009');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '009001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '009002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '009003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '009004');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '010');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '010001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '010002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '010003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '010004');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '011');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '011001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '011002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '011003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '012');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '012001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '012002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '012003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '013');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '013001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '013002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '013003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '013004');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '013005');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '013006');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '013007');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '013008');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '013009');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '013010');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '013011');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '013012');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '013013');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '014');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '014001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '014002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '014003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '014004');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '015');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '015001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '016');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '016001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '016002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '016003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '017');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '017001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '017002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '017003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '017004');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '017005');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '017006');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '001001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '001002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '001003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '018');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '018001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '018002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '018003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '018004');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '018005');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '018006');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '019');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '019002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '019003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '019004');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '020');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '020002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '020003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '020004');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '021');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '021001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '021002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '021003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '015002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '015003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '022');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '022001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '023');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '023001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '024');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '024001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '025');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '025001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '025002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '025003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '025004');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '010005');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '010006');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '010007');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '010008');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '026');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '026001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '026002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '026003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '027');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '027001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '027002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '027003');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '028001');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '028002');
+INSERT INTO public.t_role_resource (role, resource) VALUES (1, '028003');
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/axy_schema.sql b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/axy_schema.sql
new file mode 100644
index 0000000..7426b7f
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/axy_schema.sql
@@ -0,0 +1,5944 @@
+--
+-- PostgreSQL database dump
+--
+
+-- Dumped from database version 12.1
+-- Dumped by pg_dump version 12.1
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET idle_in_transaction_session_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SELECT pg_catalog.set_config('search_path', '', false);
+SET check_function_bodies = false;
+SET xmloption = content;
+SET client_min_messages = warning;
+SET row_security = off;
+
+--
+-- Name: public; Type: SCHEMA; Schema: -; Owner: -
+--
+
+CREATE SCHEMA public;
+
+
+--
+-- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: -
+--
+
+COMMENT ON SCHEMA public IS 'standard public schema';
+
+
+SET default_tablespace = '';
+
+SET default_table_access_method = heap;
+
+--
+-- Name: orgid; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.orgid (
+ id integer
+);
+
+
+--
+-- Name: t_abn_report_params; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_abn_report_params (
+ id integer NOT NULL,
+ station_id integer NOT NULL,
+ factor_proto_code character varying(30) NOT NULL,
+ itemid integer,
+ abn_type integer,
+ params jsonb NOT NULL,
+ enabled boolean DEFAULT true NOT NULL
+);
+
+
+--
+-- Name: t_abn_report_params_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_abn_report_params_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_abn_report_params_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_abn_report_params_id_seq OWNED BY public.t_abn_report_params.id;
+
+
+--
+-- Name: t_abn_report_push_strategy; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_abn_report_push_strategy (
+ id integer NOT NULL,
+ user_id integer NOT NULL,
+ enabled boolean DEFAULT true NOT NULL,
+ structures integer[] NOT NULL,
+ created_org integer
+);
+
+
+--
+-- Name: t_abn_report_push_strategy_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_abn_report_push_strategy_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_abn_report_push_strategy_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_abn_report_push_strategy_id_seq OWNED BY public.t_abn_report_push_strategy.id;
+
+
+--
+-- Name: t_abn_type; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_abn_type (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ description character varying(50) NOT NULL
+);
+
+
+--
+-- Name: t_agg_config; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_agg_config (
+ id integer NOT NULL,
+ struct_id integer NOT NULL,
+ factor_id integer NOT NULL,
+ enabled boolean DEFAULT true NOT NULL,
+ category integer NOT NULL,
+ algorithm integer NOT NULL,
+ start_day smallint,
+ end_day smallint,
+ start_hour smallint,
+ end_hour smallint,
+ delete boolean DEFAULT false NOT NULL,
+ start_time integer NOT NULL,
+ time_range jsonb
+);
+
+
+--
+-- Name: t_agg_config_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_agg_config_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_agg_config_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_agg_config_id_seq OWNED BY public.t_agg_config.id;
+
+
+--
+-- Name: t_agg_threshold_config; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_agg_threshold_config (
+ id integer NOT NULL,
+ struct_id integer NOT NULL,
+ factor_id integer NOT NULL,
+ agg_category integer NOT NULL,
+ item_id smallint NOT NULL,
+ threshold_level smallint NOT NULL,
+ threshold_lower double precision NOT NULL,
+ threshold_upper double precision NOT NULL,
+ start_hour smallint,
+ end_hour smallint
+);
+
+
+--
+-- Name: t_agg_threshold_config_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_agg_threshold_config_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_agg_threshold_config_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_agg_threshold_config_id_seq OWNED BY public.t_agg_threshold_config.id;
+
+
+--
+-- Name: t_agg_type; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_agg_type (
+ id integer NOT NULL,
+ type_name character varying(30) NOT NULL,
+ parent_type_id smallint NOT NULL,
+ description character varying(30),
+ name character varying(10)
+);
+
+
+--
+-- Name: t_alarm; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_alarm (
+ id integer NOT NULL,
+ alarm_type integer NOT NULL,
+ source_type integer NOT NULL,
+ structure integer NOT NULL,
+ device uuid,
+ sensor integer,
+ alarm_info character varying(256) NOT NULL,
+ alarm_level integer NOT NULL,
+ alarm_count integer NOT NULL,
+ begin_time timestamp with time zone NOT NULL,
+ end_time timestamp with time zone,
+ alarm_state integer NOT NULL
+);
+
+
+--
+-- Name: t_alarm_category; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_alarm_category (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL
+);
+
+
+--
+-- Name: t_alarm_category_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_alarm_category_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_alarm_category_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_alarm_category_id_seq OWNED BY public.t_alarm_category.id;
+
+
+--
+-- Name: t_alarm_code; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_alarm_code (
+ id integer NOT NULL,
+ code character varying(20) NOT NULL,
+ name character varying(255),
+ type_code character varying(20) NOT NULL,
+ level integer NOT NULL,
+ upgrade_strategy jsonb,
+ enable boolean DEFAULT true NOT NULL
+);
+
+
+--
+-- Name: t_alarm_code_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_alarm_code_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_alarm_code_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_alarm_code_id_seq OWNED BY public.t_alarm_code.id;
+
+
+--
+-- Name: t_alarm_custom_message; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_alarm_custom_message (
+ id integer NOT NULL,
+ structure integer NOT NULL,
+ email character varying(255),
+ sms character varying(255)
+);
+
+
+--
+-- Name: t_alarm_custom_message_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_alarm_custom_message_id_seq
+ AS integer
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_alarm_custom_message_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_alarm_custom_message_id_seq OWNED BY public.t_alarm_custom_message.id;
+
+
+--
+-- Name: t_alarm_deal; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_alarm_deal (
+ id integer NOT NULL,
+ alarm integer NOT NULL,
+ deal_user integer NOT NULL,
+ deal_info character varying(256),
+ deal_time timestamp with time zone NOT NULL
+);
+
+
+--
+-- Name: t_alarm_deal_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_alarm_deal_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_alarm_deal_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_alarm_deal_id_seq OWNED BY public.t_alarm_deal.id;
+
+
+--
+-- Name: t_alarm_detail; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_alarm_detail (
+ id bigint NOT NULL,
+ alarm integer NOT NULL,
+ alarm_info character varying(256) NOT NULL,
+ alarm_time timestamp with time zone NOT NULL
+);
+
+
+--
+-- Name: t_alarm_detail_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_alarm_detail_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_alarm_detail_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_alarm_detail_id_seq OWNED BY public.t_alarm_detail.id;
+
+
+--
+-- Name: t_alarm_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_alarm_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_alarm_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_alarm_id_seq OWNED BY public.t_alarm.id;
+
+
+--
+-- Name: t_alarm_policy; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_alarm_policy (
+ id integer NOT NULL,
+ structures integer[] NOT NULL,
+ sms_noticed boolean NOT NULL,
+ notice_users integer[] NOT NULL,
+ enabled boolean NOT NULL,
+ created_organization integer NOT NULL,
+ alarm_categories integer[] NOT NULL,
+ email_noticed boolean NOT NULL,
+ email_alarm_levels integer[],
+ sms_alarm_levels integer[],
+ wx_noticed boolean DEFAULT false NOT NULL,
+ wx_alarm_levels integer[],
+ extras jsonb,
+ broadcast_noticed boolean DEFAULT false NOT NULL,
+ broadcast_alarm_levels integer[],
+ broadcast_device_id character varying(50)
+);
+
+
+--
+-- Name: t_alarm_policy_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_alarm_policy_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_alarm_policy_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_alarm_policy_id_seq OWNED BY public.t_alarm_policy.id;
+
+
+--
+-- Name: t_alarm_type; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_alarm_type (
+ id integer NOT NULL,
+ code character varying(50) NOT NULL,
+ name character varying(50) NOT NULL,
+ description character varying(100),
+ category integer NOT NULL,
+ enabled boolean NOT NULL,
+ upgrade_strategy jsonb
+);
+
+
+--
+-- Name: t_alarm_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_alarm_type_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_alarm_type_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_alarm_type_id_seq OWNED BY public.t_alarm_type.id;
+
+
+--
+-- Name: t_api_log; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_api_log (
+ id bigint NOT NULL,
+ log_time timestamp with time zone NOT NULL,
+ method character varying(20),
+ content character varying(256),
+ parameter character varying(256),
+ parameter_show character varying(256),
+ user_agent character varying(512),
+ url character varying(256),
+ status_code integer,
+ cost integer,
+ visible boolean NOT NULL
+);
+
+
+--
+-- Name: t_api_log_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_api_log_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_api_log_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_api_log_id_seq OWNED BY public.t_api_log.id;
+
+
+--
+-- Name: t_app_message; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_app_message (
+ id integer NOT NULL,
+ project_id integer NOT NULL,
+ title character varying(128) NOT NULL,
+ content character varying(4096) NOT NULL,
+ post_time timestamp(6) with time zone NOT NULL,
+ post_user_id integer NOT NULL,
+ expired_time timestamp(6) with time zone NOT NULL
+);
+
+
+--
+-- Name: t_app_message_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_app_message_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_app_message_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_app_message_id_seq OWNED BY public.t_app_message.id;
+
+
+--
+-- Name: t_apply; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_apply (
+ id integer NOT NULL,
+ phone character varying(11) NOT NULL,
+ org character varying(100) NOT NULL,
+ province character varying(20) NOT NULL,
+ city character varying(20) NOT NULL,
+ struct_types character varying(50) NOT NULL,
+ reg_code uuid NOT NULL,
+ submit_date timestamp with time zone NOT NULL,
+ process_date timestamp with time zone,
+ approved boolean,
+ remarks character varying(200)
+);
+
+
+--
+-- Name: t_apply_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_apply_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_apply_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_apply_id_seq OWNED BY public.t_apply.id;
+
+
+--
+-- Name: t_averagerainfall; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_averagerainfall (
+ id integer NOT NULL,
+ "structId" integer NOT NULL,
+ rainfall numeric(8,3) NOT NULL,
+ "time" timestamp with time zone NOT NULL
+);
+
+
+--
+-- Name: t_averagerainfall_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_averagerainfall_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_averagerainfall_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_averagerainfall_id_seq OWNED BY public.t_averagerainfall.id;
+
+
+--
+-- Name: t_bim_rendering_path; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_bim_rendering_path (
+ id integer NOT NULL,
+ structure_id character varying(50) NOT NULL,
+ bim_rendering_path character varying(200) NOT NULL
+);
+
+
+--
+-- Name: t_bim_rendering_path_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_bim_rendering_path_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_bim_rendering_path_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_bim_rendering_path_id_seq OWNED BY public.t_bim_rendering_path.id;
+
+
+--
+-- Name: t_bim_stations; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_bim_stations (
+ id integer NOT NULL,
+ structure_id character varying(50) NOT NULL,
+ stations_id character varying(50) NOT NULL,
+ component_id character varying(50) NOT NULL,
+ point character varying(256) NOT NULL,
+ bbox character varying(256)
+);
+
+
+--
+-- Name: t_bim_stations_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_bim_stations_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_bim_stations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_bim_stations_id_seq OWNED BY public.t_bim_stations.id;
+
+
+--
+-- Name: t_calendar; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_calendar (
+ id integer NOT NULL,
+ org integer NOT NULL,
+ type integer NOT NULL,
+ calendar_time timestamp with time zone NOT NULL,
+ calendar_content character varying(512),
+ structure integer
+);
+
+
+--
+-- Name: t_calendar_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_calendar_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_calendar_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_calendar_id_seq OWNED BY public.t_calendar.id;
+
+
+--
+-- Name: t_calendar_type; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_calendar_type (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL
+);
+
+
+--
+-- Name: t_calendar_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_calendar_type_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_calendar_type_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_calendar_type_id_seq OWNED BY public.t_calendar_type.id;
+
+
+--
+-- Name: t_component; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_component (
+ id integer NOT NULL,
+ component character varying(255)
+);
+
+
+--
+-- Name: t_component_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_component_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_component_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_component_id_seq OWNED BY public.t_component.id;
+
+
+--
+-- Name: t_construction; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_construction (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ address character varying(100),
+ longitude numeric(20,14),
+ latitude numeric(20,14),
+ des character varying(100) NOT NULL,
+ portrait character varying(200) NOT NULL,
+ org_built integer NOT NULL,
+ org_construct integer NOT NULL,
+ org_owner integer NOT NULL,
+ org_supervision integer NOT NULL,
+ area integer,
+ height integer,
+ design_company character varying(100),
+ construct_begin timestamp with time zone,
+ construct_end timestamp with time zone,
+ project_type integer DEFAULT 1 NOT NULL
+);
+
+
+--
+-- Name: t_construction_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_construction_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_construction_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_construction_id_seq OWNED BY public.t_construction.id;
+
+
+--
+-- Name: t_data_original; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_data_original (
+ id bigint NOT NULL,
+ iota_device_id uuid NOT NULL,
+ original_data jsonb NOT NULL,
+ collect_time timestamp with time zone NOT NULL,
+ batch_no character varying(100) NOT NULL
+);
+
+
+--
+-- Name: t_data_original_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_data_original_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_data_original_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_data_original_id_seq OWNED BY public.t_data_original.id;
+
+
+--
+-- Name: t_data_sensor_latest; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_data_sensor_latest (
+ id integer NOT NULL,
+ sensor integer NOT NULL,
+ latest_data jsonb NOT NULL,
+ collect_time timestamp with time zone NOT NULL,
+ violate_rational_times integer NOT NULL,
+ state integer NOT NULL
+);
+
+
+--
+-- Name: t_data_sensor_latest_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_data_sensor_latest_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_data_sensor_latest_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_data_sensor_latest_id_seq OWNED BY public.t_data_sensor_latest.id;
+
+
+--
+-- Name: t_debug_history; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_debug_history (
+ do_user_id integer,
+ do_time timestamp with time zone DEFAULT now(),
+ package_size character varying(10),
+ use_time integer,
+ result integer,
+ iota_thing_id uuid NOT NULL,
+ dtu_id character varying(50) DEFAULT NULL::character varying,
+ id integer NOT NULL,
+ device_id character varying(50) NOT NULL,
+ is_success boolean
+);
+
+
+--
+-- Name: COLUMN t_debug_history.do_user_id; Type: COMMENT; Schema: public; Owner: -
+--
+
+COMMENT ON COLUMN public.t_debug_history.do_user_id IS '操作人id';
+
+
+--
+-- Name: COLUMN t_debug_history.do_time; Type: COMMENT; Schema: public; Owner: -
+--
+
+COMMENT ON COLUMN public.t_debug_history.do_time IS '操作时间';
+
+
+--
+-- Name: COLUMN t_debug_history.package_size; Type: COMMENT; Schema: public; Owner: -
+--
+
+COMMENT ON COLUMN public.t_debug_history.package_size IS '数据包大小';
+
+
+--
+-- Name: COLUMN t_debug_history.use_time; Type: COMMENT; Schema: public; Owner: -
+--
+
+COMMENT ON COLUMN public.t_debug_history.use_time IS '耗时';
+
+
+--
+-- Name: COLUMN t_debug_history.result; Type: COMMENT; Schema: public; Owner: -
+--
+
+COMMENT ON COLUMN public.t_debug_history.result IS '结果';
+
+
+--
+-- Name: COLUMN t_debug_history.iota_thing_id; Type: COMMENT; Schema: public; Owner: -
+--
+
+COMMENT ON COLUMN public.t_debug_history.iota_thing_id IS 'iotathingid';
+
+
+--
+-- Name: COLUMN t_debug_history.dtu_id; Type: COMMENT; Schema: public; Owner: -
+--
+
+COMMENT ON COLUMN public.t_debug_history.dtu_id IS 'dtuid';
+
+
+--
+-- Name: COLUMN t_debug_history.id; Type: COMMENT; Schema: public; Owner: -
+--
+
+COMMENT ON COLUMN public.t_debug_history.id IS 'id';
+
+
+--
+-- Name: COLUMN t_debug_history.device_id; Type: COMMENT; Schema: public; Owner: -
+--
+
+COMMENT ON COLUMN public.t_debug_history.device_id IS '下发设备id';
+
+
+--
+-- Name: COLUMN t_debug_history.is_success; Type: COMMENT; Schema: public; Owner: -
+--
+
+COMMENT ON COLUMN public.t_debug_history.is_success IS '是否成功';
+
+
+--
+-- Name: t_debug_history_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_debug_history_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_debug_history_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_debug_history_id_seq OWNED BY public.t_debug_history.id;
+
+
+--
+-- Name: t_department; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_department (
+ id integer NOT NULL,
+ org integer NOT NULL,
+ name character varying(50) NOT NULL
+);
+
+
+--
+-- Name: t_department_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_department_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_department_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_department_id_seq OWNED BY public.t_department.id;
+
+
+--
+-- Name: t_department_structure; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_department_structure (
+ id integer NOT NULL,
+ department integer NOT NULL,
+ structure integer NOT NULL,
+ role_id integer,
+ user_id integer
+);
+
+
+--
+-- Name: t_department_structure_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_department_structure_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_department_structure_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_department_structure_id_seq OWNED BY public.t_department_structure.id;
+
+
+--
+-- Name: t_device_sensor; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_device_sensor (
+ id integer NOT NULL,
+ iota_device_id uuid NOT NULL,
+ iota_device_serial integer DEFAULT 0 NOT NULL,
+ sensor integer NOT NULL,
+ params jsonb
+);
+
+
+--
+-- Name: t_device_sensor_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_device_sensor_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_device_sensor_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_device_sensor_id_seq OWNED BY public.t_device_sensor.id;
+
+
+--
+-- Name: t_dyna_glt_config; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_dyna_glt_config (
+ id integer NOT NULL,
+ scheme_id uuid NOT NULL,
+ glt integer NOT NULL,
+ cond jsonb,
+ enable boolean
+);
+
+
+--
+-- Name: t_dyna_glt_config_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_dyna_glt_config_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_dyna_glt_config_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_dyna_glt_config_id_seq OWNED BY public.t_dyna_glt_config.id;
+
+
+--
+-- Name: t_event_config; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_event_config (
+ id integer NOT NULL,
+ "structId" integer NOT NULL,
+ "indexId" integer NOT NULL,
+ weight integer NOT NULL
+);
+
+
+--
+-- Name: COLUMN t_event_config."indexId"; Type: COMMENT; Schema: public; Owner: -
+--
+
+COMMENT ON COLUMN public.t_event_config."indexId" IS 't_type_event_index';
+
+
+--
+-- Name: COLUMN t_event_config.weight; Type: COMMENT; Schema: public; Owner: -
+--
+
+COMMENT ON COLUMN public.t_event_config.weight IS '比重';
+
+
+--
+-- Name: t_event_config_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_event_config_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_event_config_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_event_config_id_seq OWNED BY public.t_event_config.id;
+
+
+--
+-- Name: t_factor; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_factor (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ proto character varying(30) NOT NULL,
+ org integer,
+ item jsonb NOT NULL
+);
+
+
+--
+-- Name: t_factor_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_factor_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_factor_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_factor_id_seq OWNED BY public.t_factor.id;
+
+
+--
+-- Name: t_factor_proto; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_factor_proto (
+ code character varying(30) NOT NULL,
+ name character varying(50)
+);
+
+
+--
+-- Name: t_factor_proto_device; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_factor_proto_device (
+ id integer NOT NULL,
+ proto character varying(30) NOT NULL,
+ iota_product_code uuid NOT NULL,
+ formula integer,
+ fields jsonb,
+ multi boolean DEFAULT false,
+ multi_formula integer,
+ multi_fields jsonb,
+ input_unitconvert jsonb
+);
+
+
+--
+-- Name: t_factor_proto_device_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_factor_proto_device_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_factor_proto_device_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_factor_proto_device_id_seq OWNED BY public.t_factor_proto_device.id;
+
+
+--
+-- Name: t_factor_proto_item; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_factor_proto_item (
+ id integer NOT NULL,
+ proto character varying(30) NOT NULL,
+ name character varying(50) NOT NULL,
+ field_name character varying(50) NOT NULL,
+ "precision" integer
+);
+
+
+--
+-- Name: t_factor_proto_item_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_factor_proto_item_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_factor_proto_item_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_factor_proto_item_id_seq OWNED BY public.t_factor_proto_item.id;
+
+
+--
+-- Name: t_factor_template; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_factor_template (
+ id integer NOT NULL,
+ structtype integer NOT NULL,
+ name character varying(100) NOT NULL,
+ org integer,
+ publish boolean NOT NULL,
+ description character varying(100)
+);
+
+
+--
+-- Name: t_factor_template_factor; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_factor_template_factor (
+ template_id integer NOT NULL,
+ factor integer NOT NULL,
+ id integer NOT NULL
+);
+
+
+--
+-- Name: t_factor_template_factor_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_factor_template_factor_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_factor_template_factor_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_factor_template_factor_id_seq OWNED BY public.t_factor_template_factor.id;
+
+
+--
+-- Name: t_factor_template_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_factor_template_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_factor_template_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_factor_template_id_seq OWNED BY public.t_factor_template.id;
+
+
+--
+-- Name: t_filter_config_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_filter_config_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_filter_config; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_filter_config (
+ id integer DEFAULT nextval('public.t_filter_config_id_seq'::regclass) NOT NULL,
+ sensor integer DEFAULT nextval('public.t_filter_config_id_seq'::regclass),
+ item integer,
+ method integer,
+ window_size integer NOT NULL,
+ params jsonb,
+ enable boolean DEFAULT true NOT NULL,
+ updatetime timestamp with time zone NOT NULL
+);
+
+
+--
+-- Name: t_filter_enviroment_config; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_filter_enviroment_config (
+ id integer NOT NULL,
+ project integer NOT NULL,
+ params jsonb NOT NULL,
+ receiver jsonb NOT NULL
+);
+
+
+--
+-- Name: t_filter_enviroment_config_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_filter_enviroment_config_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_filter_enviroment_config_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_filter_enviroment_config_id_seq OWNED BY public.t_filter_enviroment_config.id;
+
+
+--
+-- Name: t_filter_method; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_filter_method (
+ id integer NOT NULL,
+ type integer NOT NULL,
+ name character varying(50) NOT NULL,
+ params jsonb
+);
+
+
+--
+-- Name: t_filter_method_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_filter_method_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_filter_method_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_filter_method_id_seq OWNED BY public.t_filter_method.id;
+
+
+--
+-- Name: t_formula; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_formula (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ expression_shown character varying(255) NOT NULL,
+ description character varying(100),
+ params jsonb NOT NULL,
+ ioparams jsonb,
+ expression character varying(255),
+ ioparams_ext jsonb,
+ props jsonb
+);
+
+
+--
+-- Name: t_formula_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_formula_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_formula_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_formula_id_seq OWNED BY public.t_formula.id;
+
+
+--
+-- Name: t_formula_params_ex; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_formula_params_ex (
+ id integer NOT NULL,
+ name character varying(255),
+ params jsonb NOT NULL
+);
+
+
+--
+-- Name: t_formula_params_ex_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_formula_params_ex_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_formula_params_ex_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_formula_params_ex_id_seq OWNED BY public.t_formula_params_ex.id;
+
+
+--
+-- Name: t_group; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_group (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ group_type character varying(50) NOT NULL,
+ factor integer NOT NULL,
+ structure integer NOT NULL,
+ params jsonb DEFAULT '{}'::jsonb
+);
+
+
+--
+-- Name: t_group_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_group_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_group_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_group_id_seq OWNED BY public.t_group.id;
+
+
+--
+-- Name: t_group_sensor; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_group_sensor (
+ id integer NOT NULL,
+ group_id integer NOT NULL,
+ sensor integer NOT NULL,
+ params_value jsonb
+);
+
+
+--
+-- Name: t_group_sensor_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_group_sensor_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_group_sensor_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_group_sensor_id_seq OWNED BY public.t_group_sensor.id;
+
+
+--
+-- Name: t_group_type; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_group_type (
+ type_code character varying(50) NOT NULL,
+ name character varying(50) NOT NULL,
+ description character varying(100),
+ params jsonb NOT NULL,
+ present boolean NOT NULL
+);
+
+
+--
+-- Name: t_group_type_factor; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_group_type_factor (
+ id integer NOT NULL,
+ group_type character varying(50) NOT NULL,
+ proto character varying(30) NOT NULL
+);
+
+
+--
+-- Name: t_group_type_factor_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_group_type_factor_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_group_type_factor_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_group_type_factor_id_seq OWNED BY public.t_group_type_factor.id;
+
+
+--
+-- Name: t_institution; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_institution (
+ id integer NOT NULL,
+ institutionname character varying(50) NOT NULL,
+ institutionrole integer NOT NULL,
+ orgid integer,
+ institution_corporation character varying(50),
+ institution_corporation_contact character varying(50)
+);
+
+
+--
+-- Name: t_institution_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_institution_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_institution_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_institution_id_seq OWNED BY public.t_institution.id;
+
+
+--
+-- Name: t_item_unit; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_item_unit (
+ id integer NOT NULL,
+ name character varying(50),
+ item integer NOT NULL,
+ if_default boolean,
+ transform numeric(18,6)
+);
+
+
+--
+-- Name: t_item_unit_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_item_unit_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_item_unit_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_item_unit_id_seq OWNED BY public.t_item_unit.id;
+
+
+--
+-- Name: t_layout_model; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_layout_model (
+ id integer NOT NULL,
+ layout integer NOT NULL,
+ params jsonb NOT NULL,
+ structure integer NOT NULL
+);
+
+
+--
+-- Name: t_layout_model_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_layout_model_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_layout_model_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_layout_model_id_seq OWNED BY public.t_layout_model.id;
+
+
+--
+-- Name: t_layout_type; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_layout_type (
+ id integer NOT NULL,
+ name character varying(100)
+);
+
+
+--
+-- Name: t_message; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_message (
+ id integer NOT NULL,
+ user_id integer NOT NULL,
+ message_type integer NOT NULL,
+ generate_time timestamp with time zone NOT NULL,
+ content character varying(512),
+ read_time timestamp with time zone,
+ readed boolean DEFAULT false NOT NULL
+);
+
+
+--
+-- Name: t_message_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_message_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_message_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_message_id_seq OWNED BY public.t_message.id;
+
+
+--
+-- Name: t_message_type; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_message_type (
+ id integer NOT NULL,
+ name character varying(100) NOT NULL
+);
+
+
+--
+-- Name: t_netdisk_file; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_netdisk_file (
+ id integer NOT NULL,
+ file_type integer NOT NULL,
+ file_name character varying(100) NOT NULL,
+ file_ext character varying(30),
+ file_size integer NOT NULL,
+ file_link character varying(512) NOT NULL,
+ update_user integer NOT NULL,
+ update_time timestamp with time zone,
+ extra_info jsonb
+);
+
+
+--
+-- Name: t_netdisk_file_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_netdisk_file_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_netdisk_file_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_netdisk_file_id_seq OWNED BY public.t_netdisk_file.id;
+
+
+--
+-- Name: t_organization; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_organization (
+ id integer NOT NULL,
+ org_type integer NOT NULL,
+ name character varying(100) NOT NULL,
+ domain character varying(100),
+ state integer NOT NULL,
+ aptitude_file character varying(512),
+ register_code character varying(50),
+ logo character varying(512),
+ scale character varying(100),
+ region character varying(200),
+ app_key character(40),
+ app_secret character(40)
+);
+
+
+--
+-- Name: t_organization_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_organization_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_organization_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_organization_id_seq OWNED BY public.t_organization.id;
+
+
+--
+-- Name: t_organization_project; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_organization_project (
+ id integer NOT NULL,
+ org integer NOT NULL,
+ project integer NOT NULL
+);
+
+
+--
+-- Name: t_organization_project_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_organization_project_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_organization_project_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_organization_project_id_seq OWNED BY public.t_organization_project.id;
+
+
+--
+-- Name: t_phone_validate_code; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_phone_validate_code (
+ id integer NOT NULL,
+ phone character varying(20) NOT NULL,
+ code character varying(6) NOT NULL,
+ sig character varying(40) NOT NULL,
+ expired timestamp with time zone NOT NULL
+);
+
+
+--
+-- Name: t_phone_validate_code_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_phone_validate_code_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_phone_validate_code_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_phone_validate_code_id_seq OWNED BY public.t_phone_validate_code.id;
+
+
+--
+-- Name: t_project; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_project (
+ id integer NOT NULL,
+ name character varying(50),
+ logo character varying(256),
+ theme character varying(256),
+ url character varying(256),
+ marked boolean,
+ create_time timestamp with time zone NOT NULL,
+ update_time timestamp with time zone,
+ project_state integer NOT NULL,
+ describe character varying(512),
+ type integer DEFAULT 0 NOT NULL,
+ extra jsonb,
+ event_state boolean DEFAULT false
+);
+
+
+--
+-- Name: t_project_approve; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_project_approve (
+ id integer NOT NULL,
+ project integer NOT NULL,
+ approve_user integer NOT NULL,
+ approve_time timestamp with time zone NOT NULL,
+ project_state integer NOT NULL,
+ approve_info character varying(2048)
+);
+
+
+--
+-- Name: t_project_approve_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_project_approve_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_project_approve_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_project_approve_id_seq OWNED BY public.t_project_approve.id;
+
+
+--
+-- Name: t_project_construction; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_project_construction (
+ id integer NOT NULL,
+ project integer NOT NULL,
+ construction integer NOT NULL
+);
+
+
+--
+-- Name: t_project_construction_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_project_construction_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_project_construction_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_project_construction_id_seq OWNED BY public.t_project_construction.id;
+
+
+--
+-- Name: t_project_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_project_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_project_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_project_id_seq OWNED BY public.t_project.id;
+
+
+--
+-- Name: t_project_structure; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_project_structure (
+ id integer NOT NULL,
+ project integer NOT NULL,
+ structure integer NOT NULL
+);
+
+
+--
+-- Name: t_project_structure_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_project_structure_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_project_structure_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_project_structure_id_seq OWNED BY public.t_project_structure.id;
+
+
+--
+-- Name: t_project_structuregroup; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_project_structuregroup (
+ id integer NOT NULL,
+ project integer NOT NULL,
+ structuregroup integer NOT NULL
+);
+
+
+--
+-- Name: t_project_structuregroup_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_project_structuregroup_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_project_structuregroup_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_project_structuregroup_id_seq OWNED BY public.t_project_structuregroup.id;
+
+
+--
+-- Name: t_project_type; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_project_type (
+ id integer NOT NULL,
+ type_name character varying(20) NOT NULL,
+ description character varying(20) NOT NULL
+);
+
+
+--
+-- Name: t_rational; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_rational (
+ id integer NOT NULL,
+ sensor integer,
+ item integer,
+ lower numeric(12,5),
+ upper numeric(12,5),
+ enabled boolean DEFAULT true NOT NULL
+);
+
+
+--
+-- Name: t_rational_device; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_rational_device (
+ id integer NOT NULL,
+ iota_device_id uuid NOT NULL,
+ item integer,
+ lower numeric(12,5),
+ upper numeric(12,5),
+ enabled boolean DEFAULT true NOT NULL
+);
+
+
+--
+-- Name: t_rational_filter; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_rational_filter (
+ id integer NOT NULL,
+ sensor integer NOT NULL,
+ item integer NOT NULL,
+ rationallower numeric(10,4) NOT NULL,
+ rationalupper numeric(10,4) NOT NULL,
+ enabled boolean NOT NULL
+);
+
+
+--
+-- Name: t_rational_filter_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_rational_filter_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_rational_filter_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_rational_filter_id_seq OWNED BY public.t_rational_filter.id;
+
+
+--
+-- Name: t_recalc_product_formula; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_recalc_product_formula (
+ id integer NOT NULL,
+ iota_product_code uuid NOT NULL,
+ iota_product_formula uuid,
+ formula integer NOT NULL,
+ fields jsonb NOT NULL
+);
+
+
+--
+-- Name: t_relay_proxy; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_relay_proxy (
+ name character varying(255) NOT NULL,
+ in_mode character varying(20) NOT NULL,
+ out_mode character varying(20) NOT NULL,
+ in_config jsonb NOT NULL,
+ out_config jsonb NOT NULL
+);
+
+
+--
+-- Name: t_report_generate; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_report_generate (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ structure integer NOT NULL,
+ report_type integer NOT NULL,
+ template_cfg jsonb NOT NULL,
+ "interval" character varying(50) NOT NULL,
+ confirm boolean NOT NULL,
+ enabled boolean NOT NULL,
+ manual_monitoring boolean DEFAULT false,
+ agg_config jsonb,
+ doc_type character varying(10) DEFAULT 'excel'::character varying
+);
+
+
+--
+-- Name: t_report_generate_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_report_generate_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_report_generate_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_report_generate_id_seq OWNED BY public.t_report_generate.id;
+
+
+--
+-- Name: t_report_template; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_report_template (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ description character varying(100),
+ handler character varying(50) NOT NULL,
+ file_link character varying(512) NOT NULL,
+ factor_proto character varying(30),
+ structure integer,
+ report_type integer NOT NULL,
+ manual boolean DEFAULT false,
+ cells jsonb,
+ struct_type integer[] DEFAULT '{}'::integer[] NOT NULL,
+ structs integer[] DEFAULT '{}'::integer[],
+ params jsonb
+);
+
+
+--
+-- Name: t_report_template_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_report_template_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_report_template_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_report_template_id_seq OWNED BY public.t_report_template.id;
+
+
+--
+-- Name: t_resource; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_resource (
+ code character varying(50) NOT NULL,
+ name character varying(50) NOT NULL,
+ description character varying(100),
+ type integer,
+ parent_resource character varying(50)
+);
+
+
+--
+-- Name: t_role; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_role (
+ id integer NOT NULL,
+ dep integer NOT NULL,
+ name character varying(50) NOT NULL,
+ portal character varying(2) DEFAULT 'AC'::character varying NOT NULL,
+ description character varying(100),
+ type boolean DEFAULT false NOT NULL
+);
+
+
+--
+-- Name: COLUMN t_role.type; Type: COMMENT; Schema: public; Owner: -
+--
+
+COMMENT ON COLUMN public.t_role.type IS '职位类型:true为管理员,false为非管理员职位';
+
+
+--
+-- Name: t_role_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_role_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_role_id_seq OWNED BY public.t_role.id;
+
+
+--
+-- Name: t_role_resource; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_role_resource (
+ id integer NOT NULL,
+ role integer NOT NULL,
+ resource character varying(50) NOT NULL
+);
+
+
+--
+-- Name: t_role_resource_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_role_resource_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_role_resource_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_role_resource_id_seq OWNED BY public.t_role_resource.id;
+
+
+--
+-- Name: t_sensor; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_sensor (
+ id integer NOT NULL,
+ structure integer NOT NULL,
+ name character varying(50) NOT NULL,
+ factor integer NOT NULL,
+ portrait character varying(512),
+ labels character varying(100)[],
+ manual_data boolean DEFAULT false NOT NULL,
+ extras jsonb
+);
+
+
+--
+-- Name: t_sensor_factor_threshold; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_sensor_factor_threshold (
+ id integer NOT NULL,
+ batch_no character varying(100),
+ sensor integer,
+ item integer,
+ level integer,
+ lower numeric(12,5),
+ upper numeric(12,5),
+ start_hour integer,
+ end_hour integer,
+ description character varying(100)
+);
+
+
+--
+-- Name: t_sensor_factor_threshold_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_sensor_factor_threshold_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_sensor_factor_threshold_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_sensor_factor_threshold_id_seq OWNED BY public.t_sensor_factor_threshold.id;
+
+
+--
+-- Name: t_sensor_filter_config; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_sensor_filter_config (
+ id integer NOT NULL,
+ sensor integer NOT NULL,
+ item integer NOT NULL,
+ method integer NOT NULL,
+ params_value jsonb NOT NULL,
+ enabled boolean NOT NULL,
+ update_time timestamp with time zone
+);
+
+
+--
+-- Name: t_sensor_filter_config_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_sensor_filter_config_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_sensor_filter_config_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_sensor_filter_config_id_seq OWNED BY public.t_sensor_filter_config.id;
+
+
+--
+-- Name: t_sensor_formula; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_sensor_formula (
+ id integer NOT NULL,
+ sensor integer NOT NULL,
+ formula integer NOT NULL,
+ params_value jsonb NOT NULL
+);
+
+
+--
+-- Name: t_sensor_formula_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_sensor_formula_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_sensor_formula_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_sensor_formula_id_seq OWNED BY public.t_sensor_formula.id;
+
+
+--
+-- Name: t_sensor_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_sensor_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_sensor_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_sensor_id_seq OWNED BY public.t_sensor.id;
+
+
+--
+-- Name: t_sensor_layout; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_sensor_layout (
+ id integer NOT NULL,
+ sensor integer,
+ model integer NOT NULL,
+ "position" jsonb,
+ modal_layout integer
+);
+
+
+--
+-- Name: t_sensor_layout_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_sensor_layout_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_sensor_layout_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_sensor_layout_id_seq OWNED BY public.t_sensor_layout.id;
+
+
+--
+-- Name: t_structure; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_structure (
+ id integer NOT NULL,
+ iota_thing_id uuid NOT NULL,
+ structure_type integer NOT NULL,
+ name character varying(50),
+ description character varying(100),
+ region_path character varying(100),
+ longitude numeric(20,14),
+ latitude numeric(20,14),
+ address character varying(100),
+ portrait character varying(512),
+ extra_info jsonb,
+ org integer NOT NULL,
+ create_time timestamp with time zone DEFAULT now() NOT NULL
+);
+
+
+--
+-- Name: t_structure_component; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_structure_component (
+ id integer NOT NULL,
+ structtypeid integer NOT NULL,
+ componentid integer NOT NULL
+);
+
+
+--
+-- Name: t_structure_component_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_structure_component_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_structure_component_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_structure_component_id_seq OWNED BY public.t_structure_component.id;
+
+
+--
+-- Name: t_structure_factor; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_structure_factor (
+ id integer NOT NULL,
+ structure integer NOT NULL,
+ factor integer NOT NULL,
+ alias_name character varying(50)
+);
+
+
+--
+-- Name: t_structure_factor_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_structure_factor_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_structure_factor_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_structure_factor_id_seq OWNED BY public.t_structure_factor.id;
+
+
+--
+-- Name: t_structure_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_structure_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_structure_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_structure_id_seq OWNED BY public.t_structure.id;
+
+
+--
+-- Name: t_structure_site; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_structure_site (
+ id integer NOT NULL,
+ structid integer NOT NULL,
+ siteid integer NOT NULL
+);
+
+
+--
+-- Name: t_structure_site_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_structure_site_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_structure_site_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_structure_site_id_seq OWNED BY public.t_structure_site.id;
+
+
+--
+-- Name: t_structure_type; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_structure_type (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ description character varying(100),
+ parent_type integer NOT NULL,
+ portrait character varying(512)
+);
+
+
+--
+-- Name: t_structure_type_factor; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_structure_type_factor (
+ id integer NOT NULL,
+ structure_type integer NOT NULL,
+ factor integer NOT NULL
+);
+
+
+--
+-- Name: t_structure_type_factor_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_structure_type_factor_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_structure_type_factor_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_structure_type_factor_id_seq OWNED BY public.t_structure_type_factor.id;
+
+
+--
+-- Name: t_structure_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_structure_type_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_structure_type_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_structure_type_id_seq OWNED BY public.t_structure_type.id;
+
+
+--
+-- Name: t_structuregroup; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_structuregroup (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ extras jsonb
+);
+
+
+--
+-- Name: t_structuregroup_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_structuregroup_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_structuregroup_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_structuregroup_id_seq OWNED BY public.t_structuregroup.id;
+
+
+--
+-- Name: t_structuregroup_structure; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_structuregroup_structure (
+ id integer NOT NULL,
+ structuregroup integer NOT NULL,
+ structure integer NOT NULL
+);
+
+
+--
+-- Name: t_structuregroup_structure_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_structuregroup_structure_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_structuregroup_structure_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_structuregroup_structure_id_seq OWNED BY public.t_structuregroup_structure.id;
+
+
+--
+-- Name: t_task_recalculate; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_task_recalculate (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ emit_user integer NOT NULL,
+ station_id integer NOT NULL,
+ data_begin_time timestamp with time zone NOT NULL,
+ data_end_time timestamp with time zone NOT NULL,
+ task_begin_time timestamp with time zone,
+ task_end_time timestamp with time zone,
+ task_state integer NOT NULL,
+ task_result jsonb,
+ msg_id uuid NOT NULL
+);
+
+
+--
+-- Name: t_task_recalculate_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_task_recalculate_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_task_recalculate_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_task_recalculate_id_seq OWNED BY public.t_task_recalculate.id;
+
+
+--
+-- Name: t_type_alarm_source; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_type_alarm_source (
+ id integer NOT NULL,
+ name character varying(50),
+ description character varying(100)
+);
+
+
+--
+-- Name: t_type_alarm_state; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_type_alarm_state (
+ id integer NOT NULL,
+ name character varying(50),
+ description character varying(100)
+);
+
+
+--
+-- Name: t_type_event_index; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_type_event_index (
+ id integer NOT NULL,
+ name character varying(10) NOT NULL,
+ description character varying(20)
+);
+
+
+--
+-- Name: t_type_event_index_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_type_event_index_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_type_event_index_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_type_event_index_id_seq OWNED BY public.t_type_event_index.id;
+
+
+--
+-- Name: t_type_file_type; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_type_file_type (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL
+);
+
+
+--
+-- Name: t_type_institution_role; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_type_institution_role (
+ id integer NOT NULL,
+ name character varying(50),
+ description character varying(100)
+);
+
+
+--
+-- Name: t_type_org_type; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_type_org_type (
+ id integer NOT NULL,
+ name character varying(50),
+ description character varying(100)
+);
+
+
+--
+-- Name: t_type_project_state; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_type_project_state (
+ id integer NOT NULL,
+ name character varying(50),
+ description character varying(100)
+);
+
+
+--
+-- Name: t_type_report_state; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_type_report_state (
+ id integer NOT NULL,
+ name character varying(50),
+ description character varying(100)
+);
+
+
+--
+-- Name: t_type_report_type; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_type_report_type (
+ id integer NOT NULL,
+ name character varying(50),
+ description character varying(100)
+);
+
+
+--
+-- Name: t_type_role_type; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_type_role_type (
+ code character varying(2) NOT NULL,
+ description character varying(20) NOT NULL
+);
+
+
+--
+-- Name: t_units; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_units (
+ name character varying(20) NOT NULL,
+ dimension character varying(20),
+ description character varying(255),
+ coef numeric(32,16),
+ base boolean DEFAULT false NOT NULL,
+ alternative character varying(255)
+);
+
+
+--
+-- Name: t_upload_comm_http; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_upload_comm_http (
+ id integer NOT NULL,
+ content json NOT NULL,
+ enable boolean DEFAULT true NOT NULL,
+ description character varying(255)
+);
+
+
+--
+-- Name: TABLE t_upload_comm_http; Type: COMMENT; Schema: public; Owner: -
+--
+
+COMMENT ON TABLE public.t_upload_comm_http IS 'ET数据上报消费者(upload)普通HTTP上报类配置表';
+
+
+--
+-- Name: t_upload_comm_http_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_upload_comm_http_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_upload_comm_http_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_upload_comm_http_id_seq OWNED BY public.t_upload_comm_http.id;
+
+
+--
+-- Name: t_upload_params; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_upload_params (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ params jsonb,
+ description character varying(255)
+);
+
+
+--
+-- Name: t_upload_params_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_upload_params_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_upload_params_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_upload_params_id_seq OWNED BY public.t_upload_params.id;
+
+
+--
+-- Name: t_user; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_user (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ name_present character varying(50),
+ password character varying(256),
+ phone character varying(50),
+ email character varying(50),
+ avator character varying(512),
+ org integer NOT NULL,
+ role integer NOT NULL,
+ register_time timestamp with time zone,
+ mail_notice boolean DEFAULT false NOT NULL,
+ sms_notice boolean DEFAULT false NOT NULL,
+ no_disturb boolean DEFAULT false NOT NULL,
+ enabled boolean NOT NULL,
+ open_id character varying(50),
+ nick_name character varying(50),
+ wx_notice boolean DEFAULT false NOT NULL,
+ union_id character varying(50),
+ institution_role character varying(50) DEFAULT NULL::character varying
+);
+
+
+--
+-- Name: t_user_favorite; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_user_favorite (
+ id integer NOT NULL,
+ user_id integer NOT NULL,
+ file_type integer NOT NULL,
+ path integer NOT NULL
+);
+
+
+--
+-- Name: t_user_favorite_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_user_favorite_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_user_favorite_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_user_favorite_id_seq OWNED BY public.t_user_favorite.id;
+
+
+--
+-- Name: t_user_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_user_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_user_id_seq OWNED BY public.t_user.id;
+
+
+--
+-- Name: t_user_token; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_user_token (
+ token uuid NOT NULL,
+ user_info jsonb NOT NULL,
+ expired timestamp with time zone NOT NULL
+);
+
+
+--
+-- Name: t_vehicle_overload; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_vehicle_overload (
+ id integer NOT NULL,
+ axis_num character varying(100) NOT NULL,
+ overload_standard numeric(18,6) NOT NULL,
+ over_heigth numeric(18,6) NOT NULL,
+ over_len numeric(18,6) NOT NULL,
+ overwidth numeric(18,6) NOT NULL
+);
+
+
+--
+-- Name: t_vehicle_overload_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_vehicle_overload_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_vehicle_overload_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_vehicle_overload_id_seq OWNED BY public.t_vehicle_overload.id;
+
+
+--
+-- Name: t_video_ipc; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_video_ipc (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ channel_no integer,
+ push_server integer,
+ nvr integer,
+ structure integer NOT NULL,
+ has_ptz boolean DEFAULT false NOT NULL,
+ longitude numeric(20,14),
+ latitude numeric(20,14),
+ type character varying(10) DEFAULT 'original'::character varying NOT NULL,
+ uid character varying(255),
+ username character varying(255),
+ password character varying(255),
+ serial_no character varying(50),
+ rtmp_address character varying(255),
+ hls_address character varying(255)
+);
+
+
+--
+-- Name: t_video_ipc_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_video_ipc_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_video_ipc_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_video_ipc_id_seq OWNED BY public.t_video_ipc.id;
+
+
+--
+-- Name: t_video_ipc_station; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_video_ipc_station (
+ id integer NOT NULL,
+ ipc integer NOT NULL,
+ station integer NOT NULL
+);
+
+
+--
+-- Name: t_video_ipc_station_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_video_ipc_station_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_video_ipc_station_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_video_ipc_station_id_seq OWNED BY public.t_video_ipc_station.id;
+
+
+--
+-- Name: t_video_nvr; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_video_nvr (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ ip character varying(50) NOT NULL,
+ port integer NOT NULL,
+ username character varying(50) NOT NULL,
+ password character varying(50) NOT NULL,
+ channels_total integer NOT NULL,
+ vendor integer NOT NULL,
+ structure integer NOT NULL
+);
+
+
+--
+-- Name: t_video_nvr_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_video_nvr_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_video_nvr_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_video_nvr_id_seq OWNED BY public.t_video_nvr.id;
+
+
+--
+-- Name: t_video_nvr_vendor; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_video_nvr_vendor (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ enabled boolean DEFAULT false NOT NULL
+);
+
+
+--
+-- Name: t_video_nvr_vendor_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_video_nvr_vendor_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_video_nvr_vendor_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_video_nvr_vendor_id_seq OWNED BY public.t_video_nvr_vendor.id;
+
+
+--
+-- Name: t_video_push_server; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_video_push_server (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ ip character varying(15) NOT NULL,
+ port integer NOT NULL
+);
+
+
+--
+-- Name: t_video_push_server_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_video_push_server_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_video_push_server_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_video_push_server_id_seq OWNED BY public.t_video_push_server.id;
+
+
+--
+-- Name: t_weather_history; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_weather_history (
+ id integer NOT NULL,
+ "structId" integer NOT NULL,
+ weather character varying(20) NOT NULL,
+ date date NOT NULL
+);
+
+
+--
+-- Name: t_weather_history_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_weather_history_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_weather_history_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_weather_history_id_seq OWNED BY public.t_weather_history.id;
+
+
+--
+-- Name: t_workflow_business; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_workflow_business (
+ id integer NOT NULL,
+ procdef_key character varying(100) NOT NULL,
+ procdef_id character varying(100) NOT NULL,
+ procinst_id integer,
+ created_by character varying(50) NOT NULL,
+ created_at timestamp with time zone DEFAULT now() NOT NULL
+);
+
+
+--
+-- Name: COLUMN t_workflow_business.created_by; Type: COMMENT; Schema: public; Owner: -
+--
+
+COMMENT ON COLUMN public.t_workflow_business.created_by IS '创建人';
+
+
+--
+-- Name: COLUMN t_workflow_business.created_at; Type: COMMENT; Schema: public; Owner: -
+--
+
+COMMENT ON COLUMN public.t_workflow_business.created_at IS '创建时间';
+
+
+--
+-- Name: t_workflow_business_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_workflow_business_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_workflow_business_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_workflow_business_id_seq OWNED BY public.t_workflow_business.id;
+
+
+--
+-- Name: t_workflow_form_proto; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_workflow_form_proto (
+ id integer NOT NULL,
+ name character varying(100) NOT NULL,
+ form_metas jsonb NOT NULL,
+ procdef_key character varying(100) NOT NULL,
+ procdef_id character varying(100) NOT NULL,
+ actdef_key character varying(100) NOT NULL,
+ belongto_startevent boolean DEFAULT false NOT NULL
+);
+
+
+--
+-- Name: t_workflow_form_proto_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_workflow_form_proto_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_workflow_form_proto_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_workflow_form_proto_id_seq OWNED BY public.t_workflow_form_proto.id;
+
+
+--
+-- Name: t_wx_bind_result; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_wx_bind_result (
+ id integer NOT NULL,
+ user_id integer NOT NULL,
+ open_id character varying(100) NOT NULL,
+ union_id character varying(100) NOT NULL,
+ result boolean NOT NULL,
+ error character varying(255),
+ "time" timestamp with time zone NOT NULL
+);
+
+
+--
+-- Name: t_wx_bind_result_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.t_wx_bind_result_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: t_wx_bind_result_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.t_wx_bind_result_id_seq OWNED BY public.t_wx_bind_result.id;
+
+
+--
+-- Name: t_wx_subscribe; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.t_wx_subscribe (
+ open_id character varying(50) NOT NULL,
+ union_id character varying(50) NOT NULL
+);
+
+
+--
+-- Name: tmp_role_resource; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.tmp_role_resource (
+ role integer,
+ resource character varying(50)
+);
+
+
+--
+-- Name: t_abn_report_params id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_abn_report_params ALTER COLUMN id SET DEFAULT nextval('public.t_abn_report_params_id_seq'::regclass);
+
+
+--
+-- Name: t_abn_report_push_strategy id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_abn_report_push_strategy ALTER COLUMN id SET DEFAULT nextval('public.t_abn_report_push_strategy_id_seq'::regclass);
+
+
+--
+-- Name: t_agg_config id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_agg_config ALTER COLUMN id SET DEFAULT nextval('public.t_agg_config_id_seq'::regclass);
+
+
+--
+-- Name: t_agg_threshold_config id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_agg_threshold_config ALTER COLUMN id SET DEFAULT nextval('public.t_agg_threshold_config_id_seq'::regclass);
+
+
+--
+-- Name: t_alarm id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm ALTER COLUMN id SET DEFAULT nextval('public.t_alarm_id_seq'::regclass);
+
+
+--
+-- Name: t_alarm_category id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_category ALTER COLUMN id SET DEFAULT nextval('public.t_alarm_category_id_seq'::regclass);
+
+
+--
+-- Name: t_alarm_code id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_code ALTER COLUMN id SET DEFAULT nextval('public.t_alarm_code_id_seq'::regclass);
+
+
+--
+-- Name: t_alarm_custom_message id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_custom_message ALTER COLUMN id SET DEFAULT nextval('public.t_alarm_custom_message_id_seq'::regclass);
+
+
+--
+-- Name: t_alarm_deal id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_deal ALTER COLUMN id SET DEFAULT nextval('public.t_alarm_deal_id_seq'::regclass);
+
+
+--
+-- Name: t_alarm_detail id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_detail ALTER COLUMN id SET DEFAULT nextval('public.t_alarm_detail_id_seq'::regclass);
+
+
+--
+-- Name: t_alarm_policy id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_policy ALTER COLUMN id SET DEFAULT nextval('public.t_alarm_policy_id_seq'::regclass);
+
+
+--
+-- Name: t_alarm_type id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_type ALTER COLUMN id SET DEFAULT nextval('public.t_alarm_type_id_seq'::regclass);
+
+
+--
+-- Name: t_api_log id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_api_log ALTER COLUMN id SET DEFAULT nextval('public.t_api_log_id_seq'::regclass);
+
+
+--
+-- Name: t_app_message id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_app_message ALTER COLUMN id SET DEFAULT nextval('public.t_app_message_id_seq'::regclass);
+
+
+--
+-- Name: t_apply id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_apply ALTER COLUMN id SET DEFAULT nextval('public.t_apply_id_seq'::regclass);
+
+
+--
+-- Name: t_averagerainfall id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_averagerainfall ALTER COLUMN id SET DEFAULT nextval('public.t_averagerainfall_id_seq'::regclass);
+
+
+--
+-- Name: t_bim_rendering_path id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_bim_rendering_path ALTER COLUMN id SET DEFAULT nextval('public.t_bim_rendering_path_id_seq'::regclass);
+
+
+--
+-- Name: t_bim_stations id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_bim_stations ALTER COLUMN id SET DEFAULT nextval('public.t_bim_stations_id_seq'::regclass);
+
+
+--
+-- Name: t_calendar id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_calendar ALTER COLUMN id SET DEFAULT nextval('public.t_calendar_id_seq'::regclass);
+
+
+--
+-- Name: t_calendar_type id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_calendar_type ALTER COLUMN id SET DEFAULT nextval('public.t_calendar_type_id_seq'::regclass);
+
+
+--
+-- Name: t_component id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_component ALTER COLUMN id SET DEFAULT nextval('public.t_component_id_seq'::regclass);
+
+
+--
+-- Name: t_construction id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_construction ALTER COLUMN id SET DEFAULT nextval('public.t_construction_id_seq'::regclass);
+
+
+--
+-- Name: t_data_original id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_data_original ALTER COLUMN id SET DEFAULT nextval('public.t_data_original_id_seq'::regclass);
+
+
+--
+-- Name: t_data_sensor_latest id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_data_sensor_latest ALTER COLUMN id SET DEFAULT nextval('public.t_data_sensor_latest_id_seq'::regclass);
+
+
+--
+-- Name: t_debug_history id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_debug_history ALTER COLUMN id SET DEFAULT nextval('public.t_debug_history_id_seq'::regclass);
+
+
+--
+-- Name: t_department id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_department ALTER COLUMN id SET DEFAULT nextval('public.t_department_id_seq'::regclass);
+
+
+--
+-- Name: t_department_structure id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_department_structure ALTER COLUMN id SET DEFAULT nextval('public.t_department_structure_id_seq'::regclass);
+
+
+--
+-- Name: t_device_sensor id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_device_sensor ALTER COLUMN id SET DEFAULT nextval('public.t_device_sensor_id_seq'::regclass);
+
+
+--
+-- Name: t_dyna_glt_config id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_dyna_glt_config ALTER COLUMN id SET DEFAULT nextval('public.t_dyna_glt_config_id_seq'::regclass);
+
+
+--
+-- Name: t_event_config id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_event_config ALTER COLUMN id SET DEFAULT nextval('public.t_event_config_id_seq'::regclass);
+
+
+--
+-- Name: t_factor id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor ALTER COLUMN id SET DEFAULT nextval('public.t_factor_id_seq'::regclass);
+
+
+--
+-- Name: t_factor_proto_device id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor_proto_device ALTER COLUMN id SET DEFAULT nextval('public.t_factor_proto_device_id_seq'::regclass);
+
+
+--
+-- Name: t_factor_proto_item id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor_proto_item ALTER COLUMN id SET DEFAULT nextval('public.t_factor_proto_item_id_seq'::regclass);
+
+
+--
+-- Name: t_factor_template id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor_template ALTER COLUMN id SET DEFAULT nextval('public.t_factor_template_id_seq'::regclass);
+
+
+--
+-- Name: t_factor_template_factor id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor_template_factor ALTER COLUMN id SET DEFAULT nextval('public.t_factor_template_factor_id_seq'::regclass);
+
+
+--
+-- Name: t_filter_enviroment_config id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_filter_enviroment_config ALTER COLUMN id SET DEFAULT nextval('public.t_filter_enviroment_config_id_seq'::regclass);
+
+
+--
+-- Name: t_filter_method id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_filter_method ALTER COLUMN id SET DEFAULT nextval('public.t_filter_method_id_seq'::regclass);
+
+
+--
+-- Name: t_formula id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_formula ALTER COLUMN id SET DEFAULT nextval('public.t_formula_id_seq'::regclass);
+
+
+--
+-- Name: t_formula_params_ex id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_formula_params_ex ALTER COLUMN id SET DEFAULT nextval('public.t_formula_params_ex_id_seq'::regclass);
+
+
+--
+-- Name: t_group id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_group ALTER COLUMN id SET DEFAULT nextval('public.t_group_id_seq'::regclass);
+
+
+--
+-- Name: t_group_sensor id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_group_sensor ALTER COLUMN id SET DEFAULT nextval('public.t_group_sensor_id_seq'::regclass);
+
+
+--
+-- Name: t_group_type_factor id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_group_type_factor ALTER COLUMN id SET DEFAULT nextval('public.t_group_type_factor_id_seq'::regclass);
+
+
+--
+-- Name: t_institution id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_institution ALTER COLUMN id SET DEFAULT nextval('public.t_institution_id_seq'::regclass);
+
+
+--
+-- Name: t_item_unit id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_item_unit ALTER COLUMN id SET DEFAULT nextval('public.t_item_unit_id_seq'::regclass);
+
+
+--
+-- Name: t_layout_model id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_layout_model ALTER COLUMN id SET DEFAULT nextval('public.t_layout_model_id_seq'::regclass);
+
+
+--
+-- Name: t_message id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_message ALTER COLUMN id SET DEFAULT nextval('public.t_message_id_seq'::regclass);
+
+
+--
+-- Name: t_netdisk_file id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_netdisk_file ALTER COLUMN id SET DEFAULT nextval('public.t_netdisk_file_id_seq'::regclass);
+
+
+--
+-- Name: t_organization id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_organization ALTER COLUMN id SET DEFAULT nextval('public.t_organization_id_seq'::regclass);
+
+
+--
+-- Name: t_organization_project id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_organization_project ALTER COLUMN id SET DEFAULT nextval('public.t_organization_project_id_seq'::regclass);
+
+
+--
+-- Name: t_phone_validate_code id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_phone_validate_code ALTER COLUMN id SET DEFAULT nextval('public.t_phone_validate_code_id_seq'::regclass);
+
+
+--
+-- Name: t_project id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project ALTER COLUMN id SET DEFAULT nextval('public.t_project_id_seq'::regclass);
+
+
+--
+-- Name: t_project_approve id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project_approve ALTER COLUMN id SET DEFAULT nextval('public.t_project_approve_id_seq'::regclass);
+
+
+--
+-- Name: t_project_construction id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project_construction ALTER COLUMN id SET DEFAULT nextval('public.t_project_construction_id_seq'::regclass);
+
+
+--
+-- Name: t_project_structure id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project_structure ALTER COLUMN id SET DEFAULT nextval('public.t_project_structure_id_seq'::regclass);
+
+
+--
+-- Name: t_project_structuregroup id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project_structuregroup ALTER COLUMN id SET DEFAULT nextval('public.t_project_structuregroup_id_seq'::regclass);
+
+
+--
+-- Name: t_rational_filter id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_rational_filter ALTER COLUMN id SET DEFAULT nextval('public.t_rational_filter_id_seq'::regclass);
+
+
+--
+-- Name: t_report_generate id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_report_generate ALTER COLUMN id SET DEFAULT nextval('public.t_report_generate_id_seq'::regclass);
+
+
+--
+-- Name: t_report_template id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_report_template ALTER COLUMN id SET DEFAULT nextval('public.t_report_template_id_seq'::regclass);
+
+
+--
+-- Name: t_role id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_role ALTER COLUMN id SET DEFAULT nextval('public.t_role_id_seq'::regclass);
+
+
+--
+-- Name: t_role_resource id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_role_resource ALTER COLUMN id SET DEFAULT nextval('public.t_role_resource_id_seq'::regclass);
+
+
+--
+-- Name: t_sensor id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor ALTER COLUMN id SET DEFAULT nextval('public.t_sensor_id_seq'::regclass);
+
+
+--
+-- Name: t_sensor_factor_threshold id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_factor_threshold ALTER COLUMN id SET DEFAULT nextval('public.t_sensor_factor_threshold_id_seq'::regclass);
+
+
+--
+-- Name: t_sensor_filter_config id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_filter_config ALTER COLUMN id SET DEFAULT nextval('public.t_sensor_filter_config_id_seq'::regclass);
+
+
+--
+-- Name: t_sensor_formula id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_formula ALTER COLUMN id SET DEFAULT nextval('public.t_sensor_formula_id_seq'::regclass);
+
+
+--
+-- Name: t_sensor_layout id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_layout ALTER COLUMN id SET DEFAULT nextval('public.t_sensor_layout_id_seq'::regclass);
+
+
+--
+-- Name: t_structure id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure ALTER COLUMN id SET DEFAULT nextval('public.t_structure_id_seq'::regclass);
+
+
+--
+-- Name: t_structure_component id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure_component ALTER COLUMN id SET DEFAULT nextval('public.t_structure_component_id_seq'::regclass);
+
+
+--
+-- Name: t_structure_factor id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure_factor ALTER COLUMN id SET DEFAULT nextval('public.t_structure_factor_id_seq'::regclass);
+
+
+--
+-- Name: t_structure_site id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure_site ALTER COLUMN id SET DEFAULT nextval('public.t_structure_site_id_seq'::regclass);
+
+
+--
+-- Name: t_structure_type id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure_type ALTER COLUMN id SET DEFAULT nextval('public.t_structure_type_id_seq'::regclass);
+
+
+--
+-- Name: t_structure_type_factor id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure_type_factor ALTER COLUMN id SET DEFAULT nextval('public.t_structure_type_factor_id_seq'::regclass);
+
+
+--
+-- Name: t_structuregroup id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structuregroup ALTER COLUMN id SET DEFAULT nextval('public.t_structuregroup_id_seq'::regclass);
+
+
+--
+-- Name: t_structuregroup_structure id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structuregroup_structure ALTER COLUMN id SET DEFAULT nextval('public.t_structuregroup_structure_id_seq'::regclass);
+
+
+--
+-- Name: t_task_recalculate id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_task_recalculate ALTER COLUMN id SET DEFAULT nextval('public.t_task_recalculate_id_seq'::regclass);
+
+
+--
+-- Name: t_type_event_index id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_type_event_index ALTER COLUMN id SET DEFAULT nextval('public.t_type_event_index_id_seq'::regclass);
+
+
+--
+-- Name: t_upload_comm_http id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_upload_comm_http ALTER COLUMN id SET DEFAULT nextval('public.t_upload_comm_http_id_seq'::regclass);
+
+
+--
+-- Name: t_upload_params id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_upload_params ALTER COLUMN id SET DEFAULT nextval('public.t_upload_params_id_seq'::regclass);
+
+
+--
+-- Name: t_user id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_user ALTER COLUMN id SET DEFAULT nextval('public.t_user_id_seq'::regclass);
+
+
+--
+-- Name: t_user_favorite id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_user_favorite ALTER COLUMN id SET DEFAULT nextval('public.t_user_favorite_id_seq'::regclass);
+
+
+--
+-- Name: t_vehicle_overload id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_vehicle_overload ALTER COLUMN id SET DEFAULT nextval('public.t_vehicle_overload_id_seq'::regclass);
+
+
+--
+-- Name: t_video_ipc id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_ipc ALTER COLUMN id SET DEFAULT nextval('public.t_video_ipc_id_seq'::regclass);
+
+
+--
+-- Name: t_video_ipc_station id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_ipc_station ALTER COLUMN id SET DEFAULT nextval('public.t_video_ipc_station_id_seq'::regclass);
+
+
+--
+-- Name: t_video_nvr id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_nvr ALTER COLUMN id SET DEFAULT nextval('public.t_video_nvr_id_seq'::regclass);
+
+
+--
+-- Name: t_video_nvr_vendor id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_nvr_vendor ALTER COLUMN id SET DEFAULT nextval('public.t_video_nvr_vendor_id_seq'::regclass);
+
+
+--
+-- Name: t_video_push_server id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_push_server ALTER COLUMN id SET DEFAULT nextval('public.t_video_push_server_id_seq'::regclass);
+
+
+--
+-- Name: t_weather_history id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_weather_history ALTER COLUMN id SET DEFAULT nextval('public.t_weather_history_id_seq'::regclass);
+
+
+--
+-- Name: t_workflow_business id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_workflow_business ALTER COLUMN id SET DEFAULT nextval('public.t_workflow_business_id_seq'::regclass);
+
+
+--
+-- Name: t_workflow_form_proto id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_workflow_form_proto ALTER COLUMN id SET DEFAULT nextval('public.t_workflow_form_proto_id_seq'::regclass);
+
+
+--
+-- Name: t_wx_bind_result id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_wx_bind_result ALTER COLUMN id SET DEFAULT nextval('public.t_wx_bind_result_id_seq'::regclass);
+
+
+--
+-- Name: t_abn_report_params t_abn_report_params_id_pk; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_abn_report_params
+ ADD CONSTRAINT t_abn_report_params_id_pk PRIMARY KEY (id);
+
+
+--
+-- Name: t_abn_report_push_strategy t_abn_report_push_strategy_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_abn_report_push_strategy
+ ADD CONSTRAINT t_abn_report_push_strategy_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_abn_type t_abn_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_abn_type
+ ADD CONSTRAINT t_abn_type_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_agg_config t_agg_config_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_agg_config
+ ADD CONSTRAINT t_agg_config_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_agg_threshold_config t_agg_threshold_config_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_agg_threshold_config
+ ADD CONSTRAINT t_agg_threshold_config_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_agg_type t_agg_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_agg_type
+ ADD CONSTRAINT t_agg_type_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_alarm_category t_alarm_category_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_category
+ ADD CONSTRAINT t_alarm_category_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_alarm_code t_alarm_code_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_code
+ ADD CONSTRAINT t_alarm_code_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_alarm_custom_message t_alarm_custom_message_pk; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_custom_message
+ ADD CONSTRAINT t_alarm_custom_message_pk PRIMARY KEY (id);
+
+
+--
+-- Name: t_alarm_deal t_alarm_deal_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_deal
+ ADD CONSTRAINT t_alarm_deal_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_alarm_detail t_alarm_detail_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_detail
+ ADD CONSTRAINT t_alarm_detail_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_alarm t_alarm_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm
+ ADD CONSTRAINT t_alarm_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_alarm_policy t_alarm_policy_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_policy
+ ADD CONSTRAINT t_alarm_policy_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_alarm_type t_alarm_type_code_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_type
+ ADD CONSTRAINT t_alarm_type_code_key UNIQUE (code);
+
+
+--
+-- Name: t_alarm_type t_alarm_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_type
+ ADD CONSTRAINT t_alarm_type_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_api_log t_api_log_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_api_log
+ ADD CONSTRAINT t_api_log_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_app_message t_app_message_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_app_message
+ ADD CONSTRAINT t_app_message_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_apply t_apply_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_apply
+ ADD CONSTRAINT t_apply_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_averagerainfall t_averagerainfall_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_averagerainfall
+ ADD CONSTRAINT t_averagerainfall_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_bim_rendering_path t_bim_rendering_path_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_bim_rendering_path
+ ADD CONSTRAINT t_bim_rendering_path_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_bim_stations t_bim_stations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_bim_stations
+ ADD CONSTRAINT t_bim_stations_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_calendar t_calendar_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_calendar
+ ADD CONSTRAINT t_calendar_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_calendar_type t_calendar_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_calendar_type
+ ADD CONSTRAINT t_calendar_type_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_component t_component_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_component
+ ADD CONSTRAINT t_component_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_construction t_construction_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_construction
+ ADD CONSTRAINT t_construction_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_data_original t_data_original_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_data_original
+ ADD CONSTRAINT t_data_original_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_data_sensor_latest t_data_sensor_latest_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_data_sensor_latest
+ ADD CONSTRAINT t_data_sensor_latest_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_data_sensor_latest t_data_sensor_latest_sensor_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_data_sensor_latest
+ ADD CONSTRAINT t_data_sensor_latest_sensor_key UNIQUE (sensor);
+
+
+--
+-- Name: t_debug_history t_debug_history_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_debug_history
+ ADD CONSTRAINT t_debug_history_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_department t_department_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_department
+ ADD CONSTRAINT t_department_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_department_structure t_department_structure_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_department_structure
+ ADD CONSTRAINT t_department_structure_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_device_sensor t_device_sensor_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_device_sensor
+ ADD CONSTRAINT t_device_sensor_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_dyna_glt_config t_dyna_glt_config_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_dyna_glt_config
+ ADD CONSTRAINT t_dyna_glt_config_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_event_config t_event_config_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_event_config
+ ADD CONSTRAINT t_event_config_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_factor t_factor_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor
+ ADD CONSTRAINT t_factor_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_factor_proto_device t_factor_proto_device_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor_proto_device
+ ADD CONSTRAINT t_factor_proto_device_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_factor_proto_item t_factor_proto_item_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor_proto_item
+ ADD CONSTRAINT t_factor_proto_item_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_factor_proto t_factor_proto_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor_proto
+ ADD CONSTRAINT t_factor_proto_pkey PRIMARY KEY (code);
+
+
+--
+-- Name: t_factor_template_factor t_factor_template_factor_id_pk; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor_template_factor
+ ADD CONSTRAINT t_factor_template_factor_id_pk PRIMARY KEY (id);
+
+
+--
+-- Name: t_factor_template t_factor_template_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor_template
+ ADD CONSTRAINT t_factor_template_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_filter_config t_filter_config_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_filter_config
+ ADD CONSTRAINT t_filter_config_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_filter_enviroment_config t_filter_enviroment_config_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_filter_enviroment_config
+ ADD CONSTRAINT t_filter_enviroment_config_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_filter_method t_filter_method_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_filter_method
+ ADD CONSTRAINT t_filter_method_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_formula_params_ex t_formula_params_ex_pk; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_formula_params_ex
+ ADD CONSTRAINT t_formula_params_ex_pk PRIMARY KEY (id);
+
+
+--
+-- Name: t_formula t_formula_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_formula
+ ADD CONSTRAINT t_formula_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_group t_group_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_group
+ ADD CONSTRAINT t_group_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_group_sensor t_group_sensor_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_group_sensor
+ ADD CONSTRAINT t_group_sensor_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_group_type_factor t_group_type_factor_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_group_type_factor
+ ADD CONSTRAINT t_group_type_factor_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_group_type t_group_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_group_type
+ ADD CONSTRAINT t_group_type_pkey PRIMARY KEY (type_code);
+
+
+--
+-- Name: t_institution t_institution_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_institution
+ ADD CONSTRAINT t_institution_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_item_unit t_item_unit_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_item_unit
+ ADD CONSTRAINT t_item_unit_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_layout_model t_layout_model_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_layout_model
+ ADD CONSTRAINT t_layout_model_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_layout_type t_layout_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_layout_type
+ ADD CONSTRAINT t_layout_type_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_message t_message_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_message
+ ADD CONSTRAINT t_message_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_message_type t_message_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_message_type
+ ADD CONSTRAINT t_message_type_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_netdisk_file t_netdisk_file_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_netdisk_file
+ ADD CONSTRAINT t_netdisk_file_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_organization t_organization_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_organization
+ ADD CONSTRAINT t_organization_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_organization_project t_organization_project_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_organization_project
+ ADD CONSTRAINT t_organization_project_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_phone_validate_code t_phone_validate_code_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_phone_validate_code
+ ADD CONSTRAINT t_phone_validate_code_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_project_approve t_project_approve_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project_approve
+ ADD CONSTRAINT t_project_approve_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_project_construction t_project_construction_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project_construction
+ ADD CONSTRAINT t_project_construction_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_project t_project_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project
+ ADD CONSTRAINT t_project_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_project_structure t_project_structure_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project_structure
+ ADD CONSTRAINT t_project_structure_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_project_structuregroup t_project_structuregroup_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project_structuregroup
+ ADD CONSTRAINT t_project_structuregroup_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_rational_device t_rational_device_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_rational_device
+ ADD CONSTRAINT t_rational_device_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_rational_filter t_rational_filter_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_rational_filter
+ ADD CONSTRAINT t_rational_filter_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_rational t_rational_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_rational
+ ADD CONSTRAINT t_rational_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_recalc_product_formula t_recalc_product_formula_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_recalc_product_formula
+ ADD CONSTRAINT t_recalc_product_formula_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_relay_proxy t_relay_proxy_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_relay_proxy
+ ADD CONSTRAINT t_relay_proxy_pkey PRIMARY KEY (name);
+
+
+--
+-- Name: t_report_generate t_report_generate_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_report_generate
+ ADD CONSTRAINT t_report_generate_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_report_template t_report_template_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_report_template
+ ADD CONSTRAINT t_report_template_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_resource t_resource_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_resource
+ ADD CONSTRAINT t_resource_pkey PRIMARY KEY (code);
+
+
+--
+-- Name: t_role t_role_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_role
+ ADD CONSTRAINT t_role_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_role_resource t_role_resource_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_role_resource
+ ADD CONSTRAINT t_role_resource_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_role_resource t_role_resource_role_resource_uindex; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_role_resource
+ ADD CONSTRAINT t_role_resource_role_resource_uindex UNIQUE (role, resource);
+
+
+--
+-- Name: t_sensor_factor_threshold t_sensor_factor_threshold_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_factor_threshold
+ ADD CONSTRAINT t_sensor_factor_threshold_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_sensor_filter_config t_sensor_filter_config_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_filter_config
+ ADD CONSTRAINT t_sensor_filter_config_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_sensor_formula t_sensor_formula_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_formula
+ ADD CONSTRAINT t_sensor_formula_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_sensor_layout t_sensor_layout_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_layout
+ ADD CONSTRAINT t_sensor_layout_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_sensor t_sensor_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor
+ ADD CONSTRAINT t_sensor_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_structure_component t_structure_component_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure_component
+ ADD CONSTRAINT t_structure_component_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_structure_site t_structure_construction_site_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure_site
+ ADD CONSTRAINT t_structure_construction_site_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_structure_factor t_structure_factor_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure_factor
+ ADD CONSTRAINT t_structure_factor_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_structure t_structure_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure
+ ADD CONSTRAINT t_structure_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_structure_type_factor t_structure_type_factor_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure_type_factor
+ ADD CONSTRAINT t_structure_type_factor_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_structure_type t_structure_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure_type
+ ADD CONSTRAINT t_structure_type_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_structuregroup t_structuregroup_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structuregroup
+ ADD CONSTRAINT t_structuregroup_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_structuregroup_structure t_structuregroup_structure_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structuregroup_structure
+ ADD CONSTRAINT t_structuregroup_structure_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_task_recalculate t_task_recalculate_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_task_recalculate
+ ADD CONSTRAINT t_task_recalculate_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_type_alarm_source t_type_alarm_source_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_type_alarm_source
+ ADD CONSTRAINT t_type_alarm_source_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_type_alarm_state t_type_alarm_state_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_type_alarm_state
+ ADD CONSTRAINT t_type_alarm_state_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_type_event_index t_type_event_index_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_type_event_index
+ ADD CONSTRAINT t_type_event_index_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_type_file_type t_type_file_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_type_file_type
+ ADD CONSTRAINT t_type_file_type_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_type_institution_role t_type_institution_role_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_type_institution_role
+ ADD CONSTRAINT t_type_institution_role_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_type_org_type t_type_org_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_type_org_type
+ ADD CONSTRAINT t_type_org_type_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_type_project_state t_type_project_state_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_type_project_state
+ ADD CONSTRAINT t_type_project_state_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_type_report_state t_type_report_state_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_type_report_state
+ ADD CONSTRAINT t_type_report_state_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_type_report_type t_type_report_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_type_report_type
+ ADD CONSTRAINT t_type_report_type_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_type_role_type t_type_role_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_type_role_type
+ ADD CONSTRAINT t_type_role_type_pkey PRIMARY KEY (code);
+
+
+--
+-- Name: t_upload_comm_http t_upload_comm_http_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_upload_comm_http
+ ADD CONSTRAINT t_upload_comm_http_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_upload_params t_upload_params_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_upload_params
+ ADD CONSTRAINT t_upload_params_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_user_favorite t_user_favorite_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_user_favorite
+ ADD CONSTRAINT t_user_favorite_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_user t_user_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_user
+ ADD CONSTRAINT t_user_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_user_token t_user_token_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_user_token
+ ADD CONSTRAINT t_user_token_pkey PRIMARY KEY (token);
+
+
+--
+-- Name: t_vehicle_overload t_vehicle_overload_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_vehicle_overload
+ ADD CONSTRAINT t_vehicle_overload_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_video_ipc t_video_ipc_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_ipc
+ ADD CONSTRAINT t_video_ipc_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_video_ipc_station t_video_ipc_station_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_ipc_station
+ ADD CONSTRAINT t_video_ipc_station_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_video_nvr t_video_nvr_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_nvr
+ ADD CONSTRAINT t_video_nvr_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_video_nvr_vendor t_video_nvr_vendor_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_nvr_vendor
+ ADD CONSTRAINT t_video_nvr_vendor_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_video_push_server t_video_push_server_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_push_server
+ ADD CONSTRAINT t_video_push_server_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_workflow_business t_workflow_business_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_workflow_business
+ ADD CONSTRAINT t_workflow_business_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_workflow_form_proto t_workflow_form_proto_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_workflow_form_proto
+ ADD CONSTRAINT t_workflow_form_proto_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_wx_bind_result t_wx_bind_result_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_wx_bind_result
+ ADD CONSTRAINT t_wx_bind_result_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: t_wx_subscribe t_wx_subscribe_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_wx_subscribe
+ ADD CONSTRAINT t_wx_subscribe_pkey PRIMARY KEY (open_id);
+
+
+--
+-- Name: idx_api_log_status; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX idx_api_log_status ON public.t_api_log USING btree (status_code);
+
+
+--
+-- Name: idx_api_log_time; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX idx_api_log_time ON public.t_api_log USING btree (log_time);
+
+
+--
+-- Name: idx_data_original; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX idx_data_original ON public.t_data_original USING btree (iota_device_id, collect_time);
+
+
+--
+-- Name: idx_project_approve; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX idx_project_approve ON public.t_project_approve USING btree (project, approve_time, project_state);
+
+
+--
+-- Name: idx_task_recalculate_d_time; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX idx_task_recalculate_d_time ON public.t_task_recalculate USING btree (data_begin_time, data_end_time);
+
+
+--
+-- Name: idx_task_recalculate_t_time; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX idx_task_recalculate_t_time ON public.t_task_recalculate USING btree (task_begin_time, task_end_time);
+
+
+--
+-- Name: t_abn_report_params_id_uindex; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE UNIQUE INDEX t_abn_report_params_id_uindex ON public.t_abn_report_params USING btree (id);
+
+
+--
+-- Name: t_agg_config_id_uindex; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE UNIQUE INDEX t_agg_config_id_uindex ON public.t_agg_config USING btree (id);
+
+
+--
+-- Name: t_agg_threshold_config_id_uindex; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE UNIQUE INDEX t_agg_threshold_config_id_uindex ON public.t_agg_threshold_config USING btree (id);
+
+
+--
+-- Name: t_agg_type_id_uindex; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE UNIQUE INDEX t_agg_type_id_uindex ON public.t_agg_type USING btree (id);
+
+
+--
+-- Name: t_structure_construction_site_id_uindex; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE UNIQUE INDEX t_structure_construction_site_id_uindex ON public.t_structure_site USING btree (id);
+
+
+--
+-- Name: t_event_config indexId; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_event_config
+ ADD CONSTRAINT "indexId" FOREIGN KEY ("indexId") REFERENCES public.t_type_event_index(id);
+
+
+--
+-- Name: t_event_config structId; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_event_config
+ ADD CONSTRAINT "structId" FOREIGN KEY ("structId") REFERENCES public.t_structure(id);
+
+
+--
+-- Name: t_abn_report_params t_abn_report_params_t_abn_type_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_abn_report_params
+ ADD CONSTRAINT t_abn_report_params_t_abn_type_id_fk FOREIGN KEY (abn_type) REFERENCES public.t_abn_type(id);
+
+
+--
+-- Name: t_abn_report_params t_abn_report_params_t_factor_proto_code_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_abn_report_params
+ ADD CONSTRAINT t_abn_report_params_t_factor_proto_code_fk FOREIGN KEY (factor_proto_code) REFERENCES public.t_factor_proto(code);
+
+
+--
+-- Name: t_abn_report_params t_abn_report_params_t_sensor_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_abn_report_params
+ ADD CONSTRAINT t_abn_report_params_t_sensor_id_fk FOREIGN KEY (station_id) REFERENCES public.t_sensor(id);
+
+
+--
+-- Name: t_agg_config t_agg_config_factor_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_agg_config
+ ADD CONSTRAINT t_agg_config_factor_id_fkey FOREIGN KEY (factor_id) REFERENCES public.t_factor(id);
+
+
+--
+-- Name: t_agg_config t_agg_config_struct_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_agg_config
+ ADD CONSTRAINT t_agg_config_struct_id_fkey FOREIGN KEY (struct_id) REFERENCES public.t_structure(id);
+
+
+--
+-- Name: t_agg_threshold_config t_agg_threshold_config_factor_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_agg_threshold_config
+ ADD CONSTRAINT t_agg_threshold_config_factor_id_fkey FOREIGN KEY (factor_id) REFERENCES public.t_factor(id);
+
+
+--
+-- Name: t_agg_threshold_config t_agg_threshold_config_struct_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_agg_threshold_config
+ ADD CONSTRAINT t_agg_threshold_config_struct_id_fkey FOREIGN KEY (struct_id) REFERENCES public.t_structure(id);
+
+
+--
+-- Name: t_alarm t_alarm_alarm_state_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm
+ ADD CONSTRAINT t_alarm_alarm_state_fkey FOREIGN KEY (alarm_state) REFERENCES public.t_type_alarm_state(id);
+
+
+--
+-- Name: t_alarm t_alarm_alarm_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm
+ ADD CONSTRAINT t_alarm_alarm_type_fkey FOREIGN KEY (alarm_type) REFERENCES public.t_alarm_type(id);
+
+
+--
+-- Name: t_alarm_deal t_alarm_deal_alarm_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_deal
+ ADD CONSTRAINT t_alarm_deal_alarm_fkey FOREIGN KEY (alarm) REFERENCES public.t_alarm(id);
+
+
+--
+-- Name: t_alarm_deal t_alarm_deal_deal_user_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_deal
+ ADD CONSTRAINT t_alarm_deal_deal_user_fkey FOREIGN KEY (deal_user) REFERENCES public.t_user(id);
+
+
+--
+-- Name: t_alarm_detail t_alarm_detail_alarm_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_detail
+ ADD CONSTRAINT t_alarm_detail_alarm_fkey FOREIGN KEY (alarm) REFERENCES public.t_alarm(id);
+
+
+--
+-- Name: t_alarm_policy t_alarm_policy_t_organization_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_policy
+ ADD CONSTRAINT t_alarm_policy_t_organization_id_fk FOREIGN KEY (created_organization) REFERENCES public.t_organization(id);
+
+
+--
+-- Name: t_alarm t_alarm_source_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm
+ ADD CONSTRAINT t_alarm_source_type_fkey FOREIGN KEY (source_type) REFERENCES public.t_type_alarm_source(id);
+
+
+--
+-- Name: t_alarm t_alarm_structure_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm
+ ADD CONSTRAINT t_alarm_structure_fkey FOREIGN KEY (structure) REFERENCES public.t_structure(id);
+
+
+--
+-- Name: t_alarm_type t_alarm_type_category_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_alarm_type
+ ADD CONSTRAINT t_alarm_type_category_fkey FOREIGN KEY (category) REFERENCES public.t_alarm_category(id);
+
+
+--
+-- Name: t_app_message t_app_message_post_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_app_message
+ ADD CONSTRAINT t_app_message_post_user_id_fkey FOREIGN KEY (post_user_id) REFERENCES public.t_user(id) ON DELETE CASCADE;
+
+
+--
+-- Name: t_app_message t_app_message_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_app_message
+ ADD CONSTRAINT t_app_message_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.t_project(id) ON DELETE CASCADE;
+
+
+--
+-- Name: t_calendar t_calendar_org_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_calendar
+ ADD CONSTRAINT t_calendar_org_fkey FOREIGN KEY (org) REFERENCES public.t_organization(id);
+
+
+--
+-- Name: t_calendar t_calendar_t_structure_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_calendar
+ ADD CONSTRAINT t_calendar_t_structure_id_fk FOREIGN KEY (structure) REFERENCES public.t_structure(id);
+
+
+--
+-- Name: t_calendar t_calendar_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_calendar
+ ADD CONSTRAINT t_calendar_type_fkey FOREIGN KEY (type) REFERENCES public.t_calendar_type(id);
+
+
+--
+-- Name: t_project_construction t_construction_t_construction_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project_construction
+ ADD CONSTRAINT t_construction_t_construction_id_fk FOREIGN KEY (construction) REFERENCES public.t_construction(id);
+
+
+--
+-- Name: t_project_construction t_construction_t_project_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project_construction
+ ADD CONSTRAINT t_construction_t_project_id_fk FOREIGN KEY (project) REFERENCES public.t_project(id);
+
+
+--
+-- Name: t_data_sensor_latest t_data_sensor_latest_sensor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_data_sensor_latest
+ ADD CONSTRAINT t_data_sensor_latest_sensor_fkey FOREIGN KEY (sensor) REFERENCES public.t_sensor(id);
+
+
+--
+-- Name: t_department t_department_org_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_department
+ ADD CONSTRAINT t_department_org_fkey FOREIGN KEY (org) REFERENCES public.t_organization(id);
+
+
+--
+-- Name: t_department_structure t_department_structure_department_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_department_structure
+ ADD CONSTRAINT t_department_structure_department_fkey FOREIGN KEY (department) REFERENCES public.t_department(id);
+
+
+--
+-- Name: t_department_structure t_department_structure_structure_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_department_structure
+ ADD CONSTRAINT t_department_structure_structure_fkey FOREIGN KEY (structure) REFERENCES public.t_structure(id);
+
+
+--
+-- Name: t_device_sensor t_device_sensor_sensor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_device_sensor
+ ADD CONSTRAINT t_device_sensor_sensor_fkey FOREIGN KEY (sensor) REFERENCES public.t_sensor(id);
+
+
+--
+-- Name: t_factor_proto_device t_factor_proto_device_formula_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor_proto_device
+ ADD CONSTRAINT t_factor_proto_device_formula_fkey FOREIGN KEY (formula) REFERENCES public.t_formula(id);
+
+
+--
+-- Name: t_factor_proto_device t_factor_proto_device_proto_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor_proto_device
+ ADD CONSTRAINT t_factor_proto_device_proto_fkey FOREIGN KEY (proto) REFERENCES public.t_factor_proto(code);
+
+
+--
+-- Name: t_factor t_factor_proto_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor
+ ADD CONSTRAINT t_factor_proto_fkey FOREIGN KEY (proto) REFERENCES public.t_factor_proto(code);
+
+
+--
+-- Name: t_factor_proto_item t_factor_proto_item_proto_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor_proto_item
+ ADD CONSTRAINT t_factor_proto_item_proto_fkey FOREIGN KEY (proto) REFERENCES public.t_factor_proto(code);
+
+
+--
+-- Name: t_factor_template_factor t_factor_template_factor_t_factor_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor_template_factor
+ ADD CONSTRAINT t_factor_template_factor_t_factor_id_fk FOREIGN KEY (factor) REFERENCES public.t_factor(id);
+
+
+--
+-- Name: t_factor_template_factor t_factor_template_factor_t_factor_template_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor_template_factor
+ ADD CONSTRAINT t_factor_template_factor_t_factor_template_id_fk FOREIGN KEY (template_id) REFERENCES public.t_factor_template(id);
+
+
+--
+-- Name: t_factor_template t_factor_template_org_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor_template
+ ADD CONSTRAINT t_factor_template_org_fkey FOREIGN KEY (org) REFERENCES public.t_organization(id);
+
+
+--
+-- Name: t_factor_template t_factor_template_structtype_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_factor_template
+ ADD CONSTRAINT t_factor_template_structtype_fkey FOREIGN KEY (structtype) REFERENCES public.t_structure_type(id);
+
+
+--
+-- Name: t_filter_config t_filter_config_item_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_filter_config
+ ADD CONSTRAINT t_filter_config_item_fkey FOREIGN KEY (item) REFERENCES public.t_factor_proto_item(id);
+
+
+--
+-- Name: t_filter_config t_filter_config_method_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_filter_config
+ ADD CONSTRAINT t_filter_config_method_fkey FOREIGN KEY (method) REFERENCES public.t_filter_method(id);
+
+
+--
+-- Name: t_filter_config t_filter_config_sensor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_filter_config
+ ADD CONSTRAINT t_filter_config_sensor_fkey FOREIGN KEY (sensor) REFERENCES public.t_sensor(id);
+
+
+--
+-- Name: t_group t_group_factor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_group
+ ADD CONSTRAINT t_group_factor_fkey FOREIGN KEY (factor) REFERENCES public.t_factor(id);
+
+
+--
+-- Name: t_group t_group_group_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_group
+ ADD CONSTRAINT t_group_group_type_fkey FOREIGN KEY (group_type) REFERENCES public.t_group_type(type_code);
+
+
+--
+-- Name: t_group_sensor t_group_sensor_group_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_group_sensor
+ ADD CONSTRAINT t_group_sensor_group_id_fkey FOREIGN KEY (group_id) REFERENCES public.t_group(id);
+
+
+--
+-- Name: t_group_sensor t_group_sensor_sensor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_group_sensor
+ ADD CONSTRAINT t_group_sensor_sensor_fkey FOREIGN KEY (sensor) REFERENCES public.t_sensor(id);
+
+
+--
+-- Name: t_group t_group_structure_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_group
+ ADD CONSTRAINT t_group_structure_fkey FOREIGN KEY (structure) REFERENCES public.t_structure(id);
+
+
+--
+-- Name: t_group_type_factor t_group_type_factor_group_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_group_type_factor
+ ADD CONSTRAINT t_group_type_factor_group_type_fkey FOREIGN KEY (group_type) REFERENCES public.t_group_type(type_code);
+
+
+--
+-- Name: t_group_type_factor t_group_type_factor_proto_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_group_type_factor
+ ADD CONSTRAINT t_group_type_factor_proto_fkey FOREIGN KEY (proto) REFERENCES public.t_factor_proto(code);
+
+
+--
+-- Name: t_item_unit t_item_unit_item_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_item_unit
+ ADD CONSTRAINT t_item_unit_item_fkey FOREIGN KEY (item) REFERENCES public.t_factor_proto_item(id);
+
+
+--
+-- Name: t_layout_model t_layout_model_layout_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_layout_model
+ ADD CONSTRAINT t_layout_model_layout_fkey FOREIGN KEY (layout) REFERENCES public.t_layout_type(id);
+
+
+--
+-- Name: t_layout_model t_layout_model_structure_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_layout_model
+ ADD CONSTRAINT t_layout_model_structure_fkey FOREIGN KEY (structure) REFERENCES public.t_structure(id);
+
+
+--
+-- Name: t_message t_message_message_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_message
+ ADD CONSTRAINT t_message_message_type_fkey FOREIGN KEY (message_type) REFERENCES public.t_message_type(id);
+
+
+--
+-- Name: t_message t_message_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_message
+ ADD CONSTRAINT t_message_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.t_user(id);
+
+
+--
+-- Name: t_netdisk_file t_netdisk_file_file_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_netdisk_file
+ ADD CONSTRAINT t_netdisk_file_file_type_fkey FOREIGN KEY (file_type) REFERENCES public.t_type_file_type(id);
+
+
+--
+-- Name: t_netdisk_file t_netdisk_file_update_user_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_netdisk_file
+ ADD CONSTRAINT t_netdisk_file_update_user_fkey FOREIGN KEY (update_user) REFERENCES public.t_user(id);
+
+
+--
+-- Name: t_organization t_organization_org_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_organization
+ ADD CONSTRAINT t_organization_org_type_fkey FOREIGN KEY (org_type) REFERENCES public.t_type_org_type(id);
+
+
+--
+-- Name: t_organization_project t_organization_project_org_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_organization_project
+ ADD CONSTRAINT t_organization_project_org_fkey FOREIGN KEY (org) REFERENCES public.t_organization(id);
+
+
+--
+-- Name: t_organization_project t_organization_project_project_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_organization_project
+ ADD CONSTRAINT t_organization_project_project_fkey FOREIGN KEY (project) REFERENCES public.t_project(id);
+
+
+--
+-- Name: t_project_approve t_project_approve_approve_user_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project_approve
+ ADD CONSTRAINT t_project_approve_approve_user_fkey FOREIGN KEY (approve_user) REFERENCES public.t_user(id);
+
+
+--
+-- Name: t_project_approve t_project_approve_project_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project_approve
+ ADD CONSTRAINT t_project_approve_project_fkey FOREIGN KEY (project) REFERENCES public.t_project(id);
+
+
+--
+-- Name: t_project t_project_project_state_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project
+ ADD CONSTRAINT t_project_project_state_fkey FOREIGN KEY (project_state) REFERENCES public.t_type_project_state(id);
+
+
+--
+-- Name: t_project_structure t_project_structure_project_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project_structure
+ ADD CONSTRAINT t_project_structure_project_fkey FOREIGN KEY (project) REFERENCES public.t_project(id);
+
+
+--
+-- Name: t_project_structure t_project_structure_structure_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project_structure
+ ADD CONSTRAINT t_project_structure_structure_fkey FOREIGN KEY (structure) REFERENCES public.t_structure(id);
+
+
+--
+-- Name: t_project_structuregroup t_project_structuregroup_project_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project_structuregroup
+ ADD CONSTRAINT t_project_structuregroup_project_fkey FOREIGN KEY (project) REFERENCES public.t_project(id);
+
+
+--
+-- Name: t_project_structuregroup t_project_structuregroup_structuregroup_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_project_structuregroup
+ ADD CONSTRAINT t_project_structuregroup_structuregroup_fkey FOREIGN KEY (structuregroup) REFERENCES public.t_structuregroup(id);
+
+
+--
+-- Name: t_rational_device t_rational_device_item_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_rational_device
+ ADD CONSTRAINT t_rational_device_item_fkey FOREIGN KEY (item) REFERENCES public.t_factor_proto_item(id);
+
+
+--
+-- Name: t_rational_filter t_rational_filter_item_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_rational_filter
+ ADD CONSTRAINT t_rational_filter_item_fkey FOREIGN KEY (item) REFERENCES public.t_factor_proto_item(id);
+
+
+--
+-- Name: t_rational_filter t_rational_filter_sensor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_rational_filter
+ ADD CONSTRAINT t_rational_filter_sensor_fkey FOREIGN KEY (sensor) REFERENCES public.t_sensor(id);
+
+
+--
+-- Name: t_rational t_rational_item_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_rational
+ ADD CONSTRAINT t_rational_item_fkey FOREIGN KEY (item) REFERENCES public.t_factor_proto_item(id);
+
+
+--
+-- Name: t_rational t_rational_sensor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_rational
+ ADD CONSTRAINT t_rational_sensor_fkey FOREIGN KEY (sensor) REFERENCES public.t_sensor(id);
+
+
+--
+-- Name: t_recalc_product_formula t_recalc_product_formula_t_formula_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_recalc_product_formula
+ ADD CONSTRAINT t_recalc_product_formula_t_formula_id_fk FOREIGN KEY (formula) REFERENCES public.t_formula(id);
+
+
+--
+-- Name: t_report_generate t_report_generate_report_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_report_generate
+ ADD CONSTRAINT t_report_generate_report_type_fkey FOREIGN KEY (report_type) REFERENCES public.t_type_report_type(id);
+
+
+--
+-- Name: t_report_generate t_report_generate_structure_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_report_generate
+ ADD CONSTRAINT t_report_generate_structure_fkey FOREIGN KEY (structure) REFERENCES public.t_structure(id);
+
+
+--
+-- Name: t_report_template t_report_template_report_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_report_template
+ ADD CONSTRAINT t_report_template_report_type_fkey FOREIGN KEY (report_type) REFERENCES public.t_type_report_type(id);
+
+
+--
+-- Name: t_role t_role_dep_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_role
+ ADD CONSTRAINT t_role_dep_fkey FOREIGN KEY (dep) REFERENCES public.t_department(id);
+
+
+--
+-- Name: t_role_resource t_role_resource_resource_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_role_resource
+ ADD CONSTRAINT t_role_resource_resource_fkey FOREIGN KEY (resource) REFERENCES public.t_resource(code);
+
+
+--
+-- Name: t_role_resource t_role_resource_role_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_role_resource
+ ADD CONSTRAINT t_role_resource_role_fkey FOREIGN KEY (role) REFERENCES public.t_role(id);
+
+
+--
+-- Name: t_sensor t_sensor_factor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor
+ ADD CONSTRAINT t_sensor_factor_fkey FOREIGN KEY (factor) REFERENCES public.t_factor(id);
+
+
+--
+-- Name: t_sensor_factor_threshold t_sensor_factor_threshold_item_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_factor_threshold
+ ADD CONSTRAINT t_sensor_factor_threshold_item_fkey FOREIGN KEY (item) REFERENCES public.t_factor_proto_item(id);
+
+
+--
+-- Name: t_sensor_factor_threshold t_sensor_factor_threshold_sensor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_factor_threshold
+ ADD CONSTRAINT t_sensor_factor_threshold_sensor_fkey FOREIGN KEY (sensor) REFERENCES public.t_sensor(id);
+
+
+--
+-- Name: t_sensor_filter_config t_sensor_filter_config_item_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_filter_config
+ ADD CONSTRAINT t_sensor_filter_config_item_fkey FOREIGN KEY (item) REFERENCES public.t_factor_proto_item(id);
+
+
+--
+-- Name: t_sensor_filter_config t_sensor_filter_config_method_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_filter_config
+ ADD CONSTRAINT t_sensor_filter_config_method_fkey FOREIGN KEY (method) REFERENCES public.t_filter_method(id);
+
+
+--
+-- Name: t_sensor_filter_config t_sensor_filter_config_sensor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_filter_config
+ ADD CONSTRAINT t_sensor_filter_config_sensor_fkey FOREIGN KEY (sensor) REFERENCES public.t_sensor(id);
+
+
+--
+-- Name: t_sensor_formula t_sensor_formula_formula_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_formula
+ ADD CONSTRAINT t_sensor_formula_formula_fkey FOREIGN KEY (formula) REFERENCES public.t_formula(id);
+
+
+--
+-- Name: t_sensor_formula t_sensor_formula_sensor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_formula
+ ADD CONSTRAINT t_sensor_formula_sensor_fkey FOREIGN KEY (sensor) REFERENCES public.t_sensor(id);
+
+
+--
+-- Name: t_sensor_layout t_sensor_layout_model_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_layout
+ ADD CONSTRAINT t_sensor_layout_model_fkey FOREIGN KEY (model) REFERENCES public.t_layout_model(id);
+
+
+--
+-- Name: t_sensor_layout t_sensor_layout_sensor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_layout
+ ADD CONSTRAINT t_sensor_layout_sensor_fkey FOREIGN KEY (sensor) REFERENCES public.t_sensor(id);
+
+
+--
+-- Name: t_sensor_layout t_sensor_layout_t_layout_model__fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor_layout
+ ADD CONSTRAINT t_sensor_layout_t_layout_model__fk FOREIGN KEY (modal_layout) REFERENCES public.t_layout_model(id);
+
+
+--
+-- Name: t_sensor t_sensor_structure_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_sensor
+ ADD CONSTRAINT t_sensor_structure_fkey FOREIGN KEY (structure) REFERENCES public.t_structure(id);
+
+
+--
+-- Name: t_structure_factor t_structure_factor_factor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure_factor
+ ADD CONSTRAINT t_structure_factor_factor_fkey FOREIGN KEY (factor) REFERENCES public.t_factor(id);
+
+
+--
+-- Name: t_structure_factor t_structure_factor_structure_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure_factor
+ ADD CONSTRAINT t_structure_factor_structure_fkey FOREIGN KEY (structure) REFERENCES public.t_structure(id);
+
+
+--
+-- Name: t_structure t_structure_org_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure
+ ADD CONSTRAINT t_structure_org_fkey FOREIGN KEY (org) REFERENCES public.t_organization(id);
+
+
+--
+-- Name: t_structure t_structure_structure_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure
+ ADD CONSTRAINT t_structure_structure_type_fkey FOREIGN KEY (structure_type) REFERENCES public.t_structure_type(id);
+
+
+--
+-- Name: t_structure_type_factor t_structure_type_factor_factor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure_type_factor
+ ADD CONSTRAINT t_structure_type_factor_factor_fkey FOREIGN KEY (factor) REFERENCES public.t_factor(id);
+
+
+--
+-- Name: t_structure_type_factor t_structure_type_factor_structure_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structure_type_factor
+ ADD CONSTRAINT t_structure_type_factor_structure_type_fkey FOREIGN KEY (structure_type) REFERENCES public.t_structure_type(id);
+
+
+--
+-- Name: t_structuregroup_structure t_structuregroup_structure_structure_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structuregroup_structure
+ ADD CONSTRAINT t_structuregroup_structure_structure_fkey FOREIGN KEY (structure) REFERENCES public.t_structure(id);
+
+
+--
+-- Name: t_structuregroup_structure t_structuregroup_structure_structuregroup_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_structuregroup_structure
+ ADD CONSTRAINT t_structuregroup_structure_structuregroup_fkey FOREIGN KEY (structuregroup) REFERENCES public.t_structuregroup(id);
+
+
+--
+-- Name: t_task_recalculate t_task_recalculate_emit_user_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_task_recalculate
+ ADD CONSTRAINT t_task_recalculate_emit_user_fkey FOREIGN KEY (emit_user) REFERENCES public.t_user(id);
+
+
+--
+-- Name: t_institution t_type_institution_role_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_institution
+ ADD CONSTRAINT t_type_institution_role_fkey FOREIGN KEY (institutionrole) REFERENCES public.t_type_institution_role(id);
+
+
+--
+-- Name: t_user_favorite t_user_favorite_file_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_user_favorite
+ ADD CONSTRAINT t_user_favorite_file_type_fkey FOREIGN KEY (file_type) REFERENCES public.t_type_file_type(id);
+
+
+--
+-- Name: t_user_favorite t_user_favorite_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_user_favorite
+ ADD CONSTRAINT t_user_favorite_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.t_user(id);
+
+
+--
+-- Name: t_user t_user_org_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_user
+ ADD CONSTRAINT t_user_org_fkey FOREIGN KEY (org) REFERENCES public.t_organization(id);
+
+
+--
+-- Name: t_user t_user_role_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_user
+ ADD CONSTRAINT t_user_role_fkey FOREIGN KEY (role) REFERENCES public.t_role(id);
+
+
+--
+-- Name: t_video_ipc_station t_video_ipc_station_t_sensor_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_ipc_station
+ ADD CONSTRAINT t_video_ipc_station_t_sensor_id_fk FOREIGN KEY (station) REFERENCES public.t_sensor(id);
+
+
+--
+-- Name: t_video_ipc_station t_video_ipc_station_t_video_ipc_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_ipc_station
+ ADD CONSTRAINT t_video_ipc_station_t_video_ipc_id_fk FOREIGN KEY (ipc) REFERENCES public.t_video_ipc(id);
+
+
+--
+-- Name: t_video_ipc t_video_ipc_t_structure_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_ipc
+ ADD CONSTRAINT t_video_ipc_t_structure_id_fk FOREIGN KEY (structure) REFERENCES public.t_structure(id);
+
+
+--
+-- Name: t_video_ipc t_video_ipc_t_video_nvr_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_ipc
+ ADD CONSTRAINT t_video_ipc_t_video_nvr_id_fk FOREIGN KEY (nvr) REFERENCES public.t_video_nvr(id);
+
+
+--
+-- Name: t_video_ipc t_video_ipc_t_video_push_server_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_ipc
+ ADD CONSTRAINT t_video_ipc_t_video_push_server_id_fk FOREIGN KEY (push_server) REFERENCES public.t_video_push_server(id);
+
+
+--
+-- Name: t_video_nvr t_video_nvr_t_structure_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_nvr
+ ADD CONSTRAINT t_video_nvr_t_structure_id_fk FOREIGN KEY (structure) REFERENCES public.t_structure(id);
+
+
+--
+-- Name: t_video_nvr t_video_nvr_t_video_nvr_vendor_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_video_nvr
+ ADD CONSTRAINT t_video_nvr_t_video_nvr_vendor_id_fk FOREIGN KEY (vendor) REFERENCES public.t_video_nvr_vendor(id);
+
+
+--
+-- Name: t_wx_bind_result t_wx_bind_result_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.t_wx_bind_result
+ ADD CONSTRAINT t_wx_bind_result_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.t_user(id);
+
+
+--
+-- PostgreSQL database dump complete
+--
+
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/create_db.sql b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/create_db.sql
new file mode 100644
index 0000000..d53bc09
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/create_db.sql
@@ -0,0 +1,2 @@
+CREATE DATABASE IOTA;
+CREATE DATABASE AXY;
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/iota_create.sql b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/iota_create.sql
new file mode 100644
index 0000000..ed14533
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动pg数据库/pgscript/iota_create.sql
@@ -0,0 +1,19886 @@
+--
+-- PostgreSQL database dump
+--
+
+-- Dumped from database version 9.6.8
+-- Dumped by pg_dump version 9.6.8
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET idle_in_transaction_session_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SELECT pg_catalog.set_config('search_path', '', false);
+SET check_function_bodies = false;
+SET client_min_messages = warning;
+SET row_security = off;
+
+--
+-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -
+--
+
+CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
+
+
+--
+-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -
+--
+
+COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
+
+
+--
+-- Name: enum_Order_paymentState; Type: TYPE; Schema: public; Owner: -
+--
+
+CREATE TYPE public."enum_Order_paymentState" AS ENUM (
+ 'prepaid',
+ 'failure',
+ 'unpaid'
+);
+
+
+--
+-- Name: enum_Recharge_paymentState; Type: TYPE; Schema: public; Owner: -
+--
+
+CREATE TYPE public."enum_Recharge_paymentState" AS ENUM (
+ 'prepaid',
+ 'failure',
+ 'unpaid'
+);
+
+
+--
+-- Name: enum_UserApp_platform; Type: TYPE; Schema: public; Owner: -
+--
+
+CREATE TYPE public."enum_UserApp_platform" AS ENUM (
+ 'iOS',
+ 'Android',
+ 'Web',
+ 'Application'
+);
+
+
+--
+-- Name: enum_UserOAuth2_platform; Type: TYPE; Schema: public; Owner: -
+--
+
+CREATE TYPE public."enum_UserOAuth2_platform" AS ENUM (
+ 'WeChat',
+ 'GitHub'
+);
+
+
+--
+-- Name: enum_User_type; Type: TYPE; Schema: public; Owner: -
+--
+
+CREATE TYPE public."enum_User_type" AS ENUM (
+ 'Master',
+ 'Sub'
+);
+
+
+SET default_tablespace = '';
+
+SET default_with_oids = false;
+
+--
+-- Name: Accessory; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Accessory" (
+ id character varying(255) NOT NULL,
+ name character varying(255),
+ url character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "workOrderId" character varying(255)
+);
+
+
+--
+-- Name: Account; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Account" (
+ id character varying(255) NOT NULL,
+ balance integer,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "userId" character varying(255)
+);
+
+
+--
+-- Name: AccountServicePackage; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."AccountServicePackage" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ price character varying(255) NOT NULL,
+ specification text NOT NULL,
+ "initialSpecification" text NOT NULL,
+ "beginTime" timestamp with time zone,
+ "endTime" timestamp with time zone,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "accountId" character varying(255),
+ "servicePackageId" character varying(255)
+);
+
+
+--
+-- Name: AlertCategory; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."AlertCategory" (
+ id integer NOT NULL,
+ name character varying(255),
+ "desc" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone
+);
+
+
+--
+-- Name: AlertCategory_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public."AlertCategory_id_seq"
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: AlertCategory_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public."AlertCategory_id_seq" OWNED BY public."AlertCategory".id;
+
+
+--
+-- Name: AlertDefinition; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."AlertDefinition" (
+ id integer NOT NULL,
+ key character varying(255),
+ name character varying(255),
+ "desc" character varying(255),
+ severity integer,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "alertEventTypeId" integer,
+ "alertCategoryId" integer
+);
+
+
+--
+-- Name: AlertDefinition_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public."AlertDefinition_id_seq"
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: AlertDefinition_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public."AlertDefinition_id_seq" OWNED BY public."AlertDefinition".id;
+
+
+--
+-- Name: AlertEventType; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."AlertEventType" (
+ id integer NOT NULL,
+ name character varying(255),
+ "desc" character varying(255),
+ "recoverMode" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone
+);
+
+
+--
+-- Name: AlertEventType_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public."AlertEventType_id_seq"
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: AlertEventType_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public."AlertEventType_id_seq" OWNED BY public."AlertEventType".id;
+
+
+--
+-- Name: Authorization; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Authorization" (
+ id character varying(255) NOT NULL,
+ "createBy" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "userGroupId" character varying(255),
+ "resourceGroupId" character varying(255),
+ "roleId" character varying(255)
+);
+
+
+--
+-- Name: CapabilityCategory; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."CapabilityCategory" (
+ id integer NOT NULL,
+ name character varying(255) NOT NULL,
+ image character varying(255),
+ "desc" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone
+);
+
+
+--
+-- Name: CapabilityCategory_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public."CapabilityCategory_id_seq"
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: CapabilityCategory_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public."CapabilityCategory_id_seq" OWNED BY public."CapabilityCategory".id;
+
+
+--
+-- Name: CapabilityFormula; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."CapabilityFormula" (
+ id character varying(255) NOT NULL,
+ properties text,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "capabilityId" character varying(255) NOT NULL,
+ "formulaId" character varying(255) NOT NULL
+);
+
+
+--
+-- Name: CapabilityMeta; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."CapabilityMeta" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ image character varying(255),
+ "desc" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "deviceMetaId" character varying(255),
+ "capabilityCategoryId" integer,
+ "protocolMetaId" character varying(255)
+);
+
+
+--
+-- Name: CapabilityMetaInterface; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."CapabilityMetaInterface" (
+ id character varying(255) NOT NULL,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "capabilityMetaId" character varying(255) NOT NULL,
+ "deviceMetaInterfaceId" character varying(255) NOT NULL
+);
+
+
+--
+-- Name: CapabilityProperty; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."CapabilityProperty" (
+ id integer NOT NULL,
+ name character varying(255) NOT NULL,
+ "showName" character varying(255),
+ category character varying(255) DEFAULT 'Variable'::character varying NOT NULL,
+ image character varying(255),
+ enum character varying(255),
+ "defaultValue" character varying(255),
+ "precision" integer,
+ max character varying(255),
+ min character varying(255),
+ unit character varying(255),
+ "desc" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "capabilityMetaId" character varying(255),
+ "propertyTypeId" integer,
+ required boolean DEFAULT true NOT NULL,
+ "isOtherParameter" boolean DEFAULT false
+);
+
+
+--
+-- Name: CapabilityProperty_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public."CapabilityProperty_id_seq"
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: CapabilityProperty_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public."CapabilityProperty_id_seq" OWNED BY public."CapabilityProperty".id;
+
+
+--
+-- Name: CompanyCertification; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."CompanyCertification" (
+ id character varying(255) NOT NULL,
+ type character varying(255) DEFAULT 'company'::character varying NOT NULL,
+ name character varying(255) NOT NULL,
+ "licenseId" character varying(255) NOT NULL,
+ "licenseImg" character varying(255) NOT NULL,
+ status character varying(255) DEFAULT 'authenticating'::character varying,
+ "adminName" character varying(255) NOT NULL,
+ "cardId" character varying(255) NOT NULL,
+ "frontImg" character varying(255) NOT NULL,
+ "reverseImg" character varying(255) NOT NULL,
+ reason character varying(255),
+ contacts character varying(255),
+ address character varying(255),
+ mobile character varying(255),
+ email character varying(255),
+ "desc" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "userId" character varying(255)
+);
+
+
+--
+-- Name: Dashboard; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Dashboard" (
+ id character varying(255) NOT NULL,
+ colspan character varying(255),
+ height character varying(255),
+ type character varying(255),
+ source text,
+ option text,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "userId" character varying(255) NOT NULL
+);
+
+
+--
+-- Name: Device; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Device" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ properties text,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "thingId" character varying(255),
+ "deviceMetaId" character varying(255)
+);
+
+
+--
+-- Name: DeviceCapability; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."DeviceCapability" (
+ id character varying(255) NOT NULL,
+ properties text,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "deviceId" character varying(255),
+ "capabilityMetaId" character varying(255),
+ "deviceInterfaceId" character varying(255),
+ "protocolMetaId" character varying(255)
+);
+
+
+--
+-- Name: DeviceCertification; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."DeviceCertification" (
+ id character varying(255) NOT NULL,
+ status character varying(255) DEFAULT 'authenticating'::character varying,
+ reason character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "userId" character varying(255),
+ "deviceMetaId" character varying(255)
+);
+
+
+--
+-- Name: DeviceInterface; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."DeviceInterface" (
+ id character varying(255) NOT NULL,
+ properties text,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "deviceId" character varying(255),
+ "deviceMetaInterfaceId" character varying(255)
+);
+
+
+--
+-- Name: DeviceMeta; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."DeviceMeta" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ "createBy" character varying(255) DEFAULT '-1'::character varying,
+ "belongTo" character varying(255),
+ investor character varying(255),
+ public boolean DEFAULT false,
+ image character varying(255),
+ model character varying(255),
+ "desc" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "vendorId" character varying(255),
+ category integer DEFAULT 0
+);
+
+
+--
+-- Name: DeviceMetaInterface; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."DeviceMetaInterface" (
+ id character varying(255) NOT NULL,
+ "directType" integer DEFAULT 1 NOT NULL,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "deviceMetaId" character varying(255),
+ "interfaceMetaId" character varying(255)
+);
+
+
+--
+-- Name: DeviceProperty; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."DeviceProperty" (
+ id integer NOT NULL,
+ name character varying(255) NOT NULL,
+ "showName" character varying(255),
+ category character varying(255) DEFAULT 'Variable'::character varying NOT NULL,
+ image character varying(255),
+ enum character varying(255),
+ "defaultValue" character varying(255),
+ "precision" integer,
+ max character varying(255),
+ min character varying(255),
+ unit character varying(255),
+ "desc" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "deviceMetaId" character varying(255),
+ "propertyTypeId" integer,
+ required boolean DEFAULT true NOT NULL,
+ "isOtherParameter" boolean DEFAULT false
+);
+
+
+--
+-- Name: DeviceProperty_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public."DeviceProperty_id_seq"
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: DeviceProperty_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public."DeviceProperty_id_seq" OWNED BY public."DeviceProperty".id;
+
+
+--
+-- Name: Dimension; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Dimension" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ "desc" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "thingId" character varying(255)
+);
+
+
+--
+-- Name: DimensionCapability; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."DimensionCapability" (
+ id character varying(255) NOT NULL,
+ repeats integer,
+ "interval" numeric,
+ qos integer,
+ timeout integer DEFAULT 2,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "deviceCapabilityId" character varying(255),
+ "dimensionId" character varying(255),
+ "errTimesToDrop" integer DEFAULT 255
+);
+
+
+--
+-- Name: FeedBack; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."FeedBack" (
+ id character varying(255) NOT NULL,
+ email character varying(255),
+ mobile character varying(255),
+ title character varying(255),
+ "desc" text,
+ status character varying(255) DEFAULT 'pending'::character varying,
+ "operatorId" character varying(255),
+ "operatorName" character varying(255),
+ remark text,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone
+);
+
+
+--
+-- Name: FilteredResource; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."FilteredResource" (
+ id character varying(255) NOT NULL,
+ name character varying(255),
+ "desc" character varying(255),
+ type character varying(255),
+ key character varying(255),
+ "createBy" character varying(255),
+ "belongTo" character varying(255),
+ properties text,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone
+);
+
+
+--
+-- Name: FormulaMeta; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."FormulaMeta" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ formula character varying(255),
+ key character varying(255),
+ "desc" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "deviceMetaId" character varying(255)
+);
+
+
+--
+-- Name: FormulaProperty; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."FormulaProperty" (
+ id integer NOT NULL,
+ name character varying(255) NOT NULL,
+ "showName" character varying(255),
+ category character varying(255) DEFAULT 'Variable'::character varying NOT NULL,
+ image character varying(255),
+ enum character varying(255),
+ "defaultValue" character varying(255),
+ "precision" integer,
+ max character varying(255),
+ min character varying(255),
+ unit character varying(255),
+ "desc" character varying(255),
+ required boolean DEFAULT true NOT NULL,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "formulaMetaId" character varying(255),
+ "propertyTypeId" integer,
+ "isOtherParameter" boolean DEFAULT false
+);
+
+
+--
+-- Name: FormulaProperty_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public."FormulaProperty_id_seq"
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: FormulaProperty_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public."FormulaProperty_id_seq" OWNED BY public."FormulaProperty".id;
+
+
+--
+-- Name: InterfaceMeta; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."InterfaceMeta" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ "createBy" character varying(255) DEFAULT '-1'::character varying,
+ "belongTo" character varying(255),
+ investor character varying(255),
+ public boolean DEFAULT false,
+ image character varying(255),
+ "desc" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "interfaceTypeId" integer
+);
+
+
+--
+-- Name: InterfaceProperty; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."InterfaceProperty" (
+ id integer NOT NULL,
+ name character varying(255) NOT NULL,
+ "showName" character varying(255),
+ category character varying(255) DEFAULT 'Variable'::character varying NOT NULL,
+ enum character varying(255),
+ "defaultValue" character varying(255),
+ "precision" integer,
+ max character varying(255),
+ min character varying(255),
+ unit character varying(255),
+ "desc" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "propertyTypeId" integer,
+ "interfaceMetaId" character varying(255),
+ required boolean DEFAULT true NOT NULL,
+ "isOtherParameter" boolean DEFAULT false
+);
+
+
+--
+-- Name: InterfaceProperty_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public."InterfaceProperty_id_seq"
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: InterfaceProperty_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public."InterfaceProperty_id_seq" OWNED BY public."InterfaceProperty".id;
+
+
+--
+-- Name: InterfaceType; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."InterfaceType" (
+ id integer NOT NULL,
+ name character varying(255) NOT NULL,
+ key character varying(255) NOT NULL,
+ "desc" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone
+);
+
+
+--
+-- Name: InterfaceType_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public."InterfaceType_id_seq"
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: InterfaceType_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public."InterfaceType_id_seq" OWNED BY public."InterfaceType".id;
+
+
+--
+-- Name: Layout; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Layout" (
+ id character varying(255) NOT NULL,
+ "desc" character varying(255),
+ settings text,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "thingId" character varying(255)
+);
+
+
+--
+-- Name: LayoutLink; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."LayoutLink" (
+ id character varying(255) NOT NULL,
+ "layoutInfo" text,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "fromLayoutNodeId" character varying(255),
+ "toLayoutNodeId" character varying(255),
+ "fromDeviceInterfaceId" character varying(255),
+ "toDeviceInterfaceId" character varying(255),
+ "parentLinkId" character varying(255)
+);
+
+
+--
+-- Name: LayoutNode; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."LayoutNode" (
+ id character varying(255) NOT NULL,
+ "layoutInfo" text,
+ "extLocInfo" text,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "layoutId" character varying(255),
+ "deviceId" character varying(255)
+);
+
+
+--
+-- Name: Migrations; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Migrations" (
+ name character varying(255) NOT NULL
+);
+
+
+--
+-- Name: Notice; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Notice" (
+ id character varying(255) NOT NULL,
+ receiver character varying(255) NOT NULL,
+ sender character varying(255) DEFAULT '-1'::character varying,
+ title character varying(255) NOT NULL,
+ content text NOT NULL,
+ "expireDate" timestamp with time zone,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ type character varying(255) NOT NULL
+);
+
+
+--
+-- Name: NoticeType; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."NoticeType" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ "desc" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone
+);
+
+
+--
+-- Name: OperationRecord; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."OperationRecord" (
+ id character varying(255) NOT NULL,
+ record text NOT NULL,
+ "operatorId" character varying(255) NOT NULL,
+ type character varying(255) NOT NULL,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "workOrderId" character varying(255)
+);
+
+
+--
+-- Name: Order; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Order" (
+ id character varying(255) NOT NULL,
+ out_trade_no character varying(255),
+ service_name character varying(255),
+ fee integer,
+ "oldBalance" integer DEFAULT 0,
+ "newBalance" integer DEFAULT 0,
+ time_start timestamp with time zone,
+ time_end timestamp with time zone,
+ "payChannel" character varying(255),
+ "paymentState" public."enum_Order_paymentState" DEFAULT 'unpaid'::public."enum_Order_paymentState",
+ transaction_id character varying(255),
+ bank_type character varying(255),
+ openid character varying(255),
+ standard character varying(255),
+ product_id character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "accountId" character varying(255),
+ "servicePackageId" character varying(255),
+ "beginTime" timestamp with time zone,
+ "endTime" timestamp with time zone
+);
+
+
+--
+-- Name: Permission; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Permission" (
+ id character varying(255) NOT NULL,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "roleId" character varying(255),
+ "resourceTypeKey" character varying(255),
+ "operationTypeKey" character varying(255)
+);
+
+
+--
+-- Name: PersonCertification; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."PersonCertification" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ "cardId" character varying(255) NOT NULL,
+ "frontImg" character varying(255) NOT NULL,
+ "reverseImg" character varying(255) NOT NULL,
+ status character varying(255) DEFAULT 'authenticating'::character varying,
+ reason character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "userId" character varying(255)
+);
+
+
+--
+-- Name: PropertyType; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."PropertyType" (
+ id integer NOT NULL,
+ name character varying(255) NOT NULL,
+ key character varying(255) NOT NULL,
+ "desc" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone
+);
+
+
+--
+-- Name: PropertyType_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public."PropertyType_id_seq"
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: PropertyType_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public."PropertyType_id_seq" OWNED BY public."PropertyType".id;
+
+
+--
+-- Name: ProtocolCertification; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."ProtocolCertification" (
+ id character varying(255) NOT NULL,
+ status character varying(255) DEFAULT 'authenticating'::character varying,
+ reason character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "userId" character varying(255),
+ "protocolMetaId" character varying(255)
+);
+
+
+--
+-- Name: ProtocolMeta; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."ProtocolMeta" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ image character varying(255),
+ "desc" character varying(255),
+ version character varying(255),
+ "belongTo" character varying(255),
+ investor character varying(255),
+ public boolean DEFAULT false,
+ "createBy" character varying(255) DEFAULT '-1'::character varying,
+ impl character varying(255),
+ resource text,
+ "resType" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "enableTime" date,
+ "vendorId" character varying(255)
+);
+
+
+--
+-- Name: Recharge; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Recharge" (
+ id character varying(255) NOT NULL,
+ out_trade_no character varying(255),
+ fee integer,
+ "oldBalance" integer DEFAULT 0,
+ "newBalance" integer DEFAULT 0,
+ time_start timestamp with time zone,
+ time_end timestamp with time zone,
+ "payChannel" character varying(255),
+ "paymentState" public."enum_Recharge_paymentState" DEFAULT 'unpaid'::public."enum_Recharge_paymentState" NOT NULL,
+ transaction_id character varying(255),
+ bank_type character varying(255),
+ openid character varying(255),
+ product_id character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "accountId" character varying(255)
+);
+
+
+--
+-- Name: Resource; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Resource" (
+ id character varying(255) NOT NULL,
+ name character varying(255),
+ "desc" character varying(255),
+ type character varying(255),
+ key character varying(255),
+ "createBy" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "resourceGroupId" character varying(255)
+);
+
+
+--
+-- Name: ResourceGroup; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."ResourceGroup" (
+ id character varying(255) NOT NULL,
+ name character varying(255),
+ "desc" character varying(255),
+ "createBy" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone
+);
+
+
+--
+-- Name: ResourceOperationType; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."ResourceOperationType" (
+ name character varying(255) NOT NULL,
+ "desc" character varying(255),
+ type character varying(255) NOT NULL,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "resourceTypeKey" character varying(255)
+);
+
+
+--
+-- Name: ResourceType; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."ResourceType" (
+ name character varying(255) NOT NULL,
+ type character varying(255) NOT NULL,
+ "desc" character varying(255) NOT NULL,
+ model character varying(255) NOT NULL,
+ "nameField" character varying(255) DEFAULT 'name'::character varying,
+ "idField" character varying(255) DEFAULT 'id'::character varying,
+ "descField" character varying(255) DEFAULT 'desc'::character varying,
+ key character varying(255) NOT NULL,
+ url character varying(255) NOT NULL,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ shareable boolean DEFAULT true
+);
+
+
+--
+-- Name: Role; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Role" (
+ id character varying(255) NOT NULL,
+ name character varying(255),
+ "desc" character varying(255),
+ "createBy" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone
+);
+
+
+--
+-- Name: Rule; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Rule" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ "desc" character varying(255),
+ flow text,
+ "createBy" character varying(255),
+ "belongTo" character varying(255),
+ investor character varying(255),
+ public boolean DEFAULT false,
+ enable boolean DEFAULT false,
+ release boolean DEFAULT false,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone
+);
+
+
+--
+-- Name: Scheme; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Scheme" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ mode character varying(255),
+ "interval" integer,
+ unit character varying(255),
+ repeats integer,
+ "beginTime" timestamp with time zone,
+ "endTime" timestamp with time zone,
+ "notifyMode" integer,
+ "capabilityNotifyMode" integer,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "dimensionId" character varying(255)
+);
+
+
+--
+-- Name: ServicePackage; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."ServicePackage" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ "serviceType" character varying(255),
+ "desc" character varying(255) NOT NULL,
+ specification text NOT NULL,
+ price integer NOT NULL,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone
+);
+
+
+--
+-- Name: SubUser; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."SubUser" (
+ id integer NOT NULL,
+ dependent boolean DEFAULT true,
+ enable boolean DEFAULT true,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "parentId" character varying(255),
+ "userId" character varying(255)
+);
+
+
+--
+-- Name: SubUser_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public."SubUser_id_seq"
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: SubUser_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public."SubUser_id_seq" OWNED BY public."SubUser".id;
+
+
+--
+-- Name: TestCase; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."TestCase" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ "desc" character varying(255),
+ annotations character varying(255),
+ "deviceProperties" text,
+ "capabilityProperties" text,
+ "interfaceProperties" text,
+ "formulaProperties" text,
+ "deviceCapabilityId" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "thingId" character varying(255),
+ "testSuiteId" character varying(255),
+ param character varying(255)
+);
+
+
+--
+-- Name: TestCaseAssert; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."TestCaseAssert" (
+ id character varying(255) NOT NULL,
+ type character varying(255) NOT NULL,
+ operator character varying(255) NOT NULL,
+ value character varying(255),
+ expect character varying(255),
+ index integer NOT NULL,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "testCaseId" character varying(255)
+);
+
+
+--
+-- Name: TestCaseExecutionRecord; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."TestCaseExecutionRecord" (
+ id character varying(255) NOT NULL,
+ result character varying(255),
+ "taskId" character varying(255),
+ "startedAt" timestamp with time zone,
+ "endedAt" timestamp with time zone,
+ elapsed integer,
+ log text,
+ data text,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "testCaseId" character varying(255)
+);
+
+
+--
+-- Name: TestCaseInput; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."TestCaseInput" (
+ id character varying(255) NOT NULL,
+ value text DEFAULT ''::text NOT NULL,
+ index integer NOT NULL,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "testCaseId" character varying(255)
+);
+
+
+--
+-- Name: TestSuite; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."TestSuite" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ "desc" character varying(255),
+ annotations character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "thingId" character varying(255)
+);
+
+
+--
+-- Name: Thing; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."Thing" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ "desc" character varying(255),
+ image character varying(255),
+ lng double precision,
+ lat double precision,
+ "createBy" character varying(255),
+ "belongTo" character varying(255),
+ investor character varying(255),
+ enable boolean DEFAULT false,
+ release boolean DEFAULT false,
+ public boolean DEFAULT false,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone
+);
+
+
+--
+-- Name: User; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."User" (
+ id character varying(255) NOT NULL,
+ username character varying(255) NOT NULL,
+ password character varying(255) NOT NULL,
+ type public."enum_User_type" DEFAULT 'Master'::public."enum_User_type",
+ email character varying(255),
+ mobile character varying(255),
+ "actEmail" boolean DEFAULT false,
+ gravatar character varying(255),
+ key character varying(255),
+ secret character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "isAdmin" boolean DEFAULT false,
+ "deletedAt" timestamp with time zone
+);
+
+
+--
+-- Name: UserApp; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."UserApp" (
+ id character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ key character varying(255) NOT NULL,
+ secret character varying(255) NOT NULL,
+ platform public."enum_UserApp_platform" NOT NULL,
+ "extInfo" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "userId" character varying(255)
+);
+
+
+--
+-- Name: UserGroup; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."UserGroup" (
+ id character varying(255) NOT NULL,
+ name character varying(255),
+ "desc" character varying(255),
+ "createBy" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone
+);
+
+
+--
+-- Name: UserGroupUser; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."UserGroupUser" (
+ id character varying(255) NOT NULL,
+ type character varying(255) NOT NULL,
+ accept boolean DEFAULT false,
+ "invitedCode" character varying(255),
+ enable boolean DEFAULT true,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "userId" character varying(255),
+ "userGroupId" character varying(255)
+);
+
+
+--
+-- Name: UserNotice; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."UserNotice" (
+ id character varying(255) NOT NULL,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "userId" character varying(255) NOT NULL,
+ "noticeId" character varying(255) NOT NULL
+);
+
+
+--
+-- Name: UserOAuth2; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."UserOAuth2" (
+ id character varying(255) NOT NULL,
+ platform public."enum_UserOAuth2_platform" NOT NULL,
+ "openId" character varying(255) NOT NULL,
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "userId" character varying(255)
+);
+
+
+--
+-- Name: WorkOrder; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."WorkOrder" (
+ id character varying(255) NOT NULL,
+ title character varying(255) NOT NULL,
+ "desc" text NOT NULL,
+ status character varying(255) DEFAULT 'pending'::character varying,
+ "operatorId" character varying(255),
+ "operatorName" character varying(255),
+ email character varying(255),
+ mobile character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone,
+ "workOrderTypeId" integer,
+ "userId" character varying(255)
+);
+
+
+--
+-- Name: WorkOrderType; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public."WorkOrderType" (
+ id integer NOT NULL,
+ name character varying(255) NOT NULL,
+ key character varying(255) NOT NULL,
+ "desc" character varying(255),
+ "createdAt" timestamp with time zone,
+ "updatedAt" timestamp with time zone
+);
+
+
+--
+-- Name: WorkOrderType_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public."WorkOrderType_id_seq"
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: WorkOrderType_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public."WorkOrderType_id_seq" OWNED BY public."WorkOrderType".id;
+
+
+--
+-- Name: lock_monitor; Type: VIEW; Schema: public; Owner: -
+--
+
+CREATE VIEW public.lock_monitor AS
+ SELECT COALESCE(((blockingl.relation)::regclass)::text, blockingl.locktype) AS locked_item,
+ (now() - blockeda.query_start) AS waiting_duration,
+ blockeda.pid AS blocked_pid,
+ blockeda.query AS blocked_query,
+ blockedl.mode AS blocked_mode,
+ blockinga.pid AS blocking_pid,
+ blockinga.query AS blocking_query,
+ blockingl.mode AS blocking_mode
+ FROM (((pg_locks blockedl
+ JOIN pg_stat_activity blockeda ON ((blockedl.pid = blockeda.pid)))
+ JOIN pg_locks blockingl ON ((((blockingl.transactionid = blockedl.transactionid) OR ((blockingl.relation = blockedl.relation) AND (blockingl.locktype = blockedl.locktype))) AND (blockedl.pid <> blockingl.pid))))
+ JOIN pg_stat_activity blockinga ON (((blockingl.pid = blockinga.pid) AND (blockinga.datid = blockeda.datid))))
+ WHERE ((NOT blockedl.granted) AND (blockinga.datname = current_database()));
+
+
+--
+-- Name: AlertCategory id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."AlertCategory" ALTER COLUMN id SET DEFAULT nextval('public."AlertCategory_id_seq"'::regclass);
+
+
+--
+-- Name: AlertDefinition id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."AlertDefinition" ALTER COLUMN id SET DEFAULT nextval('public."AlertDefinition_id_seq"'::regclass);
+
+
+--
+-- Name: AlertEventType id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."AlertEventType" ALTER COLUMN id SET DEFAULT nextval('public."AlertEventType_id_seq"'::regclass);
+
+
+--
+-- Name: CapabilityCategory id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CapabilityCategory" ALTER COLUMN id SET DEFAULT nextval('public."CapabilityCategory_id_seq"'::regclass);
+
+
+--
+-- Name: CapabilityProperty id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CapabilityProperty" ALTER COLUMN id SET DEFAULT nextval('public."CapabilityProperty_id_seq"'::regclass);
+
+
+--
+-- Name: DeviceProperty id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceProperty" ALTER COLUMN id SET DEFAULT nextval('public."DeviceProperty_id_seq"'::regclass);
+
+
+--
+-- Name: FormulaProperty id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."FormulaProperty" ALTER COLUMN id SET DEFAULT nextval('public."FormulaProperty_id_seq"'::regclass);
+
+
+--
+-- Name: InterfaceProperty id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."InterfaceProperty" ALTER COLUMN id SET DEFAULT nextval('public."InterfaceProperty_id_seq"'::regclass);
+
+
+--
+-- Name: InterfaceType id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."InterfaceType" ALTER COLUMN id SET DEFAULT nextval('public."InterfaceType_id_seq"'::regclass);
+
+
+--
+-- Name: PropertyType id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."PropertyType" ALTER COLUMN id SET DEFAULT nextval('public."PropertyType_id_seq"'::regclass);
+
+
+--
+-- Name: SubUser id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."SubUser" ALTER COLUMN id SET DEFAULT nextval('public."SubUser_id_seq"'::regclass);
+
+
+--
+-- Name: WorkOrderType id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."WorkOrderType" ALTER COLUMN id SET DEFAULT nextval('public."WorkOrderType_id_seq"'::regclass);
+
+
+--
+-- Data for Name: Accessory; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Accessory" (id, name, url, "createdAt", "updatedAt", "workOrderId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: Account; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Account" (id, balance, "createdAt", "updatedAt", "userId") FROM stdin;
+59974bd8-c072-4e19-aacc-e8412034ce55 0 2017-08-14 13:52:03.382+08 2017-08-14 13:52:03.382+08 77804162-837d-4ff9-96c0-beb8e8888f8e
+\.
+
+
+--
+-- Data for Name: AccountServicePackage; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."AccountServicePackage" (id, name, price, specification, "initialSpecification", "beginTime", "endTime", "createdAt", "updatedAt", "accountId", "servicePackageId") FROM stdin;
+c025d854-93b2-4077-8def-81a12c2c3201 企业版 5999900 {"resources":{"interface":{"viewType":1,"available":true,"name":"接口","desc":"您可以创建多少个接口","quota":1000,"unit":"个","extend":""},"protocol":{"viewType":1,"available":true,"name":"协议","desc":"您可以创建多少条协议","quota":1000,"unit":"条","extend":""},"device":{"viewType":1,"available":true,"name":"设备","desc":"您可以创建多少个设备","quota":1000,"unit":"个","extend":""},"thing":{"viewType":1,"available":true,"name":"Thing","desc":"","quota":987,"unit":"个","extend":""},"rule":{"viewType":1,"available":true,"name":"规则","desc":"您可以创建多少个规则","quota":999,"unit":"个","extend":""}},"server":{"times":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":2000000,"unit":"+次/月"},"frequency":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":200,"unit":"+次/秒"},"s1":{"viewType":1,"available":true,"name":"工单响应","desc":"","quota":15,"unit":"分钟","extend":"内"},"s2":{"viewType":2,"available":true,"name":"7×10技术支持","desc":""},"s3":{"viewType":2,"available":true,"name":"7×10客户服务"}}} {"resources":{"interface":{"viewType":1,"available":true,"name":"接口","desc":"您可以创建多少个接口","quota":1000,"unit":"个","extend":""},"protocol":{"viewType":1,"available":true,"name":"协议","desc":"您可以创建多少条协议","quota":1000,"unit":"条","extend":""},"device":{"viewType":1,"available":true,"name":"设备","desc":"您可以创建多少个设备","quota":1000,"unit":"个","extend":""},"thing":{"viewType":1,"available":true,"name":"Thing","desc":"","quota":1000,"unit":"个","extend":""},"rule":{"viewType":1,"available":true,"name":"规则","desc":"您可以创建多少个规则","quota":1000,"unit":"个","extend":""}},"server":{"times":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":2000000,"unit":"+次/月"},"frequency":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":200,"unit":"+次/秒"},"s1":{"viewType":1,"available":true,"name":"工单响应","desc":"","quota":15,"unit":"分钟","extend":"内"},"s2":{"viewType":2,"available":true,"name":"7×10技术支持","desc":""},"s3":{"viewType":2,"available":true,"name":"7×10客户服务"}}} 2019-07-05 14:42:23.788+08 3017-07-04 14:42:23.788+08 2019-01-24 14:53:26.217+08 2020-04-13 15:16:13.243+08 59974bd8-c072-4e19-aacc-e8412034ce55 0e63fe1b-20db-4bf5-802e-37a260efd075
+\.
+
+
+--
+-- Data for Name: AlertCategory; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."AlertCategory" (id, name, "desc", "createdAt", "updatedAt") FROM stdin;
+1 连接状态 反映设备与iOTA的连接状态 \N \N
+2 数据采集 反映iOTA通过设备采集数据或设备上报数据的状态 \N \N
+3 数据处理 反映数据处理的状态 \N \N
+\.
+
+
+--
+-- Name: AlertCategory_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public."AlertCategory_id_seq"', 1, false);
+
+
+--
+-- Data for Name: AlertDefinition; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."AlertDefinition" (id, key, name, "desc", severity, "createdAt", "updatedAt", "alertEventTypeId", "alertCategoryId") FROM stdin;
+1 LinkStatus 设备掉线 设备与iOTA连接中断 1 \N \N 1 1
+2 DacError 采集异常 设备数据采集异常 2 \N \N 1 2
+3 OutOfRange 数据超量程 设备数据超过设备量程范围 3 \N \N 1 3
+202 DoorOpenTooLong Door Opened Time Too Long Door Opened Time Too Long 1 \N \N 1 3
+203 TemperatureLevel2 Temperature Alert(Level 2) Temperature Alert(Level 2) 2 \N \N 1 3
+204 TemperatureLevel1 Temperature Alert(Level 1) Temperature Alert(Level 1) 1 \N \N 1 3
+201 DoorOpen Door Opened Door Opened Notification 3 \N \N 1 3
+\.
+
+
+--
+-- Name: AlertDefinition_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public."AlertDefinition_id_seq"', 1, false);
+
+
+--
+-- Data for Name: AlertEventType; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."AlertEventType" (id, name, "desc", "recoverMode", "createdAt", "updatedAt") FROM stdin;
+1 可恢复的事件 可恢复的事件 Recoverable \N \N
+2 不可恢复的事件,仅记录 该类事件作为历史告警保存 Notification \N \N
+3 不可恢复,需人工介入的事件 该类事件保持当前告警状态,需运维人员进行确认处理 NeedConfirm \N \N
+\.
+
+
+--
+-- Name: AlertEventType_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public."AlertEventType_id_seq"', 1, false);
+
+
+--
+-- Data for Name: Authorization; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Authorization" (id, "createBy", "createdAt", "updatedAt", "userGroupId", "resourceGroupId", "roleId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: CapabilityCategory; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."CapabilityCategory" (id, name, image, "desc", "createdAt", "updatedAt") FROM stdin;
+1 诊断 \N \N 2017-08-12 17:07:00.481+08 2017-08-12 17:07:00.481+08
+2 控制 \N \N 2017-08-12 17:07:00.485+08 2017-08-12 17:07:00.485+08
+3 采集 \N \N 2017-08-12 17:07:00.487+08 2017-08-12 17:07:00.487+08
+\.
+
+
+--
+-- Name: CapabilityCategory_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public."CapabilityCategory_id_seq"', 3, true);
+
+
+--
+-- Data for Name: CapabilityFormula; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."CapabilityFormula" (id, properties, "createdAt", "updatedAt", "capabilityId", "formulaId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: CapabilityMeta; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."CapabilityMeta" (id, name, image, "desc", "createdAt", "updatedAt", "deviceMetaId", "capabilityCategoryId", "protocolMetaId") FROM stdin;
+a318fba6-92d9-4d50-8a3a-1662c9b24fb9 采集 \N 2018-01-09 11:04:36.182+08 2018-01-09 11:04:36.182+08 6039a6d8-af54-411e-a520-451b20b6d089 3 \N
+e7076b85-5fa8-4f26-bd92-35fd6a802b26 采集 2018-01-12 11:27:20.215+08 2018-03-21 16:05:10.216+08 99978bc0-b3c7-4ba1-9064-723c2c13b95f 3 5244cf99-a9db-4e29-9126-f4b6c786dba6
+9a5459f7-7499-41f5-87d2-e55b430a9134 采集 2018-01-16 10:34:03.65+08 2018-01-16 10:34:03.65+08 70177dd0-b5ab-45c0-8338-a6f69138f85f 3 45e683e6-d49b-4b16-af85-607be4509fe5
+efab5ad9-0126-4a8f-a0b1-35e21e77c0f1 采集 2018-01-16 10:34:03.981+08 2018-01-16 10:34:03.981+08 72b0bf25-78ae-4ab5-995b-c83cfbf52484 3 45e683e6-d49b-4b16-af85-607be4509fe5
+9cbbc8b3-67dd-400f-95c4-31f2f9814062 采集 2018-01-16 10:34:04.391+08 2018-01-16 10:34:04.391+08 0bae88b4-e518-4869-96ea-c833160a9914 3 45e683e6-d49b-4b16-af85-607be4509fe5
+cffeb47c-0a8b-48d4-974a-d3d12d22a5f9 控制能力 \N 控制能力 2018-01-19 16:19:33.3+08 2018-01-19 16:19:33.3+08 8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812 2 a5f3b3b0-2db7-446a-8642-c844f6560d52
+86b95247-634a-44af-8af0-b047a5f10f5d 采集 2017-08-24 20:03:54.297+08 2017-08-24 20:03:54.297+08 38d818a3-1e2d-42bd-af74-e6ed5fe0c8fd 3 6026c019-d4d7-4a8e-969e-03ca957ba814
+558e2b4d-a2dc-443a-98e5-142e99791b74 采集 2018-01-23 14:02:27.111+08 2018-01-23 14:02:27.111+08 85ba72e3-3754-4b11-a144-757d7a01f1dc 3 030de29c-d4cb-4747-9885-3a81f9cf61ba
+e1d1f6d5-ffa4-4ad6-b314-d49a9c25735b 采集 2017-08-26 15:45:06.829+08 2017-08-26 15:45:06.829+08 d51cfe97-0f8a-4f38-95fb-34208b171056 3 82cb0db7-6181-419c-8c52-a6b5e01e6c49
+aa48a11a-b276-4670-bc85-8c69368a7def 采集 2017-08-26 15:51:32.553+08 2017-08-26 15:51:32.553+08 131c98fc-2216-4f0f-9cd3-581d88f9affd 3 e24c947d-eeba-4895-bad5-f1a03b48bfc7
+c631534f-fef5-4db4-b5c2-e7cb081db305 采集 2018-01-23 15:00:11.836+08 2018-01-23 15:00:11.836+08 cb4eb310-0876-492a-9e06-8cd0a5542c5b 3 \N
+7fab5981-f265-41b6-b77c-36ac36a17a85 环境噪声 \N 2017-08-28 19:16:22.982+08 2017-08-28 19:16:22.982+08 180c854a-5ace-4044-babd-b270f98fde6b 3 \N
+e232591d-9a18-42c9-a7a4-dad82336325d 采集 \N 2017-08-28 20:28:53.77+08 2017-08-28 20:28:53.77+08 9e8050a9-f38a-45c3-a02b-40670bdf19b7 3 a45d8866-5e4f-48fc-a646-8462d4a516a6
+a5866031-3267-4c41-97d2-0c8eeff1baab 采集 \N 2017-08-28 20:54:17.757+08 2017-08-28 20:54:17.757+08 193a9dcf-959d-4cd5-a186-637c11ae97a0 3 22419cd8-d0d1-4f79-92f4-17976bd5dd42
+9486f04c-16ee-42bb-9f4b-485632a1857e 采集 2018-01-23 15:32:11.05+08 2018-01-23 15:32:11.05+08 1c332609-ad1d-4066-b0fa-67df29181432 3 a2497ec0-71a1-4611-85eb-12a18c8aaa34
+11450ef7-f0d4-4947-acd3-d1f7afd85e0d 采集 \N 2017-08-28 21:24:47.329+08 2017-08-28 21:24:47.329+08 b3f251c1-ab5e-4427-8b38-9180d6544783 3 6961f5ca-3d77-4944-921f-d4bf6d757bce
+06cd5938-5a30-4ca3-910e-b174b900daff 电量 \N 2017-08-28 22:07:49.312+08 2017-08-29 11:49:32.525+08 180c854a-5ace-4044-babd-b270f98fde6b 3 \N
+394f3594-52f4-472a-9078-081172abaaae 采集 2017-09-08 09:20:57.959+08 2017-09-08 09:20:57.959+08 f9cf9002-bdbd-458c-8534-37db6183e217 3 a2497ec0-71a1-4611-85eb-12a18c8aaa34
+38b407d6-2d46-46be-bb4d-9d0c6e673051 采集 \N 沉降位移 2017-08-31 17:03:40.521+08 2017-08-31 17:09:14.384+08 39dc1e20-9e5e-4776-8459-5354261926fd 3 44a576ba-470c-4115-8e33-f2a80145060c
+6fbdae8b-7c5b-4125-8df3-4d9bef10997a 采集 2018-01-24 11:32:24.986+08 2018-01-24 11:32:24.986+08 50600703-5c4c-4ceb-a44d-d0b79882b1dc 3 \N
+afcc8d5f-3e9e-4ee3-a93e-135a41569846 采集 \N 主动上传 2017-09-09 15:51:50.173+08 2018-03-19 17:10:31.998+08 cf03d97a-0c99-494f-821d-da2dc02126dc 3 b56416f5-1d0a-447a-b178-90e538da66fe
+c4a77a9d-c2ff-4de9-bbc9-36fe8bba8a5e 采集 \N 2019-12-05 15:45:15.352+08 2019-12-05 15:45:15.352+08 ff8195ce-78e0-4668-81bb-8f26e83411a9 3 9da84987-2b74-4e21-b24c-98592f025778
+8b897f24-accb-4630-b1fa-e408e358fd35 风速 2017-09-04 14:12:42.502+08 2018-07-09 15:29:49.994+08 1d4b6c8a-8a37-4ba0-9612-ad63ea6f1f3a 3 2e0c0a7c-01b1-4cb8-8f27-efec39b787ca
+753c5c99-5da6-4172-9173-492353bb0533 采集 2017-09-02 14:47:06.947+08 2017-09-02 14:47:06.947+08 28abcb7f-eb40-406b-a798-fc280b30638e 3 1fb03ffc-fd93-4ea6-bf06-11311a655212
+3c90cbd4-1398-4e10-b930-11e414495e2f 采集 2017-09-02 14:59:34.584+08 2017-09-02 14:59:34.584+08 0a25e0b7-784b-46fb-8fa3-d1a99593f343 3 872da9a0-9b0f-48d0-9767-c090a8d895af
+cbca938f-e317-4e23-a721-4f2b7b54a827 采集 2017-09-04 09:36:21.64+08 2017-09-04 09:36:21.64+08 c9946e27-bce7-41eb-b341-d6b03a7f115f 3 7c734114-6fa7-41a5-8f0c-ce0940aded18
+27235845-4d19-4dfa-adc8-4f7b84233022 采集 2017-09-09 11:32:45.954+08 2018-07-04 12:32:25.272+08 b56e401a-75e7-47ea-84db-6638fd421792 3 bf0f9241-ed4f-4e99-83c6-8160c16313ea
+2f698b72-9c05-42fe-a0e9-3224917239aa 采集 2017-09-04 19:04:13.359+08 2017-09-04 19:04:13.359+08 a0bf9003-9dbd-4cc7-8bea-7da81ce69f32 3 7a9b4886-a218-4e10-b299-5a6a13496bbf
+8f438749-6713-4139-86ef-08d02243f962 采集 2017-09-04 20:41:19.218+08 2017-09-04 20:41:51.199+08 ed599be6-4811-4a09-a065-4b29586a4c00 3 6ea8f5c8-9394-4626-a6cf-1816ec45201d
+0e235516-0320-49a5-91e7-a70282c3bb70 采集 2017-09-05 10:54:48.261+08 2017-09-05 10:54:48.261+08 9604d366-28f8-4291-a5bd-5d049b1e90eb 3 526f9775-e8e0-4d37-ac18-304e20c79c6a
+12aa80e0-acfc-43e1-85c9-9cbabe6fa2ee 采集 2017-08-26 15:59:26.862+08 2017-09-05 11:07:01.214+08 9110f259-e269-446d-afa3-798069f4534d 3 \N
+abcd5e24-44d0-47ba-95db-9bdfab8d2d92 采集 2017-09-06 18:47:18.572+08 2017-09-06 18:47:27.057+08 584a210b-20f2-49cf-906a-9d6b4883af09 3 00bf4878-0815-4bbf-bca6-8115561ffeaf
+f02e6117-3fda-43f0-b465-8f5961e08bed 采集 \N 2017-09-06 19:35:19.119+08 2017-09-06 19:35:19.119+08 8e782506-4bab-4798-9e24-315107e3cc15 3 dce56237-048b-4d44-a741-069f30b89674
+1637283e-980c-4ed8-8cf3-71e794c45bb2 采集 采集光照 2017-09-06 20:01:37.367+08 2017-09-06 20:01:37.367+08 05d70310-6689-4174-b4ae-274ab5e8f287 3 f62c8865-7064-4630-8ad6-60d29b34310d
+eea54bd1-3ede-4ab6-b07d-8b1f58292efc 采集 2017-09-07 14:40:21.325+08 2017-09-07 14:40:21.325+08 0c5bca0d-95b8-416e-865b-1f09bb49285f 3 9dbee489-45fe-4387-8e66-e1b7a6c9608e
+12de1b06-528f-42a2-8174-daa14d29506d 采集 \N 2017-09-07 20:32:02.664+08 2017-09-07 20:32:02.664+08 77d3bafd-4986-4848-b3c9-dfe847c6750e 3 ed3bd325-ddc9-45f1-becc-616d8d57d528
+62a1a275-a6d3-44b4-b472-901f274afaaa 采集 2017-09-08 17:28:38.388+08 2017-09-08 17:28:38.388+08 96870c78-2ed9-4141-9438-e9415cd6eeb8 3 4282373a-95d9-4b6e-97de-73fdd0b03407
+bda64c7e-58cc-4668-8f46-8d08be815f1a 采集 2017-09-09 14:39:09.814+08 2017-09-09 14:39:09.814+08 ae93a369-2ef8-4e20-83d6-d2f89076b115 3 33386019-d751-44bb-b39d-198ba7d892ff
+368cf5ab-5455-422a-a659-ba613b272684 采集 2017-09-11 20:33:20.853+08 2017-09-11 20:33:20.853+08 497ca51c-dd0a-46cb-8651-ac4bb7bd45c0 3 0571b781-2713-4381-a8d3-3e54717eb15a
+6e5f9207-905d-4732-bb07-89e21da54dd1 采集 2017-09-12 17:44:24.681+08 2017-09-12 17:44:24.681+08 c7528fab-94f4-4110-9aaf-8964afa09c20 3 9d569abf-b544-4bd5-907a-218ea77f580b
+b71b35e9-7756-46e1-84c8-d8c092029638 采集 2017-09-12 17:44:48.573+08 2017-09-12 17:44:48.573+08 003540d0-616c-4611-92c1-1cd31005eabf 3 9849a791-5487-439b-a063-f7691ed40bfc
+e8a19dbd-26d3-49a0-87b6-8248ceb6fc53 测斜 2017-08-12 17:30:28.178+08 2017-11-15 11:18:38.553+08 990ac51b-201f-4818-8ac0-06e9997719ed 3 7e1e8da3-20b2-4657-bfa2-7a39b17fdd6b
+e5bbfc36-064a-45ac-adf0-2003947dd2c4 采集 2017-09-12 17:57:39.268+08 2017-09-12 17:57:39.268+08 ab34de76-f758-4311-8bfc-dc7054a58ecf 3 65b7fa36-3a28-48e9-9f56-20d2277d7a63
+c59b78f5-1913-43de-8355-67d4c34b662a 采集 2017-09-12 18:08:25.111+08 2017-09-12 18:08:25.111+08 65bd339b-0469-4019-8c96-55a6dbc6b697 3 cf7c40e3-05b5-4080-9814-8daf77e75127
+548cf988-bee3-40cd-b3b9-5d7d2da91605 采集 2017-09-12 19:48:22.309+08 2017-09-12 19:48:22.309+08 a8a32974-fa53-4e18-a264-58c885d3c409 3 f3220830-3911-472f-a168-49c2e6be4264
+d4a43ecd-43b6-4232-a482-16e675aadb59 测距 \N 2017-09-12 20:28:42.054+08 2017-09-12 20:28:42.054+08 5bc92012-60a1-48ac-840f-575cb4e94c48 3 37eb4d94-3143-426f-bb36-bbb57cc647b5
+d0fd7335-0b93-4716-9793-e95ae31f1765 采集 2017-09-13 09:13:35.772+08 2017-09-13 09:13:35.772+08 d523046b-7e32-486b-a1ab-cac779eb6209 3 018f9be4-aa05-45e1-9fbe-ef52acd6970e
+1108a01e-cf7e-4407-be7a-85cf6851ca6d 采集 2017-09-13 10:00:10.879+08 2017-09-13 10:00:10.879+08 e833a38c-2409-474d-8d23-86ff4d45b199 3 410e53eb-787b-4897-8eb9-5c48e5268fbe
+926a081e-9ed3-4bab-a8d1-c556a8be9404 采集 \N 2018-01-09 11:10:39.249+08 2018-01-09 11:10:39.249+08 5c1ff344-5845-4376-8ea0-1ac8d45d9f3c 3 \N
+31983eec-ccfb-4540-8ab1-12b5b3c8eeb2 采集 2017-09-14 14:34:58.931+08 2017-09-14 14:36:06.197+08 eccb6310-f340-4668-9469-3df210aa471d 3 cfb93ff0-1f09-49fb-98a7-71bcc7116084
+32d914f1-c9e2-402c-b81f-3805e8f60e60 采集 2017-09-14 14:41:42.378+08 2017-09-14 14:41:42.378+08 6850f742-c5b7-4984-b1ef-d01b16015eb9 3 476e231d-d7b8-49da-bc07-0b0dd084b5d3
+bbb36e1c-2e68-4274-881d-77618b327419 采集 2017-09-14 14:47:52.165+08 2017-09-14 14:47:52.165+08 ac3a0caf-7018-44d2-9337-32c7194ec412 3 d0b9cd23-81cd-4990-9b9a-5e38b382d587
+806a1583-b6da-4e6d-89f9-419fad701d56 采集 2017-09-14 14:50:50.805+08 2017-09-14 14:50:50.805+08 a96f169e-56b9-49c8-a5cd-caade25fbf14 3 d0b9cd23-81cd-4990-9b9a-5e38b382d587
+b640dd61-c4cb-4b47-af2d-fc9a2284f407 采集 2017-09-14 14:53:06.104+08 2017-09-14 14:53:06.104+08 3415a2e9-2c44-402f-872c-f0187cef058f 3 d0b9cd23-81cd-4990-9b9a-5e38b382d587
+ed246dd4-64be-4a48-a869-c4de71bbb2b6 采集 2017-09-14 17:27:01.213+08 2017-09-14 17:27:01.213+08 cdf69820-94cb-45a3-acfe-21aa83737595 3 b31c1a66-c65d-437f-b635-6f7aa32cf0e4
+4a08b319-23f2-4854-ad86-755792e575d4 采集 2017-09-14 19:08:55.126+08 2017-09-14 19:08:55.126+08 55d8d331-c61d-4523-886d-2d69f350cde0 3 75267b8b-deeb-49a4-b3f8-0c775ea41cb0
+675bed44-95cd-4c66-890c-97fd1ffb3cd9 采集 2017-09-14 19:37:28.694+08 2017-09-14 19:37:28.694+08 2078f06f-be3c-4d10-90b1-200f3bdb00ae 3 cda82375-e0ae-4f55-97b2-47d867221b9b
+64bf5540-28ff-480e-9225-c13af83a12bc 采集 2017-09-14 20:24:32.014+08 2017-09-14 20:24:32.014+08 92597060-2385-438d-8a9e-25fee05e4e31 3 277490e2-f0f8-4aa6-b04a-0b05a1466059
+7e142a42-bfc3-472c-8c56-ef90d2964c67 采集 2017-09-14 20:36:40.093+08 2017-09-14 20:36:40.093+08 80dbb37c-0408-4a0b-8ef5-dc1acd7c303b 3 d3cd6277-96e5-4811-af48-ff6f141b2fe6
+cb38bec9-e2e2-4a58-8bf5-b730c85910b3 采集 2017-09-16 12:22:16.72+08 2017-09-16 12:22:16.72+08 0357e07d-3afb-4d4b-b196-766688a5b2b2 3 1a60f41c-f6df-43a2-98f6-6b4d908caaba
+c9f6eadb-715b-4ad3-9354-fcfe2735ba5a 采集 \N 2017-09-16 14:19:05.245+08 2017-09-16 14:19:05.245+08 831ab1f7-fe76-4152-b7a0-3359bdf7c3bd 3 ce984e5a-5697-4b5f-bc51-fef9a07f2d1e
+33bc9e2c-5131-4c06-836f-79051ffccb1e 采集压力 2017-09-16 15:21:21.452+08 2017-09-16 15:21:21.452+08 eb1c1781-cea9-411f-8c15-39aafc8ee62c 3 bda73ab5-87db-4bba-a807-ddc03a8b2a4b
+797175f9-4873-4010-8299-cb4ce6a3e386 采集 2017-09-16 16:10:09.737+08 2017-09-16 16:10:09.737+08 aa9f0751-4576-42b2-b09b-a6c3959955df 3 ee31c052-3056-4021-aaa5-3f0caa4d73ee
+2b50fea6-1651-43d8-8e42-2faca6f3d3ac 采集 2017-09-18 20:53:58.4+08 2017-09-18 20:53:58.4+08 6f16c6fa-6d60-481b-95ec-e450227fe268 3 58991e17-c7c2-420e-b1a5-525a0e4d62a6
+30898650-f0f5-46dc-adad-62e86317d96b 采集 \N 2017-09-18 21:06:35.749+08 2017-09-18 21:06:35.749+08 34e17d2c-cfa7-42a7-88d0-fc64f13f68c2 3 7bd91ff4-9649-4345-abc5-69e305a0738a
+153bec2e-1a9a-428d-a5f6-8ff6a5b85fa0 能力 2017-09-19 16:23:55.244+08 2017-09-19 16:23:55.244+08 98a8fd6f-cab9-47d3-88aa-8832962c931c 3 914cafcd-4123-47c7-9dc7-392c91427b17
+66c8cd90-726f-42dd-afd8-2aa08f68a71f 采集 2017-09-19 20:20:53.739+08 2017-09-19 20:20:53.739+08 7e6111e8-0a68-4af8-92ae-6238b7f3c631 3 45e683e6-d49b-4b16-af85-607be4509fe5
+01a3d220-4d3f-45c9-96f8-39d2cbbf8ef5 采集 2018-01-16 09:44:42.415+08 2018-01-16 09:44:42.415+08 c02185df-1224-4e63-aab4-3d284c8bb526 3 45e683e6-d49b-4b16-af85-607be4509fe5
+c0659a78-00c3-480d-a385-21a57e7eba37 采集 2017-09-20 16:26:18.708+08 2017-09-20 16:26:18.708+08 c094bbbe-bc2a-4223-bba7-539edb03d3b0 3 2a7d59b8-3a15-40f5-ad27-2f289da1dfa5
+523d0a38-7b6b-4808-94b0-63bb477e7ead 采集 2017-09-21 10:57:18.455+08 2017-09-21 10:57:18.455+08 1c210656-dc67-470f-b8c3-d653c82e3bb0 3 74e538ac-294f-4037-8cc3-3720305c80c4
+9e159552-fb77-4196-aea1-d7e9f88fcbbc 采集 2017-09-22 17:34:24.767+08 2017-09-22 17:34:24.767+08 fd3ad887-4a33-4d80-b3bb-d5d48ced0e7b 3 f59cbddd-927c-47e7-97d6-964d8abdd184
+13cc9f05-5d98-4778-93a9-a423b70250a7 采集 2017-09-25 10:44:21.677+08 2017-09-25 10:44:21.677+08 d3245ff1-0781-49bd-b37c-e245a350a709 3 814665db-0ede-4cc6-90de-ac291cdbf814
+8092619d-978e-402a-9aa1-897cb718a39b 采集 2017-09-25 10:54:34.182+08 2017-09-25 10:54:34.182+08 3bf186e9-5049-40e4-ba57-b40d90cd1543 3 2dffaa68-111b-4b1d-89c4-2a14a6b8c64e
+05c849f0-63f3-4d19-97bf-f22e655c0852 采集 2017-09-25 19:45:57.21+08 2017-09-25 19:45:57.21+08 6f1f679a-d9b7-4fe3-945d-8b83105284a8 3 cf4c0e24-9798-4c40-af39-b680721eb626
+7795f990-07c0-4953-aab6-8af73f1bf2d2 采集 2017-09-25 20:40:46.382+08 2017-09-25 20:40:46.382+08 ca7ff65b-b5a0-49f3-ad0b-6821012604ce 3 93c70807-ebbf-4b88-b0b9-0232cca98b69
+46e0602d-85be-45f3-99cd-4a9a0ec8c3f0 噪声 2017-09-26 10:30:13.278+08 2017-09-26 10:30:13.278+08 1c909cc1-bb51-4e83-824c-31fb278ce026 3 3675fa64-2747-4043-98d6-fdee3bfd7e89
+e146e8c0-39b3-4922-b153-21492123982d 采集 2018-01-16 10:33:58.394+08 2018-01-16 10:33:58.394+08 e47f8159-ee4b-45c0-b827-30b69d0328d8 3 45e683e6-d49b-4b16-af85-607be4509fe5
+8d3ad66f-9a24-4adb-99de-1b86ae3e5d46 采集 2018-01-16 10:33:59.646+08 2018-01-16 10:33:59.646+08 ff38a597-0318-47bb-a647-5ad78dd2dca8 3 45e683e6-d49b-4b16-af85-607be4509fe5
+72037569-7638-4b93-9212-ba15109f9afb 采集 2017-09-29 15:08:42.953+08 2017-09-29 15:08:42.953+08 be246ea1-fd75-4151-92c6-54b278d11287 3 c3ff71d9-c748-4bb8-a264-c8c2ce35c061
+755904b4-158d-413b-bc84-ad489380caf2 1312 4444444444444444444 2017-09-30 11:42:38.225+08 2017-09-30 11:43:04.33+08 cbc19e42-a8ba-4a12-83f9-6ef1469df546 2 \N
+d54fb237-1da2-40a1-9a83-e4a2dc8eecff 阿道夫 2017-10-07 20:50:21.564+08 2017-10-07 20:50:21.564+08 6d1f494d-6e60-4181-85ee-115ea3586c6d 3 \N
+40c5fafd-6377-439c-bc26-6e7eb069f3c1 振弦频率采集 \N 2017-10-23 10:40:53.502+08 2017-10-23 10:40:53.502+08 6888837c-236d-4a0a-871e-ea506429a386 3 \N
+9b5c5f27-ebad-42e1-8586-405066f03c1d 采集 \N 2017-10-31 15:08:02.597+08 2017-10-31 15:08:02.597+08 abb38d23-09f3-48fc-b9ee-4dfaf1db995b 3 97b6dd76-4b4c-42e7-88a4-52e338aab627
+32ccecbf-6cc2-4076-9f31-9541382b444a 采集 2017-10-31 16:29:27.915+08 2017-10-31 16:29:27.915+08 8ae3c80d-72ae-4e4f-b6e7-fd2dda6cc125 3 fffec7fc-706e-4f38-bb9e-8a6b284d28bf
+cbd4f0c1-9be1-4123-8fff-9d16d6f163a3 abc-测斜 2017-10-31 18:02:48.584+08 2017-10-31 18:02:48.584+08 f5e0fd8e-6d70-4dd7-830f-42efadf389f5 3 8267e518-0c87-4bf5-8d35-364229aa6076
+2e7a1db8-dd48-47e0-87d0-023cd2b9ff08 风速风向采集 2017-09-14 20:56:17.182+08 2017-12-08 08:40:33.68+08 fd8e5a82-2b93-4d83-9132-4666b974079d 3 71f0c6f5-2830-448a-8bf4-d4992c8cee9a
+e87c4f0a-877a-4865-98c6-bca08f38164b 采集 \N 2017-09-19 20:40:30.242+08 2017-12-08 10:08:19.226+08 d32b2513-a8bb-465c-aabf-0832f355ef6b 3 ef1d82db-d7d3-4d0e-894c-63cf0bd389ae
+f4bf34ce-15d4-402f-a4d4-8e307936393d 采集 \N 2018-01-09 11:31:58.817+08 2018-01-09 11:31:58.817+08 92bad770-f845-4bd8-8e2b-55e5343a2201 3 \N
+62f4f7c3-95a8-49d9-a5d1-c8f432c8d598 采集 2017-11-06 11:16:45.201+08 2017-11-06 11:16:45.201+08 c52cea56-d5aa-4b14-ad9f-05fb6974e528 3 31484d44-4700-4d3e-87ad-19cdd440d7cd
+8e034647-583f-43a4-9aa1-1291e5bd3b0d 采集 2017-11-06 15:04:16.817+08 2017-11-06 15:04:16.817+08 43e2a07a-c33e-4e54-ba5e-0a948ae4ba61 3 31484d44-4700-4d3e-87ad-19cdd440d7cd
+e265c046-3bc7-43b9-85d7-493bfd4c76d8 采集 \N 2017-11-10 14:15:21.209+08 2017-11-10 14:15:21.209+08 393862fc-cfec-404b-873d-c42f5e22bc61 3 0dc05dea-ad41-48eb-8f4b-4b2b20ae87fe
+96c5d707-f87c-4a33-a34e-4094c74b8cea 采集 2017-11-16 13:50:55.927+08 2017-11-16 13:50:55.927+08 cff552ac-d565-4a44-8400-e0f4382ce853 3 bb630bcd-5a32-416d-b6e2-9d0bd0eab954
+80773b73-3653-4506-8298-8dfcb4865a90 采集 2017-11-16 17:03:23.917+08 2017-11-16 17:03:23.917+08 f86c7d29-f504-474d-8665-d484e5c41e8a 3 666451eb-2cea-4777-83de-e5d671a5be5f
+28802bd7-d538-4d62-8a84-87a3e3f5c9d3 采集 2019-12-06 10:18:48.769+08 2019-12-06 10:18:48.769+08 82d07222-1b08-4fa5-85bb-790f4dc24def 3 \N
+5e0f1662-8477-42af-9c5a-ae89e5c992c1 采集 2017-11-20 16:42:59.967+08 2017-11-20 16:42:59.967+08 3f80f427-4615-44ae-b2e8-e783733d0ea5 3 5379ca6c-1ae1-4730-a1b3-913ac968ef88
+3c4f26a5-6ee8-410b-b9d2-1e114b7f71b2 采集 2017-11-21 15:57:22.482+08 2017-11-21 15:57:22.482+08 dfbedf15-8cef-4760-9cad-efaab883db3d 3 aa079e43-4dfe-40f0-81f7-03b3d30d9082
+eb818780-0ef4-4fd6-9b77-64d3c96493c4 采集 2017-11-23 10:44:01.176+08 2017-11-23 10:44:01.176+08 57bf451a-e6f5-4df5-a4a7-c2c42a46546f 3 598d9e9a-4e6f-4ce0-b6f0-1f2b825fb7fc
+7fa794ae-2b82-40df-9084-5d7b66236d50 采集 \N 2017-11-28 16:55:37.909+08 2017-11-28 16:55:37.909+08 fe65a1cd-2040-403c-bb6f-529d4063bc45 3 7a9b4886-a218-4e10-b299-5a6a13496bbf
+f8a92db3-4b55-47ec-a466-2d3c44e8b97d 采集 \N 2017-11-28 16:59:16.91+08 2017-11-28 16:59:16.91+08 f2c96428-649e-47e9-9b6f-e5749195cb33 3 7a9b4886-a218-4e10-b299-5a6a13496bbf
+25fa942f-2929-4429-85e1-e3deb8f728b0 采集 2017-11-29 09:23:59.558+08 2017-11-29 09:23:59.558+08 04cb319d-9e45-4534-8be6-5f1f4aef7740 3 46523fa3-833c-499c-b73e-3055e95fce65
+b767a3ea-663e-402a-82c0-ee964abae581 采集 2018-02-07 16:40:02.709+08 2018-02-07 16:40:02.709+08 aaa7d270-43dc-4864-bb0a-967c33658698 3 \N
+4bf64044-476d-4d5a-933e-5a493f1ee2e4 采集 \N 2017-11-29 11:50:29.737+08 2017-11-29 11:50:29.737+08 13126536-b6af-48d0-b43e-25144b65dd8d 3 00bf4878-0815-4bbf-bca6-8115561ffeaf
+3dad677f-3582-41e5-a77c-ea629f6974fe 采集 \N 2017-11-29 11:50:41.726+08 2017-11-29 11:50:41.726+08 0c5d070d-fb83-4f78-acc0-a0bd12be6cc2 3 00bf4878-0815-4bbf-bca6-8115561ffeaf
+7224902a-6cd1-4877-a92f-d8cb544d36ce 采集 \N 2017-11-29 11:51:02.629+08 2017-11-29 11:51:02.629+08 f3ad3df8-e1ad-4e05-b479-185ac5ae8602 3 00bf4878-0815-4bbf-bca6-8115561ffeaf
+06beef64-e140-4b7c-865d-64d043fcecc1 采集 \N 2017-11-29 11:51:14.15+08 2017-11-29 11:51:14.15+08 e8d9a100-9650-4afc-a260-9c7bcdea9263 3 00bf4878-0815-4bbf-bca6-8115561ffeaf
+8275461f-e7c3-4595-ae09-36a4288c65fd 采集 \N 2017-11-29 11:51:33.18+08 2017-11-29 11:51:33.18+08 d7912272-424d-4546-a3c1-43a24365dde0 3 00bf4878-0815-4bbf-bca6-8115561ffeaf
+71f3c15e-91d9-4044-ba95-66957d312dc8 采集 \N 2017-11-29 11:51:59.051+08 2017-11-29 11:51:59.051+08 91372b00-3bf7-4eb0-9495-ad544dfb04ca 3 00bf4878-0815-4bbf-bca6-8115561ffeaf
+857d5408-8cb5-4084-a7a3-ab0f9d3dd1da 采集 \N 2017-11-29 11:52:13.538+08 2017-11-29 11:52:13.538+08 0aae766a-5d82-479a-bd71-7eb1e0e4e20f 3 00bf4878-0815-4bbf-bca6-8115561ffeaf
+29f596e9-1ed7-49db-b932-0d436bef0d59 采集 \N 2017-11-29 11:52:23.997+08 2017-11-29 11:52:23.997+08 ac32d002-0463-4bc7-a307-86236e6307a7 3 00bf4878-0815-4bbf-bca6-8115561ffeaf
+90706e3b-13d8-4862-a1d4-3ace7d4a7b6e pressure \N 2017-11-29 15:29:19.952+08 2017-11-29 15:29:19.952+08 16ca7eed-6c64-4c4b-a495-6c5f785b86cd 3 00bf4878-0815-4bbf-bca6-8115561ffeaf
+c49b63f0-5fc2-41bb-ad27-231510dde4c0 采集 \N 2017-11-29 15:37:12.751+08 2017-11-29 15:37:12.751+08 3462227d-e989-421c-9f48-c0ae7a573b78 3 00bf4878-0815-4bbf-bca6-8115561ffeaf
+e6cd110e-7720-4d98-bf4b-655e7d545791 采集 \N 2017-11-29 15:43:22.292+08 2017-11-29 15:43:22.292+08 6bd546bc-55b0-4ee4-8b58-34feec8cdb6c 3 00bf4878-0815-4bbf-bca6-8115561ffeaf
+dd89b226-58f4-4509-9eb9-cf119be26a80 采集 \N 2017-11-29 15:47:36.252+08 2017-11-29 15:47:36.252+08 65f4e736-8261-40cc-b3b8-948ab0e4252e 3 00bf4878-0815-4bbf-bca6-8115561ffeaf
+0c5f1ed6-626c-4903-ba56-b99bb676bfc1 采集 \N 2017-11-29 15:52:10.67+08 2017-11-29 15:52:10.67+08 e015d9d3-542e-4d54-80c6-39db4ba20877 3 00bf4878-0815-4bbf-bca6-8115561ffeaf
+f124fe60-87de-429a-ae17-249d22ce2005 采集 2017-11-29 15:56:44.951+08 2017-11-29 15:56:44.951+08 24b365fd-4e6e-4800-ad48-d3f082c9b2b8 3 00bf4878-0815-4bbf-bca6-8115561ffeaf
+4211c278-30f5-4c53-ad81-d296e391b8db 采集 2017-11-29 16:58:58.193+08 2017-11-29 16:58:58.193+08 b3014b29-7547-4c85-a147-7ab37d6c328f 3 \N
+d3ea47f8-1472-484d-a6fc-411e6637a71b 采集 \N 2017-11-29 17:38:18.634+08 2017-11-29 17:38:18.634+08 5ce1bb8e-5512-48aa-9842-c5ea7754f340 3 \N
+5aa08735-2f16-4ca2-b9a3-dfbf95e1153d 采集 \N 2017-11-29 17:38:30.28+08 2017-11-29 17:38:30.28+08 6e9cc5a0-a0ab-49f5-bf77-13164ed09055 3 \N
+c71648f4-8926-4408-b731-937ce2b9db90 采集 2017-11-29 17:40:19.265+08 2017-11-29 17:40:19.265+08 5dcdefa3-da3c-4745-828c-d97fae30d82d 3 \N
+19e68163-a7e9-4be7-b9ae-6966035ac671 采集 2017-11-29 17:43:55.667+08 2017-11-29 17:43:55.667+08 55be82a9-bf1f-4e1d-bca3-d76fc60beca3 3 \N
+9bf06fea-f0b0-492f-9d2f-5ea749264883 采集 2017-11-29 17:46:58.805+08 2017-11-29 17:46:58.805+08 6629f27c-b28d-400b-9355-71e81a910b2b 3 \N
+8096b88c-dc64-4f26-8f04-6ac919d70447 采集 2017-11-29 17:49:21.402+08 2017-11-29 17:49:21.402+08 97463615-eb6e-4836-86a1-a282e935ed5d 3 \N
+67806ef3-539e-4cfc-932c-2b9fd5d49329 采集 2017-11-29 17:52:19.033+08 2017-11-29 17:52:19.033+08 cb9d01e5-2af8-48b2-b522-4f7ae3a9dc6e 3 \N
+17077adc-cfaa-428d-a6e5-346aa75678d9 采集 2017-11-29 17:55:29.413+08 2017-11-29 17:55:29.413+08 823921c0-40e3-46c6-809c-804adcf828ce 3 \N
+af851f6e-99a5-40e6-b8f1-e3ae9cc7fca2 采集 2017-11-29 17:57:56.259+08 2017-11-29 17:57:56.259+08 2420aadc-c220-4ce6-bfe9-c21d79ce827f 3 \N
+979e7ae3-520f-4bf4-b641-7451c30378c6 采集 2017-11-29 18:00:44.756+08 2017-11-29 18:00:44.756+08 bd742efe-04d8-4e90-9799-dd3830baf3ca 3 \N
+06a3c28a-b1d4-41cc-b291-aa2cd6682d60 采集 2017-11-30 13:55:54.582+08 2017-11-30 13:55:54.582+08 93f84dd4-087b-46ef-bdda-9db4adfdb16b 3 471b754b-0904-451b-96a3-a5e8c6a6ee2b
+d864e964-72fe-43e7-96a5-8e0a2079b731 Output 2017-11-30 15:01:46.314+08 2017-11-30 15:01:46.314+08 345d6324-7330-4d26-a786-a6823849f483 3 \N
+acb1f3e2-048a-4eb3-a01f-36e1f1968b4a 采集 2017-11-30 15:14:59.458+08 2017-11-30 15:14:59.458+08 40b8c657-2644-4ce2-b490-cf61523a4012 3 6026c019-d4d7-4a8e-969e-03ca957ba814
+2de4150f-19f7-4fff-9cb5-9d97226ded24 采集 2017-11-30 15:18:38.816+08 2017-11-30 15:18:38.816+08 e889420f-f8d0-4e0d-aab2-1f2f965e75bb 3 6026c019-d4d7-4a8e-969e-03ca957ba814
+6d7fdfc9-5735-4b35-85f6-238e34c241a0 云采集 \N 2018-03-08 20:02:08.209+08 2018-07-18 09:58:33.268+08 9e8050a9-f38a-45c3-a02b-40670bdf19b7 3 \N
+2580380e-6175-4c59-829a-f4f2c36d4af2 采集 \N 裂缝采集 2017-11-17 09:34:17.992+08 2018-11-26 11:44:27.328+08 a300435b-3982-4694-aab4-48ba853d838e 3 \N
+028ff831-cfab-43f0-a757-fe8933b46002 采集 2018-01-05 15:48:51.363+08 2018-01-05 15:48:51.363+08 424f45f6-916c-4383-bce4-c71153f82e63 3 \N
+f07e4888-28ea-482b-bbe3-a61929f52026 采集 \N 2018-01-08 18:35:39.98+08 2018-01-08 19:14:02.089+08 29aa5799-e271-4913-8e21-04edddaa5be1 3 \N
+689910ff-378c-4467-b95b-22907c3076e5 采集 2017-11-30 15:25:27.905+08 2017-11-30 15:25:27.905+08 f5c42818-e09f-4cb7-b7cb-63b18e8829a9 3 6026c019-d4d7-4a8e-969e-03ca957ba814
+8c4a1dc0-f42b-4a5b-9267-e447615a1821 采集 2017-12-01 09:59:04.597+08 2017-12-01 09:59:04.597+08 22d007b2-5200-4bf6-85dc-c755a7a75bcf 3 0ba29e5a-b0e0-403e-b562-00f940b9be96
+b1683813-a1e0-4d50-969b-1bad76311398 采集 \N 2018-01-09 14:07:31.173+08 2018-01-09 14:07:31.173+08 0beb606c-f306-4476-8526-31646c8107e5 3 \N
+b69afb69-84fd-4273-be31-9727323de2e0 采集 \N 2018-01-09 14:14:58.434+08 2018-01-09 14:14:58.434+08 85f5b6fd-92cc-4d22-9dff-952c59003e3f 3 \N
+7ef9f068-1ac5-4c5a-802a-3b3a1bb55191 采集 2018-01-16 10:21:41.709+08 2018-01-16 10:21:41.709+08 42fbfa5f-4ca7-4e1d-b42f-08f4f641657a 3 45e683e6-d49b-4b16-af85-607be4509fe5
+3f322286-3072-444d-8d6b-06f433f2f5aa 日志提取 \N 2019-12-06 10:23:27.688+08 2019-12-06 10:23:27.688+08 71735c3a-2e25-40c1-81ad-df10d8792ac2 2 48846ad7-8fa9-4e52-85a3-cf76a8f4b8ac
+3d303bbc-0f1a-4105-b7a6-9db99aefb409 主动查询 \N 2018-01-22 10:21:25.599+08 2018-01-22 10:21:25.599+08 0cffe018-1007-40ed-ac19-a399517129af 3 3fc1f94e-7054-43a4-a42d-21b63c00442c
+6b13c027-dfe8-4dd3-ae23-c5266b03d77b 采集 2017-12-06 16:09:36.038+08 2018-11-19 16:52:58.181+08 7c42d86a-5801-4ef2-94df-2b5c702ff7f5 3 \N
+d28e689e-1bcd-4f9e-81ac-a0bfc56667e3 采集 2017-12-01 15:00:04.227+08 2017-12-01 15:00:04.227+08 2f8c4ab2-42a9-44d8-bd3d-cfa9d1f55252 3 9daba2de-e5bd-4b35-a63c-364ac8b366fa
+95a5b30a-5159-471a-810a-14e31c3a868c 采集 2017-12-01 15:05:58.353+08 2017-12-01 15:05:58.353+08 1cdf6eb6-fcd9-4346-992d-6ddc41b956cf 3 9daba2de-e5bd-4b35-a63c-364ac8b366fa
+176efcfa-0544-41c5-8aef-5821cb43a0e3 采集 \N 2017-12-04 12:57:41.959+08 2017-12-04 12:57:41.959+08 f5d141ad-ea96-4398-8712-2a802af988f8 3 030de29c-d4cb-4747-9885-3a81f9cf61ba
+06d28e3e-8a80-4110-bf18-a06cadc13e9b 采集 2017-12-04 13:47:01.139+08 2017-12-04 13:47:01.139+08 e08c86d5-195d-4cf6-a1a5-1cfd113ddd52 3 030de29c-d4cb-4747-9885-3a81f9cf61ba
+50cd4d61-29c8-4d36-b143-85fcda3f99e5 采集 2017-12-04 14:33:34.381+08 2017-12-04 14:33:34.381+08 409f2510-dd44-4990-b530-096bf2bcb592 3 afcdc4de-70b6-486d-a34f-fc255b4bf048
+84868dd7-e484-47d3-b26f-8c39e898bb4d 采集 2017-12-05 10:50:36.379+08 2017-12-05 10:50:36.379+08 b0a937d5-432e-4a49-b044-e4b66d649f52 3 1e2ed006-51a1-4136-9de9-03451e5aee80
+514c15fe-e538-4824-9e48-1d3a83a560c1 采集 2017-12-06 10:37:27.479+08 2017-12-06 10:37:27.479+08 6c19e60e-0ed7-4e22-abb4-ddc9caf20d91 3 8338feff-fcd2-4920-9601-149a610d9887
+8929f60c-f9d6-4a0f-a19b-0a57b7025b43 采集 2017-12-06 12:00:43.627+08 2017-12-06 12:00:43.627+08 b6d1b7db-4a04-40af-a1e9-ed944a65b0b8 3 20051464-5ac9-47e7-940f-04b066d61a18
+49be5f93-ae43-4fc7-89f9-58581a1f495e 采集 2017-12-06 14:12:59.652+08 2017-12-06 14:12:59.652+08 21d99b83-6a52-4465-90c4-125d8330e1c1 3 e5eeef06-b9fc-4418-8874-308658cdc66d
+fcbff74f-610d-4dc8-b2a8-d5c54792fc7c 采集 2017-12-06 15:17:54.54+08 2017-12-06 15:17:54.54+08 aa86893b-e991-4c57-94a7-b29e7349fe50 3 b78abeef-fbe0-4ecf-9a73-9f343bc5800e
+df01da11-6cbc-4a10-b62d-dba26d636f74 采集 \N 2017-12-07 10:22:18.577+08 2017-12-07 10:22:18.577+08 7118fecd-555d-4d6c-9b3a-63b6ed0d2a45 3 1fb03ffc-fd93-4ea6-bf06-11311a655212
+13268453-da66-4d7a-a972-e67bd897b1a9 采集 2017-12-07 11:43:58.699+08 2017-12-07 11:43:58.699+08 183c2cd5-5a53-4985-80aa-33a6ce2f82d4 3 e3ca2ca2-1556-415d-9001-4d7d88f2f3d1
+b314cfb9-6a52-40c6-ab30-cc7f75189c59 采集 2017-12-07 14:20:25.163+08 2017-12-07 14:20:25.163+08 4d5a3f58-0eda-4443-9dcc-c64bb1785d88 3 fa95dbc3-abc9-43d2-98ba-9c176005b0b8
+05aa0ad1-dcc0-40c2-80cc-198e8e1a6511 采集 2017-12-07 15:20:39.544+08 2017-12-07 15:20:39.544+08 5fcd559a-c3dc-4c38-acde-b4b1749b4ab3 3 d6833ba5-fa57-4983-840c-096e456ea988
+096efcee-8caa-4bf3-9f0b-b8ce92ace83c 采集 2017-12-08 09:55:09.544+08 2017-12-08 09:55:09.544+08 ef2cc4b4-23d3-4ff0-981b-84a8c98113ab 3 ef1d82db-d7d3-4d0e-894c-63cf0bd389ae
+e905978b-35fd-48b2-8dca-d3af8020841e 采集 2017-12-08 14:40:29.027+08 2017-12-08 14:40:29.027+08 d2e5e59c-47f9-4eb9-98ce-c6dc6f2f0d66 3 37eb4d94-3143-426f-bb36-bbb57cc647b5
+e9b00fde-a1f2-4167-af71-7fc7862cc867 采集 2017-12-08 14:49:12.897+08 2017-12-08 14:49:12.897+08 0fc23377-9f3d-4511-ab1b-8b8df0259d2f 3 37eb4d94-3143-426f-bb36-bbb57cc647b5
+a5e1cd4e-fda7-425f-970e-ad4449eb546c 采集 2017-12-08 14:54:02.543+08 2017-12-08 14:54:02.543+08 14bab7df-524d-4a64-a618-23d4ebcc9b5e 3 37eb4d94-3143-426f-bb36-bbb57cc647b5
+22f8366a-f855-462a-ab4d-6f140e075584 采集 2017-12-08 14:57:54.018+08 2017-12-08 14:57:54.018+08 efcb4c3e-fc6f-447b-8f73-3fdff1d77fc6 3 37eb4d94-3143-426f-bb36-bbb57cc647b5
+e4d8894c-78bb-485f-a691-8288a65c6967 采集 2017-12-08 15:02:49.628+08 2017-12-08 15:02:49.628+08 4255e295-7830-45af-ab7c-44fee1668641 3 37eb4d94-3143-426f-bb36-bbb57cc647b5
+20231ffb-4f57-4ebc-bef1-cfd72e18d550 采集 2017-12-08 15:09:50.79+08 2017-12-08 15:09:50.79+08 ceed540f-d7a3-48bc-b8d0-e861e21499a4 3 37eb4d94-3143-426f-bb36-bbb57cc647b5
+88876216-b879-4524-bada-01f39ed17c93 采集 2017-12-08 15:16:37.892+08 2017-12-08 15:16:37.892+08 31cb6c0b-e369-46b0-9be4-1de3737503fc 3 37eb4d94-3143-426f-bb36-bbb57cc647b5
+16b2379a-313c-434d-8eb3-56120068c40a 采集 2017-12-08 15:23:44.915+08 2017-12-08 15:23:44.915+08 ea797ffb-87b5-4e0a-8da4-7f627c347b2f 3 37eb4d94-3143-426f-bb36-bbb57cc647b5
+ed796d50-66db-40b1-be39-62728b8d5fdc 采集 2017-12-08 15:30:34.581+08 2017-12-08 15:30:34.581+08 8583cb29-4726-4532-9530-a5b338d3483c 3 37eb4d94-3143-426f-bb36-bbb57cc647b5
+1bbadeee-62da-4062-bcf4-f0f18757aead 采集 2017-12-08 15:40:02.616+08 2017-12-08 15:40:02.616+08 dc5bdee9-14f3-4040-ad1c-faf008358890 3 37eb4d94-3143-426f-bb36-bbb57cc647b5
+6bc1aa05-f9ce-4f21-92f8-d1464535b0c2 采集 2017-12-11 15:27:03.003+08 2017-12-11 15:27:03.003+08 ef629030-d691-43fa-b6b4-b1465e60dace 3 2e03f731-c82a-4513-ab1a-610b99c3d1a1
+8c9d6aac-81ca-48cb-b67c-6916c734bf63 采集 2017-12-12 10:23:59.554+08 2017-12-12 10:23:59.554+08 24064f03-7c7e-493b-99f2-c926717d28fc 3 878afb54-7c5c-491e-8fa6-66a1405d7c37
+7563b8d0-13b1-42d9-91dd-b7a48a97089f 采集 2017-12-12 11:55:07.946+08 2017-12-12 11:55:07.946+08 405df805-9088-45a7-b4b2-763299e0c57b 3 0e078d6f-ab96-4c79-ba40-2b3fb5e96e72
+48838bfb-174e-42ac-a6c4-1c694dbf569b 采集 2017-12-12 14:08:56.831+08 2017-12-12 14:08:56.831+08 2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b 3 c14df1bd-60ff-48b0-9820-bd146284b57c
+9b5c64a1-06b3-48e2-83d2-92d0278e050c 采集 2017-12-12 14:41:03.874+08 2017-12-12 14:41:03.874+08 10018134-99f1-486e-8071-dc652f44d152 3 e1b859b1-b04b-4faa-95a8-8d0b006d392d
+e5550e74-9d03-440d-b9a8-0175cec5ed42 采集 2017-12-13 13:09:16.241+08 2017-12-13 13:09:16.241+08 5cd62211-11dd-4deb-83bf-2873ae7dd42f 3 752b624d-000c-4f53-adfb-e6d12b8640af
+cd2059de-7aca-4f60-9b28-90d4aec7dfcc 采集 2017-12-13 13:21:56.923+08 2017-12-13 13:21:56.923+08 b475bf8f-00a0-457f-ad96-95b187dba62f 3 752b624d-000c-4f53-adfb-e6d12b8640af
+8409a1f6-b5f7-46c7-98e8-e8ed92f8113a 采集 2017-12-13 13:27:21.37+08 2017-12-13 13:27:21.37+08 63b7958b-9b1b-49ca-b01c-62ebe4df6376 3 752b624d-000c-4f53-adfb-e6d12b8640af
+d6ba5199-32e3-4c9c-a69c-1317e15f21a6 采集 \N 2017-12-13 13:40:15.832+08 2017-12-13 13:40:15.832+08 41da65aa-dd1b-4a8f-8758-13f624e45dad 3 752b624d-000c-4f53-adfb-e6d12b8640af
+03c5dd3d-859b-41e6-89df-ca3000a46e14 采集 2017-12-13 13:46:22.558+08 2017-12-13 13:46:22.558+08 16f7e5ff-fb7a-4aa6-a701-9776f7638689 3 752b624d-000c-4f53-adfb-e6d12b8640af
+95683aa7-b094-4883-a2a1-bdabe2c7d59f 采集 2017-12-13 13:59:30.916+08 2017-12-13 13:59:30.916+08 7776a9dc-8e14-417c-a5fe-4b1dd1c869d7 3 f6f994b6-8f83-43f9-bfb0-7118d5368555
+846fe925-eaae-47c8-91a4-b1d3d7fc3bc7 采集 2017-12-14 14:22:34.593+08 2017-12-14 14:22:34.593+08 61db6668-b790-47e8-9429-55bfa4f98b90 3 97b6dd76-4b4c-42e7-88a4-52e338aab627
+84e943aa-b142-4142-89f4-5db0cc8e5233 采集 \N 2018-01-09 15:01:35.192+08 2018-01-09 15:01:35.192+08 db974c14-3d61-403d-b847-e0523ad53964 3 \N
+2b18c0fd-b077-4d22-92b0-c38896c4d150 采集 2018-01-16 10:34:00.724+08 2018-01-16 10:34:00.724+08 addad535-5578-4010-9d74-dbeab2b9e9eb 3 45e683e6-d49b-4b16-af85-607be4509fe5
+ed8fd71f-44b5-4e41-bf91-f2e5ee66e8ce 123 23 2018-01-22 11:12:08.472+08 2018-01-22 11:12:08.472+08 eb9a3ca2-0c98-4af1-9e73-2a17cbe81af6 3 55c1f524-d49e-4b21-b960-381f35589cb6
+c0392392-9da8-4232-8535-3962a4b88b7a 采集 2018-01-23 14:05:00.652+08 2018-01-23 14:05:00.652+08 3eb1b2e4-ba3a-4329-a821-33a7f5bec873 3 030de29c-d4cb-4747-9885-3a81f9cf61ba
+3436c379-cac3-4baf-8a3f-7fa4b1fe6188 采集 2018-01-23 14:46:18.988+08 2018-01-23 14:46:18.988+08 90a2bc12-2214-43ff-9154-9b9212de2c10 3 \N
+f1ab939a-33ee-4a01-8373-13c941cbce03 采集 2018-01-23 14:46:19.184+08 2018-01-23 14:46:19.184+08 5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8 3 \N
+53649022-343c-4129-b626-9dbf8c660e28 采集 2018-01-23 14:46:19.409+08 2018-01-23 14:46:19.409+08 5e7775c1-0766-436e-b701-b1102833b98d 3 \N
+4f360434-b54d-41c3-8163-4df050a68350 采集 2018-01-23 14:46:19.615+08 2018-01-23 14:46:19.615+08 099c6283-519f-4946-aa9d-f0059a76b832 3 \N
+cbc0a4f0-8c2c-4215-9210-4f81c6de6fd9 采集 2018-01-23 14:53:15.174+08 2018-01-23 14:53:15.174+08 bbfa13d3-fd42-4230-97e6-792463dbaf85 3 \N
+fd91ebd4-1201-4b5b-a5a0-e4636fb4ecbd 采集 2018-01-23 14:53:15.383+08 2018-01-23 14:53:15.383+08 f6b98e0f-0bfe-4a95-808c-d6d10b4c803b 3 \N
+069cdfbe-2463-40a3-a677-fa3564d06956 采集 2018-01-23 14:53:15.771+08 2018-01-23 14:53:15.771+08 1bcd78b8-bd96-4c95-8e19-27a1ac7356c9 3 \N
+1933583a-00cd-4d11-99f5-76e7dbeaa81c 采集 2018-01-23 14:53:15.971+08 2018-01-23 14:53:15.971+08 8bab3e11-dc23-4082-97ec-a04e78fa19c3 3 \N
+6d7906b4-b1de-4c3c-b100-bcdf039094f2 采集 2019-12-06 11:22:34.034+08 2019-12-06 11:33:26.531+08 d4255121-8115-4412-9778-4e29402a1720 3 b377a3bf-8fe3-4007-b408-eb7b0158f988
+9fb57bf4-6e35-4918-ac61-3f04bf81e691 采集 2018-02-28 16:21:12.172+08 2018-02-28 16:21:12.172+08 bcc5cadb-0395-464b-8ead-ac3917b49e30 3 b3fc90d9-c68c-4e58-95a9-89311901aca4
+d33fe3ee-6bc4-44c8-bdf0-4e36e569ff33 采集 2018-02-28 16:21:13.121+08 2018-02-28 16:21:13.121+08 8e752366-9256-4bab-a79b-276a89aea484 3 b3fc90d9-c68c-4e58-95a9-89311901aca4
+c73c5915-cc27-425f-b6e9-288aa74c6fd4 采集 2018-02-28 16:21:13.692+08 2018-02-28 16:21:13.692+08 87bf38c3-0b08-4bcf-98b4-12060fd9a345 3 b3fc90d9-c68c-4e58-95a9-89311901aca4
+479ab844-11f3-43d2-b8da-1b5e32abf466 采集 2018-02-28 16:21:14.325+08 2018-02-28 16:21:14.325+08 167d20c6-d128-4532-9974-d4a55788823e 3 b3fc90d9-c68c-4e58-95a9-89311901aca4
+405db392-c820-4892-b209-c01d5f2d0724 采集 2018-03-05 09:35:14.841+08 2018-03-05 09:35:14.841+08 5fc4a5d5-9307-4ab0-9fb1-7f017c432911 3 \N
+a831cdfa-52a9-49aa-8f41-2568b3f853de nengli1 \N f 2018-03-06 18:29:41.16+08 2018-03-06 18:29:41.16+08 a8add874-7ace-4c3b-a044-8d6da02a9257 2 a5f3b3b0-2db7-446a-8642-c844f6560d52
+99a6c9c1-0f57-45bc-a1ff-e98a56faef46 云采集 \N 2018-03-08 20:20:24.432+08 2018-03-08 20:20:24.432+08 13ee1f91-04cc-48af-820e-ffc0ed179b6c 3 \N
+06dc98b1-f6a1-4494-9519-48f5dce361b4 采集 modbus振弦采集仪 2018-01-05 11:16:01.998+08 2018-03-13 15:11:17.539+08 175e2759-ae38-4ac5-a62c-6ed4877f3863 3 0519be85-6999-49e5-a49d-0a5702bd60f6
+146da222-f300-4109-b71f-337ad767c336 采集 2018-03-14 15:53:54.001+08 2018-03-14 15:53:54.001+08 4d3ecec5-32b4-4d9b-aa02-a08275dd10c7 3 \N
+5bab107f-be1b-4c0d-a2cf-207aae73d273 采集 2018-03-14 16:17:20.816+08 2018-03-14 16:17:20.816+08 1f6ae927-989f-48b3-9fa4-18518326953b 3 \N
+8ceadb1a-8f3b-42df-848d-523f3f16aaf2 采集 2018-03-15 16:51:58.437+08 2018-03-15 16:51:58.437+08 b55b3b15-5db9-4946-a5a9-b0d352de6a24 3 \N
+e3742e72-d9c4-44b2-86aa-e90a5fa8255a 数据 2018-03-20 09:46:35.554+08 2018-03-20 09:46:35.554+08 526c42ea-d9a9-48d1-9862-b3118a7ef211 3 \N
+8e3f282e-7428-497b-baa8-0ca8fd248e36 采集2 \N 2018-03-26 11:24:13.14+08 2018-03-26 11:24:13.14+08 1bda935e-56de-4365-b60e-f02d19299795 3 \N
+af8660db-af7f-4f8a-ad12-70bb18f62638 采集 \N 2018-03-15 17:44:26.727+08 2018-03-20 16:10:22.325+08 874e1ee5-94fe-49aa-94b0-6d6bfef680bc 3 80c16a27-2bdf-48f6-ab20-690c3926ec7a
+56b4000a-2a4d-454a-9134-7499ca4e859b 采集 2018-03-28 14:52:06.914+08 2018-03-29 15:23:08.938+08 bbf47be7-1d85-4e1b-b356-70be269a0d32 3 f2ec840a-2e0c-4178-91e8-8b5b44009561
+cc7aaee4-9939-40cc-b584-234221061c01 采集2 2018-02-05 11:21:34.554+08 2018-06-29 10:32:43.649+08 cef1d2a2-c44e-4143-84bd-2a65140e33d0 3 \N
+95211a4e-66c1-46be-b7cd-9edc8ac63621 采集2 \N 2018-03-23 16:32:54.901+08 2018-03-23 16:36:36.622+08 2e2456a6-9738-456c-abf1-94d5ebad124a 3 \N
+4ad74d57-806a-4fc6-82ec-37d782d99cab 采集2 \N 2018-03-23 17:02:48.947+08 2018-03-23 17:02:48.947+08 5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed 3 \N
+8bc60164-fa52-4d68-a3b0-2c63af3113c0 采集2 \N 2018-03-26 10:54:41.213+08 2018-03-26 11:21:00.258+08 2d9520e9-143b-48c2-960f-5c9dca7a21b4 3 \N
+921508aa-21fc-41c6-b609-b6df5206ea7b 采集 2018-03-26 11:24:13.131+08 2018-03-26 11:24:13.131+08 1bda935e-56de-4365-b60e-f02d19299795 3 \N
+afdde18b-1a6e-4e2b-8ef9-d5aeb34e82cc 云采集 \N 2018-03-26 11:46:38.22+08 2018-03-26 11:46:38.22+08 11f0a3dc-13ad-4c40-ae16-1b2f1d139564 3 \N
+15598365-4401-4d31-9ebe-d0e46f6d4ce5 云采集 \N 2018-03-26 15:08:56.86+08 2018-03-26 15:08:56.86+08 099c6283-519f-4946-aa9d-f0059a76b832 3 \N
+79fa3616-07da-47da-a26c-0faac333d89d 云采集 \N 2018-03-26 15:26:40.937+08 2018-03-26 15:26:40.937+08 1bcd78b8-bd96-4c95-8e19-27a1ac7356c9 3 \N
+8e638b0a-bbf4-4856-add9-c4db9b55b032 云采集 \N 2018-03-26 15:48:31.742+08 2018-03-26 15:48:31.742+08 c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d 3 \N
+9f6bcc66-e76f-49d5-87e4-fd469c6af1d0 云采集 \N 2018-03-26 16:18:00.043+08 2018-03-26 16:18:00.043+08 91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 3 \N
+606bd0b9-0694-4ff6-b0f2-f591ab56a3d4 云采集 \N 2018-03-26 17:00:46.973+08 2018-03-26 17:00:46.973+08 27930598-2f6e-4932-a816-9685f17969b5 3 \N
+fb9e1eb8-cd2a-4c4c-8395-78cf468ad98a 云采集 \N 2018-03-27 11:23:46.169+08 2018-03-27 11:23:46.169+08 131c98fc-2216-4f0f-9cd3-581d88f9affd 3 \N
+79cc1497-99b7-4eb4-bbb5-b69192903d18 云采集 \N 2018-03-27 11:28:33.886+08 2018-03-27 11:28:33.886+08 9110f259-e269-446d-afa3-798069f4534d 3 \N
+cd1e30cf-8d0c-457d-b7d4-a773af3c17f9 采集 2018-03-09 16:27:20.884+08 2018-03-28 10:56:04.95+08 22fee831-1acb-498b-a4f4-c73ca9e48eac 3 c4a9f5a0-5436-4b62-854f-332cfde5559f
+a3aeb56c-762d-4329-8fc8-0309335e489e 采集 2018-03-02 17:16:41.283+08 2018-03-28 16:37:25.86+08 a812ef4d-0c77-49e6-bad2-c74c79c50e49 3 eb7d51b4-3089-4b47-a4df-3d772ee3dbf2
+c4424e56-9f35-4bdd-b7c1-66836e3ba1cb 数据 2018-04-02 15:54:14.344+08 2018-04-02 15:54:14.344+08 1489127c-8f48-448b-a86e-1604f08894ce 3 \N
+61625131-a37b-4478-a0dc-f7c55d54f34e 采集 2018-04-03 11:52:10.943+08 2018-04-03 11:52:10.943+08 8fb33fdb-3378-44a4-8e48-ec79ff29a37e 3 cba2303c-cdd4-477f-8bff-49ff734cfcd6
+a4e76a90-da0e-45f5-a2bf-540d04090e35 采集 \N 主动上传 2018-04-02 17:21:29.453+08 2018-04-02 17:22:17.511+08 8b83567e-d874-40f2-a7e4-f78d6cb5415c 3 9e7ff46c-0808-4b46-878d-0614995edc11
+855e5472-f1f9-4119-818a-337b5f302028 采集 2018-04-03 11:53:08.694+08 2018-04-03 11:53:08.694+08 00b58795-1a49-4171-b60f-a0e32a25f6f6 3 30362f9f-8691-4ba1-8338-583ea6d80c08
+c5b8fbc8-aee5-43cd-a2e8-6f48cfe463e5 采集2 \N 2018-04-08 14:06:25.441+08 2018-04-08 14:06:25.441+08 624610fd-38ca-4e72-92c8-0492eb66412a 3 \N
+8b5d7571-fbed-4a64-8ae5-158979e259d4 采集 2018-04-08 14:06:25.457+08 2018-04-08 14:06:25.457+08 624610fd-38ca-4e72-92c8-0492eb66412a 3 \N
+5fb83056-bcb5-4ed3-8b11-5d2233522941 采集 2019-12-06 15:16:13.061+08 2019-12-06 15:16:13.061+08 31be3fb7-3369-4966-8e26-b561dc31b6fd 3 f98f678a-503a-40a9-aba3-37c6033901dd
+9f1dab20-8943-4d5f-9c48-e25d55a8a3d3 采集 2017-12-14 16:49:47.951+08 2017-12-14 16:49:47.951+08 af1cd7e8-52e1-4411-9c9a-20bc82a2786d 3 d3970047-c379-4882-af09-b7ecea4bd65a
+ec181902-8df8-4d46-9c16-a1deefd286e5 采集 2017-12-14 16:55:58.28+08 2017-12-14 16:55:58.28+08 a30d283e-1af2-4531-ab6b-be1186799eea 3 d3970047-c379-4882-af09-b7ecea4bd65a
+63010e3e-4783-485c-a5dc-4f26a1153ece 采集 2017-12-18 10:57:40.215+08 2017-12-18 10:57:40.215+08 4d48086d-804a-426d-9867-0e87efdc74fe 3 e548ef12-9b49-480e-a000-57c0391c5bd0
+235950eb-8bd2-40b5-945f-6ba95c40892d 采集 2017-12-18 17:23:33.733+08 2017-12-18 17:23:33.733+08 701ab719-e85b-4428-ad59-1b7adff31c56 3 8757fbc2-2ae6-42b5-b888-0f5ce8edb8cc
+53e4c42b-3996-45c2-9631-73b200cb840c 采集 2017-12-19 14:21:59.018+08 2017-12-19 14:21:59.018+08 0eb7e920-0359-4b8b-b604-14bc1136e8f5 3 61394f4f-a90e-4c38-8d8b-f0acdee2975c
+b6bff26c-a89e-4fd7-85db-adb7ff80af6c 采集 2017-12-19 17:58:52.284+08 2018-01-09 11:03:05.674+08 dfffdb75-6ad1-4092-95d2-ac6596b3c4ce 3 \N
+851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 采集 26要素 2017-12-20 10:35:00.78+08 2017-12-20 10:35:00.78+08 1ac45c30-affc-479b-8ad6-3d63d1fa33f3 3 d7b4876b-9c7a-4446-a47a-0d99d98b117b
+b55ffd52-9693-40dd-a732-e5271f0d5fb5 采集 2017-12-20 13:51:02.581+08 2017-12-20 13:51:02.581+08 5e96e066-3520-443f-80a4-9a3a1a7badd6 3 9daba2de-e5bd-4b35-a63c-364ac8b366fa
+ab03ba4c-6102-471a-a570-87b77683dcc3 采集 2017-12-20 13:59:41.261+08 2017-12-20 13:59:41.261+08 ac8a15b2-1daa-48ce-b77f-52e2429c66bd 3 9daba2de-e5bd-4b35-a63c-364ac8b366fa
+60ae0347-0874-4d6c-b39a-e0bc3fd616c9 采集 2017-12-20 14:03:22.688+08 2017-12-20 14:03:22.688+08 676795c3-0d71-441d-aa0e-62b82dff8193 3 9daba2de-e5bd-4b35-a63c-364ac8b366fa
+f0e35d78-efe9-4656-ae6a-5116d547772f 采集 2017-12-20 14:30:07.21+08 2017-12-20 14:30:07.21+08 14f67669-6cec-42c0-a7ca-4b60950ec7b5 3 030de29c-d4cb-4747-9885-3a81f9cf61ba
+5f58f358-39b7-4cf1-a4ad-c8b16d83a0b0 采集 2017-12-20 15:25:01.23+08 2017-12-20 15:25:01.23+08 6bf32a53-c1d4-4014-b0b9-da1af43bda76 3 9daba2de-e5bd-4b35-a63c-364ac8b366fa
+f17f6e9c-827e-4dbe-b6d9-48937e2ca2b5 采集 2017-12-20 15:39:19.353+08 2017-12-20 15:39:19.353+08 ad41eeec-8dff-4cbb-9a3a-8d42db92bca8 3 9daba2de-e5bd-4b35-a63c-364ac8b366fa
+9476a386-f250-4250-a852-90fedab8ea49 collection 2017-12-20 15:39:26.998+08 2017-12-20 15:39:26.998+08 cd5e889f-775b-446c-9ffe-e2d8eeceaaa0 3 9f43db1a-9665-4422-83dc-f17f9918a140
+b9dd081e-69bc-46c3-a372-d46269234b57 采集 2017-12-20 15:44:31.426+08 2017-12-20 15:44:31.426+08 3da31fde-9ea8-406f-9a1b-4a9932dbc2df 3 9daba2de-e5bd-4b35-a63c-364ac8b366fa
+1adc0b25-92ae-4d60-9c59-b001fc8b8120 采集 2017-12-20 15:48:48.781+08 2017-12-20 15:48:48.781+08 466241f9-ceea-4552-b9c6-114413124018 3 9daba2de-e5bd-4b35-a63c-364ac8b366fa
+488ca4a1-e5d4-4905-ac99-a63bf4b4e98c 采集 \N 2017-12-19 17:52:18.773+08 2018-01-09 11:03:32.971+08 235b7fe6-cf6f-4cf4-8d40-a3103cc0fba7 3 \N
+ef29b89e-1964-40d7-b8c8-489d9562ce9d 采集 2017-12-21 11:15:16.276+08 2017-12-21 11:15:16.276+08 7c1b8df9-4088-4cc7-b07b-3299d827d7d0 3 08df99de-ea9b-409c-9f5c-fda7f51b2ef9
+b17563d4-fe75-4b40-9fb8-97fedae3abce 采集 2017-12-21 16:37:36.685+08 2017-12-21 16:37:36.685+08 6af0f3be-6cb5-43c8-a588-490e10fdf4b7 3 36fe6fad-733b-496b-bdc7-be6c9b17f119
+986f4655-aea5-4e28-8507-f17ce74073cb 采集 2018-01-23 14:10:45.51+08 2018-01-23 14:10:45.51+08 931fef11-654a-4f36-bf37-dbc168c46e84 3 030de29c-d4cb-4747-9885-3a81f9cf61ba
+d3a626a7-97a1-434d-a4ca-4a939af207b9 cpuRate cpu使用率 2018-01-09 17:00:52.108+08 2018-01-09 17:00:52.108+08 7d457a8b-5537-4186-bd68-df0c5868ef7e 3 412d7ece-a7a5-4a1a-a9b7-4fb9d163a37c
+79df301c-8707-4e42-8546-2b6a77f017f8 采集 2018-01-16 11:50:37.234+08 2018-01-16 11:50:37.234+08 0d123bba-3d2e-4252-a27e-af567da8aca1 3 45e683e6-d49b-4b16-af85-607be4509fe5
+0100a56f-6c0b-48ff-9f7d-391a4eaa1bd8 采集 2018-03-13 17:32:48.261+08 2018-03-27 16:50:40.534+08 e60e191c-767a-479d-a33e-589622634060 3 4c09e571-5bca-4caa-9ee5-379594a29059
+a84db97e-114a-4cbe-8e97-a18f398857a7 采集 2018-01-17 17:52:43.806+08 2018-01-17 17:52:43.806+08 4696ff30-0685-4f87-bc16-25d640a014a6 3 \N
+3cd111a3-296e-4cfe-af80-2d206f3a2b36 采集 2020-12-31 14:26:55.471+08 2020-12-31 14:26:55.471+08 406adc2f-6e40-43fc-832a-d6982677d5e1 3 \N
+2364818e-4cde-4614-a15d-7a127ceabf7d 采集 \N 2021-01-29 11:01:43.632+08 2021-01-29 11:01:43.632+08 8f03b15b-fbb7-4bca-ae92-2230abf071b7 3 \N
+02eb3150-86c4-4e4f-933e-9adadf378910 采集 2017-12-28 20:13:20.341+08 2017-12-28 20:13:20.341+08 aa64719f-ac6f-463c-83c5-dcdbd25be81e 3 \N
+d9456b27-5a08-40b3-bac7-967d99928997 上报 \N 2021-02-05 15:18:26.078+08 2021-02-05 15:18:26.078+08 c51512a6-3e90-4b6e-8a21-987464b10ca9 3 \N
+d6b914e8-a4e6-443c-a9f4-7fb5eb5148be 采集 \N 2017-12-29 17:40:41.154+08 2017-12-29 17:40:41.154+08 e58ee78a-e499-483c-acc8-a42683d62149 3 \N
+9c7d9db3-d6b5-46e5-a01e-af70a296bc8d 采集 2018-01-02 17:33:10.087+08 2018-01-02 17:33:10.087+08 608c11f3-91d9-4d92-9459-a4f7eb20bf1d 3 \N
+10deb250-d676-4883-bfb1-2f557ec84677 采集 2018-01-23 14:57:48.75+08 2018-01-23 14:57:48.75+08 37c046eb-9a0e-49b0-95fb-f0128338f381 3 \N
+99112554-2cb9-43fc-adef-6068fdb897a7 上报 \N 2021-02-05 15:20:48.048+08 2021-02-05 15:20:48.048+08 d2e74fbe-59fe-420d-b127-c61ba8236f42 3 \N
+8b0f2cbe-d8a9-434d-a5ce-f32b591a3956 控制 2018-01-03 13:53:36.246+08 2018-01-03 13:53:36.246+08 46ad9444-1665-48d6-bb9a-37cee37d1604 2 \N
+6d135882-0f59-4f07-9508-c1eac08ab6cc 能力 2018-01-03 23:08:28.587+08 2018-01-03 23:08:28.587+08 34eeec21-d4e0-4716-a88e-42267e349980 2 f99629fd-ce63-49a7-ba9b-f554f569bb4b
+26034a4c-81b7-4470-a5e4-65494772f35b 采集 2018-01-04 11:19:16.726+08 2018-01-04 11:19:16.726+08 10f69514-4a4b-4ecd-a318-f8bf0c81a965 3 \N
+161be263-2daf-4d9c-8a3e-5a5dfa458cf2 采集 2018-01-04 11:48:49.72+08 2018-01-04 11:48:49.72+08 d8860bee-374c-497a-a33a-258af59e3690 3 \N
+f4542b67-c857-40a2-8aa7-11850aace3bd 采集 2018-01-04 11:56:59.881+08 2018-01-04 11:56:59.881+08 6a8343f7-8c07-4851-8924-f8d4f1f5ab78 3 36938573-512e-46a3-a00f-1761d76ed4b0
+58ccd139-9573-44ce-84f3-b043e0841c7a 采集 2018-01-04 12:11:30.183+08 2018-01-04 12:11:30.183+08 6c0d843c-169e-49b8-8dde-188699cc3077 3 \N
+3825f4a5-cc05-4d5a-860a-c277ff0c1cc6 能力 11 2018-01-26 09:39:05.315+08 2018-01-26 09:39:05.315+08 7697d048-c21e-4b28-8c88-a59de01bae96 3 317a91ad-ae05-4ce3-9b76-916a9e3103b6
+5c7af394-fc34-459a-bf95-62b91eafed29 test 2018-02-06 16:34:19.403+08 2018-02-06 16:34:19.403+08 9497edfc-bee0-4aac-b65d-2f1af60cc760 3 \N
+d90c8b29-4933-4af7-9ffc-62f63cee473d test2 \N bbbb 2018-02-06 16:34:50.795+08 2018-02-06 16:34:50.795+08 9497edfc-bee0-4aac-b65d-2f1af60cc760 3 \N
+13d3b4ab-266d-479b-874d-d00ba71b7d6c negl 2018-02-06 17:44:49.267+08 2018-02-06 17:44:49.267+08 edcdb4a2-9f82-46d7-bba1-3ebb4f69483e 3 \N
+10fc859f-7d37-4093-99b7-b2acfdbe2c6f 控制 2018-02-09 14:00:32.969+08 2018-02-09 14:00:32.969+08 ee8205dc-c9b0-4c29-b85f-9a54216ab198 2 878d994c-6a4d-4bf2-81f2-d9ab291633d6
+a31f033d-a4ca-4dd4-8e20-5180f376df79 采集 2018-02-11 16:58:21.74+08 2018-02-11 16:58:21.74+08 c98659b5-30ec-471f-9654-41f5f8df47b0 3 \N
+cfd05991-7dcc-45cc-a7c3-afeef665f4c8 采集 2018-03-05 10:59:51.145+08 2018-03-05 10:59:51.145+08 f1fc4840-f3c9-4752-a703-b0bef637f3ee 3 \N
+c6ff7e02-05d5-45ee-9837-f61976b9d230 采集 2018-03-07 17:15:48.181+08 2018-03-07 17:15:48.181+08 68cb03f4-a381-4eaa-9068-d375ae3500e8 3 \N
+5a1c9521-1fea-46f6-82bd-3073923b164f 采集 2018-01-03 16:19:19.149+08 2018-03-27 09:46:31.264+08 4d523084-bf91-421f-bafc-f278a63c5541 3 15f78bc6-396c-4b7b-ba7c-2fcc9e9a924f
+31df808d-16cc-43b3-81c4-0443d9ae6f8e aaa 2018-01-09 21:37:46.44+08 2018-01-09 21:37:46.44+08 d08c2f42-3528-4b5f-9f34-04deac7051c1 2 \N
+2be35120-6755-4238-90ea-0e20e13d079b 44 \N 2018-01-28 12:35:30.23+08 2018-01-28 12:35:30.23+08 7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4 2 \N
+91bd35f0-7a4d-468f-b8f2-4023456af5ba 采集 2018-01-16 16:49:43.489+08 2018-01-17 11:53:07.269+08 2dfa1f51-0e5a-4e11-a86d-f8487d602ebf 3 1d20568b-1259-4aac-8a65-4afd295e2e1a
+cb86448f-61c6-408f-9e5f-06ba94979fdd 3 2018-01-17 13:45:21.839+08 2018-01-17 13:45:21.839+08 0df6f7cc-b408-4936-8fee-d5344c2d8ae9 2 \N
+bc03541b-fb13-44ff-8cc4-9419e81554f3 采集 2018-01-23 14:49:59.713+08 2018-01-23 14:49:59.713+08 c0cde67c-9734-4a3c-bb52-0caba0ae8724 3 \N
+787be20b-1887-4708-a1db-c0d581a322eb 采集 2018-01-23 15:06:34.921+08 2018-01-23 15:06:34.921+08 eee64353-8241-4a69-a2ed-5e42bbf4450c 3 \N
+9f562e54-5c03-4b59-89cf-d12739821be5 采集 2018-01-23 17:19:51.369+08 2018-01-23 17:19:51.369+08 ddf17ba9-fcef-4ef4-97f0-c09e0503dfa3 3 b5bfba1d-25c8-4e8d-9a0e-a4d9be2dcd1e
+a2e1b758-5210-49f0-986e-78305b6cef20 采集 2018-01-04 13:43:27.01+08 2018-01-04 13:43:27.01+08 e8ccf6dc-5626-4bb7-9f88-9bf8972619b4 3 \N
+cd26103f-0538-43bd-9bbd-a8b3b84e10ff 采集 2018-01-04 13:57:55.236+08 2018-01-04 13:57:55.236+08 660c0ba2-d714-4ad3-8166-a1fa25a9d7d1 3 \N
+c08bb21f-6cdb-46c1-a8df-3ea9d92279ba 采集 \N 2018-01-04 15:33:35.053+08 2018-01-04 15:33:35.053+08 fb1119c8-c430-4066-9f02-60a558d92a68 3 \N
+9c9bf6ea-e390-4af6-9eb7-64fdd8325887 采集 2018-01-05 10:51:34.751+08 2018-01-05 10:51:34.751+08 d77b7e20-7877-47dc-aef4-37a663bac660 3 \N
+5e270a72-9da6-4029-98ae-eb0326ad0d97 采集 2017-11-17 09:45:45.976+08 2018-02-11 16:59:13.23+08 d87be87a-12ba-4e65-97ba-816bcb3e2e62 3 \N
+2766d297-6127-449f-b73f-089b38e01267 采集 2018-01-05 11:06:57.94+08 2018-01-05 11:06:57.94+08 ba349741-3d03-49c6-a2cf-9e2156fd36c4 3 \N
+57f3c9e5-43c5-42ce-92e4-a67bf6f28452 采集 2018-01-05 11:06:58.398+08 2018-01-05 11:06:58.398+08 30da8546-87f0-4a5c-bd4f-f9919c954c82 3 \N
+2f00a22f-2cdc-46e5-94b8-a4c599c0618d 采集 2018-01-05 11:06:58.805+08 2018-01-05 11:06:58.805+08 17c35362-c638-46de-bea3-840893daf864 3 \N
+9b2fd7d2-690b-4c40-a7f9-a52bdf8c1735 采集 2018-01-05 11:07:00.025+08 2018-01-05 11:07:00.025+08 d14c6b02-4298-4713-b970-eba0aafee88b 3 \N
+11c69c81-4c8e-49c2-bde6-92d68c3d8092 采集 2018-01-05 11:07:00.144+08 2018-01-05 11:07:00.144+08 feb1fe0d-208d-41cf-9533-596f78fa835c 3 \N
+a5f188ab-9f47-44f3-a454-2b85f0aaa7ce 采集 2018-01-05 11:07:00.271+08 2018-01-05 11:07:00.271+08 35d1f34b-ccac-4110-9bb6-7e0a3327ef18 3 \N
+90e33926-b804-46d8-9c62-0fad9b87edab 采集 2018-01-05 11:07:01.128+08 2018-01-05 11:07:01.128+08 0530f690-1f3c-430e-97c7-6dc82f96fd47 3 \N
+0d251d94-b1b6-4772-8066-2ae317277574 采集 2018-03-13 23:09:59.907+08 2018-03-13 23:09:59.907+08 384f80e3-ad51-400e-b0aa-8a3885961cec 3 \N
+9943507b-e6a7-4ed0-a44a-d71689542076 采集 2018-03-05 10:52:42.564+08 2018-03-05 10:52:42.564+08 84747787-27a7-463d-bd03-9ee55d84fea0 3 \N
+5fa4fdf3-0b6f-4b2c-9015-3ec3e23f909f 采集 2018-01-05 11:07:03.192+08 2018-01-05 11:07:03.192+08 27f99320-b0dc-4b93-bc24-f5ccf9337356 3 \N
+0c7ac7cb-305a-4871-9335-1e95d569358c 采集 2018-01-05 11:07:03.696+08 2018-01-05 11:07:03.696+08 ecfacbbe-037c-42cb-89ce-68a2e6170758 3 \N
+571ad024-5982-4fc7-b01e-684b112a8092 采集 2018-01-05 11:07:04.199+08 2018-01-05 11:07:04.199+08 b750e865-af38-40e9-a478-16fefb4cb618 3 \N
+7ca00003-ea25-4456-acad-32705e36bea1 功能1 \N 2018-03-07 14:02:37.522+08 2018-03-07 14:02:37.522+08 7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4 3 b9e32a9e-36d5-4b15-baca-567f42a0f45b
+6233944d-f215-45f0-90e6-433fb8fb0735 ww \N 2018-03-07 14:46:11.825+08 2018-03-07 14:46:11.825+08 7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4 3 b9e32a9e-36d5-4b15-baca-567f42a0f45b
+f331ae21-9607-401d-b8c4-9d17e40eba9a 采集 2018-01-05 11:50:22.3+08 2018-01-05 11:50:22.3+08 5f4e4e99-20b3-4bf7-95cb-a2f507595b2d 3 \N
+45469a20-748c-4740-9741-4c971a209601 采集 2018-01-05 11:50:25.116+08 2018-01-05 11:50:25.116+08 b6095ab3-88ff-4a71-8f42-f0656b301e1e 3 \N
+a0f44ec1-49da-4ca4-83d2-323cdeeb2864 采集 2018-03-07 17:18:03.908+08 2018-03-07 17:18:03.908+08 3a8c62b6-14dc-497e-90e8-68c2160e7d08 3 \N
+4412085f-1890-4b38-b715-f72085af2b7b 采集 2018-01-05 12:01:35.798+08 2018-01-05 12:01:35.798+08 cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3 3 \N
+da94e805-9621-4290-b239-5ddc2e0504a7 采集 2018-01-05 14:02:09.795+08 2018-01-05 14:02:09.795+08 11f0a3dc-13ad-4c40-ae16-1b2f1d139564 3 \N
+77becc38-82f7-4612-83e2-10e0ebf5e6e3 采集 2018-01-05 14:02:10.791+08 2018-01-05 14:02:10.791+08 13ee1f91-04cc-48af-820e-ffc0ed179b6c 3 \N
+08fbb708-7333-4f0f-b4a6-1b185f02fd34 采集 2018-01-05 14:46:16.307+08 2018-01-05 14:46:16.307+08 0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1 3 \N
+5d7b8c97-4528-4c8a-8da7-bcc37d2a9ed2 采集 2018-01-05 14:50:21.838+08 2018-01-05 14:50:21.838+08 473aee20-7c00-41cd-bd6e-b44c35c758ea 3 \N
+83056ece-02bc-466a-a4c2-4b916ea6e41a 采集 \N 2018-03-09 15:03:59.328+08 2018-03-09 15:18:22.407+08 21c691a7-7a5a-4262-a3fe-cedb0c37e5fe 3 \N
+9c34b3cc-56f3-4463-b264-888d55002e8b 采集 2018-01-05 14:53:22.522+08 2018-01-05 14:53:22.522+08 607fa5aa-d8d7-48be-bf60-b8a6d0de2e8e 3 \N
+cc4c86bd-de99-4664-97f7-6cc8f14d9163 采集 2018-01-05 14:53:24.809+08 2018-01-05 14:53:24.809+08 49b0b2b7-b6e7-4ec8-adf8-4c94dcfb2eae 3 \N
+e7092d0b-709a-414e-a8ca-a1e21ef6e36c 采集 2018-01-05 14:53:53.034+08 2018-01-05 14:53:53.034+08 b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 3 \N
+7cfe14d1-5568-4d3a-abf6-b24791db9643 采集 2018-01-05 14:57:25.909+08 2018-01-05 14:57:25.909+08 e6a3a1f5-2a8f-48a0-9758-407065bae1e9 3 \N
+19db0824-d40d-49ce-a3e8-b63510dcbb7a 采集 \N 2018-03-14 08:24:49.339+08 2018-03-14 08:24:49.339+08 b3da87da-9dc0-443c-960e-ccea1c35f87e 3 \N
+4f08e245-f581-4570-8175-92b665bdd6c8 采集 2018-01-05 15:11:19.831+08 2018-01-05 15:11:19.831+08 c50b3ecc-a416-4991-b64f-f2c79d8d1848 3 \N
+63bfc488-1cc3-4d31-a86c-0b1d49baddc6 采集 2018-01-05 15:11:20.71+08 2018-01-05 15:11:20.71+08 abfa6634-cca0-4696-b67e-1c2eb2e57c9b 3 \N
+5714767a-3b97-4a8c-a5f6-abd8091e8662 采集 2018-01-05 15:18:31.291+08 2018-01-05 15:18:31.291+08 73a7b800-25d7-41ad-872d-96cc4f9430de 3 \N
+39e594af-f88b-4f81-96c2-2d7a7bc27ad7 采集 2018-01-05 11:47:57.13+08 2018-01-05 15:30:02.677+08 2574b00e-2491-471c-925a-5b713afa9561 3 89d5e195-c719-48a0-8e7b-9807f8815e03
+fbdf40ff-88c5-4ca5-a2cf-e0fcbcb9d45d 采集 2018-01-05 15:33:22.334+08 2018-01-05 15:33:22.334+08 abaf6bf4-288f-4d21-9fab-515213e6dcac 3 \N
+24ea4e76-d09c-44d9-8d18-7c634e2b1b22 采集 2018-01-05 15:36:58.425+08 2018-01-05 15:36:58.425+08 d2a5375c-0240-4435-9b8f-a62372fafaca 3 \N
+1d70f5ea-f754-4ee5-98e8-98bdaa7694e2 采集 2018-01-05 15:36:59.037+08 2018-01-05 15:36:59.037+08 ccb72dc5-f9bc-424d-a3ec-e6e9121bc534 3 \N
+6bcbbc0d-ed3f-43f1-b6da-98c0ff2bed39 采集 2018-01-05 15:36:59.849+08 2018-01-05 15:36:59.849+08 780ffe7d-7369-4d2f-9184-32790466f2ba 3 \N
+59674186-4b3a-4864-845c-81ba695df093 采集 2017-11-01 15:38:54.182+08 2018-01-08 14:55:11.524+08 e5b27a73-2d4c-4b53-8bcd-86583097a730 3 09cac49f-47cf-46e1-989b-87ca089ba58b
+d9aa001d-6bbe-436c-89ac-c361f78f38ea 采集 \N 2018-01-05 15:12:24.79+08 2018-01-08 15:14:24.766+08 e2d93988-c0e0-4581-b406-e43e455f7864 3 2cf8a814-f993-4420-8aa3-7fa891995667
+12ffe39f-e941-4496-a0af-ae5d4c1e0d29 采集 \N 2018-01-05 15:14:28.369+08 2018-01-08 16:49:09.739+08 217607ad-e8e6-4940-91ff-dc4d831cccbc 3 2a2d8e77-444a-4911-9f33-9de3b1dff1c8
+ca59c7e9-eb74-4ab9-a98f-4604bfbf0b8c 采集 2018-01-05 17:40:36.05+08 2018-01-10 11:08:23.281+08 1f00228f-9138-4060-9b9b-1ae22f803af7 3 bf768303-c930-4c11-8397-4676f65152f9
+bc46fbac-32c0-44aa-829d-5852b69db566 采集 主动上传 2019-12-09 10:11:18.894+08 2019-12-09 10:11:44.297+08 5e2812d0-7cbc-4f79-9723-87bec81bb0ea 3 7231d629-dac5-471d-a674-005608c54feb
+6c5eb31e-a7e6-4289-a25e-5cf08bb4ad82 采集 2019-12-09 10:15:11.892+08 2019-12-09 10:15:11.892+08 15eadcdc-9a05-4580-946b-2b722d95ba5b 3 \N
+05a8211d-6e5e-4a0a-98d2-f84900bba1a5 上报 \N 2021-02-09 14:17:17.674+08 2021-02-09 14:17:17.674+08 b7dd781d-dba7-4228-b49f-8aee75e42625 3 \N
+5fdff23a-1bda-42fc-bde0-fc7f6fe1b4cb 上报 \N 2021-02-09 17:31:07.323+08 2021-02-09 17:31:07.323+08 e92738ba-66bf-4ec9-85c5-c1f2b4d7780e 3 \N
+5b2e7aad-4a66-4797-8897-7eefc972e1f9 上报 \N 2021-02-20 15:02:02.875+08 2021-02-20 15:02:02.875+08 0b84defc-2160-4d4a-8d71-6f350b4d6666 3 \N
+63b1d744-08d4-4190-9ff1-437220a51be4 采集 2018-01-05 16:48:16.714+08 2018-03-28 16:34:55.45+08 1e0d3ad9-26a9-427e-be48-685ffe3e84b7 3 d6f1dfe7-d20a-48bf-ac33-419f33048c43
+ae9f3c10-ba3a-42be-a58d-35ec3c3c15ea 采集 2018-01-05 16:18:59.241+08 2018-01-05 16:18:59.241+08 9abfc35c-6cff-489a-8257-b868954725f4 3 \N
+3d7d32da-438a-4e22-8879-eb3b7b2f98d2 采集 2021-02-22 09:15:10.344+08 2021-02-23 11:01:05.855+08 c892bb1b-57aa-4b52-b1eb-79172e95a8fb 3 118e4efb-d115-4765-b805-129460d51153
+487f64fc-b23f-4c0e-ac96-c610a0ff7a08 采集 2021-02-24 11:11:07.57+08 2021-02-24 14:45:18.799+08 5b625df3-f714-4971-94a8-625e9c8812fc 3 b6e60de9-b636-4381-896d-151d57a4b604
+e9332808-1b40-44af-9aeb-7c21643b1e80 采集 2021-02-24 09:24:53.459+08 2021-02-24 17:32:39.433+08 f8803e24-c7c9-4089-8f06-5a00433131b1 3 \N
+74dd6bb1-b532-407c-b444-e640a9ee293e 采集 2021-02-24 17:38:25.39+08 2021-02-24 17:38:25.39+08 18ab2f15-70ec-43ff-ab7c-717e4ad0c0cd 3 31ae2751-5181-4ccf-9763-d2ddfd55726d
+7721177a-8610-4836-82c5-d08d05a6be97 采集 2018-01-05 16:26:30.086+08 2018-01-05 16:26:30.086+08 2d9520e9-143b-48c2-960f-5c9dca7a21b4 3 \N
+824dfcd1-4745-4087-aa8e-237d72715c4d 采集 2018-01-05 16:27:59.072+08 2018-01-05 16:27:59.072+08 771be2fa-a2f9-4ba8-8c08-76b091627b87 3 7c734114-6fa7-41a5-8f0c-ce0940aded18
+26976155-0f82-42c9-962d-6d8f206f40d1 采集 \N 2018-01-05 16:29:05.829+08 2018-01-05 16:29:05.829+08 bc476c11-0887-40fb-ae9e-06ab514a44c0 3 6961f5ca-3d77-4944-921f-d4bf6d757bce
+2fa52a8c-6ff8-4131-b74d-761173132a03 采集 2018-01-05 16:29:20.581+08 2018-01-05 16:29:20.581+08 5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed 3 e24c947d-eeba-4895-bad5-f1a03b48bfc7
+e087d664-23b6-4a21-b166-ac37688c0ec0 采集 2018-01-05 16:34:08.797+08 2018-01-05 16:34:08.797+08 5eb050b5-8b57-4528-adce-b3633e613b6c 3 \N
+e82e8948-89ce-4dd5-89dd-1a3d319d351d 采集 2018-01-05 16:34:09.771+08 2018-01-05 16:34:09.771+08 7802bcc3-5fdb-441d-a57a-a89ca2ec158b 3 \N
+7be90de6-78ea-44a4-8896-d18f9b9ab89a 采集 2018-01-05 16:50:29.993+08 2018-01-05 16:50:29.993+08 d55af283-4d11-4eb7-8099-890d98bfcc0c 3 \N
+b6166ded-aed1-4e30-a2e8-504e9e98b79e 采集 modbus振弦采集仪 2018-01-05 16:27:38.11+08 2018-06-15 09:49:12.94+08 b0a93683-5c88-4f1d-81de-5e41fed44566 3 3ba4748d-4a2e-4b5a-84ff-3e36e397671d
+c66f2638-5449-4aad-b566-ffff92086b82 采集 2018-01-05 17:57:19.735+08 2018-01-05 17:57:19.735+08 0cbe0018-ac32-4dfd-ba20-7c6e9658a553 3 \N
+2578ea6c-aef6-4458-b889-dc7a102143af 采集 2018-01-05 18:09:59.827+08 2018-01-05 18:09:59.827+08 9e56c900-b85f-4abd-b53f-3162016875ad 3 \N
+07f54ea0-7637-4b93-ad91-d7a0987f6a1b 能力1 2018-01-05 18:21:38.323+08 2018-01-05 18:21:38.323+08 42b1e83a-cc6f-4051-8187-75dab10af0b1 3 4e9edf2e-6c74-4979-91dd-65c1c69ed8f2
+8b4d52b7-47ef-4940-9b4e-7353a2a62765 采集 2018-01-08 08:03:31.847+08 2018-01-08 08:03:31.847+08 684a2261-481c-4504-9f4b-665baf97aae6 3 \N
+e05b776c-d411-49c1-9775-9c02bf5dd41f 采集 \N 2018-01-05 16:28:13.401+08 2018-06-25 11:14:38.554+08 d32eacce-7db0-4c15-b17c-f1d870389c14 3 09903e18-4a03-454d-a5fe-c91275a5400f
+d30c1deb-b88d-4111-a4df-6810595e0a63 采集cpu使用率 采集cpu使用率 2018-01-08 09:46:41.147+08 2018-01-08 09:46:41.147+08 078b521f-572a-48bb-b327-09f918ef1e92 3 fe8171d5-8793-470f-a5b3-83825b6fa00f
+31a6e729-2f1b-4d8a-8f13-399b327f0d70 采集内存使用率 采集内存使用率 2018-01-08 09:46:41.161+08 2018-01-08 09:46:41.161+08 078b521f-572a-48bb-b327-09f918ef1e92 3 fe8171d5-8793-470f-a5b3-83825b6fa00f
+e29ac2dd-147b-403e-a9a8-6737b7799100 采集 2018-01-08 10:24:01.157+08 2018-01-08 10:24:01.157+08 e55e2ee6-c58a-481c-9bd3-9df2b38dfa3f 3 7a9b4886-a218-4e10-b299-5a6a13496bbf
+51734448-f0f6-4268-8191-cd093e9e6e60 采集 2018-01-08 10:24:02.007+08 2018-01-08 10:24:02.007+08 4253e350-b64f-4b81-b19b-bcd45c6181ad 3 7a9b4886-a218-4e10-b299-5a6a13496bbf
+7b98954d-1ba2-4349-9f4b-26d35ab67107 采集 2018-01-08 10:24:02.581+08 2018-01-08 10:24:02.581+08 0eab3179-48cc-4e55-8ec9-b7516415aa75 3 7a9b4886-a218-4e10-b299-5a6a13496bbf
+eb737450-437c-4c7c-9a72-f54364c468a8 采集 \N 2018-01-08 10:43:07.562+08 2018-01-08 11:02:08.927+08 b1c85f0b-c610-4243-83a4-3a1e87b411ad 3 \N
+d0696649-4f35-48e3-b1da-79384789f28b 采集 \N 2018-01-08 11:06:18.393+08 2018-01-08 11:06:56.933+08 962c0a4a-535e-4f86-a25c-f38e3aa6f144 3 \N
+09032111-4073-461a-82b6-1c193ef88077 采集 \N 2018-01-08 08:30:41.935+08 2018-01-08 11:12:03.006+08 44c42c98-a486-411a-8813-c6ba48aab00c 3 \N
+cac190e9-a228-4032-afbc-2f3bf990cc82 采集 \N 2018-01-08 08:30:41.368+08 2018-01-08 11:12:13.358+08 f90de97b-b6e8-417a-b628-7b8e4bb9e335 3 \N
+c20df626-7eb9-47e5-8d36-88233fff0015 采集 \N 2018-01-08 08:30:40.835+08 2018-01-08 11:12:27.177+08 9bdf8d5c-e571-4dd4-9614-0099745b0a73 3 \N
+2e57f353-4b30-441f-a69e-f9e7e639e6a7 采集 \N 2018-01-08 08:30:40.253+08 2018-01-08 11:12:35.76+08 5c18688a-731b-40d0-b4dd-4ba002026bb3 3 \N
+ab8b7681-8ef7-4101-9a8a-5bee37ee7510 采集 \N 2018-01-08 08:30:39.675+08 2018-01-08 11:12:44.989+08 3c8c9002-2d60-43f0-9a2c-52daa53cab54 3 \N
+f2e47767-7959-4aeb-bfe0-0c07202c906c 采集 \N 2018-01-08 08:30:38.763+08 2018-01-08 11:12:56.495+08 8e812d09-7b95-4c07-ad74-d4c66104e7a7 3 \N
+af9a44db-ee90-4372-87a9-b050e87791bc 采集 \N 2018-01-08 08:30:38.156+08 2018-01-08 11:13:13.219+08 e3713c95-6aa3-4a2e-ad89-579a16cb1a03 3 \N
+743c44f5-480c-4c97-80ef-a03ba282ed49 采集 \N 2018-01-08 08:17:08.57+08 2018-01-08 11:13:26.732+08 223ac440-c7b0-4005-8144-f33ce926d9bf 3 \N
+bbcb8570-b0c2-4fb4-ac75-c28c9bf38503 采集 \N 2018-01-08 11:40:11.76+08 2018-01-08 11:40:11.76+08 f0b38ea6-f88e-4e79-b7bb-02d09ef2cf03 3 \N
+0a8e8043-1c0a-48af-b8fd-68658e1b1b61 采集 \N 2018-01-08 11:44:22.158+08 2018-01-08 11:44:22.158+08 92d06569-3e06-4ceb-91e5-d28589632145 3 \N
+06fcfe9a-4b1a-4db0-897b-05746cda4814 能力1 2018-01-08 12:02:17.339+08 2018-01-08 12:02:17.339+08 b1b251a9-2555-415d-996f-88df44f4df3c 3 a5f3b3b0-2db7-446a-8642-c844f6560d52
+0c0a3e16-95cf-42da-8d6c-09d28a68415d 测试能力01 测试能力01 2018-01-08 13:36:45.755+08 2018-01-08 13:36:45.755+08 a8add874-7ace-4c3b-a044-8d6da02a9257 3 fe8171d5-8793-470f-a5b3-83825b6fa00f
+28cd8b3b-ce84-4ece-b281-9c46bbac045c 测试能力02 测试能力02 2018-01-08 13:36:45.772+08 2018-01-08 13:36:45.772+08 a8add874-7ace-4c3b-a044-8d6da02a9257 2 a5f3b3b0-2db7-446a-8642-c844f6560d52
+5b6bf70d-354f-4930-ac36-534e1a992440 采集 2018-01-08 13:46:38.351+08 2018-01-08 13:46:38.351+08 2b6f224d-770e-41bc-b28b-5afbe3b213c4 3 \N
+c68f452e-5afc-4ae3-8ffe-00828a24861c 采集 2018-01-08 15:25:13.482+08 2018-03-29 18:19:53.914+08 4866de4e-56ad-435f-a21b-0f2b00011e12 3 f0dbf2ac-9867-4a07-bfe3-8b84c2e375b2
+a8d7c27f-35f9-4a65-943b-afa42ba34e5a 采集 2018-01-08 13:55:43.519+08 2018-01-08 13:55:43.519+08 09e8eef6-6b70-4cda-84c2-a7680f7a535f 3 \N
+45dc0871-e9be-4b68-bc6d-76d80581e8dc 采集 2018-01-08 14:03:13.654+08 2018-01-08 14:03:13.654+08 6a6797bd-fdda-4b37-bbab-ce377a01521b 3 \N
+d2d71857-97dc-4969-92f1-e380d0ad4bf9 采集 2018-01-08 14:10:26.892+08 2018-01-08 14:10:26.892+08 c36c08c3-4f22-474e-b748-c6c32288c802 3 \N
+9603914f-8d67-404f-813e-1044464c093b 采集 2018-01-08 14:19:21.243+08 2018-01-08 14:31:55.555+08 0d7661f6-5ce5-490a-9520-ad56ba769d79 3 228b069f-74d0-4863-983c-c33d126a4c02
+47aba0a9-a828-4842-9ce0-4733fa6efa10 采集 \N 2018-01-08 14:45:20.93+08 2018-01-08 14:45:20.93+08 8d1d1382-984f-4aa9-8e57-c2a2c21e0c06 3 cc8a4434-b6c9-4c38-a813-90111a3625f7
+58459465-409c-47c0-b73f-a8a1c2cf563c 采集 \N 2018-01-08 14:52:33.35+08 2018-01-08 14:52:33.35+08 e7a84149-53b0-4ba3-88e7-fe7e0e0f21d4 3 2b9ab16b-82fd-4ade-9f6b-e9e0ee2cce71
+db8bf711-b26f-4e79-bc46-564fbc4f60ac 采集 \N 2018-01-08 14:56:23.7+08 2018-01-08 14:56:23.7+08 7c4c667b-dbf0-4c9b-9d7d-7ad9b61b200e 3 8eddc2aa-c465-4548-ad8a-c9f9b34c318c
+a051bf54-cc33-484b-ace2-fe97c26e2ed8 采集 2018-01-08 15:50:34.803+08 2018-09-10 14:41:25.409+08 72fb9e20-7c7b-4ccb-9da1-d8600223beca 3 7aac1370-3321-4738-9717-9dbe62d413b5
+7a1da717-ec87-450e-9707-47f782954311 采集 \N 2018-01-08 15:10:26.507+08 2018-01-08 15:10:26.507+08 f5f27d3f-b8fd-44ee-97e2-8a78748a424f 3 \N
+dde034ce-aa0b-4c0d-bfdb-bcbb2f231808 采集 2018-01-08 15:12:21.608+08 2018-01-08 15:12:21.608+08 0e1586ef-cbec-4dc3-8ff4-af3e4c7c8d2e 3 625ea754-8015-430d-afef-ca20ec2efa06
+9a6a651f-0042-4ae6-af31-20d976cf4566 采集 \N 2018-01-08 15:14:58.253+08 2018-01-08 15:14:58.253+08 e2d104b1-9c57-4a16-8d05-07817bc8b785 3 \N
+80b225c1-5a28-46fd-aa9c-81e77818c907 采集 \N 2018-01-08 17:03:45.952+08 2018-01-08 17:03:45.952+08 a54c400e-8b31-47ec-9820-550d04916f47 3 cc8a4434-b6c9-4c38-a813-90111a3625f7
+37b9a8b6-49f3-40a5-b65e-5dcbd59a7495 控制 2018-01-08 15:32:40.771+08 2018-01-08 15:36:58.678+08 2fd2ebfb-7858-40db-91a8-d933269ccf64 2 80216459-82ea-4fd2-b8a5-a8857b794d5e
+d53a176b-9c3c-46b6-8e05-37b776800b13 采集 \N 2018-01-08 17:03:46.154+08 2018-01-08 17:03:46.154+08 933a027b-e620-4a6e-8340-d10c7aa29009 3 cc8a4434-b6c9-4c38-a813-90111a3625f7
+7c4993c0-3771-4ad6-a71d-2f84390f48e6 采集 \N 2019-12-10 11:41:02.767+08 2019-12-10 11:41:11.245+08 1c9756ed-dcf4-4156-9a43-09ce478d2038 3 d35f3584-07e6-467e-8226-709572429d2d
+460611f1-f603-4af6-8a6a-80290761cde0 控制 2018-01-08 16:15:24.172+08 2018-01-08 16:20:38.044+08 45aee45b-bc26-4ac7-a8ed-3dcbe187b2de 2 0e7f12e2-5208-4731-b100-1d4dd5d7bbf9
+9c370a1f-67ec-4686-a7f6-da10dc99c770 采集 2018-01-08 16:22:24.856+08 2018-01-08 16:22:24.856+08 22dc1e96-f05a-4752-bebf-9d3c1285dace 3 625ea754-8015-430d-afef-ca20ec2efa06
+ab8f77d8-d732-48a5-805a-07d6cde1067d 采集 2018-01-08 16:22:25.019+08 2018-01-08 16:22:25.019+08 c53d6302-b66b-40f4-b190-4d5447180ba7 3 625ea754-8015-430d-afef-ca20ec2efa06
+4d545e19-172c-4acb-9183-248abe86f986 采集 \N 2018-01-08 16:27:56.745+08 2018-01-08 16:27:56.745+08 666e753c-f0b0-478d-b5f5-839117db13f9 3 2b9ab16b-82fd-4ade-9f6b-e9e0ee2cce71
+477069fb-894d-4a5c-9b41-d004be827ac5 采集 \N 2018-01-08 16:27:57.45+08 2018-01-08 16:27:57.45+08 f9331a24-582f-45b8-bea8-b919ffd48516 3 2b9ab16b-82fd-4ade-9f6b-e9e0ee2cce71
+68998ba3-d344-4ae4-9ada-bebb5bba6ec3 采集 \N 2018-01-08 16:27:58.087+08 2018-01-08 16:27:58.087+08 8ea772de-0c69-4a35-bbbb-7e0fb97d7c2f 3 2b9ab16b-82fd-4ade-9f6b-e9e0ee2cce71
+ceb32ec1-625c-450d-b1c8-54be51bd97f6 采集 \N 2018-01-08 16:27:58.784+08 2018-01-08 16:27:58.784+08 03db4d1f-c0bf-47b0-9f10-0a0a5d6cfca3 3 2b9ab16b-82fd-4ade-9f6b-e9e0ee2cce71
+b9611c6a-f9b9-4ebe-a1e9-8665bd4f8734 采集 \N 2018-01-08 16:27:59.731+08 2018-01-08 16:27:59.731+08 d3ae39b6-419c-4d57-a353-69768f82908a 3 2b9ab16b-82fd-4ade-9f6b-e9e0ee2cce71
+1377db1c-e2f6-4ac5-832d-53103233d957 采集 2018-01-08 16:40:09.756+08 2018-01-08 16:40:09.756+08 947fdddf-6d80-4972-88cc-601559ca3458 3 \N
+1ec0d96c-843a-4da9-ada2-a70c23ebe8f4 采集 \N 2018-01-08 16:50:48.399+08 2018-01-08 16:50:48.399+08 80e5052f-477a-4e27-a3bc-0ec95ab3d4a2 3 2a2d8e77-444a-4911-9f33-9de3b1dff1c8
+de7958de-0a8a-4492-8705-642b5c4df424 采集 \N 2018-01-08 16:50:48.896+08 2018-01-08 16:50:48.896+08 fbc83633-74fd-494b-b1b7-75d289358b27 3 2a2d8e77-444a-4911-9f33-9de3b1dff1c8
+58543b3a-1b0d-44ce-a3c3-856bc133204a 采集 \N 2018-01-08 16:50:49.868+08 2018-01-08 16:50:49.868+08 64d50498-d37a-4f4a-99f8-2268e82a035e 3 2a2d8e77-444a-4911-9f33-9de3b1dff1c8
+2e5b58fb-acb8-4ec6-a177-95a7a1c20745 采集 \N 2018-01-08 16:54:47.934+08 2018-01-08 16:54:47.934+08 f446b0ec-ee0f-40bb-a6fc-9767fbd78a2b 3 2cf8a814-f993-4420-8aa3-7fa891995667
+a5889f87-05f4-4786-9e66-b322f564f5f9 采集 \N 2018-01-08 16:54:48.914+08 2018-01-08 16:54:48.914+08 de0bfd26-fb8e-4f9d-8e0a-0119650952c6 3 2cf8a814-f993-4420-8aa3-7fa891995667
+2bfe226a-cde2-4d95-8420-b3ba3f669aa8 采集 \N 2018-01-08 16:54:49.756+08 2018-01-08 16:54:49.756+08 bfc79caf-826f-4f9d-a709-241529e118b5 3 2cf8a814-f993-4420-8aa3-7fa891995667
+546dee6f-5d8b-4572-931b-fa64627c058a 采集 \N 2018-01-08 17:03:46.474+08 2018-01-08 17:03:46.474+08 cb339f74-5895-4180-a0dc-a3cf12151b0b 3 cc8a4434-b6c9-4c38-a813-90111a3625f7
+054f1a33-18e3-4476-a321-2a5482f783da 采集 \N 2018-01-08 17:10:40.672+08 2018-01-08 17:10:40.672+08 a3b4fd36-dd87-463c-84af-254647a24cc5 3 8eddc2aa-c465-4548-ad8a-c9f9b34c318c
+893afc3d-9fb4-47f5-aa47-80e8321a052c 采集 \N 2018-01-08 17:10:41.153+08 2018-01-08 17:10:41.153+08 e718c1a2-1c56-4da0-8cb3-36445c6b4f26 3 8eddc2aa-c465-4548-ad8a-c9f9b34c318c
+0d9f22e5-95c7-4e56-8963-6576d22b3209 采集 \N 2018-01-08 17:10:41.661+08 2018-01-08 17:10:41.661+08 c7f01571-7f09-4bef-99d3-fdc2da5fcaa2 3 8eddc2aa-c465-4548-ad8a-c9f9b34c318c
+9ea4750b-b3f2-4d2b-a190-8ac310bec295 采集 \N 2018-01-08 17:19:40.38+08 2018-01-08 17:19:40.38+08 1f3f14a2-a6d4-44a5-859b-3406794e7b37 3 \N
+f846e46e-f9f4-4c0f-b697-4f3fc7d64f25 采集 2018-01-08 17:33:37.631+08 2018-01-08 17:33:37.631+08 448efd11-ceec-4f64-93a0-ad7133e38b8d 3 \N
+d6464eff-41e6-49fb-a8f9-7ebbe2e297e0 采集 2018-01-08 17:34:18.702+08 2018-01-08 17:34:18.702+08 5f908b85-0f3a-48c0-bc83-8e191731a754 3 32d06cb0-ba6b-44d3-90aa-a768cb50cfed
+f0df6373-949a-4e30-b883-f49611315df1 采集 2018-01-08 17:35:44.857+08 2018-01-08 17:35:44.857+08 157090bc-b53c-4ae3-94fc-4b3804ed6433 3 \N
+662ce139-84eb-4601-b783-3dc6503c1255 采集 2018-01-08 17:44:21.351+08 2018-01-08 17:45:25.078+08 cad4657b-dba7-4ad9-990c-bf0ce3ee1e6f 3 0cbce951-a9a9-4eed-b235-fad6a532803b
+e2e995b6-c748-453c-a19b-86372c107168 控制 2018-01-08 18:00:05.712+08 2018-01-08 18:00:05.712+08 930f1b29-d056-40a8-9b86-62829634874c 2 b1c9853e-85b4-4c3f-8fb0-0a5e6f596fbf
+be68ca54-6bb8-4d57-8db7-6acdaa05c876 采集 \N 2018-01-08 19:28:51.349+08 2018-01-08 19:28:51.349+08 2dead818-122a-42d9-8f52-3aa8d92ab0c3 3 \N
+22324cd3-c5d3-4628-9499-bcf2021d5ee8 控制 2018-01-08 18:26:58.123+08 2018-01-08 18:26:58.123+08 0dcb57e3-244f-44d3-8f9c-a50fc74481a8 2 2ed40a11-7a2b-4aa7-a649-28b9d72efbf8
+0b714d0d-91d6-4e91-940d-189bec077752 采集 \N 2018-01-08 18:41:35.146+08 2018-01-08 18:41:35.146+08 870242c3-963d-417d-85fa-21add06c9e0a 3 \N
+bee3569d-fbcf-4c8e-809d-535e0e515921 采集 \N 2019-12-11 10:59:06.969+08 2019-12-11 10:59:06.969+08 52c7f175-bdd6-4c4c-948d-aa2a7868cd82 3 235a942c-f4b2-48dc-8c48-25d92e7832d4
+978ae9f7-08b3-4e87-add1-abccd6d759d0 采集 \N 2018-01-08 19:23:48.685+08 2018-01-08 19:23:48.685+08 537cf41f-69a4-47de-81ee-63485ab8df1d 3 \N
+aca808a3-91a5-43d4-9aa2-171a388266a1 01 2018-01-22 17:01:19.503+08 2018-01-22 17:01:19.503+08 b914a394-bbd8-4ff4-857e-02a2d8eb6d25 3 3fc1f94e-7054-43a4-a42d-21b63c00442c
+6b9cf407-77e8-47af-b3c7-571606764785 采集 \N 2018-01-24 11:26:28.343+08 2018-01-24 11:26:28.343+08 780de52c-47eb-46cb-b77b-3d919bae5ffb 3 6961f5ca-3d77-4944-921f-d4bf6d757bce
+4e508627-863b-46fa-9454-a074ef2fbe8a 采集 2018-01-24 11:33:34.509+08 2018-01-24 11:33:34.509+08 27930598-2f6e-4932-a816-9685f17969b5 3 \N
+b9bb6058-9981-44a3-8688-1df4dc7f042b 采集 2018-01-24 11:05:24.809+08 2018-01-26 16:19:24.548+08 38b81b7d-bb3e-4885-aaea-6035faf20d1b 3 d35f3584-07e6-467e-8226-709572429d2d
+500186ab-cb13-4844-b7d8-ed0fa7a17c9b 采集 2018-01-30 17:26:52.474+08 2018-01-30 17:26:52.474+08 67becf68-18c7-4ab3-83b2-d306f89bd25d 3 1fd5bb36-282f-48f4-bddf-3e3b780b76c3
+9a25cd7a-d145-4a19-95a1-bae3a0cb0260 采集 2018-01-24 11:19:10.113+08 2018-02-02 15:40:55.951+08 76288807-186e-4444-a1ce-6be599aacfd2 3 c72e540a-8318-44ec-98ba-85e71214bd9b
+a4dea266-bdd4-4ec6-8334-565d7cdc947c 采集 2018-01-24 11:19:02.107+08 2018-02-02 15:41:51.771+08 75c932d0-2df0-4628-81dd-0e9c1f11ff60 3 c72e540a-8318-44ec-98ba-85e71214bd9b
+363a580c-77e4-4464-8c92-4ee9c989358f 采集 2018-02-06 17:17:32.191+08 2018-02-11 16:49:54.954+08 7fefd73e-8fd9-48a6-8d7a-76f5796a8197 3 \N
+bd051793-11f0-4c75-bb85-912a2c4e022b 采集 2018-02-11 17:07:24.774+08 2018-02-11 17:07:24.774+08 fdf34922-d64e-4616-9313-96d7d94b8412 3 \N
+cf2e6e9e-b046-437d-a041-4461ff0be3e3 采集 2018-02-11 17:16:18.664+08 2018-02-11 17:16:18.664+08 b53146b9-7737-46cd-a305-e2c9cb286d3d 3 \N
+b38d50f8-60f9-44b9-865d-647810e416cf 采集仪 2018-03-01 14:29:42.733+08 2018-03-01 14:29:42.733+08 c69575ab-795c-45ec-8901-f370255beff1 3 04cd9536-5e39-46e9-a263-370fb4a6acd3
+d05b0093-f276-418f-90d3-8e0bfe3c36ef 采集 \N 2018-03-05 13:34:31.699+08 2018-03-05 13:34:31.699+08 a1923ce2-b8a5-45cb-9d98-6a42901cee7c 3 62fa51b4-81bf-46a7-9c06-607eb1b34f3d
+495c7b48-59c7-4d0d-8294-c5f50e2460e4 z \N 2018-03-07 16:03:25.194+08 2018-03-07 16:03:25.194+08 7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4 3 b9e32a9e-36d5-4b15-baca-567f42a0f45b
+aca3e62f-b4ec-46cc-887a-563ce53b652a 采集2 2018-03-26 11:16:11.494+08 2018-03-26 11:22:24.2+08 02513eed-ba94-456b-86e0-89ea996b879d 3 \N
+c26fbe87-b6ec-4f0d-a907-e05fddec8f41 云采集 \N 2018-03-26 13:37:56.333+08 2018-03-26 13:37:56.333+08 0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1 3 \N
+b70abc38-5a40-4c7c-8bc8-f238c0b3dc15 云采集 \N 2018-03-26 14:15:06.594+08 2018-03-26 14:16:25.787+08 d2a5375c-0240-4435-9b8f-a62372fafaca 3 \N
+7b458eae-2daa-407f-8597-e3a64d0dbb65 数据 \N 2018-03-16 11:38:34.15+08 2018-03-16 11:38:34.15+08 61f09dd0-ba56-40e4-a2d1-45dab1143900 3 \N
+21a71013-2a7f-46e0-8ced-77ada77b1342 云采集 \N 2018-03-26 14:26:21.001+08 2018-03-26 14:26:21.001+08 780ffe7d-7369-4d2f-9184-32790466f2ba 3 \N
+ea781b14-56d0-478f-991f-05c1ed5fdf93 云采集 \N 2018-03-26 14:38:06.922+08 2018-03-26 14:38:06.922+08 90a2bc12-2214-43ff-9154-9b9212de2c10 3 \N
+fca1794e-e349-42fb-aef1-59f5eb4c3efd 采集 2018-03-20 17:29:17.046+08 2018-03-20 17:29:17.046+08 b3b4f0f1-7cdc-4892-9e6a-f4936931472c 3 1285ee16-87aa-464e-9656-872ede3b16a1
+798127c2-0250-443c-8627-ac234388ae50 采集2 \N 2018-03-23 17:07:09.224+08 2018-03-23 17:07:09.224+08 bc476c11-0887-40fb-ae9e-06ab514a44c0 3 \N
+7c9f78f3-049b-4f4f-86ce-ed4945136111 采集 \N 2018-03-26 11:16:11.511+08 2018-03-26 11:16:11.511+08 02513eed-ba94-456b-86e0-89ea996b879d 3 \N
+153dac9d-f2e3-4e56-8402-86df0c0ae5d9 云采集 \N 2018-03-26 15:13:58.985+08 2018-03-26 15:13:58.985+08 c0cde67c-9734-4a3c-bb52-0caba0ae8724 3 \N
+d5370a7a-bba2-4997-9b8b-2cbbad5ebfa0 云采集 \N 2018-03-26 15:43:13.107+08 2018-03-26 15:43:13.107+08 37c046eb-9a0e-49b0-95fb-f0128338f381 3 \N
+381fa9a7-3a18-49ce-91bb-b29ebd23429f 云采集 \N 2018-03-26 15:59:07.919+08 2018-03-26 15:59:07.919+08 cb4eb310-0876-492a-9e06-8cd0a5542c5b 3 \N
+9da5e8ea-d055-48f8-97e4-5e64ccb9334c 云采集 \N 2018-03-26 16:12:54.047+08 2018-03-26 16:12:54.047+08 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 3 \N
+ac2bc3da-4bf9-435b-b48f-d06f4cabd50a 数据 2018-03-26 16:47:53.773+08 2018-03-26 16:47:53.773+08 8c2579cd-6aca-4902-a9d6-61e916a4541e 3 \N
+37a8aa55-7282-4e2a-8cf5-a32e6a00c381 数据 \N 2018-03-16 16:58:05.008+08 2018-03-28 10:01:47.896+08 86cc781e-642b-40ee-b49f-1e94aec669ae 3 ea741512-cf76-4546-8b90-3cea1faf6018
+72f27aba-3030-490b-9c55-ca21f1294c15 采集 2018-03-28 14:54:49.042+08 2018-03-28 14:54:49.042+08 09252236-560b-47e1-bf81-f774d303ba26 3 \N
+8f63105e-6340-4d3e-8436-b564d092296a 采集 2018-01-11 10:36:37.375+08 2018-03-28 16:38:50.26+08 58647986-2640-4318-902a-5ee7d04150ef 3 85991f31-8b74-4529-98ea-bac8bef43938
+ef22c0f1-7da1-47eb-915f-8ef899a1c2e0 采集 \N 2017-11-25 12:00:43.507+08 2018-03-28 23:32:12.778+08 6aa982a5-d7a3-48ee-b1dc-afe4686ce796 3 \N
+5abdf680-af46-47fe-80f3-d98fa0be49e0 采集 2018-03-14 08:03:41.085+08 2018-03-29 17:28:38.909+08 77d8ba09-082d-405d-aeca-9a0d66f902c3 3 5cbb0e55-7ff3-43d3-bfce-e2e1d8ea2186
+c12bb164-9c52-4a79-8210-b5c74534053a 数据 2018-04-02 16:51:42.73+08 2018-04-02 16:51:42.73+08 1e7003bf-2cd1-4dcb-9ad9-116151f49ae6 3 \N
+bf250923-ab23-43ab-a4c3-0aebe72d5c84 采集 \N 2018-04-02 17:18:18.083+08 2018-04-02 17:18:18.083+08 c15c6be6-83b0-47ea-ac05-38d625eb8ac8 3 \N
+ea35c8e5-60d3-46c7-a819-b0557f2be17b 采集 2018-04-03 12:41:11.894+08 2018-04-03 12:41:11.894+08 1e20c41f-4f52-4d61-94e4-ae8496163aed 3 30362f9f-8691-4ba1-8338-583ea6d80c08
+e59809ab-9197-4c91-8a1b-041a187eafc0 采集 2018-04-04 16:47:18.037+08 2018-04-04 16:47:57.92+08 8185c197-338c-42e3-acfc-acba2bb1b180 3 a83e3f95-d82b-4cc6-9d57-704bc5e09ad1
+72a5348d-2988-4bd5-ad2b-b46b616e70a9 采集2 \N 2018-04-08 14:06:26.076+08 2018-04-08 14:06:26.076+08 ea2cc9e5-072a-4994-a232-f79655536c64 3 \N
+b689f4eb-472a-4f21-93e2-9a7c753479bd 采集 2018-04-08 14:06:26.096+08 2018-04-08 14:06:26.096+08 ea2cc9e5-072a-4994-a232-f79655536c64 3 \N
+fa4989e0-0602-43e4-a5d6-3b5492e9711d 采集2 \N 2018-04-08 14:06:27.122+08 2018-04-08 14:06:27.122+08 7f76a800-a32e-483a-a948-919fc9e7d075 3 \N
+5d4fd2cc-9b83-48da-80df-6dd615d69195 采集 2018-04-08 14:06:27.149+08 2018-04-08 14:06:27.149+08 7f76a800-a32e-483a-a948-919fc9e7d075 3 \N
+88f8eecf-bb3b-4dbc-b003-2c28bdf07be4 采集2 \N 2018-04-08 14:06:27.658+08 2018-04-08 14:06:27.658+08 3f493145-8216-487c-b145-d58dacf9c570 3 \N
+a40e7ecd-bd8d-4e58-95af-f964d8861447 采集 2018-04-08 14:06:27.667+08 2018-04-08 14:06:27.667+08 3f493145-8216-487c-b145-d58dacf9c570 3 \N
+05b3e292-e599-4d57-ab16-7bff3ae393d2 采集 2018-04-09 08:03:04.744+08 2018-04-09 08:03:04.744+08 b9829d8a-9088-455a-ad16-9a814303b909 3 6b5d1a2e-2aff-4663-bec3-ea25fbafe236
+0183e607-ae45-461a-84be-4b7fb9ef5951 云采集 \N 2018-03-14 09:32:03.26+08 2018-07-18 09:54:22.856+08 c9946e27-bce7-41eb-b341-d6b03a7f115f 3 \N
+dd2a1a9e-0e3e-4ed3-b133-f9f7ebd0cd91 采集 \N 2018-04-03 09:08:34.239+08 2019-07-09 15:28:05.91+08 6def140f-5189-490c-ab4c-57e84dfcd3bf 3 227ec3db-dca7-4164-91f6-b59aabfaf84d
+9960853c-2f09-4f84-83dd-6ef785bd63d8 采集 2019-12-11 15:37:46.772+08 2019-12-11 15:37:46.772+08 7d9b7e21-42e2-4040-86d7-4bdbba095e43 3 \N
+a3a7688c-d8f4-4315-aeb1-e78ecddf9b7d 采集 \N 2018-03-23 16:12:32.69+08 2018-06-25 11:31:19.941+08 d52af3c0-c4b0-4091-96c6-ac3e97535f92 3 09903e18-4a03-454d-a5fe-c91275a5400f
+699f8e7d-9985-4a05-83be-7ff6a0c7188b 采集 2019-12-12 11:29:56.735+08 2019-12-12 11:29:56.735+08 a8dd8956-f9ae-40d0-b207-8f5cf9669545 3 74d1b296-4f53-442e-84f0-f0bfbd6358af
+84fc8a27-019f-4640-bbf6-466627f7c6d6 采集 2018-03-26 11:41:39.433+08 2018-03-26 11:41:39.433+08 fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45 3 \N
+ef4bfc5b-4560-487e-9e27-4a3249da9ae3 采集 2018-01-18 15:22:34.515+08 2018-01-18 15:22:34.515+08 c0b0b779-cafb-4d7f-b4ff-64534e422738 3 df33dca6-7c97-4dd6-a1e1-09b2a98ba5f8
+73fc848a-0c95-4953-a162-0679cf2a8586 采集 2018-01-18 15:22:34.698+08 2018-01-18 15:22:34.698+08 abefa36d-6587-4818-bb39-e14a51c26b4e 3 df33dca6-7c97-4dd6-a1e1-09b2a98ba5f8
+1e00c4ae-1aa0-4767-bc51-c7b09621466d 采集 2018-01-18 15:22:34.878+08 2018-01-18 15:22:34.878+08 79ef29a0-9796-43ce-957d-952d3b16d70a 3 df33dca6-7c97-4dd6-a1e1-09b2a98ba5f8
+78740935-2863-41f7-ba2b-ed0d3d55d5c5 采集 2018-01-18 15:22:35.038+08 2018-01-18 15:22:35.038+08 ef4d9187-0ca8-44c7-b7f5-42e6c0904fd5 3 df33dca6-7c97-4dd6-a1e1-09b2a98ba5f8
+c8ec5d4d-0d9c-4262-8ec6-3a089114fb5d 采集 \N 2019-12-12 16:54:27.269+08 2019-12-12 16:54:27.269+08 8b4d38be-2454-4d9b-a586-d894c5197362 3 f0dfe60c-b6d2-4c5d-a2de-92993726687b
+70d4d474-0524-459c-9144-237922982ec3 采集 2018-01-30 17:38:49.92+08 2018-01-30 17:38:49.92+08 745e1f26-ee66-45dd-9606-052a34a944fc 3 b2f54327-7b39-41e7-b7b2-4ba258e6cf00
+010ebb8f-5154-406a-a14c-cf57be327ecf 采集 2018-01-24 11:18:54.118+08 2018-02-02 15:42:09.189+08 11a0df92-8921-470b-af9c-d7593b8b1f78 3 c72e540a-8318-44ec-98ba-85e71214bd9b
+dcbc00f3-d440-4b2e-b869-c6e2e602316c 采集 2018-02-06 17:32:56.521+08 2018-02-11 17:01:51.769+08 9137c92c-6de6-4b00-bafc-a995288280f7 3 \N
+4763af57-7fa9-48b5-a8f2-db469fce1e1a 采集 2018-02-27 09:46:30.763+08 2018-02-27 09:46:30.763+08 a8e0db23-0d35-4eb1-a5b8-deadd9c3d80d 3 1fccedae-daf9-41b3-9577-7ce5383902a2
+89941851-3e91-426b-b842-0e31d50848f5 采集 2019-12-12 17:00:31.878+08 2019-12-12 17:00:31.878+08 1d7e6445-a676-42b9-9314-837415832451 3 0ec2d3bc-8485-4a34-b820-7241990fc394
+39ae566f-f125-4bb3-8f18-39fd4ace09dd State 2019-12-16 11:28:20.059+08 2019-12-16 11:28:20.059+08 fbb11421-cbb6-435e-b9f0-4bf1e056016c 3 bbd0c618-985d-47a7-b844-e4831697168b
+8d3e93e6-61dc-4f46-b610-22b88a38d41d tt \N ff 2018-03-06 11:26:54.858+08 2018-03-06 11:26:54.858+08 8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812 3 0d0ea7fb-6462-43e0-a70c-559a0a3cec40
+b2781342-015f-4ca3-bd80-448fcb3d4bc0 1223 \N 2018-03-07 16:18:17.096+08 2018-03-07 16:18:17.096+08 24ff3733-db3f-4d37-b90a-edd44a77e054 3 b9e32a9e-36d5-4b15-baca-567f42a0f45b
+e0b566e2-b4bd-4224-9cd0-301b176bfbfa 采集 2018-01-23 10:17:42.57+08 2018-04-27 14:42:12.755+08 08ca737d-d94b-46f2-bb48-33327b7fc0eb 3 a288632d-ffc9-4246-9d60-063f43955e03
+c45aed9b-1c0e-4a57-b536-f4aa49396a5c 采集 \N 2018-03-12 12:51:38.683+08 2018-03-12 12:51:38.683+08 aee112f2-97fd-415e-b3b8-7009ea712ab1 3 \N
+7d5454c7-afcf-4af8-a34c-03fd5ec820f8 采集 2018-03-14 15:32:30.96+08 2018-03-14 15:32:30.96+08 5d399cb2-7e5a-4a27-bff0-e1769f43499d 3 \N
+e2e4c206-ed4b-4fae-8755-5dc970720c89 采集 2018-03-14 15:32:44.479+08 2018-03-14 15:32:44.479+08 aa6f3b0e-9bd2-41e8-801d-730aca3e32fb 3 \N
+d6f7c1bb-56ff-4e70-b237-b1c8cfd826ac 采集 2018-03-14 15:54:05.903+08 2018-03-14 15:54:05.903+08 28d8942e-d1ab-40ee-878a-c3b2f60da896 3 \N
+f45f4852-853f-4a66-a359-8b48c4624b75 数据同步 2018-03-15 13:45:07.091+08 2018-03-15 13:45:07.091+08 fa0123d0-7db7-4412-9670-53175d0c2c40 3 8b310a31-95ae-4f4a-bf8e-231f892b9dfe
+4ee6b60b-02a2-4760-99c8-873ad7ae2475 采集 2018-03-15 13:49:32.796+08 2018-03-15 13:49:32.796+08 ee21c9a6-d51b-4f10-83cc-8c9611003cfa 3 \N
+540a8aa4-184a-4795-acea-025548061b8c 采集 2018-03-16 09:57:17.071+08 2018-03-16 09:57:17.071+08 c841ad96-ea6e-4050-b317-a0d79fecbead 3 9471a5e1-b72a-4a1f-ab9e-2e5c6e42b4e7
+eaa55b41-7d6a-48d3-8600-2b52eaad59a4 数据 2018-03-21 09:54:46.403+08 2018-03-21 09:54:46.403+08 12a0ae21-df74-42b4-94ce-492125b941bd 3 \N
+32b8c637-51b5-405c-920d-f7ae0adefafd 采集2 \N 2018-03-26 11:41:39.442+08 2018-03-26 11:41:39.442+08 fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45 3 \N
+a7e720b6-f0ca-4a8d-aabd-18b8c8825303 采集 2018-01-08 19:23:06.707+08 2018-12-14 15:49:05.166+08 f55d7414-2db9-4c07-ad9b-34637318171e 3 \N
+e4c071d1-afb9-4178-923b-18a37265ca86 采集 \N 2018-03-26 11:16:13.109+08 2018-03-26 11:16:13.109+08 2e0d00cd-a321-4504-b716-41813848cbdb 3 \N
+bc373436-023b-41d4-9608-6a33bb926e80 采集2 2018-03-26 11:16:13.099+08 2018-03-26 11:21:35.731+08 2e0d00cd-a321-4504-b716-41813848cbdb 3 \N
+363b62ae-2ccd-4c86-915d-03380bc9d89c 采集 \N 2018-03-26 11:27:35.441+08 2018-03-26 11:27:35.441+08 9297adfa-1972-45e3-a5c4-0f31a0acbe84 3 \N
+8693e382-e7e6-4efa-8583-d0251cb0b360 采集2 2018-03-26 11:27:35.45+08 2018-03-26 11:27:35.45+08 9297adfa-1972-45e3-a5c4-0f31a0acbe84 3 \N
+f75af319-b305-463e-a3dc-78df902b61ef 采集 2018-03-26 11:30:25.464+08 2018-03-26 11:30:25.464+08 ca6af9e3-f1dc-4992-8029-d0e438ef99b5 3 \N
+6c75e8aa-7e92-4611-8962-1c79a7ba9ef2 采集2 \N 2018-03-26 11:30:25.487+08 2018-03-26 11:30:25.487+08 ca6af9e3-f1dc-4992-8029-d0e438ef99b5 3 \N
+d8193d74-feb5-4872-8e42-95a335cd383f 采集2 \N 2018-03-26 11:43:22.705+08 2018-03-26 11:43:22.705+08 a9d42f6d-8409-415c-937e-aea8bebf7a50 3 \N
+750c60f8-168e-4bca-acf5-df2d502915f5 采集 2018-03-26 11:43:22.721+08 2018-03-26 11:43:22.721+08 a9d42f6d-8409-415c-937e-aea8bebf7a50 3 \N
+b0488049-bfc9-40ee-8dfa-79f9233638ec 采集2 \N 2018-03-26 11:43:22.863+08 2018-03-26 11:43:22.863+08 3aba791d-d6b2-4175-bb20-109f210f4065 3 \N
+08b32693-e4b0-44db-9d79-e45dff49062a 采集 2018-03-26 11:43:22.872+08 2018-03-26 11:43:22.872+08 3aba791d-d6b2-4175-bb20-109f210f4065 3 \N
+c0ea2d7f-7778-47aa-af49-0119a729c741 采集2 \N 2018-03-26 11:43:23.17+08 2018-03-26 11:43:23.17+08 0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83 3 \N
+228d8257-dcf7-4493-a4d4-083712716318 采集 2018-03-26 11:43:23.183+08 2018-03-26 11:43:23.183+08 0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83 3 \N
+b72802e5-4982-4ba1-bd1b-15ba05d7d832 采集2 \N 2018-03-26 11:43:24.204+08 2018-03-26 11:43:24.204+08 f30482b9-b518-4048-8217-bd64158911e6 3 \N
+0f684ae0-ceb8-4c6a-95c4-e83bdd79059e 采集 2018-03-26 11:43:24.219+08 2018-03-26 11:43:24.219+08 f30482b9-b518-4048-8217-bd64158911e6 3 \N
+ce140baa-bcd7-4756-9d06-9591535eed2a 云采集 \N 2018-03-26 13:53:33.644+08 2018-03-26 13:53:33.644+08 73a7b800-25d7-41ad-872d-96cc4f9430de 3 \N
+aca7e15e-5b9f-4595-8640-9e7c920ef810 云采集 \N 2018-03-26 14:02:43.871+08 2018-03-26 14:02:43.871+08 abaf6bf4-288f-4d21-9fab-515213e6dcac 3 \N
+f3879800-9585-4575-a261-25c1128fcaf9 云采集 \N 2018-03-26 14:29:22.849+08 2018-03-26 14:29:22.849+08 424f45f6-916c-4383-bce4-c71153f82e63 3 \N
+88e6acfa-2714-4821-9ff8-c5d96a23ce68 云采集 \N 2018-03-26 15:17:46.058+08 2018-03-26 15:17:46.058+08 bbfa13d3-fd42-4230-97e6-792463dbaf85 3 \N
+0428f647-9944-415c-b6f0-93e7329d31c9 云采集 \N 2018-03-27 10:57:23.45+08 2018-03-27 10:57:23.45+08 e5f12d4b-bb3c-4158-b98e-8af3579bd2cc 3 \N
+6ebb2c0f-06fa-4b77-b028-4818465a7019 云采集 \N 2018-03-27 11:00:35.446+08 2018-03-27 11:00:35.446+08 362018b7-e626-4eab-a6ad-214d85cfcc03 3 \N
+5aeba65e-e787-4076-8e03-a33698701ff2 云采集 \N 2018-03-27 11:12:21.149+08 2018-03-27 11:12:21.149+08 5f4e4e99-20b3-4bf7-95cb-a2f507595b2d 3 \N
+b7f4e4fa-c1a4-4f44-9c29-bab2e1b860fe 采集 2018-01-11 11:13:31.331+08 2018-03-28 16:38:35.586+08 d53887ba-c67a-4b45-a1ed-1a61fbde6c4c 3 0856b400-ee67-440c-b534-b075d2b36023
+53281743-bc5c-46cf-addc-706810bcd681 采集 2019-12-11 15:50:46.311+08 2019-12-11 15:51:39.679+08 79d3e66b-d0ad-4c0f-b724-11eca0d0c0cb 3 0f1f4851-c5be-432e-82bc-babc64646eed
+8e60936a-d379-48c0-bab9-7f9d02c1a5f0 采集2 \N 2018-04-08 14:00:40.996+08 2018-04-08 14:00:40.996+08 f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d 3 \N
+3fde2361-48e1-41a2-9063-28daac442f9b 采集 \N 2018-01-23 10:22:45.745+08 2018-01-23 10:22:45.745+08 219cbb09-9c49-4167-846d-00a8bdfadb9a 3 \N
+1a664a1a-b5f1-4e75-916f-21bc94749d0e 采集 2018-01-24 11:30:26.759+08 2018-01-24 11:30:26.759+08 1d48c633-6d83-4b96-a572-6f59a0100c9b 3 \N
+09048659-5be8-43d3-9189-61f71c225e04 采集 2018-01-24 11:19:06.362+08 2018-02-02 15:41:28.364+08 9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec 3 c72e540a-8318-44ec-98ba-85e71214bd9b
+d33d38fd-5c34-41af-864c-314b9cc326ec rrr 2018-02-02 16:19:55.42+08 2018-02-02 16:19:55.42+08 22827d64-06e1-4752-a0b6-3cf6fb36cd21 3 9f3d7c20-ffe2-4e03-88d4-798fa7c8dcd8
+511b86b5-3773-45aa-b518-9b29071357e1 采集 2018-02-07 09:45:44.214+08 2018-02-07 09:45:44.214+08 5ecfc751-afb0-4596-a6f7-85a31eca40c3 3 8f9e2bf6-e76c-4794-b3f0-1af76a216b60
+c64d06e4-145c-4bbb-919c-1147dac429b9 同仁堂 \N 如若 2018-02-27 14:54:53.555+08 2018-02-27 14:54:53.555+08 7697d048-c21e-4b28-8c88-a59de01bae96 2 672258f5-8e0b-43b1-8e33-39a92693774e
+537d2dc0-86ba-4f40-8da1-06a0e34795cc 配置同步 \N 2018-03-15 13:46:19.588+08 2018-03-15 13:46:19.588+08 fa0123d0-7db7-4412-9670-53175d0c2c40 2 70b1f69b-2605-42ef-a7c2-6746c1289f7c
+5ce3382a-6764-4a08-8bfe-5b058e8a9017 采集 2018-03-15 16:52:12.162+08 2018-03-15 16:52:12.162+08 63429c67-5b55-4b88-998c-65d4464623c8 3 \N
+5d266e86-fadf-4335-843c-a721ecb814c3 采集 2018-04-08 14:00:41.04+08 2018-04-08 14:00:41.04+08 f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d 3 \N
+0226f5d5-c83d-4a9b-8448-adb854fa4336 采集2 \N 2018-03-23 17:58:37.774+08 2018-03-23 17:58:37.774+08 771be2fa-a2f9-4ba8-8c08-76b091627b87 3 \N
+43e14c1c-a425-4001-9886-f41df72945ea 采集 2018-03-26 11:35:23.09+08 2018-03-26 11:35:23.09+08 0b09cbd9-3881-4b4a-8910-0e8730d5d935 3 \N
+053f72a5-5576-48de-baa6-a2732ff863cc 采集2 \N 2018-03-26 11:35:23.102+08 2018-03-26 11:35:23.102+08 0b09cbd9-3881-4b4a-8910-0e8730d5d935 3 \N
+82a15a43-5463-4d67-88ea-0a816235bd70 采集 2018-03-26 11:35:23.208+08 2018-03-26 11:35:23.208+08 aab61193-270e-4d06-9bdf-9da5194c744a 3 \N
+4f92b0e6-a618-4221-8c58-169247d88bd0 采集2 \N 2018-03-26 11:35:23.214+08 2018-03-26 11:35:23.214+08 aab61193-270e-4d06-9bdf-9da5194c744a 3 \N
+b3e8b1eb-5d72-4bda-875a-d83d7c593dfe 云采集 \N 2018-03-26 15:21:39.58+08 2018-03-26 15:21:39.58+08 f6b98e0f-0bfe-4a95-808c-d6d10b4c803b 3 \N
+5c6f4070-1acc-4ac2-91d6-b7420f02a37b 云采集 \N 2018-03-26 15:36:16.543+08 2018-03-26 15:36:16.543+08 8bab3e11-dc23-4082-97ec-a04e78fa19c3 3 \N
+81a87805-fc42-456d-960f-fb793999d631 云采集 \N 2018-03-26 16:24:30.181+08 2018-03-26 16:24:30.181+08 c9eacd36-38d6-48b9-9672-e76406906ea3 3 \N
+f19d92bc-802e-4662-9419-3f664f0d7eba 云采集 \N 2018-03-26 16:50:56.087+08 2018-03-26 16:50:56.087+08 50600703-5c4c-4ceb-a44d-d0b79882b1dc 3 \N
+a266afb7-b532-4336-b199-cb33af206062 采集2 \N 2018-03-27 10:50:38.101+08 2018-03-27 10:50:38.101+08 4d523084-bf91-421f-bafc-f278a63c5541 3 \N
+7685d43c-d87a-4eb4-88e0-1bde3d9eed5b 数据 2018-03-16 11:58:51.506+08 2018-03-28 11:26:27.861+08 c8fd3080-b416-4381-8bcc-e84c12471281 3 \N
+66aa8517-e2eb-4eaa-b1aa-77db8ee96462 511 111 2018-03-28 15:40:02.864+08 2018-03-28 15:40:02.864+08 7faf119d-7804-470c-a448-516d681cce6b 2 \N
+2dd2b9c9-f307-4635-98cd-0aed7043075d 采集 2018-04-02 10:37:43.663+08 2018-04-02 10:37:43.663+08 56c84083-d705-4aa0-94d2-34b731f75f97 3 \N
+e23258d4-5427-479c-b19b-25ac08c4888f 采集 2018-03-19 14:57:03.368+08 2018-04-02 11:06:37.552+08 717279c9-81b5-4bfe-8dd3-906297d70e41 3 a0c8ab50-1f6a-43dd-b2e0-7e185e5c3c00
+ca247144-4f2b-40e9-a2a9-de78942565e5 采集 2018-04-03 11:39:47.189+08 2018-04-03 11:39:47.189+08 cda0b115-60d6-4169-8f45-4a92d6801fb3 3 cba2303c-cdd4-477f-8bff-49ff734cfcd6
+c160a4b0-d8da-4e66-ae49-305ecdd5ca48 采集2 \N 2018-04-08 14:06:24.501+08 2018-04-08 14:06:24.501+08 cf54dd7a-2c8a-4f16-9f92-7484af585f13 3 \N
+b446a06d-eb4f-4b6f-98ff-4eba1f2dd35a 采集 2018-04-08 14:06:24.525+08 2018-04-08 14:06:24.525+08 cf54dd7a-2c8a-4f16-9f92-7484af585f13 3 \N
+b484a973-d8b7-4e1f-a3a1-8be21122c6fe 采集2 \N 2018-04-08 14:40:14.013+08 2018-04-08 14:40:14.013+08 4142b1cc-3576-456b-b0e4-31e68cc16b32 3 \N
+def3cc25-dff3-43d3-b77c-855e1683db60 采集 2018-04-09 08:05:14.718+08 2018-04-09 08:05:14.718+08 fbc0de18-03f7-421b-b7d4-4440a7c96791 3 \N
+541024ad-b513-4adb-b4ea-9a3eb3b67f5c 采集 2018-04-10 09:58:21.457+08 2018-04-10 09:58:39.78+08 727fa9b6-b621-41cb-b084-ef3f74f7c496 3 \N
+ade7450e-eb35-4424-8b11-83f4c466bef7 采集 2018-04-11 09:27:08.923+08 2018-04-11 09:27:08.923+08 d75d2473-6ed4-437c-8509-682f55d0d407 3 030de29c-d4cb-4747-9885-3a81f9cf61ba
+9f8406e9-e9ca-4ca0-ae96-258bb6917390 采集 2018-04-11 16:24:01.258+08 2018-04-11 16:24:01.258+08 6e1d3878-3ea2-4c73-9137-0ef98781be0c 3 9849a791-5487-439b-a063-f7691ed40bfc
+6831367e-c4c8-407a-b2d6-3259490ee594 采集 \N 2018-03-23 16:51:24.666+08 2018-04-19 11:01:02.777+08 9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8 3 65495481-c107-49ff-98c9-2c4215b38347
+3c6dfe0c-5013-4f63-9222-721718b82b24 采集2 \N 2018-04-12 11:22:18.178+08 2018-04-12 11:22:18.178+08 a8e0db23-0d35-4eb1-a5b8-deadd9c3d80d 3 \N
+a85e3b5f-f279-4094-b079-07d51a243899 采集 2018-04-16 11:54:59.734+08 2018-04-16 11:54:59.734+08 84deac79-cd1d-4320-bcc6-3a0cdd4451da 3 \N
+64cbf359-5e92-46a5-ac77-4ba6566e6539 云采集 \N 2018-04-16 13:52:32.77+08 2018-04-16 13:52:32.77+08 84deac79-cd1d-4320-bcc6-3a0cdd4451da 3 \N
+b848da41-0b65-4b04-afdb-aedda940be03 采集 2018-04-16 14:07:58.015+08 2018-04-16 14:07:58.015+08 6c650368-cf3e-4a75-a30d-01b2a37356fb 3 \N
+02d9ea95-34c0-4d67-a8dc-755e3330cb36 云采集 2018-04-16 14:07:58.042+08 2018-04-16 14:07:58.042+08 6c650368-cf3e-4a75-a30d-01b2a37356fb 3 \N
+c76c28b1-6041-44be-9ce9-39728d5de7c6 采集 2018-04-16 15:46:07.726+08 2018-04-16 15:46:07.726+08 df68d6a9-c963-4bc4-a122-332e3d1435ac 3 \N
+b4f14b5d-82f1-4ea1-b10f-3e38e552168c 云采集 \N 2018-04-16 15:46:07.746+08 2018-04-16 15:46:07.746+08 df68d6a9-c963-4bc4-a122-332e3d1435ac 3 \N
+3a873f72-4f94-4141-94f5-023d34b61d1f 采集 2018-04-16 15:46:07.882+08 2018-04-16 15:46:07.882+08 c60cc02d-8c37-447a-9f9d-947aa66b7f39 3 \N
+a5c1d727-4820-4d7b-b758-dea1af104b33 云采集 \N 2018-04-16 15:46:07.902+08 2018-04-16 15:46:07.902+08 c60cc02d-8c37-447a-9f9d-947aa66b7f39 3 \N
+2a88ded3-16cd-4e38-bbb3-ed48fe6d5efc 采集 2018-04-16 15:46:12.371+08 2018-04-16 15:46:12.371+08 20ff998d-3014-4f62-ad12-37b56883c435 3 \N
+8467dc74-ae70-4742-9f5e-8b44464133b3 采集 \N 主动下发采集 2018-01-10 15:59:36.198+08 2018-05-11 10:38:17.132+08 f65db984-9da0-4cef-a9ea-7de5e02ef42f 3 9c5e1617-0ca4-4ca1-aec1-dfb0bd25a0a8
+d64be76d-e00e-4984-bd5e-6c6be4ccd7d3 采集 \N 2018-03-23 16:12:54.29+08 2018-06-25 11:31:01.904+08 4a0f1cd5-1e52-4ec3-8976-0b1f82031d28 3 9addbae0-b742-4fa1-9ecd-d5f0ee2b3889
+8cc91875-80ee-4c35-abe4-4c64888e18fc 云采集 2018-04-09 16:11:41.565+08 2018-07-31 16:20:25.154+08 0bf78d42-85ee-486c-bf43-c62c3168ee33 3 \N
+93d4d05c-a5fe-48b1-88ff-1cb39cfdf02d 采集 2018-04-08 14:40:13.998+08 2018-08-13 14:58:59.138+08 4142b1cc-3576-456b-b0e4-31e68cc16b32 3 fc53b2d3-05e5-4bd9-ac41-66bfa2283dd9
+da328767-f26f-4fce-967c-7dbf5af7df6f 采集 \N 2019-12-17 14:35:15.852+08 2019-12-17 14:35:15.852+08 d4476f92-5675-4de7-982e-fd914541136a 3 683ffafc-6cea-44dc-83c5-b16f5227f820
+fdd4dd73-2235-45a2-98b3-c7838697717c 节点采集 \N 2018-03-26 11:35:24.366+08 2020-04-09 09:42:34.522+08 d3763c4f-94ba-4ae4-b35e-ccff2340c16a 3 \N
+3a66e33a-e25c-45ce-b87b-534d9d4bcaf4 当前连接数 tomcat连接信息 2018-01-09 10:35:25.64+08 2018-01-09 10:40:42.082+08 8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812 3 399b9436-81fa-4410-914b-1a860910858c
+e240a124-006b-4a79-9006-c8fcb6842ef7 总连接数 \N tomcat总连接数 2018-01-09 10:43:37.029+08 2018-01-09 10:43:37.029+08 8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812 3 0d0ea7fb-6462-43e0-a70c-559a0a3cec40
+349567b6-f674-4299-89df-0d64e448a6b3 采集 2018-01-12 10:08:09.319+08 2018-01-12 10:08:09.319+08 301f43b2-e055-4169-8a27-c3d69b246a19 3 \N
+1e87be3b-9782-4b75-8b62-0aa49b44daea 设备数据 \N 设备数据 2018-01-19 15:32:51.616+08 2018-01-19 15:32:51.616+08 8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812 3 0d0ea7fb-6462-43e0-a70c-559a0a3cec40
+613d1519-cf1a-47b5-a44a-2397b79bee2a 采集 2018-01-23 13:54:59.279+08 2018-01-23 13:54:59.279+08 70ed36c0-d58f-482d-8337-fafed8a2e6ac 3 030de29c-d4cb-4747-9885-3a81f9cf61ba
+d36bb0ee-6c5c-4778-bc5b-5e03db483152 采集 2018-01-23 15:00:11.233+08 2018-01-23 15:00:11.233+08 c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d 3 \N
+2db014d8-3273-467f-b938-8e6b9c22031e 采集 2018-01-23 15:00:12.509+08 2018-01-23 15:00:12.509+08 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 3 \N
+028d4dfc-6b2c-40e4-9960-97c813408030 采集 2018-01-23 15:00:12.712+08 2018-01-23 15:00:12.712+08 91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 3 \N
+3d52b0e5-39ac-4e19-99b4-7bd96b15888a 采集 2018-01-23 15:00:13.316+08 2018-01-23 15:00:13.316+08 c9eacd36-38d6-48b9-9672-e76406906ea3 3 \N
+b28ce81b-55a8-4e81-a4da-5a5b9d89ef29 采集 2018-01-24 11:34:49.462+08 2018-01-24 11:34:49.462+08 e5f12d4b-bb3c-4158-b98e-8af3579bd2cc 3 \N
+f564da79-91f3-4eff-8919-3501b7fb8046 采集 2018-01-24 11:34:50.379+08 2018-01-24 11:34:50.379+08 362018b7-e626-4eab-a6ad-214d85cfcc03 3 \N
+0d2a48dd-a7d4-4752-9e64-d17ca8555ca8 采集 2018-02-05 14:54:12.669+08 2018-02-05 14:54:12.669+08 d148ae2e-c0dd-4e57-a0e8-833d32107f31 3 4551eefd-3b2e-42e4-b314-f27e5157eecc
+b0ec1cec-15a9-42c0-8038-6450ab31d5c9 采集 2018-02-07 16:37:15.397+08 2018-02-07 16:37:15.397+08 36918a6c-395e-4f8c-93b1-7ca400374cf8 3 afb4357f-a11c-4278-b137-53c5042053db
+af49da8c-cb29-4435-974c-d96d01e992bc 采集 2018-02-28 16:01:53.17+08 2018-02-28 16:01:53.17+08 12adcb99-432b-46f5-9240-dad30ec75ea6 3 b3fc90d9-c68c-4e58-95a9-89311901aca4
+ab5ddc7a-c116-496f-9658-12522697a1d0 采集 2018-02-28 16:48:43.05+08 2018-02-28 16:48:43.05+08 10ac4010-ff56-4d05-9e45-55f84f4292aa 3 b3fc90d9-c68c-4e58-95a9-89311901aca4
+e277560c-2da5-499d-a3eb-99ed74f642d9 采集 2018-02-28 16:48:44.786+08 2018-02-28 16:48:44.786+08 1f16c362-1f8e-4cbc-8b2c-8f43dd306390 3 b3fc90d9-c68c-4e58-95a9-89311901aca4
+ad956aa4-9d9f-414e-aa8b-d48cb81e9a60 采集 2018-02-28 16:48:45.382+08 2018-02-28 16:48:45.382+08 8571c1b0-8472-45b5-955f-5a7614a2f08c 3 b3fc90d9-c68c-4e58-95a9-89311901aca4
+1f12ae0a-fb0a-497e-af70-8e53094543a1 采集 2018-02-28 16:48:46.014+08 2018-02-28 16:48:46.014+08 a570a2de-ca66-488a-a078-6c6b14b71f2a 3 b3fc90d9-c68c-4e58-95a9-89311901aca4
+342ac320-e429-49f0-b647-e4d7e5f4b545 采集 2018-02-28 16:48:46.683+08 2018-02-28 16:48:46.683+08 d54f6d25-04dc-4847-8dda-9c54d54b2d8f 3 b3fc90d9-c68c-4e58-95a9-89311901aca4
+7572058c-09cc-4eeb-a9ba-be3be9bacf77 采集 2018-03-06 16:50:09.442+08 2018-03-06 16:50:09.442+08 5dced7e6-e4c2-4e43-82a2-6b994fb790b4 3 00689b92-6403-4fae-977d-1b9c1436f133
+66075081-ad5a-4acb-8bcc-77672c5d579a 配置同步 \N 2018-03-08 18:57:24.609+08 2018-03-08 19:00:09.625+08 71735c3a-2e25-40c1-81ad-df10d8792ac2 2 feb25833-7419-4779-bfc8-809195843744
+08d15c9c-009a-49dd-bf90-c1c2b55a229d 数据同步 \N 2018-03-08 18:57:51.417+08 2018-03-08 19:00:18.418+08 71735c3a-2e25-40c1-81ad-df10d8792ac2 3 6fc5be55-5544-4595-8414-95be244eb503
+ebcd990c-356a-4c0a-86ba-5a6fd378432e asdf 2018-03-12 17:55:34.548+08 2018-03-12 17:55:34.548+08 ae356f39-ab83-4ac9-b847-31391780a6c5 3 \N
+837d4b62-487d-40e0-892a-4c1305ebd883 采集 2017-12-29 17:15:38.775+08 2018-03-19 17:07:42.626+08 4e281788-df68-4193-bbe0-9159eee1f24e 3 4d5bd16e-9baf-464f-b930-69308501030f
+ba74ef0e-3ec4-4203-9d65-17906c8f64d1 采集 2018-03-26 11:35:24.359+08 2018-03-26 11:35:24.359+08 d3763c4f-94ba-4ae4-b35e-ccff2340c16a 3 \N
+68518b11-55c5-4191-8116-1d27ee89268e 采集 2018-03-14 15:32:53.596+08 2018-03-14 15:32:53.596+08 4af8678b-8f9b-48e6-b8f0-ea7ec7ed53ee 3 \N
+51e73aec-cdcf-4852-98fe-e6b9bae73590 采集 \N 2018-03-23 16:13:17.06+08 2018-06-29 10:31:21.381+08 cef1d2a2-c44e-4143-84bd-2a65140e33d0 3 65495481-c107-49ff-98c9-2c4215b38347
+ced94dca-0afa-4ab7-b273-744ff40f6b7a 采集2 \N 2018-03-23 16:37:04.439+08 2018-03-23 16:37:04.439+08 0f4f59de-cde7-4aec-a402-703e5426bb76 3 \N
+88d7fc54-bcbf-4532-839e-0dc916df537e 采集2 2018-02-05 11:21:19.477+08 2018-03-23 16:49:34.681+08 9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8 3 \N
+af89ba1b-5b99-481c-a213-a2171c2e4700 数据 2018-03-25 19:20:50.002+08 2018-03-25 19:20:50.002+08 388cca81-7338-40d3-ba1f-89ec9d5aa2f7 3 \N
+f4d2673b-f6ac-4be7-9068-95a68442426e 采集2 2018-03-26 11:27:33.449+08 2018-03-26 11:27:33.449+08 d31031ab-0237-41a5-adc0-867c1e9952f7 3 \N
+614819ae-798a-406e-befe-fe6749ac5536 采集 \N 2018-03-26 11:27:33.459+08 2018-03-26 11:27:33.459+08 d31031ab-0237-41a5-adc0-867c1e9952f7 3 \N
+f2877cda-87cc-485a-9fc6-11f7ef8b2624 云采集 \N 2018-03-26 13:44:09.13+08 2018-03-26 13:44:09.13+08 473aee20-7c00-41cd-bd6e-b44c35c758ea 3 \N
+e3bf8273-2a58-438d-b214-0fd258644ef8 云采集 \N 2018-03-26 13:48:39.27+08 2018-03-26 13:48:39.27+08 b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 3 \N
+1361a9fa-8c55-4a5f-a13c-2da8e4ca89ad 数据 2018-03-26 13:57:13.724+08 2018-03-26 13:57:13.724+08 65b984f5-c294-49fa-8433-510d38416095 3 \N
+5775692b-7acf-46f2-b924-d040fb8bd751 云采集 \N 2018-03-26 14:22:43.666+08 2018-03-26 14:22:43.666+08 ccb72dc5-f9bc-424d-a3ec-e6e9121bc534 3 \N
+794d13af-907b-4165-bd7d-5c9d4e3410f4 云采集 \N 2018-03-26 14:45:17.767+08 2018-03-26 14:45:17.767+08 5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8 3 \N
+c77f3d16-3577-4f09-9c32-cc99cbb68966 云采集 \N 2018-03-26 15:02:23.928+08 2018-03-26 15:02:23.928+08 5e7775c1-0766-436e-b701-b1102833b98d 3 \N
+642663da-bc66-430b-8367-41e2ae5ed8b2 云采集 \N 2018-03-26 16:43:50.793+08 2018-03-26 16:43:50.793+08 1d48c633-6d83-4b96-a572-6f59a0100c9b 3 \N
+0e3fff68-6973-4327-9be6-6d5172b7ad80 数据 2018-03-26 17:36:26.278+08 2018-03-26 17:36:26.278+08 83d8bf62-35f8-48c5-afa2-0d454cb19f70 3 \N
+50696e87-2214-4a20-b537-5530d2921ccd 云采集 \N 2018-03-27 11:04:04.511+08 2018-03-27 11:04:04.511+08 cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3 3 \N
+533e4f1c-c95f-46b6-9d76-1e77bcd20732 云采集 \N 2018-03-27 11:07:17.879+08 2018-03-27 11:07:17.879+08 b6095ab3-88ff-4a71-8f42-f0656b301e1e 3 \N
+b94d787d-82ad-4377-91c7-ef2e4bb9fe74 采集 2018-03-02 16:15:39.588+08 2018-03-28 16:37:40.437+08 ec223bfa-7244-4458-8180-4205fd31ac24 3 6fc8d8c6-fe8f-42ab-950d-8214817ff43a
+6c1400a4-ffcc-4f86-955b-dad07fb58c17 采集 2018-02-05 11:22:03.788+08 2018-04-19 10:59:55.874+08 2e2456a6-9738-456c-abf1-94d5ebad124a 3 65495481-c107-49ff-98c9-2c4215b38347
+a2fa85fa-2e1a-427e-99f2-595757cb505b 云采集 \N 2018-04-16 15:46:12.39+08 2018-04-16 15:46:12.39+08 20ff998d-3014-4f62-ad12-37b56883c435 3 \N
+3987b49b-1b19-4b06-889b-b102edd2abe3 采集 2018-04-16 16:00:53.273+08 2018-04-16 16:00:53.273+08 7674c64d-e09e-4257-8726-c64a26ed309a 3 \N
+c538c4cc-6b50-4a51-9706-9a112551be27 云采集 2018-04-16 16:00:53.297+08 2018-04-16 16:00:53.297+08 7674c64d-e09e-4257-8726-c64a26ed309a 3 \N
+ad6a8655-acd4-4092-ac47-6d7e96cdb2a2 采集 2018-04-16 16:00:54.78+08 2018-04-16 16:00:54.78+08 4a7b8b8f-6ba0-4731-af44-8f3f6d30a928 3 \N
+81b14e1d-4d14-4741-b581-31e3c543a0f9 云采集 2018-04-16 16:00:54.794+08 2018-04-16 16:00:54.794+08 4a7b8b8f-6ba0-4731-af44-8f3f6d30a928 3 \N
+ae06a9a5-6f60-4dae-9983-cc4677c08d97 采集 2018-04-16 16:01:22.138+08 2018-04-16 16:01:22.138+08 4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66 3 \N
+2f72ef62-1d3b-4c4b-9308-5abb39a919d0 云采集 2018-04-16 16:01:22.155+08 2018-04-16 16:01:22.155+08 4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66 3 \N
+c86b0543-8d73-4c04-95d7-aa52f68d8c67 云采集 2018-04-16 16:14:50.369+08 2018-04-16 16:14:50.369+08 110a38a6-8cb9-43c5-9682-4b1ba0e9d01f 3 \N
+b5c9d48e-6b32-41c8-ad53-93f60da390b1 采集 2018-04-16 16:14:50.441+08 2018-04-16 16:14:50.441+08 110a38a6-8cb9-43c5-9682-4b1ba0e9d01f 3 \N
+cf73d66e-1a91-4f17-a31b-e373c8731fb4 采集 2018-04-12 09:54:19.73+08 2018-04-18 11:28:28.082+08 3f7793d6-8f50-4dc7-b5e5-5e6cf74f77a6 3 d9b6eb86-bbee-4c4e-9007-eb566b64fba6
+69df2525-998a-4f00-a7f5-857a888eb1b9 采集 2018-02-05 11:21:49.792+08 2018-04-19 11:00:20.8+08 0f4f59de-cde7-4aec-a402-703e5426bb76 3 65495481-c107-49ff-98c9-2c4215b38347
+1ea28db3-0c1b-4b71-8fb6-d38b5b55fc3b 采集 \N 2018-04-24 14:38:42.692+08 2018-04-24 14:38:42.692+08 4a84b11e-7f79-47ff-b530-6cbc5615b491 3 a38f68fe-fc29-40f0-abf2-d3b10a127d9b
+835d5e0e-912e-458c-a809-8634e203c0e9 jg 2018-04-24 15:29:24.945+08 2018-04-24 15:29:24.945+08 324eb312-14cd-4931-a6e0-f84880fb8ac5 3 d6c7bf35-62db-4a57-9a6f-d50ab8f37ccd
+90194fd9-5400-4bda-bd8b-7ed11b598c4c 采集 2018-05-03 08:54:32.785+08 2018-05-03 08:54:32.785+08 0363c038-6fa5-4290-adaf-c9afa18f1171 3 9ee874f0-a205-421a-8249-73fd9c6b4901
+51fbf199-10ab-4718-8b70-c92beea24f6a 采集 2018-05-03 10:34:23.753+08 2018-05-03 10:34:23.753+08 fbe11da9-a717-4a5e-bd90-93f394b46ccc 3 \N
+6accf380-8a73-4f88-8a5c-42b3366bc358 采集 2018-05-03 10:35:59.177+08 2018-05-03 10:35:59.177+08 5efb0ea9-ca31-4a41-9389-be6c24b3ad2c 3 \N
+56227677-39fd-4bfe-a59b-8c5f28682832 采集 2018-05-03 10:37:15.481+08 2018-05-03 10:37:15.481+08 ae8d62c1-09f0-4fcd-bc62-add087919ff0 3 \N
+289b0a55-03e7-4154-bdd7-b7bbb15a6d28 采集 2018-05-09 10:42:20.041+08 2018-05-09 10:42:20.041+08 ed5ede03-616b-4df7-b741-eea396939ecf 3 b1bbe56d-c98c-4e51-8fc1-398fa057bf4a
+fb36a342-1fe1-4756-ad83-825b5d7ac57e 传感器 2018-05-09 11:11:01.654+08 2018-05-09 11:11:01.654+08 3b03e747-cc81-4f6e-9ccf-f828a5534096 3 \N
+d7460b80-d3f3-48f1-9287-d7220b1b7f3d 采集 2018-05-09 13:55:22.689+08 2018-05-09 13:55:22.689+08 1cfa35c8-129a-45eb-9304-2b105bc22380 3 8ba409b2-a129-4c05-8f32-a1445cfec3b4
+33ced0d8-f342-4bc5-8c11-45dcb0304ffd 采集 2018-05-10 09:13:20.648+08 2018-05-10 09:13:20.648+08 901073b9-b411-427c-9eb6-43a935ec8c27 3 543e1e81-6131-43ec-8f7e-495bb4fa257d
+60f374db-1336-4bb2-8dda-311955dca706 采集 2018-05-10 17:53:00.783+08 2018-05-10 17:53:00.783+08 fdef19ae-68f1-4ad5-937b-3cb60e20d8ce 3 \N
+5d8abf22-14e4-474f-9a3a-11a4976643ee 采集 2018-05-10 17:55:50.407+08 2018-05-10 17:55:50.407+08 67b821eb-caf8-4352-a59b-360e7c9a3ad9 3 \N
+ec17d151-95d9-4c87-a5c9-799089626714 采集 \N 2018-05-11 10:41:15.497+08 2018-05-11 10:41:15.497+08 077f4241-fe27-4cbc-9918-cf5b8d1c8283 3 \N
+c135c6c2-af77-42b4-9fd8-a684c629383e 测量值 2018-05-11 15:45:31.13+08 2018-05-11 15:45:31.13+08 efdb6604-3283-41b2-9a30-aa532a49d897 3 \N
+663eba54-78c3-4aa6-abbf-66cde27953e2 采集 2018-04-09 16:11:41.553+08 2018-05-16 17:28:00.385+08 0bf78d42-85ee-486c-bf43-c62c3168ee33 3 8a27161a-7fe3-47bf-a269-648c94121266
+2e6e8c47-b162-44b0-802f-689c0a71fb2c 采集 2018-05-16 17:44:54.911+08 2018-05-16 17:44:54.911+08 bff19d80-ce20-4c3d-b158-df091a1fb5ac 3 8a27161a-7fe3-47bf-a269-648c94121266
+5590fa71-06f3-4895-9540-4996a44d0c27 tttt 2018-05-17 10:26:47.623+08 2018-05-17 10:26:47.623+08 e5c11c48-0e03-4229-b879-a487b7cda972 3 \N
+957aac75-16e3-4a36-958f-bd44ca104591 采集 2018-05-17 14:43:40.147+08 2018-05-17 14:43:40.147+08 82db02f1-7f86-44cf-b9a4-d32e28672a84 3 f0dbf2ac-9867-4a07-bfe3-8b84c2e375b2
+1da4370b-ba2d-4f6a-92f0-485a163d45e2 采集 2018-05-28 10:45:28.327+08 2018-05-28 10:45:28.327+08 78540227-fdf9-47ed-841e-7b76fed0f788 3 1e3a9533-745a-4c0d-a998-256576a85cab
+d314e16c-4cc2-47bc-92b5-af0639bdc7a8 采集 2018-05-28 10:50:00.172+08 2018-05-28 10:50:00.172+08 40a69ace-03f8-4acf-8cf7-6acf43ac2de8 3 \N
+1d256945-ce40-4216-ba9b-2071e6e1548e 采集 2018-05-28 14:03:33.961+08 2018-05-28 14:03:33.961+08 7c2ff6f1-5bb6-4736-91cd-1bd068e760aa 3 \N
+2205fdef-b595-4f0d-8268-e9d2370638aa 123456 \N 2018-05-28 17:34:37.769+08 2018-05-28 17:34:37.769+08 899dde06-bd1d-4215-963e-23596c3fda7f 2 4c032273-d5ed-46a2-b362-da219224cac5
+fb8fd0c1-b11f-43cd-9710-c507dec06062 123456 2018-05-28 17:34:00.454+08 2018-05-28 17:36:20.376+08 899dde06-bd1d-4215-963e-23596c3fda7f 3 \N
+d3ba7fce-1ab9-4423-8888-27fbc8244e5c 采集 2018-05-29 11:41:59.944+08 2018-05-29 11:41:59.944+08 5ac91988-c93a-4176-9f33-7c6ba110590f 3 daf77d68-0e8a-4215-94b5-fa3255e04fdc
+9517f5d2-02f2-47c6-b688-35e0efa0f25f 采集 2018-05-29 14:51:48.728+08 2018-05-29 14:51:48.728+08 9d6f5e3b-2821-48f0-b5c5-997baf346f39 3 29c24e0f-e684-4875-9e8a-2d0650310192
+d1f3cdb1-95b4-4970-90b8-cdb6c2201063 采集 2018-05-30 20:45:30.284+08 2018-05-30 20:45:30.284+08 35046949-3e59-43c1-8898-bfc7995c3da9 3 a75c683e-f6e3-4198-9520-4d03309584ad
+642f187b-6fa0-4dad-9bb4-1ebee9558b41 采集 2018-05-31 07:52:27.754+08 2018-05-31 07:52:27.754+08 da7a3b52-f9fb-4e4c-bf41-dda355ec5585 3 83750550-f9bd-49a2-9ed1-b9c144146435
+93a73320-1cb3-4b2f-a8be-f31d131ba881 采集 \N 2018-05-31 14:37:08.562+08 2018-05-31 14:38:48.445+08 563221c8-bdb4-4511-b781-25cab72585a7 3 6b6e7e0d-f078-4725-87c1-11a5a07f2565
+ff3a290c-3a62-49a8-8db9-f4083f855397 采集 2018-05-28 11:45:20.158+08 2018-06-01 10:38:47.301+08 200655be-879b-4a82-8a17-1ff1ccb9f961 3 \N
+1dcd37b0-1db2-401d-80d1-bef6c0f180d3 采集 2018-06-01 16:26:56.739+08 2018-06-01 16:26:56.739+08 0d00f0b6-190e-430c-a626-c3e5efd2828c 3 \N
+164546bd-01df-4cb9-a0f0-27590351aa74 采集 2018-06-01 16:29:14.995+08 2018-06-01 16:29:14.995+08 c7cd0af4-425e-42e5-a5ad-cc2b9369c84b 3 \N
+b94c6303-8f36-416c-9210-9a8bbeb2d8e9 采集 2018-06-04 18:00:22.401+08 2018-06-04 18:00:22.401+08 51654fb3-cd61-405e-890f-ade3931c8b7e 3 \N
+9b35c521-0784-4d09-987b-7bcb189bb1c9 采集 2018-06-05 14:51:24.827+08 2018-06-05 14:51:24.827+08 34e0efb7-3081-4432-acb3-1f21d62ace7a 3 1449480d-e748-4693-8f2a-1806b6b5b930
+e2359d98-6bbd-4d7e-b370-d8c81c765dc0 采集2 \N 2018-06-05 14:52:57.271+08 2018-06-05 14:52:57.271+08 22d007b2-5200-4bf6-85dc-c755a7a75bcf 3 \N
+54be724a-6015-4ee4-a08d-fe8b8202cfc5 采集 2018-06-01 16:02:25.97+08 2018-12-18 11:24:08.327+08 4c79d9ed-386d-4540-bff3-82caf4d9d329 3 00ce002e-e472-4ac9-b74e-52d5c06c4ee0
+5451cf1c-6aec-416c-9e9c-de8d9281110c 采集 2018-05-17 13:55:17.795+08 2019-09-20 14:50:00.954+08 83881bee-4e8c-4ad6-a11f-45810d035b3d 3 5afcddd3-ab1d-4054-a530-478860d650ec
+8f4cc815-04e2-482c-afbc-e565f35e0f76 噪声 2018-06-06 18:05:16.202+08 2018-06-06 18:05:16.202+08 6a257a93-25ef-48f8-bdd7-0a4674c83a7c 3 b3254088-2d5a-4bbf-a470-a560aa50cbaf
+97761a49-de35-42f5-a664-d3dd6cc82d59 温度 2019-12-17 15:53:57.603+08 2019-12-26 11:48:37.28+08 0fbc8f32-4f32-4e21-bbba-34023ac70ff4 3 \N
+5de3dae0-fa13-4844-9c58-c960926aa470 采集 2018-06-07 15:37:44.395+08 2018-06-07 15:37:44.395+08 fb7bb438-ec7d-41fa-b7f5-737c395901bc 3 04e02398-2db0-408b-80c3-399c705ceed7
+f259b7e6-928b-4ef0-8752-bfdf1a834dc4 采集 2018-06-07 14:25:03.229+08 2018-06-07 15:49:36.335+08 e458516d-60cf-4395-8ec5-df491ae97d3e 3 540f8993-f761-48dc-9c69-00851a16a2ac
+5733bc64-355b-495b-adf8-e8cbae48d357 采集 \N 2019-12-17 14:55:41.997+08 2019-12-18 13:35:43.317+08 dae07648-1adf-44d5-8a90-0519a5106a76 3 20e5b611-c9db-40df-9af4-d3a28d5958f4
+7fec904c-4e25-4bf8-a250-261f21994398 采集 2019-12-20 10:02:25.435+08 2019-12-20 10:02:25.435+08 98e6aaea-a6e2-449e-8b46-47fa016b1b96 3 a07a4bf8-c1c2-49da-b8dc-e2f2825764a1
+d3030bd3-a5ed-49d3-bc4e-0c774ddbdf86 采集 2019-12-20 18:07:22.542+08 2019-12-20 18:07:22.542+08 cc36cffd-a5ac-44e5-8fe7-c2ad64a3e55b 3 \N
+b3db27cd-01dc-4f48-b241-ec576d75d6b2 采集 2019-12-23 10:30:52.209+08 2019-12-23 11:03:05.626+08 51b66c98-7a13-42ce-9b80-4df528d01234 3 070668c8-be26-4e4d-96df-d2d191f31972
+b77889c8-f54c-4422-91fa-2637e86d7933 采集 2019-12-23 14:13:38.184+08 2019-12-23 14:13:38.184+08 e66b2170-dac3-4a27-b9d2-46e8fe63f0ce 3 bf8622e9-ad0d-4cad-9f25-2e601f7fdee2
+dfeab740-f671-4730-9a89-f5a3311f0ec8 采集 \N 2019-12-23 14:26:26.839+08 2019-12-23 14:26:26.839+08 98ae496a-649c-4719-b18f-705b32d4f545 3 \N
+86e75c8f-77b4-4197-89e5-0960b7265076 采集 2019-12-23 14:42:47.827+08 2019-12-23 14:44:54.39+08 b5973739-2377-4164-9d35-d25da04d9d05 3 adc151ff-eda9-4130-9f47-0c1adb863ae8
+f7726ca7-bc14-4987-bd59-204bb7fed3a4 采集 2019-12-23 16:11:23.813+08 2019-12-23 16:11:23.813+08 42fa6a20-85bd-4f18-93f4-2349e5c1e804 3 5ed1c355-baee-4949-bc0b-e59ede0b4f85
+48b6a900-281e-4335-841c-814b0bbc1078 采集 2019-12-24 09:20:36.109+08 2019-12-24 09:20:36.109+08 ce8318eb-2d27-407d-9b33-95018458d60f 3 19ed6d2e-6e0f-40ef-9930-2d5b67d89d84
+659208a7-903d-4473-bc1d-581dbec9e5e7 采集 2019-12-24 10:40:55.044+08 2019-12-24 10:40:55.044+08 d38d0e7a-cf28-4180-b331-9b950cfb89fd 3 3dbcecc3-94de-4b19-b3fc-4ee1220c4e79
+70f035c8-998b-445d-8f3f-c5f840151e65 采集 2019-12-24 11:15:20.06+08 2019-12-24 11:15:20.06+08 aaee1bcc-dde9-4cef-8fde-7c072b96eab5 3 f1a05ee2-3ba7-4b39-bdcb-b48d605eeb39
+380f8e6c-ddbe-4c2b-90ab-89abece78fd6 采集 2019-12-24 11:48:30.844+08 2019-12-24 11:48:30.844+08 964d519d-ec1b-4a4c-8a02-01402c99d348 3 b7f5077d-347e-478e-b86a-78a1b8929d25
+c46b60be-3353-4715-8783-561892271905 采集 2019-12-24 16:23:58.896+08 2019-12-24 16:23:58.896+08 aa852395-17c0-4ccf-a911-c8090dd6f578 3 \N
+e9412219-df4d-4a2b-bfe1-1e81e44f7a60 RTU采集 \N 2019-12-26 11:22:53.209+08 2019-12-26 11:22:53.209+08 bff19d80-ce20-4c3d-b158-df091a1fb5ac 3 \N
+906764b6-5b7f-4cf0-a4a8-915452e6acc7 湿度 \N 2019-12-26 11:48:57.57+08 2019-12-26 11:54:20.607+08 0fbc8f32-4f32-4e21-bbba-34023ac70ff4 3 \N
+563028c4-ce25-46d9-8dc5-f32204df7ff4 RTU采集 2019-12-26 13:50:05.504+08 2019-12-26 13:50:05.504+08 d2e74fbe-59fe-420d-b127-c61ba8236f42 3 \N
+c91efe30-d394-454c-9fd0-8e95a43e79b2 电池 \N 2019-12-26 13:42:12.46+08 2019-12-26 16:38:25.386+08 0fbc8f32-4f32-4e21-bbba-34023ac70ff4 3 \N
+6831e820-59fa-40be-a01a-013d4aa717a4 清除数据 \N 2019-12-27 15:04:30.603+08 2019-12-27 15:04:30.603+08 d6189068-bb18-4c68-a359-8e3139ab22e5 2 08a07e96-2fdb-40b9-aa08-b106bc3092c4
+954de091-0b47-4d24-b0fe-38e707df4448 采集 \N 2019-12-30 13:31:31.13+08 2019-12-30 13:31:31.13+08 f49b431e-9069-47ec-a493-fd3c45eed27a 3 d293d9df-57d3-4156-b626-195aece1b63c
+dcb7d951-15a5-4ee0-8b2b-9a30c1d60e52 采集 \N 2019-12-30 16:35:39.893+08 2019-12-30 16:35:39.893+08 2095c53d-9927-4d63-b46b-03de0fd778e0 3 \N
+0650720c-5066-417d-99a8-936fcf6406a4 采集 \N 2019-12-31 08:40:13.136+08 2019-12-31 08:40:13.136+08 58bfca53-22e0-4857-81f4-c64ce00efe67 3 \N
+f454e2b5-77c5-4282-aceb-bf86690270ba 采集 \N 2019-12-31 09:03:23.522+08 2019-12-31 09:03:23.522+08 1d22d353-6d39-4a84-bd17-aef0bc6f32f8 3 \N
+15046a7e-2b8d-446c-963e-0f8af7fe7475 采集 \N 2019-12-31 09:09:31.626+08 2019-12-31 09:09:31.626+08 a581eb27-4334-4d9f-b28b-2c4b1e8136d5 3 \N
+83b1e284-b0e5-43d1-8881-bc7fc3317dd9 配置下发 \N 2020-01-02 14:23:23.85+08 2020-01-02 14:23:30.823+08 98e6aaea-a6e2-449e-8b46-47fa016b1b96 2 0e7050bc-bc01-4f3e-8758-23b2ba883e6a
+c8044788-3713-45ab-a8f8-cd3b8b3db86f 采集 2020-01-06 15:12:33.719+08 2020-01-06 15:12:33.719+08 b1ce7bb7-4d25-468a-ab2b-22347d65b166 3 \N
+65968c97-efd5-4c64-9f9c-79017790f273 采集 2020-01-07 09:52:02.054+08 2020-01-07 09:52:02.054+08 c1e63dc1-8a68-4dad-a180-c652ea587e83 3 32590ab5-aa81-4219-bb35-9529dbe852dd
+32c69be1-0051-4e6c-8821-fe8b2a3f8215 采集 2020-01-07 14:23:09.073+08 2020-01-07 14:23:09.073+08 afba576d-0e5e-48cf-a9fa-18a3f986d812 3 \N
+5d3b0ddc-308b-4ad6-93cd-7aefd34b600f RTU \N 2020-01-10 10:53:10.595+08 2020-01-10 10:53:10.595+08 13ee1f91-04cc-48af-820e-ffc0ed179b6c 3 a07a4bf8-c1c2-49da-b8dc-e2f2825764a1
+b4574024-8282-445a-b3d6-068582522d6a 采集 2020-01-14 13:53:59.833+08 2020-01-14 13:53:59.833+08 adcecf0d-2b34-4a55-abc2-78a2439b1567 3 3121ae46-41f3-451f-9995-208f16460648
+4b26b77c-de95-45d0-b83b-ee0c410e20a0 采集 2020-01-14 13:57:25.419+08 2020-01-14 13:57:25.419+08 742ee585-31d3-413c-b4f0-44d175b45bf5 3 3121ae46-41f3-451f-9995-208f16460648
+74475f60-31b1-44f8-b887-60013184ef38 采集 2020-01-14 14:00:56.898+08 2020-01-14 14:00:56.898+08 457137ac-994e-4445-8acf-12172464a82d 3 3121ae46-41f3-451f-9995-208f16460648
+d3d60241-e4b2-445a-bde1-5e5e83bbcace 采集 2020-01-14 14:02:50.26+08 2020-01-14 14:02:50.26+08 4abe48e9-ae10-4cd4-85a6-ad3970d8b928 3 3121ae46-41f3-451f-9995-208f16460648
+6aa8f789-816f-4edf-9d5f-b3a4c3a34e2c 采集 \N 2018-09-07 09:26:46.455+08 2021-01-28 15:15:41.965+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488 3 0a4cfb69-6284-4d4c-946f-994b662579b0
+1e068f94-2089-43a7-89d1-f2c5be29ab86 采集 2018-06-07 15:54:22.276+08 2018-06-07 15:54:22.276+08 66717a8f-3c59-41e0-ab21-bf6bcdde55ea 3 04e02398-2db0-408b-80c3-399c705ceed7
+e0fd6ac0-4c4d-4683-9227-d614184aefe2 采集 \N 2019-12-31 08:43:29.744+08 2019-12-31 08:43:29.744+08 d43df443-364f-4958-b978-cb0e9ee0e532 3 \N
+f562d703-5cde-4a00-b1c8-1be54d51da9d 采集 \N 2019-12-31 09:06:25.789+08 2019-12-31 09:06:25.789+08 246ba00c-51d3-4e43-b651-4fd45ccd8ca0 3 \N
+514bb698-2903-47d6-9749-67f6ead2de82 采集 \N 2019-12-31 09:12:37.786+08 2019-12-31 09:12:37.786+08 e8283251-3a4d-40f8-a7cc-581af3168aee 3 \N
+ce7d8a22-74e1-4ba0-b501-8f0ca23a4b27 采集 2020-01-14 13:59:03.969+08 2020-01-14 13:59:03.969+08 1f143b2d-d58a-4b04-bec7-8a396e900c90 3 3121ae46-41f3-451f-9995-208f16460648
+9a4964ae-b88b-47d8-8007-8ddcf068d4bf 采集 2020-01-14 14:04:32.646+08 2020-01-14 14:04:32.646+08 d6aefb14-b750-4133-94f4-e51c3df7743f 3 3121ae46-41f3-451f-9995-208f16460648
+dc3fee9e-0633-4af5-9ef7-39f838c935e9 采集 2018-06-07 15:54:34.226+08 2018-06-07 15:54:34.226+08 260e307b-9a7c-4f75-90cd-79710a7d0221 3 540f8993-f761-48dc-9c69-00851a16a2ac
+d39ca936-5931-458b-ac6a-3afd59f67b53 采集 \N 2019-12-31 08:47:53.128+08 2019-12-31 08:47:53.128+08 ccf64c47-a5cc-46bc-92d7-0ffa046876a4 3 \N
+cd9e5fa9-97a7-4494-ac8f-69c526262d6d 采集 2018-06-11 14:59:44.59+08 2018-06-11 14:59:44.59+08 c9a11ba9-fb0d-4a82-b480-7539948c9b56 3 1fb03ffc-fd93-4ea6-bf06-11311a655212
+66df2f89-5584-46b3-ad9e-0d1932fcf096 采集 \N 2018-06-13 16:58:13.623+08 2018-06-13 16:58:47.56+08 2d547109-73ea-48f5-99b8-48dd9236e19b 3 65dfe3cd-075d-490f-a2b5-d5c39f4cbc05
+6be3220f-3cb0-4081-8ef4-a7c51cecda48 采集 2018-06-14 10:34:18.656+08 2018-06-14 10:34:18.656+08 4efc7878-409b-4195-b3e6-ed93b829fed9 3 ea741512-cf76-4546-8b90-3cea1faf6018
+a63c5547-2825-4f53-93cd-b8cc73368876 采集 2018-06-15 09:39:55.607+08 2018-06-15 09:39:55.607+08 88155a32-3321-4f89-86ba-c204d101cce7 3 3ba4748d-4a2e-4b5a-84ff-3e36e397671d
+50c50ca6-2fa4-4c78-903e-78fccdee6100 1 2018-06-15 17:09:27.709+08 2018-06-15 17:09:27.709+08 279c47e7-04c2-4841-8fdd-263a5f4af93a 3 b3254088-2d5a-4bbf-a470-a560aa50cbaf
+3c05da19-bd51-48e3-be16-a1b32bbadf5b 采集 \N 2018-06-15 17:10:43.244+08 2018-06-15 17:10:43.244+08 3f564278-8edf-4fe7-a35e-21b91e6d4129 3 \N
+0ae8ed9d-56c2-4b07-b81a-a23a10192d1d 采集 2020-01-14 14:06:32.986+08 2020-01-14 14:06:32.986+08 23ecb98e-e536-4313-9234-07622fea082f 3 3121ae46-41f3-451f-9995-208f16460648
+f05bdb3d-41b6-46f7-98f6-a1f132c38cf1 采集 \N 2018-06-19 09:47:25.819+08 2018-06-19 09:47:25.819+08 9aff4ead-342b-40e8-b365-6a53212df7dd 3 723d4fd1-f2c5-4fc1-97a9-9843cdb10693
+6f11ad74-c92f-4122-8e48-31a6684e862f 采集 2018-06-19 09:48:17.022+08 2018-06-19 09:48:17.022+08 b15a4ae0-8100-4809-978d-50914fdc2f32 3 \N
+d41d604d-7dba-4a66-902c-8b1257cde117 采集 2018-06-19 09:50:26.18+08 2018-06-19 09:50:26.18+08 1991c0ef-7dd2-4290-ad34-c8bc82161d2f 3 \N
+e9b6e859-1dc9-499b-8656-99edd12b4157 采集 2018-07-02 10:37:28.265+08 2018-07-02 10:37:28.265+08 20e28988-ea9b-4757-9f79-22dce525207a 3 9280880b-8a43-4904-8993-ed0176d23888
+23c218cd-7c9e-4ad1-bc78-2132a932fc9c 采集 2018-06-20 10:26:27.052+08 2018-06-20 10:26:34.626+08 0f179575-cae8-4888-a644-1b66be3f8de2 3 6ef7b3a4-1658-4205-ae8b-1260775da50f
+7ce72daf-c0a1-4752-9e13-53fb00d348da 采集 2018-06-20 10:32:24.754+08 2018-06-20 10:32:24.754+08 cf379e04-548b-4a35-bafd-4ce52ae84b07 3 \N
+d8aa757b-681c-4522-a76f-b2484a854563 采集 2018-06-20 10:35:52.509+08 2018-06-20 10:35:52.509+08 e4192bd0-7b4b-48fd-8274-4f4ed24a1cd2 3 \N
+e3ec18ee-3f12-43f2-ba02-ac370abbc877 采集 2018-06-20 10:35:53.283+08 2018-06-20 10:35:53.283+08 e2b308df-8629-49a6-ab1d-397df5ab4e45 3 \N
+e98557d0-139a-4938-acfb-9870abe496bc 采集 2018-06-20 10:35:54.637+08 2018-06-20 10:35:54.637+08 d116c1db-0a8e-4cd7-a021-6dedf5987ec4 3 \N
+3fe35a29-777b-4a79-a6fd-2e57e60caa11 采集 2018-06-20 11:04:00.672+08 2018-06-20 11:04:00.672+08 bfa4cd6a-f4fc-4087-8322-c0dd793cfd39 3 \N
+91e8b285-92af-4ba8-a401-14561bfe4d82 采集 2018-06-20 11:04:01.397+08 2018-06-20 11:04:01.397+08 f88c2cc7-2f89-40e1-ab48-28a17b001737 3 \N
+e607b37a-17fe-4e85-9316-7eed2a219c25 采集 2018-06-20 11:04:02.546+08 2018-06-20 11:04:02.546+08 4c874d9f-456e-420e-9057-3a8c7de8368c 3 \N
+87fdf1e4-fdd0-44c6-9bc3-bc5651c19030 采集 2018-06-20 11:13:47.059+08 2018-06-20 11:13:47.059+08 b58bb3be-9cea-460b-b91b-0281432cc158 3 \N
+0c4dd41a-453b-440b-a28b-26d7768832d5 采集 2018-06-21 13:39:44.925+08 2018-06-21 13:39:44.925+08 b2d406aa-3d16-4f6a-a0cf-201673678a8f 3 b0bb3d52-04e2-4852-9ad9-b5e8a7e4b543
+934f46a0-88fb-47d5-95c9-745cdaf1c07e 采集 \N 2018-06-21 11:11:17.377+08 2018-06-21 16:34:49.847+08 9fbee940-6591-45b4-a3a9-83abc9c76e85 3 cf1d888a-fc06-4874-9bd6-246953fa248b
+686bfb15-1d0d-459e-b2e4-4cf146946712 采集 2018-06-22 17:30:28.404+08 2018-06-22 17:30:28.404+08 9c410206-a22f-4b1c-b86f-32fda9f61ca2 3 c0f2f402-ab7b-40f7-ba47-a8e42e42b380
+7f0bdd9e-f9d0-4739-b764-18f3c615ca79 采集 2018-06-25 09:05:33.116+08 2018-06-25 09:05:33.116+08 a045d540-6405-495e-af5f-ea705c094472 3 \N
+8c6c2c54-4620-4096-8773-6a3ee2ffc168 采集仪 \N 2018-06-25 11:28:30.842+08 2018-06-25 11:28:30.842+08 d32eacce-7db0-4c15-b17c-f1d870389c14 3 \N
+16b92db5-4d33-4218-a6d5-7fa7c24194b0 采集 2018-06-25 15:29:28.09+08 2018-06-25 15:29:28.09+08 d56a9be3-7a4a-4c75-91ec-f524bb273574 3 6a99d6ca-10ea-424d-a9cd-48ea93b1d1f9
+400e5759-c7d2-4e45-9d7e-94363490342c 采集 \N 2018-06-26 10:53:40.182+08 2018-06-26 10:53:40.182+08 a42dc0a2-1190-4f91-bf27-a5db9a2ed7ca 3 \N
+1f491d6b-c57b-44a7-a799-a92a15e7f5e4 采集 2018-06-27 14:02:16.371+08 2018-06-27 14:02:16.371+08 847fb856-ef0a-493b-9a30-d2876243481a 3 316aaf98-e85c-4f4f-993c-d57e8252c5dd
+fa9efaaf-b27b-4f77-90c3-fa0f903666ed 采集 2018-06-27 14:04:58.291+08 2018-06-27 14:04:58.291+08 948c741a-f999-4abe-ae1f-64c23e27462c 3 \N
+b4e49abe-4948-4f36-978f-8804c1531ca1 采集 \N 2018-06-27 13:45:13.586+08 2018-06-27 16:44:09.527+08 0f6fd3af-59cc-4fa8-8ff5-f42f173ac9fa 3 c6ff5a63-12be-4695-87d7-bad84d211561
+419116d4-4614-4d66-bc30-ce2394eed251 采集 2018-06-28 15:28:03.059+08 2018-06-28 16:24:22.557+08 ad463dbb-84bc-45ec-9a0e-98de9aaf5fb8 3 80768b00-fc5e-4846-bcc6-6cdd0e2ec227
+db66c7ee-46c0-4931-ba0e-67e0a1231256 采集 2018-07-03 19:14:02.261+08 2018-07-03 19:14:02.261+08 5838090c-ced5-4fb2-9320-53c516ee9b33 3 \N
+da6a8c8f-0a98-4650-8b12-650a3e4e5914 采集 2018-07-04 12:31:15.225+08 2018-07-04 12:31:15.225+08 515030fd-3993-442a-89f7-ca844c5671c0 3 343ae175-f499-4292-8877-7f574c552f67
+a3e8fc6e-6dc8-4d65-b479-4b2ee719c712 采集 2018-07-04 16:49:20.267+08 2018-07-04 16:49:20.267+08 32349c76-d117-4331-8a10-9b7ea057c2ab 3 1e0edcee-1fb7-4601-b3ac-6f6f59593485
+ead31896-f035-4ed5-8732-526210a6bfa2 采集 2018-07-05 14:21:10.26+08 2018-07-05 14:21:10.26+08 9fab42c0-0c95-4fd2-a470-08437473a2f4 3 80333e13-97f8-4502-b053-ab8fc9e0ebbc
+58c2aba6-dd26-4663-8976-a0b155297d3e 2233 2018-07-06 17:14:37.674+08 2018-07-06 17:14:37.674+08 e442b9a5-066f-4cde-b5f3-9709a193c328 2 \N
+3268ff97-6ce3-4be6-a8b1-4ceeb3f8e9b1 采集 2018-07-09 10:14:00.84+08 2019-06-27 13:53:14.465+08 70dd7ed7-45de-4c9c-a299-7c0686775dc3 3 f4925c79-04d0-42e2-b326-cf291ed7589d
+4563e22f-dc9b-4a86-a3df-5cae88d78dfa 采集 2018-07-09 11:43:50.748+08 2018-07-09 11:43:50.748+08 427e8976-edd3-4467-8900-587c12fbf6cf 3 976bf9fd-9b27-4c62-a317-915325daf8d4
+e51184be-7ba9-4184-af5e-374044450523 采集 2018-07-10 11:55:47.365+08 2018-07-10 11:55:47.365+08 2bd37bef-1f44-47e9-8086-b0343328eb0c 3 5be4b8c2-7201-4565-be1d-2af8209fc3e4
+7624deeb-3f22-45ff-8a6c-a588e617c17b 采集 2018-07-10 17:19:28.455+08 2018-07-10 17:19:28.455+08 d8b7d673-b192-4f7a-84d9-0946b8d30f41 3 35f2a891-7956-4b9f-b57d-4e4c5c08b286
+72516f72-2faf-4bba-8e87-212b422ea7e7 采集 2018-07-11 10:25:55.125+08 2018-07-11 10:40:58.169+08 8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea 3 b5dd2450-1c6c-4323-a9aa-4e0a4d76e6e1
+08e932f8-151e-489f-9035-af9518581665 采集 2018-07-11 10:25:15.541+08 2018-07-11 10:41:40.942+08 a6d30b7e-a718-4cbf-80be-2ddefa2445ab 3 2777524a-37b0-433f-9702-3db783dda44a
+99b24f8b-f852-48ef-954b-cf42248669af 采集 \N 2018-07-11 14:05:22.426+08 2018-07-12 09:40:10.012+08 c3455ece-210c-4203-af82-88b61e4b2584 3 81741880-ebc8-42d9-bf53-1c6def33376c
+da84feba-aff0-4b51-baee-a20f8e196dfe 采集 2018-07-13 16:15:51.11+08 2018-07-13 16:15:51.11+08 cb6fd3f6-2591-4242-b0a8-dbb037543831 3 82631ec7-32ec-4daf-ba35-fcdbf2802c5d
+68ac3567-5ac9-48f6-9dc3-121be2e321b0 微功耗 \N 2018-07-18 09:56:01.874+08 2018-07-18 09:56:01.874+08 c9946e27-bce7-41eb-b341-d6b03a7f115f 3 \N
+621548d2-0189-47af-9d78-c0e928b92373 微功耗 2018-07-18 09:51:58.263+08 2018-09-04 15:13:41.044+08 e32efbee-3c36-4be6-a4d3-d5058acf1fda 3 \N
+8f5658b2-c72d-4918-8f4c-e23b57d193a6 微功耗 \N 2018-07-18 09:59:05.263+08 2018-07-18 09:59:05.263+08 9e8050a9-f38a-45c3-a02b-40670bdf19b7 3 \N
+631fe06e-045c-4b18-b9a5-a6e18d8f3511 采集 \N 2020-01-14 14:07:48.273+08 2020-01-14 14:07:48.273+08 72c4a62b-a2d2-4e68-9686-cc325cd79f74 3 3121ae46-41f3-451f-9995-208f16460648
+985c0298-b963-4823-8fdc-38feb70806e1 云采集 \N 2018-08-01 09:32:50.694+08 2018-08-01 09:32:50.694+08 76288807-186e-4444-a1ce-6be599aacfd2 3 \N
+5a0e1b09-57f7-4bcc-9f02-2ed2ac5f3d7e 采集 2018-07-19 09:35:55.151+08 2018-07-19 09:35:55.151+08 8fcb81d8-34ce-41b8-93c9-69d15060fa40 3 \N
+95f120f4-02d5-454d-a848-b2749f786d6a 云采集 \N 2018-07-19 09:35:55.175+08 2018-07-19 09:35:55.175+08 8fcb81d8-34ce-41b8-93c9-69d15060fa40 3 \N
+b0422984-356d-4020-ab24-9dd7cdd4d8fd 采集 2018-07-19 09:35:56.549+08 2018-07-19 09:35:56.549+08 f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17 3 \N
+2858f0e6-c2cb-4a9a-9efd-46af31146b5b 云采集 \N 2018-07-19 09:35:56.568+08 2018-07-19 09:35:56.568+08 f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17 3 \N
+55950607-45e9-4bdd-a586-388468bf4669 采集 2018-07-23 15:18:06.252+08 2018-07-23 15:18:06.252+08 7da8e64c-b909-4802-9639-84077cefa569 3 7f9f00f9-1b47-4a0e-a210-cd495fa0711d
+b41fcafa-5351-45f4-9151-991053b2229e 采集 2018-07-23 15:29:31.274+08 2018-07-23 15:29:31.274+08 3bd37805-2e49-4fdb-8bab-d54c72112de8 3 \N
+dd168476-c9b6-4bdf-802c-dd55353c4f42 采集 2018-07-23 15:31:50.03+08 2018-07-23 15:31:50.03+08 1f235ab7-7bbb-4c4a-b106-7a0a435448bf 3 \N
+dafbdb25-384d-4431-b8b4-13396a4c781b 采集 2018-07-23 15:34:09.535+08 2018-07-23 15:34:09.535+08 3c312b4a-0bd1-4ee4-acf1-5a51f99ed087 3 \N
+4c99b35d-021c-4e0f-a014-5516ee92a8b2 采集 \N 2018-07-23 15:23:40.529+08 2018-07-23 15:38:47.529+08 4a1c835d-1f99-4d95-8d21-ceab11c714d3 3 01ed9514-09fa-4a3a-be3e-42040e39b1eb
+f6f2bffb-7103-4421-aade-21c3c696c8dc 采集 2018-07-23 15:37:15.306+08 2018-07-23 15:39:01.57+08 edfaccd5-edfd-4895-a519-541faa623db3 3 4f567512-fd50-45b1-8ffd-b635123d9749
+0d993c54-d0eb-406e-beb3-422b28dd8bd2 采集 2018-07-25 09:50:10.78+08 2018-07-25 09:50:10.78+08 6d00ebcb-1976-40ff-8c6d-99e9df45035a 3 3bed9937-4292-47f9-ad0a-3f39e26791f6
+0e6129b0-ae01-4822-929e-e8a93b3a63aa 微功耗采集 \N 2018-08-01 09:33:09.733+08 2018-08-01 09:33:09.733+08 76288807-186e-4444-a1ce-6be599aacfd2 3 \N
+5c056ed2-d4cf-4083-82cc-8d7d0b564f4a 采集 2018-07-27 16:11:26.073+08 2018-07-27 16:11:26.073+08 75bcea50-3625-4248-9181-b8f541953270 3 09635bcc-db2c-4e5a-b933-638501dad998
+6efe879d-8d3e-4968-8824-131f8afe5aa8 采集 \N 2018-07-27 17:05:47.925+08 2018-07-27 17:05:47.925+08 ab820c4a-1397-4605-b9d5-68aea01ab2b5 3 591019a9-bb7b-4e46-88f3-7da42a31edea
+fe52923b-3bb6-4390-be5f-32733342b67b 采集 \N 2018-07-26 16:40:02.033+08 2018-07-28 17:30:16.806+08 039664c3-5d24-4edb-b251-7540c98dc2ce 3 \N
+a59e747f-2b34-4867-bd4b-47994c6dc9b7 采集 \N 2018-08-01 16:05:37.451+08 2018-08-01 16:05:37.451+08 9f4bea7e-e18f-431e-af3b-9bac229c98c6 3 f9c35eff-dce1-418c-9286-093f797155d2
+44ac981a-1670-4e29-8c35-d9adb0f84534 采集 2018-07-28 17:20:27.366+08 2018-07-30 13:55:25.981+08 d0e4432b-aeb4-4004-b728-9ef120f0e1db 3 fd174c97-b010-47ac-a9fb-9436756cac7f
+0ef31610-c649-404b-849c-6a7d5a1d9d73 采集 \N 2018-07-31 09:20:37.977+08 2018-07-31 09:20:37.977+08 8d37a4fb-8add-44a4-ad5e-a8d190e87209 3 0472653c-720b-4ca7-ae8e-a16b9ed01087
+4bd4c44c-2dca-4de3-9e9e-39b2bebc57a5 微功耗 \N 2018-07-31 14:23:39.296+08 2018-07-31 14:23:39.296+08 13ee1f91-04cc-48af-820e-ffc0ed179b6c 3 \N
+fbeb2848-9908-4883-878a-10608a621168 微功耗采集 \N 2018-07-31 14:54:09.743+08 2018-07-31 14:54:09.743+08 11f0a3dc-13ad-4c40-ae16-1b2f1d139564 3 \N
+b61317eb-c793-4b2f-b680-2d15a061ec91 微功耗采集 \N 2018-07-31 15:08:50.43+08 2018-07-31 15:08:50.43+08 cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3 3 \N
+d702af0d-ac2f-48c9-bef4-31f6a5659b5a 微功耗测试 \N 2018-07-31 15:13:27.656+08 2018-07-31 15:13:27.656+08 b6095ab3-88ff-4a71-8f42-f0656b301e1e 3 \N
+b69bda25-731f-49db-b199-83207febe2ed 微功耗测试 \N 2018-07-31 15:16:09.266+08 2018-07-31 15:16:09.266+08 5f4e4e99-20b3-4bf7-95cb-a2f507595b2d 3 \N
+73e248c9-5515-4482-ac0a-af10af977c95 微功耗测试 \N 2018-07-31 15:19:17.214+08 2018-07-31 15:19:17.214+08 9110f259-e269-446d-afa3-798069f4534d 3 \N
+42c99fb8-8f40-4693-952f-7124b9f38cda 云采集 2018-05-16 17:44:54.893+08 2018-07-31 16:18:49.154+08 bff19d80-ce20-4c3d-b158-df091a1fb5ac 3 \N
+f67c6ffc-0414-4209-85ee-74153dcddd7d 微功耗采集 \N 2018-07-31 16:19:27.204+08 2018-07-31 16:19:27.204+08 bff19d80-ce20-4c3d-b158-df091a1fb5ac 3 \N
+dd1508e1-c94d-46a9-9a86-08a80d670853 微功耗采集 \N 2018-07-31 16:20:52.833+08 2018-07-31 16:20:52.833+08 0bf78d42-85ee-486c-bf43-c62c3168ee33 3 \N
+b5a575d9-25af-47ce-8a43-89a35317f2a1 云采集 \N 2018-07-31 17:08:09.203+08 2018-07-31 17:08:09.203+08 b3f251c1-ab5e-4427-8b38-9180d6544783 3 \N
+292bd1e7-c27c-4437-a899-3c61485b89e3 微功耗采集 \N 2018-07-31 17:08:23.251+08 2018-07-31 17:08:23.251+08 b3f251c1-ab5e-4427-8b38-9180d6544783 3 \N
+5066bc97-d314-4800-891f-b7b4031c1ffc 微功耗采集 \N 2018-07-31 17:13:47.367+08 2018-07-31 17:13:47.367+08 131c98fc-2216-4f0f-9cd3-581d88f9affd 3 \N
+49ca2a7b-0092-4889-a0ee-6146802ec384 云采集 \N 2018-07-31 17:21:42.685+08 2018-07-31 17:21:42.685+08 11a0df92-8921-470b-af9c-d7593b8b1f78 3 \N
+95686247-9ee5-41d3-9cc8-08fa377da8cc 微功耗采集 \N 2018-07-31 17:21:58.145+08 2018-07-31 17:21:58.145+08 11a0df92-8921-470b-af9c-d7593b8b1f78 3 \N
+273814e4-c4be-4198-9dd6-4d1f19cb0033 云采集 \N 2018-08-01 09:11:25.788+08 2018-08-01 09:11:25.788+08 75c932d0-2df0-4628-81dd-0e9c1f11ff60 3 \N
+55fe806c-652f-4b2c-a677-fa5aea862762 微功耗采集 \N 2018-08-01 09:11:38.442+08 2018-08-01 09:11:38.442+08 75c932d0-2df0-4628-81dd-0e9c1f11ff60 3 \N
+5d00a146-91e7-49d0-bd5e-930d092c386b 云采集 \N 2018-08-01 09:29:11.981+08 2018-08-01 09:29:11.981+08 9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec 3 \N
+08b2e830-9291-4846-89e5-483cf8eca55e 微功耗采集 \N 2018-08-01 09:29:21.76+08 2018-08-01 09:29:21.76+08 9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec 3 \N
+0d7a1f75-6a7c-4626-8d33-2227c919115c 采集 2018-08-01 16:20:24.312+08 2018-08-01 16:20:24.312+08 82edfa3d-c080-4212-ad83-32be43b48841 3 \N
+d926943e-d400-4c4c-83c8-2c3a6fd62c1c 采集 2018-08-01 16:25:49.744+08 2018-08-01 16:25:49.744+08 915fc949-c75f-47a9-8ba5-f516f0eb6228 3 \N
+48082fb5-546a-4106-9c2c-674aec2640c1 采集 2018-08-02 10:31:54.576+08 2018-08-02 10:31:54.576+08 705738a1-f330-4875-a2a0-23c30ec9f5d4 3 \N
+04709fe5-6ce9-4415-99f2-f349e03992fe 采集 2018-08-02 10:33:18.535+08 2018-08-02 10:33:18.535+08 6b4905df-caae-4bcc-a8a7-c99cb7866e06 3 \N
+82623747-98d9-4dfa-9a9a-08188d0311e9 采集 2018-08-02 10:35:48.083+08 2018-08-02 10:35:48.083+08 8e67e334-231e-467c-8868-c41461d9463e 3 \N
+87e911f0-3894-42f6-a05a-80c30c7e565e 采集 2018-08-02 10:41:04.606+08 2018-08-02 10:41:04.606+08 77a4b2d1-adf0-4cab-be7e-5f4635e4063f 3 \N
+812c58c6-4cd2-48fd-942a-2024f91035bb 采集 \N 2018-08-02 10:37:02.586+08 2018-08-02 10:45:02.544+08 e1f36777-486a-4527-a30f-61d17b7a8796 3 06fa55b0-c96c-4704-8998-ffd96d4feaa2
+ad9f806b-21ed-4a46-b6fb-964f135f3efd 采集 2018-08-02 10:31:04.108+08 2018-08-02 10:45:44.047+08 2cbbf402-789b-4c54-b408-7e61934ebd4d 3 87d43c5d-15f4-462d-85d9-dae114bfa3ab
+20a173c1-56c8-4576-8edc-906bdb04f749 采集 2018-08-03 07:13:57.954+08 2018-08-03 07:13:57.954+08 cd27d23f-a55d-4ce0-8c59-33675bb5ad62 3 \N
+c3ed842a-d6dd-4db8-976c-2f12501159a0 采集 2018-08-03 07:28:29.458+08 2018-08-03 07:38:12.888+08 f556a96a-5649-49c8-beae-aa08f2faa752 3 \N
+c5d291cd-bb26-4192-9454-e686cb8c1f9a 采集 2018-08-03 10:29:52.69+08 2018-08-03 10:29:52.69+08 777c9799-3abe-4eee-a583-f5e6fac01946 3 \N
+380bb834-b2d8-495f-bccf-075375161a49 采集 2018-08-03 10:36:00.512+08 2018-08-03 10:36:00.512+08 5f65c5dc-c32f-4e64-b40e-97f907d7c0fd 3 \N
+e17bf88d-d539-4c9d-9504-37c08672d5ba 采集 2018-08-03 10:41:17.485+08 2018-08-03 10:41:17.485+08 bc1228dd-0195-4fba-b21f-178b91e4cf60 3 \N
+11373c99-1270-4b66-9d6d-d19c6ad95118 采集 2020-01-14 14:10:01.18+08 2020-01-14 14:10:01.18+08 1352d63c-d97b-4dd4-8289-0de6cad01db0 3 3121ae46-41f3-451f-9995-208f16460648
+a0cd4a87-661c-43de-928c-22c5d63cbeee 采集 2018-08-07 15:28:19.798+08 2018-08-07 16:38:34.245+08 c8b20fe8-531f-47aa-96cd-3d48ea0bc238 3 3bf53c5f-a9a9-4cb9-940e-9f98dc62d3b2
+29e946c4-e67d-4d58-aba2-a16897f4da42 采集 2018-08-07 15:28:53.905+08 2018-08-07 16:40:19.915+08 d6fe2897-a3e2-4aa8-9ba2-459831131cfa 3 f57a3855-220e-4403-961c-ffe49145a71c
+201d630c-2dfb-4918-8d48-0dc931b2337d 采集 2018-08-09 14:40:15.57+08 2018-08-09 14:40:15.57+08 89ac2618-0c0c-45b5-a8a1-401e2c16189c 3 \N
+73438936-0d17-4107-85bc-2348926e9746 采集 2018-08-09 14:40:18.314+08 2018-08-09 14:40:18.314+08 2975be5f-7c2a-41d3-9157-e723ecfa9120 3 \N
+420c05f9-c835-4821-ac21-7cf1575dabb1 采集 2018-08-09 14:55:00.872+08 2018-08-09 14:55:00.872+08 cc6193d5-14b6-4231-a6f6-905db9c4a33c 3 \N
+0e3776d4-f177-404e-90be-59cb211c9921 采集 2018-08-09 15:00:04.571+08 2018-08-09 15:00:04.571+08 793d9a65-784f-4f17-840d-51ac6a2f2ddd 3 \N
+c52b1fc4-5d46-4f04-8fba-d9a9e6335b39 采集 \N 2018-08-09 16:03:13.763+08 2018-08-09 16:03:35.219+08 6dab819c-b584-4aea-bf13-c12a6a595abb 3 637e7e3d-43b9-49a5-be9b-bef0bda0ccbb
+fb71513f-dc49-416f-b4d1-3dab69eaf1ac 采集 2018-08-09 16:17:22.301+08 2018-08-09 16:17:22.301+08 f698a0a5-7e2b-4c2e-a66f-c33ff5f05689 3 \N
+c0109f4c-f2dd-4a7d-85a5-e1c2ee65cd2c 采集 2018-08-09 16:19:28.509+08 2018-08-09 16:19:28.509+08 6bd84b2f-3226-42ea-94b6-f740a5b60878 3 \N
+8b8cab39-63aa-4ef8-95d7-a42959be4592 采集 2018-08-10 09:21:02.386+08 2018-08-10 09:21:02.386+08 145b9864-56d6-41e0-9a6c-3c68394e65e7 3 \N
+6c0449e2-22ab-4974-9d49-244a1ef1d08b 采集 2018-08-10 09:23:32.76+08 2018-08-10 09:23:32.76+08 05d80c4b-4b8f-428a-bcb0-55fb2f8b5edb 3 \N
+f9df0040-a2b5-442e-9fce-4787a7c308c9 采集 2018-08-10 09:33:09.091+08 2018-08-10 09:33:09.091+08 307cf077-4fd9-4e6c-a60b-33fddf42a0e4 3 \N
+2528fa6d-da6e-4e88-9316-d13536a1a987 采集 2018-08-10 09:35:53.05+08 2018-08-10 09:35:53.05+08 9a9aa01c-948e-49a2-964f-cee49def906c 3 \N
+cde7d76f-5843-4001-88b3-5eb18836fc8f 采集 2018-08-10 09:43:03.962+08 2018-08-10 09:43:03.962+08 f63309ff-a714-4bd7-9052-30c217fa982e 3 \N
+0f7dadf8-5ab5-4a5d-b8b7-9d33d10e8d83 采集 2018-08-10 09:48:55.485+08 2018-08-10 09:48:55.485+08 7789641b-3a02-4369-b80e-894bacaa5cec 3 \N
+37ee5f1d-d770-4c7a-b901-3f060b88fe86 采集 2018-08-10 09:50:00.672+08 2018-08-10 09:50:00.672+08 342fde79-43b6-4d56-b5bc-37de3056e9fd 3 \N
+b15c0841-8700-42f6-ad9e-cfcd0c6f5665 采集 2018-08-10 13:58:44.439+08 2018-08-10 13:58:44.439+08 290b9462-1958-4dce-a86f-a0f1c503c660 3 3bf53c5f-a9a9-4cb9-940e-9f98dc62d3b2
+b0e56599-c58d-4d0a-8a80-f19855b36c80 采集 2018-08-10 14:52:45.124+08 2018-08-10 14:52:45.124+08 bbedec49-a055-4238-9e60-98ad22b84379 3 13cc59b8-9b01-4cef-88c9-40d4d9b3d798
+fee66142-81ed-4cdc-8465-19d0f7acd6ec 采集 2018-08-10 16:23:43.224+08 2018-08-10 16:23:43.224+08 030c456b-e97a-42a6-93b7-a6f48fcce4a6 3 \N
+4d1bca0a-fa5c-4af2-adc9-ded21aff72da 采集 2018-08-10 17:03:20.991+08 2018-08-10 17:03:20.991+08 8cb3528e-cadf-463e-9db2-003bb899ebb6 3 \N
+249bf211-a7fc-4649-977a-1ba27e2fc683 采集 2018-08-13 10:56:46.616+08 2018-08-13 10:56:46.616+08 6b2b2d8d-a99b-4052-9a48-2c12125e2f41 3 67b012f5-78e5-44d1-a465-db543bdc1c00
+0ad35b65-43ba-4521-bc02-63bd34be0a39 云采集 2018-08-14 14:13:28.649+08 2018-08-14 14:13:28.649+08 0e7784d1-0cbf-46aa-b156-e3361a3251e4 3 \N
+f9a40c12-42a9-45fa-b780-10df712e19af 云采集 2018-08-14 15:32:39.125+08 2018-08-14 15:32:39.125+08 1c9756ed-dcf4-4156-9a43-09ce478d2038 3 \N
+251fdf4e-2811-48e8-b21d-3bedb3ffb0a6 采集 2018-08-14 16:18:30.09+08 2018-08-14 16:18:30.09+08 ebd999bc-a789-48f2-ac00-a15049b09e50 3 \N
+c7561cfc-94ff-4fcc-bdeb-63023c74839f 采集 2018-08-14 16:26:33.741+08 2018-08-14 16:26:33.741+08 3746abdd-af23-4d98-bca0-f29909e0d0c3 3 \N
+b4b6ffd7-09a1-4348-a270-a89f768a51be 采集 2018-08-14 16:31:33.44+08 2018-08-14 16:31:33.44+08 e405d9f6-8b46-4089-94e2-1437036d040b 3 \N
+98b425ce-50b5-4c14-98e0-c13a615cf246 采集 2018-08-14 16:36:12.218+08 2018-08-14 16:36:12.218+08 1f342dfc-9de3-4d9e-b772-416fa0bfe58a 3 915cd9ab-b893-4670-ad79-93a2c14523bd
+17c83e03-bd23-47ac-ad6f-637082b66444 采集 2018-08-15 09:48:18.558+08 2018-08-15 09:48:18.558+08 4e3f8da9-5108-45ea-a042-dfab49718c5b 3 43291a09-50f1-4287-8c7c-b51503799fd1
+8a367437-ef39-437a-9e88-1dc4c6c42d14 采集 2018-08-15 10:53:47.75+08 2018-08-15 10:53:47.75+08 a5da9800-2b00-4701-8793-3aaad3e140f6 3 da2dc742-e8d6-4906-9581-128b6b5f3198
+3dbaa950-0bf5-4e4c-966f-8bff21df1e2f 采集 2018-08-15 14:38:59.637+08 2018-08-15 14:38:59.637+08 9f845f40-f7bf-4fe7-828e-8f488aff934e 3 \N
+a46e04df-5fc2-442e-8ca0-fc7da830f183 采集 2018-08-15 14:39:57.31+08 2018-08-15 14:39:57.31+08 a99d7cc9-7afe-4415-93dd-bcdc193c5121 3 \N
+39fc7575-6835-4685-a956-dbbf5987d27b 采集 2018-08-15 14:40:39.265+08 2018-08-15 14:40:39.265+08 b0c20a76-7e51-479c-9837-1516be5a1567 3 \N
+bdca95f5-1a68-43cb-8bbd-0940bd4f861e 采集 2018-08-15 14:40:50.45+08 2018-08-15 14:40:50.45+08 ada233fb-1f59-4f50-991c-049331716bbf 3 \N
+3f7364b2-c949-4499-a485-82f0a141968e 采集 2018-08-15 14:41:47.946+08 2018-08-15 14:41:47.946+08 b15e4068-3a0b-43cf-898a-151d9a211756 3 \N
+b8376c42-2314-48d4-9cc4-34b538f2862e 采集 2018-08-15 13:45:10.786+08 2018-08-15 16:28:31.834+08 0b9ab6dc-b8e5-4f20-a507-567be8892e4f 3 aa7da275-9e58-4b7e-8fe4-7abbcb421491
+face6568-949b-4dcf-a799-fec9eafe6dd5 采集 2018-08-15 17:13:27.448+08 2018-08-15 17:13:27.448+08 c1738ab8-25cd-4216-823d-0159c2d9fc82 3 \N
+244b1f17-13d5-4b46-88b9-2a48538f66f4 数据 2018-08-16 15:26:39.991+08 2018-08-16 15:26:39.991+08 3553eba2-db23-4cb8-b96d-e0d443644324 3 \N
+198e6298-06fe-49a7-9245-eaca7a85f263 数据 2018-08-16 16:25:36.773+08 2018-08-16 16:25:36.773+08 7bd233a3-8bb9-45d7-8298-278d0288de46 3 \N
+25789235-88db-4ea7-9a8a-5d4aeb5f9532 q 2018-08-17 11:27:24.524+08 2018-08-17 11:27:24.524+08 0ca9c27a-7633-4d1b-b46b-aadf7ce9bf3b 3 6bf88814-ee3c-4c50-b47e-e60248e91670
+70486f7c-d11e-4014-be32-71a2e8724359 采集 2018-08-17 11:33:00.266+08 2018-08-17 11:33:00.266+08 df1112e3-a161-4260-850f-8f6644389623 3 \N
+076391b0-0f5f-44c8-8b51-cf3c894b8b88 采集 \N 2018-08-17 11:39:56.605+08 2018-08-17 11:39:56.605+08 46272932-067d-4fa2-87ac-85a866b4f691 3 \N
+6105dff0-c96c-439e-8101-e0e7906834e0 采集 \N 2018-08-17 15:55:31.656+08 2018-08-17 15:57:29.841+08 ba3d723e-88ac-4e9a-976f-43d43081e621 3 c10e1f69-fac2-446b-b907-7b94e3da49ed
+ce369680-ed47-4e58-8f38-4cbc786572a1 采集 2018-08-24 09:09:28.328+08 2018-08-24 09:09:28.328+08 bbcd2556-3714-4360-80d1-af1f8be94404 3 1fb03ffc-fd93-4ea6-bf06-11311a655212
+042a30bb-34e1-4994-968e-af8cbfd1bd6a 采集 2018-08-24 15:26:31.712+08 2018-08-24 15:26:31.712+08 85e88d3a-7c29-4c8d-a2a2-89ffcaffd72b 3 afb4357f-a11c-4278-b137-53c5042053db
+a94fe00f-a8ea-4634-9262-e3c1ea0fa965 采集 \N 2018-08-24 15:42:01.432+08 2018-08-24 15:42:01.432+08 4e3f8da9-5108-45ea-a042-dfab49718c5b 3 \N
+e3a2390c-0ca0-4f9e-be9b-0214c81e5c4b 采集 \N 2018-08-24 15:45:25.534+08 2018-08-24 15:45:25.534+08 a5da9800-2b00-4701-8793-3aaad3e140f6 3 \N
+47c11b01-fc23-4bd4-a754-f9da2ea42dec 1 2018-08-17 11:17:05.437+08 2018-11-13 13:36:20.261+08 0f069d0a-8f7e-4480-b864-201a86725331 3 55b025d7-61e9-49a5-b144-ab7c86525a66
+1ce82d97-cb86-4a43-bf17-b75116cac5e9 采集 \N 2018-08-24 15:55:16.964+08 2018-08-24 15:55:16.964+08 a5766cb2-27a1-4d0a-939b-ac6aa0871a81 3 \N
+8bc9ea4b-7a7d-4cfb-8950-a5c8f0ea038b 采集 \N 2018-08-24 16:11:22.982+08 2018-08-24 16:11:22.982+08 6de7929d-736b-4c4e-a1c3-e7550a7b6d31 3 \N
+64fd2ff4-b5d5-475c-b2a7-9881c50a0f4d 采集 \N 2018-08-24 16:11:23.706+08 2018-08-24 16:11:23.706+08 209249f3-7316-4e7d-a3bf-df78afc260eb 3 \N
+698204ef-2e94-4c91-9c1b-f1145b054f0e 采集 2020-01-14 14:12:06.475+08 2020-01-14 14:12:06.475+08 fe0f0fce-4a90-4c6a-bd8a-26a48e5808e4 3 3121ae46-41f3-451f-9995-208f16460648
+2a0639f4-2556-4682-bf61-63ab22867a18 采集 \N 2018-08-24 16:11:25.518+08 2018-08-24 16:11:25.518+08 b0493f78-0950-47ac-bf5f-27797da84f44 3 \N
+360e9d0c-a402-4ab1-b120-b6323dc53ff5 采集 老版本振弦协议 2018-08-27 14:20:10.007+08 2018-08-27 14:25:44.814+08 99c61d5d-4b9d-4fca-9d8c-e6d530b15871 3 1b896530-ebfa-432d-83e9-25aa5d2177a0
+3fe03489-ab89-4237-a623-60b0a9d068af 采集 \N 2018-08-28 17:57:01.571+08 2018-08-28 17:57:01.571+08 c631f2ea-9e5c-415a-b56e-9d96c600e527 3 \N
+64210070-761e-4035-97b8-f76bfe61fca5 采集 2018-08-30 16:11:13.772+08 2018-08-30 16:11:13.772+08 2425cf54-e1bc-4c75-ac7b-62b039f29548 3 \N
+0b0d6db1-2a75-4d2d-a4e9-7690437a3900 采集 2018-09-26 17:10:21.452+08 2018-09-26 17:10:21.452+08 7737cd79-82ca-472e-ba8c-5ed79fde2e70 3 \N
+c88b89c6-187a-4d96-aa9d-6b1ff8fce91f 采集 2018-09-26 17:10:27.043+08 2018-09-26 17:10:27.043+08 97c2157a-e4ee-41aa-b2ca-c8745fdda755 3 cd5bd311-1502-44b3-9764-4013fe62db21
+433bad92-fb3c-4e0f-b28a-c82c4c85fb5d 数据同步 2018-08-28 18:06:12.426+08 2018-09-04 10:56:14.335+08 9aa93498-820e-4fc6-a288-5b2274fb9246 3 bac4bba9-6af2-401c-b42c-9f1bd2d62728
+a3794dba-f03a-48b2-897e-e5f4f9c077e9 配置同步 2018-08-28 18:06:12.409+08 2018-09-04 15:12:25.824+08 9aa93498-820e-4fc6-a288-5b2274fb9246 2 feb25833-7419-4779-bfc8-809195843744
+2ad7273d-8ff0-4461-b87e-01d92fe46764 数据 2018-09-05 09:55:00.351+08 2018-09-05 09:55:00.351+08 5c6b67cd-fe7a-472e-8907-63baa655cb42 3 \N
+450bca7e-218d-4faa-9527-ee2f0eceb3fe 采集 2018-09-07 09:46:01.476+08 2018-09-07 09:46:01.476+08 be5be8af-c339-4f15-b2b7-0f16e1e51792 3 \N
+4918bd89-601e-4f79-b31f-0aeda6062c82 采集 2018-09-07 10:55:19.8+08 2018-09-07 10:55:19.8+08 97078fa2-e944-487b-8913-e3c2c33c6ff0 3 \N
+f46e1f36-2e28-4b26-950d-2e00fb0b4a03 采集 2018-09-07 11:09:31.036+08 2018-09-07 11:09:31.036+08 afb69a31-61c2-417c-b62e-c41730b3e6a1 3 \N
+8e1cc471-0670-4c4f-aa30-013e6de6e3c0 采集 2018-09-07 11:18:27.99+08 2018-09-07 11:18:27.99+08 6c5b2840-b01d-4bb3-8ab1-a831b3880184 3 \N
+402f6e2a-74c7-4a3b-9021-66f64352eb7c 采集 2018-09-07 11:22:10.525+08 2018-09-07 11:22:10.525+08 db345382-4b53-424d-b563-909bfe0a36cd 3 \N
+54115f13-d150-41a4-8d45-05de44b8decb 采集 2018-09-10 10:22:20.296+08 2018-09-10 10:22:20.296+08 7a741fa4-a643-495d-bb49-443ec2df29b9 3 03873ea1-66d7-41ed-b78c-f41b3ba37eff
+da8b12eb-4ee8-488d-a51b-25c30a677462 采集 2018-09-10 17:10:05.056+08 2018-09-10 17:11:08.8+08 1c431af0-8407-422f-8823-82fe58af024f 3 1dfd10ac-171c-407b-a931-97f89d8f31c4
+7bca9e02-73e3-4462-b527-a443d6ba576b 采集 \N 2018-09-10 17:12:13.133+08 2018-09-10 17:12:13.133+08 7a741fa4-a643-495d-bb49-443ec2df29b9 3 \N
+6ea1caa6-8d9e-4f83-87ed-c73c2ed5e8ec 采集 2018-09-11 14:34:02.869+08 2018-09-11 14:34:02.869+08 470fe434-e3f4-40b1-a823-12f5b6122b0a 3 c1fb3383-b4c2-40e5-a73b-d27267e2384c
+df2bbcd2-bc11-48de-8307-826382959126 采集 2018-09-11 14:37:10.4+08 2018-09-11 14:37:10.4+08 098ca922-fd35-4605-abc8-f65640f8f879 3 \N
+d0eba673-a21f-47b7-8c47-0368788a1b62 采集 2018-09-11 15:50:20.323+08 2018-09-11 15:50:20.323+08 1b53fdfb-8040-4fff-a045-a0bd3ac61881 3 \N
+5e49818b-0a1d-453c-aa14-1979f1371690 采集 \N 2018-09-11 15:58:19.424+08 2018-09-11 15:58:19.424+08 00e107aa-a84e-4014-98e7-f0aa931b22ae 3 \N
+b9007592-b65f-41bb-9c2b-e283e2b01619 采集 2018-09-13 17:12:19.022+08 2018-09-13 17:12:19.022+08 51c68d6c-029d-4a88-8802-335e6e6ddf6c 3 ccd4746c-7684-408a-941b-20b9baad024b
+7bbe4206-6562-4fc4-b62c-94b500d6cc4d 采集 2018-09-13 17:17:20.643+08 2018-09-13 17:17:20.643+08 a1d2070f-926a-42a1-8bf8-a39b89eb4c92 3 \N
+589f754e-ea3a-4643-9d79-234ed0834807 采集 2018-09-29 15:46:46.727+08 2018-09-29 15:46:46.727+08 d5df12f1-ea7f-45d0-81a9-79a1fb4e0c90 3 \N
+02ed6adc-d0dc-43a4-a933-da902d675146 采集 2018-09-29 15:42:42.22+08 2018-09-29 15:48:29.137+08 477ce1aa-aaae-40d3-a55e-2d3ef3a38e23 3 c0e95dc9-2a94-4b37-9176-1f911fa40781
+6c510bc0-0f56-4f00-9c1c-41b619a86a28 采集 2018-09-19 17:31:06.051+08 2018-09-19 17:31:06.051+08 56e2d696-3384-449a-9072-46e2a18adbc8 3 cd5bd311-1502-44b3-9764-4013fe62db21
+3b5383c8-bd1b-4f0e-bfea-1f0d746133c5 采集 2018-09-19 17:32:06.999+08 2018-09-19 17:32:06.999+08 8b635501-4320-49f5-b573-e4193d4e31b6 3 \N
+16407e57-188e-42f3-b626-ac8ff7405aeb 采集 2018-09-20 13:52:41.75+08 2018-09-20 13:52:41.75+08 c1b890f6-babe-41df-b3b4-0a277ad7e1b2 3 \N
+7845401a-4640-4465-987b-69f630af6b8a 采集 2019-02-25 11:44:07.889+08 2019-02-25 11:44:07.889+08 b8904c0e-1294-49f9-b0e9-dadd79c4efe4 3 \N
+7aa0f7e1-677e-4285-8888-33c63cf443d7 kafka设备 2018-09-21 17:53:12.731+08 2018-09-21 17:53:27.818+08 0f37be2c-4009-4079-81f8-e9c598773ea2 3 d246da1e-bc3c-4ecc-9afa-d4d0137a3e89
+94fdfca3-2f0b-4003-b3fd-77dc3e522b6e 采集 2018-09-25 10:58:50.741+08 2018-09-25 10:58:50.741+08 19bb2b93-6e2e-4861-95df-67a68bc71fc4 3 \N
+b9257d1a-c48e-498a-85a0-6a928f32b049 采集 2018-09-25 15:45:23.99+08 2018-09-25 15:45:23.99+08 d929c576-62dd-4f0c-a2cc-15120347b903 3 f2ec840a-2e0c-4178-91e8-8b5b44009561
+131b8ec5-58de-41e6-9d48-96e59e77532e 配置下发 2018-09-25 15:45:24.01+08 2018-09-25 15:45:24.01+08 d929c576-62dd-4f0c-a2cc-15120347b903 2 fa70ca44-5363-495f-ba20-8572ecd3b398
+5b2b2647-ee99-48d8-b069-f487f052a552 采集 2018-09-26 14:38:16.189+08 2018-09-26 14:38:16.189+08 7475ac58-b627-442e-b8fc-259c0c1561e7 3 e7b120d0-2c54-4acf-b8c2-af18f962c558
+de94d984-9d2e-4129-8fcb-b2655ab694b3 采集 2018-10-05 09:56:54.406+08 2018-10-05 09:56:54.406+08 6ac55754-f252-4ba5-ba9c-72a158734b97 3 9addbae0-b742-4fa1-9ecd-d5f0ee2b3889
+7d700433-bb05-4381-8ace-4cf1f8dbd1df 采集 2018-10-08 14:13:14.282+08 2018-10-08 14:13:14.282+08 ae5aa015-b2d1-41a8-8b49-9a3d28565e8d 3 dd84941a-2077-439f-a8c4-9696132b7664
+da364ec6-34cf-4bb6-8eb8-10548f45e67a 采集 2018-10-08 16:48:22.306+08 2018-10-08 16:48:22.306+08 357c45b8-b190-4369-862c-e28530e13aa2 3 94086d83-438d-4730-9c51-771e4a2e3d12
+ca8a3be8-72cf-497c-9743-e3d348c53672 采集 2018-10-09 17:02:23.462+08 2018-10-09 17:02:23.462+08 e5ed186c-f248-4b06-ae1c-8ada54d1c67d 3 65495481-c107-49ff-98c9-2c4215b38347
+7c06e2c2-5e55-4116-a3f9-aae11dc742a8 采集 \N 2018-10-10 11:26:27.677+08 2018-10-10 11:26:27.677+08 7febae4c-c706-48a8-9f99-e546f48e338b 3 \N
+42ff7750-3e27-4669-8018-92caf824ecd2 采集 2018-10-10 11:27:19.865+08 2018-10-10 11:27:19.865+08 d94bb4f7-d5a8-4bb0-b866-c8008e5123ab 3 \N
+6c2c69a6-9f3d-4429-b4ad-1515ec6ac5e9 采集 2018-10-11 09:06:27.307+08 2018-10-11 09:06:27.307+08 cce8a8e4-cd65-4f13-a554-eb06fa2b7caa 3 \N
+42aef21d-9dab-4067-bd61-4f17fa24d286 采集 2018-10-24 10:46:54.992+08 2019-03-04 09:18:37.107+08 5e639171-0ad1-4fcb-aa69-d2f1d4af1f51 3 e9449473-2655-42a6-9523-50f4da34bba0
+9e452b06-8db9-43cf-9378-0d66ff102697 采集 2018-10-12 10:19:30.555+08 2018-10-12 10:19:30.555+08 5fc20b7c-ce0f-4584-aee1-c8e7dbb32e8a 3 8ef51f2f-b169-4e69-9a5c-d471d6c03e76
+2e746e8b-7af0-488d-9e6a-6839f50952cd 采集 2018-10-18 15:18:15.148+08 2018-10-18 15:18:15.148+08 5de488a0-c8c4-4e3d-b0c7-82150f4bd79b 3 dd0197d4-7aaa-415a-b006-de6f384718ee
+6a85de5f-e927-43bb-bb03-21f34d546aca 采集 \N 2018-10-24 13:35:15.427+08 2018-10-24 13:35:15.427+08 04425c48-b89c-498d-8372-b3a64d1abf1e 3 \N
+8221e541-b6e9-4b4b-8b70-7e533565674f 采集 2018-10-24 15:16:44.648+08 2018-10-24 15:16:44.648+08 3ad4be85-c6f9-46b8-97dd-39d01e4ef858 3 \N
+fa2e9270-f133-46bd-8403-b1438680963a 采集 2018-10-10 11:24:53.696+08 2019-01-23 17:14:10.679+08 dc4b89d8-51e0-4b94-91d7-92d61a59a696 3 cba36de4-2915-4b24-8c57-4ff0f78e202c
+1c99c3da-58a7-4f9d-aa29-2a1b1c335f7a 采集 2018-10-26 14:52:49.974+08 2018-10-26 14:55:47.752+08 3805bf98-24dc-453c-a62b-a5a97633ca8b 3 ea9ac263-3f91-4260-b341-02cc1811e8b3
+9538c3ec-e6e4-4d94-b1f6-dcd1bc2e2527 采集 2020-01-14 14:13:41.892+08 2020-01-14 14:13:41.892+08 cd24ff84-fef3-40d2-8397-dfa240a13d17 3 3121ae46-41f3-451f-9995-208f16460648
+4caa397a-da74-42c1-b0a7-a83ba80b975e 采集 2018-10-26 16:15:49.381+08 2018-10-26 16:15:49.381+08 a5dda81c-6a85-4e7b-97f3-be45b980646e 3 \N
+27f22c17-c2a9-47b7-82f9-f87716de54fa 采集 2018-10-26 16:26:05.546+08 2018-10-26 16:26:05.546+08 d5bfb91e-3d09-4068-ac33-5974e8b7f039 3 \N
+9e7de9ac-68c1-48c2-bea1-751c1149407a 采集 2018-10-11 14:47:31.906+08 2018-10-29 15:10:56.434+08 177e7e33-3dae-4163-8d7d-1778e70b4a8b 3 \N
+7805394e-0df6-4a46-b9f4-d62860cf6be1 http \N 2018-10-29 16:20:53.668+08 2018-10-29 16:20:53.668+08 2fb5ab76-2e1f-4791-a38a-edcad8b3ab4e 3 457f4d30-bbd7-4608-84f6-c6249675c7eb
+a2423718-1142-4d1b-aff4-85a6f260c390 采集 2018-10-29 18:06:17.126+08 2018-10-29 18:06:17.126+08 57e52f6f-9cfd-4060-bbf4-506058f6206d 3 7dd1d023-4e38-4172-b2b4-6009de43f1a7
+02e056da-0fdc-4477-bdb1-f52f28a1f6bd 采集 2018-10-30 22:17:59.325+08 2018-10-30 22:17:59.325+08 b03b1516-7e4a-41a4-9765-a1a485bb998a 3 \N
+27a9d353-a3e8-4669-97b5-f467e52007c5 采集 2018-10-31 18:04:59.743+08 2018-10-31 18:04:59.743+08 c1831563-faaf-4e2a-9d49-6b483abbd040 3 ef26cc99-f1f8-4c3c-9d5a-090131dc310b
+abcf8bcb-b863-4219-b7df-9f5ac18ccaf1 采集 2018-10-26 17:54:01.956+08 2018-11-01 14:34:05.139+08 4a91ace7-e5da-44c8-843d-43fb6a130847 3 37d61bde-62f1-4c1e-97f9-8546cba82d2d
+7b5d05d6-c187-4e6f-97aa-9add7a42ebbc 采集 2018-11-02 11:05:43.31+08 2018-11-02 11:40:18.842+08 b440e042-3173-43c6-887c-3cf4ce8a49e4 3 d135605e-090a-44f6-844b-8c294ea13c83
+383450e1-ee35-4242-86ef-f2b575b96ba0 采集 2018-11-02 17:11:56.253+08 2018-11-02 17:21:36.825+08 24946992-8d23-4862-ab23-0844e246fb46 3 85e2b97b-2221-4c86-96cb-1daf90b1118f
+677a3cf9-1821-4ddf-98af-6bfef51be1d0 采集 2018-11-03 15:41:07.728+08 2018-11-03 15:41:07.728+08 2729651f-9ad2-44f0-b9cf-bfc33669f9c7 3 \N
+970a19fd-31b9-4485-90d3-6394bc637a87 采集 2018-11-05 09:08:45.114+08 2018-11-05 09:08:45.114+08 a03158bb-03f2-4da6-9ef0-10b837caab9e 3 ef26cc99-f1f8-4c3c-9d5a-090131dc310b
+640ca77d-7813-4304-9242-b987653bbad0 V3.1.22 2018-11-05 11:05:43.244+08 2018-11-05 11:05:43.244+08 706988da-65c8-4388-a4ab-47e553cd1085 3 \N
+1ed1816a-f590-4eba-8702-c334ec7a1e1d 采集 \N 2018-03-29 13:37:27.98+08 2018-11-06 19:45:02.2+08 f4976287-96c1-42a2-aedf-0d8e8ab739c5 3 03ad066f-654d-4ca0-be8d-5260028f35e5
+b5a32d0d-110f-4eba-9d54-a5a661fb55d2 采集 2018-11-07 10:56:08.266+08 2018-11-07 10:56:08.266+08 ed1a6677-30c5-4215-a128-96bbd4b46c9f 3 \N
+652126ab-6853-4c3d-ad18-2b150a0a799e 采集 2018-11-09 14:39:36.877+08 2018-11-09 14:39:36.877+08 6757358d-f79f-4a71-a721-6a882b92b350 3 790ba3f8-119c-47b6-bdff-ae905ec84c60
+ed0bee37-45a5-464f-aec8-5b97ee0fb1d3 采集 2018-11-09 14:49:07.699+08 2018-11-09 14:49:07.699+08 296a97ca-fbd1-4876-83b2-f40a7fa7d5c5 3 \N
+3452703a-aec3-4cca-9aa7-7041c1ba236e 采集 2018-11-09 17:35:43.405+08 2018-11-09 17:46:33.102+08 5e44f909-0d21-4d00-82f5-d3502e192e18 3 e8cedb2f-f0bd-401c-bea3-abd04f01319e
+bf029965-3d0b-4ca6-9426-c9aa2ea4b091 采集 2018-11-10 11:08:27.805+08 2018-11-10 11:10:38.133+08 7734e171-78b3-4a47-bccf-b812a1cf30f3 3 c3bb4463-d16f-4c26-94c3-6fa66c5766b1
+d1fa6c6c-dfb0-450d-bc20-1207b2973420 采集 2018-11-12 16:40:05.53+08 2018-11-12 16:40:05.53+08 ffa967e5-e1cd-4c0d-9aff-643c16430446 3 a0ce411d-4370-4a33-88dc-7a51846cf38f
+fffc843b-a9bd-474d-868c-e7482d84e823 采集 \N 2018-11-12 16:44:32.047+08 2018-11-12 16:44:32.047+08 540e29ab-87bd-4d64-9f6c-c9af1db5bbf4 3 a0ce411d-4370-4a33-88dc-7a51846cf38f
+f27415f0-f6a5-43cb-bb3c-f54d94dd0930 采集 2018-11-13 15:36:10.372+08 2018-11-13 15:36:10.372+08 830b9ca6-451c-480a-8013-67108cd4173f 3 a0ce411d-4370-4a33-88dc-7a51846cf38f
+18903d51-d495-45f0-8d08-6f52d8a62684 采集 2018-11-13 16:37:13.341+08 2018-11-13 16:37:13.341+08 f125a65b-639e-46f7-8b52-6d2f4f2a064a 3 \N
+23587253-110b-4b12-8c74-53f5147ad189 采集 2018-11-15 15:46:09.082+08 2018-11-15 15:46:09.082+08 5f1f2736-2744-4339-b456-50c5626ea641 3 ae1f5ddf-f933-47ea-a90e-9ac5af01b15b
+ec90f249-7504-4b98-93e1-8f6f39352105 采集 2018-11-16 14:10:42.796+08 2018-11-17 09:21:52.76+08 f12a248f-faab-43f2-bfbe-088da7f471dc 3 40879c58-2d96-4474-88b4-fcbda49d1ab2
+92400a19-a4cc-450a-973b-f0c0aebbade8 采集 2018-11-17 14:04:21.043+08 2018-11-17 14:04:21.043+08 e689bb3a-b7ce-4502-9042-c07f89958809 3 01baa98e-542d-4c05-99d1-8f46f984e13c
+6867f7aa-51dd-4f2d-acd3-ed771f2fb33b 采集 \N 2018-11-17 14:07:02.733+08 2018-11-17 14:07:02.733+08 112843b4-e834-4892-9ef3-260fe3d90c24 3 \N
+067d099e-3d4d-40f5-8ca7-68383ffd5208 采集 2018-11-19 11:02:17.781+08 2018-11-19 11:02:17.781+08 d199daf3-83a4-4bcc-b23b-b6ca37fba927 3 c103cba2-1c09-493e-8db1-37394ad65637
+bebf7077-da40-449d-99fc-9340c39d6231 采集 2018-11-19 16:52:15.451+08 2018-11-19 16:52:15.451+08 1a456dbb-f7f0-493c-969d-2a0c1f1698ef 3 e7fa2b54-05b9-4fb9-9036-01f292fc3ec6
+9d766294-6005-4331-8071-045ac9e9c4fb 指令下发 \N 2018-11-20 11:30:55.306+08 2018-11-20 11:33:09.77+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488 2 17081615-1340-4cae-9924-f101767e7d36
+99a6468c-6183-4253-bc6f-0e66fea8e3ce 采集 \N 2018-11-20 14:59:57.296+08 2018-11-20 14:59:57.296+08 800e5478-374c-4de8-ab05-d9aa4be45cdb 3 6da213f0-1d9e-48bd-ab58-364e65a0ecd5
+59ea18ad-dfaf-406a-95bc-213eaff64b6b 采集 2018-11-20 15:19:51.011+08 2018-11-20 15:19:51.011+08 0209176c-7c91-4fe0-9a00-e751fe24c8f8 3 cabb8dc7-293f-4cb1-b1e9-81e637fd8faf
+24aa287d-5c1b-4564-8b10-d71615d3c626 采集 2018-11-20 15:38:42.532+08 2018-11-20 15:38:42.532+08 b349f69a-d7bb-4bee-aa65-6d250e1a7ae8 3 485f00b2-c992-4eb3-8d4a-0c8d2dd07a30
+41d50f61-0dd5-4761-977c-1ebf6e29b35f 采集 2018-11-22 17:12:56.416+08 2018-11-22 17:12:56.416+08 3b867352-5d0b-4016-a55f-4d68d0dcbaa4 3 b8292b20-401c-4add-9928-fbcda8b8985f
+7faa8d59-78aa-493f-855c-39efc2890727 采集 2018-11-20 16:26:17.241+08 2018-11-21 14:57:39.412+08 9c5aaf1f-48c2-4293-8338-f549c223993d 3 3c8986bd-7bbb-4132-b2f0-eeb132743564
+08549605-83a6-46c5-8fbc-83279c95d08e Lora \N 2018-11-22 15:43:17.351+08 2018-11-22 15:43:17.351+08 c9946e27-bce7-41eb-b341-d6b03a7f115f 3 \N
+b0d9fed6-e9d2-46d8-9995-4b9865155e77 采集 \N 2018-11-22 16:01:56.546+08 2018-11-22 16:01:56.546+08 b91bca75-6908-439e-9860-f0debec0bf10 3 f351ad03-a539-4ec7-8a2c-429209e9c03a
+e2cb4c00-ac04-478b-afc2-eb7928bfb361 采集 2018-11-22 17:30:26.341+08 2018-11-22 17:30:26.341+08 dff02ef2-0438-415d-9327-cdd883c38c81 3 aa4e6330-665d-49b9-b91b-4d0a5099c8bb
+7d4a13ce-fcb5-4eb4-89dc-77f1b0b46fe8 采集 \N 2018-11-23 10:32:50.892+08 2018-11-23 10:32:50.892+08 87a47520-e1a3-474c-b8b2-b1fd5dd521a9 3 \N
+d2114a8e-de22-4be9-a15c-1fa381795077 采集 2018-11-23 16:45:17.058+08 2018-11-23 16:59:56.346+08 3b796285-ef41-4963-9304-f0909623f5c7 3 fd08e5b1-9f9f-45d2-af57-13ae07de6891
+07b4abb3-3cd6-43ad-80af-e256996876d7 采集 2018-11-23 17:09:42.306+08 2018-11-23 17:09:42.306+08 8c73b29c-6146-4170-9cb7-d8ead8990d60 3 \N
+b081c1e5-b3f5-41e7-a15f-da42c0760ab8 simulator \N 2018-11-23 20:49:29.524+08 2018-11-23 20:49:29.524+08 09ebfc15-19c9-4e5f-bacb-5e81ec5ef026 3 d923ce84-8f85-4e60-94c4-e91819015eeb
+00da1250-a423-4a89-993d-3cacb4df488c Lora采集 \N 2018-11-24 17:43:29.029+08 2018-11-24 17:43:29.029+08 780ffe7d-7369-4d2f-9184-32790466f2ba 3 \N
+f5c02f07-5612-47c7-a0e8-2f5284f203e3 采集 2018-12-03 14:06:15.013+08 2018-12-03 14:06:15.013+08 f0229321-e654-43b1-a172-a660b74367cd 3 030de29c-d4cb-4747-9885-3a81f9cf61ba
+4f2419a5-1b3b-4929-9b0f-27d286d684a4 Lora采集 \N 2018-12-05 14:59:57.887+08 2018-12-05 14:59:57.887+08 c9eacd36-38d6-48b9-9672-e76406906ea3 3 \N
+75e11f44-f4d0-45a8-b1b9-6c80ae95941e 采集 2018-11-26 11:43:09.701+08 2018-11-26 11:43:09.701+08 59f09a3b-57f2-46ee-a2c7-8bba3e704794 3 e28ad13d-52d4-4ef6-891e-82958b52ba44
+59ffcd16-077d-4dcd-9e27-9b85b83b6ece caiji 2018-11-28 10:42:00.892+08 2018-11-28 10:42:00.892+08 f0c41435-ecaf-4e42-b592-b53aaa72f721 3 \N
+71301f1e-11cb-40ce-8550-770dc2877603 采集 2020-01-14 14:15:55.646+08 2020-01-14 14:15:55.646+08 28dd8b68-38c2-47ad-af2f-80cabb2e5af7 3 3121ae46-41f3-451f-9995-208f16460648
+37421fe7-d68a-4eb7-a2b4-f8238e4ee63d 1 \N 2018-11-28 15:03:29.306+08 2018-11-28 15:03:29.306+08 b75d2a21-d798-498b-966f-75375c6967ff 3 \N
+bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a 采集 2018-10-16 11:55:50.858+08 2018-11-28 15:40:39.927+08 27503c42-1dec-4321-ad45-eab67190afb5 3 f4bb99f2-48a1-454c-8d3b-d9aa707ce857
+ffb4a9e7-51b0-45d7-b5a7-a80bf31c7f6a 采集 \N 2018-12-03 10:30:03.05+08 2018-12-03 10:30:03.05+08 c6a59efb-40c2-4104-9b26-7895bb8e072d 3 3cf58410-da32-4194-aca0-9adf94b1d3bf
+a9a88239-bda9-4074-8162-0831dde92dd6 采集 2018-12-03 13:54:10.25+08 2018-12-03 13:59:26.712+08 7575abc3-ef50-40ce-90c4-66fb308cf20c 3 030de29c-d4cb-4747-9885-3a81f9cf61ba
+f51fa45a-b4ee-4071-a1cb-b9b7657421f5 采集 2018-12-03 15:03:56.962+08 2018-12-03 15:03:56.962+08 a820a6a6-2302-4291-bf8a-e6beb3e7f663 3 f4443305-4848-4a3e-b1bc-f5ad10a87518
+cebdbb60-2d1c-4a4a-af8c-85a571d69232 采集 2018-12-18 16:53:42.374+08 2018-12-18 16:53:42.374+08 00824420-b248-4f1e-9e56-57e8573c9e35 3 \N
+f944e6ec-6886-471e-b0e0-41afb54df653 Lora采集 \N 2018-12-06 10:06:22.373+08 2018-12-06 10:06:22.373+08 91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 3 \N
+f7d87585-4ebf-4d22-a1ce-05ef947311e7 Lora采集 \N 2018-12-06 10:15:14.266+08 2018-12-06 10:15:14.266+08 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 3 \N
+0d021590-ab48-4d98-b318-458faaf5d934 Lora采集 \N 2018-12-06 10:19:12.77+08 2018-12-06 10:19:12.77+08 cb4eb310-0876-492a-9e06-8cd0a5542c5b 3 \N
+cf51dafe-466c-4549-b2c3-3eb4dbf5d871 Lora采集 \N 2018-12-06 10:22:33.35+08 2018-12-06 10:22:33.35+08 c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d 3 \N
+322b0741-7b10-4499-a14d-5c660bc3dadf Lora采集 \N 2018-12-06 10:25:31.746+08 2018-12-06 10:25:31.746+08 37c046eb-9a0e-49b0-95fb-f0128338f381 3 \N
+d8d994be-3cdb-4646-a06b-d2869fdbedf6 Lora采集 \N 2018-12-06 11:11:21.651+08 2018-12-06 11:11:21.651+08 424f45f6-916c-4383-bce4-c71153f82e63 3 \N
+a1051359-cb72-4421-9dae-06e5cc0d8622 Lora采集 \N 2018-12-06 11:28:49.95+08 2018-12-06 11:28:49.95+08 ccb72dc5-f9bc-424d-a3ec-e6e9121bc534 3 \N
+cba87e64-ebf2-4b4b-8fe3-8df973625a56 Lora采集 \N 2018-12-06 11:38:32.017+08 2018-12-06 11:38:32.017+08 d2a5375c-0240-4435-9b8f-a62372fafaca 3 \N
+21c31597-4e3d-4568-bc38-7d53a010fe90 Lora采集 \N 2018-12-06 11:46:22.637+08 2018-12-06 11:46:22.637+08 abaf6bf4-288f-4d21-9fab-515213e6dcac 3 \N
+1f518f12-461b-4d6b-93a4-af3c317ae85b 采集 2018-12-11 10:31:53.265+08 2019-03-26 15:58:52.799+08 d8de8739-f146-41e0-877e-747f30ac59a7 3 5a0243a8-8564-4245-86a7-c477a66eeb15
+b8bf89a8-9e01-42a3-b331-a3b2c1fb2e06 采集 2018-12-07 17:12:17.184+08 2018-12-07 17:12:17.184+08 e8357fe4-05bb-4159-8a27-a46212d14544 3 \N
+fecfc4c4-f65d-44d1-afdb-57d325216958 采集 2018-12-07 17:12:17.331+08 2018-12-07 17:12:17.331+08 01f1ac79-6cbb-4f77-b73f-cf8d602f11a6 3 \N
+383732b4-ea54-49fb-8e63-4dd2c614e5fd 采集 2018-12-07 17:12:17.904+08 2018-12-07 17:12:17.904+08 7328323d-9f8b-435e-9d4f-f963f502dc31 3 \N
+bbfe4ad2-61fd-4c9b-9a68-a0682458a01c 采集 2018-12-07 17:22:01.993+08 2018-12-07 17:22:01.993+08 65e60374-6bdf-42f8-801d-00fc50085215 3 \N
+71c10c83-3856-45fb-ab38-c75aabf7d5ea 采集 2018-12-07 17:22:02.57+08 2018-12-07 17:22:02.57+08 2bbdef47-01cb-401b-ae49-c4b7bad46d36 3 \N
+c8e9affc-7965-452f-af9d-db9cafc1a54f 采集 2018-12-07 17:22:03.074+08 2018-12-07 17:22:03.074+08 fac96717-3818-4839-aedc-5dbb6c1c62f2 3 \N
+4c36ad2e-c8d1-4ed3-a415-bf31d5bb8329 采集 2018-12-07 17:22:03.978+08 2018-12-07 17:22:03.978+08 326d5283-7066-4e0f-9e27-380773523f19 3 \N
+1065f451-14e7-45e9-8d0e-511f274b97c4 采集 2018-12-07 17:22:04.455+08 2018-12-07 17:22:04.455+08 9dac79b5-8173-4081-abff-37f65c42b0c6 3 \N
+d1c4860a-e460-4a8a-928a-0c08b2f1e408 采集 2018-12-08 15:12:26.602+08 2018-12-08 15:12:26.602+08 0747dcbe-0a49-4db1-ac06-d9a460babdd3 3 51fd07fa-e516-466b-8ca2-c4baffc0a1d2
+0437f985-a7fc-497c-82ce-fda992d3a8d3 采集 2018-12-08 17:37:32.882+08 2018-12-08 17:37:32.882+08 a4cf524d-8114-4b70-b13a-a931429c4bbf 3 cbf73de3-cf1e-400f-b1b6-af60c861a09f
+9e3252d0-5674-400f-813b-eaf3f07ee1ff 采集 2018-12-10 10:00:18.978+08 2018-12-10 10:00:18.978+08 1152aa27-3899-4f0f-9954-9d83cedd5aab 3 f46d22a0-54b2-47dc-8b98-6c3de609557a
+2818ab68-9d7c-4254-99e5-e1edc265931c 采集 2018-12-10 11:36:18.836+08 2018-12-10 11:36:18.836+08 d4582a57-2984-4d20-94de-598f5b28a188 3 \N
+a1a7e32d-9449-425a-9043-e40a835abf95 采集 2018-12-11 14:09:09.387+08 2018-12-11 14:09:09.387+08 0b4f75d6-d921-4913-a9de-cfff3b99d56e 3 030de29c-d4cb-4747-9885-3a81f9cf61ba
+8481bad4-e00b-4018-bc7f-33c5c4c800ef 采集 2020-01-17 15:31:03.147+08 2020-01-17 15:51:20.601+08 20d96ea0-8995-453b-aa12-191acb05eced 3 f9058abc-d879-4c5e-9f2d-40e8962ba5fe
+227b30cf-bef6-488b-b9db-9eaaf4e2f2da Voltage \N 2020-02-11 14:34:08.156+08 2020-02-11 14:49:28.623+08 c7c40505-1247-43ea-a898-e767eeae6943 3 bbd0c618-985d-47a7-b844-e4831697168b
+72701fdd-9595-45b1-8bed-190d4bf8ea7f 采集 2018-12-13 13:58:23.809+08 2018-12-13 13:58:23.809+08 d5ce913e-4a89-473e-b69b-bdfbc0fa6753 3 80989031-5d20-4c1f-a1ac-949bad0026c8
+3373f8a0-47a6-4b6c-9df0-b21cf0883d73 采集 2018-12-13 15:31:50.778+08 2018-12-13 15:31:50.778+08 50d3cb43-638b-4833-a401-f526d1cbbc9e 3 cc379fab-18f6-4524-874c-3cf8c71188cf
+61f238e3-e9dd-4c9c-a451-114ab6682354 采集 2018-12-13 15:33:20.404+08 2018-12-13 15:33:20.404+08 6d4fda56-b81c-4873-9c75-10257aaf7254 3 \N
+4584d50a-bebf-4089-a9a1-adff635a4b75 采集 2018-12-14 15:48:01.107+08 2018-12-14 15:48:01.107+08 164528dd-81d3-435b-a4cd-dc328abbe3ba 3 318b2494-9869-496b-b179-399d8330f96c
+7ac65a44-f581-4440-81e8-123685b15bbb 采集 2018-12-15 11:36:54.192+08 2018-12-15 11:36:54.192+08 495526a7-7701-4e9c-8dfd-bbfd7e0b163b 3 0b96499d-fce5-4592-aa19-a1df21da56c7
+5e55d0a9-995a-465c-ac1d-a0253c41bc53 采集 2018-12-15 11:42:30.095+08 2018-12-15 11:42:30.095+08 74ca6540-3a33-4157-8629-f00d8750aa78 3 9371fe71-c7ed-4957-b430-606c12203969
+e277a4bb-5513-4464-be88-055a50df13b0 采集 2018-12-15 16:52:13.978+08 2018-12-15 16:52:13.978+08 11c61b7f-9d36-4273-b679-898a09fe21e9 3 b8fe420d-0838-4c78-be1f-6eec1246a5c9
+2fd829ec-a887-4746-91ce-1c3ad494805d 采集 2018-12-18 13:51:36.31+08 2018-12-18 13:51:36.31+08 bfd93522-374e-4c12-b203-e02ff040a821 3 0856b400-ee67-440c-b534-b075d2b36023
+f8c7d826-f0aa-4b53-a793-833a2e913699 采集 2018-12-18 16:35:54.031+08 2018-12-18 16:35:54.031+08 e376bde0-8e4f-493d-a03e-98b4b27acec0 3 \N
+fe292a77-3306-4e04-9708-072c060f3e74 采集 2018-12-18 16:35:55.147+08 2018-12-18 16:35:55.147+08 ae5c1f57-7ae4-4515-b6ba-51319d4599ce 3 \N
+36c1deeb-653e-4326-98ac-a804fac20490 采集 2018-12-18 16:53:40.224+08 2018-12-18 16:53:40.224+08 e5b96801-9448-44f2-a175-40cc7e8466b4 3 \N
+3aff704a-a328-45da-b0eb-3fee9080c603 采集 2018-12-18 16:53:40.795+08 2018-12-18 16:53:40.795+08 8580899d-741c-4cc7-a479-ccd6c0c6e22c 3 \N
+9b0aed36-6906-439d-8969-4918e4e723f5 采集 2018-12-18 16:53:41.311+08 2018-12-18 16:53:41.311+08 b640a9ef-9a1c-4973-ada5-0cdab7877f55 3 \N
+fda2ff9a-981a-43fb-9a27-2f74effa3e43 采集 2018-12-18 16:53:41.849+08 2018-12-18 16:53:41.849+08 b0726a2c-5c69-481f-8d2d-d8f8e17a248d 3 \N
+16fd9521-16ab-499d-b342-4ed89b2fb211 采集 2018-12-18 16:53:42.85+08 2018-12-18 16:53:42.85+08 99685e46-230b-43e6-a98c-f7f472af999f 3 \N
+4604ffee-b4ae-49e6-8498-281f3954e051 采集 2018-12-18 16:53:43.57+08 2018-12-18 16:53:43.57+08 66ccfb40-3e33-4b5b-a47b-be50c83473e9 3 \N
+1e07f74a-8506-48c5-b76c-e179333adcdf 采集 2018-12-18 18:03:29.508+08 2018-12-18 18:03:29.508+08 6b180341-15c7-4148-89e3-b6fc10b0f7b5 3 be045345-b692-40de-8c14-3649bb3ccbbc
+2399a5ab-0f4b-42c7-840e-c9331124008d 采集 2018-12-20 14:56:36.693+08 2018-12-20 14:56:36.693+08 9e3cc14a-915c-4fd2-bb82-35360798cb23 3 743ba664-1590-4481-a703-bc9dde076f67
+764df0c7-c68c-47cf-827f-d2cee7802096 采集 2018-12-20 14:58:02.435+08 2018-12-20 14:58:02.435+08 f09a8627-9e84-489e-86f5-72522b126e74 3 \N
+ecdcbcbd-7dc4-4195-8207-a0d0d3a50f94 采集 2018-12-20 15:04:51.312+08 2018-12-20 15:04:51.312+08 b2e31dbc-1560-4ab9-8b57-a57a012d5022 3 \N
+7f040f7c-5295-47e8-9ad0-e60c4bbb45b9 采集 2018-12-21 15:20:51.749+08 2018-12-21 15:20:51.749+08 f09bd97d-d0b3-4fbc-ae36-8de97f4c64e2 3 c54c1a0b-dc02-4aca-99d6-466858cec28a
+12f5bcb9-fd4e-4b1c-bb2f-36ddf7727452 采集 2018-12-21 16:55:45.971+08 2018-12-21 17:01:52.148+08 3f9ded10-1974-46c6-b577-74ef70477cc1 3 0bd15600-333e-47d6-b4fb-c3b8b26c2dcf
+2ad69732-f5bc-48ff-9b70-ef6374830804 采集 \N 2018-12-22 09:58:06.297+08 2018-12-22 09:58:06.297+08 2aec4a46-de9a-40e0-ac97-bdb0d149e82d 3 e746003f-c6e3-4213-9d13-706aa552dfd2
+1392402b-26fe-47c7-91d6-d380095aac9f 采集 2020-02-19 16:24:50.478+08 2020-02-19 16:24:50.478+08 1b1cc578-8839-4900-a0bf-8e8614bdbd41 3 f6ebffcf-2f2a-41fa-a36b-d997b8584c39
+f50640f2-9144-4d3a-ae14-f042492a899b 采集 2018-12-24 11:48:02.124+08 2018-12-24 11:48:02.124+08 fc561f5f-92c8-4549-8e02-dd01dd276aef 3 f6817d17-36f6-41ce-ad3f-9103b236586a
+fb5b0dad-7bf3-429f-a153-95ff04ef6b58 采集 2018-12-24 11:53:24.873+08 2018-12-24 11:53:24.873+08 6f051a40-1c14-47c6-8124-3077f27facc5 3 f6817d17-36f6-41ce-ad3f-9103b236586a
+a20c22f5-81ae-4aa9-9a71-40fd0854d653 采集 2018-12-24 11:53:26.517+08 2018-12-24 11:53:26.517+08 b92bc45a-bf9b-425f-9747-7caedf0c2784 3 f6817d17-36f6-41ce-ad3f-9103b236586a
+9bec257b-dd97-4034-ada6-eb01b7a69868 采集 2018-12-24 11:53:35.037+08 2018-12-24 11:53:35.037+08 52ae2b25-56b5-4a29-9f0b-33454ac99ff6 3 f6817d17-36f6-41ce-ad3f-9103b236586a
+865d7b6a-d5c7-4c8a-915f-4350e6cbab7b 采集 2018-12-24 14:39:01.24+08 2018-12-24 14:39:01.24+08 0c6ecc38-15dc-4580-a580-aa3c39eb9064 3 3bcc969b-9e2f-4d39-9e23-4e778b30d2f4
+a625037d-7d72-4479-857e-ba45ebf3a2db 采集 2018-12-24 15:31:37.904+08 2018-12-24 15:31:37.904+08 2202dd15-500f-45e8-a555-e90ddf24df13 3 f6817d17-36f6-41ce-ad3f-9103b236586a
+7ab198d0-56df-4a07-9b1a-ea5c16664b5c 采集 2018-12-28 11:02:10.362+08 2018-12-28 11:02:10.362+08 e6c538b8-f82a-4e8f-9d47-529a835fc779 3 dd9d12d0-a0ee-44d4-9ba5-9887b1057881
+70c9304e-caaf-4c6e-aa82-b51207d7aeac 采集 2018-12-28 11:07:29.297+08 2018-12-28 11:07:29.297+08 092ae1af-65d0-45dd-a621-17fd26682e7c 3 dd9d12d0-a0ee-44d4-9ba5-9887b1057881
+14784dc2-a6ea-4008-acd6-bb96f3cedf1e 采集 \N 2018-12-28 11:13:18.18+08 2018-12-28 11:13:18.18+08 a300435b-3982-4694-aab4-48ba853d838e 3 dd9d12d0-a0ee-44d4-9ba5-9887b1057881
+b9a47230-060a-45fd-8409-4307247b8a62 采集 2018-12-28 11:17:19.429+08 2018-12-28 11:17:19.429+08 d52114b2-8ad0-42a3-989f-0650203b54c8 3 dd9d12d0-a0ee-44d4-9ba5-9887b1057881
+8b827cae-a928-42a2-bcd6-0071556c240f 采集 2018-12-28 11:30:29.894+08 2018-12-28 11:30:29.894+08 bc87beae-9433-42de-875d-6981e7975f21 3 dd9d12d0-a0ee-44d4-9ba5-9887b1057881
+37eaae27-d936-4e7d-8680-2d062ac5bb82 采集 2020-02-20 16:35:47.517+08 2020-02-20 16:35:47.517+08 62fe835f-5a83-41c7-a31e-3304fb51c5a9 3 f6ebffcf-2f2a-41fa-a36b-d997b8584c39
+d83c7fb6-a62f-4cf0-9818-3df3592a0f3b 采集 \N 2020-02-21 13:07:28.529+08 2020-02-21 13:07:28.529+08 31be3fb7-3369-4966-8e26-b561dc31b6fd 3 \N
+69888b76-d5a8-4e6d-90a8-cfa968515267 Lora \N 2020-04-03 17:23:40.98+08 2020-04-03 17:23:40.98+08 ca2fe08c-b600-4472-8de2-3c549ea7d150 3 \N
+458b31ce-11c3-4abc-aeee-3cdaa45215c2 Control 电源 2020-02-27 20:51:36.627+08 2020-02-27 21:02:55.281+08 2f966726-181d-4301-8415-5987393db114 3 bbd0c618-985d-47a7-b844-e4831697168b
+39e094af-e8c9-455b-8f47-7d5b627b56c1 State \N 2020-02-27 21:03:12.28+08 2020-02-27 21:03:12.28+08 2f966726-181d-4301-8415-5987393db114 3 bbd0c618-985d-47a7-b844-e4831697168b
+34d873b8-b4cf-4313-ae19-a2fedae19eca 云采集 \N 2020-04-03 17:27:44.767+08 2020-04-03 17:27:44.767+08 ca2fe08c-b600-4472-8de2-3c549ea7d150 3 \N
+d5ca53cd-12eb-4cb5-81e0-8697934670ab 控制 2020-02-27 22:26:34.314+08 2020-03-01 20:27:14.567+08 80f33249-c402-4942-8c91-15f19638dce4 3 bbd0c618-985d-47a7-b844-e4831697168b
+cb88ad52-fd36-4f48-8946-4e33300d3b1e 状态 2020-02-27 22:26:34.299+08 2020-03-01 20:27:22.716+08 80f33249-c402-4942-8c91-15f19638dce4 3 bbd0c618-985d-47a7-b844-e4831697168b
+b6fbb28e-3823-4d97-8ade-baadda4ca2f2 控制 2020-03-07 16:35:47.283+08 2020-03-07 16:35:47.283+08 c82a7f0e-848f-4659-9555-8b275c33036e 3 bbd0c618-985d-47a7-b844-e4831697168b
+d8a43904-24f4-496b-acd9-bc41e483b144 采集 2020-03-07 16:35:47.302+08 2020-03-07 16:35:47.302+08 c82a7f0e-848f-4659-9555-8b275c33036e 3 bbd0c618-985d-47a7-b844-e4831697168b
+83e59e62-4f0e-438c-af09-6988ceca1a91 RTU \N 2020-03-10 13:52:34.944+08 2020-03-10 13:52:34.944+08 6f6f83fa-1af9-4e4c-8d3f-53c2a4d1b4ca 3 a07a4bf8-c1c2-49da-b8dc-e2f2825764a1
+a347cbc7-41df-43d5-96a1-0424f00954d5 RTU采集 \N 2020-03-12 15:39:58.776+08 2020-03-12 15:39:58.776+08 e92738ba-66bf-4ec9-85c5-c1f2b4d7780e 3 \N
+dc8f2875-b635-4147-9a96-92b72ccadfef GPRS采集 \N 2020-03-13 15:41:34.941+08 2020-03-13 15:41:34.941+08 7f76a800-a32e-483a-a948-919fc9e7d075 3 \N
+27cc4200-3c65-481b-92b3-1d747cbef33b GPRS采集 \N 2020-03-13 15:46:07.549+08 2020-03-13 15:46:07.549+08 3aba791d-d6b2-4175-bb20-109f210f4065 3 \N
+f51d3996-cd2a-4ea0-9430-94c6f5b5268a GPRS \N 2020-03-13 17:42:56.778+08 2020-03-13 17:42:56.778+08 2ea1c0ff-9d04-4a29-addb-ceaf8b4c1744 3 \N
+974fa08a-e1e6-4e6b-b3ac-19e3863675aa GPRS采集 2020-03-18 14:12:05.061+08 2020-03-18 14:12:05.061+08 1e4fb0f1-79a1-4246-a85c-478b55f8df95 3 \N
+e5576d87-40b2-472c-88cc-78bedaddc163 采集 \N 2020-03-19 13:25:15.613+08 2020-03-19 13:26:13.613+08 00576fa4-94c0-4ef1-b26c-189142d5bdea 3 ab2d9b14-3cb2-4cde-9fce-ef4d57dd5002
+8a226009-de6a-448d-8fc8-1056e5a62c7c 数据上报 \N 2020-03-20 11:16:14.049+08 2020-03-20 11:16:14.049+08 1131f328-b9a1-4361-beae-547a1acb032d 3 \N
+9474176b-8d55-48c0-bd60-1bcfb6da0576 采集 \N 2020-03-23 13:05:37.714+08 2020-03-23 13:05:37.714+08 47de1028-1b35-4a17-b78e-f66178ecb4e6 3 \N
+01444399-9e03-4682-bb70-3b5137cd469e 采集 2020-03-23 16:30:30.302+08 2020-03-23 16:30:30.302+08 c730d30c-6a9d-4e3e-b347-7dfbe40a217d 3 65bb5b61-48eb-4c5a-aca4-ae21893336b5
+919db10d-5cbf-423f-ac9b-035d06ecf13b 采集 2020-03-23 17:25:41.995+08 2020-03-23 17:25:41.995+08 fd94699e-65db-45b8-bbe9-88c147ba1e0a 3 25647db7-386a-466c-b9a3-41ad27518265
+f58d1284-4cba-47d9-b2ff-2bfeeff62797 采集 2020-03-26 11:00:05.765+08 2020-03-26 11:01:07.185+08 b78fdf56-b70c-4c49-8734-67400e9a858a 3 38b8ea7c-27c3-4c8e-b667-80bd1f78d911
+a6d36e90-1e77-42f2-9d03-3852f9e5a9ed 微功耗 \N 2020-04-03 17:19:53.852+08 2020-04-03 17:20:04.159+08 ca2fe08c-b600-4472-8de2-3c549ea7d150 3 \N
+a868b3a8-85ed-4780-a0cf-9d0206e3cd58 采集 \N 2020-04-03 17:25:45.702+08 2020-04-03 17:31:33.069+08 ca2fe08c-b600-4472-8de2-3c549ea7d150 3 e5116002-4b68-4d33-b40f-4d08dc7c46b1
+8f9706bb-e71b-448c-b32d-4b4cfe420ddf 采集 2020-04-08 09:44:52.317+08 2020-04-08 09:44:52.317+08 12f885d6-8a49-4495-909e-8a938e23ec8b 3 3c318417-0111-4295-bd59-874a0a5a0cdc
+8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0 采集 2020-04-08 10:43:30.796+08 2020-04-08 10:43:30.796+08 a21dbc9a-38d2-4468-8149-8324e875fc8a 3 0d0916bd-221d-433b-8e40-ea4728310292
+b912ee89-771c-412b-b6f1-43fd55aa3743 云采集 \N 2020-04-08 14:13:21.709+08 2020-04-08 14:13:21.709+08 0796dca5-8068-4bc2-a73f-99160576a988 3 \N
+3d4528b4-3198-487f-9a4f-60b0b142f4fa 采集 \N 2020-04-08 14:18:11.335+08 2020-04-08 14:18:11.335+08 0796dca5-8068-4bc2-a73f-99160576a988 3 \N
+235e50cf-8332-4752-ad90-735b21a65636 采集 \N 2020-04-08 15:29:32.158+08 2020-04-08 15:29:32.158+08 c5a82ea8-374b-4efd-b9e9-716b216d8ee4 3 \N
+43f54168-c6b9-4a10-af52-08fea895afd5 云采集 \N 2020-04-08 15:30:15.656+08 2020-04-08 15:30:15.656+08 c5a82ea8-374b-4efd-b9e9-716b216d8ee4 3 \N
+ac9005d2-5ca6-44c7-a4c2-d9dc1b66738b Lora采集 \N 2020-04-08 15:30:30.778+08 2020-04-08 15:30:30.778+08 c5a82ea8-374b-4efd-b9e9-716b216d8ee4 3 \N
+ec4bef46-3f33-4abc-bc5a-fdd02804546e 采集 \N 2020-04-08 15:57:37.342+08 2020-04-08 15:57:37.342+08 385b0bd6-f460-40fc-9a65-78aaba84aaf3 3 \N
+facb0a36-aad1-464a-9e62-5982e7f96038 Lora采集 \N 2020-04-08 15:57:59.95+08 2020-04-08 15:57:59.95+08 385b0bd6-f460-40fc-9a65-78aaba84aaf3 3 \N
+22d12570-1067-4643-901f-035e0bedcd19 采集 \N 2020-04-08 16:12:37.536+08 2020-04-08 16:12:37.536+08 33215263-67ff-4ca8-9cec-d4c05068b412 3 2eae02f9-d98b-4ac9-b5a0-67f355eb62f4
+c118d176-8dae-46d2-af7a-637b0b4ad23f 采集 \N 2020-04-08 16:18:59.688+08 2020-04-08 16:18:59.688+08 f54c9b05-e722-4677-9e19-4fbbeeee0938 3 2eae02f9-d98b-4ac9-b5a0-67f355eb62f4
+ab5284c6-527b-497b-ad77-a59c41b4202f 采集 2020-04-08 16:23:51.255+08 2020-04-08 16:23:51.255+08 718d8823-39a8-40fd-b726-76fde0fd8094 3 2eae02f9-d98b-4ac9-b5a0-67f355eb62f4
+0070fd98-008a-4af5-b805-e81d23644df8 采集 2018-12-28 11:30:32.415+08 2018-12-28 11:30:32.415+08 21387f8b-b7bb-48c8-9972-7ff32e01f2fa 3 dd9d12d0-a0ee-44d4-9ba5-9887b1057881
+4a8364ac-890a-4260-b8d7-6e4ae7dcd4e3 采集 2018-12-28 11:30:33.808+08 2018-12-28 11:30:33.808+08 966cf4b9-f411-4764-bad3-2372cd867458 3 dd9d12d0-a0ee-44d4-9ba5-9887b1057881
+114001d1-f9ab-4564-b7e0-319e04d86a54 采集 2018-12-28 11:30:35.25+08 2018-12-28 11:30:35.25+08 10d33bab-421f-428f-b450-b5ee4b1c3465 3 dd9d12d0-a0ee-44d4-9ba5-9887b1057881
+a3e674eb-3100-4cd1-907c-b545482bce0d 采集 2020-04-01 09:55:29.071+08 2020-04-01 09:57:00.43+08 f070a6a5-406b-4567-ab70-0ba9cc204545 3 9830e7d2-be5b-4676-92da-cd5814982205
+2fedcbbc-d631-410f-9dbf-9868452b711e 云采集 \N 2020-04-08 15:58:15.741+08 2020-04-08 15:58:15.741+08 385b0bd6-f460-40fc-9a65-78aaba84aaf3 3 \N
+93a512ff-ed6a-423c-a66b-0a9c882a1f7c 采集 2020-04-08 16:36:50.888+08 2020-04-08 16:36:50.888+08 9699ac1e-3bc8-4a9a-960f-4c82cc2507ff 3 1d3ad5d8-27b3-4b70-ac2c-fbd67ddd48cf
+becc893e-7135-41ab-8e23-10257bd06437 采集 2019-01-04 15:34:26.878+08 2019-01-04 15:34:26.878+08 7efbc3e8-ff6b-433b-9041-c76b9df89644 3 \N
+df057647-e4af-4ddb-ba5b-4f9c56f48e1d 推送 2019-01-04 18:36:21.562+08 2019-01-04 18:36:21.562+08 f90616c7-29f8-4aa3-863b-c67c6ef4ec61 3 0548ebe4-a105-461a-80e5-ade045ca89f6
+b6fe084b-3bb8-4dcc-922d-b85d47f1149b 采集 2019-01-07 11:08:30.153+08 2019-01-07 11:08:30.153+08 f7257ee9-fbb6-4cd9-a622-3f3a5c3cff2e 3 6832b04d-9188-4104-99aa-7ed91c3c2391
+9b5b793a-5bfb-4693-9fd1-1d8a85b6e4a7 采集 2019-01-07 17:23:55.78+08 2019-01-07 17:23:55.78+08 1824bec3-15cd-498d-b2c1-b3cc804a1021 3 \N
+98c8c785-f229-4409-b2a6-a1e57af72b26 采集 2019-01-07 17:45:50.821+08 2019-01-07 17:45:50.821+08 a81c3314-06e2-428a-bede-88adf880bdd7 3 \N
+7406dcb2-9b68-42e3-9178-90ac77d39703 采集 2019-01-08 15:12:49.58+08 2019-01-08 15:12:49.58+08 a9f13e6b-82bb-4a59-82b7-cf52b91642a5 3 \N
+e3ba8196-3d34-4b50-9cd5-866ad57dae8e 采集 2019-01-08 16:04:57.716+08 2019-01-08 16:04:57.716+08 36f70703-df53-42ae-a8da-e001d8215fd8 3 9ad0fa84-5152-49ae-a277-01a96513528c
+742624bb-c14b-4b1d-90d8-bd54ef4520ba 采集 2019-01-14 11:53:46.528+08 2019-01-14 11:53:46.528+08 969043a0-c1f9-49c2-9f36-c029a03a9c87 3 e377b8e2-0507-407d-859a-64fbc0b4af19
+e37bdd04-f3eb-47f4-b174-70d573239a00 采集 2019-01-14 15:28:21.356+08 2019-01-14 15:28:21.356+08 ccfcd1c0-1cf5-4123-9be8-ca521b1e79d3 3 \N
+20e441d3-19e4-4f48-bf5a-36448db75de0 采集 2019-01-14 15:31:37.066+08 2019-01-14 15:31:37.066+08 a23e3c37-7ab4-4ed4-b73b-a791c96d596c 3 \N
+ae4b47fb-2d87-4fa5-84d9-72e1b5caa334 采集 2019-01-14 15:44:06.672+08 2019-01-14 15:44:06.672+08 a91dd10c-af61-4fcf-8294-1d200a035664 3 \N
+b3f37406-863d-441d-80af-d7f79747ca0f 采集 2019-01-14 15:47:03.726+08 2019-01-14 15:47:03.726+08 4eb4d7ed-2199-4514-9411-9c12d59f72e3 3 \N
+d9a190a8-343c-43a4-8ad3-2dc5ee25e283 采集 2019-01-14 15:48:47.007+08 2019-01-14 15:48:47.007+08 9db37a62-7896-4477-a3c4-7d317d28f26e 3 \N
+eed60769-7fe4-4bca-87ea-2de74bb2cd88 采集 2019-01-14 15:51:12.897+08 2019-01-14 15:51:12.897+08 3d8fcd19-8b2a-4d02-8dd3-de8e2c082dcc 3 \N
+b5064da1-895c-40e3-84db-b6330326f9c8 采集 \N 2019-01-14 16:35:40.03+08 2019-01-14 16:35:40.03+08 e996ef32-944e-448f-9370-862fd5ed719d 3 \N
+cf950c05-2642-444a-bda7-45be85b50ddc 采集 2019-01-18 16:57:11.301+08 2019-01-18 16:57:11.301+08 0794ccbd-2a6e-49b6-9b42-abf93957b33c 3 3dc26404-5272-4fbc-97f2-8493009c06ac
+b2d20518-3d22-4730-9121-735650110838 采集 2019-01-19 09:49:48.912+08 2019-01-19 09:49:48.912+08 53ff80a4-bf85-47bd-9351-ad8cbd0121e3 3 cc42ea9a-ff73-473a-8b2d-3b1da63c42c3
+e65346cf-f6d0-41a0-a1d9-e3644ea50971 采集 2019-01-19 09:53:06.271+08 2019-01-19 09:53:06.271+08 2b4affd1-2151-4632-b11a-e0176fee0a84 3 cc42ea9a-ff73-473a-8b2d-3b1da63c42c3
+c7d0b1b1-3264-4661-b682-0276be62ccdc 采集 2019-01-19 09:54:40.593+08 2019-01-19 09:54:40.593+08 75ff49e4-22d3-4777-a5a5-71f3a5fc4436 3 cc42ea9a-ff73-473a-8b2d-3b1da63c42c3
+6e13b5de-10cb-42f1-ac80-b2550d25a5ea 采集 2019-01-19 14:34:12.833+08 2019-01-19 14:34:12.833+08 9eef0ea4-1634-4d46-a9fb-6613a37b9431 3 d0816bbb-7afc-4139-a930-ba8f5267c76c
+d530a5b1-8f7a-49ae-b3c8-2f255589e6bf 采集 2019-01-19 14:35:13.518+08 2019-01-19 14:35:13.518+08 f5cf2b42-6efc-474b-aad5-f5614e5ec0d8 3 d0816bbb-7afc-4139-a930-ba8f5267c76c
+59eccaba-e3d8-4c03-a603-6bd46db0b0a6 推送 2019-01-19 15:00:28.915+08 2019-01-19 15:00:28.915+08 e1d537c6-2a5b-4b97-91ea-a2bd94093494 3 ee33724a-0cca-49c0-b8b0-e0b979eb6527
+47fbc1d7-872f-4e0d-b675-c7d51436f795 新采集 \N 2020-04-09 09:22:36.757+08 2020-04-09 09:22:36.757+08 f0443cf8-a24d-46f9-a894-7c731798736d 3 \N
+fd42cfd6-747c-4ac6-a35f-ad9e510fddbb 监听采集 2019-01-18 14:06:05.486+08 2019-02-13 09:47:57.992+08 61e3c33e-85cf-4894-9fc6-70fc3fd7a522 3 95265997-3ebd-4e01-98d9-9d5a2caa3a7f
+36882038-cdf2-4b13-ba96-4cc30aec58fd 新采集 \N 2020-04-09 09:29:04.014+08 2020-04-09 09:29:04.014+08 1ecb51e2-e759-45ef-9792-89f34bb715d0 3 \N
+4aaa9fb5-2119-4f7a-bd49-74a4c73e0e9b 采集 2019-01-19 17:15:44.54+08 2019-01-19 17:15:44.54+08 0a341896-3c5d-4e60-af19-fe5f645c6967 3 \N
+10e4ca9b-2ded-4704-af44-5ed38e7a8254 采集2 \N 2019-01-19 17:19:28.195+08 2019-01-19 17:19:28.195+08 0a341896-3c5d-4e60-af19-fe5f645c6967 3 a0c9fba8-70ea-4fc2-a16f-b308bbf77669
+4975a00d-a65f-4564-9e87-4d0e75b2b44a 微功耗 \N 2020-04-09 09:51:08.165+08 2020-04-09 09:51:08.165+08 369b29f9-7664-42c3-8510-7ad4c7b5bc06 3 \N
+3b90cfc3-9011-4dac-a197-db1f1224684d 微功耗 \N 2020-04-09 09:55:16.519+08 2020-04-09 09:55:16.519+08 a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62 3 \N
+0264aff4-ba22-40ca-9ef9-866e00e00fb8 采集 2019-01-22 09:31:07.199+08 2019-01-22 09:31:07.199+08 20b14a3c-9532-42df-b60c-baf4ba16865c 3 e7b120d0-2c54-4acf-b8c2-af18f962c558
+e850fe28-ee2e-40bd-a8fd-c02a63f4107d 采集 2019-01-22 15:15:43.195+08 2019-01-22 15:15:43.195+08 ff9746d5-839e-46dc-aae9-ec714680e041 3 03ba9b30-1d60-4da2-b9ff-1de9b514300c
+bb14be6f-ac60-4646-a8ce-c0e179c648d2 采集 2019-01-24 09:47:37.034+08 2019-01-24 09:47:37.034+08 17b4a482-830c-44e4-be09-1a9cac67c1e7 3 f6ebffcf-2f2a-41fa-a36b-d997b8584c39
+3ce74ad5-66e4-40b3-b5c0-52653cbbca87 采集 2019-01-24 11:51:28.172+08 2019-01-24 11:51:28.172+08 03f53a90-43a0-47d6-9183-edfb825a09e5 3 bcd22974-e902-4447-87c0-bfba8144410b
+62e44371-9cc5-43c5-b9b9-e5fbdc63dda3 采集 2019-01-25 16:07:25.623+08 2019-01-25 16:07:25.623+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 3 \N
+bb308c8a-f70a-4351-a6dc-aedf8612cceb 采集 2019-01-28 10:00:29.639+08 2019-01-28 10:00:29.639+08 a9f88745-32d0-4068-bcd3-6735e90b15a0 3 e99ff603-3675-43ae-a516-403cf3d1a1b1
+6e91a917-6930-48a9-8a2e-69cd0a42dfde 采集 2019-01-28 10:50:57.67+08 2019-01-28 10:50:57.67+08 d0fcad31-8656-4b67-9530-1519960defec 3 e4ffc96e-8398-498d-a5f3-d1ad11efc13d
+2a275bcf-4e3b-48ac-94a4-f7a77b45ab8b 采集 2019-01-29 10:56:26.787+08 2019-01-29 10:56:26.787+08 6020197b-abd9-4ef2-b674-0451a754fe68 3 fa427e87-1cdc-4ef4-95d5-4cf112506b12
+ed20720d-14e7-48f1-bf4e-da3ec2ac4c46 采集 2019-01-30 11:05:38.189+08 2019-01-30 11:05:38.189+08 9d3d4083-57c0-4067-b3e6-f9ebc2a7a6d5 3 dca382da-547a-400b-8fbb-3a1bbd32b33b
+85886b04-282a-40be-9b2c-8fe7aaf2d38a 采集 2019-01-31 11:35:16.837+08 2019-01-31 11:35:16.837+08 c9459443-e9d6-48eb-b37d-d25dfb8faaac 3 aa7da275-9e58-4b7e-8fe4-7abbcb421491
+33cf337b-b7b3-44f0-ba1c-a4394b8b357f 微功耗 \N 2020-04-09 09:59:58.168+08 2020-04-09 09:59:58.168+08 b8904c0e-1294-49f9-b0e9-dadd79c4efe4 3 \N
+c90eced6-4535-4b01-88a3-047c445cb5d6 数据同步 \N 2019-02-22 10:41:23.696+08 2019-02-22 10:41:23.696+08 b52fa83f-d3fd-4a8e-b9d5-76ea840aca15 3 6fc5be55-5544-4595-8414-95be244eb503
+35ec137a-ea04-4c81-bbaf-23ddae650c0e 采集 2019-01-04 15:34:26.888+08 2019-07-02 15:41:32.303+08 7efbc3e8-ff6b-433b-9041-c76b9df89644 3 597ac084-8a80-4f12-9a5b-73d7910331ff
+1956eecf-7103-4765-af34-27974b9f3e7c 采集 2018-11-22 14:43:45.889+08 2019-02-16 12:14:37.488+08 9d5905bc-0969-4032-ad57-69d6490fbc47 3 03ba9b30-1d60-4da2-b9ff-1de9b514300c
+a52e2352-c27a-4d80-85fd-aaf9967cc19f 微功耗 \N 2020-04-09 10:06:38.587+08 2020-04-09 10:06:38.587+08 bf5a92b7-59ab-429b-bce7-da858650205e 3 \N
+cce19766-fd89-4a5d-926f-50ede055ec49 下发 2019-02-21 17:19:51.494+08 2019-02-21 17:19:51.494+08 b52fa83f-d3fd-4a8e-b9d5-76ea840aca15 2 2d247587-8e44-41f5-b585-772822f1841e
+ec30262f-dc01-41c2-80a3-5602fa716888 配置同步 \N 2019-02-22 10:40:53.905+08 2019-02-22 10:40:53.905+08 b52fa83f-d3fd-4a8e-b9d5-76ea840aca15 2 feb25833-7419-4779-bfc8-809195843744
+ec2fd932-2dbe-45f2-a15b-0815ec8ff1b2 采集 2019-02-22 11:35:12.146+08 2019-02-22 11:35:12.146+08 d1b35088-9410-4203-924c-75b60634c7c6 3 \N
+254d4101-7301-4d4a-be79-29d0f7f616e3 下发连续采集指令 \N 2019-02-13 09:44:35.015+08 2019-04-20 17:24:55.769+08 61e3c33e-85cf-4894-9fc6-70fc3fd7a522 2 078cc06c-c4e7-4863-8a2a-7e080b162bf9
+738a6ad2-95f1-403a-94a1-8f641b2ab73f 采集 2019-02-22 11:35:40.178+08 2019-02-22 11:35:40.178+08 283a3cd5-8593-4b92-a528-bbd35a07b288 3 \N
+e956e4a1-49b3-46e3-b953-47c2c17a5098 采集 2019-02-22 13:27:41.882+08 2019-02-22 13:27:41.882+08 ef6476c9-709e-4afb-a4d9-57009ee3ecf5 3 \N
+7620b964-ee22-4e91-bae4-86f74ff0906f 采集 \N 2019-02-22 15:14:23.585+08 2019-12-05 09:45:18.208+08 2b04a6d8-4af7-428f-95c9-325800c4b59d 3 bdad7976-f666-4911-997a-031ebe9ccdf5
+b8f7deb8-c684-47d4-b8b0-a1d66615944c 采集 2019-02-22 13:35:17.63+08 2019-02-22 13:35:17.63+08 4068ff34-b211-4386-b274-0a6b12f35b59 3 \N
+64960998-d3e8-4ce1-857a-36e232a099c0 采集 2019-02-22 13:41:58.513+08 2019-02-22 13:41:58.513+08 6c6b5c79-b408-447c-b2b1-3ff7bf122a19 3 \N
+b1305d43-23de-4740-a7a2-213facc63133 采集 2019-02-22 13:44:23.968+08 2019-02-22 13:44:23.968+08 c70bf363-fc19-41f9-80df-27a231a1a2bd 3 \N
+4235259d-d5d3-4488-8f71-1f6ee7631fb4 指令下发 \N 2019-02-22 15:14:23.577+08 2019-10-16 14:50:46.089+08 2b04a6d8-4af7-428f-95c9-325800c4b59d 2 9a5c7ac8-776a-4dd5-a224-c083f94292e6
+9fb72bd5-827f-42b1-8c3f-9cd2b7bb9f4b 微功耗 \N 2020-04-09 10:11:06.271+08 2020-04-09 10:11:06.271+08 a97834b4-727b-42ad-9ce0-aede595a5727 3 \N
+f1b9e898-07e9-4182-9cf1-1cb52a4c7b0d 采集 2019-02-22 16:33:55.419+08 2019-02-22 16:33:55.419+08 b21b534c-d8f1-4caf-a405-1682a99dc1a9 3 \N
+f93bd5ed-fe1a-4d44-8efb-f98f381b7aa0 采集 2019-02-22 17:20:51.913+08 2019-02-22 17:20:51.913+08 dcac1d14-912a-4868-8be8-08d1e86d2fa5 3 f6ebffcf-2f2a-41fa-a36b-d997b8584c39
+3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09 采集 \N 2019-02-25 11:38:45.178+08 2019-02-25 11:38:45.178+08 ef68a37c-37fa-40d7-8537-dcbc64eaf1e1 3 06fa55b0-c96c-4704-8998-ffd96d4feaa2
+4b01a62e-4b72-477a-b628-3e60ab9eba3c 采集 2019-02-25 11:41:29.897+08 2019-02-25 11:41:29.897+08 a97834b4-727b-42ad-9ce0-aede595a5727 3 \N
+b0322703-c5a9-4310-a6b7-0311a4317136 云采集 \N 2019-02-25 11:41:29.934+08 2019-02-25 11:41:29.934+08 a97834b4-727b-42ad-9ce0-aede595a5727 3 \N
+8ea33ec2-98a7-487c-a662-18151711a0b4 Lora采集 \N 2019-02-25 11:41:29.968+08 2019-02-25 11:41:29.968+08 a97834b4-727b-42ad-9ce0-aede595a5727 3 \N
+d9cbcff2-8304-4233-80db-b582ae78540c 采集 2019-02-25 11:42:07.363+08 2019-02-25 11:42:07.363+08 bf5a92b7-59ab-429b-bce7-da858650205e 3 \N
+9d7f517c-090d-4a86-bde7-3e9b8fbfcf58 云采集 \N 2019-02-25 11:42:07.404+08 2019-02-25 11:42:07.404+08 bf5a92b7-59ab-429b-bce7-da858650205e 3 \N
+2c2cd567-6eef-4304-afc9-cc14b4435240 Lora采集 \N 2019-02-25 11:42:07.432+08 2019-02-25 11:42:07.432+08 bf5a92b7-59ab-429b-bce7-da858650205e 3 \N
+67a68865-ee21-4627-b68d-98ed991689ad 云采集 \N 2019-02-25 11:44:07.922+08 2019-02-25 11:44:07.922+08 b8904c0e-1294-49f9-b0e9-dadd79c4efe4 3 \N
+720eb976-fd1d-4947-845b-15b344e808f3 Lora采集 \N 2019-02-25 11:44:07.949+08 2019-02-25 11:44:07.949+08 b8904c0e-1294-49f9-b0e9-dadd79c4efe4 3 \N
+a5a87dd5-6735-4b0a-8526-b7185d9bc6f0 采集 2019-02-25 11:46:10.798+08 2019-02-25 11:46:10.798+08 a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62 3 \N
+cc7e3edd-3a03-43ec-961e-ddf5db3ec4f0 云采集 \N 2019-02-25 11:46:10.829+08 2019-02-25 11:46:10.829+08 a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62 3 \N
+aea9a199-17e2-4db3-97f7-2f38de50fb90 Lora采集 \N 2019-02-25 11:46:10.857+08 2019-02-25 11:46:10.857+08 a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62 3 \N
+772b1b1c-b174-40d7-9d03-4e6a6ee4fa2a 采集 2019-02-25 11:52:45.924+08 2019-02-25 11:52:45.924+08 369b29f9-7664-42c3-8510-7ad4c7b5bc06 3 \N
+033a35ac-34f5-4970-871a-394dedbb920e 云采集 \N 2019-02-25 11:52:45.965+08 2019-02-25 11:52:45.965+08 369b29f9-7664-42c3-8510-7ad4c7b5bc06 3 \N
+459695d2-69ab-4d25-8ea2-64c5b1884652 Lora采集 \N 2019-02-25 11:52:45.995+08 2019-02-25 11:52:45.995+08 369b29f9-7664-42c3-8510-7ad4c7b5bc06 3 \N
+4af15f4e-a452-4123-8c3f-17182b707f61 采集 2019-02-25 11:55:32.889+08 2019-02-25 11:55:32.889+08 ff97f842-4bf0-4384-b4b6-05a9783aa809 3 \N
+ad7457c8-1261-489f-a7d1-fba6ab6fd2cb 云采集 \N 2019-02-25 11:55:32.929+08 2019-02-25 11:55:32.929+08 ff97f842-4bf0-4384-b4b6-05a9783aa809 3 \N
+7c8d2cc9-631b-4ba3-81d4-30126181dc94 Lora采集 \N 2019-02-25 11:55:32.96+08 2019-02-25 11:55:32.96+08 ff97f842-4bf0-4384-b4b6-05a9783aa809 3 \N
+03afe194-fc01-4993-8f9a-ed4ca0ae6d90 采集 2019-02-25 13:30:26.996+08 2019-02-25 13:30:26.996+08 6e79c080-ecb3-4222-927e-f2dfcd85683a 3 \N
+0dc2011e-5962-4366-82dd-6a326e0ddbf6 云采集 \N 2019-02-25 13:30:27.023+08 2019-02-25 13:30:27.023+08 6e79c080-ecb3-4222-927e-f2dfcd85683a 3 \N
+b1acc286-422b-46a2-a2ea-4aa8c9b8256f 采集 2019-02-25 13:31:57.633+08 2019-02-25 13:31:57.633+08 9768653f-3bb0-4f60-9842-ed5df2685dc4 3 \N
+bb29ba88-ec03-44ab-ba29-00d98ccd9af1 云采集 \N 2019-02-25 13:31:57.668+08 2019-02-25 13:31:57.668+08 9768653f-3bb0-4f60-9842-ed5df2685dc4 3 \N
+4a1e5bbd-ab8a-48fa-8915-98f9fad2be80 采集 2019-02-25 13:32:42.887+08 2019-02-25 13:32:42.887+08 c952a71d-a917-40a7-aecc-cf2dc40c238a 3 \N
+666d6810-bfe4-47ca-93bd-fa60ced4252d 云采集 \N 2019-02-25 13:32:42.927+08 2019-02-25 13:32:42.927+08 c952a71d-a917-40a7-aecc-cf2dc40c238a 3 \N
+ba00fbe0-7fdf-49d0-81ec-84046c3c13d8 采集 2019-02-25 13:43:02.015+08 2019-02-25 13:43:02.015+08 30bfe302-d364-4325-be1f-7fef73afaf77 3 \N
+998641f1-bcc9-4b88-8155-68d0cdd22f67 云采集 \N 2019-02-25 13:43:02.183+08 2019-02-25 13:43:02.183+08 30bfe302-d364-4325-be1f-7fef73afaf77 3 \N
+c4126560-43a1-4c04-a7c2-182072c07e07 采集 2019-02-25 14:08:36.914+08 2019-02-25 14:08:36.914+08 2b835f19-8eba-46b3-b3aa-affc9b36dcd1 3 \N
+0cd9085e-abe2-4c04-9956-b0572ba81fa5 云采集 \N 2019-02-25 14:08:36.945+08 2019-02-25 14:08:36.945+08 2b835f19-8eba-46b3-b3aa-affc9b36dcd1 3 \N
+198c4f79-6642-4537-b774-bea491692a9e 云采集 \N 2019-02-25 14:10:58.951+08 2019-02-25 14:10:58.951+08 ac1d92e7-4587-48e7-84ce-c4cd8db40687 3 \N
+2a6ffd97-9937-4a41-b19d-9e8a1932c22a 采集 2019-02-25 14:10:58.992+08 2019-02-25 14:10:58.992+08 ac1d92e7-4587-48e7-84ce-c4cd8db40687 3 \N
+12671ad8-5da9-4695-abc5-8dc116c5f034 云采集 \N 2019-02-25 14:12:02.951+08 2019-02-25 14:12:02.951+08 35088e4d-f42e-4324-8237-bedb617ee489 3 \N
+f076544b-acde-440a-a44f-ff4468e3cdac 采集 2019-02-25 14:12:02.984+08 2019-02-25 14:12:02.984+08 35088e4d-f42e-4324-8237-bedb617ee489 3 \N
+cdf26baa-f8c9-435a-ace0-c2eff041d8c2 云采集 \N 2019-02-25 14:14:48.837+08 2019-02-25 14:14:48.837+08 1b0b94f1-5fde-428d-aa1c-242e8e024809 3 \N
+db70825c-6666-4931-b32b-5f372af95d42 采集 2019-02-25 14:14:48.883+08 2019-02-25 14:14:48.883+08 1b0b94f1-5fde-428d-aa1c-242e8e024809 3 \N
+2aa6ca91-f1d3-4716-adb1-f6248d68f0fd 云采集 \N 2019-02-25 14:16:02.465+08 2019-02-25 14:16:02.465+08 80342a8c-db6f-40e6-b331-0ae1eca53138 3 \N
+8c1c7ab8-d39f-4bdd-9a2c-d2d7342fce43 采集 2019-02-25 14:16:02.486+08 2019-02-25 14:16:02.486+08 80342a8c-db6f-40e6-b331-0ae1eca53138 3 \N
+af8ad166-474f-43bd-83c2-9f6082f78eae 云采集 \N 2019-02-25 14:17:43.261+08 2019-02-25 14:17:43.261+08 b345cafa-8d58-454f-a01e-e42859545b18 3 \N
+e96dc802-721b-4cf2-acc4-f3fb360feaef 采集 2019-02-25 14:17:43.289+08 2019-02-25 14:17:43.289+08 b345cafa-8d58-454f-a01e-e42859545b18 3 \N
+f98a9365-9230-47fd-82a1-9ba1f6908c8d 云采集 \N 2019-02-25 14:18:58.106+08 2019-02-25 14:18:58.106+08 536c5d54-6c47-4800-aecb-47219ee56fc2 3 \N
+6b2d0d75-954d-476d-a920-83a0439a898b 采集 2019-02-26 16:30:15.681+08 2019-02-26 16:30:15.681+08 88bd8ad3-6ffd-4b0f-8768-085e0e59d92e 3 \N
+7cad6a7a-e258-4ed6-aa59-e6b8095beaae 采集 2019-02-25 14:18:58.136+08 2019-02-25 14:18:58.136+08 536c5d54-6c47-4800-aecb-47219ee56fc2 3 \N
+0119f42c-7e17-4f77-81ed-3e55f31b8e61 微功耗采集 \N 2019-02-25 14:20:41.325+08 2019-02-25 14:20:41.325+08 1ecb51e2-e759-45ef-9792-89f34bb715d0 3 \N
+5b7ef632-3a0a-470c-848a-488e63e67023 采集 2019-02-25 14:20:41.363+08 2019-02-25 14:20:41.363+08 1ecb51e2-e759-45ef-9792-89f34bb715d0 3 \N
+b16d284f-8c22-4ef0-b6d1-1f0b10ead5fb 云采集 \N 2019-02-25 14:20:41.396+08 2019-02-25 14:20:41.396+08 1ecb51e2-e759-45ef-9792-89f34bb715d0 3 \N
+7169451f-4110-4ba2-8482-b6e4a51eb459 采集 2019-02-25 14:21:57.047+08 2019-02-25 14:21:57.047+08 d26842d0-7685-4eec-869d-160b023932b9 3 \N
+e2096ac1-6a10-4df5-9393-173d19fbbee0 微功耗 \N 2019-02-25 14:24:04.254+08 2019-02-25 14:24:04.254+08 f0443cf8-a24d-46f9-a894-7c731798736d 3 \N
+8b567669-1458-4b89-8448-257ca3ecb15c 云采集 \N 2019-02-25 14:24:04.28+08 2019-02-25 14:24:04.28+08 f0443cf8-a24d-46f9-a894-7c731798736d 3 \N
+63df0f39-75da-443e-a275-59ebd94aa3ea 采集 2019-02-25 14:24:04.307+08 2019-02-25 14:24:04.307+08 f0443cf8-a24d-46f9-a894-7c731798736d 3 \N
+1c56bfde-5866-450a-9682-65dd34bc3296 采集 2019-02-25 15:51:46.876+08 2019-02-25 15:51:46.876+08 18b82e73-7501-445f-a72c-a8e20cf9da40 3 \N
+7533c2be-930a-4296-bdea-f4093aabfeb1 云采集 \N 2019-02-25 15:51:46.911+08 2019-02-25 15:51:46.911+08 18b82e73-7501-445f-a72c-a8e20cf9da40 3 \N
+da212a69-66d5-4870-a4f5-c49da884d914 微功耗 \N 2020-04-09 11:50:56.601+08 2020-04-09 11:50:56.601+08 cf08e20c-2c85-4a1d-84a6-b773c3291124 3 \N
+bbd01f40-d430-4d85-95ec-e91a22fab396 云采集 \N 2019-02-25 14:21:56.99+08 2019-11-15 14:29:26.232+08 d26842d0-7685-4eec-869d-160b023932b9 3 \N
+80209593-8753-4642-bc14-5537e3223d75 微功耗采集 \N 2019-02-25 14:21:57.02+08 2019-11-15 14:29:41.08+08 d26842d0-7685-4eec-869d-160b023932b9 3 \N
+82b95b39-2e60-4eae-9c51-1977fc3b73e9 微功耗 \N 2020-04-13 13:29:57.626+08 2020-04-13 13:29:57.626+08 cbdb48d6-afd7-4322-884a-d37d56f96176 3 \N
+d39a1487-77c8-4310-88e9-e12ee46a79a7 采集 \N 复制一芯 2020-04-09 15:41:39.863+08 2020-04-09 15:43:59.523+08 939d26de-ea01-420a-95fb-9bb2398cb1c2 3 6f1a07b6-95d7-4f53-b373-fd5c75edb587
+6dfd1190-97ed-46dc-aca7-921af38cdf01 采集 \N 2020-04-09 16:26:13.16+08 2020-04-09 16:26:13.16+08 0b4561c4-31a6-4737-b593-18b2b1973850 3 \N
+8e1b795f-20a4-49c1-844a-6818b46743f2 新采集 \N 2020-04-09 16:47:43.468+08 2020-04-09 16:47:43.468+08 c169f72a-deae-4135-84ee-62d771722507 3 \N
+e905e3ce-b6ac-4237-9590-14ee97e867fe 新采集 \N 2020-04-09 16:53:13.494+08 2020-04-09 16:53:13.494+08 3d19a0b1-da48-466d-88d1-dc7c1f73bc68 3 \N
+7938b967-3298-4052-b8c2-d0fd4b57adb2 新采集 \N 2020-04-09 17:04:22.01+08 2020-04-09 17:04:22.01+08 18b82e73-7501-445f-a72c-a8e20cf9da40 3 \N
+44e109ee-d542-45f6-914e-6313d2ef5aee 新采集 \N 2020-04-09 17:07:54.158+08 2020-04-09 17:07:54.158+08 e7ed3509-511e-4c5d-8aec-3f331ec8defa 3 \N
+7b3502a3-1fd6-467c-b66f-221cc977bcda 新采集 \N 2020-04-09 17:17:37.089+08 2020-04-09 17:17:37.089+08 536c5d54-6c47-4800-aecb-47219ee56fc2 3 \N
+b51644b9-4159-40db-9599-8b080069cc65 新采集 \N 2020-04-09 17:22:39.434+08 2020-04-09 17:22:39.434+08 b345cafa-8d58-454f-a01e-e42859545b18 3 \N
+de345f11-6d4a-420b-963d-0bc26a7144f1 新采集 \N 2020-04-10 10:44:44.102+08 2020-04-10 10:44:44.102+08 0796dca5-8068-4bc2-a73f-99160576a988 3 \N
+22fd06d1-3028-481b-9025-f4fa0093bb6a 微功耗 2020-04-10 14:35:20.896+08 2020-04-10 14:35:20.896+08 854b696f-3001-4d7f-bffc-1e78e73b7d31 3 \N
+bd6fbf3d-b14f-4da0-bcfe-fec0c1afa863 采集 2020-04-10 14:35:20.882+08 2020-04-10 14:52:19.571+08 854b696f-3001-4d7f-bffc-1e78e73b7d31 3 f280eb1c-31e4-4c9e-94b7-1de7919c1855
+0c8d3e5c-4b72-4b7f-bc25-e0f20e899f0f 云采集 \N 2020-04-10 15:37:56.727+08 2020-04-10 15:37:56.727+08 854b696f-3001-4d7f-bffc-1e78e73b7d31 3 \N
+ce9b72cb-67fd-4117-b485-a9443b3409e9 新采集 \N 2020-04-10 17:03:36.545+08 2020-04-10 17:03:36.545+08 80342a8c-db6f-40e6-b331-0ae1eca53138 3 \N
+9aaf71fd-cc26-4738-86f0-f27fb8983581 新采集 \N 2020-04-10 17:04:48.155+08 2020-04-10 17:04:48.155+08 1b0b94f1-5fde-428d-aa1c-242e8e024809 3 \N
+e8d508fb-9ad6-4f72-bab4-552351765b49 新采集 \N 2020-04-10 17:10:11.914+08 2020-04-10 17:10:11.914+08 35088e4d-f42e-4324-8237-bedb617ee489 3 \N
+09173a38-657c-4584-97f6-d5fd984c6cef 新采集 \N 2020-04-13 08:47:00.96+08 2020-04-13 08:47:00.96+08 385b0bd6-f460-40fc-9a65-78aaba84aaf3 3 \N
+be4087dd-e776-49f6-a2a0-6ad64e530ac9 新采集 \N 2020-04-13 08:51:58.132+08 2020-04-13 08:51:58.132+08 c5a82ea8-374b-4efd-b9e9-716b216d8ee4 3 \N
+600fa9e0-1e6c-4c0f-b9df-2445d771d54f 新采集 \N 2020-04-13 08:58:10.829+08 2020-04-13 08:58:10.829+08 8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3 3 \N
+c3cf2a99-570b-480e-bd03-d4218a84382d 新采集 \N 2020-04-13 09:02:01.877+08 2020-04-13 09:02:01.877+08 998a52d3-f5ee-4d52-997f-1865b390e26b 3 \N
+bf5542b0-0eaf-48a7-acf5-359e608b19d0 云采集 \N 2020-04-13 10:59:41.674+08 2020-04-13 10:59:41.674+08 2f588726-18df-4ab2-b677-5c4479cef768 3 \N
+74d8243e-c93f-4694-b627-27150be13541 Lora \N 2020-04-13 11:00:52.488+08 2020-04-13 11:00:52.488+08 2f588726-18df-4ab2-b677-5c4479cef768 3 \N
+ed4d092d-260f-49cc-a985-176fd50d18c9 采集 \N 2020-04-13 11:00:37.572+08 2020-04-13 11:04:26.395+08 2f588726-18df-4ab2-b677-5c4479cef768 3 f280eb1c-31e4-4c9e-94b7-1de7919c1855
+ab916260-ed75-4e0b-8109-d9b164ac1f2c 新采集 \N 2020-04-13 11:27:00.942+08 2020-04-13 11:27:00.942+08 9bd34a2c-73d9-4615-af4b-1d61a6fc81bd 3 \N
+475ef4a4-f7ad-47ca-bf47-6c02061d73f8 新采集 \N 2020-04-13 11:30:42.551+08 2020-04-13 11:30:42.551+08 9bcce139-4a57-4c96-ba1f-914569011b77 3 \N
+8e6f0fd7-4b27-47b4-8e62-85c8302d8219 新采集 \N 2020-04-13 11:34:04.572+08 2020-04-13 11:34:04.572+08 04f55cdb-e98a-4dc9-b3fc-480a9a241a02 3 \N
+a31c164d-a581-4bda-8e94-7c41ab12cfa1 采集 \N 2020-04-13 11:48:21.296+08 2020-04-13 11:48:21.296+08 b3c05fb2-59b8-4bf7-b85d-7823a6781395 3 7fcae220-3a13-4230-947b-bb49d6b23b3d
+4b648fd9-37fe-4060-b04f-70c5e351b0a4 云采集 \N 2020-04-13 11:49:37.816+08 2020-04-13 11:49:37.816+08 b3c05fb2-59b8-4bf7-b85d-7823a6781395 3 \N
+ff32ae55-d999-4f10-b4fa-53ef0c69d6be 微功耗 \N 2020-04-13 11:49:49.985+08 2020-04-13 11:49:49.985+08 b3c05fb2-59b8-4bf7-b85d-7823a6781395 3 \N
+d7755dfe-3b58-4cd9-a3b1-1cce2f6cb34d 采集 \N 2020-04-13 13:06:47.912+08 2020-04-13 13:06:47.912+08 71c10138-4c73-4682-af9b-a904323eeac2 3 e5116002-4b68-4d33-b40f-4d08dc7c46b1
+1afc6939-be77-4cb0-b7a1-59ed529b9ee1 云采集 \N 2020-04-13 13:07:13.858+08 2020-04-13 13:07:13.858+08 71c10138-4c73-4682-af9b-a904323eeac2 3 \N
+933454ed-df7e-4ca3-950b-6faf23a1a5dc 微功耗 \N 2020-04-13 13:27:00.277+08 2020-04-13 13:27:00.277+08 9699ac1e-3bc8-4a9a-960f-4c82cc2507ff 3 \N
+6cf95499-c1da-478c-918c-bc809d89feb6 采集 2020-04-13 16:31:25.295+08 2020-04-13 16:34:42.625+08 0df31ce5-f6b4-4f95-a5f8-07c4ccc52346 3 00d10ef2-fbec-43f8-826a-f65d31a13e3d
+29b24211-38a9-4c77-9218-11d0c3939a5b 云采集 2020-04-13 16:42:59.123+08 2020-04-13 16:42:59.123+08 8fd9d375-1389-43b9-9423-654a4dd5af44 3 \N
+8aef8520-904e-46b6-9223-952b50c16f52 微功耗 2020-04-13 16:42:59.145+08 2020-04-13 16:42:59.145+08 8fd9d375-1389-43b9-9423-654a4dd5af44 3 \N
+b9a9f40b-2946-4b0f-abe7-10611a02fe1d 采集 2020-04-13 16:42:59.16+08 2020-04-13 16:45:01.106+08 8fd9d375-1389-43b9-9423-654a4dd5af44 3 eb847cf6-6311-40ea-85ff-6ad19edc36da
+05c7bb43-2fc0-4f0f-8be5-af5d4da3c75a 采集 \N 2020-04-13 17:26:55.021+08 2020-04-13 17:26:55.021+08 a81d1a62-5c7f-4c96-8abe-fe4a0bca5dcc 3 \N
+6084f264-aec5-4a6c-be5e-028c5139dfb8 新采集 \N 2020-04-14 09:39:59.45+08 2020-04-14 09:39:59.45+08 2b835f19-8eba-46b3-b3aa-affc9b36dcd1 3 \N
+cb22fb01-45b8-4e12-83cd-75fb5dcf585e 新采集 \N 2020-04-14 09:46:47.13+08 2020-04-14 09:46:47.13+08 30bfe302-d364-4325-be1f-7fef73afaf77 3 \N
+97be25b3-75df-4137-a479-22343213fe74 采集 2019-02-25 14:25:00.058+08 2019-02-25 14:25:00.058+08 3d19a0b1-da48-466d-88d1-dc7c1f73bc68 3 \N
+f2d80142-2f46-42d6-aa9e-c4e687c5690d 微功耗测试 \N 2019-02-25 14:25:00.105+08 2019-02-25 14:25:00.105+08 3d19a0b1-da48-466d-88d1-dc7c1f73bc68 3 \N
+49ff32ed-be50-4c87-ba73-af20b848e154 云采集 \N 2019-02-25 14:25:00.151+08 2019-02-25 14:25:00.151+08 3d19a0b1-da48-466d-88d1-dc7c1f73bc68 3 \N
+cf9f22ff-a972-4050-b4be-93cd43ed5463 采集 2019-02-26 16:47:57.174+08 2019-02-26 16:47:57.174+08 c809f621-a9ff-4922-aa0e-1bcadbfcb7e1 3 \N
+ad8e440e-0f52-4e43-95ed-97bed0575767 Lora \N 2020-04-09 11:51:13.812+08 2020-04-09 11:51:13.812+08 cf08e20c-2c85-4a1d-84a6-b773c3291124 3 \N
+8e1681a6-92f5-472c-a4dd-f40e16934f94 新采集 \N 2020-04-09 16:26:24.243+08 2020-04-09 16:26:24.243+08 0b4561c4-31a6-4737-b593-18b2b1973850 3 \N
+bef72760-da7f-4b64-a389-b3040de2ded3 Lora \N 2020-04-10 15:38:12.116+08 2020-04-10 15:38:12.116+08 854b696f-3001-4d7f-bffc-1e78e73b7d31 3 \N
+f018487f-55ee-4fc2-b204-738cde478d4b 新采集 \N 2020-04-10 17:13:02.98+08 2020-04-10 17:13:02.98+08 ac1d92e7-4587-48e7-84ce-c4cd8db40687 3 \N
+0bf1ab3a-44c3-44d5-bcec-83c1507080c9 微功耗 \N 2020-04-13 11:00:04.933+08 2020-04-13 11:00:04.933+08 2f588726-18df-4ab2-b677-5c4479cef768 3 \N
+48c0716a-ffe7-4de2-b5d6-295ebd1bef98 微功耗 \N 2020-04-13 13:07:33.75+08 2020-04-13 13:07:33.75+08 71c10138-4c73-4682-af9b-a904323eeac2 3 \N
+0928966d-ed3a-4cab-9e1b-32af22f5f89b 新采集 \N 2020-04-14 10:12:44.81+08 2020-04-14 10:12:44.81+08 c952a71d-a917-40a7-aecc-cf2dc40c238a 3 \N
+c7bcd7ca-9e17-41e1-b3e4-39641d53a443 采集 2019-02-25 15:39:43.19+08 2019-02-25 15:39:43.19+08 04f55cdb-e98a-4dc9-b3fc-480a9a241a02 3 \N
+70454576-c9f8-4b8b-82a5-2ba414369cf1 云采集 \N 2019-02-25 15:39:43.22+08 2019-02-25 15:39:43.22+08 04f55cdb-e98a-4dc9-b3fc-480a9a241a02 3 \N
+fc002308-8f49-4bde-a539-028bc4a00d6d Lora采集 \N 2019-02-25 15:39:43.245+08 2019-02-25 15:39:43.245+08 04f55cdb-e98a-4dc9-b3fc-480a9a241a02 3 \N
+89297513-df93-40a4-bfb4-cc2393d5128a 云采集 \N 2019-02-25 15:41:07.342+08 2019-02-25 15:41:07.342+08 c169f72a-deae-4135-84ee-62d771722507 3 \N
+45284d89-2621-47e3-b5ee-e03229611e89 采集 2019-02-25 15:41:59.73+08 2019-02-25 15:41:59.73+08 9bcce139-4a57-4c96-ba1f-914569011b77 3 \N
+aa350be5-e923-4961-b523-fd25c5e8445f 云采集 \N 2019-02-25 15:41:59.774+08 2019-02-25 15:41:59.774+08 9bcce139-4a57-4c96-ba1f-914569011b77 3 \N
+cdc89f99-96ab-4176-a290-0cd507439722 Lora采集 \N 2019-02-25 15:41:59.809+08 2019-02-25 15:41:59.809+08 9bcce139-4a57-4c96-ba1f-914569011b77 3 \N
+2fc50d79-7cc8-477d-ad02-7c457e527084 采集 2019-02-25 15:43:06.982+08 2019-02-25 15:43:06.982+08 9bd34a2c-73d9-4615-af4b-1d61a6fc81bd 3 \N
+fe7497bd-7016-4a8c-abf8-23ec8981746c 云采集 \N 2019-02-25 15:43:07.012+08 2019-02-25 15:43:07.012+08 9bd34a2c-73d9-4615-af4b-1d61a6fc81bd 3 \N
+b62a52ce-bcd3-4156-89d7-83ab453c3121 Lora采集 \N 2019-02-25 15:43:07.033+08 2019-02-25 15:43:07.033+08 9bd34a2c-73d9-4615-af4b-1d61a6fc81bd 3 \N
+6db67d93-daa9-4ef0-840f-c89dfc62abdc 采集 2019-02-25 15:44:37.105+08 2019-02-25 15:44:37.105+08 998a52d3-f5ee-4d52-997f-1865b390e26b 3 \N
+aab98040-a906-4f79-a6df-74df5b9849bc 云采集 \N 2019-02-25 15:44:37.139+08 2019-02-25 15:44:37.139+08 998a52d3-f5ee-4d52-997f-1865b390e26b 3 \N
+0518af3d-a054-45a0-815a-8ed6c3833d46 Lora采集 \N 2019-02-25 15:44:37.169+08 2019-02-25 15:44:37.169+08 998a52d3-f5ee-4d52-997f-1865b390e26b 3 \N
+99d5cbb6-441e-4909-8ab1-f5fd36fb9f42 采集 2019-02-25 15:46:09.576+08 2019-02-25 15:46:09.576+08 a62aba76-29bb-43b8-a1fe-2dff7c77ecb8 3 \N
+f832c684-9c7c-484e-b547-a4b717644f8a 微功耗测试 \N 2019-02-25 15:46:09.609+08 2019-02-25 15:46:09.609+08 a62aba76-29bb-43b8-a1fe-2dff7c77ecb8 3 \N
+fbaf320c-de3d-4cdb-93f1-960973d87747 云采集 \N 2019-02-25 15:46:09.645+08 2019-02-25 15:46:09.645+08 a62aba76-29bb-43b8-a1fe-2dff7c77ecb8 3 \N
+d87ea357-e29f-4926-8589-a3e8d7f38ca2 采集 2019-02-25 15:46:53.776+08 2019-02-25 15:46:53.776+08 8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3 3 \N
+8b2b42d5-d6c3-4b76-ba91-d422163d96b6 云采集 \N 2019-02-25 15:46:53.798+08 2019-02-25 15:46:53.798+08 8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3 3 \N
+88b4c158-2959-46c0-950e-aa1f77962dbc Lora采集 \N 2019-02-25 15:46:53.828+08 2019-02-25 15:46:53.828+08 8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3 3 \N
+87e561ee-2bde-476f-9d3c-193c5be9f692 采集 2019-02-25 15:47:53.719+08 2019-02-25 15:47:53.719+08 e7ed3509-511e-4c5d-8aec-3f331ec8defa 3 \N
+f4d6d7aa-f0b7-4b93-b291-5fb8305a4318 云采集 \N 2019-02-25 15:47:53.75+08 2019-02-25 15:47:53.75+08 e7ed3509-511e-4c5d-8aec-3f331ec8defa 3 \N
+f8e59d17-39f9-4805-895b-be09de939091 采集 \N 2020-04-09 11:51:32.142+08 2020-04-09 11:51:49.068+08 cf08e20c-2c85-4a1d-84a6-b773c3291124 3 e5116002-4b68-4d33-b40f-4d08dc7c46b1
+62e931ef-494f-487d-b32d-d4025cfccc5b 新采集 \N 2020-04-09 16:43:40.913+08 2020-04-09 16:43:40.913+08 a62aba76-29bb-43b8-a1fe-2dff7c77ecb8 3 \N
+002dd588-51a7-417d-9986-71cdcdc4b0b4 Lora \N 2020-04-13 13:07:48.143+08 2020-04-13 13:07:48.143+08 71c10138-4c73-4682-af9b-a904323eeac2 3 \N
+fbafe139-6003-4dff-a59a-bf51b0d5ce75 新采集 \N 2020-04-14 10:17:16.432+08 2020-04-14 10:17:16.432+08 9768653f-3bb0-4f60-9842-ed5df2685dc4 3 \N
+886912b7-fff8-4aff-84f4-04c043946eb0 采集 \N 2020-04-14 10:33:18.979+08 2020-04-14 10:33:18.979+08 2b960cb5-8b22-4a35-b811-2a74b8f47196 3 \N
+17324dd0-1385-4d70-92fc-49d595c88ed8 采集 \N 2020-04-14 10:39:52.925+08 2020-04-14 10:39:52.925+08 2e98107c-2635-43a9-a89f-872152bac901 3 \N
+b350cfa3-4960-4e96-ae63-0e0ab3319c29 采集 \N 2020-04-14 10:45:03.16+08 2020-04-14 10:45:03.16+08 2de0b18f-a13a-48a9-8e34-6bfeff609972 3 \N
+ba9214a7-0d02-453f-ae49-912a45fd027f 采集 \N 2019-02-25 15:41:07.26+08 2020-08-17 14:07:48.147+08 c169f72a-deae-4135-84ee-62d771722507 3 \N
+bdcdab4d-62d5-48d2-9a07-cd61a9cc108a 微功耗测试 2019-02-25 15:41:07.307+08 2020-08-17 14:08:13.504+08 c169f72a-deae-4135-84ee-62d771722507 3 \N
+87fb5477-8056-44e6-b0a0-5cb1e55703d8 云采集 \N 2019-02-25 17:37:04.277+08 2020-04-05 14:13:19.301+08 145c9d4f-4fc0-4441-a8c4-0f32b15f5018 3 \N
+9a7d0b50-af38-4c47-b314-4dbca09f5ad2 采集 2019-02-25 16:03:31.5+08 2019-02-25 16:03:31.5+08 f7cf6cc3-3067-42c4-8d9d-85df26882451 3 \N
+e78b12fc-fda1-4ce1-81a7-9e63695906ec 采集 2019-02-25 16:10:34.019+08 2019-02-25 16:10:34.019+08 934104cb-a134-4796-9c3d-52f0e8266fa3 3 f2ec840a-2e0c-4178-91e8-8b5b44009561
+1b1a6da7-1ad4-4afe-b61d-321cff8c222c 采集 modbus振弦采集仪 2019-02-25 16:01:22.948+08 2019-02-25 16:49:51.872+08 3c72a231-83a6-4d92-88d3-d58e0660cef9 3 2eae02f9-d98b-4ac9-b5a0-67f355eb62f4
+ba31efb5-9309-493e-a3b6-e161c92e9dfa 采集 2019-02-25 17:37:04.245+08 2019-02-25 17:37:04.245+08 145c9d4f-4fc0-4441-a8c4-0f32b15f5018 3 7c734114-6fa7-41a5-8f0c-ce0940aded18
+6ed5b377-588a-4ba0-bbd8-f528726aa520 采集 \N 2019-02-25 17:37:56.405+08 2019-02-25 17:37:56.405+08 f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4 3 a45d8866-5e4f-48fc-a646-8462d4a516a6
+fdd035c2-82b6-4d53-b138-ddb5ff38be70 云采集 \N 2019-02-25 17:37:56.437+08 2019-02-25 17:37:56.437+08 f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4 3 \N
+3b999acc-dc02-4c57-ba1b-2bdd8d971f72 微功耗 \N 2019-02-25 17:37:56.463+08 2019-02-25 17:37:56.463+08 f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4 3 \N
+c38c3226-0d4b-4f1e-ada0-0ba10c51d5e1 采集 2019-02-26 16:29:15.924+08 2019-02-26 16:29:15.924+08 7ac67279-f72c-4296-ba27-9b03b8c07c05 3 \N
+a945f27e-4486-498d-aa7b-2226787e0a8c 采集 2019-02-26 16:39:23.426+08 2019-02-26 16:39:23.426+08 a504d969-ffb0-42c6-9edd-529d1d61a77c 3 \N
+9081728a-4ac0-47d0-bc7d-508451fd55df 采集 2019-03-04 11:20:58.187+08 2019-03-04 11:20:58.187+08 7128744b-0a8b-463f-b231-40f8862cba87 3 e7ef3612-fa92-4001-848c-57da35f5af77
+d28c3b83-f55a-4a81-8513-36abc92c3b7b 采集 2019-03-05 13:25:13.305+08 2019-03-05 13:25:13.305+08 49b8d21c-3486-496b-b17b-ccf195aaeb65 3 \N
+403c6c8b-f94a-43a2-bbf5-5146ac46c2c0 采集 2019-03-05 13:33:36.266+08 2019-03-05 13:33:36.266+08 9ea89d82-49ea-480a-a90a-0b99290db919 3 \N
+bbfe7c35-6457-4e4f-87d0-fec36f73c28b 采集 2019-03-05 13:35:31.071+08 2019-03-05 13:35:31.071+08 06f5aa07-d8ae-4621-9db2-278fb653ddcd 3 \N
+719b1f89-ba16-4e07-bcb6-f3914f8e0aca 云采集 \N 2020-04-09 11:52:17.552+08 2020-04-09 11:52:17.552+08 cf08e20c-2c85-4a1d-84a6-b773c3291124 3 \N
+dd63a0aa-71f9-4a32-9b10-0cce05dfc818 Ang_Y 2019-03-19 15:25:07.084+08 2019-03-19 15:25:07.084+08 cbd0eeaa-e06e-4933-9394-86c48eacae95 3 \N
+7fe724a3-9e75-4cdf-94e3-bdd7451ff05c Lora \N 2019-02-25 17:37:04.326+08 2020-04-05 14:13:59.988+08 145c9d4f-4fc0-4441-a8c4-0f32b15f5018 3 \N
+0593d534-af19-4662-bf37-b3393cd7d706 微功耗 \N 2019-02-25 17:37:04.303+08 2020-04-05 14:14:10.182+08 145c9d4f-4fc0-4441-a8c4-0f32b15f5018 3 \N
+77be95d2-b89a-48b1-a68d-8af8d86899b4 采集 \N 2019-03-06 10:43:47.023+08 2019-03-06 10:43:47.023+08 3b7ca159-32d0-4c74-8f84-591774636dc5 3 28d1a5bb-346e-4a5e-8854-a0c47f8357b7
+afa1f203-3267-41dd-9442-974317e28ac3 下发 \N 2019-03-05 15:11:48.091+08 2019-03-08 16:51:58.637+08 a820a6a6-2302-4291-bf8a-e6beb3e7f663 2 ff261e2f-e34f-4f1c-933a-aec8cac3b02f
+1d7d6e9a-1f9e-4d68-9b49-d09ac6a22064 采集 2019-03-08 17:17:40.598+08 2019-03-08 17:17:40.598+08 fde20cf0-6bb6-4987-8830-dec5aa5874f2 3 b45287f0-ebb9-4479-8090-b85009e199f0
+2e73374e-14c1-47d9-a0ce-f6d05b317930 采集 2019-03-12 09:49:51.415+08 2019-03-12 09:49:51.415+08 7f8fac16-3dbd-4d0a-bf38-322c5818e096 3 64b4bff2-0b22-4b07-b732-9a80e5a5f8f9
+935629d5-3f9e-4001-8694-cd11f39b6061 采集 2019-03-14 11:21:14.953+08 2019-03-14 11:21:14.953+08 9aa975c7-a3d4-42ec-a384-17d0425e602a 3 f6f903f9-bd32-4fa0-9305-074458402bd5
+0551369c-3cb4-4613-96cd-f9677b1c6662 采集 \N 2019-03-15 11:37:24.338+08 2019-03-15 13:54:18.054+08 2f25fa6f-a99e-440e-ac0a-29ada5069d4f 3 333f9eaa-379c-4293-a159-a26f133e42be
+d4af9993-5dc1-4f66-bc37-fd3ab9458c18 采集 2019-03-15 14:35:35.87+08 2019-03-15 14:35:35.87+08 df22cddf-5a50-41f7-980a-0bbef6aeb763 3 \N
+2bf1019d-5976-4ecf-9970-773d334f184d 采集 2019-03-15 14:36:32.765+08 2019-03-15 14:36:32.765+08 ce1e7a12-8f26-4f77-8610-4871a40cfe98 3 \N
+895b9731-8518-47fc-b126-37124415845f 一体化 \N 2019-03-15 16:36:12.139+08 2019-03-15 16:36:12.139+08 5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed 3 \N
+5a900cd1-fd3e-439c-b765-9829c9a61d32 一体化 \N 2019-03-15 16:40:25.018+08 2019-03-15 16:40:25.018+08 771be2fa-a2f9-4ba8-8c08-76b091627b87 3 \N
+46d29a93-ef1e-4724-a19b-8693518dfc89 一体化 \N 2019-03-15 16:44:01.37+08 2019-03-15 16:44:01.37+08 d32eacce-7db0-4c15-b17c-f1d870389c14 3 \N
+dd73a8bf-daac-40fc-82c3-bb5caad67d03 一体化 2019-03-15 17:00:45.46+08 2019-03-15 17:00:45.46+08 ad1ce5b5-24d5-4aa3-9125-bbb25ea24069 3 \N
+abffe5ee-8ad1-41b8-95f2-70a6d52220db 云采集 \N 2020-04-14 10:33:35.171+08 2020-04-14 10:33:35.171+08 2b960cb5-8b22-4a35-b811-2a74b8f47196 3 \N
+9c9a0091-2f1b-4c1d-8b7c-ff60c41fca6f 云采集 \N 2020-04-14 10:40:07.781+08 2020-04-14 10:40:07.781+08 2e98107c-2635-43a9-a89f-872152bac901 3 \N
+f331e32f-da35-4df4-80fe-50f681800a26 temp 2019-03-19 15:25:06.976+08 2019-03-19 15:25:06.976+08 cbd0eeaa-e06e-4933-9394-86c48eacae95 3 \N
+856b0c3e-b6db-4332-93b2-88d4bc0e019f Ang_X 2019-03-19 15:25:07.066+08 2019-03-19 15:25:07.066+08 cbd0eeaa-e06e-4933-9394-86c48eacae95 3 \N
+43846e9c-36d2-4aad-a9ed-cc837fecec96 temp 2019-03-19 15:25:15.743+08 2019-03-19 15:25:15.743+08 4ff02b0c-e9de-4687-90b5-0e723ab835fe 3 \N
+5c3255a3-17a0-4ff5-8704-351d606c322f Ang_X 2019-03-19 15:25:15.777+08 2019-03-19 15:25:15.777+08 4ff02b0c-e9de-4687-90b5-0e723ab835fe 3 \N
+09b8a9bb-2979-488d-9ada-612e0e3c8104 Ang_Y 2019-03-19 15:25:15.786+08 2019-03-19 15:25:15.786+08 4ff02b0c-e9de-4687-90b5-0e723ab835fe 3 \N
+c05079d4-2c90-4409-aca1-0693e27d413e 采集 2019-03-19 16:45:17.828+08 2019-03-19 16:45:17.828+08 e4a7eb69-0c5d-4b87-b1af-913b0220dea2 3 \N
+65be7317-93f4-4ae2-b211-e72d15a8cdb7 采集 2019-03-20 15:26:27.806+08 2019-03-20 15:27:52.941+08 18900e9a-1828-4d26-8966-51c1e5ebfa26 3 39322bd3-88ca-4203-8db7-60c93698aeb0
+31506359-c8d3-4562-94bb-8a26912ecbdf 采集 2019-03-20 21:36:52.94+08 2019-03-20 21:36:52.94+08 fc817231-7e3d-4952-b912-0855d2e90545 3 \N
+e80c3c1c-ca28-40d5-ab2e-705980583fb8 采集 2019-03-22 10:33:16.438+08 2019-03-22 10:33:16.438+08 954dabda-7fd8-456d-8d9a-bc7058d4e8ad 3 00fa01a7-10b5-4908-ac97-d08ded49b59d
+02db4ff9-b55f-459b-8d70-39b8421b3879 开关门 \N 2019-03-22 14:21:25.564+08 2019-03-22 16:00:56.132+08 9aa975c7-a3d4-42ec-a384-17d0425e602a 2 cc122ffc-2080-4bde-a20b-d8b14c47e413
+293fd074-905f-4d2a-94d2-a28d4b06397c 采集 2019-03-25 11:18:25.746+08 2019-03-25 11:18:25.746+08 2cea756f-0ed5-406d-88a5-b2c3b6ad9b6d 3 \N
+b131fb3f-83d4-4855-9b8c-419201f620ac 采集 2019-03-25 11:24:21.016+08 2019-03-25 11:24:21.016+08 3feb218e-5b82-496a-9f57-71be58552c0d 3 \N
+b76eb9ae-1b5a-4bce-91a7-93b68845f356 采集 2019-03-25 11:32:57.582+08 2019-03-25 11:32:57.582+08 765f6712-b911-4681-9d31-ce9ee3a45702 3 \N
+9c250481-ece6-48ba-a91e-5d057fdb9d5d 采集 2019-03-27 09:42:22.618+08 2019-03-27 09:42:22.618+08 360a9975-3171-4f12-b47a-6f57bdf76dfe 3 c93d239c-120b-4078-9b3e-4b0d80f6707c
+77edb521-5462-437e-acdb-8ca54f858468 采集 2019-03-27 09:45:06.498+08 2019-03-27 09:45:06.498+08 248ab293-5e7c-41e5-835a-2978782081de 3 \N
+9842fe65-98a7-4396-9ced-fd75761872b7 采集 2019-03-27 10:17:10.461+08 2019-03-27 10:17:10.461+08 c3eaf904-6808-4fde-a795-474b0128fe5f 3 \N
+907b9fd5-a808-4f6e-acfb-f212bf6cf6b3 设备1 2019-03-19 10:11:54.29+08 2019-03-19 10:11:54.29+08 f2d1cabf-7888-4be1-9357-bf5052e5772c 3 \N
+92438dc5-877a-4bef-9261-a651bc3439ac 采集 2019-03-15 16:27:38.707+08 2019-09-06 11:16:52.009+08 848b15cb-6357-48eb-979d-a6398d05bd8c 3 d6558744-85f3-42ee-8d1c-07aa74f60036
+7d31224f-522e-4f6b-89f0-4802c150f9d7 采集 2019-03-27 10:19:53.297+08 2019-03-27 10:19:53.297+08 00e79982-c3d7-4bef-a27d-050dc08eaf82 3 \N
+bad3bab6-cba0-402c-bcde-5fbffacfa1a8 采集 2019-03-27 10:22:14.198+08 2019-03-27 10:22:14.198+08 6d7ee2b6-ee61-4933-9f14-9378592187da 3 \N
+ad7876d0-0ff2-4d4c-b4be-aaeac8dbbba7 采集 2019-03-27 16:22:34.482+08 2019-03-27 16:22:34.482+08 8ebd65bb-633a-43d4-880a-d916b11067ba 3 5afcddd3-ab1d-4054-a530-478860d650ec
+9df88715-b993-46e1-bace-b79b1f787292 采集 2019-03-28 10:30:24.026+08 2019-03-28 10:30:24.026+08 9078888c-628e-4b91-94f8-caaedcc9b640 3 e9efde3c-7a62-4df8-b112-22384afc7c24
+fe876237-b07a-4583-befe-1013275d47de 采集 温度 2019-03-29 17:37:11.129+08 2019-03-29 17:37:11.129+08 e6ddf9e3-cda3-4fcf-975a-a7b4f14a0a34 3 e9efde3c-7a62-4df8-b112-22384afc7c24
+b31b24f1-a018-47bb-9046-c022d26cd6c7 采集 2019-03-31 14:16:47.795+08 2019-03-31 14:16:47.795+08 bb3ec092-4644-42eb-93ba-f9ae9b4b6601 3 2f0ce240-e503-4e31-8460-e1b29564c31c
+52790293-e9cb-482d-a5a4-a437cfc18b3c 控制 压力变送器 2019-04-01 14:38:39.923+08 2019-04-01 14:38:39.923+08 3aef6480-e9f6-4b07-8ee4-dc0516520d72 2 17314a0b-eb69-402e-9907-19db709a84ea
+2054c2dc-9c63-4fc3-ab32-be0da644efea 监控 静力水准仪 2019-04-01 15:38:01.395+08 2019-04-01 15:38:01.395+08 936ee644-5ea7-4d64-98d7-ff52cc50e113 2 8f7fdf16-7f6e-4bc7-8e4c-bd964a4a02ed
+5c6b51d6-d002-49af-9496-30fc8976c446 采集 2019-04-03 16:53:56.866+08 2019-04-03 16:53:56.866+08 db04dc7e-6a55-4050-92a8-c1a6e5c0dc9c 3 \N
+39d7c8a8-3ab0-4d56-95b4-3cb6c06cfd9c 采集 2019-04-03 14:48:59.289+08 2019-04-03 17:33:06.454+08 53efa30f-f738-43ef-9600-0963b6b108fd 3 c697ae48-746d-44c4-9b53-03b49de402c1
+37826374-2db9-4f16-a42d-37ee9f59c3ac 控制 振动 测斜 2019-04-10 18:28:39.217+08 2019-04-10 18:28:39.217+08 74d6fefc-59a0-42a8-bd3e-aff394533e06 2 \N
+c437942e-6dd8-468c-81d0-ffed012878bd 文件 2019-04-18 17:58:14.56+08 2019-04-18 17:58:14.56+08 6bc95aa6-88cd-4473-98fc-7f4a1d76fc4a 3 \N
+6ae6a109-549d-4832-b00c-b2fdd8a5a165 采集 2019-04-04 11:32:30.415+08 2019-04-04 11:32:30.415+08 cecf35d0-533a-45cd-b740-42f93c4f3df2 3 f4443305-4848-4a3e-b1bc-f5ad10a87518
+016e4acd-bbed-4409-aa4d-4e410d67f9ec 下发 \N 2019-04-04 11:32:30.468+08 2019-04-04 11:32:30.468+08 cecf35d0-533a-45cd-b740-42f93c4f3df2 2 ff261e2f-e34f-4f1c-933a-aec8cac3b02f
+836707a8-5a16-4674-9609-c13f9f0956ff 采集 2019-04-08 11:04:20.113+08 2019-04-08 11:04:20.113+08 b73a2e67-7654-49ce-890a-7c2dfec89a03 3 \N
+edbb1563-c4ba-4090-9180-17cec3ec3ac3 采集 2019-04-08 10:06:51.207+08 2019-04-08 13:46:26.674+08 7f81d1d0-150c-49d4-9b52-4eda0387c996 3 af3b3292-072e-4839-aa5b-0096cd1b9249
+9bc088e5-638b-4304-8130-ee18b2580bd8 读取 \N 2019-04-08 14:49:04.685+08 2019-04-08 14:49:04.685+08 a820a6a6-2302-4291-bf8a-e6beb3e7f663 2 fb7d7130-3184-44ab-ba19-2cb664dc102d
+e44e3794-75ca-4e19-b989-396cabdff179 采集 2019-04-10 15:48:52.501+08 2019-04-10 15:48:52.501+08 420a7807-dc95-4fe3-bfff-fd1db144ed8e 3 \N
+8103cab6-bf6c-489b-af09-1ba2a278042b 采集 2019-04-10 15:48:53.417+08 2019-04-10 15:48:53.417+08 87bb0352-924e-440f-abb0-2a42797d0eb0 3 \N
+73b4f51d-68e2-4fb4-a8a9-162f643d1983 采集 2019-04-16 09:09:09.725+08 2019-04-16 09:09:09.725+08 3027f2cf-70b8-4ff6-92ee-7432a8b26887 3 \N
+7cc4cc34-60a4-4ff0-a85e-015a11eadeac 采集 2019-04-16 09:11:47.992+08 2019-04-16 09:11:47.992+08 9922afa7-509c-4ee2-8cfa-094233cf6eb1 3 \N
+cb1ad06a-023a-46da-a674-80b18513c1e4 采集 2019-04-16 09:50:05.907+08 2019-04-16 09:50:05.907+08 82e60098-d956-499c-97c8-810ba64a8589 3 \N
+98161e10-b23b-4448-a389-0bd8a08fec4f 采集 2019-04-16 09:52:28.874+08 2019-04-16 09:52:28.874+08 85e05ea0-94ca-4806-9393-78780b771a4b 3 \N
+51de3079-41a4-4b3b-9e3b-4d9bfb13fef8 采集 2019-04-16 10:59:31.909+08 2019-04-16 11:02:08.109+08 752edd7f-ca25-4a19-bf4a-53a700f2556a 3 fcd2a682-7043-468e-a5a4-69a4def56b94
+d4965875-354b-4294-87f4-c4ba9f9260ab 采集 2019-04-17 15:07:58.436+08 2019-04-17 15:07:58.436+08 1649a4a7-d092-40c1-8217-dc2b8e2ecea0 3 0bd15600-333e-47d6-b4fb-c3b8b26c2dcf
+53e381f9-db33-430e-8304-c344985c37f6 云采集 \N 2020-04-14 10:45:14.154+08 2020-04-14 10:45:14.154+08 2de0b18f-a13a-48a9-8e34-6bfeff609972 3 \N
+7fa0305f-807a-4541-8615-4ad975b73518 采集 2019-04-18 11:02:51.791+08 2019-04-18 11:02:51.791+08 89fb363a-19d1-4e23-a9af-b2a2c310eb4f 3 bcbc3e2c-937e-4348-9c55-b9516e4782de
+d2add1b3-b21c-420b-82a4-e0c55ee3a019 采集 2019-04-18 11:06:31.794+08 2019-04-18 11:06:31.794+08 d5bf6f22-3d7a-4ab0-9043-1020e9516bcc 3 4ab9cad5-76ed-4cc1-99b0-9543fc1c0533
+1e436fa9-3d57-441a-b498-4dc107684e1a 文件 \N 2019-04-18 13:54:17.288+08 2019-04-18 13:54:17.288+08 76288807-186e-4444-a1ce-6be599aacfd2 3 \N
+0050e0d2-2d7d-4e7b-8871-1b0196ce7094 文件 \N 2019-04-18 13:55:01.759+08 2019-04-18 13:55:01.759+08 9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec 3 \N
+fddf24e3-0068-448a-aee2-4b35af2a7e32 文件 \N 2019-04-18 13:55:58.608+08 2019-04-18 13:55:58.608+08 75c932d0-2df0-4628-81dd-0e9c1f11ff60 3 \N
+6ea6d122-5da2-41bd-a362-912f212d294b 文件 \N 2019-04-18 13:56:34.364+08 2019-04-18 13:56:34.364+08 11a0df92-8921-470b-af9c-d7593b8b1f78 3 \N
+a4c5312d-d964-4c7e-9d81-79f265acfc59 采集 2019-04-18 18:47:42.217+08 2019-04-18 18:47:42.217+08 f929d6c9-de63-4cb0-89f9-f9e7a22cbadb 3 \N
+e11bffba-cbad-486c-aeea-b773cd243628 温度采集 2019-03-29 16:40:02.737+08 2019-03-29 16:40:02.737+08 044ef7b0-afed-464c-b3fb-8bbf7fa42023 3 \N
+aaec2c04-55f4-4c0a-b5ba-004a8b91593a 采集 2019-04-18 15:29:50.011+08 2019-04-19 13:41:32.559+08 efdfb5bf-1488-40b5-825f-629d60ebe7f7 3 a6b0f2df-fe24-4c3c-89ec-a1768e94e07c
+fc95cca4-2304-48a7-a38e-b8280e1af82d 停止连续采集 \N 2019-04-20 17:25:47.157+08 2019-04-20 17:25:47.157+08 61e3c33e-85cf-4894-9fc6-70fc3fd7a522 2 95936e79-012a-4439-87a6-0a08f6c419e5
+9ec28096-280e-4a66-b130-37a5ebc05047 采集 2019-04-19 16:42:52.616+08 2019-04-19 16:42:52.616+08 43bea8b9-c871-432f-90d5-414d9d907254 3 59fbaf94-9851-45b3-ad97-ec1a8a7ff764
+70909da5-46ce-4458-8129-4c34c077b2be 采集 2019-04-22 13:13:08.902+08 2019-04-22 13:13:08.902+08 5d98962d-dbd8-4688-ae48-dbebdce861f6 3 030de29c-d4cb-4747-9885-3a81f9cf61ba
+79df1a9f-c843-4cdd-806d-4492fdeac2c2 采集 2019-04-22 14:08:53.033+08 2019-04-22 14:08:53.033+08 9b0e1890-c539-43be-8907-1f2eeaa3e309 3 049512a4-e7cf-44a4-a31c-1165cfb143b9
+2c644dde-9a89-4c57-b9c2-07fae59e460d 采集 2019-04-23 14:22:13.664+08 2019-04-23 14:22:13.664+08 fb1aa362-5048-47df-a1b3-89bc55bfe786 3 030de29c-d4cb-4747-9885-3a81f9cf61ba
+897daa06-8487-49b5-b276-f688a5c99378 采集 2019-04-23 14:45:48.308+08 2019-04-23 14:45:48.308+08 4aac7755-6f82-41a7-adde-756a7548c7f4 3 74a206a6-e3d1-475d-8c0b-a2a3730a97d7
+e3c19ece-2c10-438e-8bd1-005169fa2da8 采集 2019-04-23 15:05:42.793+08 2019-04-23 15:05:42.793+08 272894c2-dcd9-4a14-8205-f1e9a093f3cd 3 \N
+d73e0c65-a8ab-492b-b6c1-1039f4630424 采集 2019-04-23 15:47:59.414+08 2019-04-23 15:47:59.414+08 2698c5d7-398d-41ad-bdea-68e26f77a6bd 3 \N
+dfaa0aee-75a3-4f5f-a09c-c278b9e655ad 采集 2019-04-24 09:19:20.823+08 2019-04-24 09:19:20.823+08 29a8cde9-51c6-4647-8153-de06449e2ba2 3 \N
+5bc34c90-3031-4ce7-bb12-eac34d220e11 采集 2019-04-24 09:21:38.792+08 2019-04-24 09:21:38.792+08 0ffa5291-87ea-4e05-b031-ef948c53b474 3 \N
+0a9589f0-6b8d-474c-b07d-8c6da527a61c 采集 2019-04-16 16:01:34.217+08 2019-08-27 09:01:04.059+08 cbdb48d6-afd7-4322-884a-d37d56f96176 3 1d3ad5d8-27b3-4b70-ac2c-fbd67ddd48cf
+0448eb89-a724-4340-a079-912513a55cb8 采集 2019-04-25 15:02:30.576+08 2019-04-25 15:02:30.576+08 83960893-0d31-4f1e-a576-69a4e7bce94c 3 355f91df-bf0d-44d9-94bd-e14e89545f4d
+bca45090-3023-4d55-85e0-8c5216171df5 采集 2019-04-25 15:04:01.455+08 2019-04-25 15:04:01.455+08 3a1c9f2b-76dc-4276-8e10-aba208fd1fc5 3 \N
+2de26052-b602-4ad3-9690-aa841c9c3a97 微功耗 \N 2020-04-14 10:54:44.714+08 2020-04-14 10:54:44.714+08 0df31ce5-f6b4-4f95-a5f8-07c4ccc52346 3 \N
+354393d4-5f59-436d-96a6-e7e3fb28a196 功能A 2019-04-26 13:07:35.557+08 2019-04-26 13:07:35.557+08 d59a244e-554e-478d-b874-b75dc0dff2b5 3 ce96b9f4-f3b4-437b-8011-b7bd5166300c
+3e5c37a1-c1a6-4bd4-b3d9-e95a3236e873 采集 倾角 2019-04-26 15:57:34.685+08 2019-04-26 15:57:34.685+08 3f25f8df-8a52-4d2c-b6ea-714da8be3c00 3 fb1db37d-4ca2-4e71-9b30-7ead94407adc
+9cb1bdb2-4235-4ca7-bdd2-7b7719325a45 微功耗 \N 2020-04-14 10:57:58.074+08 2020-04-14 10:57:58.074+08 5b40bb69-7692-4cee-b6df-bd7871764131 3 \N
+c8ea2318-d321-46b9-9333-d2679ca7a30f 采集 \N 2020-06-12 10:05:07.213+08 2020-06-12 13:40:28.802+08 5fec42a4-44a4-46e1-afba-17c79de7e09c 3 ce8ccb17-58ab-4f9d-a15e-ea4a14fb3b36
+f605cba3-4024-46ad-b288-3c83568c5609 采集 2020-04-21 13:39:10.244+08 2020-04-21 13:41:09.08+08 8cee37a9-d972-4d3b-97eb-53c9a87dbe9c 3 529c4341-8afa-4589-b3af-43a087988e34
+4c4009bc-3eeb-4597-8866-fc0e9f3a1691 caiji 2020-04-21 23:56:27.166+08 2020-04-21 23:56:27.166+08 f2966257-6f65-4e21-81a5-451cd5b63144 3 71fdedfb-633e-47df-b552-16c71d98a38e
+d54486ff-766c-4275-bf4e-b13e58574dd7 采集 2020-05-11 09:29:12.673+08 2020-05-12 13:52:16.096+08 57b88830-72c4-4739-8d3b-3754fb371135 3 718ac0e4-8b03-4ed6-930b-937ada877aa6
+428d318f-f610-4b34-8068-7a928691a7d9 采集 \N 2020-05-13 11:41:39.144+08 2020-05-13 11:41:39.144+08 310ec0de-7bbc-4a75-8f1b-d126a2d3ac4a 3 \N
+aebaf729-ad98-42f3-a375-2c40c11065cb 采集 \N 2020-05-14 11:32:48.514+08 2020-05-14 11:32:48.514+08 82d6439d-e647-44e7-ba65-2de818baea7f 3 \N
+11936f12-8bb7-42ec-8d27-5e01eb5c4ba1 采集 2020-05-14 15:02:02.196+08 2020-05-14 15:02:47.397+08 ba181334-9686-42cd-b00e-7165b35e067f 3 f197324e-172a-442a-8bba-cbc3133be37b
+018e289f-43b3-4cc0-a3be-2a903cef1fab 数据 2020-05-20 09:22:50.315+08 2020-05-20 09:22:50.315+08 9c12215f-afab-45e9-8341-1e487df6d020 3 \N
+dac5aa29-4b9b-4dd0-9200-afc564bb32c5 采集 2020-05-20 09:26:32.525+08 2020-05-20 09:26:32.525+08 06cc1b7c-e6a3-4caf-9b5a-0e7ab8800ec2 3 \N
+bc9ee149-cefe-4978-99b6-9c1cec2f6b4c 采集 2020-05-20 11:50:17.615+08 2020-05-20 11:50:17.615+08 6a94d3b4-a64c-48d2-be57-dfbd7f20c530 3 24d5f318-b4a2-480f-bb83-c0d0ec08730d
+67095107-c333-487e-9e12-1d69facb6297 采集 2020-05-21 15:16:19.421+08 2020-05-21 15:16:19.421+08 4d37123c-99a8-49db-b2d2-3e334f5b27e0 3 ccf5fd2e-6140-49e6-81bb-dffcb24079c4
+68b2ac58-25ea-408d-a955-797ded16d57e 采集 2020-05-21 15:23:07.801+08 2020-05-21 15:23:07.801+08 39e6fe98-3dea-458b-9f64-143d18617cc4 3 \N
+582512d5-3343-4f9a-bab0-0312f0f83dea 采集 \N 2020-05-25 16:36:09.251+08 2020-05-25 16:36:09.251+08 94e0657d-9d34-4baf-bac1-34cb6610e051 3 d0689c9a-907c-4c62-a5d4-2a27971aa569
+5e890b4e-e5c4-406b-a48b-96ecf4963921 采集 2020-05-28 10:53:52.236+08 2020-05-28 10:53:52.236+08 e867f531-f1a3-44c8-9876-368efe947b7d 3 3aae5959-6db3-4c8b-8017-95c853c8a965
+5e62be71-2e05-4eb7-b50b-233e6ad91069 采集 2020-05-28 15:02:00.607+08 2020-05-28 15:02:00.607+08 d86466d8-8892-45e2-a86a-56e283df30ac 3 96535cb0-1134-4b01-8885-34fbf6127874
+9b2759fd-8c00-478b-9168-f2dc2f1bab11 采集 \N 2020-06-05 15:02:09.823+08 2020-06-05 15:02:09.823+08 ee98ef38-7fda-425a-9fae-5000c658a83e 3 0bb6a5c8-bf18-41c3-97f1-50e844da6de1
+11006daf-ca33-466e-970d-48c4889b56e3 采集 \N 2020-06-08 11:22:21.301+08 2020-06-08 11:22:21.301+08 3ade0dca-d01e-4b1f-a1af-4948163e6902 3 \N
+865a418e-8597-4f29-954b-6953bf8a8390 采集 \N 2020-06-08 11:42:18.117+08 2020-06-08 11:42:18.117+08 47775a01-00ef-4500-82ee-04b5536aaeea 3 \N
+5cd21446-c4fc-45a2-b2d3-a2fb1ae08135 采集 \N 2020-06-08 11:45:42.731+08 2020-06-08 11:45:42.731+08 1aa0fcb2-1f26-4596-9211-f028c369fbcd 3 \N
+1ab8db7c-e725-4119-9c09-6555bb04ce5d 采集 2020-06-10 11:35:22.175+08 2020-06-10 13:43:00.422+08 a2a6365d-ec0a-453a-be54-35e11b324d63 3 213fe261-1b26-496d-adb3-4f84b6f2852c
+4a707f5b-4a1a-4c21-8c3a-01cc99f0d25b 采集 2020-06-10 14:00:54.728+08 2020-06-10 14:00:54.728+08 33b14e4c-17e6-44c9-a0a1-84cfe22fa073 3 04e02398-2db0-408b-80c3-399c705ceed7
+33ad2409-682f-4b09-918b-9f6f9396a1c3 采集 2020-06-10 14:05:06.787+08 2020-06-10 14:05:06.787+08 9ed59e3e-108f-4fe9-b3c0-37c11cd46d92 3 04e02398-2db0-408b-80c3-399c705ceed7
+64351b5c-4b45-42d1-a60b-81f410c1d0b3 采集 2020-06-10 14:06:51.137+08 2020-06-10 14:06:51.137+08 ce34762d-8e48-4c7e-8c23-1f7810ab7884 3 04e02398-2db0-408b-80c3-399c705ceed7
+fb469083-0a30-4a41-a31d-b1bc0c0ed098 采集 2020-06-10 17:07:04.278+08 2020-06-10 17:07:04.278+08 42d66a56-b0ca-400d-b41e-250d62a84878 3 04e02398-2db0-408b-80c3-399c705ceed7
+71d81eb7-504a-4f9f-ad7a-1a7479fe82b3 采集 2020-06-10 17:08:53.389+08 2020-06-10 17:08:53.389+08 7d85285c-28e9-44e3-b920-793850693e3a 3 04e02398-2db0-408b-80c3-399c705ceed7
+ad2045e5-d052-4689-b49f-fa1c42ccca5b 采集 2020-06-10 17:12:06.742+08 2020-06-10 17:12:06.742+08 8485f6ac-e9d2-4f9f-a94d-0a3a3c516fea 3 04e02398-2db0-408b-80c3-399c705ceed7
+d7404d08-da09-4d5c-9443-0abdf60d1a13 采集 2020-06-10 16:55:56.564+08 2020-06-10 17:40:40.51+08 59ffec5d-7c08-417e-bddc-8483466e1d66 3 84e7b49c-247b-446c-a505-0ed6ab5de6e4
+38ab5b80-b75c-42f6-b9a8-cb1e96603099 采集 2020-06-11 17:08:14.288+08 2020-06-11 17:08:14.288+08 61f8ca5a-27a4-4e6e-8314-7b989dc3f178 3 4ad803b7-f013-49f7-9df4-e04967d22021
+ef2a2a56-6abd-459f-8899-2756698bd997 采集 2020-06-11 17:32:44.103+08 2020-06-11 17:32:44.103+08 e3d9aa70-13e8-419c-939b-953b239eb4b0 3 f4cc72f0-1d7e-4554-8d1f-041c9f267dee
+60d83c64-9bad-43d3-9920-7dad96154fd7 采集 2020-06-11 17:41:16.029+08 2020-06-11 17:41:16.029+08 30c2c04a-0810-4f90-91cf-d49b9ed855be 3 19a4d417-0852-4a3a-b445-995ba3718d47
+1f3783bc-bfe9-4abe-b7da-539a0ec57e34 采集 2020-06-15 10:48:34.987+08 2020-06-15 10:48:34.987+08 537ca657-4262-4143-a1fd-7050c3795634 3 \N
+ca3175c2-be00-4fd5-8738-d149df98fb25 采集 2020-06-16 14:26:24.067+08 2020-06-16 14:26:24.067+08 1a7f1970-6142-4919-a1e7-110829051ba9 3 \N
+aeb4e21b-b0fd-42d0-8eef-e8d525576507 采集 2020-06-15 17:15:30.589+08 2020-06-18 15:15:41.697+08 a999f92a-a9c4-4b33-a805-9bbb221f1935 3 3b1d673f-6e08-442d-8ff3-0306f82ff257
+ec37073d-d10e-4bf9-9e04-a5dbff374b3c 采集 2020-06-28 11:29:02.965+08 2020-06-29 09:47:45.477+08 c3507ba4-b2b5-45b8-aecb-84079c90649d 3 cea589dc-d05f-4f0d-839b-70599d8fbd1f
+0a837b07-531e-4fea-861a-ff73f35fb9ba 采集 \N 2020-06-29 09:58:29.161+08 2020-06-29 09:58:29.161+08 d246af39-fb67-4750-8a25-d05680a359b3 3 \N
+adc0b723-3ef2-4cb4-af3d-c74d6fd9cafb 采集 2020-06-29 16:12:12.859+08 2020-06-29 16:12:12.859+08 c67f1f58-3886-4294-835b-b48db34d96e3 3 \N
+43b79748-d5d2-4ff7-b9c2-4d8a115cf28f 采集 2020-07-01 13:42:35.891+08 2020-07-01 13:44:03.118+08 5865ba02-99d8-4649-a200-c40dfa917982 3 420f3efe-9304-4bb6-bdcb-d62235c8476c
+e372ec30-5000-4a22-90ce-923829b2d608 采集 2020-07-02 10:28:22.764+08 2020-07-02 10:41:52.529+08 a8180277-ba74-44e1-a3bc-b408e290f742 3 7f9b871e-3291-44e5-8ba3-a9a6f7759a41
+a15cd089-6db0-463f-a927-c36d1dca96a4 采集 \N 2020-07-20 09:51:34.112+08 2020-07-20 09:56:07.53+08 069e9c4f-794e-4b89-abc9-d53ab5d5cf7a 3 72df2fd5-cf83-449e-8581-0e7860bd0e06
+d600b35e-ef0a-4115-9af4-779c7bd726b9 采集 \N 2020-07-20 16:29:58.324+08 2020-07-20 16:29:58.324+08 f54dc0a0-6317-4a46-9f09-4d8024ff6959 3 c215dabb-ce81-4a73-944f-e8c239a45a80
+afe13a11-ee0e-417e-a431-844bd3608ce8 雨量 2020-04-22 19:14:32.903+08 2020-04-22 19:14:32.903+08 f9304770-9fc6-4203-a75a-2759b659a4d7 2 \N
+af456be9-95da-45a5-a65f-2d3cb31732ff 电流 2020-04-22 19:14:33.19+08 2020-04-22 19:14:33.19+08 f9304770-9fc6-4203-a75a-2759b659a4d7 3 \N
+ff05da01-ca5c-4dbb-afb0-67ec5f513f40 采集 应变计 2019-04-28 11:24:32.859+08 2019-04-28 11:24:32.859+08 d3c271ff-22cb-4938-8c5f-c63484107a38 3 \N
+55d1faba-c22b-4730-a51c-1979541f342b 采集 2019-04-28 11:25:30.655+08 2019-04-28 11:25:30.655+08 b8061f6d-fe6e-443d-bed9-8b4e7fb81a71 3 \N
+cc7ab8cd-332e-48d6-9a20-2d44055c2e61 采集 2019-04-28 11:26:12.329+08 2019-04-28 11:26:12.329+08 dc1f2a7f-e0b1-4894-852c-6eaa5c66ef83 3 \N
+e5a6d57f-122f-4dac-994d-1a83a93b2440 采集 2019-04-28 11:27:08.993+08 2019-04-28 11:27:08.993+08 6daadb42-2ee7-41fa-a6bd-85d9c0d77383 3 \N
+589695ad-b029-4c5e-9425-4946e80f3fb6 采集 2019-04-28 11:28:04.778+08 2019-04-28 11:28:04.778+08 3d182049-68c9-440d-adde-b62b71abee38 3 \N
+833ae7ac-9c57-4cd1-a324-4b49acee1dfe 采集 2019-04-28 11:28:46.199+08 2019-04-28 11:28:46.199+08 28463128-4e0e-4167-8aa6-3c6f5accc368 3 \N
+3d72c148-2e62-41d7-b0f2-528fd13952dd 采集 \N 2020-07-03 14:17:21.442+08 2020-07-21 10:26:44.2+08 9a1a0afd-566e-45a2-8286-147f760679a4 3 \N
+1a9ae7b1-f3ca-46f5-82eb-a774d07949cc Energy 2019-04-28 17:36:59.012+08 2019-04-28 17:36:59.012+08 0a9ddd56-9373-42fc-b426-17797eeee64a 3 0e36fdd5-a0d5-4fc7-9337-906d98282bf2
+a18f5309-f499-412b-9cd7-b2a84c3302fa 采集 2019-04-30 09:49:47.681+08 2019-04-30 09:49:47.681+08 a9dc9dd4-9a62-4dfa-968a-69e2c4472a0a 3 158509e9-b030-42ba-8330-46ef28dfb38b
+0c37d684-9050-4e23-9121-2749044fb378 采集 2019-04-29 15:49:13.028+08 2019-05-31 10:37:09.07+08 dc3255a4-0fb9-4ab9-85cd-714e6c5d70d0 3 2c523c86-9933-490e-9101-55c1156606ab
+cda9f386-6c1d-4477-91aa-61f2fcbf93ff 采集 压力 2019-04-28 10:50:55.208+08 2019-07-17 16:31:05.549+08 75780bad-38e2-4dde-adbd-950bd075a1d2 3 63535373-7358-4149-bb70-60bc6e4cb6f9
+a8cf8420-9ce0-464d-8af7-1940466015bd 采集 2020-06-24 09:49:50.581+08 2020-06-24 09:49:50.581+08 2b1ac1f2-3501-4eb7-882b-59c5f346ad98 3 \N
+47e859b1-fd7c-4d91-b482-25d7a9547047 采集 \N 2020-07-21 15:31:35.595+08 2020-07-21 15:31:35.595+08 b9092f6a-8c04-44c9-97ea-49b5389f5580 3 d7015097-9fec-4702-89ef-7453ce11b7f8
+9cc08d17-9866-4da2-844e-be838245d9e3 采集 2019-06-03 11:50:03.94+08 2019-06-03 11:50:03.94+08 31c3b19c-2202-408e-ba8f-efd800be8801 3 \N
+aacdb86a-92cc-47cf-a7e5-b139a96e4fbb 采集 \N 2019-05-07 11:19:26.47+08 2019-05-07 11:19:26.47+08 ef966a9a-d938-4526-af04-cee74ea9b600 3 80c16a27-2bdf-48f6-ab20-690c3926ec7a
+df20f27f-9f90-4d8f-b4bb-db033628f414 采集 \N 2019-05-07 16:51:19.784+08 2019-05-07 16:51:29.084+08 e907425b-f687-45f0-9e44-798f6c00968f 3 \N
+05df15fb-1c19-4077-9522-6d5f48739259 采集 2019-05-07 15:57:23.336+08 2019-05-07 17:00:31.122+08 573fb497-e583-41c4-ba6b-ecf548921eaf 3 4a3ea0f9-d431-492c-85b8-ceac278b1456
+1725bd62-6500-4740-a03e-78fd4a2f4a53 Temperature 2019-05-08 17:53:13.476+08 2019-05-08 19:45:04.192+08 1c6ea7b5-ffd8-4e6c-b190-c2cbdbe65a17 3 35c34a5d-993a-4493-a0b0-d8841fd4bd31
+c05dd524-bff2-460c-b9b3-7fb235b2a7a8 采集 2019-05-09 09:58:07.895+08 2019-05-09 09:58:07.895+08 f753602f-9889-47cc-a42c-2905bdaab97e 3 73c4b266-e007-4f6f-88de-02c8c82b9aa4
+0c3edb9b-16a6-4fed-b65c-3757a117a3bc 采集 2019-05-09 10:06:14.147+08 2019-05-09 10:06:14.147+08 54e76b93-f8ed-407b-b112-ed4a85db50db 3 d2e64245-7a53-43c4-a9a0-727155de89fe
+cbcbc67f-3b4d-47e4-93db-2a85c354a213 采集 2019-06-05 10:43:13.778+08 2019-06-05 10:53:00.078+08 fd43ad33-b4b0-46a5-b48c-5a4fa76e0aed 3 5695aa0b-5148-4985-9d9c-bffa36a39edc
+fd94be74-66bc-48ba-94d0-008b6d6d5413 Door Status Report \N 2019-05-08 18:18:25.607+08 2019-05-23 00:05:40.57+08 ecad4b77-ab58-460f-8469-b89b3c77d796 3 d6ee4985-7231-43a4-9593-d0088b1f370d
+a40f85c1-a408-408b-971c-4e1c4e88d703 采集 2019-05-09 17:23:15.212+08 2019-05-09 17:48:44.322+08 7802e3d3-ffbf-4146-954f-a67f1cbfb41c 3 c3873468-2682-4721-9ed3-96219d02c017
+7e35a6df-64f0-483a-8582-859548ba7fc1 采集 温度 含水率 2019-05-13 11:18:59.499+08 2019-05-13 11:18:59.499+08 0cbb0bb5-1c3c-4fc8-94a1-981c026350f8 3 c36c2c03-92b0-41b0-bcdc-9c867e0da2f7
+7fa7ac4f-f693-4287-a813-9b123e633207 采集 2019-05-13 16:27:13.647+08 2019-05-13 16:27:13.647+08 6151fdf6-4bb4-466e-b727-56b68ebf43e1 3 3e489442-5b15-42ec-aa03-4a88c4c6a274
+db0bf17e-625b-4003-8b57-b2db0d5e3ecc 采集 2019-06-05 10:58:32.287+08 2019-06-05 10:58:32.287+08 d9b333ed-096a-405a-9c9a-905cd04d2368 3 5695aa0b-5148-4985-9d9c-bffa36a39edc
+cf8bfa0f-1e08-48ed-9041-3826fd5f5135 采集 2019-05-14 16:57:37.95+08 2019-05-14 16:57:37.95+08 ff67a769-94ed-4f3d-b944-b1f4d4468eec 3 52e623de-58b8-4c3d-a50a-5264735bda7b
+e1da9a91-3e0d-4f6f-8ba2-8169b1d06305 王飞的测试应用 2019-05-06 10:14:28.459+08 2019-05-06 10:14:28.459+08 9ac9f312-0f0e-45d4-8d00-8420be016826 3 \N
+f21dbd7b-867d-4273-8141-7817fa5685d8 采集 2019-05-15 10:48:06.507+08 2019-05-15 10:48:06.507+08 82c4e869-135f-466b-af92-27b7979b1fd2 3 422d3308-b4d9-4181-b705-7d81342c46a7
+e35e7bae-3a9e-41bc-b63b-ee32399d64d0 采集 2019-05-15 10:32:01.145+08 2019-05-15 10:55:37.903+08 6474815f-e86c-4909-966f-5fb6efc5c674 3 317e6f80-0f02-444c-b8ef-eb079795edb5
+19c9b194-eaca-4785-9698-fcba4f960a2b 配置 \N 2019-05-16 18:02:13.701+08 2019-05-16 18:02:13.701+08 ff67a769-94ed-4f3d-b944-b1f4d4468eec 2 795bc81a-cc56-4b80-93d5-7d4cacd0fc5b
+99b535b3-ce4d-4950-97cc-45cd24ce64b1 采集 2019-05-22 10:38:30.971+08 2019-05-22 10:38:30.971+08 721eaa20-a7b1-457b-a5b3-f5eb9b313129 3 fda4d6b7-a716-42c7-bf9f-61a02a025878
+dfb70ff4-6696-4f3c-b709-dfa5ad977714 tt 2019-05-22 16:00:03.724+08 2019-05-22 16:00:03.724+08 d93ae98f-5dbc-45c3-81cf-8f9360a11684 3 \N
+df4052a0-fc2c-4120-b39c-fb5a0f719b6d 数据 2019-06-27 09:35:12.076+08 2019-06-27 09:35:12.076+08 f41380a3-bc12-4229-8b46-67472fd5d9b3 3 \N
+7ec4a983-93fb-4bd4-9daa-8f916e538b59 采集 2019-05-14 14:10:38.863+08 2019-05-22 18:05:37.574+08 d634c358-000d-4c53-8c4b-0f411b4a52c3 3 60523f46-1b58-4910-8a1f-7a111e1e0ccb
+639bcad3-50f1-4b66-9f50-acbb916f7d8e Temperature Read 2019-05-08 18:17:31.6+08 2019-05-23 00:05:50.838+08 ecad4b77-ab58-460f-8469-b89b3c77d796 3 35c34a5d-993a-4493-a0b0-d8841fd4bd31
+ffc66398-9927-4dc5-8fce-d0d0c87b5dd5 采集 2019-05-23 13:53:19.248+08 2019-05-23 13:53:19.248+08 b69e622c-7f6b-4539-8ff3-f3027cb3a592 3 d0c49ede-2200-49db-bd7b-c9535e387848
+8b850929-a890-4c69-898a-0388eec64db8 采集 2019-05-28 15:02:38.783+08 2019-05-28 15:02:38.783+08 290bae7d-a183-4af8-be82-963486855761 3 \N
+aeea3098-6149-4f87-9a9a-474122886ef7 采集 2019-05-29 14:51:02.761+08 2019-05-29 14:51:02.761+08 82ec14e4-a0ee-4d21-9fcb-24cde7cf551b 3 103b5fb6-4f69-4647-a725-61dcaa938a17
+8f2c15d1-cb4f-45fd-b217-ecbf37787ddc 采集 2019-05-29 15:57:45.375+08 2019-05-29 15:57:45.375+08 304a0d25-d131-4d28-9534-296b7df2adb3 3 \N
+b1badcbe-62e0-4c45-85e8-8e3d712d3659 采集 \N 2019-05-30 10:24:12.579+08 2019-05-30 10:24:12.579+08 42fbfa5f-4ca7-4e1d-b42f-08f4f641657a 3 \N
+92799800-ca0a-48ad-a83b-c63c89b7879f 采集 2019-06-05 11:07:53.603+08 2019-06-05 11:07:53.603+08 d8d4cee4-3e1d-4d43-8861-53ccd536112e 3 5695aa0b-5148-4985-9d9c-bffa36a39edc
+28904408-12e5-4569-8499-937ce3f253ef 采集 \N 2019-05-30 11:20:53.237+08 2019-05-30 11:21:18.816+08 7f382df2-35f7-4128-9276-d2a3a40d6547 3 83ea3d9a-afdf-4200-a973-6f613946df5b
+cb84ad58-6983-40a3-96ad-0f001cccaf96 采集 2019-05-30 13:47:48.54+08 2019-05-30 13:47:48.54+08 104df6e9-2d4e-49ac-b7e1-a6d5cc2ba0e1 3 f2c0be9e-1cf8-425f-befd-5cff3fac6fb1
+8a945623-1db8-433f-8eb9-062caccb5b89 采集 \N 2019-05-31 18:03:21.295+08 2019-06-03 10:53:21.888+08 85e07675-26a2-435b-8ee9-6c790ffe7463 3 e32a4670-d2d9-4e72-bfab-ca042c491f7d
+e82b1781-0a86-4dd5-a38c-c66f1f0a1b0e 采集 2019-06-06 14:15:52.937+08 2019-06-06 14:25:39.609+08 4b8a42f4-db96-4d3d-937c-0e98cae45ea0 3 d751e738-d74f-476e-8ba3-f25bb264bea3
+28c09a41-f505-4cf5-aa80-131823bd65fb 采集 2019-06-06 17:24:55.45+08 2019-06-06 17:24:55.45+08 53070eae-7839-46df-9492-f1b4c0b0b101 3 f6ebffcf-2f2a-41fa-a36b-d997b8584c39
+c7963d62-908a-4e24-a229-7de180511e96 采集 2019-06-11 15:06:43.231+08 2019-06-11 15:06:43.231+08 5a3bf41b-78ef-45fa-96e2-ac2a42767d71 3 9b35efe3-e7d0-4364-b398-5a4a7d10ab20
+57e7e768-2d0a-44a8-93df-21edd1f6564f 采集 2019-06-11 15:43:02.166+08 2019-06-11 15:43:02.166+08 57df002c-3fa7-4684-a2b3-f46f54b7f87b 3 \N
+35a2c8f0-a9c6-4f91-a9c5-94a0067e3095 采集 2019-06-11 15:50:05.41+08 2019-06-11 15:50:05.41+08 888fb650-543d-4141-a70e-7dff25dfffe7 3 \N
+bf5ac821-5299-4099-9be9-c61c8b7d085c 采集 2019-06-11 15:55:27.361+08 2019-06-11 15:55:27.361+08 2f885022-839d-4c38-ae7a-b4c9881ca394 3 \N
+7fbb94a7-5b6f-4dc1-8e38-872f387a2d31 采集 2019-06-11 15:59:09.839+08 2019-06-11 15:59:09.839+08 c12a0cbf-c2fa-4f1e-a52e-e371df51e0fb 3 \N
+ed5a91cc-f6b6-4990-9c8b-bd430a7c12ef 采集 2019-06-11 16:14:17.086+08 2019-06-11 16:14:17.086+08 f93393d2-0bfd-4685-b6d9-31287c466007 3 \N
+5cec0e8b-58df-4473-b3d7-4d524e763830 采集 2019-06-11 16:18:28.997+08 2019-06-11 16:18:28.997+08 acd9ad51-99a5-4b2c-98ce-0d2d6c4dd848 3 \N
+370eb26a-f879-4a01-a515-1b20a92c80f6 采集 2019-06-11 16:27:10.958+08 2019-06-11 16:27:10.958+08 f70240a0-3384-4984-a854-65fe5b16dc0a 3 \N
+0af3cf99-e69f-4f81-b486-9fcb5de59fd5 采集 2019-06-11 16:37:25.805+08 2019-06-11 16:37:25.805+08 2142db9e-293b-43a9-9883-3d41391ba533 3 \N
+faa5fb8b-d39d-4603-be6b-e70acd114c75 采集 2019-06-11 16:41:49.144+08 2019-06-11 16:41:49.144+08 c06263f7-c818-41f4-949a-4a526770fa9b 3 \N
+aabd5c05-617a-41c3-9ba6-925ec3334ff7 采集 2019-06-11 16:42:42.399+08 2019-06-11 16:42:42.399+08 7fae0d43-0664-4c19-9d35-db80a97b6da2 3 \N
+b76b8c94-f6d7-43f1-9831-865a733dbeb4 采集 2019-06-11 16:47:18.531+08 2019-06-11 16:47:18.531+08 3636e235-3352-4944-8092-c0b68a659ef1 3 \N
+7ca191c0-8240-4dec-95bc-26b13a55bcc6 采集 2019-06-11 17:11:17.102+08 2019-06-11 17:11:17.102+08 d52023ca-77dc-4b31-941a-5cb6d2b1a297 3 \N
+79193862-5667-4861-96ed-2c239a6535c2 采集 2019-06-11 17:18:00.724+08 2019-06-11 17:18:00.724+08 67f6e3ca-2368-45ff-a678-53f942e71caa 3 \N
+823e5c6d-df3b-4d9f-aea9-f9953192aabf 采集 2020-07-20 17:54:25.27+08 2020-07-20 17:56:19.068+08 f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43 3 3121e3a3-3ae3-4128-b080-5ad23d044087
+601d3b7b-0a17-4c81-9200-b0be68df23c4 采集 2020-07-23 13:36:21.054+08 2020-07-23 13:38:56.153+08 ff948ead-5a62-4990-b5c9-a440be471988 3 a595a911-e18d-44ff-8e67-a303b74de84f
+c75c257f-cdab-4167-a872-c06243b27f74 采集 2019-06-11 17:20:41.957+08 2019-06-11 17:20:41.957+08 4f72b98e-690d-429f-9b64-ab8de1c41a0b 3 \N
+1515cbb4-bda7-45b0-84c9-dedf0de93039 采集 2019-06-11 17:24:10.306+08 2019-06-11 17:24:10.306+08 96e0e6a4-fb0a-4e01-ba5b-1ab1feff3aee 3 \N
+02962d5d-c83f-4756-bc1b-b9044c4563fa 采集 2019-06-11 17:28:58.613+08 2019-06-11 17:28:58.613+08 14068f43-74c6-48e8-b004-29eefa28fd36 3 \N
+59d59ccb-fb26-4ac7-96f5-2b0694fc6d2e 采集 2019-06-11 17:32:28.569+08 2019-06-11 17:32:28.569+08 958debc4-8460-4237-a960-d51a6a866071 3 \N
+f8148d64-f381-4893-8e57-854575f49d47 采集 2019-06-14 11:20:06.177+08 2020-06-12 09:23:23.123+08 c8c925b5-d496-4eb8-a0c7-189ce391ff1a 3 e55f6c54-15a7-4a8e-ac30-a89edfe3d818
+3e0cbd36-be46-4841-bd03-26f5540d8ceb 采集 2020-07-31 11:04:05.433+08 2020-07-31 11:07:57.655+08 8581898c-d047-4cdc-8ccc-ef33a1567435 3 665fbc53-4bab-4fc7-9bdd-aaa63fc834f7
+1093449c-fdd4-4e36-9153-53b8e4be297d 采集 2020-08-03 08:43:47.597+08 2020-08-03 09:13:17.82+08 c283a48d-8843-4cb6-9c01-336738a8137a 3 73c2217f-b7c8-4bed-8cf2-21f591a19dd3
+dd71ac62-451e-4f14-a231-1209612ec59d 采集 2020-08-05 16:54:52.112+08 2020-08-05 16:54:52.112+08 07977267-d666-4b82-8976-d533e9afde5b 3 dabe22ea-4084-4385-bfa3-674a09fdea02
+88cb50e8-fbcc-4dd1-a18d-915017dbee86 双轴角度测量 2020-09-02 17:43:02.615+08 2020-09-03 16:18:46.742+08 d9aab088-57f5-43ba-b30b-3342219a4b75 3 10e166da-8bd4-414c-a941-312073ae8ff8
+d59b49b6-2470-4652-aac0-5760f9cce697 双轴测量 2020-09-01 14:32:02.475+08 2020-09-03 16:18:53.184+08 fc096555-1b1d-4526-a6d2-a734b1d313fd 3 f617f353-687a-436b-a571-5a4af04eb61a
+c1159812-0b0e-4d84-bd67-8328afd12dc6 采集 2020-08-04 11:14:39.069+08 2020-08-05 18:03:46.957+08 5b58e9d2-f305-4ded-8863-c346e916d5e7 3 3918f7c9-7aed-49f8-8e15-57015d8856ec
+4dce787d-0acb-41d1-a959-a043d0546736 采集 2020-08-13 09:25:55.321+08 2020-08-13 09:48:00.037+08 11b16ed9-a251-4907-b941-5a31ea559da1 3 1f34194c-81bb-4957-927c-565b25060aa5
+06350cde-bd6e-495d-8ef5-c318d3694381 采集 2020-08-14 11:53:53.183+08 2020-08-14 11:53:53.183+08 2ebd818a-1949-4633-b46d-d923cc2bec7b 3 821360a5-ada6-40f1-987f-4f9e14982c4f
+dba91da4-00da-4cef-a91c-f39c97f9b45a 采集 2020-08-14 15:25:23.092+08 2020-08-14 15:25:23.092+08 8a59ee46-6582-4f9b-a696-f2025fca9eda 3 793c95c5-e27e-4a03-82a1-ed7c0df8674a
+2c774eef-6573-419e-8726-e505ae3447f2 采集 2020-08-14 16:22:21.541+08 2020-08-14 16:22:21.541+08 6e1d455f-6dc1-4237-b1f2-de550f8dbd0e 3 64fdaded-b81f-4455-9e7e-6ec7b36ded18
+a53c2dac-206d-44da-b18f-584b9ad1deab 采集 \N 2020-08-14 16:26:59.945+08 2020-08-14 16:26:59.945+08 7599bfb7-18fc-40c7-be52-ff9fd0d1519e 3 \N
+6e72e2fc-da68-46a6-8a68-3022057b0937 采集 2020-08-18 08:53:48.599+08 2020-08-18 08:55:03.241+08 6b55f70b-4626-47f5-b8fa-10f76bf80c68 3 864fa409-f305-4965-87cf-3465fe026979
+f1307ae1-f85b-4d6f-b239-eaa2c46d6b15 采集 2020-08-18 11:14:36.636+08 2020-08-18 11:14:36.636+08 e0a57272-b5e1-4160-b62d-98cc9dcd10ca 3 81741880-ebc8-42d9-bf53-1c6def33376c
+9a584682-5906-4fd4-ad79-245e90061e02 采集 2020-08-21 10:26:20.003+08 2020-08-21 10:27:48.287+08 032d4203-60ef-4d64-9888-530facf358ff 3 f6592048-0f23-403e-ae55-9f80fb9155e2
+847df328-4c47-460a-a6dd-cf1203e5bd27 采集 \N 2020-08-26 13:33:36.873+08 2020-08-26 13:33:36.873+08 945563fe-656a-461e-8dca-7a4b2edbf9d0 3 \N
+2f22d155-cb55-42be-9323-14e5da7f8912 采集 \N 2020-08-27 16:12:04.842+08 2020-08-27 16:13:15.87+08 58f5081b-0b4e-4f26-853f-22ef0d1ea318 3 bedc480a-4a97-488a-a948-b0a7713bdf92
+1caff493-5e1b-472f-a65f-502a9d9865bd RTU采集 2020-08-27 16:22:16.985+08 2020-08-27 16:22:16.985+08 35e7c6a8-9125-4612-889d-259e09a24735 3 \N
+b387422f-44fa-4d9e-a701-d6c9c57d630d RTU采集 \N 2020-08-27 17:24:28.554+08 2020-08-27 17:24:28.554+08 899def98-516b-4c5f-a7e8-2fd48018bf12 3 \N
+f2ad29ab-0075-41c4-9972-59da62b556f4 采集 2020-09-01 10:29:11.209+08 2020-09-01 10:29:11.209+08 8f3e91ce-4354-4d6a-826a-c727aaabaa58 3 dabe22ea-4084-4385-bfa3-674a09fdea02
+d9afb1b0-b05b-4c6e-8805-c4eeedd19014 采集 2020-09-01 11:23:08.031+08 2020-09-01 11:26:58.01+08 d876d84c-b881-4ef4-a79d-8a60b372c964 3 0b7198e4-94bf-46f6-a467-d5d3c514267e
+efd36daa-1bdb-44e0-8f90-00cf67f20abb 转发app的设备配置指令 \N 转发app 指令,即时调度 2020-09-02 16:16:56.977+08 2020-09-02 16:46:19.754+08 d876d84c-b881-4ef4-a79d-8a60b372c964 2 92c3319d-6177-4d99-a743-3391c9e1f4bf
+036f8003-a82c-40bc-a175-7cb81f4da7c9 采集 \N 2020-09-04 12:05:13.597+08 2020-09-04 13:22:13.057+08 518c0b84-693f-4a2d-8f80-1ef2cbc6c3ab 3 5f27ec35-2a3a-4e9c-9813-70525f544cd4
+ed73bd4c-f957-425b-bc61-b1a49b812aba 采集 2020-09-04 14:47:20.793+08 2020-09-04 15:30:52.499+08 f922cc6e-672b-4f59-a90e-2499ecfc1d24 3 1754774a-4f79-43b6-a352-99329d760806
+d04cc631-3bc1-496c-af61-fd0ff0ff3e85 采集 2020-09-07 16:10:09.075+08 2020-09-07 16:10:09.075+08 55f72e62-0922-4975-9714-058decf7a14d 3 1c891c2f-0cd5-433b-93f1-11b7f54f9ca0
+f482d51a-31e4-4f0d-b32e-184d1b527094 转发app的设备配置 2020-09-07 16:10:09.083+08 2020-09-07 16:10:09.083+08 55f72e62-0922-4975-9714-058decf7a14d 2 a83bd7a7-d18e-480b-b0df-40bc78fcc3a9
+2862c1ac-f3a8-45b9-88e8-abd2591928d4 采集 2020-09-10 11:15:15.542+08 2020-09-10 11:15:15.542+08 207df42a-f8cf-47d0-a4bc-d1d5d9114928 3 \N
+d140758d-3441-4156-9b00-7de4589d7f9c 采集 2020-09-11 13:29:23.089+08 2020-09-11 13:29:23.089+08 33a769c0-0ef3-47dd-ab22-3e86247259eb 3 \N
+f928b4a7-3c4f-42bc-aa12-32d1b835c3e6 数据 2020-09-11 14:36:39.588+08 2020-09-11 14:36:39.588+08 2a7828f8-5044-43fb-9435-9a59ec4d769a 3 \N
+c438d8c1-8b99-41e6-9cc0-5339b773c3bb 采集 2020-09-15 08:40:27.832+08 2020-09-15 08:51:22.053+08 a2885ce6-68b4-46e7-8dc6-fda47f2ad7bf 3 62d525af-9d57-4b02-a2e8-8fac8d6bc432
+40df1f23-955c-462f-b233-785df1759d7f 采集 2020-09-15 08:59:09.155+08 2020-09-15 08:59:09.155+08 4a7b1546-e1c1-4103-8fd0-baa6ce39ab2c 3 \N
+0ca15a19-3a6b-42c0-8336-096b8ebcc01d 采集 2020-09-17 16:42:41.365+08 2020-09-17 16:42:41.365+08 343d74d9-fc95-40d7-930c-e0cd01536d55 3 \N
+cd020968-8d12-4951-a6bb-0658b8ea6799 采集 2020-09-17 16:40:25.961+08 2020-09-17 16:56:54.463+08 92520c27-c002-4a35-84f0-dae3238662ae 3 1b5694d0-7aa9-4c7b-9fb9-893fa24676d5
+2b1cc86c-c2cf-4037-8280-b5ae28fcab8e 采集 \N 2020-09-18 11:09:34.522+08 2020-09-18 11:09:34.522+08 8523278f-0788-4ef6-8669-64d28b348c59 3 \N
+1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 采集 2020-09-21 09:55:14.221+08 2020-09-21 09:55:14.221+08 b6d47de4-d27f-45de-a8b2-adfedc7f0f6a 3 1c891c2f-0cd5-433b-93f1-11b7f54f9ca0
+ea8b2fda-2249-47bb-a0e7-eed50eb5de24 转发app的设备配置 2020-09-21 09:55:14.296+08 2020-09-21 09:55:14.296+08 b6d47de4-d27f-45de-a8b2-adfedc7f0f6a 2 a83bd7a7-d18e-480b-b0df-40bc78fcc3a9
+3817ac1f-6e39-4157-b1af-99d143da6fbf 采集 2020-09-28 10:33:27.942+08 2020-09-28 10:33:27.942+08 e6b4e767-9ae2-459f-99fc-042b9d6af678 3 \N
+7332ce81-93c4-4c1c-b659-caa2fc92a94a 采集 2020-09-28 10:33:27.928+08 2020-09-28 10:40:08.041+08 e6b4e767-9ae2-459f-99fc-042b9d6af678 3 03de22b4-c4d1-4c9e-a808-b9eca6c9e2c3
+7a6e0cbd-c0db-4dd6-92e7-94092fc071dc 采集 2020-09-28 10:45:02.894+08 2020-09-28 10:45:02.894+08 455f2a29-2660-4cfa-97f9-ef7f357d59d6 3 03de22b4-c4d1-4c9e-a808-b9eca6c9e2c3
+e94da122-530a-4e1b-af6f-da5b6dfb2a29 GPRS采集 2020-09-28 10:45:02.908+08 2020-09-28 10:45:02.908+08 455f2a29-2660-4cfa-97f9-ef7f357d59d6 3 \N
+59e10250-dfd7-4381-8c22-cca2e7a51ccc 采集 2020-09-29 09:28:13.406+08 2020-09-29 09:40:44.562+08 e33b5ca8-307d-47dc-afbc-01098220b4ac 3 5010d82f-8dc9-4bcc-bc9c-9349a8102b24
+c76bd374-4160-4615-8ba7-63a2f19f790b 采集GPRS \N 2020-09-29 10:15:54.177+08 2020-09-29 10:15:54.177+08 e33b5ca8-307d-47dc-afbc-01098220b4ac 3 \N
+fb325f67-e901-440b-a14e-2f8e04c53e9b 采集 2019-06-18 11:02:55.443+08 2019-06-18 11:02:55.443+08 9c72853f-96b7-41a6-ab9e-10eafbf22a10 3 fd763da6-2130-4510-81c8-d27986779983
+8afcb657-9391-4be2-9527-fbc2142bdf64 采集 2020-07-31 11:04:47.257+08 2020-07-31 11:04:47.257+08 3bfe9ce6-f4d9-4822-968e-3649d5eee799 3 \N
+c30ccd00-f637-44d0-b87a-84f158985f88 采集 \N 2020-08-26 13:33:59.346+08 2020-08-26 13:33:59.346+08 cc3c245e-aa6a-4e4e-831b-780769ec41ca 3 \N
+fe84d4c4-d79f-4a80-bd65-950c4c044636 采集 \N 2020-09-29 11:19:58.827+08 2020-09-29 11:19:58.827+08 e4de5a5f-c4cc-4e7e-bb0b-b34c28a89925 3 c10e1f69-fac2-446b-b907-7b94e3da49ed
+9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 采集 2020-09-21 09:55:16.284+08 2020-11-09 14:27:57.366+08 dc3e2b45-f9db-4aec-993a-d8369918a67e 3 2d86b406-e166-4523-941f-89ceeadbf7f7
+65de659d-c7f6-4fa3-a500-a0cead6dd856 转发app的设备配置 2020-09-21 09:55:16.36+08 2020-11-16 16:17:25.582+08 dc3e2b45-f9db-4aec-993a-d8369918a67e 2 56eeb5a2-332c-49e7-af24-4cc3649580b6
+43bce07c-dfec-4867-b501-00a047455ab9 采集 2019-06-18 15:44:35.493+08 2019-06-18 15:44:35.493+08 8b3a3d99-7016-4c26-b6b6-65b742fcfc8b 3 03803ee6-5a4a-4ef6-8356-de63aef554b3
+7f4871f5-ec20-43b3-aba7-1814a0dd53bf 采集 2019-06-18 15:48:02.203+08 2019-06-18 15:48:02.203+08 e8b1dd32-dd34-4923-a91d-e21f81210749 3 e62cf4a9-9e5c-434a-9a65-08ec2efd13fb
+b97de8e9-82aa-492d-9c8f-5d7347a24d93 采集 2019-06-19 13:58:50.989+08 2019-06-19 13:58:50.989+08 91fc5de6-ad9d-47e3-ace2-1c2bd04979e5 3 f80e7234-e166-424d-8115-f898bb1cabfd
+d7c62295-864c-44de-81e0-2cb9a03bf532 采集 2020-10-09 14:17:46.843+08 2020-10-09 14:20:04.378+08 4452ff6a-859b-45e6-9e9c-c6b59ee3667b 3 98c55c29-6b3c-417e-bf4d-f373aef4b061
+7b0f6923-300e-462b-8705-223febdd9b1d 采集 2019-06-19 17:34:39.415+08 2019-06-19 17:34:39.415+08 1b795716-096c-409d-8b43-290e31a0d4d5 3 \N
+26896cc1-415c-44cd-a3d0-36d3908ab014 采集 2019-06-20 09:22:50.971+08 2019-06-20 09:22:50.971+08 b10f2486-b1e8-48d6-8683-216a40bcb3bb 3 \N
+deca7d64-27f6-4e88-9247-34756d2e3073 采集 2019-06-20 16:55:24.378+08 2019-06-20 16:55:24.378+08 5b797de0-bd75-4cc6-9bb7-4811869ba7d3 3 8465d25a-c85a-41a7-b383-7da1e9c0c55c
+4e27a3d5-339d-47e3-9ce7-0c90068376e5 采集 2019-06-21 13:52:33.009+08 2019-06-21 13:57:20.099+08 2ea1c0ff-9d04-4a29-addb-ceaf8b4c1744 3 83f5296c-98a1-4222-a8eb-8e65d7e459cf
+69be9b12-023e-44a5-bcb9-04a192f257b7 采集 2019-06-24 16:49:45.135+08 2019-06-24 17:08:20.523+08 ec7b0da8-24a8-48ad-b64a-0ea416189d8a 3 0362b1ec-f7ee-4a7e-b0ec-612320d76bbf
+a6a9bd4f-093d-4573-8511-3d805c7fbe9c 采集 2019-06-25 11:39:02.385+08 2019-06-25 11:39:02.385+08 3d52e349-bf19-46d5-bb7e-f1f533d10190 3 \N
+b35434b2-55c1-4aab-a689-4919d9c56da0 采集 2019-06-26 11:57:22.684+08 2019-06-27 14:04:53.632+08 32a78a97-fea6-477a-9cfd-7f512d81b40c 3 f4925c79-04d0-42e2-b326-cf291ed7589d
+75fb03c3-cdd0-48bb-8be7-db553357ef1e 财务测试 2019-06-25 15:49:19.314+08 2019-06-25 15:49:19.314+08 239fdc2a-bd0a-4cd6-b0c4-f7371f99f620 3 \N
+8792ef3b-6e91-43dc-a17b-61137d8b5734 Door#2 State \N State of door#2 2019-07-15 13:36:37.242+08 2019-07-15 13:39:37.012+08 01da29ac-f803-4381-ae7f-28264effac4f 3 bbd0c618-985d-47a7-b844-e4831697168b
+eb07419e-1090-4ef1-87af-c365af7a63d1 Temperature \N Temperature of chill 2019-07-15 13:40:16.517+08 2019-07-15 13:40:16.517+08 01da29ac-f803-4381-ae7f-28264effac4f 3 \N
+b071ffa1-9fb5-4fac-8295-cecff8edaa95 采集 \N 2019-06-27 09:35:05.706+08 2019-06-27 09:35:05.706+08 9f8addd9-3d2e-434c-bc28-e73322276c7a 3 f351ad03-a539-4ec7-8a2c-429209e9c03a
+f5661460-2f34-481a-b54b-31c212613ecf 采集 2019-06-27 09:35:21.023+08 2019-06-27 09:35:21.023+08 4b13a538-ac93-4bc0-8515-4181c57b8650 3 \N
+936e35a2-2147-461d-8713-c4149317fb19 采集 2019-06-27 09:35:29.136+08 2019-06-27 09:35:29.136+08 d1d8105f-3b3d-4c89-a378-2e76afbb6f36 3 \N
+e2d1416d-c8a6-43c7-ad2f-08d498e323a1 采集 2019-06-27 13:03:58.348+08 2019-06-27 13:03:58.348+08 1c182e32-a4cb-4882-991a-be791c200d73 3 cf7c40e3-05b5-4080-9814-8daf77e75127
+ccf2e82b-5de5-4291-849a-390a0c957088 采集 2018-06-21 13:53:07.645+08 2019-06-27 13:53:35.187+08 aa4c3887-4040-4ac1-a908-4ae45f754c3b 3 f4925c79-04d0-42e2-b326-cf291ed7589d
+02bedcab-6954-4215-aa33-80fd484bda13 采集 2019-06-27 14:07:45.235+08 2019-06-27 14:07:45.235+08 db69fe15-3a1d-46c9-9e21-5bef4ff4e964 3 f4925c79-04d0-42e2-b326-cf291ed7589d
+ee3cecd5-4646-4a7d-8ade-1993d81887e4 采集 2019-06-27 14:28:06.365+08 2019-06-27 14:28:06.365+08 35ce9dd7-8476-4933-8a0a-27ada0e8ddf0 3 f4925c79-04d0-42e2-b326-cf291ed7589d
+c164c829-5622-47f6-8164-a992be4b9e2a 采集 2019-06-27 15:43:13.194+08 2019-06-27 16:11:46.638+08 193aabad-c6d8-4ec6-8ca5-df2c25ae71e2 3 d873976f-2150-4a9e-8f8f-5b68dcdd0420
+bf758132-c5a1-4622-a2a7-38359c9cc0c5 采集 2019-06-27 17:01:33.253+08 2019-06-27 17:17:15.044+08 65b11e66-836c-4898-bde7-46706a2f74af 3 bd2808a9-fbd4-4f04-a674-d3604806b95c
+fad3ba62-b4d5-4a90-b1ec-8ca32c7ba7ac 采集 2019-06-27 17:34:29.07+08 2019-06-27 17:34:29.07+08 4657f5dd-e39e-4be0-bc95-833443066096 3 bd2808a9-fbd4-4f04-a674-d3604806b95c
+9a53f8b2-9b6d-4ebd-bafa-1b3e01b404b6 采集 2019-06-28 09:51:38.282+08 2019-06-28 13:51:13.399+08 f25dac37-cd4c-4f51-b8ff-1d5d051fb21e 3 d2f13e5e-dc6e-447c-b8f1-159f56c50f88
+f52408eb-cc49-4576-ba3d-726ab9d6d9f5 采集 2019-06-28 14:47:16.387+08 2019-06-28 14:47:16.387+08 0df71d00-3d48-44a5-9c6f-8cceae090b0d 3 603b098f-f66e-4730-99b8-38fd8474636d
+418a4cf1-2537-4f0c-ad3d-d7752a5957a8 采集 \N 2019-07-03 11:33:56.787+08 2019-07-03 11:33:56.787+08 de5f1899-8b36-4792-b34f-44a6f7748a86 3 d58ecc11-f676-48e3-b96e-1bb9f468720c
+1961c932-469f-4e15-8dee-38cf1f837d35 Temperature \N Temperature of chill 2019-07-15 14:04:02.92+08 2019-07-15 14:04:02.92+08 151950ee-2a96-4cb7-a2c7-8b8e15dcae36 3 \N
+04f5706d-f963-435b-9341-68c5249dfa02 采集 \N 主动上传 2019-07-04 10:07:17.116+08 2019-07-04 10:09:53.292+08 433dc632-5b76-47eb-8a4f-eb40b4ba71bb 3 64dc7d39-4bc6-48b1-b0b3-4f7faa6dfb2f
+76e98b1c-597d-456d-aee5-53d0b95466f0 Configure Sync 2019-07-06 16:53:20.947+08 2019-07-06 16:53:20.947+08 d926295e-4fda-4948-a719-bf6e04d96ddb 2 3e1d46a6-f0b7-4db2-87c7-027e6c5b65c6
+2b4f0f98-d9ce-4941-8970-dd1bfed3512d Data Handle 2019-07-06 16:53:20.958+08 2019-07-06 16:53:20.958+08 d926295e-4fda-4948-a719-bf6e04d96ddb 3 68855ea0-10d0-4ff5-bbed-98a4ae220997
+bef735a7-a116-4448-8c98-c27e6f83fab2 State 2019-07-06 16:55:42.744+08 2019-07-06 16:55:42.744+08 6980d68e-b6b4-4ab2-a048-042672a46cef 3 bbd0c618-985d-47a7-b844-e4831697168b
+8f23910e-3c7c-4113-b420-88df899c7a25 Temperature 2019-07-06 17:22:08.74+08 2019-07-06 17:22:08.74+08 7b879c12-2bc2-4ff7-a2ba-b730169c30c9 3 \N
+2d4b1549-a50d-4ec2-80a2-600f6eb2efa1 Basic \N 2019-07-06 18:56:53.637+08 2019-07-06 18:56:53.637+08 6980d68e-b6b4-4ab2-a048-042672a46cef 3 \N
+3c5cfd97-4900-4001-95e5-6d3b6790bec8 Power \N 2019-07-06 19:01:23.526+08 2019-07-06 19:01:23.526+08 6980d68e-b6b4-4ab2-a048-042672a46cef 3 \N
+a690c2d9-43b0-4c5d-b667-5020ef18e4ec 采集 2019-07-09 08:53:49.459+08 2019-07-09 08:55:06.293+08 df281eec-f674-4f68-bd65-ed56abf4f20c 3 \N
+c61698d6-e360-4e40-a141-960ee17d0aa4 采集 2019-07-09 15:00:57.815+08 2019-07-09 15:01:31.969+08 676c48ff-13c3-426f-9871-989570d76ef9 3 46f179ce-6108-4ecd-a414-a184cb2b5de4
+dbfb4fed-6353-4527-b6f7-b9af08f37fe1 数据 2019-07-09 15:05:43.549+08 2019-07-09 15:05:43.549+08 c2508e96-b2cc-4a5f-8015-aa9492a11193 3 \N
+6ed9c2d8-4e87-43ed-b925-94a17a305bbf 采集 2019-07-09 15:10:11.937+08 2019-07-09 15:10:11.937+08 4fa8750d-807d-4c0c-9526-2662418f6f2f 3 \N
+cf9e3897-d9bb-4d08-b13d-18e90e48a3ac 下发 \N 2019-07-11 16:57:42.22+08 2019-07-11 16:57:42.22+08 eccb6310-f340-4668-9469-3df210aa471d 2 040b16d3-afbd-46d8-bd00-71364dbbcf02
+959bf8b8-23eb-48da-8362-90d4978c9406 Temperature \N Temperature of chill 2019-07-15 14:31:13.737+08 2019-07-15 14:31:13.737+08 7b8591c6-00a5-4a8f-9da0-f325fc60e8fa 3 \N
+e8b16798-e46b-4d0f-a93b-c03757601b0c Door#1 State \N State of door#1 2019-07-15 13:28:34.588+08 2019-07-15 13:39:28.983+08 01da29ac-f803-4381-ae7f-28264effac4f 3 bbd0c618-985d-47a7-b844-e4831697168b
+0279aa9d-29eb-47eb-80ea-8bc7e0fa5541 Door#2 State \N State of door#2 2019-07-15 14:04:02.941+08 2019-07-15 14:04:02.941+08 151950ee-2a96-4cb7-a2c7-8b8e15dcae36 3 bbd0c618-985d-47a7-b844-e4831697168b
+f3177595-13d3-468c-8451-4677a7f3a0ef Door#1 State \N State of door#1 2019-07-15 14:04:02.957+08 2019-07-15 14:04:02.957+08 151950ee-2a96-4cb7-a2c7-8b8e15dcae36 3 bbd0c618-985d-47a7-b844-e4831697168b
+cfb789ad-d761-4e5c-9f64-b9f87161c6a0 Door#3 State \N State of door#3 2019-07-15 14:05:53.116+08 2019-07-15 14:05:53.116+08 151950ee-2a96-4cb7-a2c7-8b8e15dcae36 3 \N
+69b276a3-aa72-4720-9591-cd371e95b7de Door#1 State \N State of door#1 2019-07-15 14:31:13.674+08 2019-07-15 14:31:13.674+08 7b8591c6-00a5-4a8f-9da0-f325fc60e8fa 3 bbd0c618-985d-47a7-b844-e4831697168b
+578138e6-3a9c-4db2-bbf9-addfef22c072 Door#2 State \N State of door#2 2019-07-15 14:31:13.716+08 2019-07-15 14:31:13.716+08 7b8591c6-00a5-4a8f-9da0-f325fc60e8fa 3 bbd0c618-985d-47a7-b844-e4831697168b
+2a2fd581-a5d0-4bfd-b7ab-2c2d504bc034 采集 2019-07-16 17:46:08.889+08 2019-07-16 17:46:08.889+08 d3d5de96-da53-4adb-b8f8-29d0e0c8209c 3 \N
+c8ab31aa-0550-4b56-b062-20566f8edef5 采集 2019-07-17 14:29:44.533+08 2019-07-17 14:29:44.533+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 3 \N
+7e6d0c55-7f14-4df6-b630-7e9bca15f6f3 323 2019-07-22 10:33:56.627+08 2019-07-22 10:33:56.627+08 6d2dad31-9715-4522-a382-9b1b99f9bebc 3 \N
+c8050ea0-29fc-4675-9198-3a4c438aafff 采集 2019-07-22 16:03:30.01+08 2019-07-22 16:03:30.01+08 68885fd4-0280-410a-bf22-3afadec546f2 3 a92e19e7-5ed2-4b53-8bd5-781c242f27f6
+e36b625f-b336-45f2-a421-47deb3ccff39 采集 2019-07-23 09:33:53.805+08 2019-07-23 09:33:53.805+08 a83dcd92-561e-40ba-b71c-b6d062d2bcb3 3 dc5d5da7-4105-4b48-9969-e9da5c70a387
+7b76cdc3-1393-474a-9868-b48a35519a53 采集 2019-07-23 11:13:52.731+08 2019-07-23 11:13:52.731+08 8830f3b8-1be3-48ae-b1d0-8a9583cf4a18 3 504318da-e1b0-4c7b-b1a9-c959115c5235
+911e12ca-0961-481e-bebb-0201c63f0cd2 文件传输 \N 2019-07-23 19:50:12.509+08 2019-07-23 19:50:12.509+08 131c98fc-2216-4f0f-9cd3-581d88f9affd 3 \N
+97d28bd7-4126-40cd-aff4-ba6db048ae15 文件传输 \N 2019-07-23 19:52:59.54+08 2019-07-23 19:52:59.54+08 9e8050a9-f38a-45c3-a02b-40670bdf19b7 3 \N
+9f777c35-b431-4a11-aeac-979ad0a3f1ac 文件传输 \N 2019-07-23 20:06:45.194+08 2019-07-23 20:06:45.194+08 bff19d80-ce20-4c3d-b158-df091a1fb5ac 3 \N
+82905dcc-a3ca-4ecb-b0d3-d7e32ec6f958 文件传输 \N 2019-07-23 20:33:13.466+08 2019-07-23 20:33:13.466+08 7efbc3e8-ff6b-433b-9041-c76b9df89644 3 \N
+55c2a1eb-5dad-4181-86f8-9145d71e8077 采集 2019-07-26 11:18:48.467+08 2019-07-26 11:18:48.467+08 70cf173e-f529-4704-805e-193f1a6478cc 3 \N
+98affd25-d0f7-47f2-abe9-5dc74bdfb02f Energy consumption \N 2019-07-26 13:52:18.174+08 2019-07-26 13:54:09.317+08 64af86ba-2ede-48c5-b410-7e40264cdd8a 3 bbd0c618-985d-47a7-b844-e4831697168b
+37b692f8-71bc-4741-928f-5eba35682efc Voltage \N 2019-07-26 16:32:46.702+08 2019-07-26 16:32:46.702+08 64af86ba-2ede-48c5-b410-7e40264cdd8a 3 bbd0c618-985d-47a7-b844-e4831697168b
+4801d3ef-12b9-41d2-bea8-f20ddeb90568 Electric Current \N 2019-07-26 16:36:36.78+08 2019-07-26 16:38:11.729+08 64af86ba-2ede-48c5-b410-7e40264cdd8a 3 bbd0c618-985d-47a7-b844-e4831697168b
+6545a9cc-c2d6-4477-ba72-3db5a96d2ad8 GPRS \N 2019-08-22 11:37:33.011+08 2019-08-22 11:37:33.011+08 0a341896-3c5d-4e60-af19-fe5f645c6967 3 \N
+85cd155d-f611-4694-8051-4d81fbef2028 配置下发 \N 2019-08-22 11:37:44.95+08 2019-08-22 11:37:44.95+08 d6189068-bb18-4c68-a359-8e3139ab22e5 2 bc33df8d-ef27-4fa0-92cd-770a83216eee
+c2632f26-f172-4ed4-bc84-48cc89b6e36a cmd \N 2019-07-27 11:32:00.712+08 2019-07-27 11:32:00.712+08 64af86ba-2ede-48c5-b410-7e40264cdd8a 2 bbd0c618-985d-47a7-b844-e4831697168b
+16eac313-4d5b-4b3b-960b-e3c3b7fbe450 采集 2019-07-31 10:14:14.849+08 2019-07-31 10:14:14.849+08 390e46cc-b69d-4966-89f4-d305afdd4649 3 3628b3d2-595b-4889-a7a6-8b68f2953389
+e7674511-d506-492f-9321-966a9efe6971 采集 2019-07-31 16:04:11.149+08 2019-07-31 16:04:11.149+08 ce76608b-0e66-4498-b079-51aa9f03c950 3 \N
+b781fb04-d60a-46c0-9081-e7ce553bb7e3 Power \N 2019-07-24 17:44:30.79+08 2019-08-03 18:26:25.691+08 64af86ba-2ede-48c5-b410-7e40264cdd8a 3 bbd0c618-985d-47a7-b844-e4831697168b
+64576b12-36a8-4ca6-ac63-273401d692c6 文件上传 \N 2019-08-05 09:26:48.711+08 2019-08-05 09:26:48.711+08 32349c76-d117-4331-8a10-9b7ea057c2ab 3 0bd15600-333e-47d6-b4fb-c3b8b26c2dcf
+616814a6-1aac-4201-b9cd-8164fd2198f0 GPRS \N 2019-08-22 14:17:19.448+08 2020-04-05 12:09:45.44+08 6ac55754-f252-4ba5-ba9c-72a158734b97 3 \N
+6ddff0ae-11d3-40f2-8e9c-2ddf160489d8 采集 \N 2019-08-22 09:15:45.957+08 2020-04-14 10:57:04.049+08 5b40bb69-7692-4cee-b6df-bd7871764131 3 12414de7-dac4-4966-aaa1-89db04cc97bf
+32f98475-6b76-4723-a2f5-b0b7aed04cf7 采集 2019-08-05 18:12:12.138+08 2019-08-05 18:13:22.787+08 077e62b4-27da-47aa-846d-3d9169a8a895 3 618252ec-97d7-432a-ade1-4dac9223934c
+16beb620-de9c-4137-a7cf-e63da5b0108c 采集 2019-08-05 18:14:48.66+08 2019-08-05 18:14:48.66+08 1c7ee1c6-3d99-4236-834f-6e0746c0f69f 3 \N
+33bba333-0d20-43b4-a0e4-7dfaba4a9896 采集 2019-08-06 11:00:53.839+08 2019-08-06 11:00:53.839+08 df7ff0f8-b92c-4856-a1af-bf3244a8610a 3 e44f9a31-032c-40f5-9598-6ecbae372f1e
+008ccbe4-2335-4ad6-98e4-57807ab4de7e 采集 \N 2019-08-07 10:27:40.172+08 2019-08-07 10:27:40.172+08 f0c82197-9e9a-42f2-a4e2-541c52deff52 3 2993963e-1c39-4e49-b5a2-b8349d634fc2
+13b1b357-66cc-467f-9f25-078c46fe28b6 采集 \N 2019-08-07 10:34:16.584+08 2019-08-07 10:34:16.584+08 6fb1b711-d8c0-489d-9751-524410c27bcc 3 \N
+5848ef89-cf06-481f-8044-51774b0a2694 采集 2019-08-07 10:40:39.069+08 2019-08-07 10:40:39.069+08 bfe0979a-c0e4-4430-89d3-5fbe86568640 3 81741880-ebc8-42d9-bf53-1c6def33376c
+9ceb3806-c599-431c-b278-80ea9d6db7ba 调试下发 \N 2020-10-09 14:18:40.672+08 2020-10-09 14:19:56.434+08 4452ff6a-859b-45e6-9e9c-c6b59ee3667b 2 7fb4d0a4-2890-4ce3-a95d-5e4893fb7b8b
+09943af3-4f49-495c-8612-c63a3a407e28 采集 2019-08-08 15:55:26.53+08 2019-08-08 16:08:27.675+08 8e44219e-9d4e-40ed-85b7-85dd24f8e821 3 1ed92105-cedf-4667-b966-db32e28771c8
+75960822-83b9-4eb4-accd-bbccb4f4d139 采集 \N 2019-08-08 17:57:55.408+08 2019-08-08 17:57:55.408+08 9de2769d-cd81-43c4-ae6d-82f4cb9431de 3 d667ae82-81b1-4f2e-94ba-9e7c4741101b
+1e9d3e4b-b208-4686-822c-c164a4f9cf7f ConfigSync 2019-08-09 13:11:50.739+08 2019-08-09 13:11:50.739+08 3758c306-d352-4ff8-b9ef-470a58efa0a4 3 \N
+8f177fbf-0fed-4306-a80b-6a2751f5fb9b GPRS \N 2019-08-22 11:41:46.105+08 2019-08-22 11:41:46.105+08 4142b1cc-3576-456b-b0e4-31e68cc16b32 3 \N
+106bec29-1b71-4f53-aab5-ad3d19c17116 DataHandle 2019-08-09 13:11:50.746+08 2019-08-09 13:16:39.31+08 3758c306-d352-4ff8-b9ef-470a58efa0a4 3 \N
+f51d17c7-ad54-48ce-997c-13c1fb3ab155 采集 2019-08-12 09:55:16.28+08 2019-08-12 10:05:14.765+08 e257dc56-f70f-4ba8-b653-c5d047f9edba 3 83f972a0-ce28-4095-a775-1d9627256ed9
+f31682e1-01ba-49e5-9639-886bee03cd1b 采集 2019-08-13 17:52:48.306+08 2019-08-13 17:52:48.306+08 a7c51497-66e3-4e63-aa6f-7b243fb8ea77 3 \N
+eb5ec9d1-8ab7-49ea-8ced-3602ed68f445 采集 2019-08-19 10:39:47.472+08 2019-08-19 10:39:47.472+08 aa0e3416-fabe-4415-a848-d6cd84a500dd 3 e9f04fcd-34ad-4e77-919a-cce8ac4c19e9
+2a244b5c-9f1b-4432-8302-2fc036a91a14 采集 2020-10-10 10:46:03.631+08 2020-10-10 10:53:58.036+08 fa3e1751-abcf-43d6-89d5-ad9bc9a979b6 3 f24b6f4a-a267-40b7-aca0-1971f916bd81
+a717ab85-b28a-45e5-a9f2-4ed179975b6e 转发app的设备配置 2020-10-10 10:46:03.623+08 2020-10-10 10:54:56.534+08 fa3e1751-abcf-43d6-89d5-ad9bc9a979b6 2 f24b6f4a-a267-40b7-aca0-1971f916bd81
+de5f27da-de79-4d11-a4ca-65bc1a9f178a GPRS \N 2019-08-22 11:04:32.31+08 2019-08-22 11:04:32.31+08 0b09cbd9-3881-4b4a-8910-0e8730d5d935 3 \N
+bdcb0ea7-10de-4b76-80bd-c01f036ccd33 GPRS \N 2019-08-22 11:27:45.891+08 2019-08-22 11:27:45.891+08 4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66 3 \N
+0f06e6d2-1ad3-4cad-92a2-c3a23e36206b 采集 \N 2019-08-22 11:51:37.059+08 2019-08-22 11:51:37.059+08 d6189068-bb18-4c68-a359-8e3139ab22e5 3 2320be85-4d6f-4041-96c3-ddb2a166fbda
+451d64cc-b568-44be-bace-184e24b4e827 GPRS \N 2019-08-22 14:09:28.316+08 2019-08-22 14:09:28.316+08 19bb2b93-6e2e-4861-95df-67a68bc71fc4 3 \N
+84e805aa-df66-43bf-9705-01e6b6c1e741 GPRS \N 2019-08-22 14:20:43.393+08 2019-08-22 14:20:43.393+08 03f53a90-43a0-47d6-9183-edfb825a09e5 3 \N
+9fe86237-419a-40b2-890a-00e0bb8d4af7 GPRS \N 2019-08-22 14:28:44.635+08 2019-08-22 14:28:44.635+08 6e1d3878-3ea2-4c73-9137-0ef98781be0c 3 \N
+aa7aaf91-1e54-411a-b174-22ee7c40c07e 采集 \N 2019-08-22 14:36:13.044+08 2019-08-22 14:36:13.044+08 12253047-b588-4225-9f55-e6282003788a 3 \N
+ff22ed2b-4d22-47b5-b0e1-9d35c72caf99 采集 2019-08-01 15:00:23.358+08 2019-08-26 11:02:04.243+08 f75a7b9a-2288-4f05-b3ec-5f17a297e53c 3 bb65a921-da11-46bf-a625-cbeb6afd0edf
+4e08e98b-f49d-4032-bade-d8145cd4bad7 采集 \N 主动上报 2019-08-27 09:54:34.297+08 2019-08-27 09:54:34.297+08 ec8018e2-1de6-4384-ac85-01405362dc83 3 789632f0-828c-4e10-992b-03b466bd7bb4
+5af22086-4fb6-4d39-b439-f1bfb44b2bcf 采集 2019-08-27 15:43:12.981+08 2019-08-27 15:43:12.981+08 3bf54b2d-1623-4920-80c2-4e1f7407b318 3 \N
+7d5f863e-8fad-4de4-a417-48b29d1df1de 采集 2019-08-27 16:31:15.679+08 2019-08-27 16:31:15.679+08 8c23f875-86cf-4fe7-a315-526c7a1d0187 3 \N
+2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13 Edge Status \N 2019-08-30 12:05:47.854+08 2019-08-30 12:11:38.821+08 d926295e-4fda-4948-a719-bf6e04d96ddb 1 68855ea0-10d0-4ff5-bbed-98a4ae220997
+5664cb08-5e57-46c1-ac71-23220613639c 采集 2019-09-04 13:53:37.956+08 2019-09-04 13:53:37.956+08 c3ed0f20-828b-46bd-b8ef-b7821cd0fcce 3 \N
+034ff83b-34b0-48a5-9ccb-774a844901f8 微功耗 \N 2019-09-04 15:12:14.199+08 2019-09-04 15:12:14.199+08 7efbc3e8-ff6b-433b-9041-c76b9df89644 3 \N
+58baaabd-502a-4f68-a62d-c0cfeddd7ec4 采集 \N 2019-09-04 15:22:34.892+08 2019-09-04 15:22:34.892+08 1c9756ed-dcf4-4156-9a43-09ce478d2038 3 \N
+e52f95e1-8fac-40af-a49a-baad70dab906 采集 2019-09-04 15:40:23.389+08 2019-09-04 15:40:23.389+08 aa630d67-b466-4f6a-9a04-fe5744954d20 3 \N
+cf8445c6-e70a-419f-8a2f-ba7f44896604 采集 2019-09-04 15:48:38.137+08 2019-09-04 15:48:38.137+08 e600502e-b2ff-466a-9fa6-b9e9e554647c 3 \N
+a7d88dec-6a2c-4ab2-8b2c-864f8c9a5eab 采集 \N 2019-09-04 16:08:42.921+08 2019-09-04 16:08:42.921+08 0e7784d1-0cbf-46aa-b156-e3361a3251e4 3 \N
+63cf9ae9-373c-4b2c-82de-58d3172094bf 采集 \N 2019-08-22 14:36:51.812+08 2019-09-06 10:08:00.098+08 a0d7ec2d-24f8-4039-b175-8921c00c1f4f 3 a9269cd1-57a8-4731-a70d-ef619cc8ee96
+5dea6ab3-3969-4e41-804f-eff249d5d9ce 采集 2019-09-10 14:47:17.481+08 2019-09-10 14:47:17.481+08 70c53b9c-f7ec-48ce-b790-bd96754d2d3b 3 \N
+e830e2fb-b382-4679-b8db-c7e2afeed47b 转发app的设备配置 2020-10-10 10:46:11.529+08 2020-10-10 10:55:07.353+08 f0d5077b-4260-422c-87e3-92d13d136ebf 2 f24b6f4a-a267-40b7-aca0-1971f916bd81
+f1841b24-8182-4a14-ae68-c0bad62cec3f GPRS \N 2019-09-10 16:52:37.759+08 2019-09-10 16:52:37.759+08 42eb2303-14bd-4431-9ca6-d5b8b2590d1d 3 \N
+10c5b435-17c1-49f9-b45c-6a61c35f8071 采集 2019-09-10 16:52:37.768+08 2019-09-10 16:52:37.768+08 42eb2303-14bd-4431-9ca6-d5b8b2590d1d 3 \N
+7cb252c1-fad7-4874-bc56-417537d2d35d 采集2 \N 2019-09-10 16:52:37.746+08 2019-09-10 17:05:25.325+08 42eb2303-14bd-4431-9ca6-d5b8b2590d1d 3 aa948108-11fb-414d-a182-29cbc7bf1cce
+7a7c3f51-9057-44b5-b7e7-ea9b73c89a50 采集 2019-09-11 10:15:40.126+08 2019-09-11 10:29:02.876+08 f34762e6-6532-434e-93a0-74c119cfc58a 3 2f3066b9-d373-419e-9dac-5c0797ed3112
+799b57ce-6f05-46b8-8d02-8b0e71997270 采集 2019-09-11 11:36:46.125+08 2019-09-11 11:36:46.125+08 798b891d-6c34-4219-bde6-a8d957643010 3 ff2477e1-9a33-4ccd-99d4-e1d703b18f39
+1fdc974b-f062-45cb-910f-13b5a193e084 采集 2019-09-11 11:57:38.684+08 2019-09-11 11:57:38.684+08 36ddd8af-d58c-4496-ae9a-ce9cb9786cd5 3 3f78df73-bc71-44fb-8d74-74062d845305
+b57f384f-11d7-499f-8e6f-5bcfbc054334 采集 2019-09-16 16:50:20.699+08 2019-09-16 16:50:20.699+08 c89d02cd-f052-4004-aa3e-93906248a62b 3 4f00f469-4a6a-41a1-94fa-7f669cfbed12
+7915bd50-f8d3-4c3b-b9a6-fa1fe10f00e6 采集 \N 2019-09-17 09:35:57.984+08 2019-09-17 09:35:57.984+08 69f9043f-2ce4-4d39-97fe-94f6c2f6185c 3 f186407a-b804-4ce8-ac19-989d7296dba7
+7cb1a32e-60d7-4241-b1aa-4a2fadd39d82 采集 \N 2019-09-19 09:41:34.181+08 2019-09-19 09:41:34.181+08 6225c8bb-1497-4354-ad28-e5eb698de9f0 3 7c5f67f4-aa30-4f95-bc24-3de551e8dc36
+c90e6cc1-21a1-44ce-9ab1-77c8808b3fe2 GPRS \N 2019-09-19 12:42:11.933+08 2019-09-19 12:42:11.933+08 8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea 3 \N
+ef5fc14d-bace-4e50-a536-81112feb65a8 GPRS采集 \N 2019-09-19 16:41:31.458+08 2019-09-19 16:41:31.458+08 a6d30b7e-a718-4cbf-80be-2ddefa2445ab 3 \N
+1155c110-625f-47ac-b8bb-f85733b50122 采集 2019-09-24 11:35:40.029+08 2019-09-24 11:35:40.029+08 da5f4309-1696-4853-94ef-f11b9d0602e0 3 \N
+dd622fcd-0936-4ede-855b-50f5439f0fe1 采集 2019-09-24 11:35:42.569+08 2019-09-24 11:35:42.569+08 59e0e84c-3ab8-485a-a6fc-d880a79b296a 3 \N
+35c6a683-69d3-43c9-af6e-ac9c72bab707 采集 2019-09-24 11:44:07.134+08 2019-09-24 11:44:07.134+08 b20e46ed-a619-476a-9c50-88e1b8ea3697 3 \N
+cd84b56e-7ef8-4b5b-ab86-ebefb3e7706f 提取日志 \N 2019-09-24 11:48:21.027+08 2019-09-24 11:48:21.027+08 d929c576-62dd-4f0c-a2cc-15120347b903 2 2c405e11-e6dd-407b-b5db-edb86696ce83
+d08e3d1f-ce1b-4f62-a2b7-0acb0e48a942 采集 2019-09-24 11:49:24.127+08 2019-09-24 11:49:24.127+08 4ccb1624-a210-4672-9951-0dbf335dcdb1 3 \N
+723258be-4d0f-4a3b-9e4b-da3c3dd14524 日志提取 \N 2019-09-24 11:50:48.675+08 2019-09-24 11:50:48.675+08 9aa93498-820e-4fc6-a288-5b2274fb9246 2 48846ad7-8fa9-4e52-85a3-cf76a8f4b8ac
+5dc53d97-b267-49c4-a4be-f289a2812764 日志提取 \N 2019-09-24 11:53:37.807+08 2019-09-24 11:53:37.807+08 fa0123d0-7db7-4412-9670-53175d0c2c40 2 00e607a1-c022-4399-9cd1-54d2dc2705d3
+ef0dc799-e1ec-4fb3-86f7-2ac498f26f55 采集 \N 2019-09-24 13:53:48.14+08 2019-09-24 13:54:21.754+08 c209cbd1-8662-42e5-81d2-6cba239aa394 3 b9716d39-3f65-4cd7-9fb9-4214e050b117
+a308f5d2-2559-4f60-8323-c243f04ce8cd 采集 \N 2019-09-25 10:41:37.033+08 2019-09-25 10:41:37.033+08 fe3a614d-329c-4b70-99ff-f95ccb28ab79 3 \N
+806e534e-417f-4802-a29d-23edbe5ac02d 采集 2019-09-25 10:49:31.382+08 2019-09-25 10:49:31.382+08 37bc2c29-264c-4366-8fe1-9c2984702b94 3 \N
+8dc2cfaa-524f-4b62-b655-1061f1a863ff 采集 2019-09-25 11:07:08.052+08 2019-09-25 11:07:08.052+08 d756ead6-3c0a-4d1e-be3f-dde6e031a048 3 \N
+804133e0-c4a4-441e-acb9-a504734bbd62 采集 2019-09-25 11:19:02.075+08 2019-09-25 11:19:02.075+08 f7374ca5-78cb-4578-bfe3-df32eb350d05 3 \N
+1bcbd000-415e-460a-a4f2-63d8f232bbf6 采集 2019-09-25 11:24:05.373+08 2019-09-25 11:24:05.373+08 50fc0df9-2b02-445b-b04e-17209e8c69ee 3 \N
+d9ea813b-d066-472d-b08e-2436f6520e9f 采集 2019-09-25 11:32:47.407+08 2019-09-25 11:32:47.407+08 005826c9-dd60-4013-99bc-da28bc0d9c93 3 \N
+88ec5756-da5e-4fa0-b882-39727baf501b 采集 2019-09-25 11:38:34.945+08 2019-09-25 11:38:34.945+08 8392cdb0-52c7-4fee-8ace-a64e5cf86240 3 \N
+a58243c4-2874-46f4-86b9-bc864f203eec 采集 2019-09-25 11:51:56.961+08 2019-09-25 11:51:56.961+08 5102e0bc-4778-43b6-80d3-fd71e4032088 3 \N
+3d535ccc-ec09-44f8-b278-5e93d4ff79ae 采集 2019-09-25 11:54:59.65+08 2019-09-25 11:54:59.65+08 73ac8e46-173b-4f23-bb89-edd506496e34 3 \N
+22da5422-3017-46d1-b154-701f9a128e3c 采集 \N 2019-09-25 17:13:20.306+08 2019-09-25 17:13:20.306+08 f535897b-dc69-4835-b0d7-b4a6062db938 3 \N
+f12659ce-b28d-4602-a33a-879eedbbbcaa 采集 2019-09-25 17:25:19.274+08 2019-09-25 17:25:19.274+08 f29e4bb2-0e42-4016-b27e-f2377c115ff1 3 \N
+c1c93d31-aef7-48fb-bccc-f3f76ec1689a 采集 \N 2019-09-29 11:25:24.018+08 2019-09-29 11:26:30.118+08 a47565e1-92e5-41e9-ba98-79a93065f0ee 3 60b3c120-3fc4-4e3f-b5ec-85d4a53b72af
+3f518643-909e-45c6-b816-3cabb1fd8af9 采集 \N 2019-09-29 11:32:07.985+08 2019-09-29 11:32:07.985+08 dc1bdab2-ae0f-4ecc-8ce2-86d40ed2d08c 3 4930470c-205d-414f-aa01-bf60c835c3c9
+f3923edc-71cc-43bd-a3a5-48894181f917 采集 \N 2019-09-29 13:32:12.557+08 2019-09-29 13:32:12.557+08 594ffc3d-f245-4a5e-8843-9448105cb86d 3 dfa3967f-3c30-459f-82f0-7d8efa88fb05
+8a578a79-fd96-4c69-8069-99e4e77dbbf9 采集 \N 2019-09-29 13:35:44.789+08 2019-09-29 13:35:44.789+08 a4e6dddc-930c-4704-9c93-9a8d78da81cb 3 4de81ee8-2530-4c2b-82ee-aa3fa3a8b381
+b9a786ad-b6be-4aa7-9aca-43b903852ad0 采集 2019-09-29 14:37:47.023+08 2019-09-29 14:37:47.023+08 569fbb47-7ddc-4dd9-a1d0-e9e15d4ac448 3 53dcd683-cb5d-4ac5-9c53-d5305893edd5
+b58daded-2fb1-4ea1-a68d-bdb20b492fdf 采集 2019-09-29 15:43:10.889+08 2019-09-29 15:43:10.889+08 c96dced7-2915-4087-9ba5-b6f9bdc35f89 3 a5fa6229-dace-45db-8d8b-0268e2c892b2
+acc72050-2df9-4098-81f2-863eeb756ff8 采集 \N 2019-09-29 16:28:26.958+08 2019-09-29 16:28:26.958+08 f190bf5a-78ab-4963-aac1-2fda921f2507 3 0b43e37d-9ca2-428c-b636-ea381d1645e3
+15e2a325-246a-4e43-8bea-784596788377 采集 \N 2019-09-29 17:52:28.811+08 2019-09-29 17:52:28.811+08 0edf8e7f-0f5f-440a-a83a-333e5d90a2ef 3 \N
+f34514f6-cca7-4baa-89e2-d57be4bd26e2 采集 \N 2019-09-29 17:57:27.736+08 2019-09-29 17:57:27.736+08 7eee6239-5a81-4979-ab6f-43a1b3e8d570 3 408b3be5-3a50-4c01-8432-9de0ecd0607a
+284b9b6d-6aaa-4ec4-a075-d2bb4817d6fe 采集 \N 2019-09-29 17:59:29.403+08 2019-09-29 17:59:29.403+08 83759876-3d92-4218-8efb-ea36dc6d81ef 3 \N
+5daa9060-cbbb-4736-ba79-7440d7d8178a 采集 2019-10-08 13:42:51.585+08 2019-10-08 13:42:51.585+08 f19f1e04-8739-4652-9869-5fe16698e82e 3 19b75009-14b8-45df-8924-0cc8d5a5ea89
+c509c8e0-06ea-469a-9004-68542a1617e7 采集 \N 2019-10-08 17:04:35.736+08 2019-10-08 17:04:35.736+08 150f2029-8823-45cf-813a-4a6a3e427d2f 3 c181aae9-13e2-43f6-b18b-8de08bcb6181
+c996ba97-9aa2-4102-9c84-4020cfe7bd30 采集 2019-10-09 13:09:24.416+08 2019-10-09 13:09:24.416+08 8dc6a5c3-3f5b-40a8-9a90-d6b7b2cae471 3 \N
+6f7568b7-e717-4cf9-9eb4-2d7f91a8fed4 采集 2019-10-09 13:11:20.976+08 2019-10-09 13:11:20.976+08 7ce5e1fb-e335-4fa0-928d-9b1032350ab8 3 \N
+0a495f63-803f-4145-a48d-f54fa7f66d22 采集 2019-10-09 14:19:59.811+08 2019-10-09 14:19:59.811+08 6cb2c0f8-0c45-42e6-97ca-56d97a4a3484 3 \N
+35547185-29e1-45d9-ac07-1c22c2166d0e 采集 2019-09-30 09:56:31.673+08 2019-10-09 16:10:35.067+08 01a43d23-84c6-4e78-bf39-7ed3a6383a88 3 9de4617d-9968-4e94-9982-75e55cba6adf
+d34cb069-c7b8-4dd5-95f7-ec88197b9650 采集 2019-10-10 09:55:12.734+08 2019-10-10 10:05:09.783+08 eaca25fa-f0bb-45cc-a5e0-59ba71654987 3 77db0016-b199-4659-8d88-718b7c6f5f12
+4b89bcb9-ce24-4016-b105-5d950bd997b0 采集 2019-10-10 10:48:36.505+08 2019-10-10 10:48:36.505+08 673195ba-381a-4dea-93e1-4f65f4d84079 3 9376f5bd-295c-489d-a21a-5bb68e15392e
+ec1d8582-b39b-4e28-a13d-0d8db91976b0 采集 \N 2019-10-11 13:23:21.187+08 2019-10-11 13:23:21.187+08 66d2c15b-394a-4b84-b7d3-b991be41d9b0 3 \N
+46632020-7139-44de-a5e8-1fa4f067df7c 采集 2019-10-11 14:16:26.985+08 2019-10-11 14:16:26.985+08 1fff247a-6494-4752-91b7-74565fa1f314 3 \N
+1e915828-7914-48e0-88bf-33430c62fd36 采集 2019-10-14 09:24:23.059+08 2019-10-14 09:31:41.052+08 6b90f580-9b05-42a8-ba6a-113143823d44 3 7edb13cb-08e0-4c27-91cc-153a1af8a708
+185c3316-9ed2-4a9c-b365-0691b303600f 采集 2020-10-10 10:46:11.468+08 2020-10-10 10:53:31.426+08 f0d5077b-4260-422c-87e3-92d13d136ebf 3 8565ec35-5b7e-4dde-8536-dd450d4c26a0
+bfcf9463-f865-4f10-9aff-33066bd6f245 采集 2019-10-14 09:45:26.524+08 2019-10-14 09:45:26.524+08 274929f9-024a-40b8-8856-eb145c334b9a 3 \N
+15c74504-c3c8-4739-8b58-10b0bcd0e83d 采集 2019-10-14 09:47:26.065+08 2019-10-14 09:47:26.065+08 c560df92-8e02-480d-8646-a66f98cc2aff 3 \N
+d3206948-c73c-49b5-a593-473e8a6bc209 采集 2019-10-14 09:49:18.029+08 2019-10-14 09:49:18.029+08 cc82fda3-8669-4810-a87a-ff57a55a3de6 3 \N
+0d6f1736-a3a0-4a8b-97dd-2cafc52767b4 采集 2019-10-14 09:52:24.123+08 2019-10-14 09:52:24.123+08 fb91aca2-dc9a-4cbb-8ece-54a5e04d6566 3 \N
+dc4ab80b-3b8a-4088-a468-06a078637a45 采集 2019-10-14 11:39:40.991+08 2019-10-14 11:39:40.991+08 b7bea944-ae59-4ec4-85cc-345e98006e52 3 \N
+e8620f1d-ab05-40a9-ba5f-197894c20a49 采集 2019-10-14 16:03:45.927+08 2019-10-14 16:03:45.927+08 1dcd0084-9a2d-43ef-9b10-1e8305ce8b06 3 d7580de5-0d54-4658-b81f-48ed26745fb4
+42d7c213-aa9e-4263-9e97-e57ed97f4342 采集 2020-10-13 10:08:39.389+08 2020-10-13 10:08:39.389+08 04ffee3d-0572-491c-9291-82dbbf14e7d4 3 \N
+8006946a-43de-49dc-b665-3603da448dec RTU 2020-10-16 11:41:30.088+08 2020-10-16 11:41:30.088+08 0b84defc-2160-4d4a-8d71-6f350b4d6666 3 \N
+15237a2c-3030-4ece-9901-f8c9c3d5e158 采集 2019-10-16 15:16:12.219+08 2019-10-16 15:16:12.219+08 30cf2191-2a9e-40dd-a83f-969d2f053e1e 3 b3a939d8-6a64-4588-afe5-6a949ce71644
+ff5ffe96-ab0f-4368-af0c-52020e8d2188 采集 2019-10-16 15:20:46.749+08 2019-10-16 15:20:46.749+08 213e2ff2-285b-445d-8661-24f6f91bf7b8 3 \N
+2ec89b60-f2d5-4458-bcc7-de0050ff50f1 采集上报 \N 2019-10-16 14:51:34.454+08 2019-10-17 14:30:36.567+08 2b04a6d8-4af7-428f-95c9-325800c4b59d 3 9b35efe3-e7d0-4364-b398-5a4a7d10ab20
+1ff1e182-a5de-4d2f-bf40-72a40dbc29e6 采集 2019-10-18 16:29:31.406+08 2019-10-18 16:29:31.406+08 b13c8811-3051-46d5-87e2-d1bbbc7853f2 3 \N
+15e1b52d-2e21-410c-a442-b7c480cc07bb 采集 \N 2019-10-20 16:11:22.497+08 2019-10-20 16:11:22.497+08 a8607ea4-e6db-4dc6-9e64-3e8db3628ba0 3 \N
+a0350e1d-e615-4e4b-ad8a-ad2a9142f6e8 采集 2019-10-22 13:45:08.969+08 2019-10-22 13:45:08.969+08 b0c1da1a-0945-4edb-9f17-e9b845030888 3 \N
+8d553a41-0d8b-46ae-8329-ff94e6009958 采集 2019-10-22 13:48:51.938+08 2019-10-22 13:48:51.938+08 109b7349-2bb0-4859-8c1a-0c7630cbd11f 3 \N
+592da43b-5c27-401b-9118-c0519ecbc5b3 采集 \N 2019-10-22 14:58:00.161+08 2019-10-22 14:58:00.161+08 f46aa0c4-ed9b-4991-8fa8-ea4c884f5c35 3 07acceff-18ad-4f11-97b8-894121af0622
+2997a6da-3093-40f9-b0e3-00b1f8c383b1 RTU 2020-10-16 13:52:59.057+08 2020-10-16 13:52:59.057+08 b7dd781d-dba7-4228-b49f-8aee75e42625 3 \N
+b28c3db2-7ea7-4311-9b60-ccd4af997bcd 采集 2019-10-28 17:22:11.036+08 2019-10-28 17:22:11.036+08 ed459df4-d57c-430e-878b-37b61111d133 3 \N
+3da2f371-f622-4f8b-b700-52af31eaa6b1 采集 2019-10-23 10:16:21.722+08 2019-10-23 10:16:21.722+08 2ea41890-89c4-4569-89ab-df3b02dc16eb 3 \N
+5b0c875e-50cb-493a-bb89-af4d008cc6e2 采集 2019-10-24 11:23:42.799+08 2019-10-24 11:26:51.32+08 cc938850-0b9a-4ab3-9712-dbf35ff157d9 3 b6893aa5-1010-4f9e-b20e-32084e9115e8
+ee19f59c-9bf5-436f-b3e9-3298da57448f 采集 2019-10-24 11:47:52.694+08 2019-10-24 11:47:52.694+08 a64fdbc7-36d7-49d9-8969-9040111aee6a 3 \N
+c12bfa47-96c4-4d82-b508-7a8dc380df18 采集 2019-10-24 11:51:03.274+08 2019-10-24 11:51:03.274+08 389a8b42-097c-411c-b534-0666e61c7842 3 \N
+249d472d-1470-4d8e-b629-3e1c3fcd772e RTU 2020-10-16 14:22:53.591+08 2020-10-16 14:22:53.591+08 1450b04e-214d-47b0-8e32-def5a361cc48 3 \N
+b8b3091d-39a3-4ad0-9c49-ba4a7b85538d 采集 2019-10-28 17:20:38.034+08 2019-10-28 17:20:38.034+08 8a550a15-96be-455e-8c81-b9e7efcc2b30 3 \N
+98d04a09-cee2-4b6f-8250-160a824e6e27 采集 \N 2019-10-30 09:09:12.593+08 2019-10-30 09:09:12.593+08 88c7c5c5-561d-4193-9cf0-91aceec9f79a 3 \N
+d4227f5a-828a-4fe2-80c5-bb09da246b47 采集 \N 2019-10-29 11:00:04.414+08 2019-10-29 11:00:04.414+08 b86fdc56-591d-40c5-b4f8-cb5b2a265be8 3 ea8db328-6c73-45bd-ae5e-07dc714dab2c
+d07816f1-06b9-4acc-b33c-16928982cde6 采集 \N 2019-10-28 17:17:29.261+08 2019-10-29 11:32:32.709+08 e2fb2ed6-6d1c-41da-9f07-ab5866dd8940 3 81808c6c-3007-4832-b2e0-bf51d0c3bf14
+39cebd11-af5b-47ac-abfa-db8cef103a38 采集 \N 2019-10-29 13:17:07.578+08 2019-10-29 13:17:07.578+08 2e9595c1-ff54-4c5f-953e-f61a7837200e 3 \N
+9df36e4a-3670-47fb-b965-41c2704b6fd1 采集 \N 2019-10-30 09:06:58.259+08 2019-10-30 09:06:58.259+08 613e22b3-00d5-4036-b4de-8988e8a25b02 3 6ad511e5-d6e0-49dc-81ad-934729e589bb
+7aee0c4c-edb0-43e3-a3bc-9fbff9871499 采集 2020-10-19 14:20:08.555+08 2020-10-19 14:46:21.27+08 eefc80f3-265d-475f-b00b-d44016522eab 3 9e3473be-51a7-4bba-917b-2a7813354caa
+24a8c155-8275-4e27-8355-01550cda1374 采集 2019-10-31 16:01:05.962+08 2019-10-31 16:01:05.962+08 0f20644c-1893-49f9-bc83-6b66a9ead892 3 90c896b2-bf34-4005-91e2-de3860809bc2
+0a0eef97-0c71-486a-a1ed-fc6ff48005ec 采集 2019-11-01 14:59:07.355+08 2019-11-01 14:59:07.355+08 50e00d9f-f07e-4a17-96bc-c74a2aab4d71 3 \N
+093428eb-fcd3-4adf-aad8-db3423f78c60 采集 2019-11-01 14:03:28.029+08 2019-11-01 15:01:02.825+08 86561a5b-04f5-4b5f-8bc7-6b002b4b6c68 3 73ea7fd7-c191-4b58-8bb3-ea0177dc8e95
+75eb8303-ca9c-4afd-9f82-e4aaab2ed119 采集 \N 2019-11-04 09:56:01.81+08 2019-11-04 09:56:01.81+08 40c3cf7a-91d6-4c0e-aa48-4839dd6815cc 3 66a372b9-f1df-4802-9cf7-e522c85dbbf6
+7979ff13-c8b1-4bee-986a-094e12da9553 采集 \N 2019-11-04 16:33:47.708+08 2019-11-04 16:33:47.708+08 f34a4e8b-3a8a-45d9-a73e-a352cb10bbd6 3 \N
+5f39116e-f4a1-499e-85da-b67e0f93a044 采集 \N 2019-11-04 16:36:01.167+08 2019-11-04 16:36:01.167+08 53ea01cf-1ce2-4b41-b725-974426affa48 3 \N
+5ffc3472-8381-4000-a185-1f3a8d4ed263 采集 \N 2019-11-04 16:36:44.224+08 2019-11-04 16:36:44.224+08 e62db430-948a-4311-996f-38348811807a 3 \N
+aef1a81a-27fd-4648-9208-00b719cea8b9 采集 \N 2019-11-04 16:37:23.034+08 2019-11-04 16:37:23.034+08 23b49cdb-2f9b-4170-9c38-2941c2341d00 3 \N
+4b24c098-2d80-49b0-89b6-9092c52053bd 采集 \N 2019-11-04 16:37:55.459+08 2019-11-04 16:37:55.459+08 28f92d45-2a16-4768-bc97-e9acc713b231 3 \N
+ad636ee6-c6e4-4d46-a2a6-cd1e8acc8e51 采集 \N 2019-11-04 16:38:29.867+08 2019-11-04 16:38:29.867+08 d325832b-3b9a-4f92-9b08-0984c6b81599 3 \N
+d17ee4be-2675-4d98-aab6-4b6ec7c271a6 采集 \N 2019-11-04 16:42:05.509+08 2019-11-04 16:42:05.509+08 863ffb4f-8b5f-4a67-b93e-fa4f92f2464a 3 \N
+0475dd0e-b02f-4a19-a933-dee73c76ef6a 采集 \N 2019-11-04 16:42:40.925+08 2019-11-04 16:42:40.925+08 9199194c-49d8-4c20-8b52-67e469c30838 3 \N
+2943a420-80a5-4d38-a6fe-68807623c20d 采集 2019-11-05 09:12:10.053+08 2019-11-05 13:22:53.371+08 a9dea92c-5afa-40b9-b1f3-197e9b0f82be 3 f54ae30e-c52b-4a68-92a6-87a72741467a
+ee5dd742-7370-4a06-89b6-d40b3c6a0446 采集 2019-11-05 14:06:15.041+08 2019-11-05 14:06:15.041+08 6431292f-5b95-41f0-8291-ff902e58b376 3 \N
+7a954891-860b-4321-ab9b-290a023d288f 采集 2020-10-19 14:17:50.547+08 2020-10-19 14:44:51.525+08 8da5aeab-4a1e-4bb5-afe2-67cadfc4700a 3 4f321706-bd7a-449d-bdb1-45b1985db560
+26634fa3-2b25-4428-8b50-8d4e899a0304 采集 2019-11-07 10:06:59.587+08 2019-11-07 10:41:02.204+08 0758748a-7706-4392-ba7e-e47526251acb 3 ccc136ea-7d44-4529-9bf0-7dfae8e1f59d
+7beea55a-7613-4d26-9003-485f6ae91791 采集 2019-11-08 13:12:19.615+08 2019-11-08 13:12:19.615+08 8e254f7b-1da7-4912-8b0d-467770662365 3 \N
+b4b08250-12e5-4346-99a6-64df0c58487b 采集 2019-11-08 13:18:41.597+08 2019-11-08 13:18:41.597+08 c659433c-cfd8-4b1a-a9d3-5664beb39ed9 3 73ea7fd7-c191-4b58-8bb3-ea0177dc8e95
+2cfd28c0-bd76-4a55-af3e-d21b921263cc 采集 2019-11-08 13:43:46.057+08 2019-11-08 13:43:46.057+08 1f0ce463-872a-406b-bdbe-a469b45f9e9a 3 \N
+19d3b12a-ef96-4053-b50b-004075527249 采集 \N 复制工讯 2019-11-08 17:23:25.363+08 2019-11-08 17:23:25.363+08 894ab7ef-b84f-420c-b2f0-cfdc5c00b826 3 3c239466-6ce0-435b-869e-715dc10c3c69
+e76e23fb-b7d4-4991-8687-a3a31084ce60 微功耗 \N 2019-11-09 10:07:15.871+08 2019-11-09 10:07:15.871+08 c9eacd36-38d6-48b9-9672-e76406906ea3 3 \N
+a556c96d-7976-48d5-9bb0-de9f1661654d 微功耗 \N 2019-11-09 10:13:20.225+08 2019-11-09 10:13:20.225+08 91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 3 \N
+8ef82507-140e-4675-8de3-21d0d91759a0 微功耗 \N 2019-11-09 10:17:13.378+08 2019-11-09 10:17:13.378+08 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 3 \N
+ae758eae-e892-4168-a8c1-4ec7ceb81e5e 微功耗 \N 2019-11-09 10:23:17.64+08 2019-11-09 10:23:17.64+08 cb4eb310-0876-492a-9e06-8cd0a5542c5b 3 \N
+fd40883e-bc42-4776-b631-e353c0761303 微功耗 \N 2019-11-09 10:28:16.28+08 2019-11-09 10:28:16.28+08 c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d 3 \N
+1535b2bf-3149-430e-97d6-32972b838167 微功耗 \N 2019-11-09 10:32:45.074+08 2019-11-09 10:32:45.074+08 37c046eb-9a0e-49b0-95fb-f0128338f381 3 \N
+db875fbb-2c21-49f8-bac0-342276dec8ce 微功耗 \N 2019-11-09 10:38:35.811+08 2019-11-09 10:38:35.811+08 73a7b800-25d7-41ad-872d-96cc4f9430de 3 \N
+956b5d84-5687-4405-803b-c9d1790c6ceb 微功耗 \N 2019-11-09 10:42:27.941+08 2019-11-09 10:42:27.941+08 b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 3 \N
+3746c474-0d8e-4d5b-8ca8-eb80c3a46d87 微功耗 \N 2019-11-09 10:46:16.062+08 2019-11-09 10:46:16.062+08 473aee20-7c00-41cd-bd6e-b44c35c758ea 3 \N
+2eca1e8b-3f1a-4272-94c5-bfa4f8e6ab9e 微功耗 \N 2019-11-09 10:50:51.693+08 2019-11-09 10:50:51.693+08 0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1 3 \N
+a1b787fe-741a-4eef-a65b-531baff33f6e 采集 2019-11-11 11:43:37.465+08 2019-11-11 11:43:37.465+08 9a331e7d-9429-4f58-8d30-a2fde39a80f3 3 \N
+578e459e-ee49-4fa5-88cc-9d2edcfbdcac 采集 \N 2019-11-11 14:53:57.082+08 2019-11-11 14:53:57.082+08 c2c9fa03-e2cf-45f7-ae3f-5cb586ab5a77 3 1a7ebe09-0b00-4bb6-834e-2e0a6899f3d2
+f7ccec63-ff80-4c16-8c21-8a5f7c3cc971 采集 \N 2019-11-13 11:48:20.487+08 2019-11-13 11:48:20.487+08 ac632873-d5e1-42fa-9343-6962d16bb547 3 \N
+6fac5183-d1d7-4dcd-9507-e29c2eb60419 微功耗 \N 2019-11-13 16:49:53.572+08 2019-11-13 16:49:53.572+08 ff97f842-4bf0-4384-b4b6-05a9783aa809 3 \N
+354d4c65-0d09-4272-8748-3e53d2c1668f 采集 2019-11-14 13:09:15.676+08 2019-11-14 14:06:18.52+08 c150497e-123d-4ce0-bc80-9a537ee84489 3 a99f3fb6-8165-411c-a072-0615cbffe55b
+aef915e1-110e-44cc-8425-3532b1566b78 采集 \N 2019-11-14 14:48:50.989+08 2019-11-14 14:48:50.989+08 6e32b4dd-c257-4c55-922f-1d62e21220c9 3 84196675-5121-45c9-999a-65cddab21183
+553043f1-1489-49e7-8685-476b53719b37 采集 \N 2019-11-14 14:56:28.576+08 2019-11-14 14:56:28.576+08 5375e7c0-4ad5-4fcb-93df-82c9140ba075 3 \N
+c6e9864f-e7aa-46c6-bc38-7cf89f82005b 采集 \N 2019-11-14 15:03:17.498+08 2019-11-14 15:03:17.498+08 70457bad-88aa-4b95-ba35-4d42f4c3ac9d 3 \N
+7e54985e-4293-452f-bd1e-27d54e8c9259 采集 \N 2019-11-14 15:07:44.246+08 2019-11-14 15:07:44.246+08 9ef26f61-19a9-4990-83f4-b0c81d348eeb 3 \N
+52567547-16d9-4a75-b748-d64c0a0b01cf 新采集 \N 2019-11-15 14:30:33.945+08 2019-11-15 14:30:33.945+08 d26842d0-7685-4eec-869d-160b023932b9 3 \N
+b4cd49a5-53df-4791-aece-50f8fe3be0e3 采集 2019-11-18 09:58:17.656+08 2019-11-18 09:58:17.656+08 5b2e8307-69da-445f-a1a5-6f04cfd7cd8f 3 \N
+ef56e794-df70-42a3-a2f4-e69f4621981a 采集 2019-11-15 10:29:23.439+08 2019-11-21 10:23:20.849+08 e95109a9-cf5a-4e13-b52b-1f85101fd99a 3 e717a755-bd92-4ee0-877c-d12780487661
+7257f8df-a9ef-4358-9754-228732a8953b 摄像 2020-10-19 17:25:27.866+08 2020-10-21 16:15:38.424+08 f89c588a-f68a-4208-857b-555022da9f9e 3 d2931056-a908-4f70-af66-8ba3a1cfc6d7
+95a38af8-bdb9-4f10-ad6a-f3cccec12f59 采集 2020-10-23 17:03:59.954+08 2020-10-23 17:03:59.954+08 d26881e7-f69e-4b7d-9041-47009bd2c298 3 \N
+4200d327-7520-40f5-a476-fdb18a6c0e3e 采集 2020-10-26 13:25:34.106+08 2020-10-26 13:25:34.106+08 f9f36adc-75b4-4140-a14e-73f8172228d7 3 d33fb432-a9e5-4bc3-9758-ff853f405c10
+ba00d9a2-f064-49eb-918c-0924558607bc 采集 2020-10-28 10:07:56.839+08 2020-10-28 13:30:29.628+08 ebfa9f73-9cbe-4629-9e1c-365f58c1ebc2 3 e9f68832-4caa-4bbb-a61d-29e1e6b33016
+e7114e7a-a8cd-4265-93bd-3d86a0ab5864 采集 2020-10-29 16:40:40.002+08 2020-10-29 16:45:15.936+08 f84896ea-8908-41e9-9e30-371a39cd4261 3 dd9d12d0-a0ee-44d4-9ba5-9887b1057881
+77f66a9f-48f4-4970-b406-a8abc2aa39f9 采集 2020-10-30 14:32:49.87+08 2020-10-30 14:32:49.87+08 ec7fa28a-0898-4cb3-a5d0-098d568c1e69 3 \N
+f2b6d5a0-114e-4c45-9066-5a938d4f620a 采集 2020-11-02 10:05:36.141+08 2020-11-02 10:08:20.463+08 b6f7c250-9eeb-4225-8c5e-68b766f03649 3 3a675e96-bee4-48ae-85c8-643b40bb29fd
+5bffec18-538b-4422-8cfa-c602ce69cb7e 采集 2020-11-02 13:44:41.983+08 2020-11-02 13:44:41.983+08 30d005dd-93a1-4c1a-ac10-8bdedf26bab4 3 8c517f8e-8e35-46fa-94c5-e97f1c6ced70
+bdbf00d7-ac36-4768-947b-32347dec4054 控制 \N 2020-11-03 11:31:50.879+08 2020-11-03 11:31:50.879+08 30d005dd-93a1-4c1a-ac10-8bdedf26bab4 2 451da24b-91ad-43ba-8980-317b9aa1f9bf
+dd00727c-90ae-49ec-b8a5-9a89497b7d8c 采集 2020-11-04 09:48:42.72+08 2020-11-04 09:48:42.72+08 f3a9238e-8d1c-4876-a81d-f2bb05755585 3 5923b1b8-42ae-4618-a4b7-7b994f29e69b
+f4d0c081-5014-42df-8154-c7c3b4657cfb 采集 2020-11-04 09:56:29.869+08 2020-11-04 09:56:29.869+08 e3e8ca1e-1676-4b76-96ed-131ba8516599 3 a07a4bf8-c1c2-49da-b8dc-e2f2825764a1
+e6bcf4a3-0d98-48a5-8a7d-401f96e01bfa 采集 2020-11-04 10:06:19.411+08 2020-11-04 10:06:19.411+08 2d0ff832-a7e0-4029-94bf-d7203c1fa793 3 a07a4bf8-c1c2-49da-b8dc-e2f2825764a1
+ce6a00e6-475a-4ecd-8890-b523c3c65e53 采集 2020-11-10 09:01:05.488+08 2020-11-10 14:36:02.933+08 fb922722-9262-470f-8064-4b78234fa802 3 c413c8f4-fa5b-4e63-94e2-eb857285fcb1
+468aada9-eeb5-4174-a21f-73f4ac420d78 采集 2020-11-11 17:46:31.995+08 2020-11-11 17:47:47.749+08 92bbac70-53a3-4d25-b8ab-b4287c52359d 3 544ff068-a704-41f2-aebc-72d263f455a1
+dee5d110-9c34-4382-a725-42cf5d298587 转发app的设备配置 2020-11-11 17:46:32.106+08 2020-11-11 17:47:58.927+08 92bbac70-53a3-4d25-b8ab-b4287c52359d 2 d0aa19d7-1742-41cb-a707-9feea04afda0
+eaa7d913-e972-4a8b-9bb6-870673b450a2 RTU采集 2020-11-16 09:26:32.447+08 2020-11-16 09:26:32.447+08 90e48651-6ab9-4f11-95e9-c2c7eb4c3c15 3 a07a4bf8-c1c2-49da-b8dc-e2f2825764a1
+3a1eee94-6d31-4cfe-a9cf-c2522302fa16 微功耗采集 \N 2020-11-16 13:57:56.729+08 2020-11-16 13:57:56.729+08 f6b98e0f-0bfe-4a95-808c-d6d10b4c803b 3 81741880-ebc8-42d9-bf53-1c6def33376c
+cfcac206-4e6f-41f2-b40c-a9294cb606d7 采集 2020-11-19 09:19:24.246+08 2020-11-19 09:19:24.246+08 af9ec966-1c73-4e23-bae8-5ffcb4661942 3 \N
+ad7a78bd-4769-4409-90d0-955998f1b916 采集 2020-11-24 11:13:14.75+08 2020-11-24 11:14:02.684+08 f963b588-8c55-4b9b-b455-8e7302d88408 3 68f82401-bc7d-4e16-8f53-5c8e2c3850b7
+ec43a63c-84a3-4a0a-964e-79fa8af558e7 采集 \N 2020-11-26 10:49:09.494+08 2020-11-26 10:49:09.494+08 c02e4b7c-e6b7-4d83-969c-34059f84af1f 3 \N
+6c6317e7-c5c4-4ef8-ab38-3da0e4824f91 采集 2020-11-26 10:57:51.665+08 2020-11-26 10:57:51.665+08 86aa83da-35f2-4247-8660-4d23b9c30a1c 3 \N
+830b53c4-b4d6-4d85-9776-3b448ee62c5e 采集 \N 2020-11-27 10:01:58.016+08 2020-11-27 10:01:58.016+08 75ab7fed-fb74-48c5-8cf9-898b3fc62358 3 cedac832-df05-4b4d-bec7-05664a01574a
+aa8f7231-23cf-47e0-a8cb-f045759a3304 采集 2020-12-03 17:40:46.306+08 2020-12-03 17:40:46.306+08 085307b7-181b-4059-9e81-1cbfff8fa061 3 65918029-7aa5-44f6-aefb-0f2d55470e9b
+82830f9f-f318-4308-babc-79341cb03954 采集 2020-12-08 17:06:14.286+08 2020-12-08 17:06:14.286+08 403dcab2-df50-4fda-a92e-c2100bb9a242 3 057c429b-10f7-4447-b6ad-d4cf05e6346d
+d09dc928-d5c0-4723-b23f-863fbb56c56f 采集 \N 2020-12-09 13:48:51.706+08 2020-12-09 13:48:51.706+08 8001366f-40a9-4e0c-affa-d050c5eacf17 2 08e016e1-21f3-4a45-a960-89e5d91211d9
+47875511-0ac0-4938-a38b-277669f302e9 采集 2020-12-09 13:58:20.461+08 2020-12-09 13:58:20.461+08 5ab3d59e-efe3-45c3-b69d-36ec4af9fd8c 3 \N
+08d7f8f5-45fb-4a61-8b6f-04c0710b09c3 采集 \N 2020-12-10 15:58:36.447+08 2020-12-10 15:59:20.585+08 8c5826bc-d7e6-4506-9dab-ded01f4c2346 3 7f6d7a19-6752-4542-9a34-7baec15394d5
+dbbe4022-fbd5-42cc-9e58-233046723571 采集 2020-12-11 08:53:07.237+08 2020-12-11 09:50:36.493+08 19edfd93-0bd4-4c71-85c0-647971fa008a 3 778be798-daba-48ac-acb5-7107c728189c
+bf13586b-7b53-4c49-8131-f81bb6128330 采集 2020-12-11 08:56:50.566+08 2020-12-11 10:22:16.035+08 6d6210bc-a5e7-439d-b731-e6efdeada2f7 3 1f1ee91e-0fdf-4bed-a761-937743c6a82a
+cfb7053c-3698-4308-9245-c7fdfb84a202 采集 2020-12-11 08:53:58.634+08 2020-12-15 09:15:14.376+08 7737f9b3-195f-465e-b563-1a4f509e38ce 3 1d9bdf0c-3623-425f-9d86-cb286fd007f0
+4b302156-72de-4f74-a828-06b1e47938a3 采集 2020-12-16 15:29:32.372+08 2020-12-16 15:29:32.372+08 19f735aa-e557-4795-93bf-fc5e8c57b47a 3 \N
+9acc6ecb-52ee-4070-8fe5-6e893642d30e 采集 2020-12-16 15:35:33.662+08 2020-12-16 15:35:33.662+08 aeced422-061a-4b9f-bf4c-1e9597f5b016 3 \N
+bd26c9fd-802a-4cca-8f55-3a27e7bfb026 采集 2020-12-16 15:38:50.378+08 2020-12-16 15:38:50.378+08 35ccbe8e-d5fd-462c-9b89-c1c128a9f4f9 3 \N
+09252fcf-2e4d-42ea-b1a0-04b8fd99c5dc 采集 2020-12-21 17:00:24.189+08 2020-12-21 17:00:24.189+08 167e3709-030c-4724-bbad-4060c61870bc 3 82a3c5f5-d951-4702-9359-77faffd51db3
+a75b6e21-4348-4fb7-802c-ee2ecc56f7ea 采集 2020-12-16 17:00:14.094+08 2020-12-16 17:27:08.959+08 4f041931-dc1f-4868-985b-e5f1d27b1d38 3 4b0fa613-30cd-4b22-b50e-87974bd2ba1a
+31ecb271-8866-4680-add6-52e257911749 采集 \N 2020-12-22 08:40:50.159+08 2020-12-22 08:40:50.159+08 90f77fb4-1b78-4f30-b558-8026aa10f6db 3 113b841e-f66a-4020-a065-95c8de705e15
+198ba586-24af-4e12-9eff-7c35453816b6 采集 2020-12-16 15:27:44.528+08 2020-12-24 12:36:44.271+08 1a190e1d-27a0-4b3a-8635-8737f24de024 3 ba7f2cc2-0e6e-47f7-913b-feccd613654e
+b7a0ef5f-adce-4d74-808d-e8cb24d7955b 采集 2020-12-24 14:19:13.36+08 2020-12-24 14:37:40.314+08 d67fea40-a63c-4087-b5fd-5e5f0c387893 3 d40397c6-b9b9-46ff-b3c5-535d14068a52
+ce14d28b-bad7-4d5e-b418-d40663dceaec 配置下发 \N 2020-12-24 14:38:04.633+08 2020-12-24 14:38:04.633+08 d67fea40-a63c-4087-b5fd-5e5f0c387893 2 ef6ef551-0434-444e-aa94-12a2c6cfe513
+cce324d2-9c6a-4637-a928-b6a40648a114 采集 2020-12-23 16:00:33.994+08 2020-12-25 12:07:30.093+08 7b536454-20a7-4c1b-bfeb-4a0f018d2673 3 aaaefada-5903-40c6-96d7-98e2aae78d81
+6680d7d5-905b-4311-8a63-a8c11b0c765a 采集 2020-12-29 14:11:13.126+08 2020-12-29 14:11:13.126+08 7c054865-5f77-4df5-9d1b-ed2c6f1bb27e 3 \N
+403ed6b4-3b5f-464a-8da3-51142a22d535 采集 \N 2019-11-20 09:11:51.877+08 2019-11-20 09:12:06.555+08 9278fee5-3705-4e76-a8a6-1cf10956a376 3 bcca6d57-3df9-4b61-8c7a-71402f47b612
+84e785f0-1280-4066-ac32-66fc93019612 采集 2019-11-19 16:14:21.595+08 2019-11-20 09:27:50.786+08 407a002b-de7c-4a76-9732-e4e8aaaafec3 3 f82eec29-fd92-496d-a98e-02dc2e22cf9d
+42a0ae36-f70b-40f3-8883-e04b90d177b1 采集 2019-11-21 09:33:12.26+08 2019-11-21 09:33:12.26+08 6f6f83fa-1af9-4e4c-8d3f-53c2a4d1b4ca 3 4f00f469-4a6a-41a1-94fa-7f669cfbed12
+0666d951-058b-4519-ba87-4889fda65f5d 云采集 \N 2019-11-21 11:47:17.607+08 2019-11-21 11:47:17.607+08 a0d06bbf-dedc-47dc-8d1e-52e2a282a93a 3 \N
+3d75f1d4-c46d-443a-ba67-ea09c7642e11 采集 2019-11-21 11:47:17.627+08 2019-11-21 11:47:17.627+08 a0d06bbf-dedc-47dc-8d1e-52e2a282a93a 3 7c734114-6fa7-41a5-8f0c-ce0940aded18
+746f3ce2-5918-4156-bee1-cf4e3a0c51ca Lora \N 2019-11-21 11:47:17.643+08 2019-11-21 11:47:17.643+08 a0d06bbf-dedc-47dc-8d1e-52e2a282a93a 3 \N
+a5bf8b8f-51ec-4e4c-8ffe-9d01644f9395 微功耗 \N 2019-11-21 11:47:17.657+08 2019-11-21 11:47:17.657+08 a0d06bbf-dedc-47dc-8d1e-52e2a282a93a 3 \N
+f745e8e9-041e-4578-8568-38fec10b69c1 云采集 \N 2019-11-21 11:47:19.139+08 2019-11-21 11:47:19.139+08 868f47ed-fe83-49c4-be2c-70731b436220 3 \N
+202ac1b5-9f83-4de2-b423-a27607b53f28 采集 2019-11-21 11:47:19.166+08 2019-11-21 11:47:19.166+08 868f47ed-fe83-49c4-be2c-70731b436220 3 7c734114-6fa7-41a5-8f0c-ce0940aded18
+7afd8b52-1811-40be-88ec-64173b08f522 Lora \N 2019-11-21 11:47:19.194+08 2019-11-21 11:47:19.194+08 868f47ed-fe83-49c4-be2c-70731b436220 3 \N
+8b29ca1c-631b-4899-b819-7fb1a9d8cd63 微功耗 \N 2019-11-21 11:47:19.221+08 2019-11-21 11:47:19.221+08 868f47ed-fe83-49c4-be2c-70731b436220 3 \N
+299ea989-d531-4a5c-9371-aa3ae165c2da 采集 2019-11-14 15:48:42.028+08 2019-11-21 11:48:21.873+08 61a4ad5e-774e-40d2-9ea6-937da62db64b 3 34770cf0-cf46-4ba9-870d-5c2e73ffe8ac
+4b017286-f61b-4777-bbdd-aa7cab984440 采集 2019-11-21 14:01:06.936+08 2019-11-21 14:01:06.936+08 43060aae-0e85-4ec6-9fc9-b05216b11e13 3 94b82699-1d71-4853-aecc-891554e0b963
+c7eb65e8-262a-42fe-a9a2-3a77e07a84c9 采集 2019-11-21 15:13:15.434+08 2019-11-21 15:13:15.434+08 e1118b87-bfea-42be-b365-1c99d35511cc 3 5b0a47a2-57f5-4eb6-8c6c-81d16d0bf508
+b3db1020-2db0-4931-ab2e-2661c6b459ff 采集 2019-11-21 15:17:49.688+08 2019-11-21 15:17:49.688+08 ee878563-3f80-4c7d-8888-319c875c8a5e 3 5b0a47a2-57f5-4eb6-8c6c-81d16d0bf508
+22a573d1-d13d-447f-9984-1335ac15e1be 采集 2019-11-21 15:17:51.648+08 2019-11-21 15:17:51.648+08 b1353bed-cda0-44a5-b1e9-94cb166962a5 3 5b0a47a2-57f5-4eb6-8c6c-81d16d0bf508
+bcb2585f-9765-4795-8033-eaf0d467ab1c 采集 2019-11-21 16:06:37.691+08 2019-11-21 16:06:37.691+08 446a08d7-c237-4f0b-acfb-3d9310da742d 3 f01703db-289c-4463-a196-f8487c24252b
+5fa7d170-eda6-4d15-a767-25fc37a090bc 采集 2019-11-21 16:15:06.516+08 2019-11-21 16:15:06.516+08 4698f1de-2051-4283-9fe5-2c62b1687239 3 f01703db-289c-4463-a196-f8487c24252b
+61e1f659-3d27-4958-8881-d4e6103c309b 采集 2019-11-21 16:15:07.782+08 2019-11-21 16:15:07.782+08 5b338441-75c4-4186-9fc3-23aa8d614e19 3 f01703db-289c-4463-a196-f8487c24252b
+6dd33289-d530-4c8b-a41c-aa946291a7df GPRS采集 \N 2019-11-22 15:35:28.383+08 2019-11-22 15:35:28.383+08 d31031ab-0237-41a5-adc0-867c1e9952f7 3 \N
+fc0dc028-86e5-4a74-a75b-15c2d9b30d63 采集 2020-11-10 09:02:26.695+08 2020-11-10 15:56:24.108+08 c2dbdbb3-32a5-4be9-8b5a-530d8087ffe5 3 15d206c2-cc6e-46f4-ba70-f8d642edcea1
+5fd6dff1-680f-410f-9631-e645a33bddda RTU采集 2020-11-11 09:55:32.292+08 2020-11-11 09:55:32.292+08 c991c138-3b47-4a21-af81-9ba1df554176 3 \N
+5bf561bf-7398-4a8f-aaaf-4f7b695d0020 采集 2020-12-11 08:54:51.201+08 2020-12-11 10:22:24.72+08 dac7cbf1-b98a-4c95-9ff7-14b1602c494f 3 1f1ee91e-0fdf-4bed-a761-937743c6a82a
+9b051f3e-8ded-40e9-bdce-c5b5723b3858 采集 2020-12-28 14:09:52.548+08 2020-12-28 14:13:55.613+08 cce5d34b-3464-4566-81e6-3ff2540af13e 3 a544b432-a82e-49b3-8f33-1f6e36703a9e
+7ce42d82-9728-4463-afd2-906136b87ad7 采集 \N 2020-12-31 13:46:30.839+08 2020-12-31 13:46:30.839+08 1dae2ae1-5be8-4cd2-824f-cc4948f75959 3 32333345-3fd9-4150-8f8e-27418047f280
+e673c024-edd4-495c-a9a9-c5c6306ed6d0 采集 2020-12-31 14:28:18.774+08 2020-12-31 14:28:18.774+08 c251c010-afd1-42d0-9d85-e044a6d51a8a 3 \N
+ab533430-50a9-42f0-be2d-3f49990cd470 采集 2019-11-21 16:17:19.733+08 2019-11-21 16:17:19.733+08 0e96ddaf-1acc-419b-afca-18854f8c25d8 3 f01703db-289c-4463-a196-f8487c24252b
+4ea55c69-435f-40ec-b8fd-6ba3cbb45b6c 采集 \N 2019-11-22 14:54:33.455+08 2019-11-22 14:54:33.455+08 123b24f1-ba7c-42e1-b742-afdc5bf8620b 3 882d3fe2-780a-4da9-adaf-8d1395b022cd
+8cb0c7e1-fe83-4b63-9f7f-7598487ef57a 采集 2020-12-31 14:25:20.549+08 2020-12-31 14:25:20.549+08 7da4f815-e889-4b79-8b69-8fda271a954f 3 \N
+cfbc93ae-34de-4b5c-b78f-393d80e6be1e GPRS采集 \N 2019-11-22 15:31:42.033+08 2019-11-22 15:31:51.644+08 1bda935e-56de-4365-b60e-f02d19299795 3 \N
+00d1f8ae-26c7-4fde-93ee-415598dab3dd GPRS采集 \N 2019-11-22 15:25:55.227+08 2019-11-22 15:35:00.199+08 9297adfa-1972-45e3-a5c4-0f31a0acbe84 3 \N
+61e2ddde-025e-4a3a-b03e-49cddfe2c09c GPRS采集 \N 2019-11-22 15:38:27.574+08 2019-11-22 15:38:27.574+08 2e0d00cd-a321-4504-b716-41813848cbdb 3 \N
+c3035443-22e8-4067-b775-2be4cf81939e 采集 2019-11-25 13:10:42.702+08 2019-11-25 13:10:42.702+08 5e052852-cf91-4092-8497-41556a0c10b8 3 ae1fb024-ff8b-4af2-9931-7a20585b8234
+03a86ebd-9100-429c-a1a2-edacea7380c3 采集 2019-11-25 13:12:43.519+08 2019-11-25 13:12:43.519+08 3b4d2618-c6ec-4efc-a159-501ad68fd36e 3 \N
+e6b1563f-dafa-47e5-bb75-fa29d3388298 采集 2019-11-05 14:15:48.118+08 2019-11-25 14:21:27.98+08 1e6fc551-3ad9-4963-9754-142f9c470c9c 3 72c2b126-5e58-47eb-89ee-fe0b05c628b6
+e0856580-9791-4d76-8d0a-4673e9e7f1bd 采集 2021-01-04 09:20:07.813+08 2021-01-04 09:20:07.813+08 b44eeccf-0eed-4785-a539-0122bcd2a99f 3 59a4437d-8333-47be-9f2a-72705db84885
+e95f9ff7-5a7c-495d-87c9-993463fb3945 采集 2019-11-25 17:26:40.003+08 2019-11-25 17:26:40.003+08 7e5507c8-b21b-47c0-b9de-f79f09875fc7 3 85e2b97b-2221-4c86-96cb-1daf90b1118f
+169af4ea-ded9-488d-8a88-96e79e1526b0 GPRS采集 \N 2019-11-26 10:03:08.896+08 2019-11-26 10:03:08.896+08 90a2bc12-2214-43ff-9154-9b9212de2c10 3 \N
+3081c848-b498-42a0-9887-5fba5a8eb28f GPRS采集 \N 2019-11-26 10:07:42.407+08 2019-11-26 10:07:42.407+08 5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8 3 \N
+94787d41-6353-4a20-a84b-848d79e1e209 GPRS采集 \N 2019-11-26 10:13:25.788+08 2019-11-26 10:13:25.788+08 5e7775c1-0766-436e-b701-b1102833b98d 3 \N
+c4ae4615-1bce-476b-96bb-827de9a9a3f5 GPRS采集 \N 2019-11-26 10:16:09.271+08 2019-11-26 10:16:09.271+08 099c6283-519f-4946-aa9d-f0059a76b832 3 \N
+a68a5258-d2d1-40df-beb0-710a190c1175 采集 \N 2021-01-07 10:06:02.483+08 2021-01-07 10:06:02.483+08 daaea98a-a1a5-40c5-b34f-108d16d94b12 3 \N
+9e616b46-c079-4ea8-a379-71bc5fa74f42 采集 \N 2019-11-26 16:27:03.637+08 2019-11-26 16:27:03.637+08 2663fcb4-832b-4bd9-ac6e-4a58835355cb 3 \N
+9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22 采集 \N 2021-01-08 17:49:15.375+08 2021-01-08 17:49:15.375+08 2d2bb5aa-7dae-4123-bf05-5cdc08d7480f 3 \N
+047b4ec5-9aa9-44cd-8410-9484195bcc5b 采集 2019-11-27 14:14:55.499+08 2019-11-27 14:16:07.376+08 ba311e19-eea2-4eff-8674-1a146dab66c3 3 81f86e48-a3c7-4867-8e7f-cd9b620bf7af
+fd38a31b-ae19-46d2-87ab-29c622bb6c41 指令下发 2019-06-11 15:06:43.245+08 2019-12-04 11:31:14.735+08 5a3bf41b-78ef-45fa-96e2-ac2a42767d71 2 9a5c7ac8-776a-4dd5-a224-c083f94292e6
+6447edf7-84a6-451a-b207-a3714c23e9c1 采集 2019-12-04 17:52:08.251+08 2019-12-04 17:52:08.251+08 e8b04a28-9fe8-4fd4-b5e9-7c8990e19e2d 3 9ef827cd-6659-4099-b834-218954121f3e
+68049b31-8deb-465e-a468-2cbafc9b8023 采集 \N 2021-01-07 13:13:24.299+08 2021-01-11 13:06:59.467+08 2d4d2d3b-44b4-43ac-bb98-7c02fcf76152 3 028bfee5-e1d0-4126-bc16-cb9cb13f7cb2
+a9e161b5-80ac-44f8-b7e3-eab4baaab9d8 超声波风速风向FM-C-SX 2021-01-14 14:24:33.373+08 2021-01-14 14:36:35.517+08 27e93aa0-1ec0-40df-aa0e-de4152459a66 3 9143cf8f-4fb3-4e7c-9a9c-c674d088d655
+b0ddaaab-3ad2-4674-a102-dc2459657a7d 采集 2021-01-18 12:37:46.527+08 2021-01-18 12:37:46.527+08 7d999707-8940-47f8-995e-f50b44e48ede 3 \N
+d1124662-5294-40cf-a8cb-6cac92776c40 采集 2021-01-18 14:02:07.851+08 2021-01-18 14:02:07.851+08 ecf4b234-2797-4fbc-bf0d-0f3f41dbd017 3 \N
+1de99810-efe3-468a-a89b-0d42d5933634 采集 2021-01-18 14:04:59.391+08 2021-01-18 14:04:59.391+08 d1b7163a-96fb-4364-a1ec-73b29be3dbc0 3 \N
+cd504e3c-bb6a-472e-bf23-eac4d2c0ca1a 采集 2021-01-18 14:09:49.695+08 2021-01-18 14:09:49.695+08 c677c2a2-bc09-4171-ad9c-f9ddfbf3d046 3 \N
+cff46266-6321-44f0-a893-0a66249826b1 采集 2021-01-18 14:14:29.64+08 2021-01-18 14:14:29.64+08 e2ad2fb6-75a3-490f-82ae-eac117102885 3 \N
+2df0457d-dcdc-43a8-b9be-cde18d3e3f6f 采集 \N 2021-01-26 15:42:15.151+08 2021-01-26 15:42:15.151+08 1c9756ed-dcf4-4156-9a43-09ce478d2038 3 \N
+b781e844-b4da-4a6b-9420-bd6796c7188b 文件传输 2021-01-26 15:59:08.531+08 2021-01-26 15:59:08.531+08 dadaf677-ed6c-4f61-ba61-d030f157dd14 3 \N
+ad519e49-e9a4-46e1-8166-c56e97bac6d5 采集 2021-01-27 13:50:41.426+08 2021-01-27 13:52:00.546+08 9baef129-7240-456d-819f-081ed682b6c6 3 8b4200a6-9a48-45e4-8fc2-5e1fe6f756c1
+4f43df6e-9984-45bb-9ec3-62e789fb6b72 采集 2021-01-27 13:54:55.094+08 2021-01-27 13:54:55.094+08 1738d5bc-6a00-4ec6-813b-1ecd8ed014bd 3 2a36b97c-3cf6-4a5e-a331-d00b21babbac
+c9b1921e-62db-4dc5-b15b-663afe09388e 采集 \N 2021-01-28 08:50:30.357+08 2021-01-28 08:50:30.357+08 b4836295-511d-4752-99b6-099f9e59ec54 3 795ac977-d4b1-4743-bfe1-ae7830419b5e
+7dbd6789-715f-43ad-94d2-ca3ede2c52e2 采集 2021-01-28 09:32:46.664+08 2021-01-28 09:37:35.491+08 998e19a5-71a8-484e-a7af-5ffe30f99e87 3 21edfabe-f147-4b03-8f4f-11b3c2c7ca9b
+40e24053-00bb-4c0d-9d0d-6b44178ab0f2 采集 2021-01-27 16:52:16.896+08 2021-01-28 09:41:22.855+08 c948c019-e1f5-4a3d-a348-de60051d3e2e 3 8f65f84a-9034-41ca-a6ea-dba981e7f031
+d0e4aa6d-cc64-4e1d-9ce4-a91c1fd76e87 采集 2021-01-28 09:45:57.602+08 2021-01-28 09:48:47.839+08 aad44a46-f5ad-4b1c-b6a4-cff40950cfba 3 210c09d0-3125-4f4a-964c-c9889116f99e
+532e0ecd-69b7-4dc4-945e-e4503cb4f4de 采集 2021-01-28 09:58:52.857+08 2021-01-28 09:58:52.857+08 10652dfa-31f2-41fa-b997-d6162cb01901 3 37f02599-3f46-4f8a-ba94-dc6515a792d4
+4af6c519-ea08-4b4b-a19e-ca0574265fdc 采集 2021-01-29 10:12:04.673+08 2021-01-29 10:12:04.673+08 c51a8eb3-9068-456f-9922-5934de559a71 3 a544b432-a82e-49b3-8f33-1f6e36703a9e
+e983c3bb-0606-43f3-ad7a-0a1c80bf1df4 采集 \N 2021-01-29 10:41:27.974+08 2021-01-29 10:41:27.974+08 5ab5659c-c875-43de-a5cb-c2c09a6b738d 3 \N
+fc3a3026-9e74-4e31-9927-3936778248b5 采集 \N 2021-01-29 11:00:43.45+08 2021-01-29 11:00:43.45+08 a7e6bd92-16dd-49b0-a4c1-115a6c8b272f 3 \N
+074a59c4-fb97-4bb9-9835-8c6463a9dd8a 数据上报 \N 2021-02-04 15:51:02.029+08 2021-02-04 15:51:02.029+08 ecf4b234-2797-4fbc-bf0d-0f3f41dbd017 3 \N
+0ae9cc6b-99ae-4795-a8c3-b31ff5b2e7d2 采集 2021-02-04 16:04:59.959+08 2021-02-04 16:04:59.959+08 408d0732-eb70-4420-89b3-8f5ab433528f 3 30e579ff-ba81-471e-9de7-6f0063c049c4
+5cecb8ee-3d0b-41dd-8293-4108719a7e08 采集 \N 2021-02-04 16:07:35.009+08 2021-02-04 16:07:35.009+08 ff8195ce-78e0-4668-81bb-8f26e83411a9 3 \N
+2940ee26-449d-4390-8707-b8e0b150faad 上报 \N 2021-02-04 16:16:51.941+08 2021-02-04 16:16:51.941+08 d1b7163a-96fb-4364-a1ec-73b29be3dbc0 3 \N
+bf24a684-40ba-4a05-9745-dfad12c4a4a2 上报 \N 2021-02-05 15:01:15.422+08 2021-02-05 15:01:15.422+08 e2ad2fb6-75a3-490f-82ae-eac117102885 3 \N
+8ebf5c23-cb3c-4f9f-a506-a3d125575921 采集 \N 2021-02-05 15:02:09.632+08 2021-02-05 15:02:09.632+08 c677c2a2-bc09-4171-ad9c-f9ddfbf3d046 3 \N
+68beb8e6-51d2-40db-8cae-5ba79d4cf5c6 上报 \N 2021-02-05 15:04:22.729+08 2021-02-05 15:04:22.729+08 7d999707-8940-47f8-995e-f50b44e48ede 3 \N
+915fe37c-0682-4390-8b9c-06edc2294532 上报 \N 2021-02-05 15:08:44.93+08 2021-02-05 15:08:44.93+08 90e48651-6ab9-4f11-95e9-c2c7eb4c3c15 3 \N
+257470bc-2299-4185-a68b-b194c1b926ad 采集 2020-11-04 10:10:46.535+08 2021-02-05 15:18:10.067+08 c51512a6-3e90-4b6e-8a21-987464b10ca9 3 \N
+\.
+
+
+--
+-- Data for Name: CapabilityMetaInterface; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."CapabilityMetaInterface" (id, "createdAt", "updatedAt", "capabilityMetaId", "deviceMetaInterfaceId") FROM stdin;
+4d73b23a-96ed-434f-a6d1-999f90a4166e 2019-12-20 10:02:25.442+08 2019-12-20 10:02:25.442+08 7fec904c-4e25-4bf8-a250-261f21994398 8d019347-0d6d-435e-a798-e7dba9b83e94
+3318c67b-7f3f-4314-beab-6c1c6474ca08 2018-11-05 11:05:43.247+08 2018-11-05 11:05:43.247+08 640ca77d-7813-4304-9242-b987653bbad0 8aa2ad50-9740-4add-9d62-327eed1b920d
+cab6949a-a1f7-4e4f-b107-4ce6bde05190 2018-11-09 14:49:08.45+08 2018-11-09 14:49:08.45+08 ed0bee37-45a5-464f-aec8-5b97ee0fb1d3 4dd766ed-6f42-4028-8d71-180701484513
+1d051412-7a76-4f26-bc4b-17abdc116794 2018-11-21 14:57:39.421+08 2018-11-21 14:57:39.421+08 7faa8d59-78aa-493f-855c-39efc2890727 22b97f71-1db8-48f7-9ee4-85adcd617e0c
+710c6598-ae78-4ea1-926c-4e5b75f0866d 2018-01-05 16:26:30.124+08 2018-01-05 16:26:30.124+08 7721177a-8610-4836-82c5-d08d05a6be97 a8da373f-295d-41c8-8370-38f54425b4ae
+07dc2dae-45db-41c2-9f02-410bceb00bbe 2018-01-05 16:27:59.09+08 2018-01-05 16:27:59.09+08 824dfcd1-4745-4087-aa8e-237d72715c4d 57caac26-053a-415f-839e-d361e644ee3e
+71a8f5d0-266f-41e3-9f03-481118afa2df 2018-12-03 10:30:03.056+08 2018-12-03 10:30:03.056+08 ffb4a9e7-51b0-45d7-b5a7-a80bf31c7f6a 1842a81b-e5de-4835-a800-e8ad4353ff87
+a19d9f46-8b10-4072-b711-d4de6d9613a0 2018-03-15 13:45:07.095+08 2018-03-15 13:45:07.095+08 f45f4852-853f-4a66-a359-8b48c4624b75 8ec909d3-5d38-410c-8e0c-ef9e2d5d3417
+cf5aee9f-0a86-4ea7-84a4-99094310b8f1 2018-03-15 13:49:32.802+08 2018-03-15 13:49:32.802+08 4ee6b60b-02a2-4760-99c8-873ad7ae2475 66d2ff10-fea7-4539-873e-c5be6ca52424
+e4a3e679-06bf-4fde-b6d3-c4ce5cd24be2 2017-08-24 20:03:54.308+08 2017-08-24 20:03:54.308+08 86b95247-634a-44af-8af0-b047a5f10f5d 93027b4e-7dc8-45ad-9bd2-d2f83f5da14b
+33072c2b-8f68-4fa1-997c-4de35c51cfd3 2018-01-05 16:29:20.593+08 2018-01-05 16:29:20.593+08 2fa52a8c-6ff8-4131-b74d-761173132a03 967080e3-98af-4159-b73b-83fbe1adc1ef
+f3af7235-0bbd-487f-ae15-63893a10484e 2017-08-26 15:45:06.847+08 2017-08-26 15:45:06.847+08 e1d1f6d5-ffa4-4ad6-b314-d49a9c25735b 8699fd4b-ba62-4d57-865d-9ad6f15997e2
+3213ac96-266e-45a2-8c1a-bc50de09166b 2017-08-26 15:51:32.565+08 2017-08-26 15:51:32.565+08 aa48a11a-b276-4670-bc85-8c69368a7def 7ae238e5-3972-416b-9889-5388c3889fea
+93cfd6b6-20b2-4a54-976e-c815c778a518 2018-01-08 09:46:41.158+08 2018-01-08 09:46:41.158+08 d30c1deb-b88d-4111-a4df-6810595e0a63 ec1cec29-b96c-45ed-bc2d-36cd2dc990db
+b67b78ed-2b81-48b4-852a-82d80bf089d8 2018-01-08 09:46:41.165+08 2018-01-08 09:46:41.165+08 31a6e729-2f1b-4d8a-8f13-399b327f0d70 ec1cec29-b96c-45ed-bc2d-36cd2dc990db
+fd0fe17e-1cc2-404e-a521-436b52c6d7bb 2017-08-28 19:16:22.987+08 2017-08-28 19:16:22.987+08 7fab5981-f265-41b6-b77c-36ac36a17a85 eb975f2c-94f0-4073-a10f-08e05c10b8d2
+0fe376f5-6f78-4d6e-a41f-4c7bd8c219f2 2018-12-03 13:59:26.718+08 2018-12-03 13:59:26.718+08 a9a88239-bda9-4074-8162-0831dde92dd6 7812e889-d184-4f4c-be6d-ce2a956aa747
+7dc902fb-801c-448c-a485-a6dc4281e5c0 2018-03-16 09:57:17.074+08 2018-03-16 09:57:17.074+08 540a8aa4-184a-4795-acea-025548061b8c 6590317a-c6c4-4555-98f7-096aef3d4edc
+1508a9d0-aa7f-4909-a774-79b75c823eea 2017-08-28 20:28:53.776+08 2017-08-28 20:28:53.776+08 e232591d-9a18-42c9-a7a4-dad82336325d cf1b2fb7-1992-4e93-b636-f7c81b1cf722
+6501955b-fa01-4453-9b4a-ee280b85c881 2018-12-06 10:06:22.377+08 2018-12-06 10:06:22.377+08 f944e6ec-6886-471e-b0e0-41afb54df653 ce55f3f5-68bc-446b-a42b-9d589c6a1917
+b5bf4c02-eaac-4b56-960d-56d4bc4d9eee 2017-08-28 20:54:17.764+08 2017-08-28 20:54:17.764+08 a5866031-3267-4c41-97d2-0c8eeff1baab a9419541-f580-469a-9faf-549b75863b52
+2b417caa-d564-4c4b-b332-bd5d04200b43 2018-12-06 10:15:14.269+08 2018-12-06 10:15:14.269+08 f7d87585-4ebf-4d22-a1ce-05ef947311e7 827f748e-7f46-44dc-908b-4f30a556d488
+c5171148-b864-4b78-b0b1-68373e9d76e5 2018-12-18 16:53:42.391+08 2018-12-18 16:53:42.391+08 cebdbb60-2d1c-4a4a-af8c-85a571d69232 0edf5985-412a-448a-891a-5f89db140c8a
+85433a3e-eb2e-4f74-b3f4-29b8d702b1bf 2017-08-28 21:24:55.045+08 2017-08-28 21:24:55.045+08 11450ef7-f0d4-4947-acd3-d1f7afd85e0d f9c931f2-268b-4bae-b97a-47cde5e60eae
+6f3521b1-510c-4645-971c-e8bce7315261 2018-12-24 11:53:35.05+08 2018-12-24 11:53:35.05+08 9bec257b-dd97-4034-ada6-eb01b7a69868 e13e14c3-6fe2-4040-b3f8-423eae5a91af
+e59e3389-ca0c-40da-922e-ecd5d83488f7 2017-08-29 11:49:32.546+08 2017-08-29 11:49:32.546+08 06cd5938-5a30-4ca3-910e-b174b900daff eb975f2c-94f0-4073-a10f-08e05c10b8d2
+283afaed-b21b-496d-a0ea-458baf7519a5 2017-08-31 17:09:14.402+08 2017-08-31 17:09:14.402+08 38b407d6-2d46-46be-bb4d-9d0c6e673051 db55d5aa-a374-4095-8420-55d6b1129f4a
+16b774cc-e083-47d4-b5ba-a327d16851f9 2017-09-02 14:47:06.96+08 2017-09-02 14:47:06.96+08 753c5c99-5da6-4172-9173-492353bb0533 7666945f-7f67-4996-9f31-f2e6d57daf3b
+3a91668b-ad7e-43ef-9489-45269a594a57 2017-09-02 14:59:34.594+08 2017-09-02 14:59:34.594+08 3c90cbd4-1398-4e10-b930-11e414495e2f 08d16d99-4102-4efc-935f-5ec573bc7d2c
+f73d7461-fbdd-497c-b3b9-904061fc0101 2017-09-04 09:36:21.658+08 2017-09-04 09:36:21.658+08 cbca938f-e317-4e23-a721-4f2b7b54a827 4fc29cb4-5cc5-4470-b36d-fca10dfb4fe3
+dddb1a39-c0e2-4da2-ad25-46227e5126e7 2017-09-04 19:04:13.37+08 2017-09-04 19:04:13.37+08 2f698b72-9c05-42fe-a0e9-3224917239aa 252c23b3-3c8d-408c-a694-5b27600daa69
+6f41f9d7-3e0c-4c37-b01a-947b5e458e33 2017-09-04 20:41:51.212+08 2017-09-04 20:41:51.212+08 8f438749-6713-4139-86ef-08d02243f962 a074e70e-ee4c-46c8-a87c-fd2abb07bb98
+3c697c32-a0e7-4e74-903e-f028f45e85d9 2017-09-05 11:07:01.222+08 2017-09-05 11:07:01.222+08 12aa80e0-acfc-43e1-85c9-9cbabe6fa2ee ffa49fe5-f400-4a48-82a2-cf6dc26328c2
+b25c17c0-0082-4bf1-bfbf-1a6899e5cec9 2017-09-06 18:47:27.065+08 2017-09-06 18:47:27.065+08 abcd5e24-44d0-47ba-95db-9bdfab8d2d92 cc5158b9-1eb4-4313-90e6-e3de0d17b31a
+40464c01-4748-4ed3-a772-9891bc748ebd 2017-09-06 19:35:19.126+08 2017-09-06 19:35:19.126+08 f02e6117-3fda-43f0-b465-8f5961e08bed 36572834-2379-48b7-ba25-7c69aaee0bea
+3fcb96d7-aa50-4c71-85b7-8622cbf65978 2017-09-06 20:01:37.372+08 2017-09-06 20:01:37.372+08 1637283e-980c-4ed8-8cf3-71e794c45bb2 74fa134b-dffd-45e9-975a-8d2b64a5d1b7
+bb5111da-e03b-4936-ab3c-7cef0f1dc087 2017-09-07 14:40:21.35+08 2017-09-07 14:40:21.35+08 eea54bd1-3ede-4ab6-b07d-8b1f58292efc 8198cafd-1e4d-4b68-bb6c-d75fd90059fd
+f1afce9e-8243-474e-aa26-33436d311c0a 2017-09-07 20:32:02.671+08 2017-09-07 20:32:02.671+08 12de1b06-528f-42a2-8174-daa14d29506d 3b22f46a-d6ad-4cb6-ab8a-7266056a5f46
+5d61de41-23f7-4d92-a999-3b598cb1a0f6 2017-09-08 09:20:57.97+08 2017-09-08 09:20:57.97+08 394f3594-52f4-472a-9078-081172abaaae e4418a0e-75b1-49b1-b2e7-081f5515c9e8
+d8f61ec5-c2c0-4d21-b4d1-48a271cf6329 2017-09-08 17:28:38.395+08 2017-09-08 17:28:38.395+08 62a1a275-a6d3-44b4-b472-901f274afaaa 4aa4a735-9dff-49e1-8ff2-296efe68a305
+419b2537-98e9-484d-90a2-1ea38262e643 2017-09-09 14:39:09.828+08 2017-09-09 14:39:09.828+08 bda64c7e-58cc-4668-8f46-8d08be815f1a 8cdbe324-b7a2-4bb4-8353-bb3beaee80e4
+bd5cfa90-9a85-479b-bb01-1a91666f36eb 2017-09-11 20:33:20.859+08 2017-09-11 20:33:20.859+08 368cf5ab-5455-422a-a659-ba613b272684 8a918454-cdf7-442a-8181-8b92abebfdd8
+b31c1a93-4ec2-4268-a97f-a85c7abd6f5e 2017-09-12 17:44:24.695+08 2017-09-12 17:44:24.695+08 6e5f9207-905d-4732-bb07-89e21da54dd1 3810fe74-db24-4553-87b1-ca5f1c9adaf7
+4a1256ec-e341-4a64-9a66-f399ca2dad53 2017-09-12 17:44:48.581+08 2017-09-12 17:44:48.581+08 b71b35e9-7756-46e1-84c8-d8c092029638 6b0f9f27-9cee-42f5-ba21-60413843980e
+a9a8ad96-203b-47be-8577-87260aa2464f 2017-09-12 17:57:39.296+08 2017-09-12 17:57:39.296+08 e5bbfc36-064a-45ac-adf0-2003947dd2c4 1a40d489-5c03-4f60-8665-4b24279aedc6
+ac6a6660-72f9-480e-a44a-d3ab55bd5592 2017-09-12 19:48:22.319+08 2017-09-12 19:48:22.319+08 548cf988-bee3-40cd-b3b9-5d7d2da91605 64cb0706-4c3a-406d-886e-8cbdd636207e
+0786c9f1-0bb4-4d35-afc0-328d33c19461 2017-09-12 20:28:42.06+08 2017-09-12 20:28:42.06+08 d4a43ecd-43b6-4232-a482-16e675aadb59 7bb4f089-2a73-4a73-aaff-81066efbde67
+dbe5a4d2-1811-44bc-9583-7138c7e72a79 2017-09-05 10:54:48.272+08 2017-09-27 16:44:25.805+08 0e235516-0320-49a5-91e7-a70282c3bb70 71ac1749-1c32-4014-a496-8507cf5be772
+815c0483-f278-47d6-a532-3667fe2631cf 2017-09-13 09:13:35.781+08 2017-09-13 09:13:35.781+08 d0fd7335-0b93-4716-9793-e95ae31f1765 ab11e177-0282-4aac-a84b-df19e34d4320
+06635de7-b982-43ca-bb90-1cac8c33f8cf 2017-09-13 10:00:10.89+08 2017-09-13 10:00:10.89+08 1108a01e-cf7e-4407-be7a-85cf6851ca6d c9738a60-d623-45c0-9ede-1701eff4703c
+82e9e832-8247-4c1f-bf0f-a3e39df0e296 2018-09-21 17:53:27.827+08 2018-09-21 17:53:27.827+08 7aa0f7e1-677e-4285-8888-33c63cf443d7 9f047473-1e30-4e60-93f0-85781d1bfbd5
+daf5a855-ebdb-447e-8e71-9585db37a4a9 2018-11-06 19:45:02.207+08 2018-11-06 19:45:02.207+08 1ed1816a-f590-4eba-8702-c334ec7a1e1d 5b88117b-02ea-488f-98d0-0a3a9bbccaa7
+9cd99c73-9df2-48db-913b-2a6ef02e41ef 2017-09-14 14:36:06.217+08 2017-09-14 14:36:06.217+08 31983eec-ccfb-4540-8ab1-12b5b3c8eeb2 3da6f3aa-036e-4f89-a50b-9fa2081ec912
+8a488df0-9e42-4766-9d25-b6229127b17a 2017-09-14 14:41:42.386+08 2017-09-14 14:41:42.386+08 32d914f1-c9e2-402c-b81f-3805e8f60e60 83d49ed0-5f75-4c4e-bda6-f6c6662ea8e0
+3d10203e-5430-4daa-aa71-daf0030721a1 2017-09-14 14:47:52.175+08 2017-09-14 14:47:52.175+08 bbb36e1c-2e68-4274-881d-77618b327419 d4908512-bbfa-4243-a285-3edfbdb18441
+ada77537-4616-4a28-a5da-acde373b4ac8 2017-09-14 14:53:06.114+08 2017-09-14 14:53:06.114+08 b640dd61-c4cb-4b47-af2d-fc9a2284f407 f16fa6ae-e48c-44d0-a906-8fe92d621c22
+d22925b9-8d60-481a-80ad-0f9080bd9ae0 2017-09-14 17:27:01.224+08 2017-09-14 17:27:01.224+08 ed246dd4-64be-4a48-a869-c4de71bbb2b6 f57f7c1b-549f-4af4-8914-447d7c461e5f
+f504e85e-ee97-4a47-96ef-a54c831372f1 2017-09-14 19:37:28.756+08 2017-09-14 19:37:28.756+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 102b9d0f-de06-4a70-92fd-fadf63194b79
+8c572d99-376d-481e-b4b0-378c1131c84b 2017-09-14 20:24:32.023+08 2017-09-14 20:24:32.023+08 64bf5540-28ff-480e-9225-c13af83a12bc 9081165a-8470-49d3-887b-1cc9e43fe06d
+401d7352-b80d-47e8-912d-d4596cfa3bad 2017-09-14 20:36:40.109+08 2017-09-14 20:36:40.109+08 7e142a42-bfc3-472c-8c56-ef90d2964c67 e96f9d8d-b89d-40ec-86f4-8dd32c040a7b
+eb7cfb22-1e6f-45cf-b6b8-fa2201f30244 2018-01-05 16:29:05.842+08 2018-01-05 16:29:05.842+08 26976155-0f82-42c9-962d-6d8f206f40d1 f15a40b2-b1ac-4035-9cf1-5c48fe64862c
+741dac57-49b2-4b78-9957-666929059d9a 2017-09-16 12:22:16.734+08 2017-09-16 12:22:16.734+08 cb38bec9-e2e2-4a58-8bf5-b730c85910b3 a02c7304-9b7e-497d-9d53-00667d47295b
+49aaac66-682b-4de8-87d5-6ce3a519b7ea 2017-09-16 14:19:05.251+08 2017-09-16 14:19:05.251+08 c9f6eadb-715b-4ad3-9354-fcfe2735ba5a 90bd0c79-4d69-4a80-be30-5c6425891dab
+8864c0b8-ea6e-46ba-9943-48f6748080ad 2017-09-16 15:21:21.458+08 2017-09-16 15:21:21.458+08 33bc9e2c-5131-4c06-836f-79051ffccb1e e631ef74-cc0b-4ab0-90bb-8ae9a37294dd
+0a6df1d6-3fbb-444b-ae29-4a3ef6617e19 2017-09-16 16:10:09.778+08 2017-09-16 16:10:09.778+08 797175f9-4873-4010-8299-cb4ce6a3e386 ad0b4164-972d-458e-8f63-d16b24582168
+3c9a4f39-59a3-4898-a771-198a5564d3b6 2018-03-15 13:46:19.594+08 2018-03-15 13:46:19.594+08 537d2dc0-86ba-4f40-8da1-06a0e34795cc 8ec909d3-5d38-410c-8e0c-ef9e2d5d3417
+9c7b3152-d290-4653-92ab-65733e9d12f1 2017-09-18 21:06:35.756+08 2017-09-18 21:06:35.756+08 30898650-f0f5-46dc-adad-62e86317d96b 7d3d6aa9-710d-4dde-bcdb-77baa08e3973
+16ed5616-0f8d-4958-b9ae-6499913bcbf5 2017-09-19 16:23:55.255+08 2017-09-19 16:23:55.255+08 153bec2e-1a9a-428d-a5f6-8ff6a5b85fa0 8c7a5c1d-30b5-4c7c-92a9-75eeb60fea98
+ac04fbf6-c192-4f78-bf60-30f5e2e8aed8 2017-09-19 20:20:53.759+08 2017-09-19 20:20:53.759+08 66c8cd90-726f-42dd-afd8-2aa08f68a71f 7c467342-5c75-43f3-b949-139162c808ae
+1a3ec72e-56b5-4455-bb49-88b0ab4a7323 2018-03-15 16:52:12.177+08 2018-03-15 16:52:12.177+08 5ce3382a-6764-4a08-8bfe-5b058e8a9017 553c1f7f-1497-4a65-be6b-9cbf4debda54
+9d9829cd-cfb2-4226-b8d0-510715cdb1ca 2018-01-08 11:12:27.18+08 2018-01-08 11:12:27.18+08 c20df626-7eb9-47e5-8d36-88233fff0015 0721f93b-cc19-4dd7-96e6-4794005f481c
+c8ea419c-9b62-46cf-9f7f-2774bdf9f3a5 2017-09-20 16:26:18.736+08 2017-09-20 16:26:18.736+08 c0659a78-00c3-480d-a385-21a57e7eba37 cf7d6928-ce06-4e99-aaa0-4fc4c011ce61
+0ea5c351-2f49-4fe9-9d14-81c6ca496849 2017-09-21 10:57:18.47+08 2017-09-21 10:57:18.47+08 523d0a38-7b6b-4808-94b0-63bb477e7ead 2750266f-7ee5-48c7-9278-f14032923026
+af8b052f-ed31-4864-9169-53f46d72eda4 2017-09-22 17:34:24.783+08 2017-09-22 17:34:24.783+08 9e159552-fb77-4196-aea1-d7e9f88fcbbc bb39dea7-0de5-4844-8e66-c702f05081e4
+2637ca97-e6d8-441c-b28b-12060952834f 2017-09-25 10:44:21.686+08 2017-09-25 10:44:21.686+08 13cc9f05-5d98-4778-93a9-a423b70250a7 e56064f3-665a-4f5d-ac50-b6f31faa26a2
+6a7ec83d-1036-45da-8c3e-a3f41e83d74c 2017-09-25 10:54:34.192+08 2017-09-25 10:54:34.192+08 8092619d-978e-402a-9aa1-897cb718a39b a9fc8480-541f-4a49-9a5f-f4934866728f
+b82b1ad4-ac3c-4d73-aa68-1cdaec7bb633 2017-09-25 19:45:57.224+08 2017-09-25 19:45:57.224+08 05c849f0-63f3-4d19-97bf-f22e655c0852 7f3b1220-a5f6-4c2d-bc6e-efec711079c7
+bb384bc1-9316-4aa9-a5dd-ab63cf9b0b7a 2019-12-20 18:07:22.562+08 2019-12-20 18:07:22.562+08 d3030bd3-a5ed-49d3-bc4e-0c774ddbdf86 6695fd40-827e-4ca8-8a19-4e91636751f5
+74b6cb86-a127-4370-b9f4-d6e64b7cbeab 2017-09-26 10:30:13.292+08 2017-09-26 10:30:13.292+08 46e0602d-85be-45f3-99cd-4a9a0ec8c3f0 b815e8bd-a927-4120-81ee-53ba19468f9a
+a97f3e6e-9258-453a-b87b-2607bbf1e855 2017-09-12 18:08:25.12+08 2017-09-27 15:52:22.442+08 c59b78f5-1913-43de-8355-67d4c34b662a 8ccca344-fbcd-45ad-bcfc-eb97278fba39
+f23b89b5-55a0-41c4-a828-175fecf098a9 2017-09-27 15:57:43.979+08 2017-09-27 15:57:43.979+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 ecc801b1-0517-4722-aa98-e20d2c9b2fb7
+4b621bdb-f9a9-4463-9ded-7ee1d0fa37d7 2017-09-14 14:50:50.815+08 2017-09-27 16:41:57.469+08 806a1583-b6da-4e6d-89f9-419fad701d56 9e5ed7e4-08fd-407c-a34c-6c293ae720cf
+0710ba3a-c505-40fc-aa2f-ae310dd06264 2017-09-14 19:08:55.15+08 2017-09-27 16:42:50.731+08 4a08b319-23f2-4854-ad86-755792e575d4 474d1a8b-734f-47c6-b26c-c51ff6353237
+1be73c8e-2c3a-42f4-947a-3bdb96de49fc 2017-09-27 16:52:45.168+08 2017-09-27 16:52:45.168+08 2b50fea6-1651-43d8-8e42-2faca6f3d3ac 5d90bc3b-2691-4841-9f9a-787ce4b681a5
+ebfd85a6-3b63-4ba6-817a-a0f42ab9c2d1 2017-09-29 15:08:42.963+08 2017-09-29 15:08:42.963+08 72037569-7638-4b93-9212-ba15109f9afb 0e4a346a-3921-43ad-8ea5-1168af781862
+321c4be6-2087-42d2-87a4-7eb8884d6d2d 2017-09-30 11:43:04.336+08 2017-09-30 11:43:04.336+08 755904b4-158d-413b-bc84-ad489380caf2 3dfee4c8-a046-4751-b2c1-dc037b69943b
+74eecdfb-dfb7-4855-a27e-368f7d0bf38d 2017-10-07 20:50:21.627+08 2017-10-07 20:50:21.627+08 d54fb237-1da2-40a1-9a83-e4a2dc8eecff 884698d5-ed56-4613-85fd-cc02d313ae2c
+edc3c578-25c5-493a-a50d-32998645e670 2017-10-23 10:40:53.511+08 2017-10-23 10:40:53.511+08 40c5fafd-6377-439c-bc26-6e7eb069f3c1 63ccdc3f-2ef3-49e7-915f-ff80e09bac85
+389da17a-9f47-4deb-bd3f-8c8e5c800505 2017-10-31 18:02:48.606+08 2017-10-31 18:02:48.606+08 cbd4f0c1-9be1-4123-8fff-9d16d6f163a3 fa62c56e-a9b8-4fa5-81c0-2ab96f5764bb
+7ad0b3d4-b2c6-4bbe-b255-179a65399fd9 2017-11-02 16:14:07.422+08 2017-11-02 16:14:07.422+08 9b5c5f27-ebad-42e1-8586-405066f03c1d 767c921b-d375-475f-bec1-d5a11464e86d
+6f0d66a3-cb27-4561-8272-017feb096b12 2017-11-06 10:15:17.86+08 2017-11-06 10:15:17.86+08 32ccecbf-6cc2-4076-9f31-9541382b444a 23557cc0-60a0-46fe-8e09-8a48afff76df
+dcef8d40-0434-493a-a3e1-7eedba1f5824 2017-11-06 11:16:45.214+08 2017-11-06 11:16:45.214+08 62f4f7c3-95a8-49d9-a5d1-c8f432c8d598 0850698e-6c98-44ce-a664-9f4e257d8650
+1949614c-403e-49bc-ac13-74c61c3fd9aa 2017-11-06 15:04:16.83+08 2017-11-06 15:04:16.83+08 8e034647-583f-43a4-9aa1-1291e5bd3b0d c79eeb0d-55cb-4508-b1be-f9f1c4282293
+d6e69b78-3255-40c2-ae49-f17c91e7c3ed 2017-11-10 14:15:21.218+08 2017-11-10 14:15:21.218+08 e265c046-3bc7-43b9-85d7-493bfd4c76d8 472e6c9f-a3b3-4345-ba17-96aebcbc7306
+3fe48d93-2c95-4591-bffc-f6d2d20ca5d3 2017-11-15 11:18:38.564+08 2017-11-15 11:18:38.564+08 e8a19dbd-26d3-49a0-87b6-8248ceb6fc53 95376b40-306e-4012-be53-636ef41d2c77
+ea0149c9-f107-416e-a001-306506913221 2017-11-16 13:50:55.935+08 2017-11-16 13:50:55.935+08 96c5d707-f87c-4a33-a34e-4094c74b8cea 6c369fae-95c7-4986-a439-1a2b511a6d71
+92653bd4-1b18-4cbb-8961-fb333671af10 2017-11-16 17:03:23.926+08 2017-11-16 17:03:23.926+08 80773b73-3653-4506-8298-8dfcb4865a90 a7ad819c-a67e-4173-a2a9-0ad7dde3582f
+33632ba7-c612-4105-b8f5-c9c59d19b45d 2017-11-20 16:42:59.981+08 2017-11-20 16:42:59.981+08 5e0f1662-8477-42af-9c5a-ae89e5c992c1 9e689319-009e-4809-846f-dc4a98ad40a6
+50780819-ecaa-4cc5-b247-8a1ebb16c0d0 2017-11-21 15:57:22.497+08 2017-11-21 15:57:22.497+08 3c4f26a5-6ee8-410b-b9d2-1e114b7f71b2 aee5e701-48db-49cb-a3a4-fb45007cc060
+7c2e41ba-d42c-471e-bb3f-c86e7d7d3886 2017-11-23 10:44:01.195+08 2017-11-23 10:44:01.195+08 eb818780-0ef4-4fd6-9b77-64d3c96493c4 579fbaf1-9b81-42e4-b9e9-528296ba6e32
+9feea938-187e-433b-b4c4-c1638c16d81d 2018-09-25 10:58:51.079+08 2018-09-25 10:58:51.079+08 94fdfca3-2f0b-4003-b3fd-77dc3e522b6e 8e64aea7-1579-42bf-ac93-406314fe9b30
+459f4434-06a7-488f-9dc3-a58650a79fff 2017-11-28 16:55:37.914+08 2017-11-28 16:55:37.914+08 7fa794ae-2b82-40df-9084-5d7b66236d50 ba54a277-84a9-4908-8137-33a4a0c12281
+faa5bc0b-d4ad-4dfb-9ab5-b21d6d2589ee 2017-11-28 16:59:16.915+08 2017-11-28 16:59:16.915+08 f8a92db3-4b55-47ec-a466-2d3c44e8b97d 5d581d09-0fd7-4ea3-9752-4af4aabf1796
+59157ca6-99bc-4d8a-9d24-281e6cbc1c92 2017-11-29 09:23:59.561+08 2017-11-29 09:23:59.561+08 25fa942f-2929-4429-85e1-e3deb8f728b0 45750a64-368f-422d-b2b2-cf71d63aee33
+7db78089-5e10-4553-82aa-9c9f20c5c48a 2017-11-29 11:50:29.748+08 2017-11-29 11:50:29.748+08 4bf64044-476d-4d5a-933e-5a493f1ee2e4 ee8acfbd-2198-46ae-a522-1e9d5cadc4c7
+76f04c33-6003-4291-9b07-3b0f20cdc3a5 2017-11-29 11:50:41.73+08 2017-11-29 11:50:41.73+08 3dad677f-3582-41e5-a77c-ea629f6974fe d2adaa01-0e99-40c5-bb35-60983fbf30e2
+d48e8713-6504-4c93-9e78-958b83cd89b2 2017-11-29 11:51:02.634+08 2017-11-29 11:51:02.634+08 7224902a-6cd1-4877-a92f-d8cb544d36ce 034d576e-32da-4ab2-8b1f-309e1eddf10d
+193bef64-a59a-449c-8227-55e282c9d1cd 2017-11-29 11:51:14.153+08 2017-11-29 11:51:14.153+08 06beef64-e140-4b7c-865d-64d043fcecc1 523f6570-a896-46be-b31d-58b0dd5c3fc6
+503d02c0-c5e6-4e1b-829f-089d1a7cf3d7 2017-11-29 11:51:33.182+08 2017-11-29 11:51:33.182+08 8275461f-e7c3-4595-ae09-36a4288c65fd ae393b36-8ca0-4235-8eea-478dd008d7b8
+e511653a-6013-44a9-b721-b60faeec6ab8 2019-12-23 11:03:05.631+08 2019-12-23 11:03:05.631+08 b3db27cd-01dc-4f48-b241-ec576d75d6b2 104a4a5d-21c7-47d5-ac48-13724cdcb437
+3db12289-1640-4366-8b0f-efd265d40c58 2017-11-29 11:51:59.054+08 2017-11-29 11:51:59.054+08 71f3c15e-91d9-4044-ba95-66957d312dc8 ce1060ac-eb0a-43d0-85c7-7e63523b057f
+b9793a46-4c65-4c44-bb09-b587f788c4fd 2017-11-29 11:52:13.543+08 2017-11-29 11:52:13.543+08 857d5408-8cb5-4084-a7a3-ab0f9d3dd1da 58804dd8-5a61-42a0-9ca5-a9ad436b163a
+8ab8e15c-1812-48b6-adb3-52081e8eec4a 2017-11-29 11:52:24.003+08 2017-11-29 11:52:24.003+08 29f596e9-1ed7-49db-b932-0d436bef0d59 274e14b3-fb65-4b24-8a1e-104a29ca88af
+fe984f52-06de-4598-ba9e-3a9e21883da0 2017-11-29 15:29:19.962+08 2017-11-29 15:29:19.962+08 90706e3b-13d8-4862-a1d4-3ace7d4a7b6e d999e924-2f01-4d79-9c09-be9e50d4d94b
+b57375b4-4a86-4f54-8b18-a181bb7cb37a 2017-11-29 15:37:12.762+08 2017-11-29 15:37:12.762+08 c49b63f0-5fc2-41bb-ad27-231510dde4c0 93c8f248-e1bb-40d5-8f58-7008e4f6706b
+ecf366d7-ca68-4dd0-9e43-71350e17931b 2018-01-05 16:18:59.705+08 2018-01-05 16:18:59.705+08 ae9f3c10-ba3a-42be-a58d-35ec3c3c15ea 2d2e69b2-0032-4057-859e-b1ebf354ed31
+4f7c8982-2590-4850-ae88-b65ae353f01d 2017-11-29 15:43:22.301+08 2017-11-29 15:43:22.301+08 e6cd110e-7720-4d98-bf4b-655e7d545791 fb241343-d509-4147-a2b9-94ebe362c90b
+c4c55ae7-672a-4298-96a8-2c358ebf7998 2017-11-29 15:47:36.256+08 2017-11-29 15:47:36.256+08 dd89b226-58f4-4509-9eb9-cf119be26a80 6f71d673-6cb0-435d-8813-4bae2641569e
+47c126cd-d875-4de0-bb0c-632dcdf0163f 2017-11-29 15:52:10.674+08 2017-11-29 15:52:10.674+08 0c5f1ed6-626c-4903-ba56-b99bb676bfc1 768a6d53-6450-45ee-9c11-e9a943a1f0b5
+8f31ac8f-3c4a-468e-b4cd-55c43326c848 2017-11-29 15:56:44.954+08 2017-11-29 15:56:44.954+08 f124fe60-87de-429a-ae17-249d22ce2005 53e68c57-c31b-42ce-ad23-1662e9824e46
+0aadf15c-fa4b-488e-8e0c-8706789ee465 2017-11-29 16:58:58.196+08 2017-11-29 16:58:58.196+08 4211c278-30f5-4c53-ad81-d296e391b8db 5a345bee-327b-4873-b40c-d87f79a605fb
+019ac9a3-1389-4191-84d7-33ccada031de 2017-11-29 17:38:18.638+08 2017-11-29 17:38:18.638+08 d3ea47f8-1472-484d-a6fc-411e6637a71b 94c168e2-c0e7-4294-b4c2-d919008c1d10
+61407609-e827-4801-9532-424ab78f22a0 2017-11-29 17:38:30.285+08 2017-11-29 17:38:30.285+08 5aa08735-2f16-4ca2-b9a3-dfbf95e1153d 2f5fb5c5-0ef5-4557-a585-dd622f2b10b8
+7d2839b2-a17c-4167-8c56-39586c20b978 2017-11-29 17:40:19.269+08 2017-11-29 17:40:19.269+08 c71648f4-8926-4408-b731-937ce2b9db90 1ffa653d-c6c7-4dea-81d1-c794e428e2d3
+a079e3d8-9390-4b0e-a886-d29fecf65363 2017-11-29 17:43:55.67+08 2017-11-29 17:43:55.67+08 19e68163-a7e9-4be7-b9ae-6966035ac671 d5fcc72b-859b-490b-b112-4d7025ef4ae8
+06a390a6-d1a4-41d4-872d-638a6995f3aa 2017-11-29 17:46:58.808+08 2017-11-29 17:46:58.808+08 9bf06fea-f0b0-492f-9d2f-5ea749264883 8c05ad44-f5cf-4459-96bb-2a15d9a21bac
+1705c4c6-f3ed-4e93-bb24-1536f9eb37c4 2017-11-29 17:49:21.405+08 2017-11-29 17:49:21.405+08 8096b88c-dc64-4f26-8f04-6ac919d70447 92890ffa-93a4-4ae2-b4d0-8cf778724f5e
+e509ae45-1e43-4c4b-b227-c9b7de6b7a77 2017-11-29 17:52:19.037+08 2017-11-29 17:52:19.037+08 67806ef3-539e-4cfc-932c-2b9fd5d49329 c02aab36-aa63-44cd-94d1-75ef3f190771
+b5b7d876-ca58-4815-8b20-e3c62fa613c5 2017-11-29 17:55:29.416+08 2017-11-29 17:55:29.416+08 17077adc-cfaa-428d-a6e5-346aa75678d9 e2e6e717-5b3d-49d1-b3aa-89a6989840a8
+ac8aceb1-f4d7-4150-8892-c1e7f701d158 2017-11-29 17:57:56.262+08 2017-11-29 17:57:56.262+08 af851f6e-99a5-40e6-b8f1-e3ae9cc7fca2 c43bc2c6-bb86-4b96-912d-989da5e84a08
+144f62b1-1a86-4a4f-8868-6f649423dd66 2017-11-29 18:00:44.76+08 2017-11-29 18:00:44.76+08 979e7ae3-520f-4bf4-b641-7451c30378c6 21226244-5465-439b-9ec6-7facf0f96d67
+51b92a61-d8f8-4747-a4ed-95529e16757c 2017-11-30 13:55:54.586+08 2017-11-30 13:55:54.586+08 06a3c28a-b1d4-41cc-b291-aa2cd6682d60 61ab412b-58c2-4f61-878d-52a0ac420011
+135f6815-5054-4ef0-892d-d8f48682e057 2017-11-30 15:01:46.324+08 2017-11-30 15:01:46.324+08 d864e964-72fe-43e7-96a5-8e0a2079b731 1c92852a-e4b2-4ce4-824b-123f7fe284de
+e8181c08-c475-4d85-bc88-fede2e1bf3bd 2017-11-30 15:14:59.47+08 2017-11-30 15:14:59.47+08 acb1f3e2-048a-4eb3-a01f-36e1f1968b4a d8cb1d69-e11d-452a-b054-21e315f403bb
+dd128205-9fd4-479a-a651-fc8c3ce4294c 2017-11-30 15:18:38.823+08 2017-11-30 15:18:38.823+08 2de4150f-19f7-4fff-9cb5-9d97226ded24 1494ec33-f0e1-497e-8b34-1b50f00b2903
+414f6443-62e1-4c46-8596-3ae04e95f6df 2017-11-30 15:25:27.921+08 2017-11-30 15:25:27.921+08 689910ff-378c-4467-b95b-22907c3076e5 1d61610c-7715-4c72-9273-2a0eecae239c
+4a669941-ca7c-4c7b-aac4-cfb6eb6fdef5 2017-12-01 09:59:04.607+08 2017-12-01 09:59:04.607+08 8c4a1dc0-f42b-4a5b-9267-e447615a1821 573ebd83-8539-4533-9c4a-8b05403e6817
+5bf75458-3699-4fb0-a880-43fe1adb8a36 2018-11-07 10:56:08.269+08 2018-11-07 10:56:08.269+08 b5a32d0d-110f-4eba-9d54-a5a661fb55d2 0b84eeb5-9a45-4d3c-819f-dd4875c00720
+0fd48abd-ae87-4155-b349-a98d4319a482 2018-01-05 16:50:30.012+08 2018-01-05 16:50:30.012+08 7be90de6-78ea-44a4-8896-d18f9b9ab89a 809a86cd-7765-4faf-9b2e-10dfda10b756
+59a73872-e00c-421b-a043-7e46f68255b4 2018-01-08 11:12:03.014+08 2018-01-08 11:12:03.014+08 09032111-4073-461a-82b6-1c193ef88077 25ec78fa-7f89-4c56-8145-82ca10f3c478
+c77355e3-a35a-48c5-bd11-45f7fd2e8355 2017-12-01 15:00:04.236+08 2017-12-01 15:00:04.236+08 d28e689e-1bcd-4f9e-81ac-a0bfc56667e3 41a2d44b-73a6-477f-af22-b0275ba0ab7a
+e0badebb-710b-427d-8efb-00e7deeff5a6 2017-12-01 15:05:58.36+08 2017-12-01 15:05:58.36+08 95a5b30a-5159-471a-810a-14e31c3a868c 680fcf75-2aab-47c5-99da-5fa692c9e2d0
+513ebbe7-f876-48f4-91cb-7f0f8b7bd960 2017-12-04 12:57:41.964+08 2017-12-04 12:57:41.964+08 176efcfa-0544-41c5-8aef-5821cb43a0e3 12b9717b-35bd-439a-bb17-2733b58ad3b7
+c8a73642-2dff-4cee-ab0b-eb766ab76d9d 2017-12-04 13:47:01.148+08 2017-12-04 13:47:01.148+08 06d28e3e-8a80-4110-bf18-a06cadc13e9b b8a87627-8374-4059-bf7c-33d7ab066bf6
+ee867b3f-7f20-4755-bc47-30540b0b9565 2018-01-08 11:12:13.364+08 2018-01-08 11:12:13.364+08 cac190e9-a228-4032-afbc-2f3bf990cc82 15f1ad0b-d19d-4cb4-a970-7fa756d3531d
+3f075cbc-233d-48a2-b64e-cd474a0edc46 2017-12-04 14:33:34.393+08 2017-12-04 14:33:34.393+08 50cd4d61-29c8-4d36-b143-85fcda3f99e5 105a2dd0-4901-4b59-aac0-5610876a7fd8
+e2352f08-1207-4867-ad75-2bc14062badb 2018-09-25 15:45:24.003+08 2018-09-25 15:45:24.003+08 b9257d1a-c48e-498a-85a0-6a928f32b049 a6b46729-f63a-42c7-946c-2f308b7e169a
+0fcbb06e-93af-44e8-961d-70710b5a6231 2018-09-25 15:45:24.012+08 2018-09-25 15:45:24.012+08 131b8ec5-58de-41e6-9d48-96e59e77532e a6b46729-f63a-42c7-946c-2f308b7e169a
+cea489b0-5f66-46cd-8f18-a2ac61a007a9 2018-10-24 13:35:15.431+08 2018-10-24 13:35:15.431+08 6a85de5f-e927-43bb-bb03-21f34d546aca 37f86573-bda4-4eaf-a404-b11edab30fd5
+b4ace03b-fa6b-4e74-8e27-43fa8399fac2 2018-10-26 14:55:47.757+08 2018-10-26 14:55:47.757+08 1c99c3da-58a7-4f9d-aa29-2a1b1c335f7a a54c026d-8570-4920-b0aa-4ca6984bc48c
+0a6ed855-fc7b-4c4e-a467-e156a9979c46 2018-11-09 17:46:33.108+08 2018-11-09 17:46:33.108+08 3452703a-aec3-4cca-9aa7-7041c1ba236e d7bb4068-12cd-41d5-ab05-2b61891b4c76
+7d71d23d-4233-434b-80c0-892c4198a1fc 2018-01-08 10:24:01.168+08 2018-01-08 10:24:01.168+08 e29ac2dd-147b-403e-a9a8-6737b7799100 12e0e3ef-2263-40d2-9b29-6e796130a147
+607b5fcc-2a4d-4d70-9499-47a03df2af06 2018-01-08 10:24:02.015+08 2018-01-08 10:24:02.015+08 51734448-f0f6-4268-8191-cd093e9e6e60 ac14ec8a-bec7-46a5-9434-50605169d7be
+f55664a0-5f4d-45ca-9a4b-6aa2647ad4ab 2018-01-08 10:24:02.59+08 2018-01-08 10:24:02.59+08 7b98954d-1ba2-4349-9f4b-26d35ab67107 89b0829e-cf41-4017-827f-b70b602fc33c
+db0002d2-3063-49c2-bee6-a3a49180a4b4 2018-11-22 15:43:17.355+08 2018-11-22 15:43:17.355+08 08549605-83a6-46c5-8fbc-83279c95d08e eac95355-2c8c-43cb-88d7-e5d18905bb5a
+d5dec873-e4e5-42b2-8e92-823913e32102 2018-01-08 11:02:08.935+08 2018-01-08 11:02:08.935+08 eb737450-437c-4c7c-9a72-f54364c468a8 e7560d3b-9857-407b-a6ec-0b184dd34a22
+4c32fb55-5e68-44aa-9be9-1f77d6875673 2018-01-08 11:12:44.995+08 2018-01-08 11:12:44.995+08 ab8b7681-8ef7-4101-9a8a-5bee37ee7510 3d498b9b-a878-4a48-8e88-8991154f9267
+bcad1f13-7f8d-44fe-af35-a6be90947824 2018-01-08 13:55:43.526+08 2018-01-08 13:55:43.526+08 a8d7c27f-35f9-4a65-943b-afa42ba34e5a f009ce71-ac99-4a14-bbfd-a69d39863d7a
+bc5abcc9-9b4f-4a08-888f-4f9cf6c84588 2018-01-08 14:03:13.664+08 2018-01-08 14:03:13.664+08 45dc0871-e9be-4b68-bc6d-76d80581e8dc ca79e288-7a88-4d43-a59c-09a227ed2a87
+239a3abe-7c01-4979-bb91-9c102f9e017d 2018-01-08 14:10:26.907+08 2018-01-08 14:10:26.907+08 d2d71857-97dc-4969-92f1-e380d0ad4bf9 5f6c2fa6-075e-4c97-b0b1-ce4b945b700d
+2c827f4d-e96e-420f-bf99-68fb81a7a542 2018-01-08 16:27:57.46+08 2018-01-08 16:27:57.46+08 477069fb-894d-4a5c-9b41-d004be827ac5 4763216c-0b7d-46d6-afa8-14beb251473c
+5fbe4bbe-7c4c-49cd-a370-d825e8c76aea 2018-01-08 16:50:49.893+08 2018-01-08 16:50:49.893+08 58543b3a-1b0d-44ce-a3c3-856bc133204a a4327012-21f7-4f4c-8a08-aa84df8df368
+8d582bda-3e02-4e10-b5ad-eeb016c1cc3d 2018-01-08 17:33:37.641+08 2018-01-08 17:33:37.641+08 f846e46e-f9f4-4c0f-b697-4f3fc7d64f25 46b4f9e9-23e4-4818-a438-dc1e704d09eb
+0c43c5e7-c0b5-47d6-9cd5-a33d0d77a794 2018-01-08 17:35:44.868+08 2018-01-08 17:35:44.868+08 f0df6373-949a-4e30-b883-f49611315df1 fbcaf825-7175-4d83-8e74-120e4cf95efa
+a4c1edb9-ebea-4452-9c7a-2eaf74c4f10e 2018-01-08 19:14:02.097+08 2018-01-08 19:14:02.097+08 f07e4888-28ea-482b-bbe3-a61929f52026 5a23459f-6ede-47d4-ae3d-8fe9cf62792d
+70bf1125-4233-48bd-aa74-d0de1e9a4e7e 2018-01-09 11:04:36.187+08 2018-01-09 11:04:36.187+08 a318fba6-92d9-4d50-8a3a-1662c9b24fb9 50e8fea1-6428-4ded-be3b-647ef512c5e2
+aacc4941-11b3-4770-bb05-d7448a6e8073 2018-01-16 09:44:42.443+08 2018-01-16 09:44:42.443+08 01a3d220-4d3f-45c9-96f8-39d2cbbf8ef5 5cec0d32-95e1-40e2-a0a7-67fadc9b7383
+3f7a7102-1917-4a61-a412-03817082a7e1 2018-01-16 10:33:58.416+08 2018-01-16 10:33:58.416+08 e146e8c0-39b3-4922-b153-21492123982d 3254cbda-a637-4b1f-b967-7e683097a03c
+7bc62f6f-7ede-4597-863e-09812efc4129 2018-01-16 10:33:59.659+08 2018-01-16 10:33:59.659+08 8d3ad66f-9a24-4adb-99de-1b86ae3e5d46 13bc605d-4733-4db8-967d-52c227283bd0
+93c3acbc-e991-4514-a872-5898dab9e8cf 2018-01-16 10:34:00.739+08 2018-01-16 10:34:00.739+08 2b18c0fd-b077-4d22-92b0-c38896c4d150 3a2334c7-6f52-4204-a8a9-9784890e5a18
+f9abbdd3-d931-4424-b07a-d0e75a53271f 2018-01-18 15:22:34.532+08 2018-01-18 15:22:34.532+08 ef4bfc5b-4560-487e-9e27-4a3249da9ae3 4c350113-8ea9-4493-93e4-7654d1660884
+4750b46d-4bb0-4737-9859-3d851d18f9d2 2018-01-18 15:22:34.713+08 2018-01-18 15:22:34.713+08 73fc848a-0c95-4953-a162-0679cf2a8586 45976e2a-feb0-4aee-ad80-88a47ef3d19f
+e6e5017f-a7a0-410e-9a9c-998d448b8b03 2018-01-18 15:22:34.891+08 2018-01-18 15:22:34.891+08 1e00c4ae-1aa0-4767-bc51-c7b09621466d 1b7394e3-aac9-4412-8fb3-67337c27b101
+1f43ae2c-3f15-4b35-aa3e-f2f2c038b133 2018-01-18 15:22:35.055+08 2018-01-18 15:22:35.055+08 78740935-2863-41f7-ba2b-ed0d3d55d5c5 3aa8b22a-2569-4c0b-921d-4b27c1a84d0b
+9d36853e-888d-4b2a-af39-57afee520628 2018-01-23 14:05:00.668+08 2018-01-23 14:05:00.668+08 c0392392-9da8-4232-8535-3962a4b88b7a 75425dc5-fcf1-43f4-bc13-848b5e95398e
+d3e69597-1988-4403-a78d-2fa55e49dd92 2018-01-23 14:46:19.009+08 2018-01-23 14:46:19.009+08 3436c379-cac3-4baf-8a3f-7fa4b1fe6188 56508426-48f6-4536-bf0c-71d92a66c933
+4c8c3d5c-6c8e-4d7a-91a6-e01bd6c8fe75 2018-01-23 14:46:19.208+08 2018-01-23 14:46:19.208+08 f1ab939a-33ee-4a01-8373-13c941cbce03 c1df54c0-e342-43de-9e78-d5d703748fc7
+25557291-fdcd-4e49-baf4-973dfe0c49c9 2018-01-23 14:46:19.433+08 2018-01-23 14:46:19.433+08 53649022-343c-4129-b626-9dbf8c660e28 21122d09-b2bc-4b76-b38d-473767b1ebd0
+bd43c2a3-5223-4626-8c81-378dd7be5b5d 2018-01-23 14:46:19.638+08 2018-01-23 14:46:19.638+08 4f360434-b54d-41c3-8163-4df050a68350 65e46736-aed4-4225-8017-5940e005a2a0
+4bf272ca-c383-4005-8b22-cd726d39c696 2018-01-23 14:53:15.208+08 2018-01-23 14:53:15.208+08 cbc0a4f0-8c2c-4215-9210-4f81c6de6fd9 2551687c-91fa-4545-869c-819ef1f78726
+dd4d3124-5d62-4d8a-b433-42ee9309b86b 2018-01-23 14:53:15.417+08 2018-01-23 14:53:15.417+08 fd91ebd4-1201-4b5b-a5a0-e4636fb4ecbd 6d05cb1a-e0cf-4c12-91b2-c6a2e260b0aa
+90cd0984-023c-4af4-9905-b81c984948ca 2018-01-23 14:53:15.803+08 2018-01-23 14:53:15.803+08 069cdfbe-2463-40a3-a677-fa3564d06956 197ed34d-9547-42fc-98b6-5693147ed4ca
+9b02189f-3d18-42fd-ae87-2f4af81a89fc 2018-01-23 14:53:16.004+08 2018-01-23 14:53:16.004+08 1933583a-00cd-4d11-99f5-76e7dbeaa81c 4a2e0b1d-a5ac-4fd4-bbe4-624746bb62d7
+323556a9-1332-49db-a4eb-46eb514a944c 2018-01-24 11:32:25.013+08 2018-01-24 11:32:25.013+08 6fbdae8b-7c5b-4125-8df3-4d9bef10997a 6cc60b33-5d89-453b-ba31-d38482a9ce89
+5b817d30-d44a-44b0-b68d-857d124cf874 2018-02-02 15:40:55.957+08 2018-02-02 15:40:55.957+08 9a25cd7a-d145-4a19-95a1-bae3a0cb0260 52b9b684-34b1-433c-b728-80e91cc5a76d
+72e76798-ee99-413b-8a4a-f1a0d06bb463 2018-02-02 15:41:51.776+08 2018-02-02 15:41:51.776+08 a4dea266-bdd4-4ec6-8334-565d7cdc947c f7df5401-dc58-4a7b-9b2e-0ffa66914834
+616c41db-d8cc-4784-9441-346a40e53359 2018-02-02 15:42:09.192+08 2018-02-02 15:42:09.192+08 010ebb8f-5154-406a-a14c-cf57be327ecf f9895680-9637-43e0-bdd0-c150adacf551
+0ef9fdde-f3b6-468d-acfe-5546ddf65353 2018-02-02 16:19:55.425+08 2018-02-02 16:19:55.425+08 d33d38fd-5c34-41af-864c-314b9cc326ec 07150fe0-c0a7-45f8-884e-3e1b58d916c3
+84e49c48-c786-425c-8aa6-c532474b5008 2018-02-28 16:01:53.181+08 2018-02-28 16:01:53.181+08 af49da8c-cb29-4435-974c-d96d01e992bc 8ef229f4-04af-4e0b-bfc7-da2e9789de05
+9ddb1074-c2a1-403c-b971-a316098fabc3 2018-02-28 16:48:43.061+08 2018-02-28 16:48:43.061+08 ab5ddc7a-c116-496f-9658-12522697a1d0 4e1694d1-bc78-4e41-96d4-779ec95762de
+5abc39fc-20f9-407b-a34e-334640f311f9 2018-02-28 16:48:44.796+08 2018-02-28 16:48:44.796+08 e277560c-2da5-499d-a3eb-99ed74f642d9 94a4c225-557a-417b-b7c8-6289c88e290e
+a5a99631-0793-464d-8df7-8a7491c2de0f 2018-02-28 16:48:45.391+08 2018-02-28 16:48:45.391+08 ad956aa4-9d9f-414e-aa8b-d48cb81e9a60 48fa9380-745a-4968-8733-f9c0d3f6517c
+8ef8f368-f7fd-43fd-97e6-9fc069a02d9c 2018-02-28 16:48:46.025+08 2018-02-28 16:48:46.025+08 1f12ae0a-fb0a-497e-af70-8e53094543a1 8f6ed7c4-a717-4834-a1b5-781e5169d708
+ae79bc52-74b2-425f-8656-ce4d0e4470ed 2017-12-05 10:50:36.383+08 2017-12-05 10:50:36.383+08 84868dd7-e484-47d3-b26f-8c39e898bb4d f307bfc4-068e-472e-9ac2-e384185a2575
+69a99265-977c-48db-8766-bd13d4b370af 2017-12-06 10:37:27.497+08 2017-12-06 10:37:27.497+08 514c15fe-e538-4824-9e48-1d3a83a560c1 3c11e69c-226b-499b-92d3-e157f8767c7a
+d1fb050c-9745-4a79-96dc-0e09313f2d9c 2019-12-23 14:13:38.187+08 2019-12-23 14:13:38.187+08 b77889c8-f54c-4422-91fa-2637e86d7933 5fc7aef0-e1e9-4359-840b-c238a57cb395
+e0d6b5e5-3d79-4fc2-9260-e1cb751c9361 2018-10-24 15:16:44.652+08 2018-10-24 15:16:44.652+08 8221e541-b6e9-4b4b-8b70-7e533565674f 99d2be00-995d-4591-92d5-68cfedb384d4
+ba0c703d-fd45-4665-a37b-c7b49c6072ba 2020-04-13 13:07:33.754+08 2020-04-13 13:07:33.754+08 48c0716a-ffe7-4de2-b5d6-295ebd1bef98 4a85bf4b-445d-44cd-ba39-cb6a79e93f30
+5a5c4ad7-1317-46ce-a462-bfa454fcb1d8 2018-01-05 16:34:08.818+08 2018-01-05 16:34:08.818+08 e087d664-23b6-4a21-b166-ac37688c0ec0 ec42e98a-1667-41f4-9f58-e02af9e496c2
+185a91cc-903c-40d8-a121-b243015303d9 2018-01-05 16:34:09.784+08 2018-01-05 16:34:09.784+08 e82e8948-89ce-4dd5-89dd-1a3d319d351d 091a6fc9-5dda-4cea-a5e1-03f2174e3a8c
+c5157a74-116c-4a46-8a1f-af60a3f14639 2018-03-15 16:51:58.449+08 2018-03-15 16:51:58.449+08 8ceadb1a-8f3b-42df-848d-523f3f16aaf2 eceb18c6-6b90-4ab3-9cb4-c4e198751362
+11dbb672-15ed-49b7-bab5-e084d9a72d52 2018-01-08 11:06:56.942+08 2018-01-08 11:06:56.942+08 d0696649-4f35-48e3-b1da-79384789f28b d4512b58-88c7-4ee7-b18e-2e027dad3add
+128f105f-22b8-4658-8301-18fb3ef226df 2018-01-08 11:13:13.222+08 2018-01-08 11:13:13.222+08 af9a44db-ee90-4372-87a9-b050e87791bc 9cdf4777-a545-4674-ba15-51ab000ae7d1
+e49aad69-f697-4b56-a6ef-a4a5792651e8 2018-11-22 16:01:56.55+08 2018-11-22 16:01:56.55+08 b0d9fed6-e9d2-46d8-9995-4b9865155e77 0688d076-74f7-443a-8642-8ad412fbf1c6
+e0f674a6-8dad-48cb-b492-cde6562ee70e 2018-01-08 14:45:20.938+08 2018-01-08 14:45:20.938+08 47aba0a9-a828-4842-9ce0-4733fa6efa10 cb8e9d12-039b-4e4b-8167-0d8ec7dbdb9e
+5b13acd8-85c8-43ec-9c7e-31673fc6d9ec 2018-01-08 14:52:33.354+08 2018-01-08 14:52:33.354+08 58459465-409c-47c0-b73f-a8a1c2cf563c 9cff67f3-9cda-47a2-b5d2-099a504b726f
+769eaa65-0a4b-481b-be5a-1d795659fdbe 2018-03-19 17:10:32.002+08 2018-03-19 17:10:32.002+08 afcc8d5f-3e9e-4ee3-a93e-135a41569846 2595061b-5754-47db-bc80-c72c62ad229c
+2598ce21-3260-4ae0-ad8b-062f7652a89b 2018-01-08 15:36:58.687+08 2018-01-08 15:41:03.82+08 37b9a8b6-49f3-40a5-b65e-5dcbd59a7495 fe3a2636-729f-4895-a031-9cb72c9c49a3
+3553ebe7-67bc-4b22-acef-765ef76e3c87 2018-03-23 16:37:04.443+08 2018-03-23 16:37:04.443+08 ced94dca-0afa-4ab7-b273-744ff40f6b7a b53dabf5-8d79-4003-ac2f-05cb858dda67
+bb6ea086-bf31-43c3-956f-7c7ad0ef563a 2018-01-08 16:22:24.861+08 2018-01-08 16:22:24.861+08 9c370a1f-67ec-4686-a7f6-da10dc99c770 7300e18c-24a8-4c69-9e39-e4cab75d99f8
+2b987b49-850c-4996-879e-e24e0d567ada 2018-01-08 16:22:25.029+08 2018-01-08 16:22:25.029+08 ab8f77d8-d732-48a5-805a-07d6cde1067d cf3cdaf4-edfb-49e6-aced-889665fb8cad
+148b2b3f-8664-4a6a-b268-8fed2c58415d 2018-01-08 16:27:58.104+08 2018-01-08 16:27:58.104+08 68998ba3-d344-4ae4-9ada-bebb5bba6ec3 85f438f1-4779-4cba-890f-22fb871e1b89
+73cc3521-ac58-4e43-a8b2-81d06cc7722e 2018-01-08 16:27:58.792+08 2018-01-08 16:27:58.792+08 ceb32ec1-625c-450d-b1c8-54be51bd97f6 436b1289-e9c0-4f43-a72a-d95727c270b1
+00e9d1a5-734d-4d95-82b8-1ee2fefa8add 2018-01-08 16:54:47.942+08 2018-01-08 16:54:47.942+08 2e5b58fb-acb8-4ec6-a177-95a7a1c20745 e50861fc-edb7-44be-90fe-99332d32beb7
+afc9980d-bb30-46a5-a0b0-c80920ed0336 2018-01-08 16:54:48.923+08 2018-01-08 16:54:48.923+08 a5889f87-05f4-4786-9e66-b322f564f5f9 684cc47b-0907-403f-b4f3-1f1fb9980677
+d0500317-6a2d-4f6a-8c1d-355c3506698c 2018-01-08 17:34:18.706+08 2018-01-08 17:34:18.706+08 d6464eff-41e6-49fb-a8f9-7ebbe2e297e0 0b31dbb2-11b4-4343-817f-1a16f215d86e
+02ef6f77-99cf-4187-a987-9e9ef71870bd 2018-12-06 10:19:12.775+08 2018-12-06 10:19:12.775+08 0d021590-ab48-4d98-b318-458faaf5d934 85c7634a-334b-4eed-a93c-c3192e743bcd
+310e0aa3-4a9b-4836-8c33-47dd18745354 2018-01-08 18:26:58.127+08 2018-01-08 18:26:58.127+08 22324cd3-c5d3-4628-9499-bcf2021d5ee8 0f2e2fa8-e41b-4c8d-acaf-7a437bd18025
+5cfa2ef9-032d-4398-abd0-f474b3520a11 2018-01-08 18:41:35.152+08 2018-01-08 18:41:35.152+08 0b714d0d-91d6-4e91-940d-189bec077752 3ee7d849-8437-4af9-be58-2de548f11313
+3989f060-80f5-4b01-9dbe-1a7220c3406b 2018-12-18 16:53:42.86+08 2018-12-18 16:53:42.86+08 16fd9521-16ab-499d-b342-4ed89b2fb211 9cde36af-7898-4aa0-b0cf-3ae8a9d1222e
+f169a43b-3103-4c40-b68d-2f25b1f08d46 2018-01-08 19:23:48.708+08 2018-01-08 19:23:48.708+08 978ae9f7-08b3-4e87-add1-abccd6d759d0 4117168c-01f4-4abd-a520-cd618a77957b
+e30a9502-5bf0-4e93-8e2b-d694e725636c 2018-01-09 11:31:58.847+08 2018-01-09 11:31:58.847+08 f4bf34ce-15d4-402f-a4d4-8e307936393d 0e1840a7-4883-4b25-bc8b-c8a7ce3c4ba7
+85173e8f-0b97-4fb1-bf64-307b532b1baa 2018-12-24 14:39:01.248+08 2018-12-24 14:39:01.248+08 865d7b6a-d5c7-4c8a-915f-4350e6cbab7b 9d7a8978-3d54-4242-b04e-be1eff619aec
+e18ebf2a-72b5-4d48-afa0-a925b9492b84 2018-01-16 10:21:41.74+08 2018-01-16 10:21:41.74+08 7ef9f068-1ac5-4c5a-802a-3b3a1bb55191 5d6297b1-c23b-4584-bb92-3c973d54d009
+dfa79403-4a7f-470d-af5d-574bd3b1087b 2018-12-28 11:30:29.903+08 2018-12-28 11:30:29.903+08 8b827cae-a928-42a2-bcd6-0071556c240f 84b3c3bd-bbc6-4ce1-ba57-02c4d7bc86a6
+c7eb21a9-9d37-4dbb-ae73-bdb4dc3f1901 2019-01-19 17:15:44.549+08 2019-01-19 17:15:44.549+08 4aaa9fb5-2119-4f7a-bd49-74a4c73e0e9b 790b37a9-d105-48fd-86ae-edc501b75246
+83b35283-1b26-4036-b6a3-abfb7e832bb0 2018-01-23 14:10:45.52+08 2018-01-23 14:10:45.52+08 986f4655-aea5-4e28-8507-f17ce74073cb a011b6b6-4034-42d5-90c6-615d17724ecd
+3e608c32-12d0-4363-a90f-f6b625c1a11f 2018-01-23 14:57:48.81+08 2018-01-23 14:57:48.81+08 10deb250-d676-4883-bfb1-2f557ec84677 06b640bf-bd95-419d-8ca9-a5cabe7f1060
+383ee8f5-d926-41a2-a11c-6c6ff1abeb20 2018-02-02 15:41:28.368+08 2018-02-02 15:41:28.368+08 09048659-5be8-43d3-9189-61f71c225e04 8f911a46-bbe2-4a38-9447-568a060116d6
+8ea2cc60-43b9-435a-953b-d1f52fbd9590 2018-02-09 14:00:33.259+08 2018-02-09 14:00:33.259+08 10fc859f-7d37-4093-99b7-b2acfdbe2c6f 6cdbb4ff-49e8-4e38-ace2-ac518eddd372
+fd1fed9e-bbb2-447a-a1de-2209799ad38b 2018-02-11 16:49:54.959+08 2018-02-11 16:49:54.959+08 363a580c-77e4-4464-8c92-4ee9c989358f 7bb18ac9-38a5-4f43-9d10-eb169b0d6e86
+3a78ffa8-bb28-4b86-a2ee-96b930b43e7c 2018-02-11 17:07:24.782+08 2018-02-11 17:07:24.782+08 bd051793-11f0-4c75-bb85-912a2c4e022b 39f37687-7532-4541-846f-6c2cfc7610b9
+ece5b2e1-6864-43af-817a-b2b82985bb26 2018-02-11 17:16:18.67+08 2018-02-11 17:16:18.67+08 cf2e6e9e-b046-437d-a041-4461ff0be3e3 11349b6e-9105-48ec-a093-00e780913f1b
+3483f057-f919-4eb2-80c9-36ecd4556e5c 2018-02-28 16:21:12.183+08 2018-02-28 16:21:12.183+08 9fb57bf4-6e35-4918-ac61-3f04bf81e691 967dd284-9632-4e8b-8e72-f97ef221a8c8
+16726836-7b49-47f7-a5c2-dc9b6d2a1ff0 2018-02-28 16:21:13.129+08 2018-02-28 16:21:13.129+08 d33fe3ee-6bc4-44c8-bdf0-4e36e569ff33 1531aa66-e652-42fa-8ec2-ce8a21b3bf12
+a66225e1-95e2-4286-9187-e27f8bf2a8d8 2018-02-28 16:21:13.7+08 2018-02-28 16:21:13.7+08 c73c5915-cc27-425f-b6e9-288aa74c6fd4 bf72e889-6d3e-4b1b-96d0-109c4bf11c1f
+3a53bafd-a841-4f03-9e89-e289ecac7286 2018-02-28 16:21:14.333+08 2018-02-28 16:21:14.333+08 479ab844-11f3-43d2-b8da-1b5e32abf466 54a5200d-95df-40fd-a03f-232696f3166a
+a1de73a4-0c76-494b-ac63-b2fbb3ca254a 2018-03-05 10:59:51.149+08 2018-03-05 10:59:51.149+08 cfd05991-7dcc-45cc-a7c3-afeef665f4c8 03c06c61-5dd6-4065-a2cd-c3e003f08119
+93aa95ec-dcaf-4f91-b6a6-c7f3b8a4e920 2018-03-06 16:50:09.594+08 2018-03-06 16:50:09.594+08 7572058c-09cc-4eeb-a9ba-be3be9bacf77 60c4219d-07b1-4793-8eb8-776528db5395
+1bf0b211-82d6-4c5d-bab1-06c7874a3aba 2018-03-07 16:03:25.198+08 2018-03-07 16:03:25.198+08 495c7b48-59c7-4d0d-8294-c5f50e2460e4 7587a4d4-7375-4dee-a174-e0f3718a566a
+66df30aa-434f-422e-a066-b76acf44a420 2018-03-08 20:20:24.437+08 2018-03-08 20:20:24.437+08 99a6c9c1-0f57-45bc-a1ff-e98a56faef46 a054b20a-1687-45aa-b27b-8a004a4c819d
+08a07ec1-7e53-4621-b7db-9e2fb33b8142 2018-03-14 15:32:53.618+08 2018-03-14 15:32:53.618+08 68518b11-55c5-4191-8116-1d27ee89268e cf1e81d7-8fd6-4a0a-925e-c4a3bd9f2db4
+3bb025fa-88f6-4c4d-b3c0-ddf3858f0b54 2018-01-05 17:57:19.746+08 2018-01-05 17:57:19.746+08 c66f2638-5449-4aad-b566-ffff92086b82 f59483d2-abe8-4d36-b982-2192e91aad16
+5ea90dd0-102c-4cd9-b470-62c4d2e2cd35 2018-01-05 18:09:59.836+08 2018-01-05 18:09:59.836+08 2578ea6c-aef6-4458-b889-dc7a102143af 0a59c44a-1c6e-41df-852a-4c8ae147bb2c
+0e3cb0b1-bbfa-4e0a-9c00-8320e94564f6 2018-01-05 18:21:38.327+08 2018-01-05 18:21:38.327+08 07f54ea0-7637-4b93-ad91-d7a0987f6a1b cd48b5aa-3933-4fab-a764-bfdb95fa86bf
+63adc161-ca07-4912-99c0-3bc87890cd78 2018-01-08 11:12:35.766+08 2018-01-08 11:12:35.766+08 2e57f353-4b30-441f-a69e-f9e7e639e6a7 a0ac7cfb-2fc0-4e5e-ac37-37a5e1effe3e
+b76af8fd-de98-4d1f-969c-11d598d74588 2018-01-08 11:13:26.738+08 2018-01-08 11:13:26.738+08 743c44f5-480c-4c97-80ef-a03ba282ed49 d77c5aa7-cc69-4efb-9360-d8c00f1e6b6c
+14659f79-1db7-4774-bb8a-0c57d5d7fb6c 2018-01-08 11:40:11.791+08 2018-01-08 11:40:11.791+08 bbcb8570-b0c2-4fb4-ac75-c28c9bf38503 ba7ceb0e-f6b7-4698-8ef3-ef352df0d199
+4bcaf755-b155-41f1-a5e1-a783029b97bc 2018-01-08 14:55:11.53+08 2018-01-08 14:55:11.53+08 59674186-4b3a-4864-845c-81ba695df093 c4c2344a-fb89-4bfa-90fd-c8eb322eb2f2
+d957ac07-ee3f-4597-85af-53f1843b91e3 2018-01-08 14:56:23.705+08 2018-01-08 14:56:23.705+08 db8bf711-b26f-4e79-bc46-564fbc4f60ac 2675dfb4-47bb-46f4-a12c-5072f787a0c9
+9d590cd6-4d9a-476b-9e51-4326b2a34cc5 2018-09-26 14:38:16.194+08 2018-09-26 14:38:16.194+08 5b2b2647-ee99-48d8-b069-f487f052a552 5c3e5d1b-6ebd-4f19-96ff-58ebf7b73141
+7cb82d0b-5255-4d16-998b-f00737770017 2018-10-26 16:15:49.385+08 2018-10-26 16:15:49.385+08 4caa397a-da74-42c1-b0a7-a83ba80b975e f95f5c4f-4338-4022-927f-72cb45e4b786
+06872533-513b-46b6-99e7-bd152091ee3d 2018-03-07 16:18:56.408+08 2018-03-07 16:18:56.408+08 b2781342-015f-4ca3-bd80-448fcb3d4bc0 d8f7cc71-3dff-4f7b-b19c-768e3499f822
+81ff5985-bffd-4171-8761-ea2a7e55b17c 2018-11-10 11:10:38.141+08 2018-11-10 11:10:38.141+08 bf029965-3d0b-4ca6-9426-c9aa2ea4b091 0231c7bd-309b-4f78-9936-d012a427497f
+079cd932-d2c5-4390-abeb-d8af23f3eee4 2018-01-08 16:27:59.737+08 2018-01-08 16:27:59.737+08 b9611c6a-f9b9-4ebe-a1e9-8665bd4f8734 914fd203-e2e0-4db3-a311-773637fc7b59
+b087fdb6-f8e0-48f9-9e8e-ea02151c79c4 2018-11-22 17:12:56.419+08 2018-11-22 17:12:56.419+08 41d50f61-0dd5-4761-977c-1ebf6e29b35f 2b007e18-5525-47fc-9a41-fd337b33dbbf
+c262bcd2-d107-4c3f-b375-24806e6e2788 2018-01-08 17:03:45.962+08 2018-01-08 17:03:45.962+08 80b225c1-5a28-46fd-aa9c-81e77818c907 441659ff-1370-4415-8a6b-93255b902186
+ddbc9fab-7bf4-4c7d-9a3f-8cfcdcd09b1b 2018-01-08 17:03:46.16+08 2018-01-08 17:03:46.16+08 d53a176b-9c3c-46b6-8e05-37b776800b13 cac0b8ec-a645-475a-bcee-9ae7a8d570bc
+d5303900-0b83-4a3e-aa7c-8005180ff622 2018-03-20 09:46:35.557+08 2018-03-20 09:46:35.557+08 e3742e72-d9c4-44b2-86aa-e90a5fa8255a 0a10f2ad-1873-4c11-82dd-98004c3690fe
+22e8a1da-8723-47bc-b953-80a9ceecf3f3 2018-01-08 17:45:25.087+08 2018-01-08 17:45:29.812+08 662ce139-84eb-4601-b783-3dc6503c1255 dd1657fc-d96a-4700-840d-c7af9da9dda5
+2c823e15-de53-410e-b7bb-147344ac5355 2018-03-21 16:05:10.223+08 2018-03-21 16:05:10.223+08 e7076b85-5fa8-4f26-bd92-35fd6a802b26 6a369ae7-2703-4918-a144-59072ef59862
+73309870-5e56-4476-8e8a-0bdb1af8d079 2018-03-26 11:16:13.113+08 2018-03-26 11:16:13.113+08 e4c071d1-afb9-4178-923b-18a37265ca86 41f16658-3046-4a0a-bdc1-9e3052e8d392
+958defa0-6392-4165-be17-3d535baca2e3 2018-01-09 14:07:31.221+08 2018-01-09 14:07:31.221+08 b1683813-a1e0-4d50-969b-1bad76311398 93a423e2-42b3-4b7d-8854-842293efc6eb
+a5c7ee33-6c65-4f23-bc0d-c0aea73840f5 2018-01-09 14:14:58.47+08 2018-01-09 14:14:58.47+08 b69afb69-84fd-4273-be31-9727323de2e0 20a77cce-e455-4a31-afd7-6f10510aa0cb
+48aa58d5-cf6a-4233-97a6-2e15b7a250f2 2018-03-26 11:27:33.465+08 2018-03-26 11:27:33.465+08 614819ae-798a-406e-befe-fe6749ac5536 41996fc6-d698-4c07-a88a-b124494e1469
+a2b74be1-f607-4640-bf89-ee11570b83f2 2018-01-19 15:32:51.621+08 2018-01-19 15:32:51.621+08 1e87be3b-9782-4b75-8b62-0aa49b44daea 13905484-5d79-4146-96b5-a78aa427fcc6
+3d337856-8901-477f-9030-fac385a5d7d1 2018-01-22 17:01:19.507+08 2018-01-22 17:01:19.507+08 aca808a3-91a5-43d4-9aa2-171a388266a1 99aef2b1-befb-42c6-9b81-9ba05a5ef139
+776240b6-03b0-492b-8a54-cd4934f73325 2018-01-22 17:01:19.509+08 2018-01-22 17:01:19.509+08 aca808a3-91a5-43d4-9aa2-171a388266a1 8f0908e3-40a5-4b67-8bec-6e317871a94e
+c528241d-ec00-40ab-b1f2-3a431e13c500 2018-01-22 17:23:14.65+08 2018-01-22 17:23:14.65+08 3d303bbc-0f1a-4105-b7a6-9db99aefb409 ceab8566-19c7-407c-8e29-a2f7b5abd5ae
+44d686b9-a9f3-4e4f-a070-2fbb4a8c1387 2018-01-23 14:49:59.753+08 2018-01-23 14:49:59.753+08 bc03541b-fb13-44ff-8cc4-9419e81554f3 8e298dad-1062-4012-8fb3-1b05adb415d3
+c09162d2-4bd1-4b10-bac4-bc393e1ac9eb 2018-01-23 15:06:34.962+08 2018-01-23 15:06:34.962+08 787be20b-1887-4708-a1db-c0d581a322eb c04952c0-e6f4-419d-abd6-134b7e5eb1e7
+449030bd-895e-461e-9935-a240d2a66990 2018-01-23 17:19:51.381+08 2018-01-23 17:19:51.381+08 9f562e54-5c03-4b59-89cf-d12739821be5 f000b352-038c-4802-b9bd-4f10773f351a
+8339e613-e32f-4261-a59e-3472452b2d82 2018-03-26 11:27:35.447+08 2018-03-26 11:27:35.447+08 363b62ae-2ccd-4c86-915d-03380bc9d89c f45c1c35-7bfc-430b-b02c-101650805f41
+0dd0f96c-7e92-4af3-a772-d6c6b6fc3911 2018-02-05 14:54:12.68+08 2018-02-05 14:54:12.68+08 0d2a48dd-a7d4-4752-9e64-d17ca8555ca8 6e3a148f-8824-4508-9f7a-6d2accaae772
+c0953371-cd82-4903-a241-fc84231eaca0 2018-02-07 16:37:15.403+08 2018-02-07 16:37:15.403+08 b0ec1cec-15a9-42c0-8038-6450ab31d5c9 6b72b53f-367d-4eb7-8f07-1e32ea89bf72
+2e9049e3-6713-4839-b0a9-3b3deb34583f 2018-02-11 16:58:22.024+08 2018-02-11 16:58:22.024+08 a31f033d-a4ca-4dd4-8e20-5180f376df79 ead506c4-61b1-4848-8939-d40490b53d73
+64179889-67de-414e-8e34-f59bff0f54fe 2018-02-28 16:48:46.692+08 2018-02-28 16:48:46.692+08 342ac320-e429-49f0-b647-e4d7e5f4b545 60e4ae40-e9c9-427e-87e3-a59b6ee6939e
+4ecffef5-2cbf-4eac-9250-bf6f20bd9dc1 2018-03-05 10:52:42.568+08 2018-03-05 10:52:42.568+08 9943507b-e6a7-4ed0-a44a-d71689542076 11740afe-14dd-41c7-819a-2764c0f02321
+0b536344-d64f-4faa-9f94-2c9117aea18f 2018-03-06 17:42:09.495+08 2018-03-06 17:42:09.495+08 8d3e93e6-61dc-4f46-b610-22b88a38d41d fdbdba4e-0427-4f25-8971-7b3ce5f817f3
+090b50c9-4c99-4578-ae66-466d6b4b77cf 2018-03-07 16:18:17.1+08 2018-03-07 16:18:17.1+08 b2781342-015f-4ca3-bd80-448fcb3d4bc0 ddc7f984-593c-43ac-9597-bc98218b8b09
+051817ad-f649-4866-9c53-7ad52c5c467c 2018-03-26 11:27:35.457+08 2018-03-26 11:28:45.515+08 8693e382-e7e6-4efa-8583-d0251cb0b360 d5069096-9653-4d8f-a0dc-6dece2a96ea2
+8773a14d-ea22-423a-bc5f-a77e742f7601 2018-03-26 11:27:33.455+08 2018-03-26 11:29:00.417+08 f4d2673b-f6ac-4be7-9068-95a68442426e afa7245c-e631-45a5-b115-35e2ca8c2727
+0fe2975d-8e04-4c73-804b-73104a258f22 2018-03-26 11:30:25.479+08 2018-03-26 11:30:25.479+08 f75af319-b305-463e-a3dc-78df902b61ef b3591c45-4238-49e6-9467-c68e0013140e
+eac12360-7a4e-4f66-82b3-22f4e5be9d6b 2018-03-12 12:51:38.686+08 2018-03-12 12:52:06.52+08 c45aed9b-1c0e-4a57-b536-f4aa49396a5c 59f129f4-a877-43c8-b7a2-538663b3926c
+eb2d29e8-d922-4de2-853f-46eb1a9eff5a 2018-03-13 15:11:17.544+08 2018-03-13 15:11:17.544+08 06dc98b1-f6a1-4494-9519-48f5dce361b4 c65c23ff-c9d1-4b80-b949-4dd251cd23a0
+2d4817dd-80b0-4066-b023-85653c64ebfd 2018-03-13 23:09:59.912+08 2018-03-13 23:09:59.912+08 0d251d94-b1b6-4772-8066-2ae317277574 c8db06d8-ccaa-4330-bbbe-b005900e16ef
+e9e15e4c-4d39-4c60-ad3b-be2446e675da 2018-03-14 08:24:49.354+08 2018-03-14 08:24:49.354+08 19db0824-d40d-49ce-a3e8-b63510dcbb7a e0b42b21-df2e-4e86-9230-79d1b39ce3c5
+6fad371f-5b4f-469b-8dad-246baff4c702 2018-03-14 15:53:54.021+08 2018-03-14 15:53:54.021+08 146da222-f300-4109-b71f-337ad767c336 7161b852-38ad-46db-aee9-b3a2363e4d65
+cd882ad0-0cba-42ef-aaa8-3626b0ec8bd3 2018-03-14 16:17:20.833+08 2018-03-14 16:17:20.833+08 5bab107f-be1b-4c0d-a2cf-207aae73d273 efe06b26-7f9a-4057-801e-7748498a459e
+075f99ce-d4c6-4ded-9346-818490b77106 2018-03-26 11:30:25.496+08 2018-03-26 11:33:19.452+08 6c75e8aa-7e92-4611-8962-1c79a7ba9ef2 f0a71c11-60b9-4c93-a634-379547afa6e9
+b2d08486-d460-40a3-87f3-a65c444e0bdc 2018-03-26 11:35:24.365+08 2018-03-26 11:35:24.365+08 ba74ef0e-3ec4-4203-9d65-17906c8f64d1 ac8f829d-2206-4e4a-a6b8-5277c03b2c1a
+8d5d0a37-26f3-49a4-b7db-c49092f3ab03 2017-12-06 12:00:43.637+08 2017-12-06 12:00:43.637+08 8929f60c-f9d6-4a0f-a19b-0a57b7025b43 927ba5cb-747d-4cd7-8e17-63cef84ba3f4
+39443702-98c8-43b6-92b5-1956de9d1139 2017-12-06 14:12:59.656+08 2017-12-06 14:12:59.656+08 49be5f93-ae43-4fc7-89f9-58581a1f495e 2106de0f-be01-4d02-8193-e5937a85bf6d
+38435e17-9312-4519-9377-1ed25ec6a684 2018-01-08 08:03:31.86+08 2018-01-08 08:03:31.86+08 8b4d52b7-47ef-4940-9b4e-7353a2a62765 8db063a3-b808-4355-bcdd-82afe11c5dbc
+be92c0bd-de68-40ca-bd6f-9682bbc77c8e 2018-01-08 11:12:56.502+08 2018-01-08 11:12:56.502+08 f2e47767-7959-4aeb-bfe0-0c07202c906c ae25354c-f866-42d2-bd43-9ec059f2c260
+a2070212-8b2a-4491-a5b8-d64e68c261aa 2018-01-08 11:44:22.244+08 2018-01-08 11:44:22.244+08 0a8e8043-1c0a-48af-b8fd-68658e1b1b61 89e11345-37d4-4990-ab56-0c8b992ca12d
+b80ea594-3d9c-4d39-a65f-77171f7f4bcc 2018-01-08 15:10:26.556+08 2018-01-08 15:10:26.556+08 7a1da717-ec87-450e-9707-47f782954311 3bf63ed3-8ad5-4ac4-9fff-227a8abd7be2
+78b348ec-f822-483f-97ed-fcfdce5560d3 2018-01-08 15:14:58.287+08 2018-01-08 15:14:58.287+08 9a6a651f-0042-4ae6-af31-20d976cf4566 ee8cac2b-69c4-4de0-ae4f-605dd6615b5a
+b132527f-f6e7-4c69-b115-1ff7c496148d 2018-03-16 11:38:34.155+08 2018-03-16 11:38:34.155+08 7b458eae-2daa-407f-8597-e3a64d0dbb65 858ff33f-056f-4229-a01f-23fa0fb2cf1e
+485d0625-e7f3-47a7-a1f5-f316dd3d5c28 2018-09-26 17:10:21.46+08 2018-09-26 17:10:21.46+08 0b0d6db1-2a75-4d2d-a4e9-7690437a3900 41221de5-8b11-41f5-a41f-d050ea705626
+f72f4c9f-4a51-4fc7-b0e6-400dcc4cc2bc 2018-01-08 16:20:38.054+08 2018-01-08 16:20:38.054+08 460611f1-f603-4af6-8a6a-80290761cde0 3cee7abf-90d6-426b-b864-a3bf42ecee67
+95f3cb04-7666-432d-ba84-8ad4e4701abd 2018-01-08 16:27:56.754+08 2018-01-08 16:27:56.754+08 4d545e19-172c-4acb-9183-248abe86f986 830ef5ad-6a3a-424f-85ad-738d2d56dd0b
+56a355f6-5b11-4b14-8aaf-196540222a16 2018-01-08 16:40:09.762+08 2018-01-08 16:40:09.762+08 1377db1c-e2f6-4ac5-832d-53103233d957 767dbc44-602f-4917-b86d-efba3577b917
+f7266222-c1ab-4c6e-8a9d-ced12b22a79c 2018-01-08 17:03:46.483+08 2018-01-08 17:03:46.483+08 546dee6f-5d8b-4572-931b-fa64627c058a e9f5d29f-4a74-4605-b6a6-e54423e4ec5d
+ce2d0cae-f982-489e-877e-c80b12c7eee7 2018-01-08 18:00:05.716+08 2018-01-08 18:00:05.716+08 e2e995b6-c748-453c-a19b-86372c107168 e0fc5b6e-c095-463a-a8bf-9d1d817a0c2c
+1c70c4bd-9437-43e1-999e-c3fcdc352ff0 2019-12-23 14:26:26.847+08 2019-12-23 14:26:26.847+08 dfeab740-f671-4730-9a89-f5a3311f0ec8 3650d738-737b-4c16-8918-5cd22ba6dc88
+b004e23d-601d-4d77-a69a-11e96f672cee 2018-11-12 16:40:05.537+08 2018-11-12 16:40:05.537+08 d1fa6c6c-dfb0-450d-bc20-1207b2973420 3d35566b-919f-4f62-85b3-aec523ba926a
+77e270c1-5373-4304-bb24-37cda4f90d84 2018-11-22 17:30:26.345+08 2018-11-22 17:30:26.345+08 e2cb4c00-ac04-478b-afc2-eb7928bfb361 74693392-a0a7-4214-9a28-7e36b761542e
+22cf87af-0098-40bf-b4bb-48d55098b80c 2018-01-09 15:01:35.222+08 2018-01-09 15:01:35.222+08 84e943aa-b142-4142-89f4-5db0cc8e5233 22009d34-ff60-4346-ad0b-d918f374a221
+fb9b9b7f-7d99-427e-a1bc-b6e3bba0b234 2018-01-19 15:36:26.646+08 2018-01-19 15:36:26.646+08 1e87be3b-9782-4b75-8b62-0aa49b44daea fdbdba4e-0427-4f25-8971-7b3ce5f817f3
+383745aa-837c-426b-8407-14b23ad4ffeb 2018-01-22 18:07:07.043+08 2018-01-22 18:07:33.378+08 aca808a3-91a5-43d4-9aa2-171a388266a1 91d65629-6006-40b8-ae3b-626f6e477dcf
+39847829-df06-4abd-af6e-26ff87c499d6 2018-12-06 10:25:31.751+08 2018-12-06 10:25:31.751+08 322b0741-7b10-4499-a14d-5c660bc3dadf e19d2117-7307-4824-87c6-2db0a176fd23
+ba3ea514-823d-4fed-9df1-988d6791c8d5 2018-03-23 16:36:36.627+08 2018-03-23 16:36:36.627+08 95211a4e-66c1-46be-b7cd-9edc8ac63621 fa4b84e2-60d6-4d39-8ec2-be9eae52a7f7
+59fa147f-2f9d-4b15-a3c5-bb987c9996ae 2018-03-23 16:49:34.686+08 2018-03-23 16:49:34.686+08 88d7fc54-bcbf-4532-839e-0dc916df537e 92f24f51-71d8-4518-9321-cffca08d97fb
+d13f2de5-c690-40bd-809a-78e79dfd393b 2018-01-24 11:26:28.352+08 2018-01-24 11:26:28.352+08 6b9cf407-77e8-47af-b3c7-571606764785 ce18c57f-a082-4417-a65f-4aacc7f5e09b
+22806653-4867-4bad-ae65-4dd945cb1c0a 2018-01-24 11:33:34.538+08 2018-01-24 11:33:34.538+08 4e508627-863b-46fa-9454-a074ef2fbe8a 237f87be-73fd-42c7-8045-a3b3e98cdadc
+a8bf79d6-ff06-4bec-b8a1-64ea234e60db 2018-01-26 16:19:24.553+08 2018-01-26 16:19:24.553+08 b9bb6058-9981-44a3-8688-1df4dc7f042b a2e60556-d41e-450c-a30d-fcef21de8a6a
+3c559690-404f-49b2-bddc-e17e8408d1ba 2018-12-18 16:53:43.602+08 2018-12-18 16:53:43.602+08 4604ffee-b4ae-49e6-8498-281f3954e051 4abe4198-cdbd-4d72-8e9f-cc92ffede877
+01757736-3a9c-4836-8392-5c06af5303dd 2018-12-24 15:31:37.92+08 2018-12-24 15:31:37.92+08 a625037d-7d72-4479-857e-ba45ebf3a2db 26daa22f-efbc-421c-8600-042b16026119
+83069e25-7f69-47c2-b8ab-15552fe72856 2018-02-07 16:40:02.719+08 2018-02-07 16:40:02.719+08 b767a3ea-663e-402a-82c0-ee964abae581 b372116b-3e75-4e51-a202-28609f8c6bb1
+1cb108ba-52f5-42b0-84bf-e6e8a4a838f9 2018-02-11 16:59:13.236+08 2018-02-11 16:59:13.236+08 5e270a72-9da6-4029-98ae-eb0326ad0d97 880d26e0-1562-4456-ae4a-6809dfb1885a
+edc25dd2-948e-487e-946e-2fb6690c5d2d 2018-12-28 11:30:33.821+08 2018-12-28 11:30:33.821+08 4a8364ac-890a-4260-b8d7-6e4ae7dcd4e3 da539a47-a027-4fdf-9036-10adb8dffa99
+fda80aac-ed0c-40aa-af5e-17acbe687cc5 2018-03-23 17:58:37.779+08 2018-03-23 17:58:37.779+08 0226f5d5-c83d-4a9b-8448-adb854fa4336 63dd0fd9-2dad-4755-93df-c2ade460af7a
+e7dea3e2-133d-466d-bbd9-c4b4d0c3f23e 2019-02-22 17:20:51.94+08 2019-02-22 17:20:51.94+08 f93bd5ed-fe1a-4d44-8efb-f98f381b7aa0 b6c88e58-4911-4b0b-8735-247bd7b4c383
+afbda5d2-0da8-4485-96bd-3a3deb896dfe 2019-02-25 13:43:02.177+08 2019-02-25 13:43:02.177+08 ba00fbe0-7fdf-49d0-81ec-84046c3c13d8 babf1792-c944-4e08-b747-a70be2981c9e
+6ffe996b-5079-40df-a35e-51d110ef0b5f 2018-03-05 13:34:31.705+08 2018-03-05 13:34:31.705+08 d05b0093-f276-418f-90d3-8e0bfe3c36ef ed2433d4-7df9-40e4-8b3c-ef56522294af
+d4ca5ca2-a277-4f0f-82c7-43e05aff94df 2018-03-06 18:29:41.165+08 2018-03-06 18:29:41.165+08 a831cdfa-52a9-49aa-8f41-2568b3f853de 7bf32190-691e-4aa0-9b58-c4768a6993c8
+d09c1603-197f-4f0d-bfb1-151af5038ee6 2018-03-07 17:15:48.202+08 2018-03-07 17:15:48.202+08 c6ff7e02-05d5-45ee-9837-f61976b9d230 f97a1d41-06aa-4929-9229-ceb6ca403947
+bb3f6bd8-6eb4-442c-a769-cf6f90159416 2018-03-26 11:21:35.736+08 2018-03-26 11:21:35.736+08 bc373436-023b-41d4-9608-6a33bb926e80 71c9ba8a-8861-4e8a-b47b-be8a862551c8
+fd04dcf2-4735-4f3f-a6b1-dde57b3ba204 2018-03-26 11:22:24.21+08 2018-03-26 11:22:24.21+08 aca3e62f-b4ec-46cc-887a-563ce53b652a 0b7eb99a-e67b-405c-969b-5930963ded34
+2c80784d-c2c5-4547-a2ae-2e9238404596 2018-03-26 11:35:23.097+08 2018-03-26 11:35:23.097+08 43e14c1c-a425-4001-9886-f41df72945ea da1ba9f2-1f71-49d3-8aa5-9f5b8b82758b
+77cb4eaf-8311-4ccf-b1c4-2346e4c648cb 2019-02-25 13:43:02.803+08 2019-02-25 13:43:02.803+08 998641f1-bcc9-4b88-8155-68d0cdd22f67 babf1792-c944-4e08-b747-a70be2981c9e
+b9840c30-24eb-4a75-9e8e-46e764d0792b 2018-03-09 15:18:22.41+08 2018-03-09 15:18:22.41+08 83056ece-02bc-466a-a4c2-4b916ea6e41a 2e4a0dfd-e4ed-4606-b682-f07f9af83752
+d031bb30-5b5b-4b46-aea7-193277f987f8 2018-03-26 11:35:23.212+08 2018-03-26 11:35:23.212+08 82a15a43-5463-4d67-88ea-0a816235bd70 43434057-77b8-47ae-998b-5a49df399d30
+f8a76966-e92e-45e9-a649-c5dd468ad11f 2018-03-26 11:35:23.218+08 2018-03-26 11:37:44.318+08 4f92b0e6-a618-4221-8c58-169247d88bd0 80da1e72-1b76-4cf7-9318-ad8995f278c0
+40ff3ad3-f07d-4d2d-a808-98aac102d30f 2018-01-17 11:53:07.279+08 2018-03-27 11:10:41.532+08 91bd35f0-7a4d-468f-b8f2-4023456af5ba 4147f31c-2a52-43de-9601-20f4142d96d8
+342d8ad5-66ca-42ed-b5b7-9ba615832134 2017-12-06 15:17:54.543+08 2017-12-06 15:17:54.543+08 fcbff74f-610d-4dc8-b2a8-d5c54792fc7c a0737f04-cdba-41ff-8879-1145f93cc280
+358a57a8-36a3-4510-a304-7cf76272e1c4 2017-12-07 10:22:18.582+08 2017-12-07 10:22:18.582+08 df01da11-6cbc-4a10-b62d-dba26d636f74 93019638-64f8-4245-bdb4-0ce42493ad68
+87f5952c-579c-48a7-a47b-c7e0be7dc1e2 2017-12-07 11:43:58.703+08 2017-12-07 11:43:58.703+08 13268453-da66-4d7a-a972-e67bd897b1a9 3fd1641e-ba73-46b1-97d8-45877841ebb4
+36b5766b-64fd-4f58-8b4d-6ad71de5dc5d 2017-12-07 14:20:25.167+08 2017-12-07 14:20:25.167+08 b314cfb9-6a52-40c6-ab30-cc7f75189c59 c96da240-7b15-4c50-97a4-8a01116bf267
+119eb7e6-24e6-4a61-bd04-38f21341bdfc 2017-12-07 15:20:39.55+08 2017-12-07 15:20:39.55+08 05aa0ad1-dcc0-40c2-80cc-198e8e1a6511 f9a91641-6ecd-4bc6-a379-c525fd61df56
+2c239053-b8c8-4107-8758-65352985162d 2017-12-08 08:40:33.685+08 2017-12-08 08:40:33.685+08 2e7a1db8-dd48-47e0-87d0-023cd2b9ff08 89797dc1-14f9-42c0-8db0-e6a802c0a024
+8dcfb432-1bb8-4699-b0a1-38f619a96c3a 2017-12-08 09:55:09.548+08 2017-12-08 09:55:09.548+08 096efcee-8caa-4bf3-9f0b-b8ce92ace83c 7a2eaf7b-ff5c-4b89-b57c-badd6f4043d0
+493aa821-9161-46cc-b73f-573ed38844fe 2017-12-08 10:08:19.242+08 2017-12-08 10:08:19.242+08 e87c4f0a-877a-4865-98c6-bca08f38164b 25110c4b-809d-4dff-82fa-1eb8eb53c4c5
+338c183d-2646-4080-88ba-f07cf1996b63 2017-12-08 14:40:29.031+08 2017-12-08 14:40:29.031+08 e905978b-35fd-48b2-8dca-d3af8020841e 5e00aef4-c162-4abe-a4ba-e73bfb991c9d
+6b0a31f6-4757-469f-b9e5-cb18f2e74c9a 2017-12-08 14:49:12.901+08 2017-12-08 14:49:12.901+08 e9b00fde-a1f2-4167-af71-7fc7862cc867 4f3234e1-d6ac-4927-8224-469d14ab9a0a
+7a265a11-c768-4507-8b7c-ca325eaa14fd 2017-12-08 14:54:02.547+08 2017-12-08 14:54:02.547+08 a5e1cd4e-fda7-425f-970e-ad4449eb546c bd0e6c4c-edb9-4c6e-b543-ed83223b0fc7
+2a35bfa8-ba25-4ebf-bc30-0007694e9ce0 2017-12-08 14:57:54.021+08 2017-12-08 14:57:54.021+08 22f8366a-f855-462a-ab4d-6f140e075584 60baad2a-7ec0-4b24-8c76-5bed2e2b8485
+56b7ca2d-d868-4b7c-8211-8450f97cd8fd 2017-12-08 15:02:49.632+08 2017-12-08 15:02:49.632+08 e4d8894c-78bb-485f-a691-8288a65c6967 15d630ab-45de-4087-9cb9-4a3998b52dfb
+5f3daba6-99f5-4042-9e36-e9da164e5c2c 2017-12-08 15:09:50.794+08 2017-12-08 15:09:50.794+08 20231ffb-4f57-4ebc-bef1-cfd72e18d550 1580ee6a-cc2a-4abf-8c6d-08b3a85e814c
+4aa75b15-cdba-4515-b8ae-69c999eb433c 2017-12-08 15:16:37.897+08 2017-12-08 15:16:37.897+08 88876216-b879-4524-bada-01f39ed17c93 d2c71261-eb6c-4d2d-ad95-4078c8cbeaee
+6c88758a-0031-4b10-a14d-d0a7e6fe76c3 2017-12-08 15:23:44.919+08 2017-12-08 15:23:44.919+08 16b2379a-313c-434d-8eb3-56120068c40a f5479f61-a20e-4b8b-a4c6-6f7a7dab7c84
+75e5f05d-3f6e-4798-8cd1-4ca9406128c3 2017-12-08 15:30:34.585+08 2017-12-08 15:30:34.585+08 ed796d50-66db-40b1-be39-62728b8d5fdc 75f3270e-7bc7-4e14-8fbe-2f5685daf59b
+eccf33d8-f61e-42d2-a1b8-94eb8cf60c05 2017-12-08 15:40:02.62+08 2017-12-08 15:40:02.62+08 1bbadeee-62da-4062-bcf4-f0f18757aead 8d7c54ed-ecd8-41ca-b7ee-4196ff1dea3e
+14ce87ef-5d99-402a-81f9-a8e09af1a57f 2017-12-11 15:27:03.014+08 2017-12-11 15:27:03.014+08 6bc1aa05-f9ce-4f21-92f8-d1464535b0c2 578d0261-a4ad-495a-94a4-8c4e72ade2aa
+f5fc4682-84f1-4200-a5fa-3670c0e2949e 2017-12-12 10:23:59.558+08 2017-12-12 10:23:59.558+08 8c9d6aac-81ca-48cb-b67c-6916c734bf63 ed327a11-684a-4b1f-b9e0-e8639c8fff33
+457f3bac-0118-44a6-84fb-50ac58da9575 2017-12-12 11:55:07.95+08 2017-12-12 11:55:07.95+08 7563b8d0-13b1-42d9-91dd-b7a48a97089f b096c0ed-860a-4bbf-8644-ad85dba1d41e
+b06a0268-4776-4f29-a01d-8113f196d8bb 2017-12-12 14:08:56.835+08 2017-12-12 14:08:56.835+08 48838bfb-174e-42ac-a6c4-1c694dbf569b 9be10a92-e718-4210-8afe-aec7ee423e5a
+e2f8c2a5-2e47-4968-98ea-3c166ee81515 2017-12-12 14:41:03.876+08 2017-12-12 14:41:03.876+08 9b5c64a1-06b3-48e2-83d2-92d0278e050c 0f3fcf12-23aa-4be6-a8cd-a7a5112f4a4c
+c9653f15-709f-4c62-81a0-3a6fe9cc8e42 2017-12-13 13:09:16.246+08 2017-12-13 13:09:16.246+08 e5550e74-9d03-440d-b9a8-0175cec5ed42 b6b2d1d5-264c-4c8b-b508-68431ebc7a8c
+9864d2bc-b303-4c30-be70-db5f99107bcd 2017-12-13 13:21:56.927+08 2017-12-13 13:21:56.927+08 cd2059de-7aca-4f60-9b28-90d4aec7dfcc aa1bc88f-7dc8-46b6-bb24-c1acfc4bd4d6
+b9458a54-735b-44ca-be15-5dadffd06b73 2017-12-13 13:27:21.373+08 2017-12-13 13:27:21.373+08 8409a1f6-b5f7-46c7-98e8-e8ed92f8113a 27e905b4-22e6-473c-bf18-8d3432dbff64
+044b9556-acfd-4c09-9230-2f45fa4300d9 2017-12-13 13:40:15.836+08 2017-12-13 13:40:15.836+08 d6ba5199-32e3-4c9c-a69c-1317e15f21a6 2e6a94ec-808d-4cd5-9a31-53dfd946e157
+ec136996-73cd-4657-8ba2-acf96682c4d1 2017-12-13 13:46:22.562+08 2017-12-13 13:46:22.562+08 03c5dd3d-859b-41e6-89df-ca3000a46e14 dc9efb66-a50d-4c10-b3f5-54700dec4c11
+f6cfc3c7-5df3-4b12-9ca3-0d6a0e4d8672 2017-12-14 14:22:34.614+08 2017-12-14 14:22:34.614+08 846fe925-eaae-47c8-91a4-b1d3d7fc3bc7 8f688434-d219-45e8-b902-e02cef3958cb
+21962fad-8c13-4370-8749-08f77209805c 2018-09-26 17:10:27.046+08 2018-09-26 17:10:27.046+08 c88b89c6-187a-4d96-aa9d-6b1ff8fce91f ff6cf1e7-02fb-4238-a169-4eeae1daf382
+429bb411-ff4e-44c8-8a5f-50b8313b58fe 2017-12-14 16:49:47.955+08 2017-12-14 16:49:47.955+08 9f1dab20-8943-4d5f-9c48-e25d55a8a3d3 2a43bd9c-32ec-47a3-91ec-bf2d150bf048
+69401bf0-792a-4cf5-8085-92a3983c3e6b 2017-12-14 16:55:58.284+08 2017-12-14 16:55:58.284+08 ec181902-8df8-4d46-9c16-a1deefd286e5 9f3ab602-8c33-4b85-bc82-6f28cc991a1f
+ad88e097-051f-4cc7-a4ff-61eaab93bc6b 2017-12-13 13:59:30.944+08 2017-12-14 20:28:11.336+08 95683aa7-b094-4883-a2a1-bdabe2c7d59f cebb317f-fa5b-4ea3-88f7-f395a949ecad
+c7dc7338-cc50-4150-aa8e-0cdbf6f6f7df 2017-12-18 10:57:40.229+08 2017-12-18 10:57:40.229+08 63010e3e-4783-485c-a5dc-4f26a1153ece 6f410018-5357-4499-876e-bfaa7f87a6b1
+9a0d1094-73c3-4e6b-9a90-6b1040c97bf0 2017-12-18 17:23:33.749+08 2017-12-18 17:23:33.749+08 235950eb-8bd2-40b5-945f-6ba95c40892d 22c54ed0-f2e1-45be-a8db-e2b05a6c5141
+61ab6f51-1b68-49bb-80af-67e3a34ba112 2017-12-19 14:21:59.025+08 2017-12-19 14:21:59.025+08 53e4c42b-3996-45c2-9631-73b200cb840c 7acc67cd-6f9c-4a4d-b25c-7c7c5285754b
+dc7a5d5a-a0a9-43a3-b2b7-3ea294f1f868 2020-04-13 13:07:48.172+08 2020-04-13 13:07:48.172+08 002dd588-51a7-417d-9986-71cdcdc4b0b4 ffb1c108-4ff0-4445-96a1-e0dfa049ab08
+79f9272d-fde4-45e8-997f-bd06d92aa36f 2017-12-20 10:35:01.156+08 2017-12-20 10:35:01.156+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 037a040a-ffda-4a16-ae2f-0b156eeaf375
+a72085b3-fc74-4607-93e1-24a6c1b980e5 2017-12-20 13:51:02.584+08 2017-12-20 13:51:02.584+08 b55ffd52-9693-40dd-a732-e5271f0d5fb5 ee390c37-e447-4248-9449-1c05e898295f
+e8ef2222-c72e-4676-a1a6-d5fc967e3711 2017-12-20 13:59:41.266+08 2017-12-20 13:59:41.266+08 ab03ba4c-6102-471a-a570-87b77683dcc3 7a857685-2f05-4568-83cf-742b00cc4268
+0a87fbd9-46cb-467d-8948-0731ff7d6479 2017-12-20 14:03:22.692+08 2017-12-20 14:03:22.692+08 60ae0347-0874-4d6c-b39a-e0bc3fd616c9 cd9de59e-d636-4334-bfb0-d4bfdf7d0815
+f426f9b0-e263-42af-b174-9707c800aa3e 2017-12-20 14:30:07.215+08 2017-12-20 14:30:07.215+08 f0e35d78-efe9-4656-ae6a-5116d547772f cf4a1774-7235-439d-be10-5c18236dea1e
+5062a3ca-d475-4c43-8e85-52ad45f6c943 2017-12-20 15:25:01.235+08 2017-12-20 15:25:01.235+08 5f58f358-39b7-4cf1-a4ad-c8b16d83a0b0 b04f28f1-c62f-444a-9171-3bca433956ce
+39e36bad-563a-4eef-98f6-3325d52ed764 2017-12-20 15:39:19.356+08 2017-12-20 15:39:19.356+08 f17f6e9c-827e-4dbe-b6d9-48937e2ca2b5 f82bd316-9158-47bc-9023-7fbade31d7de
+a22d137c-bea8-4cbd-83a5-689dd47836be 2017-12-20 15:39:27.002+08 2017-12-20 15:39:27.002+08 9476a386-f250-4250-a852-90fedab8ea49 a7a4d4cf-2511-4248-b6f3-233c55453827
+a70248b5-8ea7-4fe3-b605-9ec12bab1ab7 2017-12-20 15:44:31.431+08 2017-12-20 15:44:31.431+08 b9dd081e-69bc-46c3-a372-d46269234b57 7d57ef52-60e4-4f3f-92d4-a098de6b3c7f
+e52feccc-b4fe-4b93-ba40-bd0e6491f778 2017-12-20 15:48:48.784+08 2017-12-20 15:48:48.784+08 1adc0b25-92ae-4d60-9c59-b001fc8b8120 2228b7c8-ddf7-4340-877d-e535750783b9
+c10beea6-e98c-4ca6-bbfc-d68ebbbca436 2018-03-23 17:07:09.227+08 2018-03-23 17:07:09.227+08 798127c2-0250-443c-8627-ac234388ae50 52772d68-c0f8-4950-88c2-87fe5c350736
+f0ffac33-d7d9-4874-af41-9ff7ae5ad47a 2018-03-25 19:20:50.025+08 2018-03-25 19:20:50.025+08 af89ba1b-5b99-481c-a213-a2171c2e4700 b3a896a0-6180-448e-996e-5cc3d9775f7e
+11e07056-e672-4f74-b604-6e26b9376ad6 2019-12-23 14:44:54.402+08 2019-12-23 14:44:54.402+08 86e75c8f-77b4-4197-89e5-0960b7265076 ce4680ae-0c4a-44e9-9376-af4ce8f2cf86
+ec44eb53-1ec3-4083-a617-8017cf7be228 2017-12-21 11:15:16.286+08 2017-12-21 11:15:16.286+08 ef29b89e-1964-40d7-b8c8-489d9562ce9d 9d9688a4-56c4-46fc-8cfe-f7bdb2abf8bb
+ae760bf7-3510-40ed-90c6-b450b4b47dc1 2017-12-21 16:37:36.69+08 2017-12-21 16:37:36.69+08 b17563d4-fe75-4b40-9fb8-97fedae3abce 47a783ba-cb5b-4939-b416-3fc9345cce28
+1e0f3836-06d5-4ff4-b4c3-6bd357c0b535 2018-10-26 16:26:05.549+08 2018-10-26 16:26:05.549+08 27f22c17-c2a9-47b7-82f9-f87716de54fa 8cb76a98-9a11-4237-abb7-d6ef25643d0a
+bdee0b56-d7bc-479f-b3bb-16260c540361 2018-01-08 12:02:17.344+08 2018-01-08 12:02:17.344+08 06fcfe9a-4b1a-4db0-897b-05746cda4814 b98aec75-4636-4312-ba9b-06433a59ae92
+4004ce34-3542-4ab8-8019-14e410bc290e 2018-11-12 16:44:32.05+08 2018-11-12 16:44:32.05+08 fffc843b-a9bd-474d-868c-e7482d84e823 69cf7444-fdc6-4f98-b3e0-2d11f4125b00
+8b5388e3-1864-4860-8fc0-e1eb7515a557 2018-01-08 15:12:21.621+08 2018-01-08 15:12:21.621+08 dde034ce-aa0b-4c0d-bfdb-bcbb2f231808 af8ac3f8-0501-42e7-b64d-e48ce5a657c6
+5eaf54b5-030a-46fc-9bf2-ea9c0dd4920d 2018-01-08 16:49:09.747+08 2018-01-08 16:49:09.747+08 12ffe39f-e941-4496-a0af-ae5d4c1e0d29 d28e2d95-3e15-4c82-a89e-fc92b24eeb16
+6517938c-165e-445e-be1c-fe18f5132183 2018-01-08 16:50:48.417+08 2018-01-08 16:50:48.417+08 1ec0d96c-843a-4da9-ada2-a70c23ebe8f4 189c2f2b-1d0a-4b3c-94b1-33bebff36ab4
+bebff9fe-fa68-49a6-9042-e508a6d4a232 2018-11-17 14:07:02.739+08 2018-11-17 14:07:02.739+08 6867f7aa-51dd-4f2d-acd3-ed771f2fb33b 477bfb00-3a30-4991-8bfa-858e9523eb97
+51fd7dc9-40e8-441f-82c3-ccac0c399990 2017-12-28 20:13:20.35+08 2017-12-28 20:13:20.35+08 02eb3150-86c4-4e4f-933e-9adadf378910 64443ff3-fd39-4b61-9322-175d16adaad5
+4a8e741e-7c07-447c-a3cb-8d36578fc4bf 2018-11-23 10:32:50.909+08 2018-11-23 10:32:50.909+08 7d4a13ce-fcb5-4eb4-89dc-77f1b0b46fe8 50f0137c-73fb-4190-8d2a-20119eb43a23
+eff3db82-5e99-4854-8c5c-00824283e263 2017-12-29 17:40:41.159+08 2017-12-29 17:40:41.159+08 d6b914e8-a4e6-443c-a9f4-7fb5eb5148be 83a57b71-e45c-4f38-b95d-210b993d67b1
+72df5983-5d85-49f3-bb94-e07b26453cba 2018-01-02 17:33:10.098+08 2018-01-02 17:33:10.098+08 9c7d9db3-d6b5-46e5-a01e-af70a296bc8d ccd8487f-a6c3-4906-80b8-55373af26c7c
+547ed787-071d-42d6-b749-00ff016c6b1a 2018-01-08 16:50:48.914+08 2018-01-08 16:50:48.914+08 de7958de-0a8a-4492-8705-642b5c4df424 719b3dba-bba1-4f87-b495-4edec4572d91
+53854900-f3e3-4c54-88ad-123deef4640d 2018-12-06 11:11:21.656+08 2018-12-06 11:11:21.656+08 d8d994be-3cdb-4646-a06b-d2869fdbedf6 c2c7492f-5032-46e8-a136-2eca48b246f8
+7d3b3d05-935c-4b5e-b672-00ce68f092cd 2018-01-03 13:53:36.256+08 2018-01-03 13:53:36.256+08 8b0f2cbe-d8a9-434d-a5ce-f32b591a3956 99cb3ad7-81d5-41da-8bd6-1ac995024668
+8d1bb77f-87a3-490f-8219-5cd779278414 2018-03-26 11:21:00.267+08 2018-03-26 11:21:00.267+08 8bc60164-fa52-4d68-a3b0-2c63af3113c0 3a9e7afb-b301-4ca5-b24c-a8625767cb5c
+ce798edc-e57b-4d80-87b7-2a5ae97bb1d9 2018-12-07 17:12:17.202+08 2018-12-07 17:12:17.202+08 b8bf89a8-9e01-42a3-b331-a3b2c1fb2e06 0f251392-a8a4-43c5-97d9-30744aa0b17f
+8da2ad8f-8a3f-48c4-90b6-688697946a3e 2018-12-07 17:12:17.922+08 2018-12-07 17:12:17.922+08 383732b4-ea54-49fb-8e63-4dd2c614e5fd 92bdce01-7eae-4842-8ce6-a0bf3f4a6ae3
+bb576e2c-e0c1-47bc-80cd-9cd9da949af7 2018-01-03 23:08:28.59+08 2018-01-03 23:08:28.59+08 6d135882-0f59-4f07-9508-c1eac08ab6cc 4b8727cd-03c8-43f9-998d-bdf67fc5a979
+ebe7a20b-e007-4a0b-a238-32f4a0ca305a 2018-01-04 11:19:16.73+08 2018-01-04 11:19:16.73+08 26034a4c-81b7-4470-a5e4-65494772f35b 10d111ab-0eab-4d87-82e5-1bbbefb8d00b
+e2e4387a-1e73-4253-8856-a183ca320656 2018-01-08 16:54:49.761+08 2018-01-08 16:54:49.761+08 2bfe226a-cde2-4d95-8420-b3ba3f669aa8 7283403b-2780-411f-a674-f5aea930ddbb
+c5c90a85-f54e-438a-8e07-28ef495fdc90 2018-01-04 11:48:49.723+08 2018-01-04 11:48:49.723+08 161be263-2daf-4d9c-8a3e-5a5dfa458cf2 ca6f3bdd-34c4-45e3-89bc-e26e10dafe40
+47aa8d4c-26be-4246-92d5-8e5258f1ea4e 2018-01-04 11:56:59.89+08 2018-01-04 11:56:59.89+08 f4542b67-c857-40a2-8aa7-11850aace3bd fb39a5a4-ef13-46f2-af59-34b56c3f6e46
+dbb77216-181d-4b63-a5af-7f0a3c8c8e2f 2018-01-04 12:11:30.187+08 2018-01-04 12:11:30.187+08 58ccd139-9573-44ce-84f3-b043e0841c7a 93343c0d-6372-4047-8668-1ffcd2061d4f
+42ca7c56-fe26-40dc-8d07-e3b9fb844712 2018-03-26 11:24:13.137+08 2018-03-26 11:24:13.137+08 921508aa-21fc-41c6-b609-b6df5206ea7b 7d240885-b6aa-4476-8a55-30746fc1b69c
+01bfe5fa-a09a-4c07-910f-b305b5bc1112 2018-12-18 18:03:29.512+08 2018-12-18 18:03:29.512+08 1e07f74a-8506-48c5-b76c-e179333adcdf bcbf41b5-d713-46b4-a1e8-bd6f2e1d4c62
+f66f68b2-e193-474f-b1e2-d37ecadcf117 2018-03-26 11:24:13.145+08 2018-03-26 11:29:13.505+08 8e3f282e-7428-497b-baa8-0ca8fd248e36 29f74d0b-7785-443e-856b-9d094d302afd
+5d970c7d-163c-4586-b37a-b4c6f8a39a86 2018-01-17 13:45:21.849+08 2018-01-17 13:45:21.849+08 cb86448f-61c6-408f-9e5f-06ba94979fdd 06ff4979-ef6c-42b8-bda5-74c797384d80
+3c7f4e33-1b50-41b7-8130-da38e083f717 2018-01-19 16:19:33.304+08 2018-01-19 16:19:33.304+08 cffeb47c-0a8b-48d4-974a-d3d12d22a5f9 13905484-5d79-4146-96b5-a78aa427fcc6
+1bc8d481-ca11-4f31-86d8-ff24b1bcc7ac 2018-01-23 10:22:45.752+08 2018-01-23 10:22:45.752+08 3fde2361-48e1-41a2-9063-28daac442f9b ce22b934-d5c0-406d-89f7-faf00663dc05
+d4d66e90-03a6-4240-9431-9b5e03d26977 2018-02-06 16:34:19.42+08 2018-02-06 16:34:19.42+08 5c7af394-fc34-459a-bf95-62b91eafed29 72182529-ac2d-4ecc-8afd-7a001f8981e2
+c34570fa-d49d-4625-918f-0eb15e172a65 2018-02-06 16:34:50.799+08 2018-02-06 16:34:50.799+08 d90c8b29-4933-4af7-9ffc-62f63cee473d 72182529-ac2d-4ecc-8afd-7a001f8981e2
+cc3288ce-b678-43d3-bae8-e88a1a89970e 2018-02-06 17:36:23.334+08 2018-02-06 17:36:23.334+08 5c7af394-fc34-459a-bf95-62b91eafed29 72182529-ac2d-4ecc-8afd-7a001f8981e2
+71763f5a-4e32-4bd1-89b1-54d5758527f1 2018-02-06 17:44:49.27+08 2018-02-06 17:44:49.27+08 13d3b4ab-266d-479b-874d-d00ba71b7d6c ac1a4739-f1d2-4e18-b9b8-e98f87522977
+93c485c7-1182-4684-803f-63be621802f7 2018-02-11 17:01:51.776+08 2018-02-11 17:01:51.776+08 dcbc00f3-d440-4b2e-b869-c6e2e602316c 056c0cb1-35e1-4602-8d5a-b5afac2fa309
+a75c4a5a-c4c9-44fd-a01c-ef12f82bc3ca 2018-01-04 13:43:27.014+08 2018-01-04 13:43:27.014+08 a2e1b758-5210-49f0-986e-78305b6cef20 53dff476-de0a-4f48-8cf2-68d3a110f884
+8f461c1b-f505-4065-a4e0-aec685cbadfe 2018-01-04 13:57:55.24+08 2018-01-04 13:57:55.24+08 cd26103f-0538-43bd-9bbd-a8b3b84e10ff 4b8fc505-6590-416b-b3f9-e658931e9a86
+6a339ab2-cdb7-4cde-a103-9ba2070b5eed 2018-01-04 15:33:35.103+08 2018-01-04 15:33:35.103+08 c08bb21f-6cdb-46c1-a8df-3ea9d92279ba 6a1943df-2897-4d48-a088-90522fc34601
+06b90018-813e-4663-8498-9ba37ab292c8 2018-01-05 10:51:34.771+08 2018-01-05 10:51:34.771+08 9c9bf6ea-e390-4af6-9eb7-64fdd8325887 5d1e6a40-b6e8-46e1-8f1a-25c985ad62eb
+14903ff8-5df7-4d89-8a24-b2ff1364408c 2018-01-05 11:06:57.958+08 2018-01-05 11:06:57.958+08 2766d297-6127-449f-b73f-089b38e01267 718ba26c-0638-4b39-b2e2-db452908c052
+1af71da1-1abd-45a2-ba09-afb25e68a620 2018-03-06 11:26:54.863+08 2018-03-06 11:26:54.863+08 8d3e93e6-61dc-4f46-b610-22b88a38d41d 13905484-5d79-4146-96b5-a78aa427fcc6
+abf139fc-2f00-4256-895d-cbf92252a0e9 2018-03-07 17:18:03.925+08 2018-03-07 17:18:03.925+08 a0f44ec1-49da-4ca4-83d2-323cdeeb2864 b1195b35-3e64-4d7d-bf10-4cdba0dc0876
+8d60fc6a-ae92-46f2-a78a-70be06ff6779 2018-03-08 19:00:09.633+08 2018-03-08 19:00:09.633+08 66075081-ad5a-4acb-8bcc-77672c5d579a 00d429fe-3521-43bd-82c5-27c3701da1b1
+aaad5195-eafb-4b7c-a0af-db4a9c7da7b8 2018-03-12 17:55:34.551+08 2018-03-12 17:55:34.551+08 ebcd990c-356a-4c0a-86ba-5a6fd378432e bcb5dc91-e7b9-465f-86e7-f92b319cde98
+66c9a1ae-9c0a-456b-b5ac-367cba9217a5 2018-03-14 15:32:30.976+08 2018-03-14 15:32:30.976+08 7d5454c7-afcf-4af8-a34c-03fd5ec820f8 235c1960-ae8c-4a50-b7c9-99a5bbfac71f
+fd6c1cc4-61f1-4980-859d-9059e867f71d 2018-03-14 15:32:44.49+08 2018-03-14 15:32:44.49+08 e2e4c206-ed4b-4fae-8755-5dc970720c89 3696cf22-f9b3-4cb9-9b56-bd074a7d5e89
+5b1fcc65-b565-4f25-b5d1-8b7cef234d45 2018-03-14 15:54:05.916+08 2018-03-14 15:54:05.916+08 d6f7c1bb-56ff-4e70-b237-b1c8cfd826ac beca9f91-8832-47fa-aa7f-ef70d8d241ac
+7ef3fe0a-71c4-43f3-8808-1bbf9207a0ce 2018-01-05 11:06:58.415+08 2018-01-05 11:06:58.415+08 57f3c9e5-43c5-42ce-92e4-a67bf6f28452 cf11c000-7c1a-4247-b85b-5fa6e911c28f
+b30b44f6-01cc-4aa2-a21f-39adee6e514c 2018-01-05 11:06:58.821+08 2018-01-05 11:06:58.821+08 2f00a22f-2cdc-46e5-94b8-a4c599c0618d 5e6182d7-7d90-40a6-a020-c598a2945429
+2e11e06c-1b55-4096-88a5-1f7935c7050a 2018-01-05 11:07:00.033+08 2018-01-05 11:07:00.033+08 9b2fd7d2-690b-4c40-a7f9-a52bdf8c1735 cbe12e3b-0f5e-4aa0-8dbc-35fed3a80ad8
+3c7e76ce-9f9f-4de9-833c-6a593bf52386 2018-01-05 11:07:00.156+08 2018-01-05 11:07:00.156+08 11c69c81-4c8e-49c2-bde6-92d68c3d8092 0887c6ad-38d4-4eeb-a696-37a8e8bfcf3a
+09747846-bb5d-4aa9-9827-20b499934caf 2018-01-05 11:07:00.287+08 2018-01-05 11:07:00.287+08 a5f188ab-9f47-44f3-a454-2b85f0aaa7ce f4206b10-b245-48ab-8763-a3ce3fc2f8c6
+53d3b00c-81db-41f7-b95f-1ae96b8a342d 2018-01-05 11:07:01.145+08 2018-01-05 11:07:01.145+08 90e33926-b804-46d8-9c62-0fad9b87edab 9fc202d6-1860-47e6-92de-f7aec26cb174
+491ecb9f-921f-4122-aa6e-2c4498b67513 2018-09-29 15:46:46.744+08 2018-09-29 15:46:46.744+08 589f754e-ea3a-4643-9d79-234ed0834807 31b6984c-82fa-4104-9e7d-50bd5a2a3501
+81ceada7-db06-4a2b-8adf-7fcfdb4666e6 2018-01-05 11:07:03.216+08 2018-01-05 11:07:03.216+08 5fa4fdf3-0b6f-4b2c-9015-3ec3e23f909f ff2262ff-8083-46b4-963a-715c1a2a7eae
+a5f0417d-8221-4b14-be6e-287a18ec571f 2018-01-05 11:07:04.226+08 2018-01-05 11:07:04.226+08 571ad024-5982-4fc7-b01e-684b112a8092 8ac2e35e-7863-4a5d-ad18-7d1893b129da
+edc522a0-52a4-4971-871b-5546e5f3d296 2018-03-20 16:10:22.331+08 2018-03-20 16:10:22.331+08 af8660db-af7f-4f8a-ad12-70bb18f62638 0dc52b0a-0c56-4a29-962e-7298204c60d5
+7005951f-d91c-4233-b71d-c990d770ff3d 2018-01-05 11:50:22.341+08 2018-01-05 11:50:22.341+08 f331ae21-9607-401d-b8c4-9d17e40eba9a 2885a62d-12f1-4301-941a-3ee5d1e4eeeb
+db9a6b6f-0f3a-4333-9cbf-36fff2e36a09 2018-03-20 17:29:17.048+08 2018-03-20 17:29:17.048+08 fca1794e-e349-42fb-aef1-59f5eb4c3efd 183d4894-be30-4daa-9cf6-a257ec40bf3f
+b72e8365-3d25-443d-935f-459d8f9d2073 2019-12-23 16:11:23.857+08 2019-12-23 16:11:23.857+08 f7726ca7-bc14-4987-bd59-204bb7fed3a4 e43545b3-6909-475c-85a5-ee3536a08b9f
+b9cc4a49-e195-4f33-bc36-57e904649cb9 2018-11-13 13:36:20.267+08 2018-11-13 13:36:20.267+08 47c11b01-fc23-4bd4-a754-f9da2ea42dec b58e5131-ff68-4dff-a8f8-e7dd0eac6e45
+65c3d06a-b82f-4873-8f86-b202c3819ce2 2018-01-08 13:36:45.77+08 2018-01-08 13:36:45.77+08 0c0a3e16-95cf-42da-8d6c-09d28a68415d f14c354e-4160-4dea-a3c8-9ad3129d817c
+2363de91-65a5-4f4b-b7ff-19149f8fa111 2018-01-08 13:36:46.066+08 2018-01-08 13:36:46.066+08 28cd8b3b-ce84-4ece-b281-9c46bbac045c 7bf32190-691e-4aa0-9b58-c4768a6993c8
+5a4a694f-d612-4684-97f9-97f80e39af04 2018-01-08 15:14:24.771+08 2018-01-08 15:14:24.771+08 d9aa001d-6bbe-436c-89ac-c361f78f38ea 4f858fc5-73b6-4028-a706-dc1261246286
+e9d7aa73-1715-4471-b78b-8e5d6d9270bb 2018-03-23 17:02:48.952+08 2018-03-23 17:02:48.952+08 4ad74d57-806a-4fc6-82ec-37d782d99cab 87361a2b-a3b3-4fea-97ba-1cc719e1125f
+1ea56f6b-260d-4b7a-89e9-94fbf2126555 2018-03-26 11:16:11.52+08 2018-03-26 11:16:11.52+08 7c9f78f3-049b-4f4f-86ce-ed4945136111 b2c5c319-5966-4d2d-a607-a73e9fa97317
+eaf794cd-cbc3-4c25-82ee-dd33f8e1ea11 2018-12-03 15:03:56.966+08 2018-12-03 15:03:56.966+08 f51fa45a-b4ee-4071-a1cb-b9b7657421f5 30367b45-ab92-4ddf-ba29-1625b347c30a
+e55a105a-20f6-4fe9-9c8a-11907fe482a0 2018-03-26 14:16:25.795+08 2018-12-06 11:38:10.073+08 b70abc38-5a40-4c7c-8bc8-f238c0b3dc15 d365d25c-5fbf-4a51-8e0a-7a46b052daf3
+6590547b-4c7b-45c9-8101-fee1bac06f58 2018-01-09 10:40:42.1+08 2018-01-09 10:40:42.1+08 3a66e33a-e25c-45ce-b87b-534d9d4bcaf4 13905484-5d79-4146-96b5-a78aa427fcc6
+175b72fb-bc7b-43d4-a81c-d332c4e393a8 2018-01-09 10:43:37.036+08 2018-01-09 10:43:37.036+08 e240a124-006b-4a79-9006-c8fcb6842ef7 fdbdba4e-0427-4f25-8971-7b3ce5f817f3
+11de9355-2cb5-40bf-91e4-9e76ca87a7a3 2018-01-09 11:03:32.978+08 2018-01-09 11:03:32.978+08 488ca4a1-e5d4-4905-ac99-a63bf4b4e98c 81851968-bb35-43ab-a0fd-c9f922484d6b
+2a352256-c893-429d-bcfa-05f4689154f4 2018-01-09 11:10:39.807+08 2018-01-09 11:10:39.807+08 926a081e-9ed3-4bab-a8d1-c556a8be9404 a95cdc2e-5ed2-4d6d-9346-8a87c54e3c60
+d23a4fbb-9204-460f-ba58-b1c731a05a3b 2018-01-09 21:37:46.444+08 2018-01-09 21:37:46.444+08 31df808d-16cc-43b3-81c4-0443d9ae6f8e 110d0b44-a52c-40a7-93d7-c2c0a186d3a0
+b0828804-934c-4ff4-8814-ad6a94267ea4 2018-01-09 21:37:46.447+08 2018-01-09 21:37:46.447+08 31df808d-16cc-43b3-81c4-0443d9ae6f8e 42f2b43c-9dc0-4cdb-9b56-39957948609e
+993224fa-1bd5-41a2-a153-d27a085ccfbb 2018-01-12 10:08:09.357+08 2018-01-12 10:08:09.357+08 349567b6-f674-4299-89df-0d64e448a6b3 939fefae-55d4-4666-b93d-2b2986560287
+100b0e72-20fb-43d3-83db-10e51cac7602 2018-03-26 11:35:23.112+08 2018-03-26 11:36:37.782+08 053f72a5-5576-48de-baa6-a2732ff863cc 6e103548-19ee-4fec-a3fc-48f0c30b7a0d
+f615be0d-b0f6-4c19-8989-adb036332f69 2018-01-17 17:52:43.817+08 2018-01-17 17:52:43.817+08 a84db97e-114a-4cbe-8e97-a18f398857a7 4ca813f3-cc80-4c82-8802-ce37a1aff0af
+315ebd1d-130e-4292-8423-98b89822e1ee 2018-01-22 10:21:25.602+08 2018-01-22 17:22:26.668+08 3d303bbc-0f1a-4105-b7a6-9db99aefb409 ceab8566-19c7-407c-8e29-a2f7b5abd5ae
+25a1481e-ace5-4d27-841c-1237b4d28985 2018-01-23 13:54:59.287+08 2018-01-23 13:54:59.287+08 613d1519-cf1a-47b5-a44a-2397b79bee2a d7ef1dd4-a6c1-4505-a0d1-ce37cd4d09b7
+7d073683-fa2d-4d54-90f7-7962aad3e00d 2018-03-26 11:41:39.44+08 2018-03-26 11:41:39.44+08 84fc8a27-019f-4640-bbf6-466627f7c6d6 84220059-ac10-4c5b-968f-bf30f3447838
+8be1a10a-ddea-4ee2-ab41-e1d19d1a1166 2018-01-23 15:00:11.264+08 2018-01-23 15:00:11.264+08 d36bb0ee-6c5c-4778-bc5b-5e03db483152 51927eb9-21dd-42bf-9856-1496680e3524
+98002510-1c02-48e5-ab2a-46b0dba34a24 2018-01-23 15:00:12.54+08 2018-01-23 15:00:12.54+08 2db014d8-3273-467f-b938-8e6b9c22031e a40ea34c-f9f7-4672-b969-adec1dff887b
+e8405333-72b9-4000-8836-1d43ece5548a 2018-01-23 15:00:12.733+08 2018-01-23 15:00:12.733+08 028d4dfc-6b2c-40e4-9960-97c813408030 8982fb04-33e0-4ee7-9bb0-7ff5fbc13785
+173f063d-65bc-4772-8071-4a0c0b762685 2018-01-23 15:00:13.371+08 2018-01-23 15:00:13.371+08 3d52b0e5-39ac-4e19-99b4-7bd96b15888a 0b63e426-d86a-4edc-9c7c-398421fd5828
+47329e90-fc54-4379-9927-6fdee35d7511 2018-01-24 11:30:26.783+08 2018-01-24 11:30:26.783+08 1a664a1a-b5f1-4e75-916f-21bc94749d0e 11d6a8b0-4da2-472b-9ef4-85df5e9a547f
+cafd2d0f-5428-428e-a2fc-7882f5a06e09 2018-03-26 11:41:39.458+08 2018-03-26 11:42:27.069+08 32b8c637-51b5-405c-920d-f7ae0adefafd d13d97cf-bbb8-40d4-83df-7665c341ff35
+60160764-41ef-4b84-b3e0-4a38b6fd7e9a 2018-01-30 17:26:52.485+08 2018-01-30 17:26:52.485+08 500186ab-cb13-4844-b7d8-ed0fa7a17c9b 0c9f7cef-31cb-4539-8104-92c9a1c25262
+441b9ea1-57d9-42df-9119-a9dd2de38d76 2018-01-30 17:38:49.93+08 2018-01-30 17:38:49.93+08 70d4d474-0524-459c-9144-237922982ec3 813adfd8-3295-4724-ae8a-42761cfdf2b6
+db3b6314-cef6-4338-8141-36220ba4d905 2018-02-27 09:46:30.775+08 2018-02-27 09:46:30.775+08 4763af57-7fa9-48b5-a8f2-db469fce1e1a 72e1d52e-cf44-4123-aebb-b3ea312b4d54
+98eb1efc-026d-4c1b-942f-6b22289b426f 2018-03-26 11:43:22.732+08 2018-03-26 11:43:22.732+08 750c60f8-168e-4bca-acf5-df2d502915f5 a141085c-a860-4f4f-adb1-9df8136501bc
+1563a9ed-ee25-48df-bd58-68c8af4eb7b6 2018-03-01 14:29:42.736+08 2018-03-01 14:29:42.736+08 b38d50f8-60f9-44b9-865d-647810e416cf be1600c4-af01-4849-9099-c10dba51edc9
+6832e46b-1bca-4819-9744-b153240d0c27 2018-03-05 09:35:14.845+08 2018-03-05 09:35:14.845+08 405db392-c820-4892-b209-c01d5f2d0724 88827513-9301-4dcb-84c5-f531c188097a
+fb7d5694-80f2-493b-ad40-958acd8bb7e7 2018-03-07 14:02:37.526+08 2018-03-07 14:02:37.526+08 7ca00003-ea25-4456-acad-32705e36bea1 33551006-d4b1-487b-b77f-f8472a7e463c
+ec154567-352a-4110-8e12-8c3451f1025b 2018-03-07 14:02:37.529+08 2018-03-07 14:02:37.529+08 7ca00003-ea25-4456-acad-32705e36bea1 6d4c23a3-4f3e-4f58-8f7d-ef6893dc2077
+8f8d21db-4622-4280-8d58-ceb686946f0e 2018-03-07 14:46:11.829+08 2018-03-07 14:46:11.829+08 6233944d-f215-45f0-90e6-433fb8fb0735 7587a4d4-7375-4dee-a174-e0f3718a566a
+c58eaed2-f15f-49f4-952b-28ba37fb220f 2018-03-08 19:00:18.425+08 2018-03-08 19:00:18.425+08 08d15c9c-009a-49dd-bf90-c1c2b55a229d 00d429fe-3521-43bd-82c5-27c3701da1b1
+11723fa9-ce37-41aa-9dac-a04003288e1a 2018-03-19 17:07:42.636+08 2018-03-19 17:07:42.636+08 837d4b62-487d-40e0-892a-4c1305ebd883 d97b73dd-c95d-48aa-9631-4e9242fa6d4a
+5bd75140-2967-4459-99a7-deff2013c948 2018-03-21 09:54:46.409+08 2018-03-21 09:54:46.409+08 eaa55b41-7d6a-48d3-8600-2b52eaad59a4 9aa12a3b-8017-406f-8a88-289e1e1aa27c
+0bbbd500-80ef-405b-b2fb-1b5f6bf6d5bf 2018-01-05 11:07:03.717+08 2018-01-05 11:07:03.717+08 0c7ac7cb-305a-4871-9335-1e95d569358c fdedf646-c4fd-453e-806d-aa33b7054d19
+e00e3a1a-eeb9-4277-9e66-3eb7812bd6e3 2018-01-08 13:46:38.388+08 2018-01-08 13:46:38.388+08 5b6bf70d-354f-4930-ac36-534e1a992440 ff1b877f-3711-444a-9f7e-ce0345695228
+f88a8aee-ec95-4bb1-8473-e0632d8ef641 2018-09-29 15:48:29.142+08 2018-09-29 15:48:29.142+08 02ed6adc-d0dc-43a4-a933-da902d675146 265f9d4d-51cf-436b-9d43-166ad66c7080
+98a43f81-de7e-4d4b-9418-5ed9ef07557e 2018-10-29 15:10:56.442+08 2018-10-29 15:10:56.442+08 9e7de9ac-68c1-48c2-bea1-751c1149407a 39b76697-28f1-47dd-a54a-3d2b850b7d70
+bc4b83dc-601b-48ec-88db-c0986846fdc5 2018-01-05 11:50:25.163+08 2018-01-05 11:50:25.163+08 45469a20-748c-4740-9741-4c971a209601 da5ea9b6-c1f1-40c6-9bc6-5c7920e05d5d
+f1fd649f-570d-4171-891b-0f99e98288e1 2018-01-08 14:31:55.569+08 2018-01-08 14:31:55.569+08 9603914f-8d67-404f-813e-1044464c093b 57a25025-b2f1-4e40-8fc2-52309d5e99c3
+c080a5ef-2cf1-4116-96a7-2474bbbe02bd 2018-01-05 12:01:35.843+08 2018-01-05 12:01:35.843+08 4412085f-1890-4b38-b715-f72085af2b7b 3b3b9d0a-f929-4f7a-8fcd-61d951203f7c
+1bf5d067-f962-4998-a1ac-60019428fad6 2018-01-05 14:02:09.821+08 2018-01-05 14:02:09.821+08 da94e805-9621-4290-b239-5ddc2e0504a7 3ddcd5c9-5483-405f-92e4-ed146ec893c3
+55049f28-5c53-4244-b516-de5ab24b1bba 2018-01-05 14:02:10.839+08 2018-01-05 14:02:10.839+08 77becc38-82f7-4612-83e2-10e0ebf5e6e3 21e13ca2-f774-417a-a4a6-85f366d078ee
+f709642c-6d03-48ab-b435-6d86e0b83c8d 2018-01-05 14:46:16.358+08 2018-01-05 14:46:16.358+08 08fbb708-7333-4f0f-b4a6-1b185f02fd34 ba597375-c17f-4caa-9134-f7fa11ea1b30
+a6c7faa4-94bb-4e4c-aa82-0acddbbdc023 2018-01-05 14:50:21.888+08 2018-01-05 14:50:21.888+08 5d7b8c97-4528-4c8a-8da7-bcc37d2a9ed2 3214fe7b-6a2c-4666-8964-506d0c3b80a6
+8785f5b6-3c81-4ddf-9cce-468bf8d17fb7 2018-11-13 15:36:10.389+08 2018-11-13 15:36:10.389+08 f27415f0-f6a5-43cb-bb3c-f54d94dd0930 238b4b73-1be3-4467-b185-3717e1cb1c68
+0a61412d-196c-45ea-b291-42188678d596 2018-11-13 16:37:13.354+08 2018-11-13 16:37:13.354+08 18903d51-d495-45f0-8d08-6f52d8a62684 3868a833-ef41-49f6-bdc1-524f920f3694
+7ba2dabc-cc0a-4ceb-9a4c-3c59222e0045 2018-01-05 14:53:22.539+08 2018-01-05 14:53:22.539+08 9c34b3cc-56f3-4463-b264-888d55002e8b 0df21243-96db-416f-890b-b77d40c36943
+8d2a022d-6fe8-470f-a4d1-6d43a0a7e04d 2018-01-05 14:53:24.819+08 2018-01-05 14:53:24.819+08 cc4c86bd-de99-4664-97f7-6cc8f14d9163 533044f9-17b6-4537-932e-4211a4578be6
+6f3de90d-69d2-4617-936b-a9b6b71c2ea8 2018-01-05 14:53:53.073+08 2018-01-05 14:53:53.073+08 e7092d0b-709a-414e-a8ca-a1e21ef6e36c eba5f751-2548-4ca9-90ff-8e1860315669
+77bb21e5-584e-4589-a6cb-d80f76c7c93f 2018-01-05 14:57:25.928+08 2018-01-05 14:57:25.928+08 7cfe14d1-5568-4d3a-abf6-b24791db9643 908acd8a-6cea-4af0-b7a5-1695246237bc
+ef35de08-cfa9-44aa-859c-2ee1733aa1c7 2018-12-06 11:38:32.021+08 2018-12-06 11:38:32.021+08 cba87e64-ebf2-4b4b-8fe3-8df973625a56 0ef9c682-3630-4317-8dc4-0b6fa49142d1
+a0d3cff0-d0bc-4a10-a03f-6774ade2362d 2018-01-05 15:11:19.84+08 2018-01-05 15:11:19.84+08 4f08e245-f581-4570-8175-92b665bdd6c8 714e146a-7bbc-4062-b58d-cd90a577f3d4
+299b5770-820b-42f2-9db7-c0f9c9deb73c 2018-01-05 15:11:20.728+08 2018-01-05 15:11:20.728+08 63bfc488-1cc3-4d31-a86c-0b1d49baddc6 70e72c6a-9cbd-44ce-95d9-cfa2b58e115b
+2d4b093b-8acf-4adc-b704-4380da388351 2018-01-05 15:18:31.343+08 2018-01-05 15:18:31.343+08 5714767a-3b97-4a8c-a5f6-abd8091e8662 92a1e4f8-e1fe-47ad-a20b-aa94951d0375
+4b458172-92e6-44b3-8791-5efc18a578f8 2018-01-08 17:10:40.687+08 2018-01-08 17:10:40.687+08 054f1a33-18e3-4476-a321-2a5482f783da 683de5ab-224e-409d-8d87-924293e1f557
+428cfcad-c615-4102-8f5d-814ffca559cd 2018-01-05 15:30:02.693+08 2018-01-05 15:30:02.693+08 39e594af-f88b-4f81-96c2-2d7a7bc27ad7 6cae1335-dcaf-4478-8b14-e2427cb57569
+ca8f3097-7377-4ff5-9861-d8db36b7a234 2018-01-05 15:33:22.374+08 2018-01-05 15:33:22.374+08 fbdf40ff-88c5-4ca5-a2cf-e0fcbcb9d45d 9c619f6a-6a64-4dbb-a4e0-75bdd13fc992
+28545a71-8964-454d-aab0-c95ab2656091 2018-01-05 15:36:58.47+08 2018-01-05 15:36:58.47+08 24ea4e76-d09c-44d9-8d18-7c634e2b1b22 c8e12bbb-a4c2-4cda-acde-719d40978d99
+b3d5fb61-a444-40c8-aea5-f3576f68c829 2018-01-05 15:36:59.075+08 2018-01-05 15:36:59.075+08 1d70f5ea-f754-4ee5-98e8-98bdaa7694e2 36b0f90f-99b8-4543-8f97-118b79bf0572
+f075b2c7-60c2-478e-9a4f-e0e4e631f2fc 2018-01-05 15:36:59.872+08 2018-01-05 15:36:59.872+08 6bcbbc0d-ed3f-43f1-b6da-98c0ff2bed39 bd34bbe2-ca15-48e0-b350-ccc08a87cfb7
+052de0f7-7508-4435-9567-e1a9e1556561 2018-01-08 17:10:41.168+08 2018-01-08 17:10:41.168+08 893afc3d-9fb4-47f5-aa47-80e8321a052c ea60971e-6c2c-4863-b5ae-ef74b224e054
+09600fc9-0bcd-44b0-bd39-a3b1f5953f0d 2018-01-05 15:48:51.394+08 2018-01-05 15:48:51.394+08 028ff831-cfab-43f0-a757-fe8933b46002 b853cd3e-e1fa-4ef3-b714-ade49476bff2
+5ad5489e-4827-4fae-a5d0-7467b3fca230 2018-01-08 17:10:41.675+08 2018-01-08 17:10:41.675+08 0d9f22e5-95c7-4e56-8963-6576d22b3209 39bbcb01-7a84-4835-9646-a8a70dea04ab
+0422aa49-0c9e-4d0d-aa54-105176377629 2018-01-08 17:19:40.417+08 2018-01-08 17:19:40.417+08 9ea4750b-b3f2-4d2b-a190-8ac310bec295 f56c8027-8dd3-412f-956f-21ad3082f2ea
+8e0bdedf-df0f-4aed-921b-73c9a74db422 2018-01-08 19:28:51.38+08 2018-01-08 19:28:51.38+08 be68ca54-6bb8-4d57-8db7-6acdaa05c876 d685f8ef-8318-418b-990b-5c0b7aaa7e2c
+dc75063e-49c7-4839-8a9b-d4d5486dd68d 2018-01-09 11:03:05.682+08 2018-01-09 11:03:05.682+08 b6bff26c-a89e-4fd7-85db-adb7ff80af6c 9950fe4a-165d-4b00-899f-c145ca03a1a8
+090101a3-b493-4e1c-b6da-118bd361a163 2018-01-10 11:08:23.29+08 2018-01-10 11:08:23.29+08 ca59c7e9-eb74-4ab9-a98f-4604bfbf0b8c e4070f8f-14f7-42b3-b0cf-d7981072cb90
+776ae9e3-4e12-4d0e-9d2f-5d092a8898b7 2018-01-16 10:34:03.665+08 2018-01-16 10:34:03.665+08 9a5459f7-7499-41f5-87d2-e55b430a9134 493e88a6-85ce-437e-a724-335dee6baf6d
+7fcd86d0-a0c3-49db-9124-40f21949aca4 2018-01-16 10:34:03.999+08 2018-01-16 10:34:03.999+08 efab5ad9-0126-4a8f-a0b1-35e21e77c0f1 afc4461e-21e8-48f5-998b-e9f2d2d51892
+da7ce1c7-9efe-4c49-ab69-eab26b90891f 2018-01-16 10:34:04.405+08 2018-01-16 10:34:04.405+08 9cbbc8b3-67dd-400f-95c4-31f2f9814062 fc85fde7-32df-4a08-bf0a-5dc35079ab6f
+8b74b71c-6f6f-4a07-a161-c66dabd4d90d 2018-01-16 11:50:37.248+08 2018-01-16 11:50:37.248+08 79df301c-8707-4e42-8546-2b6a77f017f8 f87dd261-6de4-496d-9825-f1879888d6a3
+b5adf5b9-f9fb-43ce-a7d3-4d0c93d1e560 2018-01-22 11:12:08.481+08 2018-01-22 11:12:08.481+08 ed8fd71f-44b5-4e41-bf91-f2e5ee66e8ce 5a51894a-4fc3-4c9f-b0af-2fe7a3e2ed6c
+cca144da-b303-441e-844e-b5f0d120a0d4 2018-01-23 14:02:27.124+08 2018-01-23 14:02:27.124+08 558e2b4d-a2dc-443a-98e5-142e99791b74 c44d908b-d931-4e1e-ae6f-8336dec968f3
+694a94da-71c7-46ee-beb9-91c7953ad21b 2018-01-23 15:00:11.873+08 2018-01-23 15:00:11.873+08 c631534f-fef5-4db4-b5c2-e7cb081db305 71babe9d-868f-4e77-ab53-c83cae3de9d9
+5695ab3c-d905-46bd-896b-c74391d08f56 2018-01-23 15:32:11.059+08 2018-01-23 15:32:11.059+08 9486f04c-16ee-42bb-9f4b-485632a1857e cb2c078e-72b0-47e3-bb1b-a9498ba5650f
+0c7017e7-d80b-4f87-8473-00ba0c0dad75 2018-01-24 11:34:49.488+08 2018-01-24 11:34:49.488+08 b28ce81b-55a8-4e81-a4da-5a5b9d89ef29 7c07bcb8-40eb-4b12-a566-ffc8c4a1252a
+3a5d813d-d1a6-4010-9d92-8b398c59df47 2018-01-24 11:34:50.403+08 2018-01-24 11:34:50.403+08 f564da79-91f3-4eff-8919-3501b7fb8046 f91278d4-3571-4028-8205-df9d7eabd9f5
+b05d7cad-9b33-47b5-92ad-1f482f5eb1bf 2018-02-01 15:46:43.323+08 2018-02-01 15:46:43.323+08 3825f4a5-cc05-4d5a-860a-c277ff0c1cc6 eac22ea1-cdd7-45c9-90b1-79c6dc066cc0
+f21ce9f4-c15f-495d-bd28-c39c9fc90a60 2018-02-07 09:49:51.691+08 2018-02-07 09:49:51.691+08 511b86b5-3773-45aa-b518-9b29071357e1 2d04c70c-59f5-4a33-86d8-5f57fe213fc1
+114a656d-7f61-404d-b370-f03d8204cff1 2018-02-27 14:54:53.56+08 2018-02-27 14:54:53.56+08 c64d06e4-145c-4bbb-919c-1147dac429b9 eac22ea1-cdd7-45c9-90b1-79c6dc066cc0
+d4bd4c7b-e233-402c-b4ca-46352086c0bf 2018-03-26 11:43:22.878+08 2018-03-26 11:43:22.878+08 08b32693-e4b0-44db-9d79-e45dff49062a 3ae76e58-0d33-43cb-b3f0-37be15bc52c8
+e0761b2b-0f6b-41b1-aee7-8f17e3e3f1eb 2018-03-26 11:43:23.192+08 2018-03-26 11:43:23.192+08 228d8257-dcf7-4493-a4d4-083712716318 4bfd9afa-c491-4a9d-86a1-80152e284ed7
+6d7216d6-6bc8-4389-97c7-928ec8cefebd 2018-03-26 11:43:24.214+08 2018-03-26 11:43:24.214+08 b72802e5-4982-4ba1-bd1b-15ba05d7d832 6f37f0c9-1488-4c4f-a340-c1b9b060f47f
+7294640f-de8f-4fba-ba19-60a8d90746cf 2018-03-26 11:43:24.228+08 2018-03-26 11:43:24.228+08 0f684ae0-ceb8-4c6a-95c4-e83bdd79059e 6f37f0c9-1488-4c4f-a340-c1b9b060f47f
+c951cd8d-aa9b-4ebd-ac11-fdba43caa2bd 2018-03-26 11:43:22.716+08 2018-03-26 11:44:15.072+08 d8193d74-feb5-4872-8e42-95a335cd383f 44118f25-8b14-49d7-9f1c-ad1ab08e3f31
+1f785700-e8d3-4bd5-bdfa-364524bd1c19 2018-03-26 11:43:22.87+08 2018-03-26 11:44:59.5+08 b0488049-bfc9-40ee-8dfa-79f9233638ec 1c6314fe-a3cf-4334-b57a-c95efa23fc1b
+2ac72d09-694b-4080-a933-8cc21aeaec6b 2018-03-26 11:46:38.223+08 2018-03-26 11:46:38.223+08 afdde18b-1a6e-4e2b-8ef9-d5aeb34e82cc 91981670-d364-4217-8bd4-d5771fbdf651
+6774371d-f27a-433d-9aae-d9dc445e90e1 2018-03-26 11:43:23.179+08 2018-03-26 11:46:58.83+08 c0ea2d7f-7778-47aa-af49-0119a729c741 f669551b-cade-498e-bc5e-e1af210678ae
+03c1fe54-c7b6-4ca2-9c25-5069fcd592c9 2018-03-26 13:37:56.336+08 2018-03-26 13:37:56.336+08 c26fbe87-b6ec-4f0d-a907-e05fddec8f41 3cf4d4c7-c487-43bb-bb7d-65fc6e366033
+6c408bc7-0e85-4043-9399-37c56a8a01b6 2018-03-26 13:44:09.134+08 2018-03-26 13:44:09.134+08 f2877cda-87cc-485a-9fc6-11f7ef8b2624 0b032124-e602-47ce-9feb-4ea8d7b76be4
+70ea6e71-a902-4269-973c-85d675d90b80 2018-03-26 13:48:39.274+08 2018-03-26 13:48:39.274+08 e3bf8273-2a58-438d-b214-0fd258644ef8 f13135a3-2817-4988-8939-af1c5a2ac321
+b571842c-5f3c-43d5-a213-d959722699f7 2018-03-26 13:53:33.648+08 2018-03-26 13:53:33.648+08 ce140baa-bcd7-4756-9d06-9591535eed2a 0a6471bd-8bf4-4f55-9bff-7d257cd5543c
+08606cae-3ff1-454c-b93f-e5dcb05a1cd9 2018-03-26 13:57:13.737+08 2018-03-26 13:57:13.737+08 1361a9fa-8c55-4a5f-a13c-2da8e4ca89ad 2b3f9f56-bc0b-4d13-a4cc-cfd5d6681f54
+c89e6d4b-54e5-4e2f-970a-960b44d25703 2018-03-26 14:02:43.877+08 2018-03-26 14:02:43.877+08 aca7e15e-5b9f-4595-8640-9e7c920ef810 92868b2d-fe4e-4e52-89bc-f0e458bd731b
+1ce3bd23-ec9b-4e47-b11f-a8351a550620 2018-10-05 09:56:54.417+08 2018-10-05 09:56:54.417+08 de94d984-9d2e-4129-8fcb-b2655ab694b3 9ef9e4d8-cb52-46c2-b527-50bbdeeb6b4b
+2f213ce8-7ba3-4a82-bbee-34a824d66314 2019-12-24 09:20:36.196+08 2019-12-24 09:20:36.196+08 48b6a900-281e-4335-841c-814b0bbc1078 7af23b3c-a97c-43f2-9d11-aafbb962b650
+dde5da5d-2c23-4f28-94db-71c052a6c015 2018-03-26 14:22:43.674+08 2018-03-26 14:22:43.674+08 5775692b-7acf-46f2-b924-d040fb8bd751 eb1ac1bd-5461-42b2-90a1-98bc094d7978
+265192d2-8e8f-4142-8901-6230ebd91363 2018-03-26 14:26:21.004+08 2018-03-26 14:26:21.004+08 21a71013-2a7f-46e0-8ced-77ada77b1342 e4525921-3f8f-49cb-b1a1-b289cfbce822
+040100b4-0382-4f92-a7ef-d92debdac650 2018-03-26 14:29:22.854+08 2018-03-26 14:29:22.854+08 f3879800-9585-4575-a261-25c1128fcaf9 0f8321e1-4979-4096-a680-84283ae510be
+01f2830f-8166-41ee-a32e-b5ef3fe35eaf 2018-03-26 14:38:06.927+08 2018-03-26 14:38:06.927+08 ea781b14-56d0-478f-991f-05c1ed5fdf93 cb53c59b-db7b-4784-bf0c-3904b516ea73
+e479eecc-d19f-4717-8cc5-6e4446805949 2018-03-26 14:45:17.772+08 2018-03-26 14:45:17.772+08 794d13af-907b-4165-bd7d-5c9d4e3410f4 545ab4bf-df32-4df2-9299-1749c51dc520
+4fa53bda-3734-410f-8ad3-85212117601c 2018-03-26 15:02:23.933+08 2018-03-26 15:02:23.933+08 c77f3d16-3577-4f09-9c32-cc99cbb68966 83bfc264-e916-44cd-af22-18decbd771c6
+688824b8-80af-451e-938b-4a8fd0a01f11 2018-03-26 15:08:56.863+08 2018-03-26 15:08:56.863+08 15598365-4401-4d31-9ebe-d0e46f6d4ce5 d376a52a-bd48-42a2-9c78-23f1eac3eddc
+76d01255-2c94-4c91-9628-e15d171109a2 2018-03-26 15:13:58.99+08 2018-03-26 15:13:58.99+08 153dac9d-f2e3-4e56-8402-86df0c0ae5d9 6f54391e-0bbe-457c-b9bb-700e9a6cd79f
+a9cff24e-95a0-4101-82c8-3d34fd6193b9 2018-03-26 15:17:46.072+08 2018-03-26 15:17:46.072+08 88e6acfa-2714-4821-9ff8-c5d96a23ce68 6578b6e8-7c36-4811-bc98-a87c85516f01
+8711ac71-57f0-44c9-8cf4-929b7f6a361b 2018-03-26 15:21:39.584+08 2018-03-26 15:21:39.584+08 b3e8b1eb-5d72-4bda-875a-d83d7c593dfe 89ed11de-42f6-469b-8110-777ef53bf7d8
+030d6647-dd10-41a3-974a-93c2b1cffb40 2018-03-26 15:26:40.946+08 2018-03-26 15:26:40.946+08 79fa3616-07da-47da-a26c-0faac333d89d a107c8da-4237-4bd1-b410-0c94480f3380
+bd35949a-c486-4a65-85af-422e6ff1810a 2018-03-26 15:36:16.549+08 2018-03-26 15:36:16.549+08 5c6f4070-1acc-4ac2-91d6-b7420f02a37b 7b4d2a79-2754-45ab-ba53-06061ccd349a
+decb944c-33b2-4b17-8c69-3ad02e1772f4 2018-03-26 15:43:13.112+08 2018-03-26 15:43:13.112+08 d5370a7a-bba2-4997-9b8b-2cbbad5ebfa0 93af1d8f-28a8-4416-bebc-69aff080224f
+0b0ad0d4-e690-4220-9e9e-c98297455a56 2018-03-26 15:48:31.746+08 2018-03-26 15:48:31.746+08 8e638b0a-bbf4-4856-add9-c4db9b55b032 cfb376d0-5f56-4641-a00e-49d6b761588c
+136522cf-e680-4064-b6f2-ad88104d8002 2018-03-26 15:59:07.923+08 2018-03-26 15:59:07.923+08 381fa9a7-3a18-49ce-91bb-b29ebd23429f 08e96e61-ca23-485e-bb15-7d4680b93c2a
+ade0b85f-7e75-42a9-945e-cabbfe59bfd2 2018-03-26 16:12:54.051+08 2018-03-26 16:12:54.051+08 9da5e8ea-d055-48f8-97e4-5e64ccb9334c d86b7f4e-33b9-493f-a96e-c6dc2a23ab25
+019a8df2-840b-4753-913e-c58563c6913a 2018-03-26 16:18:00.048+08 2018-03-26 16:18:00.048+08 9f6bcc66-e76f-49d5-87e4-fd469c6af1d0 52d35c64-df91-4a35-a8af-064108a83edf
+368349fc-1b61-4a64-9bbb-debe5d0f39b2 2018-03-26 16:24:30.185+08 2018-03-26 16:24:30.185+08 81a87805-fc42-456d-960f-fb793999d631 f694a273-d028-40e3-977c-cc05a87e4682
+ea8eb26f-0797-43fb-99b8-2b0afa6e5be8 2018-03-26 16:43:50.798+08 2018-03-26 16:43:50.798+08 642663da-bc66-430b-8367-41e2ae5ed8b2 39f9a215-438d-4632-8279-1bd1b2f3bf67
+807f1044-4fdf-4a32-94f9-b62003031947 2018-03-26 16:47:53.792+08 2018-03-26 16:47:53.792+08 ac2bc3da-4bf9-435b-b48f-d06f4cabd50a b1fef6a3-82b1-482f-a84f-563abd6544b9
+304dce72-b713-4f4c-8ad0-8ff57309495c 2018-03-26 16:50:56.091+08 2018-03-26 16:50:56.091+08 f19d92bc-802e-4662-9419-3f664f0d7eba fdd5f1ac-6973-487e-82ad-9024c7c0a1a0
+b7c57c53-eb07-43f4-9eb4-6e73e2ae2298 2018-03-26 17:00:46.976+08 2018-03-26 17:00:46.976+08 606bd0b9-0694-4ff6-b0f2-f591ab56a3d4 00ee24d8-ef44-4ff2-8733-303cf1445fc0
+a4e17c93-9125-43e4-a89b-8d8a17a3e9d8 2018-03-26 17:36:26.284+08 2018-03-26 17:36:26.284+08 0e3fff68-6973-4327-9be6-6d5172b7ad80 875ae240-20b8-449b-9630-295f35bdd0e0
+ca611c1c-0903-4e9f-aa92-0367101716b9 2018-03-27 09:46:31.268+08 2018-03-27 09:46:31.268+08 5a1c9521-1fea-46f6-82bd-3073923b164f 0ca97a38-3a05-434a-9fc6-90d00e83f7d1
+e48d94a7-9cc1-48ae-b9bc-21a8542f4e3f 2018-03-27 10:50:38.105+08 2018-03-27 10:50:38.105+08 a266afb7-b532-4336-b199-cb33af206062 a9558f80-d4df-444f-92c9-70616683c45e
+2cf607a3-c331-4681-90e6-fd0478ea3170 2018-03-27 10:57:23.453+08 2018-03-27 10:57:23.453+08 0428f647-9944-415c-b6f0-93e7329d31c9 c5e83eac-d67a-4d06-9f09-17f58b88b5bf
+fbaaa1cd-f6a5-4066-b8d2-0e856c0d23df 2018-03-27 11:00:35.452+08 2018-03-27 11:00:35.452+08 6ebb2c0f-06fa-4b77-b028-4818465a7019 31f521d5-23c2-4ba1-87c8-f5dbf3f015ce
+190b8325-04bb-41d7-86d6-17ff45c72543 2018-03-27 11:04:04.515+08 2018-03-27 11:04:04.515+08 50696e87-2214-4a20-b537-5530d2921ccd cdec673e-1ba8-433e-9eb7-6d4f2d695fb3
+9440e09e-d8e4-4136-abaf-6ab0c1749fac 2018-03-27 11:07:17.883+08 2018-03-27 11:07:17.883+08 533e4f1c-c95f-46b6-9d76-1e77bcd20732 5a36aa3d-31f1-43ac-916d-fa194e5de4eb
+a407c9b9-651b-4064-88ec-d9255d115f9b 2018-03-27 11:12:21.157+08 2018-03-27 11:12:21.157+08 5aeba65e-e787-4076-8e03-a33698701ff2 067d54bd-4310-47e8-a3a2-e7c9972d5987
+e03ebc8a-de7f-491a-8653-d71de401eacb 2018-03-27 11:23:46.176+08 2018-03-27 11:23:46.176+08 fb9e1eb8-cd2a-4c4c-8395-78cf468ad98a d87458cf-1db9-4c12-9670-549ad5eefa05
+3c54bc97-f0e6-4e03-8e28-180767f640e8 2018-03-27 11:28:33.891+08 2018-03-27 11:28:33.891+08 79cc1497-99b7-4eb4-bbb5-b69192903d18 ff31a727-8a78-4e10-99e9-ec9c374288ef
+1056e3f0-b0be-464a-a3c4-bfda6e9985f7 2018-03-27 16:50:40.547+08 2018-03-27 16:50:40.547+08 0100a56f-6c0b-48ff-9f7d-391a4eaa1bd8 f0a6aa85-d578-4445-88a6-a7b5b0f01743
+92f5ec7d-0441-4f33-98ac-7cb209de665a 2018-10-08 14:13:14.298+08 2018-10-08 14:13:14.298+08 7d700433-bb05-4381-8ace-4cf1f8dbd1df 1bb48193-4a33-48f8-a4e2-b3b7555ff324
+8f44eeda-8fef-41f0-914c-544aaac7451d 2018-10-29 16:20:53.673+08 2018-10-29 16:20:53.673+08 7805394e-0df6-4a46-b9f4-d62860cf6be1 bd67bdfa-24f2-4384-82a7-00d8ac84a0e3
+b709630c-661e-473d-91e4-42da53584005 2018-11-15 15:46:09.086+08 2018-11-15 15:46:09.086+08 23587253-110b-4b12-8c74-53f5147ad189 f4429bb2-1a4f-46c3-90aa-d3ca911e484e
+02110a48-8668-4fd8-8a27-1e021d276145 2018-11-23 16:59:56.355+08 2018-11-23 16:59:56.355+08 d2114a8e-de22-4be9-a15c-1fa381795077 bd3dc3ee-3bc7-4248-9fd3-bf20b08dfa02
+5783d808-60d5-4787-b740-92bea7059673 2018-12-03 14:06:15.019+08 2018-12-03 14:06:15.019+08 f5c02f07-5612-47c7-a0e8-2f5284f203e3 2517e18c-8012-4694-84f2-59146317e9f0
+302b7b04-a37f-4555-8fe9-6d87b251cfc0 2018-12-06 11:46:22.642+08 2018-12-06 11:46:22.642+08 21c31597-4e3d-4568-bc38-7d53a010fe90 599630a4-4928-4a64-8f90-159d011fd29a
+6d45b5c7-8cf0-4cc1-b2f0-79db9218af15 2018-12-07 17:12:17.356+08 2018-12-07 17:12:17.356+08 fecfc4c4-f65d-44d1-afdb-57d325216958 49f198b3-5c31-4f2d-b625-265c66993722
+e0f29790-19e4-4d6a-b644-9cd0b35a5e09 2019-12-24 10:40:55.069+08 2019-12-24 10:40:55.069+08 659208a7-903d-4473-bc1d-581dbec9e5e7 17f0019c-fa99-4caa-a15e-0a370f412436
+e9d86f52-e57b-4330-92ae-fe639e968be3 2018-12-20 14:56:36.697+08 2018-12-20 14:56:36.697+08 2399a5ab-0f4b-42c7-840e-c9331124008d 16b8f107-2281-418f-8ca7-72bce6fb7b63
+b23ca78f-b58c-46b6-a7b7-b381574ef73e 2018-12-28 11:30:35.26+08 2018-12-28 11:30:35.26+08 114001d1-f9ab-4564-b7e0-319e04d86a54 ae984788-d3eb-48a5-b115-a1a9f0888473
+7c51bbd6-f7f5-4b9b-a029-fc20282a1cb0 2019-12-24 11:15:20.168+08 2019-12-24 11:15:20.168+08 70f035c8-998b-445d-8f3f-c5f840151e65 f78f1d5e-3516-4f92-acdd-03be971a578e
+f6b0f31f-3d8c-4428-8b13-03e5721a4484 2019-02-25 14:08:36.94+08 2019-02-25 14:08:36.94+08 c4126560-43a1-4c04-a7c2-182072c07e07 996cc1ec-1a12-46d2-8e73-4ef3e4c8a224
+988e5890-0d9b-4d06-afcc-d3fd3f17e17b 2019-02-25 14:08:36.965+08 2019-02-25 14:08:36.965+08 0cd9085e-abe2-4c04-9956-b0572ba81fa5 996cc1ec-1a12-46d2-8e73-4ef3e4c8a224
+e8267293-e0a0-4911-b12b-2f5fff2f6281 2019-02-25 16:10:34.033+08 2019-02-25 16:10:34.033+08 e78b12fc-fda1-4ce1-81a7-9e63695906ec 8b21d718-3d6d-4eb6-b9cd-f9090d48f121
+ed2ad899-42f0-42f2-a2a4-26562c94a18e 2019-02-26 16:30:15.708+08 2019-02-26 16:30:15.708+08 6b2d0d75-954d-476d-a920-83a0439a898b ae51a29d-22f2-4f81-ae18-a59f55bc742d
+05f092d3-0971-476a-b73e-1e3f46caa453 2019-03-15 16:40:25.022+08 2019-03-15 16:40:25.022+08 5a900cd1-fd3e-439c-b765-9829c9a61d32 94ddf32c-b093-417c-a1d7-42381d290092
+d6176512-1d8d-4857-af97-d65e19aa8e32 2019-04-28 11:28:04.781+08 2019-04-28 11:28:04.781+08 589695ad-b029-4c5e-9425-4946e80f3fb6 d6efa4d1-c65e-45c2-bd65-45a4a3a9eb5d
+c01598bf-99db-4f02-8d99-6dc7ec42fc5d 2019-05-07 17:00:31.13+08 2019-05-07 17:00:31.13+08 05df15fb-1c19-4077-9522-6d5f48739259 684cc240-1b5d-4df2-9609-f00de3ca4fcc
+c6f1715a-4f41-470f-9c0c-97795d96df42 2019-05-09 10:06:14.16+08 2019-05-09 10:06:14.16+08 0c3edb9b-16a6-4fed-b65c-3757a117a3bc a0c4221e-b5ca-486b-8f8d-f98ec84e87f9
+3c3e6ccb-f61d-4311-97bd-6e41ade92688 2019-05-09 17:48:44.328+08 2019-05-09 17:48:44.328+08 a40f85c1-a408-408b-971c-4e1c4e88d703 405c8685-171a-43e9-8b38-09c82435cba1
+096f6891-9631-4deb-8e4c-c7e779530e20 2019-05-15 10:55:37.913+08 2019-05-15 10:55:37.913+08 e35e7bae-3a9e-41bc-b63b-ee32399d64d0 1d0404d7-be40-4099-b270-b86b7952435c
+7dee23ce-b03a-4e74-9b63-e817eab2db85 2019-05-23 00:05:50.848+08 2019-05-23 00:05:50.848+08 639bcad3-50f1-4b66-9f50-acbb916f7d8e d66fa059-5b42-428c-9c83-65b31ec08a45
+addcddd8-5fd8-42e5-97e1-69239195d9a2 2019-05-31 16:21:32.692+08 2019-05-31 16:21:32.692+08 e5a6d57f-122f-4dac-994d-1a83a93b2440 307c2a2a-d933-42bc-910e-ad6019053f9b
+50ee493c-abed-4696-94c4-e4651520278a 2019-05-31 16:25:45.428+08 2019-05-31 16:25:45.428+08 ec2fd932-2dbe-45f2-a15b-0815ec8ff1b2 73d79c2e-3ea0-42b1-ae44-65de9a5631c2
+935e8fca-c351-4592-9a3e-a8d5e30e8f22 2019-06-05 10:53:00.086+08 2019-06-05 10:53:00.086+08 cbcbc67f-3b4d-47e4-93db-2a85c354a213 79f916f0-c25b-499a-986d-64311324c671
+96ef5375-937a-4317-ba4d-a848ea45bf53 2019-06-05 10:53:00.093+08 2019-06-05 10:53:00.093+08 cbcbc67f-3b4d-47e4-93db-2a85c354a213 0e2b1a40-1445-41d3-bdfa-e4f5da1cf92a
+4e57c4f8-961f-42bb-9185-52c0fe128306 2019-06-11 17:28:58.632+08 2019-06-11 17:28:58.632+08 02962d5d-c83f-4756-bc1b-b9044c4563fa 73d602d6-5deb-4c31-93ed-14ce2e0ba09e
+2c20881b-9f5e-411c-9b9e-d809328f4db7 2019-06-18 15:48:02.225+08 2019-06-18 15:48:02.225+08 7f4871f5-ec20-43b3-aba7-1814a0dd53bf 87e3b279-9de3-4649-9936-4d255890f9e9
+212e5f76-e746-40ca-9ba0-9b5da0614eb0 2019-06-27 13:03:58.358+08 2019-06-27 13:03:58.358+08 e2d1416d-c8a6-43c7-ad2f-08d498e323a1 f6523358-73a3-44a6-8f22-21d34be28fea
+d89186b1-0497-40e4-b7ff-8d728af83a89 2019-06-21 13:57:20.109+08 2019-06-21 13:57:20.109+08 4e27a3d5-339d-47e3-9ce7-0c90068376e5 5c5d9637-e662-4957-aff8-a2c4004f2fd4
+19fbe1e0-b26d-4cf9-8d59-c121fba811a4 2019-06-27 09:35:12.08+08 2019-06-27 09:35:12.08+08 df4052a0-fc2c-4120-b39c-fb5a0f719b6d e52dbdd8-6a51-4429-b070-a5b11884694a
+8e695521-3bee-456e-923c-d2c6adecf5c7 2019-07-06 17:22:08.751+08 2019-07-06 17:22:08.751+08 8f23910e-3c7c-4113-b420-88df899c7a25 4193e471-7176-4c42-bb41-e59636bf8d32
+f0231f75-af61-4dec-a075-66230d91b959 2019-07-15 14:05:53.12+08 2019-07-15 14:05:53.12+08 cfb789ad-d761-4e5c-9f64-b9f87161c6a0 4085b18f-dd96-4757-a9c9-baa3f2b6a431
+f552e5ec-c7a9-4cca-90be-2063f6e1c487 2019-07-15 14:31:13.708+08 2019-07-15 14:31:13.708+08 69b276a3-aa72-4720-9591-cd371e95b7de 036cfbb1-ba1f-4ba0-b79d-eae5a887301d
+e073299a-8fb1-4591-bd31-a253dec8cc58 2019-07-15 14:31:13.733+08 2019-07-15 14:31:13.733+08 578138e6-3a9c-4db2-bbf9-addfef22c072 036cfbb1-ba1f-4ba0-b79d-eae5a887301d
+aa6e5e7c-de3c-4be8-bedc-19afb5f6aca3 2019-07-15 14:31:13.754+08 2019-07-15 14:31:13.754+08 959bf8b8-23eb-48da-8362-90d4978c9406 036cfbb1-ba1f-4ba0-b79d-eae5a887301d
+b1ec358a-afdc-42ca-8535-5b88eba0d0c6 2019-07-16 17:46:08.902+08 2019-07-16 17:46:08.902+08 2a2fd581-a5d0-4bfd-b7ab-2c2d504bc034 7eb81fa0-516a-4904-83d6-eb999a1561c4
+9093b33a-978e-459d-954e-331068e13a13 2019-07-17 14:29:44.536+08 2019-07-17 14:29:44.536+08 c8ab31aa-0550-4b56-b062-20566f8edef5 9c899e73-1ae7-4049-8fc6-1299a4471683
+2f2e9bd8-619e-4956-8896-c929088ceddc 2019-07-17 14:29:44.541+08 2019-07-17 14:29:44.541+08 c8ab31aa-0550-4b56-b062-20566f8edef5 44e24e0e-8518-425f-a76c-4c0cc9b2e09a
+ac0e1ca6-28ad-4122-b336-152d2076d40e 2019-07-17 16:31:05.844+08 2019-07-17 16:31:05.844+08 cda9f386-6c1d-4477-91aa-61f2fcbf93ff 16889bf4-74d5-4c72-bfa9-4cde4b691cca
+37973fa9-611d-4bb8-8869-fb225e31a86c 2019-07-22 10:33:56.633+08 2019-07-22 10:33:56.633+08 7e6d0c55-7f14-4df6-b630-7e9bca15f6f3 24f0b253-b144-44db-bb05-9f7a23a6af04
+6e78ce6d-f3b9-454f-9f93-d46dfea50f2a 2019-07-22 16:03:30.014+08 2019-07-22 16:03:30.014+08 c8050ea0-29fc-4675-9198-3a4c438aafff 9bed84a7-4d4e-4198-9bb4-2660d0fac4af
+e749fca1-208b-4fc7-a35a-06fe0f2227b6 2019-07-23 09:33:53.808+08 2019-07-23 09:33:53.808+08 e36b625f-b336-45f2-a421-47deb3ccff39 3e0f6804-6e7b-4de6-bb21-8f12309fd10e
+5c1ac17a-37c2-424c-b141-850d76a834f0 2019-07-23 11:13:52.733+08 2019-07-23 11:13:52.733+08 7b76cdc3-1393-474a-9868-b48a35519a53 13cd7a9a-72bf-45d5-bc31-29a2ffd319ee
+f6c54092-581b-4ec4-b442-abe123ae39c5 2019-07-23 19:50:12.514+08 2019-07-23 19:50:12.514+08 911e12ca-0961-481e-bebb-0201c63f0cd2 e6b7a194-c779-4946-bf01-10b2337bb8c0
+d4fe5ee2-5200-4c71-a927-9c29903fd9e6 2019-07-23 19:52:59.545+08 2019-07-23 19:52:59.545+08 97d28bd7-4126-40cd-aff4-ba6db048ae15 720e6f6d-551b-4c1d-95ea-497b8a0c5495
+527b4fe9-0f33-4ab0-8e5b-1d2dfb93e44a 2019-07-23 20:06:45.198+08 2019-07-23 20:06:45.198+08 9f777c35-b431-4a11-aeac-979ad0a3f1ac d0ef103e-0f08-4d7e-bfb0-5d83d5fe6229
+58784a51-1364-407b-b9da-48996f530631 2019-07-23 20:33:13.47+08 2019-07-23 20:33:13.47+08 82905dcc-a3ca-4ecb-b0d3-d7e32ec6f958 ad4ff171-1622-4d98-be68-31ccc47670ce
+0729829d-8436-4ea9-ab67-d09198827018 2018-10-08 16:48:22.323+08 2018-10-08 16:48:22.323+08 da364ec6-34cf-4bb6-8eb8-10548f45e67a cc115119-d1b9-48e4-af00-1f2408d73eb0
+56e5008e-c6da-4e82-a9d4-b2a72741aa2e 2018-03-28 10:01:47.911+08 2018-03-28 10:01:47.911+08 37a8aa55-7282-4e2a-8cf5-a32e6a00c381 32834f4d-6653-478f-8917-40df0f0706ab
+6ea84bfc-39fd-4ba3-bd45-e011de9bddd2 2018-03-28 10:56:04.954+08 2018-03-28 10:56:04.954+08 cd1e30cf-8d0c-457d-b7d4-a773af3c17f9 98efd1b8-ba29-41ac-8022-8e5fcdae47d7
+c6d0f381-207e-4efc-b520-f4ab3c38aa51 2018-03-28 11:26:27.871+08 2018-03-28 11:26:27.871+08 7685d43c-d87a-4eb4-88e0-1bde3d9eed5b 73c755a0-b4de-4f3b-95de-a4d13d1b5bbe
+7a208362-a369-4bdf-b002-47e725c5c9c5 2018-10-29 18:06:17.129+08 2018-10-29 18:06:17.129+08 a2423718-1142-4d1b-aff4-85a6f260c390 b5d5d84f-ee8b-4fb6-bf89-cae02af804b8
+07208d6d-145b-4ed1-97b5-c6aa98cbb0f9 2019-12-24 11:48:31.449+08 2019-12-24 11:48:31.449+08 380f8e6c-ddbe-4c2b-90ab-89abece78fd6 ae0461df-12bb-4b97-9083-2388cc19fb64
+fc5fd21f-57e4-4abd-bb0e-29f6d37e83c2 2018-03-28 14:54:49.052+08 2018-03-28 14:54:49.052+08 72f27aba-3030-490b-9c55-ca21f1294c15 4535e17c-bdc5-46c2-81e7-b8a7aa506e89
+8b54994a-7854-4e52-b1f6-f46b86a5df7f 2018-03-28 15:40:02.872+08 2018-03-28 15:40:02.872+08 66aa8517-e2eb-4eaa-b1aa-77db8ee96462 c3d7c202-6499-4b43-85bf-d79e51629771
+aa6fed19-7200-4a47-a963-9595302fd04c 2018-03-28 16:34:55.454+08 2018-03-28 16:34:55.454+08 63b1d744-08d4-4190-9ff1-437220a51be4 466bc6e3-375f-46a0-8698-ba5a45d8b5aa
+a0adbc4b-b2c3-4941-8531-845de95705c6 2018-03-28 16:37:25.871+08 2018-03-28 16:37:25.871+08 a3aeb56c-762d-4329-8fc8-0309335e489e c799837b-448d-46a8-bc2e-abecbeaaddf0
+54b74d21-15ac-4043-aaeb-b0435e4bdcc8 2018-03-28 16:37:40.443+08 2018-03-28 16:37:40.443+08 b94d787d-82ad-4377-91c7-ef2e4bb9fe74 e4a15813-aaff-4012-b84e-538d4af261e6
+123380f4-4c89-4d25-8052-384e5bc22faf 2018-03-28 16:38:35.593+08 2018-03-28 16:38:35.593+08 b7f4e4fa-c1a4-4f44-9c29-bab2e1b860fe c857c441-8c1a-4156-84c7-a647e3f7cafb
+baf2e11d-5c56-4147-bd3e-e97772641695 2018-03-28 16:38:50.266+08 2018-03-28 16:38:50.266+08 8f63105e-6340-4d3e-8436-b564d092296a 1de94af4-bdba-4d78-9427-208c421a9052
+c957a109-de5a-4750-b524-3bbb91aaa00a 2018-03-28 23:32:12.782+08 2018-03-28 23:32:12.782+08 ef22c0f1-7da1-47eb-915f-8ef899a1c2e0 70a8ddba-e9cc-4b23-afef-f6f751a0181c
+0dbc1669-0205-4fa7-b7e8-b7dc491fba4b 2018-03-29 17:28:38.917+08 2018-03-29 17:28:38.917+08 5abdf680-af46-47fe-80f3-d98fa0be49e0 a53ca2e5-bb91-4e04-8ee5-dd80dc1ec6d1
+cbe3972d-fbfc-41b1-be71-7ca1b3a39a03 2018-03-29 18:19:53.923+08 2018-03-29 18:19:53.923+08 c68f452e-5afc-4ae3-8ffe-00828a24861c 6d7ae59b-52da-43e9-8888-fa8068f45ee7
+46c38031-addc-40e9-a2d6-ed6786847e6c 2018-04-02 10:37:43.68+08 2018-04-02 10:37:43.68+08 2dd2b9c9-f307-4635-98cd-0aed7043075d c7932a1f-6a4b-4511-81fd-6285af951b9c
+0ce87755-84c5-4ef3-8677-edcbb5523193 2018-04-02 11:06:37.559+08 2018-04-02 11:06:37.559+08 e23258d4-5427-479c-b19b-25ac08c4888f c34a2dbd-4a84-497c-9ca7-026687a37717
+11ff2dd2-e90e-4ce5-9a8f-e2a5ca7bbe21 2018-04-02 15:54:14.348+08 2018-04-02 15:54:14.348+08 c4424e56-9f35-4bdd-b7c1-66836e3ba1cb ff37fdc7-53f6-481d-84ce-1e6e6676701d
+ad9e6ac7-3a75-4a96-bff2-072b3f2f4e0f 2018-04-02 16:51:42.751+08 2018-04-02 16:51:42.751+08 c12bb164-9c52-4a79-8210-b5c74534053a 1c3775ff-0ed7-4741-a82d-5551cc860061
+01083a88-d9fc-4dae-9ba6-9c93637efdf1 2018-12-05 14:59:57.89+08 2018-12-05 14:59:57.89+08 4f2419a5-1b3b-4929-9b0f-27d286d684a4 bafbbebe-8667-44d4-9543-18ac43ad4d21
+9249793a-563d-4932-bc98-473806508300 2018-04-02 17:18:18.085+08 2018-04-02 17:18:18.085+08 bf250923-ab23-43ab-a4c3-0aebe72d5c84 cbc1dbb0-6dc8-4cc4-9d0f-162bd1e5cbe6
+06346f9c-5118-437c-a1a0-a98d0bfabbb5 2018-12-06 11:28:49.955+08 2018-12-06 11:28:49.955+08 a1051359-cb72-4421-9dae-06e5cc0d8622 eaf50efd-3be3-4815-ab62-cfd1e2d77bed
+8afcfd2d-2e06-49bf-8079-e8c8bd7e1e1d 2018-12-07 17:22:02.013+08 2018-12-07 17:22:02.013+08 bbfe4ad2-61fd-4c9b-9a68-a0682458a01c 19151d32-ffd7-4ad1-80cb-b6173adaf11f
+3201f17b-3628-4af2-a61a-9635941125bf 2018-04-02 17:22:17.517+08 2018-04-02 17:22:17.517+08 a4e76a90-da0e-45f5-a2bf-540d04090e35 dcb774f0-6fc6-430d-9486-48e03b653032
+8c3576c8-fb2e-4d87-944c-61557ea25959 2018-12-13 13:58:23.834+08 2018-12-13 13:58:23.834+08 72701fdd-9595-45b1-8bed-190d4bf8ea7f 5e8cad65-f4b8-440f-8c7d-ff360c05699e
+a32a0959-d558-4c12-b13f-04ce210ed976 2018-04-03 11:39:47.193+08 2018-04-03 11:39:47.193+08 ca247144-4f2b-40e9-a2a9-de78942565e5 d37be38e-381a-472d-88e9-29be91869584
+698fc55f-8563-4217-be7c-a1bf8e2cf72c 2018-04-03 11:52:10.95+08 2018-04-03 11:52:10.95+08 61625131-a37b-4478-a0dc-f7c55d54f34e 4443e795-6d04-4648-9997-a93862565b3e
+ec0ec375-1485-424e-8874-a9a8fdda1140 2018-04-03 11:53:08.712+08 2018-04-03 11:53:08.712+08 855e5472-f1f9-4119-818a-337b5f302028 99244d8c-d0ce-4963-b0ba-efbaaef5f50a
+82acfccf-c688-4134-a371-126ad62c95e5 2018-04-03 12:41:11.901+08 2018-04-03 12:41:11.901+08 ea35c8e5-60d3-46c7-a819-b0557f2be17b 8fbaa90c-9998-424e-82fe-948c7a948332
+78e2d45b-8360-4758-bb8c-1d4e0241794b 2018-04-04 16:47:57.926+08 2018-04-04 16:47:57.926+08 e59809ab-9197-4c91-8a1b-041a187eafc0 553d0d89-b8b2-4900-a17c-19fc50269001
+0824b32e-3f62-4028-859e-cffb652d9508 2018-04-08 14:00:41.055+08 2018-04-08 14:00:41.055+08 5d266e86-fadf-4335-843c-a721ecb814c3 a6450058-743b-460a-829c-c7a9442535a6
+f3626b72-514f-4871-81f4-522fd57cae0a 2018-04-08 14:00:41.036+08 2018-04-08 14:01:24.958+08 8e60936a-d379-48c0-bab9-7f9d02c1a5f0 37a47128-0a76-4bbb-89ef-26b27932254b
+dc7ff2b4-acd8-42f5-9c85-7a94adf955b7 2018-04-08 14:06:24.534+08 2018-04-08 14:06:24.534+08 b446a06d-eb4f-4b6f-98ff-4eba1f2dd35a 506a40fe-aa97-4845-b2e7-0986aeab2b76
+f9085908-8505-4262-9bd9-f8ade8c5f4ef 2018-04-08 14:06:25.455+08 2018-04-08 14:06:25.455+08 c5b8fbc8-aee5-43cd-a2e8-6f48cfe463e5 28cfe943-004f-4549-aba4-26bfbbf65e97
+6c524d59-5547-40c1-bcee-1d4c47f6612c 2018-04-08 14:06:25.477+08 2018-04-08 14:06:25.477+08 8b5d7571-fbed-4a64-8ae5-158979e259d4 28cfe943-004f-4549-aba4-26bfbbf65e97
+3aae2c4f-ba79-47bc-80ee-26f8877919d9 2018-04-08 14:06:26.113+08 2018-04-08 14:06:26.113+08 b689f4eb-472a-4f21-93e2-9a7c753479bd 82731511-63b1-4afd-9fc4-5eed20a7e13f
+6c6c9d12-76e3-4206-a2ed-83acd1958a5b 2018-04-08 14:06:27.168+08 2018-04-08 14:06:27.168+08 5d4fd2cc-9b83-48da-80df-6dd615d69195 e1fd616b-edce-488d-8065-8cd901709aca
+4e681cc6-7615-4830-a431-8feae3d97fd8 2018-04-08 14:06:27.696+08 2018-04-08 14:06:27.696+08 a40e7ecd-bd8d-4e58-95af-f964d8861447 c57824af-5b3c-4c9b-b719-2fcdf41e5c93
+61025f4f-21dd-475d-9569-e06ff204ff80 2018-04-08 14:06:24.523+08 2018-04-08 14:06:55.081+08 c160a4b0-d8da-4e66-ae49-305ecdd5ca48 88f66ce8-8107-4f37-bc64-152ecee7006f
+a7fb2670-1b11-4ee8-92b4-3400cbe27362 2018-04-08 14:06:26.092+08 2018-04-08 14:10:59.286+08 72a5348d-2988-4bd5-ad2b-b46b616e70a9 a471484c-32ed-4224-9451-8506afa95ee8
+a344ed48-cd28-4fa9-842b-dc4773efec94 2018-04-08 14:06:27.143+08 2018-04-08 14:13:04.33+08 fa4989e0-0602-43e4-a5d6-3b5492e9711d 3b86da52-5af8-4866-8b37-daf269b580c9
+2f3a241c-5092-4ea5-8ba8-27faa9da8fa4 2018-04-08 14:06:27.666+08 2018-04-08 14:14:22.541+08 88f8eecf-bb3b-4dbc-b003-2c28bdf07be4 fae9d93e-eb25-4486-bf75-43b5d9093060
+842178e3-53e2-4e63-a4cf-84cb81391b66 2018-04-08 14:40:14.026+08 2018-04-08 15:47:11.743+08 b484a973-d8b7-4e1f-a3a1-8be21122c6fe 74e3ee05-6f81-434d-89d5-409b3c3c3028
+331a8eb5-fc13-40af-8906-4e7ac815a85c 2018-04-09 08:03:04.747+08 2018-04-09 08:03:04.747+08 05b3e292-e599-4d57-ab16-7bff3ae393d2 57f5d115-e89e-430c-a5a9-541aacafb488
+8b39145a-5d84-44ad-9dcb-63f6165b1d3e 2018-04-09 08:05:14.723+08 2018-04-09 08:05:14.723+08 def3cc25-dff3-43d3-b77c-855e1683db60 dc05a0f7-5d8f-4d5e-80f9-a68d6601c488
+e308d5a8-828f-458f-9f2e-66aa3973352c 2018-04-10 09:58:39.787+08 2018-04-10 09:58:39.787+08 541024ad-b513-4adb-b4ea-9a3eb3b67f5c bf00840f-93e5-4f6d-be3e-b449e2d92051
+c14cd7e3-464e-4081-a2da-29621741ecae 2018-04-11 09:27:08.933+08 2018-04-11 09:27:08.933+08 ade7450e-eb35-4424-8b11-83f4c466bef7 307ae878-46e3-44a7-8603-67b38cfdf570
+29010bc2-9d46-42a7-8eac-421939ca70e8 2018-04-11 16:24:01.27+08 2018-04-11 16:24:01.27+08 9f8406e9-e9ca-4ca0-ae96-258bb6917390 acb64f0a-30d4-4146-a608-43cd4f2a20cd
+0c617e8f-4729-4348-b2b8-d9e971a7d96d 2018-10-09 17:02:23.473+08 2018-10-09 17:02:23.473+08 ca8a3be8-72cf-497c-9743-e3d348c53672 7cd0e434-1b19-4991-a8dd-b5507ce83d8c
+f157b758-94de-43c5-89e6-7fd7b87cbf7f 2019-12-24 16:23:58.9+08 2019-12-24 16:23:58.9+08 c46b60be-3353-4715-8783-561892271905 4373a223-fea3-4229-af15-847a2236af08
+3fc1b917-0226-418c-877a-d2a43cc26198 2018-04-12 11:22:18.186+08 2018-04-12 11:22:18.186+08 3c6dfe0c-5013-4f63-9222-721718b82b24 1a7d98ac-27fa-49bb-bd82-df050812f8e6
+5a6bfbd0-f813-45b5-b1ee-8817ef9914b6 2018-04-16 11:54:59.776+08 2018-04-16 11:54:59.776+08 a85e3b5f-f279-4094-b079-07d51a243899 83e3df67-8f00-466e-acdf-d7441b033a73
+d8ddd40e-4283-4a31-8cfa-a4918c460d85 2018-04-16 13:52:32.775+08 2018-04-16 13:52:32.775+08 64cbf359-5e92-46a5-ac77-4ba6566e6539 cedcda73-60da-4a75-a229-bec319bd9757
+8f49be09-bbd3-4b75-8194-afad1def9140 2018-04-16 14:07:58.039+08 2018-04-16 14:07:58.039+08 b848da41-0b65-4b04-afdb-aedda940be03 bbe094dd-4c59-4a44-9a56-cd5676418107
+2c001b3d-0095-488b-b803-c46c3c770248 2018-04-16 14:07:58.06+08 2018-04-16 14:07:58.06+08 02d9ea95-34c0-4d67-a8dc-755e3330cb36 e34d9d96-f878-4896-ae3e-55d492c4ba33
+43943a6c-7de9-4657-a674-069aa0317746 2018-04-16 15:46:07.762+08 2018-04-16 15:46:07.762+08 b4f14b5d-82f1-4ea1-b10f-3e38e552168c 9e709c26-1099-40b7-88b3-482e26e9df23
+54e86fc9-909d-4d32-9577-7797be42f23f 2018-04-16 15:46:07.917+08 2018-04-16 15:46:07.917+08 a5c1d727-4820-4d7b-b758-dea1af104b33 0af9f7d2-c08a-4441-93d7-2eb703f0e941
+59690abe-7ce4-45d5-89d3-2c33a16acd6b 2018-04-16 15:46:12.41+08 2018-04-16 15:46:12.41+08 a2fa85fa-2e1a-427e-99f2-595757cb505b 0261a452-9e7a-4fad-b07c-2d6fce0561bd
+bde48f0f-db39-4741-ae7d-bd247e3250f2 2018-05-03 10:35:59.19+08 2018-05-03 10:35:59.19+08 6accf380-8a73-4f88-8a5c-42b3366bc358 1da75911-667d-4484-8cc8-3d05eb06e404
+354deffc-6536-4033-a11a-9f22b8fb99d9 2018-04-16 15:46:07.744+08 2018-04-16 15:46:53.741+08 c76c28b1-6041-44be-9ce9-39728d5de7c6 5ebfd140-8067-4b51-b1da-bb357c7c8e4d
+ab909767-1be8-4e56-89b7-de08709c6310 2018-05-03 10:37:15.494+08 2018-05-03 10:37:15.494+08 56227677-39fd-4bfe-a59b-8c5f28682832 64036170-2629-430f-9f56-56f2f645bfd0
+1780e55c-f0a5-464c-8dc7-7d86342d17fb 2018-04-16 15:46:12.388+08 2018-04-16 15:51:59.779+08 2a88ded3-16cd-4e38-bbb3-ed48fe6d5efc fc8399b0-54ca-4ea8-8615-d61da7fdb2e4
+e2b7282e-019c-4639-ac83-abc3fdf1a970 2018-05-09 10:42:20.056+08 2018-05-09 10:42:20.056+08 289b0a55-03e7-4154-bdd7-b7bbb15a6d28 a9612792-cc30-4b80-bfbb-97c0fdeecf45
+300f5604-667e-498b-bd33-d8341330b580 2018-04-16 15:46:07.899+08 2018-04-16 15:52:20.677+08 3a873f72-4f94-4141-94f5-023d34b61d1f b80de95b-ab1a-4b9b-b64a-61eb47118f77
+06abec6d-179c-4e42-a72d-766bf6604035 2018-04-16 16:00:53.32+08 2018-04-16 16:00:53.32+08 c538c4cc-6b50-4a51-9706-9a112551be27 9273a392-a552-4099-ada8-143bd6e3e6bb
+f988bf1b-2fb9-4d59-bb24-34438f6a1c74 2018-04-16 16:00:54.808+08 2018-04-16 16:00:54.808+08 81b14e1d-4d14-4741-b581-31e3c543a0f9 9c326fdb-af9f-4b0c-aa19-41010e7f0915
+aaa4f31d-b352-48db-85eb-5c79ee77fb5b 2019-12-26 11:22:53.214+08 2019-12-26 11:22:53.214+08 e9412219-df4d-4a2b-bfe1-1e81e44f7a60 de7228a6-d2a4-4308-8125-c25a5e80caf2
+33dc417b-958f-4c71-b054-d6c8df6fb239 2018-04-16 16:01:22.17+08 2018-04-16 16:01:22.17+08 2f72ef62-1d3b-4c4b-9308-5abb39a919d0 3aff7db1-0f77-40b3-9228-13d6519ef209
+df0dfced-588f-411d-a50a-d8b9359cff60 2018-04-16 16:00:53.294+08 2018-04-16 16:07:00.025+08 3987b49b-1b19-4b06-889b-b102edd2abe3 7541951a-fc00-49e0-953a-ac2547dd63b9
+d85242b7-6617-4acc-9812-9d53ed4a84d4 2018-04-16 16:00:54.792+08 2018-04-16 16:12:18.255+08 ad6a8655-acd4-4092-ac47-6d7e96cdb2a2 c8861318-798d-40fc-b51c-c9ce2a59bcd9
+037231be-2240-42a5-8e5d-c5e612edbadc 2018-04-16 16:14:51.128+08 2018-04-16 16:14:51.128+08 b5c9d48e-6b32-41c8-ad53-93f60da390b1 6472b729-0e05-4a8e-846a-d74b97e3c4ee
+59acfda1-6448-48ee-943f-d92626e1c366 2018-11-23 17:09:42.481+08 2018-11-23 17:09:42.481+08 07b4abb3-3cd6-43ad-80af-e256996876d7 2550cb4b-a31e-4560-bed0-8325a2fea057
+b6bcc505-b08e-474a-9c21-39a3f04132aa 2018-04-16 16:14:50.41+08 2018-04-16 16:22:14.964+08 c86b0543-8d73-4c04-95d7-aa52f68d8c67 9c2fb1e3-599f-48e6-9e9b-6c3613275199
+b6a1c2fc-2c18-44e8-b64e-a54a940b9601 2018-04-18 11:28:28.09+08 2018-04-18 11:28:28.09+08 cf73d66e-1a91-4f17-a31b-e373c8731fb4 27472fa9-3075-47d0-9c88-7accc4386103
+ed283bc3-7704-4e13-bce2-042eaffdd82f 2018-04-19 10:59:55.879+08 2018-04-19 10:59:55.879+08 6c1400a4-ffcc-4f86-955b-dad07fb58c17 5137058a-3c36-49fe-b29e-460166a4017e
+ff1adce1-9365-4702-9e51-90f629a29211 2018-04-19 11:00:20.817+08 2018-04-19 11:00:20.817+08 69df2525-998a-4f00-a7f5-857a888eb1b9 e9b06093-70f9-404c-9ee9-c056cb62226a
+fe71684d-813d-45e8-b71b-d7c7a8adcd73 2018-04-19 11:01:02.813+08 2018-04-19 11:01:02.813+08 6831367e-c4c8-407a-b2d6-3259490ee594 3a59ba8f-dcaa-4276-808f-3f6244455278
+5f99d757-ee39-43f1-8553-3675000835b3 2018-04-24 14:38:42.703+08 2018-04-24 14:38:42.703+08 1ea28db3-0c1b-4b71-8fb6-d38b5b55fc3b 66731701-c15e-49a4-9eb9-4e13de5dc80d
+d1a4b471-9500-4cca-b482-ed6f3cd3fd6e 2018-04-24 15:29:24.95+08 2018-04-24 15:29:24.95+08 835d5e0e-912e-458c-a809-8634e203c0e9 70bfe3ff-fb57-474c-80c3-d9fd580896f2
+0ce22569-218d-4a6a-8eb2-04e99d660084 2018-12-07 17:22:02.591+08 2018-12-07 17:22:02.591+08 71c10c83-3856-45fb-ab38-c75aabf7d5ea 76902a4e-8831-4253-ac3c-9a7be5c855b1
+3accf0dd-f3bf-4d10-b26c-77735f59e9f2 2018-04-27 14:42:12.759+08 2018-04-27 14:42:12.759+08 e0b566e2-b4bd-4224-9cd0-301b176bfbfa d3aeb7df-fcd7-4fba-b003-6c0ee98bc33a
+f013c876-0787-49cd-a56e-215d36f155ea 2018-05-03 08:54:32.788+08 2018-05-03 09:59:08.799+08 90194fd9-5400-4bda-bd8b-7ed11b598c4c a8cf3a82-d9cf-49ef-b2a8-36689b772016
+0bf85021-6840-410d-bd7a-2ba1e1005a7c 2018-05-03 10:34:23.767+08 2018-05-03 10:34:23.767+08 51fbf199-10ab-4718-8b70-c92beea24f6a 34e0cc1a-2e8b-40d3-a85c-4762ac05a1e9
+ae991cdf-5c83-4fa7-821a-43477fdaa331 2018-05-09 11:11:01.657+08 2018-05-09 11:11:01.657+08 fb36a342-1fe1-4756-ad83-825b5d7ac57e 67f02e4a-e979-44d2-b17d-849ba3ba1eb6
+4be9a97b-e982-4128-a94b-cadd990a354b 2018-05-09 13:55:22.704+08 2018-05-09 13:55:22.704+08 d7460b80-d3f3-48f1-9287-d7220b1b7f3d e6adceba-3e63-4d8c-81f9-0733ce80b9e9
+4ce89397-d48f-4759-91b0-d0f6d63f6a9a 2018-05-10 09:13:20.652+08 2018-05-10 09:13:20.652+08 33ced0d8-f342-4bc5-8c11-45dcb0304ffd 238b18df-6349-4e01-bea7-c785f5754543
+3b4a8bde-a2b8-4e15-bc36-4d43a8e277c3 2018-05-10 17:53:00.792+08 2018-05-10 17:53:00.792+08 60f374db-1336-4bb2-8dda-311955dca706 4c99b328-de6c-4929-a512-82cf921fc74d
+9fbbe720-373d-465b-a196-769f70723d7c 2018-05-10 17:55:50.415+08 2018-05-10 17:55:50.415+08 5d8abf22-14e4-474f-9a3a-11a4976643ee b53ef639-7171-4c8a-88ee-fff2e88a2a20
+583f56a5-91c4-4ae3-89f1-038b8e7213c6 2018-05-11 10:38:17.14+08 2018-05-11 10:38:17.14+08 8467dc74-ae70-4742-9f5e-8b44464133b3 a5c68c4f-124e-4860-b68c-b0a78cc4bcd0
+421718ae-40c9-4da2-9ba6-7cac716eab06 2018-05-11 10:41:15.504+08 2018-05-11 10:41:15.504+08 ec17d151-95d9-4c87-a5c9-799089626714 f437f173-ee82-423a-b2cd-6e1672f6887e
+9ff514a4-16dc-4143-bc20-b688d9404477 2018-05-11 15:45:31.14+08 2018-05-11 15:45:31.14+08 c135c6c2-af77-42b4-9fd8-a684c629383e fbb1bac9-c0b4-4340-bea2-035eef7cc9ca
+f753e447-956d-4f08-802c-a8bc688779a5 2018-05-16 17:28:00.392+08 2018-05-16 17:28:00.392+08 663eba54-78c3-4aa6-abbf-66cde27953e2 33a6e9a2-e5b2-4b6f-814e-fc678e4bfc52
+a1136aea-8fd5-4cff-aa36-f04c3b8badb2 2018-05-17 10:26:47.702+08 2018-05-17 10:26:47.702+08 5590fa71-06f3-4895-9540-4996a44d0c27 6dfea180-3bab-434b-b4d9-01f484b55b2c
+03fcefe4-3baa-47ff-abd9-c34edfbcb35a 2018-05-17 14:43:40.153+08 2018-05-17 15:14:37.502+08 957aac75-16e3-4a36-958f-bd44ca104591 d6bcc8eb-4906-4bd5-b207-3e62af569320
+49299c21-9b55-4e43-ac05-bc9f0fb14292 2018-05-28 10:45:28.358+08 2018-05-28 10:45:28.358+08 1da4370b-ba2d-4f6a-92f0-485a163d45e2 5fa9177f-e430-46e8-b0fa-a824b5c39c36
+12c5a980-7d60-4935-943f-be81d238dc38 2018-05-28 10:50:00.222+08 2018-05-28 10:50:00.222+08 d314e16c-4cc2-47bc-92b5-af0639bdc7a8 6eb5ae32-1f75-44e5-9436-c7f6f0af18b6
+2ead05ad-69ae-4e96-9d43-da75c5c563c4 2018-05-16 17:44:54.919+08 2018-06-05 11:15:46.455+08 2e6e8c47-b162-44b0-802f-689c0a71fb2c 358a0539-4815-456c-90f6-2f5313b54f0a
+e5a57e48-8a92-4686-8acc-ec61fd9344e6 2018-05-28 14:03:33.966+08 2018-05-28 14:03:33.966+08 1d256945-ce40-4216-ba9b-2071e6e1548e ba38e139-3c67-4179-975d-6a1b29c08aa6
+5ef1f4a9-be22-4395-bac9-dc1cbb9f309d 2018-05-28 17:34:37.774+08 2018-05-28 17:34:37.774+08 2205fdef-b595-4f0d-8268-e9d2370638aa e6366125-1358-42e4-926f-0d6344002fb8
+010fd69b-5c68-4e6b-874e-1417c69e74f0 2020-02-21 13:07:28.533+08 2020-02-21 13:07:28.533+08 d83c7fb6-a62f-4cf0-9818-3df3592a0f3b 80c6d23b-6c8d-438c-a5b5-dfec268349ad
+69ff9800-b2bf-4cea-b3aa-7c21c36a2ffe 2018-11-17 09:21:52.768+08 2018-11-17 09:21:52.768+08 ec90f249-7504-4b98-93e1-8f6f39352105 939cd5ef-673f-4683-9dea-55ac0af56393
+33a09ec9-11b5-4579-9b76-1a2efd6bcea2 2018-11-24 15:49:36.146+08 2018-11-24 15:49:36.146+08 b081c1e5-b3f5-41e7-a15f-da42c0760ab8 38f9bd20-5149-47ed-90bb-43740eda51d2
+40e70bdc-9ade-4d95-95b7-956e726e9c8d 2019-02-25 14:10:58.985+08 2020-04-08 14:32:11.108+08 198c4f79-6642-4537-b774-bea491692a9e 2db0bca2-23d9-4090-8ca8-30ff8699b103
+5df51da4-fc99-4fca-b1f3-c9e42a7d63f5 2018-12-07 17:22:03.095+08 2018-12-07 17:22:03.095+08 c8e9affc-7965-452f-af9d-db9cafc1a54f 2cadb449-7dfc-4c3c-a468-c568c8ea7e62
+2e319b59-c360-49c1-84fe-b1724c7d011b 2018-12-13 15:31:50.781+08 2018-12-13 15:31:50.781+08 3373f8a0-47a6-4b6c-9df0-b21cf0883d73 3d62206d-c8ae-4dde-9474-0e6b2786f684
+9344f3bc-7e83-4d4c-9086-db3f55584413 2018-12-20 14:58:02.439+08 2018-12-20 14:58:02.439+08 764df0c7-c68c-47cf-827f-d2cee7802096 b6ec7cc4-efa7-4c35-a8ab-968845f3da43
+dee1fd62-d2a3-4918-9fb5-3f655ba912e5 2019-01-04 15:34:26.882+08 2019-01-04 15:34:26.882+08 becc893e-7135-41ab-8e23-10257bd06437 bb9bad8b-bb99-4fcd-bfe1-d6d85cf31b47
+ac253bed-8d7b-4f02-9d9f-3048d1934b32 2019-02-25 15:41:59.838+08 2020-04-08 15:05:02.575+08 cdc89f99-96ab-4176-a290-0cd507439722 c884a293-b09e-480e-9af0-e67c8ae442da
+d6376725-75f6-4595-95cc-dca74c0b40f7 2019-01-04 18:36:21.565+08 2019-01-04 18:36:21.565+08 df057647-e4af-4ddb-ba5b-4f9c56f48e1d 615c536b-700b-4b98-beac-b0bda377b4bd
+f4d9b2c9-9518-4183-83ef-375b9b49451f 2019-01-07 11:08:30.156+08 2019-01-07 11:08:30.156+08 b6fe084b-3bb8-4dcc-922d-b85d47f1149b 8f6bb3ed-e811-4069-8476-45fa0cfc6f17
+847ccfe9-acf6-4cc0-a50f-7c67db0e6170 2019-01-14 11:53:46.533+08 2019-01-14 11:53:46.533+08 742624bb-c14b-4b1d-90d8-bd54ef4520ba fe3b0041-aabf-4046-b8be-3b05ee46de20
+bb3004fe-249e-4563-925b-69387e9ce6c7 2019-02-25 15:41:59.803+08 2020-04-08 15:05:10.818+08 aa350be5-e923-4961-b523-fd25c5e8445f 63095003-a279-4564-bf48-0f3f7ca2db97
+ec29b7b5-1b96-434f-a067-8d494deb9a0f 2019-02-25 15:39:43.263+08 2020-04-08 15:09:24.51+08 fc002308-8f49-4bde-a539-028bc4a00d6d 7d9f19cb-ea57-440b-9651-dbf601f1f3a1
+9ea398c4-b706-4e8e-96ed-04c6f74e0fdb 2019-01-23 17:14:10.686+08 2019-01-23 17:14:10.686+08 fa2e9270-f133-46bd-8403-b1438680963a c652dfcc-2815-482e-92fa-d71e3647a73d
+9d89f0e4-14e3-4441-b42b-bebe25484a21 2019-01-24 09:47:37.037+08 2019-01-24 09:47:37.037+08 bb14be6f-ac60-4646-a8ce-c0e179c648d2 d948a2a9-74a8-46e1-963e-bf0f6134764f
+02774d4d-3b8d-4e14-871d-78c0f86de725 2019-01-25 16:07:25.635+08 2019-01-25 16:07:25.635+08 62e44371-9cc5-43c5-b9b9-e5fbdc63dda3 c1fd9e76-3d2c-4150-919c-c529a57581c0
+82b75613-ab0f-43bb-a6ac-8609f3b5af4f 2019-01-25 16:07:25.641+08 2019-01-25 16:07:25.641+08 62e44371-9cc5-43c5-b9b9-e5fbdc63dda3 b338dcdb-b7bd-4265-a7fc-63bcae5b5597
+87fa8a31-9f42-4be3-871a-0cdae24c4166 2019-01-28 10:00:29.643+08 2019-01-28 10:00:29.643+08 bb308c8a-f70a-4351-a6dc-aedf8612cceb 1cd1cb16-1d8a-4d20-be3f-548f7b177b1b
+60f81b03-4aaf-4b26-a005-4ef96d617f92 2019-01-29 10:56:26.791+08 2019-01-29 10:56:26.791+08 2a275bcf-4e3b-48ac-94a4-f7a77b45ab8b fcfbd781-138a-4298-a573-df9082d9914e
+d16a9dd5-3d7a-4bb1-b0e6-ececc648397f 2019-01-30 11:05:38.192+08 2019-01-30 11:05:38.192+08 ed20720d-14e7-48f1-bf4e-da3ec2ac4c46 768b5117-e123-4f47-adb9-eaf62dbf3d6c
+55f24172-50f7-4fd9-8a0b-618b7f05ef81 2019-01-31 11:35:16.841+08 2019-01-31 11:35:16.841+08 85886b04-282a-40be-9b2c-8fe7aaf2d38a 4d9db838-043f-4513-8e70-c976017fc1f7
+2c5ee693-a737-4858-a98c-2f0b005b2af6 2019-02-25 15:39:43.241+08 2020-04-08 15:09:38.021+08 70454576-c9f8-4b8b-82a5-2ba414369cf1 504e3c9b-603d-4118-a370-217347a4324c
+09672b3f-9819-45f1-a93d-b1952b9f2ea5 2020-04-13 13:27:00.282+08 2020-04-13 13:27:00.282+08 933454ed-df7e-4ca3-950b-6faf23a1a5dc 5b58c3e3-eca9-479c-9eb5-e75f67f97d57
+f2db63fc-b79d-4231-96b7-280bc0124be9 2019-02-16 12:14:37.494+08 2019-02-16 12:14:37.494+08 1956eecf-7103-4765-af34-27974b9f3e7c 110ef22a-73d0-44dd-ad6f-6a45ceb40cc6
+bfa6a6a4-be27-4aef-89bf-feab4c1a4674 2020-10-09 14:20:04.384+08 2020-10-09 14:20:04.384+08 d7c62295-864c-44de-81e0-2cb9a03bf532 d225ef09-9a28-4c68-9bc5-b9856e4b9af6
+d51e2596-92eb-41b2-9672-fa1a49665303 2019-02-22 10:40:53.909+08 2019-02-22 10:40:53.909+08 ec30262f-dc01-41c2-80a3-5602fa716888 90721552-469c-47cb-a77e-4d3bfffbf6c5
+f9d63ec7-0672-41e6-af6a-67fb7c20b97a 2020-10-10 10:55:07.36+08 2020-10-10 10:55:07.36+08 e830e2fb-b382-4679-b8db-c7e2afeed47b 77da0a6f-3db6-4714-8add-a2e306bf06ac
+e1c373e6-b00d-438e-b295-deef946cb43d 2019-02-25 11:38:45.231+08 2019-02-25 11:38:45.231+08 3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09 5f6f7e78-e8a6-411e-8c41-b7cc3fec8898
+18df3af5-b32d-4f01-9cac-bba59505e3da 2019-02-25 13:31:57.662+08 2019-02-25 13:31:57.662+08 b1acc286-422b-46a2-a2ea-4aa8c9b8256f 5ded3a70-6e94-40c4-8d91-9661b286feff
+672c2b99-6a16-4da2-8c25-6b9fbc3b23b4 2019-02-25 13:31:57.692+08 2019-02-25 13:31:57.692+08 bb29ba88-ec03-44ab-ba29-00d98ccd9af1 5ded3a70-6e94-40c4-8d91-9661b286feff
+8e626b67-e596-4dbd-a5f2-e05ca96160b6 2019-02-25 14:10:59.017+08 2019-02-25 14:10:59.017+08 2a6ffd97-9937-4a41-b19d-9e8a1932c22a 4babe510-4919-4c08-9d00-c2fbbb5743c1
+d8d04c4e-de31-4b10-9a88-d04a9eae55ce 2019-02-25 15:39:43.215+08 2019-02-25 15:39:43.215+08 c7bcd7ca-9e17-41e1-b3e4-39641d53a443 434907cf-7398-4d18-bdb8-7649660e6511
+ee385610-54f6-476b-834f-5c7b64052086 2019-02-25 15:41:59.764+08 2019-02-25 15:41:59.764+08 45284d89-2621-47e3-b5ee-e03229611e89 5d39348c-b190-404c-bcdb-c1ac2b3b1a42
+b6be86d3-c98e-47ea-8c9f-6c48d35cba92 2019-02-25 17:37:04.271+08 2019-02-25 17:37:04.271+08 ba31efb5-9309-493e-a3b6-e161c92e9dfa 2e756ed4-27ad-4581-b18c-50e26ecfaa35
+8c35b607-06ac-46ad-a9dd-b3cd38d9a3ad 2019-03-15 16:44:01.373+08 2019-03-15 16:44:01.373+08 46d29a93-ef1e-4724-a19b-8693518dfc89 16702ac4-e42c-428b-ac0f-2deddffbf2b5
+b7c41eac-2dca-4158-848b-61efa0c7ea01 2019-05-31 16:22:15.485+08 2019-05-31 16:22:15.485+08 cc7ab8cd-332e-48d6-9a20-2d44055c2e61 579d559b-7c0e-46ef-9c84-77bc1da70da9
+d0232422-d415-420f-aa56-7f9f86293dde 2019-06-05 10:58:32.308+08 2019-06-05 10:58:32.308+08 db0bf17e-625b-4003-8b57-b2db0d5e3ecc 73e7150f-daff-4342-a1db-41e7eaa4a812
+e7e49ff8-9d69-40a6-96c2-532b6f05f3c1 2019-06-05 10:58:32.312+08 2019-06-05 10:58:32.312+08 db0bf17e-625b-4003-8b57-b2db0d5e3ecc 9bf83d9e-9729-4c07-953c-1f5e58760c26
+541a00d2-40fd-4df1-b8e8-689c2cff79ce 2019-06-11 16:14:17.095+08 2019-06-11 16:14:17.095+08 ed5a91cc-f6b6-4990-9c8b-bd430a7c12ef 8e07b05a-7ca0-4958-bd13-4e85847f4b81
+b321e029-e028-4d61-b5fd-8a9fe0a1bbdb 2019-06-11 17:32:28.582+08 2019-06-11 17:32:28.582+08 59d59ccb-fb26-4ac7-96f5-2b0694fc6d2e 1f2484a1-2aec-45e0-82a9-21c642800c35
+8d3a2d37-e434-4550-8ca7-87a48f47a7da 2019-06-19 17:34:39.417+08 2019-06-19 17:34:39.417+08 7b0f6923-300e-462b-8705-223febdd9b1d add2ae46-f882-4fef-8a49-3bceea7fed6c
+0f4bd1f4-9c12-4a13-a7fe-3f133650c8bd 2020-12-11 10:22:24.731+08 2020-12-11 10:22:24.731+08 5bf561bf-7398-4a8f-aaaf-4f7b695d0020 4a234362-4626-4b36-81d4-0caa1f7c3a2c
+dc5e059e-e5aa-4ace-ae17-a9df5a3101ff 2019-06-27 09:35:21.038+08 2019-06-27 09:35:21.038+08 f5661460-2f34-481a-b54b-31c212613ecf a0a487d5-b5b6-4602-91fc-41239e82d20b
+fa3891ac-b066-4cbe-99f0-542b80bb9c2d 2019-06-27 13:53:14.474+08 2019-06-27 13:53:14.474+08 3268ff97-6ce3-4be6-a8b1-4ceeb3f8e9b1 617a40b1-cf86-47a8-81a1-0276ddbc2d17
+fb228dba-ec96-4057-8c54-a4448a06dfe7 2019-06-27 14:04:53.638+08 2019-06-27 14:04:53.638+08 b35434b2-55c1-4aab-a689-4919d9c56da0 c416461c-d178-40d0-8285-9b9c160d0065
+d62eccf7-a0b1-486f-abe4-34736c54bf39 2020-12-16 17:27:08.967+08 2020-12-16 17:27:08.967+08 a75b6e21-4348-4fb7-802c-ee2ecc56f7ea 00648dca-b439-4247-b1cc-ad416b169db5
+1ec4fde0-bf32-41ce-925f-588695c3b1ca 2018-05-28 17:36:20.383+08 2018-05-28 17:36:20.383+08 fb8fd0c1-b11f-43cd-9710-c507dec06062 c1633898-dfbd-45a4-a28a-1cfaabcf74e5
+8a24594a-9e7f-4d28-b957-4d8ca3bdf469 2018-05-29 11:41:59.948+08 2018-05-29 11:41:59.948+08 d3ba7fce-1ab9-4423-8888-27fbc8244e5c 65b9c79b-8e8a-4dc5-897f-bd7bf3960cfc
+1a5da3e3-ddfd-4561-94fb-e7720c5f88c5 2018-05-29 14:51:49.411+08 2018-05-29 14:51:49.411+08 9517f5d2-02f2-47c6-b688-35e0efa0f25f 51ea2c79-c5a6-42b8-a2ce-e50601d22364
+35d02297-539d-4c76-aebd-b9183a2bd17d 2018-10-10 11:26:27.681+08 2018-10-10 11:26:27.681+08 7c06e2c2-5e55-4116-a3f9-aae11dc742a8 80c119de-eb55-4e71-b726-4bd7554c9cab
+fc2ce552-c00b-4c2e-a489-85d916ee5500 2018-05-30 20:45:30.286+08 2018-05-30 20:45:30.286+08 d1f3cdb1-95b4-4970-90b8-cdb6c2201063 ee9ea11b-cc74-4556-97a2-6092409e08ae
+44439a83-7202-4230-8ef6-918f7253eb14 2018-05-31 07:52:27.757+08 2018-05-31 07:52:27.757+08 642f187b-6fa0-4dad-9bb4-1ebee9558b41 09dd6500-ec1e-4917-9481-2a0ab7fcd30c
+b5bc4d46-81f3-40b1-bcf8-8e6f2151bbc5 2019-12-26 11:48:37.286+08 2019-12-26 11:48:37.286+08 97761a49-de35-42f5-a664-d3dd6cc82d59 accde3c5-22d1-4547-8075-3f5316563e05
+124d700b-e279-471a-bb08-d5f2da06817f 2018-05-31 14:38:48.452+08 2018-05-31 14:38:48.452+08 93a73320-1cb3-4b2f-a8be-f31d131ba881 fa05e5c1-ce60-4618-8a06-493a8a6a3c86
+5c9b6d98-df69-4fae-8eb0-fe002163ae27 2018-06-01 10:38:47.307+08 2018-06-01 10:38:47.307+08 ff3a290c-3a62-49a8-8db9-f4083f855397 d2d06ac7-74e5-445e-a927-dd699b74e323
+28398864-afe0-45f3-9a52-6ef93c9ee86b 2018-06-01 16:26:56.753+08 2018-06-01 16:26:56.753+08 1dcd37b0-1db2-401d-80d1-bef6c0f180d3 e2016e01-e19d-4477-8714-4fa61c267d4e
+949aafd5-244f-4edb-878a-daf0dbca458d 2018-06-01 16:29:15.015+08 2018-06-01 16:29:15.015+08 164546bd-01df-4cb9-a0f0-27590351aa74 6dcdb2e5-0e72-493d-9280-9cf6973b94f6
+3a48af8a-cee3-479f-8b2d-99c3605f14a1 2018-06-04 18:00:22.41+08 2018-06-04 18:00:22.41+08 b94c6303-8f36-416c-9210-9a8bbeb2d8e9 10f11161-b15f-4c43-ac76-c4e7f3409ecf
+0e2f1751-beb9-46ba-bbad-2fd8d0b67525 2018-06-05 14:51:24.834+08 2018-06-05 14:51:24.834+08 9b35c521-0784-4d09-987b-7bcb189bb1c9 22ff2aa0-57f7-4213-8174-bae34ce95af4
+b4c7c906-a143-46f0-98ac-81f5087613ee 2018-06-05 14:52:57.276+08 2018-06-05 14:52:57.276+08 e2359d98-6bbd-4d7e-b370-d8c81c765dc0 e350552a-0a4f-42f5-846a-57031931982b
+57e2f113-4af6-4604-a563-400452c67922 2018-06-06 18:05:17.107+08 2018-06-06 18:05:17.107+08 8f4cc815-04e2-482c-afbc-e565f35e0f76 3cc3b230-37eb-4ac1-83aa-c5b7427a1d28
+94f394e7-ba79-4c3e-8ebc-4062518f32cb 2018-06-07 15:37:44.407+08 2018-06-07 15:37:44.407+08 5de3dae0-fa13-4844-9c58-c960926aa470 0fa018d2-0369-40aa-8c3e-932340593506
+86ce021a-b99d-433b-acd9-d44a6f272980 2018-06-07 15:49:36.343+08 2018-06-07 15:49:36.343+08 f259b7e6-928b-4ef0-8752-bfdf1a834dc4 38dea75a-8548-4b80-94a9-90496afdfe57
+1f2d9615-6253-433d-9e7a-5fe6a7bfff55 2018-06-07 15:54:22.285+08 2018-06-07 15:54:22.285+08 1e068f94-2089-43a7-89d1-f2c5be29ab86 6e54ae36-3233-48fa-bcd3-c9253cdb0966
+ef1bbb1f-571e-4aa4-acbc-d263590a7bb6 2018-06-07 15:54:34.233+08 2018-06-07 15:54:34.233+08 dc3fee9e-0633-4af5-9ef7-39f838c935e9 fafd2a42-8f24-4ce7-9b46-c5942b2540b2
+615f2e26-f14b-4761-8261-1d70102c0824 2018-06-11 14:59:44.603+08 2018-06-11 14:59:44.603+08 cd9e5fa9-97a7-4494-ac8f-69c526262d6d 55442875-ceff-489d-9392-180aaa5afbb4
+0ff8d221-394f-41a3-b0f2-d1ae9ae441ed 2018-06-13 16:58:47.566+08 2018-06-13 16:58:47.566+08 66df2f89-5584-46b3-ad9e-0d1932fcf096 eb54bfe2-32cb-4251-a44d-6c5d6b2aefdf
+fbc84b7a-60bb-44b6-8b70-92438fc4b8ce 2018-06-14 10:34:18.658+08 2018-06-14 10:34:18.658+08 6be3220f-3cb0-4081-8ef4-a7c51cecda48 6c6a8485-fbd1-4808-b826-93f84b441e66
+cc0d72ea-3e81-4b39-b507-bfde447e9ddf 2018-06-15 09:39:55.612+08 2018-06-15 09:39:55.612+08 a63c5547-2825-4f53-93cd-b8cc73368876 129a1f20-b51f-4419-9084-917b09d4d3c6
+149e0d0a-9092-4836-a3b3-fcfc84c45780 2018-06-15 09:49:12.945+08 2018-06-15 09:49:12.945+08 b6166ded-aed1-4e30-a2e8-504e9e98b79e e0b7b313-76bc-4f6b-8094-1cbe8f086ff9
+bda30fbc-efe9-48cd-bdc7-f0bd72540950 2018-06-15 17:09:27.744+08 2018-06-15 17:09:27.744+08 50c50ca6-2fa4-4c78-903e-78fccdee6100 5809d1c2-97e1-4f57-917f-479a0d09aa3e
+63ca3362-ffed-4a00-a31d-99bf9d6a693c 2018-06-15 17:10:43.247+08 2018-06-15 17:10:43.247+08 3c05da19-bd51-48e3-be16-a1b32bbadf5b 2c66b5f5-27ea-4406-85c1-b5772e200df5
+30856eb2-ef46-4010-842e-50563dc062c8 2018-06-19 09:47:25.824+08 2018-06-19 09:47:25.824+08 f05bdb3d-41b6-46f7-98f6-a1f132c38cf1 da3d498e-2955-4d5a-a208-c3d2d91cff67
+b55ed6ea-07fc-440b-be3b-86c6ad93f784 2018-06-19 09:48:17.029+08 2018-06-19 09:48:17.029+08 6f11ad74-c92f-4122-8e48-31a6684e862f 4d2419e0-8da8-4f11-b5f0-90ea093a9c81
+abbae30f-2cee-4c01-b2a7-ee0074063424 2018-06-19 09:50:26.184+08 2018-06-19 09:50:26.184+08 d41d604d-7dba-4a66-902c-8b1257cde117 83e19aff-382e-4792-8cb0-acdb2a3a817a
+2a06efbb-b2f6-4b64-a9c8-8a5af0b75d8e 2018-06-20 10:32:24.758+08 2018-06-20 10:32:24.758+08 7ce72daf-c0a1-4752-9e13-53fb00d348da 78e404b9-c5d6-4030-b6b9-487b8bfb35e8
+745f1091-046b-49dc-822e-8dea884b2aff 2018-06-20 10:35:52.523+08 2018-06-20 10:35:52.523+08 d8aa757b-681c-4522-a76f-b2484a854563 95efa533-8d6d-45c4-92fb-695d5cc9861f
+c252ff85-89a3-4a94-b81d-44340a44e477 2018-06-20 10:35:53.293+08 2018-06-20 10:35:53.293+08 e3ec18ee-3f12-43f2-ba02-ac370abbc877 9811d477-4cca-4ecd-842a-cb4836b135b9
+470cfdc3-b285-405d-8805-493cac045f27 2018-06-20 10:35:54.644+08 2018-06-20 10:35:54.644+08 e98557d0-139a-4938-acfb-9870abe496bc 5c8492ac-2d38-4c54-9d6e-b48b46542248
+087b4b9c-c37e-4667-aceb-0605dd2f51db 2018-06-20 11:04:00.683+08 2018-06-20 11:04:00.683+08 3fe35a29-777b-4a79-a6fd-2e57e60caa11 0e09f170-aae1-4349-9595-f658c99bb411
+4b5ac84f-472e-4861-81e0-4bd235113e05 2018-06-20 11:04:01.41+08 2018-06-20 11:04:01.41+08 91e8b285-92af-4ba8-a401-14561bfe4d82 989a0f1b-313b-4e5d-955f-27aac6f36e8f
+37ff70b5-9d26-434e-b87b-1bb4fb789825 2018-06-20 11:04:02.553+08 2018-06-20 11:04:02.553+08 e607b37a-17fe-4e85-9316-7eed2a219c25 3552b9bd-63d3-4a74-bea0-aadf816dc48f
+7b39fbd3-56f0-4313-8d3c-f2177984cf20 2018-06-20 11:13:47.068+08 2018-06-20 11:13:47.068+08 87fdf1e4-fdd0-44c6-9bc3-bc5651c19030 d124430c-8240-44e0-8828-7d67755c691e
+e6af5eca-4c71-4c74-97e5-4c8a3f37a2bd 2018-06-21 13:39:44.927+08 2018-06-21 13:39:44.927+08 0c4dd41a-453b-440b-a28b-26d7768832d5 6c2951ba-8402-475a-a4cb-6180a8cd0b29
+775e1e13-1870-4af3-90b0-2d2b921d8417 2018-06-21 16:34:49.858+08 2018-06-21 16:34:49.858+08 934f46a0-88fb-47d5-95c9-745cdaf1c07e 054ceec6-745d-4f31-844f-eb436787b2b8
+c706c6c9-d21e-442c-ad4d-7c4c7981cae9 2018-06-22 17:30:28.407+08 2018-06-22 17:30:28.407+08 686bfb15-1d0d-459e-b2e4-4cf146946712 8c16c60d-36f2-4f22-bb99-f9403f0e5f71
+05286c66-1e58-4f84-9fb0-2a136956dcb9 2018-06-25 09:05:33.123+08 2018-06-25 09:05:33.123+08 7f0bdd9e-f9d0-4739-b764-18f3c615ca79 8efcbe1c-3797-4980-b49a-9285bfbfecc7
+068ef707-3b58-4dd5-8cf9-f0a354f8769b 2018-06-25 11:14:38.56+08 2018-06-25 11:14:38.56+08 e05b776c-d411-49c1-9775-9c02bf5dd41f e216deb2-87c1-4ce8-b05d-bb8fc10be4fa
+da44bbf2-55e2-4460-b3fc-a51fb76dfe2e 2018-06-25 11:28:30.855+08 2018-06-25 11:28:30.855+08 8c6c2c54-4620-4096-8773-6a3ee2ffc168 995b760a-4d99-4884-8690-2857fea3bc13
+527b096a-46f5-4980-a343-855d9fe8d39a 2018-06-25 11:31:01.913+08 2018-06-25 11:31:01.913+08 d64be76d-e00e-4984-bd5e-6c6be4ccd7d3 40734640-74c6-40b2-9646-2c1f7a876997
+9bbf06c7-ce25-4281-ad4b-c2a2ddf8e308 2018-06-25 11:31:19.949+08 2018-06-25 11:31:19.949+08 a3a7688c-d8f4-4315-aeb1-e78ecddf9b7d f9ae88f7-8101-48ad-88d2-89005d53f830
+f0261deb-01ef-44f4-8bc0-977040a29703 2018-06-25 15:29:28.097+08 2018-06-25 15:29:28.097+08 16b92db5-4d33-4218-a6d5-7fa7c24194b0 3f0c11f0-a928-4f1d-b9d6-cdfc9ecad7b6
+783b6664-2480-44da-b020-7717bf6c71f4 2018-06-26 10:53:40.187+08 2018-06-26 10:53:40.187+08 400e5759-c7d2-4e45-9d7e-94363490342c ff18de5c-e5f4-4c95-9419-60e369173067
+075f9cf4-9002-41b8-8978-f21021cad337 2018-10-10 11:27:19.869+08 2018-10-10 11:27:19.869+08 42ff7750-3e27-4669-8018-92caf824ecd2 1f7f0dab-85e1-4534-9cbb-7ef2233bb7e1
+046da09c-c86b-4f59-8c7b-53a6dadf243b 2018-06-27 14:02:16.382+08 2018-06-27 14:02:16.382+08 1f491d6b-c57b-44a7-a799-a92a15e7f5e4 b16adb70-fe65-4609-a7fd-923e42da0e38
+031c59c9-a278-4a92-8f18-8d1525bc0dfc 2018-06-27 14:04:58.302+08 2018-06-27 14:04:58.302+08 fa9efaaf-b27b-4f77-90c3-fa0f903666ed f2308778-87af-4b2b-8892-031d77a4fdb2
+5a8a229c-bed1-4572-a59a-2964f2e4c832 2018-11-17 14:04:21.047+08 2018-11-17 14:04:21.047+08 92400a19-a4cc-450a-973b-f0c0aebbade8 df977518-6bfe-4ae3-85f8-7c41d81bad29
+38a2d7bf-51c1-4c13-9837-4cf4a1b397cc 2019-02-25 14:12:02.978+08 2020-04-08 14:31:46.277+08 12671ad8-5da9-4695-abc5-8dc116c5f034 5328d9ca-9004-4ad3-a806-62b8f0b5b82b
+f1015fe5-1366-42b1-a73d-8af91a3be18f 2018-11-24 17:43:29.033+08 2018-11-24 17:43:29.033+08 00da1250-a423-4a89-993d-3cacb4df488c 9585b3c2-bb23-4cd5-8f4e-684ecdb933f2
+b00dd3ad-ad4b-4a35-8c8a-927511e266ea 2018-12-07 17:22:03.992+08 2018-12-07 17:22:03.992+08 4c36ad2e-c8d1-4ed3-a415-bf31d5bb8329 2e606b06-2574-4c66-807b-3c1c74604834
+5d4d387e-659d-463d-9fe1-87cd27729de5 2018-12-13 15:33:20.407+08 2018-12-13 15:33:20.407+08 61f238e3-e9dd-4c9c-a451-114ab6682354 5ac785dd-b1d2-4072-ba26-4177d113aaaf
+4d09fea8-3831-49ec-bd7a-08749f8262b7 2018-12-18 11:24:08.337+08 2018-12-18 11:24:08.337+08 54be724a-6015-4ee4-a08d-fe8b8202cfc5 81dc439b-c906-46bf-83db-a7fa8b7e3aa6
+5d382def-0340-439e-a1d5-9949800e48bb 2018-12-20 15:04:51.316+08 2018-12-20 15:04:51.316+08 ecdcbcbd-7dc4-4195-8207-a0d0d3a50f94 f671f747-5450-4d50-a757-fc74e75fe965
+d79e677e-2e89-439d-ade8-7eba430f990b 2019-01-07 17:23:55.796+08 2019-01-07 17:23:55.796+08 9b5b793a-5bfb-4693-9fd1-1d8a85b6e4a7 7e40c49c-634a-47a1-bfb4-5d363af2cae4
+7b41a758-ed3a-448b-b7bb-43ac3c39c915 2019-01-14 15:28:21.368+08 2019-01-14 15:28:21.368+08 e37bdd04-f3eb-47f4-b174-70d573239a00 a7b23026-3fec-406a-a8a7-66ad91e531bb
+70cfeb0d-a1a1-4ddf-8663-1d71951e7da5 2019-01-18 16:57:11.317+08 2019-01-18 16:57:11.317+08 cf950c05-2642-444a-bda7-45be85b50ddc a09fea95-bdee-4b25-b46d-ae2352c44000
+d4d114b7-d240-4f78-96b9-338adc053f15 2019-01-19 17:19:28.199+08 2019-01-19 17:19:28.199+08 10e4ca9b-2ded-4704-af44-5ed38e7a8254 d1951ebd-96f2-470e-bacb-b01b6fbfc5e6
+d46b5647-aae3-4c37-b144-bca1cf2b1273 2019-02-25 15:43:07.05+08 2020-04-08 15:04:15.878+08 b62a52ce-bcd3-4156-89d7-83ab453c3121 ca7f0328-2a8d-4c73-b9ea-bd1565e548e4
+b974c11e-c77b-4be2-a2e8-d944e3125d05 2019-01-24 11:51:28.176+08 2019-01-24 11:51:28.176+08 3ce74ad5-66e4-40b3-b5c0-52653cbbca87 d407820e-e638-40cc-ba07-3175574f34f7
+9734d8cf-3a32-4bc1-829a-549a7cc6daf2 2019-01-28 10:50:57.674+08 2019-01-28 10:50:57.674+08 6e91a917-6930-48a9-8a2e-69cd0a42dfde a30ffb26-d605-495a-9e8b-00a0c6b534ad
+66fbfbbf-e1cc-4376-b774-6120dd7be435 2019-02-25 15:43:07.029+08 2020-04-08 15:04:25.191+08 fe7497bd-7016-4a8c-abf8-23ec8981746c b00d5e02-4a5f-4617-a233-3c6951697271
+9a6636ce-0c14-4a13-a547-ce1f7905c6c4 2019-02-25 17:37:56.457+08 2020-04-13 11:49:11.15+08 fdd035c2-82b6-4d53-b138-ddb5ff38be70 460c8158-6935-498e-bf3e-3cf869867fdc
+875aeb12-64ed-4b4b-a91a-e4d3b03f06c6 2019-02-22 10:41:23.7+08 2019-02-22 10:41:23.7+08 c90eced6-4535-4b01-88a3-047c445cb5d6 90721552-469c-47cb-a77e-4d3bfffbf6c5
+466c9db6-6d8a-4283-9a49-0b669d954a0e 2019-02-22 16:33:55.431+08 2019-02-22 16:33:55.431+08 f1b9e898-07e9-4182-9cf1-1cb52a4c7b0d b5e97809-0399-4ad9-8b8d-340b9d23a997
+4a9c8a2f-8acc-4d9f-b908-456cd447bd0b 2019-02-25 11:41:29.928+08 2019-02-25 11:41:29.928+08 4b01a62e-4b72-477a-b628-3e60ab9eba3c 33472f2d-14b8-4de5-9b74-435c692ec885
+9f794a2a-0593-48e9-84a6-9c2ca6aac4d0 2019-02-25 11:41:29.961+08 2019-02-25 11:41:29.961+08 b0322703-c5a9-4310-a6b7-0311a4317136 33472f2d-14b8-4de5-9b74-435c692ec885
+05870ece-eee9-4382-b924-f0aa0834579f 2019-02-25 11:41:29.992+08 2019-02-25 11:41:29.992+08 8ea33ec2-98a7-487c-a662-18151711a0b4 33472f2d-14b8-4de5-9b74-435c692ec885
+c58af01f-7f7e-4dd8-b8c2-adb0bfe17bfa 2019-02-25 14:12:03.008+08 2019-02-25 14:12:03.008+08 f076544b-acde-440a-a44f-ff4468e3cdac 87b6ed6d-58cf-4afa-ab03-be2ebce8c7fb
+f5737ef6-e9ef-4cef-8354-17b0f94064b3 2019-02-25 15:43:07.007+08 2019-02-25 15:43:07.007+08 2fc50d79-7cc8-477d-ad02-7c457e527084 e508cf8c-eafe-4269-a3e4-64fc8707d942
+88eddd9c-9888-4d3c-8321-b71c36933836 2019-02-25 17:37:56.431+08 2019-02-25 17:37:56.431+08 6ed5b377-588a-4ba0-bbd8-f528726aa520 26cf03db-09ec-481c-a58e-60b4deebfa0b
+0edc830d-5a7f-4f04-9ba7-a3ecbcac12c2 2019-03-15 17:00:45.464+08 2019-03-15 17:00:45.464+08 dd73a8bf-daac-40fc-82c3-bb5caad67d03 3ddbbbb3-9d0d-4cac-8f44-8b395cd26afa
+e428e62c-7564-48a7-8896-2ddee51ac0b2 2019-02-25 17:37:56.484+08 2020-04-13 11:49:19.166+08 3b999acc-dc02-4c57-ba1b-2bdd8d971f72 3b2a1939-ab5a-4ecd-99f3-6f48b3cf1b1e
+a713a4ac-32e0-4097-89c5-749b98e9431b 2019-03-25 11:32:57.585+08 2019-03-25 11:32:57.585+08 b76eb9ae-1b5a-4bce-91a7-93b68845f356 31c10c64-1f65-4f48-83c9-36df059d2801
+10b50b5e-ba9f-4397-88f1-4e8d451a7ad6 2019-05-31 16:22:45.621+08 2019-05-31 16:22:45.621+08 55d1faba-c22b-4730-a51c-1979541f342b f204c0b8-74ab-42e2-a6fd-57944219dc48
+cc097f82-9659-4149-9a2b-8bc4eb5e22dd 2019-06-05 11:07:53.625+08 2019-06-05 11:07:53.625+08 92799800-ca0a-48ad-a83b-c63c89b7879f 31c55214-5327-487e-8633-a4c329e1a312
+c86064a3-baa7-4fed-9d86-2623f613e990 2019-06-11 16:18:29.007+08 2019-06-11 16:18:29.007+08 5cec0e8b-58df-4473-b3d7-4d524e763830 d6b7c19f-46c8-4909-b997-d9ccec20f591
+7de3b6fd-700c-4a61-aaa7-a612f901d2e2 2019-06-27 09:35:29.151+08 2019-06-27 09:35:29.151+08 936e35a2-2147-461d-8713-c4149317fb19 1541e9b2-2463-4eb4-afab-8f459c685039
+2547b3bd-5183-4ec3-a28c-6c0ae1efd073 2019-06-27 13:53:35.196+08 2019-06-27 13:53:35.196+08 ccf2e82b-5de5-4291-849a-390a0c957088 d0f0f4de-46ac-4e07-8456-f468a54c9924
+cfabbc40-5c38-479b-95aa-522a80c573f7 2019-06-27 14:07:45.245+08 2019-06-27 14:07:45.245+08 02bedcab-6954-4215-aa33-80fd484bda13 a3ab42f1-102e-48f9-a2f4-2909dfc0a17e
+688b9ad5-8d49-48df-87de-13546f0a24fb 2019-06-27 14:28:06.375+08 2019-06-27 14:28:06.375+08 ee3cecd5-4646-4a7d-8ade-1993d81887e4 044e1eb3-8c5a-4dc8-9614-dd62a06cc150
+6213f4e4-0d71-4dbb-a3b4-7209575ad10e 2019-07-04 10:09:53.3+08 2019-07-04 10:09:53.3+08 04f5706d-f963-435b-9341-68c5249dfa02 713325ff-e2f9-46b9-bab4-b34d6b901fa9
+06703d43-365e-4a63-a1c9-d7a9c148c6cf 2019-07-06 16:53:20.952+08 2019-07-06 16:53:20.952+08 76e98b1c-597d-456d-aee5-53d0b95466f0 0821e034-0233-4466-97ad-13ab408fabcf
+8692e32c-a5ba-4ec6-9c7d-00a170987c85 2019-07-06 16:53:20.962+08 2019-07-06 16:53:20.962+08 2b4f0f98-d9ce-4941-8970-dd1bfed3512d 0821e034-0233-4466-97ad-13ab408fabcf
+d99bf106-f7ac-4e69-969d-ed34604d6a27 2019-07-06 18:56:53.642+08 2019-07-06 18:56:53.642+08 2d4b1549-a50d-4ec2-80a2-600f6eb2efa1 5b242533-ee4b-4858-b1fa-3a64373c8be3
+e2a0bbd5-eeee-4697-a74d-10c379ee1f63 2019-07-09 15:01:31.98+08 2019-07-09 15:01:31.98+08 c61698d6-e360-4e40-a141-960ee17d0aa4 f406feb9-ffd0-4a31-9014-b8556f83b6df
+8685a81f-e783-456c-a1a2-a44d22c8c521 2019-07-09 15:10:12.104+08 2019-07-09 15:10:12.104+08 6ed9c2d8-4e87-43ed-b925-94a17a305bbf a5793abe-68ce-4ca1-8f10-4a1361eab80a
+9f24dba3-32da-493d-8fd1-f00e1dd8ce16 2019-07-09 15:28:05.918+08 2019-07-09 15:28:05.918+08 dd2a1a9e-0e3e-4ed3-b133-f9f7ebd0cd91 4373927e-eeba-4ddd-8060-3ce22d76a092
+3a3110dd-1de3-463b-a9d3-62fbd85bd040 2019-07-11 16:57:42.225+08 2019-07-11 16:57:42.225+08 cf9e3897-d9bb-4d08-b13d-18e90e48a3ac 3da6f3aa-036e-4f89-a50b-9fa2081ec912
+062730c5-1d94-42e4-89c4-79ad57a4389f 2019-07-15 13:39:28.99+08 2019-07-15 13:39:28.99+08 e8b16798-e46b-4d0f-a93b-c03757601b0c a806dc77-31eb-4de2-8dee-3003478abefb
+3ac36f01-0555-4785-b90c-1e343b14e6f7 2019-07-15 13:39:37.018+08 2019-07-15 13:39:37.018+08 8792ef3b-6e91-43dc-a17b-61137d8b5734 a806dc77-31eb-4de2-8dee-3003478abefb
+747ee321-c4eb-460d-bed9-81ce8ab5b73b 2019-07-15 14:04:02.938+08 2019-07-15 14:04:02.938+08 1961c932-469f-4e15-8dee-38cf1f837d35 4085b18f-dd96-4757-a9c9-baa3f2b6a431
+4dd6a4d0-9819-4455-8a4b-48756b77af3e 2018-10-11 09:06:27.309+08 2018-10-11 09:06:27.309+08 6c2c69a6-9f3d-4429-b4ad-1515ec6ac5e9 7943dd9a-0f5b-44d8-a527-2aa409ceb961
+dec45f01-17d0-4de8-b79f-b3a6eb4363a1 2018-06-29 10:32:43.663+08 2018-06-29 10:32:43.663+08 cc7aaee4-9939-40cc-b584-234221061c01 3ea1c8da-5416-457d-8303-88e25c7b1c37
+3e5f9c3e-4a16-49d7-9299-2c8e082e81de 2018-10-30 22:17:59.348+08 2018-10-30 22:17:59.348+08 02e056da-0fdc-4477-bdb1-f52f28a1f6bd ba2ba9d0-be95-455b-b670-307aef99bbc5
+3bd27954-7429-4a36-a815-1caaaa5a83d3 2018-11-19 11:02:17.787+08 2018-11-19 11:02:17.787+08 067d099e-3d4d-40f5-8ca7-68383ffd5208 3f011ef9-77bb-401b-8290-643d74f1684a
+85343d04-4d65-43f4-878d-3ef7801e392b 2019-12-26 11:54:20.616+08 2019-12-26 11:54:20.616+08 906764b6-5b7f-4cf0-a4a8-915452e6acc7 accde3c5-22d1-4547-8075-3f5316563e05
+d71f5381-3730-4f45-9c09-b4750487e5fa 2019-02-25 15:44:37.208+08 2020-04-08 15:01:12.251+08 0518af3d-a054-45a0-815a-8ed6c3833d46 96af8bbe-5a34-4604-83e1-99d7e098b3a7
+84b8ddb7-5797-4458-b6f7-d5fff4aec9db 2018-12-07 17:22:04.469+08 2018-12-07 17:22:04.469+08 1065f451-14e7-45e9-8d0e-511f274b97c4 2df285e9-afc2-451a-94b0-6d7435d7005a
+3c1b8ca8-d3cf-4b08-bb98-5c5dc81a7cc7 2018-12-14 15:48:01.109+08 2018-12-14 15:48:01.109+08 4584d50a-bebf-4089-a9a1-adff635a4b75 b0d8fcf8-afdf-4196-88de-97ac045c0f54
+9f86058a-4c2f-415c-a059-e6d67b565dba 2018-12-18 13:51:36.315+08 2018-12-18 13:51:36.315+08 2fd829ec-a887-4746-91ce-1c3ad494805d 44af48ad-3421-4c1f-8bca-d1d7d5e70909
+4aa0fddd-1410-4f07-80a5-4c971dd1b3cd 2018-12-21 15:20:51.752+08 2018-12-21 15:20:51.752+08 7f040f7c-5295-47e8-9ad0-e60c4bbb45b9 d3eaab75-aa06-4cab-95ac-328dbab44be9
+d5755583-845c-4ecc-bc9e-03f24278e1fe 2018-12-24 11:48:02.128+08 2018-12-24 11:48:02.128+08 f50640f2-9144-4d3a-ae14-f042492a899b 85ec3e83-333d-44b7-8261-b91e9606e9d5
+72c98b67-4433-40a3-a020-6f4ddad1067a 2019-01-07 17:45:50.873+08 2019-01-07 17:45:50.873+08 98c8c785-f229-4409-b2a6-a1e57af72b26 0caf32b7-082e-4aa6-bd8a-f6a177eaae26
+fb13da79-a514-46ed-af3a-548e8bdb62d8 2019-01-14 15:31:37.076+08 2019-01-14 15:31:37.076+08 20e441d3-19e4-4f48-bf5a-36448db75de0 6ad120cf-00c3-4c2a-a056-5ea5ab387e2d
+b37b74fc-2693-4fe8-a8cd-5cdce49b1f76 2019-01-19 09:49:48.916+08 2019-01-19 09:49:48.916+08 b2d20518-3d22-4730-9121-735650110838 8bdc1373-d05c-4dec-a5b5-eeaeded2b8a0
+e7ce8a3b-6b72-4a37-b8f6-d346d739831a 2019-02-13 09:47:57.999+08 2019-02-13 09:47:57.999+08 fd42cfd6-747c-4ac6-a35f-ad9e510fddbb 25d28c61-1984-41c9-9543-be1517393c6e
+dcd3bb0f-f93e-42b5-9187-8bdc6345d453 2019-02-21 17:19:51.497+08 2019-02-21 17:19:51.497+08 cce19766-fd89-4a5d-926f-50ede055ec49 90721552-469c-47cb-a77e-4d3bfffbf6c5
+97c0371d-1028-4a9e-894e-a3743b52f318 2019-02-25 15:44:37.164+08 2020-04-08 15:01:19.935+08 aab98040-a906-4f79-a6df-74df5b9849bc 1ff7c3fe-925a-4554-9f06-dee7dfd80357
+28522d6e-51db-4ca9-b2c5-562453a60a50 2019-02-25 11:42:07.397+08 2019-02-25 11:42:07.397+08 d9cbcff2-8304-4233-80db-b582ae78540c 26574d0f-9eca-4448-8d80-2dfb803e770e
+5dd65546-ba20-483e-9516-4b473b008e3c 2019-02-25 11:42:07.427+08 2019-02-25 11:42:07.427+08 9d7f517c-090d-4a86-bde7-3e9b8fbfcf58 26574d0f-9eca-4448-8d80-2dfb803e770e
+d46ad06d-3a20-41d7-baa3-936a60284d44 2019-02-25 11:42:07.453+08 2019-02-25 11:42:07.453+08 2c2cd567-6eef-4304-afc9-cc14b4435240 26574d0f-9eca-4448-8d80-2dfb803e770e
+391b1cff-565d-4fba-8f0a-a6c5569afe75 2019-02-25 14:14:48.91+08 2019-02-25 14:14:48.91+08 db70825c-6666-4931-b32b-5f372af95d42 7c448417-3b77-447c-8f48-85c3554d4e49
+6d78933e-7b54-4803-a0c7-85cfbb5a522b 2019-02-25 15:44:37.132+08 2019-02-25 15:44:37.132+08 6db67d93-daa9-4ef0-840f-c89dfc62abdc b4d4a7fc-ee80-47cb-941c-661474fa55d9
+8fb90ad3-d4d0-471c-a762-c7be6f9b3633 2019-02-25 16:49:51.883+08 2019-02-25 16:49:51.883+08 1b1a6da7-1ad4-4afe-b61d-321cff8c222c 437f278c-a4b7-4b5f-aa56-bd31c07374d3
+e651f42c-193e-421a-bf7e-e1a0c099d971 2019-03-19 16:45:17.831+08 2019-03-19 16:45:17.831+08 c05079d4-2c90-4409-aca1-0693e27d413e 102c5517-619e-4b9f-9e4c-7cbf4437765d
+8d894678-962c-406c-b6a6-361fd724638a 2019-05-31 16:23:06.846+08 2019-05-31 16:23:06.846+08 ff05da01-ca5c-4dbb-afb0-67ec5f513f40 f6b6a799-5ea9-411c-ab15-eed85c3363e7
+fdc16e7d-c6ff-4da7-b83e-002759cd3e79 2019-06-06 17:24:55.453+08 2019-06-06 17:24:55.453+08 28c09a41-f505-4cf5-aa80-131823bd65fb c7a4e95a-ab30-40b7-9706-97af9fd565f8
+8c16f07e-b262-4841-bdbd-97d2cb24124e 2019-06-11 15:06:43.24+08 2019-06-11 15:06:43.24+08 c7963d62-908a-4e24-a229-7de180511e96 8f62138e-2ba9-42e6-960f-0c9996e6bb32
+2fd51fd9-087f-4abf-84ec-e335303b48b5 2019-06-11 15:43:02.192+08 2019-06-11 15:43:02.192+08 57e7e768-2d0a-44a8-93df-21edd1f6564f f0f85539-ea18-4c2e-b967-245a0d7fadca
+204668b3-584a-4e01-b27c-eed0ca0e55f6 2019-06-11 15:43:02.197+08 2019-06-11 15:43:02.197+08 57e7e768-2d0a-44a8-93df-21edd1f6564f b3e99a42-2843-488a-9745-1be8cd4250d9
+3f094300-7ef4-419e-844b-c36ee4a6256b 2019-06-11 16:27:10.97+08 2019-06-11 16:27:10.97+08 370eb26a-f879-4a01-a515-1b20a92c80f6 ad1e9529-19f6-4407-b675-4625883988ef
+ba80f23f-4229-4856-a16d-b17383c197cc 2019-06-11 16:27:10.976+08 2019-06-11 16:27:10.976+08 370eb26a-f879-4a01-a515-1b20a92c80f6 d3b80e8a-111b-400d-8894-0b4ea74fc09b
+e78320d9-e5b4-4076-84ad-afab3556a6b1 2019-06-11 16:41:49.147+08 2019-06-11 16:41:49.147+08 faa5fb8b-d39d-4603-be6b-e70acd114c75 9a007f5b-80af-443f-ad5e-b2b897b8caf9
+4854ceb3-e905-46f3-bc98-8d5ea904e06c 2019-06-11 16:41:49.152+08 2019-06-11 16:41:49.152+08 faa5fb8b-d39d-4603-be6b-e70acd114c75 83ada60d-d85e-488c-930a-b8b5e6a10aa4
+362335b1-37f9-49dc-874b-a40d75d45a07 2019-06-11 16:47:18.534+08 2019-06-11 16:47:18.534+08 b76b8c94-f6d7-43f1-9831-865a733dbeb4 9b003e5b-94a2-403d-bafe-8da8d349c4a0
+61147b3b-a855-4874-96d2-387cda241fb5 2019-06-11 16:47:18.539+08 2019-06-11 16:47:18.539+08 b76b8c94-f6d7-43f1-9831-865a733dbeb4 f84dd7a8-a8a7-457d-9e2f-a80a0f866200
+36235314-a65e-4d52-bd78-2d354b59b96e 2019-06-11 17:11:17.122+08 2019-06-11 17:11:17.122+08 7ca191c0-8240-4dec-95bc-26b13a55bcc6 f5729179-77d7-43ba-b619-fdbffd719155
+1f6ec166-c5f0-40d3-809a-ef56cc9cd309 2019-06-11 17:20:41.973+08 2019-06-11 17:20:41.973+08 c75c257f-cdab-4167-a872-c06243b27f74 50837f7d-3037-44e0-a8c4-99aa7c6c6d24
+b4604971-ac63-4d8f-adc0-6f27c4f638c6 2019-06-11 17:20:41.977+08 2019-06-11 17:20:41.977+08 c75c257f-cdab-4167-a872-c06243b27f74 d755e19b-5182-44e4-8053-3c670552773f
+723efb62-97a5-4754-af31-38d98fc43e57 2019-06-18 11:02:55.452+08 2019-06-18 11:02:55.452+08 fb325f67-e901-440b-a14e-2f8e04c53e9b 7d40d4ad-ac31-4eb1-b9d8-c7fc8844ded5
+ee17d823-37f2-4430-9992-febc31a675b7 2019-06-24 17:08:20.53+08 2019-06-24 17:08:20.53+08 69be9b12-023e-44a5-bcb9-04a192f257b7 5aae81c0-30fe-4213-a681-58a6233419b9
+3e72a2a1-d28e-4f78-800e-d69518681e95 2019-06-25 15:49:19.316+08 2019-06-25 15:49:19.316+08 75fb03c3-cdd0-48bb-8be7-db553357ef1e 8781643d-2409-419a-bef2-9fc163b064c4
+bdef857d-9dbc-4b67-b176-f125c7b97dcd 2019-06-27 16:11:46.646+08 2019-06-27 16:11:46.646+08 c164c829-5622-47f6-8164-a992be4b9e2a 84c28951-d376-4903-86d6-3bc2c3418056
+f22d6687-1e99-43a3-a81d-6a4e022788a6 2019-06-27 17:17:15.054+08 2019-06-27 17:17:15.054+08 bf758132-c5a1-4622-a2a7-38359c9cc0c5 8fecc0b1-a948-400f-bcf4-af4cddf275a7
+702fd64f-499d-4b5f-b32e-372a3e6748a5 2019-06-27 17:34:29.083+08 2019-06-27 17:34:29.083+08 fad3ba62-b4d5-4a90-b1ec-8ca32c7ba7ac cefad036-368d-4a98-8734-002ed67fc3a1
+198159d0-bca7-4cb0-b19f-235e24a5b1b0 2019-06-28 13:51:13.412+08 2019-06-28 13:51:13.412+08 9a53f8b2-9b6d-4ebd-bafa-1b3e01b404b6 ae5df136-4e9a-4d47-8da8-203c182bd2ea
+f94df4bd-062f-49b4-927b-50b0faf65ea6 2019-06-28 14:47:16.412+08 2019-06-28 14:47:16.412+08 f52408eb-cc49-4576-ba3d-726ab9d6d9f5 43b0b89f-672b-4eba-b75c-7b79070559a3
+7830daf4-3d55-47e0-8bc5-6783e32b1e94 2019-07-02 15:41:32.31+08 2019-07-02 15:41:32.31+08 35ec137a-ea04-4c81-bbaf-23ddae650c0e a0c5947b-4714-4987-84d5-da7399f0e29d
+058fdab1-f858-495c-ad1c-f76d046449b1 2019-07-03 11:33:56.791+08 2019-07-03 11:33:56.791+08 418a4cf1-2537-4f0c-ad3d-d7752a5957a8 798f8501-1446-455c-82cb-c27ad5f882ff
+57b09677-e609-4aae-96fd-90aa6cac51ec 2018-06-27 16:44:09.54+08 2018-06-27 16:44:09.54+08 b4e49abe-4948-4f36-978f-8804c1531ca1 cfba0786-e932-437a-8f2a-c15bde9b3e1d
+4c978244-1651-49b2-ab1c-47eb313f305d 2018-06-28 16:24:22.565+08 2018-06-28 16:24:22.565+08 419116d4-4614-4d66-bc30-ce2394eed251 6924cdf6-5d7c-4a36-a9b0-cdb858d60861
+9bcc7a85-0ce2-4227-8d04-e99251b1aece 2018-10-31 18:04:59.747+08 2018-10-31 18:04:59.747+08 27a9d353-a3e8-4669-97b5-f467e52007c5 3836aef4-bcdf-4260-948b-77c48608f2d5
+769cffb6-4816-499c-bf6a-bab67030c4e7 2018-11-19 16:52:15.454+08 2018-11-19 16:52:15.454+08 bebf7077-da40-449d-99fc-9340c39d6231 7a9d917f-ec9a-4777-aa07-456ef2d00ae3
+d20d25d2-b750-44d8-9d1c-71d088c9c064 2019-12-26 13:50:05.516+08 2019-12-26 13:50:05.516+08 563028c4-ce25-46d9-8dc5-f32204df7ff4 d76ad255-098e-43b4-b776-49cae3872d7e
+c2adc805-56f8-4e2e-bb19-a9dde59da965 2018-12-08 15:12:26.605+08 2018-12-08 15:12:26.605+08 d1c4860a-e460-4a8a-928a-0c08b2f1e408 278e2327-057d-40cf-8780-7cd3af707ed1
+56f87147-73c4-4c6d-86d3-68d411c26792 2018-12-14 15:49:05.178+08 2018-12-14 15:49:05.178+08 a7e720b6-f0ca-4a8d-aabd-18b8c8825303 2bd76fa8-aefd-4e77-a1cf-e5f65232555e
+0335de47-fc12-48fa-8141-3fa5b5884c00 2018-12-18 16:35:54.047+08 2018-12-18 16:35:54.047+08 f8c7d826-f0aa-4b53-a793-833a2e913699 de0e5741-ccb8-4de2-b764-fba43324662c
+55c0afd8-23a8-47ce-86f5-38a8822bce14 2019-12-26 16:38:25.395+08 2019-12-26 16:38:25.395+08 c91efe30-d394-454c-9fd0-8e95a43e79b2 accde3c5-22d1-4547-8075-3f5316563e05
+4d61eb6a-bfee-4596-91e6-8c8852d66354 2019-01-08 15:12:49.583+08 2019-01-08 15:12:49.583+08 7406dcb2-9b68-42e3-9178-90ac77d39703 5f4173ab-b59f-4fa7-9f55-9e0a66adf6c7
+0d2668ae-9bfc-4d2b-a9b3-41f7e36f3e69 2019-01-14 15:44:06.692+08 2019-01-14 15:44:06.692+08 ae4b47fb-2d87-4fa5-84d9-72e1b5caa334 2fcf52d0-80b8-4b81-9bed-b0a86eb903a8
+6c68e67f-2202-41a6-a88a-5df65a791a6a 2019-01-19 09:53:06.274+08 2019-01-19 09:53:06.274+08 e65346cf-f6d0-41a0-a1d9-e3644ea50971 04deffaf-f121-45f9-bea1-d4723e651eed
+036b1a0a-2829-4dff-a396-f6a05b71f3bf 2019-12-27 15:04:30.641+08 2019-12-27 15:04:30.641+08 6831e820-59fa-40be-a01a-013d4aa717a4 3375723c-28e2-4d43-a5c2-e10974373d01
+63016d3c-b32a-425a-9e40-965b2696d01f 2019-02-22 11:35:12.165+08 2019-02-22 11:35:12.165+08 ec2fd932-2dbe-45f2-a15b-0815ec8ff1b2 b2586eb2-81e4-45d5-8232-b6d874663056
+86728778-277b-4fcd-a0d7-d09f0924c566 2019-02-25 14:16:02.483+08 2020-04-08 14:30:35.808+08 2aa6ca91-f1d3-4716-adb1-f6248d68f0fd d176a150-ed6d-4e82-9ae0-cabede0f9d86
+5c063c59-b4f8-4c2b-bd79-02fbc6eb1a4c 2019-02-25 11:44:07.917+08 2019-02-25 11:44:07.917+08 7845401a-4640-4465-987b-69f630af6b8a cf726343-afa9-490a-8e8d-3b41dc1b77a6
+c8a746cf-5478-441e-9258-4e079654eb56 2019-02-25 11:44:07.945+08 2019-02-25 11:44:07.945+08 67a68865-ee21-4627-b68d-98ed991689ad cf726343-afa9-490a-8e8d-3b41dc1b77a6
+df90c72b-c082-4296-9c0b-54b021b23f30 2019-02-25 11:44:07.97+08 2019-02-25 11:44:07.97+08 720eb976-fd1d-4947-845b-15b344e808f3 cf726343-afa9-490a-8e8d-3b41dc1b77a6
+a96e96a4-ac77-4b25-ab76-495261e513d3 2019-02-25 14:16:02.502+08 2019-02-25 14:16:02.502+08 8c1c7ab8-d39f-4bdd-9a2c-d2d7342fce43 03420b4e-17dc-4a2b-a3be-fec86c8912ce
+6cea7ff7-aaea-4e0f-887a-65d63c149b31 2019-02-25 15:46:09.603+08 2019-02-25 15:46:09.603+08 99d5cbb6-441e-4909-8ab1-f5fd36fb9f42 d410a566-edaa-4fd8-9f08-2b167893d872
+ee3b612f-dd3b-4da9-9f0a-c651f545afaa 2019-02-26 16:29:15.947+08 2019-02-26 16:29:15.947+08 c38c3226-0d4b-4f1e-ada0-0ba10c51d5e1 afdc9171-1256-4338-9615-016dd33a24cb
+17b887b5-2e9c-4843-839b-6c47f68abff0 2019-03-04 09:18:37.122+08 2019-03-04 09:18:37.122+08 42aef21d-9dab-4067-bd61-4f17fa24d286 aef73585-33cc-40f1-8f4d-6d1d09e59434
+8a5da295-cab4-4e0c-a506-36fba603e90a 2019-03-05 13:25:13.307+08 2019-03-05 13:25:13.307+08 d28c3b83-f55a-4a81-8513-36abc92c3b7b 0fd4d11c-fd8a-4e3d-8957-41e4c1690319
+44dc746e-d5d4-4abd-a4f6-9a48ede3bbf6 2019-02-25 15:46:09.669+08 2020-08-17 14:08:54.39+08 fbaf320c-de3d-4cdb-93f1-960973d87747 5f07c93b-7d9d-4756-b1ee-849b6a29cc1a
+f02875f7-b2d2-4458-aa48-241facf67337 2019-03-08 16:51:58.645+08 2019-03-08 16:51:58.645+08 afa1f203-3267-41dd-9442-974317e28ac3 30367b45-ab92-4ddf-ba29-1625b347c30a
+8a216a3c-6a77-45ae-9031-488991593c88 2019-03-12 09:49:51.418+08 2019-03-12 09:49:51.418+08 2e73374e-14c1-47d9-a0ce-f6d05b317930 786724c1-acde-4ce1-99b0-44ffb417add2
+8f4292cf-6b0b-47d0-a900-bc113b9bb9b6 2019-03-14 11:21:14.956+08 2019-03-14 11:21:14.956+08 935629d5-3f9e-4001-8694-cd11f39b6061 8530041f-38d8-47a4-b52f-4fc03a11bd29
+c323b4ac-3a8f-43f4-b852-ffb5a876d694 2019-02-25 15:46:09.64+08 2020-08-17 14:09:27.345+08 f832c684-9c7c-484e-b547-a4b717644f8a be6b7a73-02b2-4e03-8438-1d2851265d3d
+f86e10c7-3e15-495c-a57a-a78ba9f6f7ba 2019-03-22 10:33:16.443+08 2019-03-22 10:33:16.443+08 e80c3c1c-ca28-40d5-ab2e-705980583fb8 2ff60b54-bc1a-4c20-8396-07b7312fe984
+eb032a75-994f-49e3-935a-5923c129d459 2019-03-25 11:18:25.748+08 2019-03-25 11:18:25.748+08 293fd074-905f-4d2a-94d2-a28d4b06397c 80628eea-49ed-4c2f-959d-2deb4b670627
+5a062369-f544-4630-b83b-aff90a734907 2019-03-26 15:58:52.808+08 2019-03-26 15:58:52.808+08 1f518f12-461b-4d6b-93a4-af3c317ae85b 6ff79b88-32b8-4293-b82e-ce1e9c1102df
+5ee867bd-894a-4e57-8b55-79d530893ba4 2019-03-27 09:42:22.623+08 2019-03-27 09:42:22.623+08 9c250481-ece6-48ba-a91e-5d057fdb9d5d ec1af40e-00ed-4917-b74a-8e36bc87adcd
+a31682a7-6eca-4ec3-942a-0b1e70982d1a 2019-03-27 10:17:10.464+08 2019-03-27 10:17:10.464+08 9842fe65-98a7-4396-9ced-fd75761872b7 b5f9869d-556b-4c1e-a022-5e1dc1538144
+d533a9ce-28db-4c57-897d-a62d18eccfc9 2019-03-27 16:22:34.485+08 2019-03-27 16:22:34.485+08 ad7876d0-0ff2-4d4c-b4be-aaeac8dbbba7 9f417292-8eda-4d81-99da-f675b85d8d39
+d2ca3832-7505-40d6-9fb9-66c94d4bcb09 2019-03-28 10:30:24.031+08 2019-03-28 10:30:24.031+08 9df88715-b993-46e1-bace-b79b1f787292 499a2ec5-f993-4fdd-b651-0be24400e324
+687a13d7-7079-44f2-8ae6-100f4e350092 2019-03-28 10:30:24.036+08 2019-03-28 10:30:24.036+08 9df88715-b993-46e1-bace-b79b1f787292 4ab52a1f-1563-45ce-8b15-583cd47faaa5
+60d7ae8b-5614-49a4-a150-1580d97b8323 2019-03-29 16:40:02.74+08 2019-03-29 16:40:02.74+08 e11bffba-cbad-486c-aeea-b773cd243628 919a897f-db8b-44da-b80a-4a74d14f6bbb
+068ebe5d-1b34-4019-80fe-e2ab1c97b38e 2019-03-31 14:16:47.8+08 2019-03-31 14:16:47.8+08 b31b24f1-a018-47bb-9046-c022d26cd6c7 7c90e6f3-06b9-4f03-b54e-bd1fa5f4f85f
+8d19ac38-949d-4be3-bc66-b9e2579f5ecd 2019-04-01 14:38:39.936+08 2019-04-01 14:38:39.936+08 52790293-e9cb-482d-a5a4-a437cfc18b3c a1670826-5255-49b6-b248-67de89c66086
+97b954c4-f97c-4d80-9c04-2f9229ff759f 2019-04-08 14:49:04.689+08 2019-04-08 14:49:04.689+08 9bc088e5-638b-4304-8130-ee18b2580bd8 30367b45-ab92-4ddf-ba29-1625b347c30a
+1469f768-0ee0-46e3-878e-6834ca7565db 2019-04-10 15:48:52.516+08 2019-04-10 15:48:52.516+08 e44e3794-75ca-4e19-b989-396cabdff179 4065ce5a-e702-4f13-83aa-02243875fa79
+6aee11e8-88a3-4b14-97d2-9082a2705df0 2019-04-10 18:28:39.262+08 2019-04-10 18:28:39.262+08 37826374-2db9-4f16-a42d-37ee9f59c3ac 50cf0eba-6f77-456b-b29c-50f90e252f71
+8a9ca6a7-7dbe-49b9-896d-ff3e9cc4613b 2019-04-10 18:28:39.266+08 2019-04-10 18:28:39.266+08 37826374-2db9-4f16-a42d-37ee9f59c3ac 005dea14-47b9-4c44-9e04-4ea66c336968
+e1f900f5-7b84-4615-ac0b-b571d239007e 2019-04-16 09:09:09.745+08 2019-04-16 09:09:09.745+08 73b4f51d-68e2-4fb4-a8a9-162f643d1983 1cd100fe-470d-4bbc-a445-ec257fdaedb5
+2b08c50b-e5e0-4d77-b38f-d22cbb5a1a9e 2019-04-17 15:07:58.44+08 2019-04-17 15:07:58.44+08 d4965875-354b-4294-87f4-c4ba9f9260ab f1e557ba-74ac-46bc-b1b2-5f117af385d3
+29e74436-9c19-412e-bb7e-0b14d0a4390b 2019-04-18 11:02:51.801+08 2019-04-18 11:02:51.801+08 7fa0305f-807a-4541-8615-4ad975b73518 1c2ce94f-c296-45d7-90e9-4ae2cfad5aee
+1dd7b211-0c17-49cc-b408-c82d644b2a59 2019-04-18 13:54:17.292+08 2019-04-18 13:54:17.292+08 1e436fa9-3d57-441a-b498-4dc107684e1a 4467d9de-7f7e-4ba0-85e1-9f1e821fad35
+aeef348d-2a6d-4efd-a43c-8cdb79e94f55 2019-04-18 17:58:14.594+08 2019-04-18 17:58:14.594+08 c437942e-6dd8-468c-81d0-ffed012878bd c63367b4-3f00-479d-acb9-63374d61e0ef
+aeefd120-7b38-4678-a65c-6bf9ce3ae462 2019-02-25 15:46:53.814+08 2020-04-08 15:00:13.704+08 8b2b42d5-d6c3-4b76-ba91-d422163d96b6 26672437-afc7-40c2-9f69-bb2ff009e0da
+4d3809f3-bf25-4afd-ac84-144004287a06 2018-11-01 14:34:05.148+08 2018-11-01 14:34:05.148+08 abcf8bcb-b863-4219-b7df-9f5ac18ccaf1 545579d9-9935-4629-a62a-a6dc09848c44
+5e5837d3-316b-4183-87f2-c9a6e6465ee5 2018-11-19 16:52:58.188+08 2018-11-19 16:52:58.188+08 6b13c027-dfe8-4dd3-ae23-c5266b03d77b 533b75af-c0a0-4e4a-bdba-630ed0c9fa4f
+f960f482-f6af-4251-b245-91afa2b07800 2018-11-26 11:43:09.706+08 2018-11-26 11:43:09.706+08 75e11f44-f4d0-45a8-b1b9-6c80ae95941e ae1ec7b9-1bfa-47d0-b4f9-7f1f90dab416
+790cfadf-3b93-4e63-b8d2-81bbf1a12675 2018-11-28 10:42:00.899+08 2018-11-28 10:42:00.899+08 59ffcd16-077d-4dcd-9e27-9b85b83b6ece a1fd0bc0-392b-4ffa-9460-997e6df4a464
+ea26ba98-9f1a-41cb-bcc2-a342912f33ca 2019-02-25 14:17:43.285+08 2020-08-17 15:07:31.4+08 af8ad166-474f-43bd-83c2-9f6082f78eae 4248df69-024d-448e-ad68-9699e2a2f826
+4a50576b-7bab-4540-8363-61c6a1d1a92a 2018-12-08 17:37:32.884+08 2018-12-08 17:37:32.884+08 0437f985-a7fc-497c-82ce-fda992d3a8d3 3c3d09f2-74ae-4f10-89ed-7936e63c1757
+93275aa1-509b-43a0-808e-b5d191e09e40 2018-12-18 16:35:55.168+08 2018-12-18 16:35:55.168+08 fe292a77-3306-4e04-9708-072c060f3e74 5baa86e2-f207-486e-a510-137b3b367704
+51299adf-0521-4d7c-8eba-917dc092beb5 2018-12-21 17:01:52.156+08 2018-12-21 17:01:52.156+08 12f5bcb9-fd4e-4b1c-bb2f-36ddf7727452 06120084-e5b4-4810-a74f-44f86005fad1
+71566b41-d55a-4a49-a704-186de486c7fd 2019-01-08 16:04:57.719+08 2019-01-08 16:04:57.719+08 e3ba8196-3d34-4b50-9cd5-866ad57dae8e b194ce55-ccc1-4265-8dab-a705947e6817
+25fa2ebe-e2a5-4bdb-af30-3f6c15a84b4a 2019-01-14 15:47:03.746+08 2019-01-14 15:47:03.746+08 b3f37406-863d-441d-80af-d7f79747ca0f f10cf6e2-3599-438c-9f98-8fa73bfecd62
+23faeab5-a6eb-4838-9141-ad24bda0bc28 2019-01-19 09:54:40.597+08 2019-01-19 09:54:40.597+08 c7d0b1b1-3264-4661-b682-0276be62ccdc d8634a38-8284-4196-9a3f-ab3d6d1af934
+3aa93983-49fa-45e9-80d0-b385481de563 2019-02-22 11:35:40.495+08 2019-02-22 11:35:40.495+08 738a6ad2-95f1-403a-94a1-8f641b2ab73f bc1c265d-4934-4a19-9b3b-b3894639c532
+e9664e26-7a2f-4064-8e31-76d49a6b0a36 2019-02-25 11:46:10.824+08 2019-02-25 11:46:10.824+08 a5a87dd5-6735-4b0a-8526-b7185d9bc6f0 66b50554-6427-482d-9a1f-b31cace75305
+063b251d-6783-406d-a7f5-91490a3131e4 2019-02-25 11:46:10.852+08 2019-02-25 11:46:10.852+08 cc7e3edd-3a03-43ec-961e-ddf5db3ec4f0 66b50554-6427-482d-9a1f-b31cace75305
+c811afca-2db9-44f2-9fb3-bef958b5950e 2019-02-25 11:46:10.876+08 2019-02-25 11:46:10.876+08 aea9a199-17e2-4db3-97f7-2f38de50fb90 66b50554-6427-482d-9a1f-b31cace75305
+0c36ba52-d06d-46e2-b166-828566b975c6 2019-02-25 14:17:43.309+08 2019-02-25 14:17:43.309+08 e96dc802-721b-4cf2-acc4-f3fb360feaef 5b1fc7aa-2569-4fb3-b5bb-87e91878e52a
+e05e615c-fcb6-4e74-97b8-04329f102b69 2019-02-25 15:46:53.794+08 2019-02-25 15:46:53.794+08 d87ea357-e29f-4926-8589-a3e8d7f38ca2 d775256b-39e7-4c7b-843b-b040a4a8cb3f
+7a9703a8-fd16-448e-9788-803442fdfe17 2019-02-26 16:39:23.451+08 2019-02-26 16:39:23.451+08 a945f27e-4486-498d-aa7b-2226787e0a8c 8a14a4a6-fd46-4d3a-a9cc-6a27d9c930c0
+0a4a94a9-7366-4ae2-ac8c-b556af29d6a8 2019-03-04 11:20:58.192+08 2019-03-04 11:20:58.192+08 9081728a-4ac0-47d0-bc7d-508451fd55df 0746543a-bb5d-4868-80ca-c4469861f7c5
+486c895a-b1b8-49b1-94f4-8a539f150829 2019-03-05 13:33:36.27+08 2019-03-05 13:33:36.27+08 403c6c8b-f94a-43a2-bbf5-5146ac46c2c0 811fb16f-c188-47a2-9b1e-bad008e375a3
+f60b53c8-3b1a-4850-ab1b-d30c8cc71134 2019-03-06 10:43:47.029+08 2019-03-06 10:43:47.029+08 77be95d2-b89a-48b1-a68d-8af8d86899b4 f0d93d00-26d0-4031-ae2c-d9f951d701da
+dce0ba3c-b6b0-4f86-9da9-8023c248c92e 2019-03-08 17:17:40.602+08 2019-03-08 17:17:40.602+08 1d7d6e9a-1f9e-4d68-9b49-d09ac6a22064 3bfea365-a06c-4aad-95b2-33dce750cdbb
+0e2a792c-f31e-47c8-9479-44910222fffe 2019-03-15 13:54:18.062+08 2019-03-15 13:54:18.062+08 0551369c-3cb4-4613-96cd-f9677b1c6662 fc258178-b85a-4632-b5f6-c6b4290556f6
+b83124db-81a1-48c0-a96c-1f6359653e12 2019-03-19 10:11:54.294+08 2019-03-19 10:11:54.294+08 907b9fd5-a808-4f6e-acfb-f212bf6cf6b3 c7f56265-3127-4b55-b485-95134998bcd4
+34f787f5-fba1-422d-9d8f-119c39ebe152 2019-03-20 15:27:52.948+08 2019-03-20 15:27:52.948+08 65be7317-93f4-4ae2-b211-e72d15a8cdb7 c7582cca-84ee-4bae-8b85-05c423f792b4
+c6fa5959-0fbe-4fef-a0e9-d4f78662bf03 2019-03-22 16:00:56.139+08 2019-03-22 16:00:56.139+08 02db4ff9-b55f-459b-8d70-39b8421b3879 8530041f-38d8-47a4-b52f-4fc03a11bd29
+910375cc-6642-4275-8dfb-41ff741aedc0 2019-03-25 11:24:21.019+08 2019-03-25 11:24:21.019+08 b131fb3f-83d4-4855-9b8c-419201f620ac 05eb00de-228e-42e3-8fba-4540b8a83436
+91e69209-c1c2-4fa7-84e2-ea9f71b884bf 2019-03-27 09:45:06.501+08 2019-03-27 09:45:06.501+08 77edb521-5462-437e-acdb-8ca54f858468 45053113-3040-4e3f-8f51-26ce5428e17f
+73856f8d-910e-42c5-9ac3-124a10e55bbe 2019-03-29 17:37:11.134+08 2019-03-29 17:37:11.134+08 fe876237-b07a-4583-befe-1013275d47de 563aa63f-70d2-47f8-b69b-5a836865f2ad
+c55b7e17-917d-45ed-8905-d08cba86cbbc 2019-03-29 17:37:11.142+08 2019-03-29 17:37:11.142+08 fe876237-b07a-4583-befe-1013275d47de 6b037c2a-3f6b-4ad9-97a9-0cf50758d610
+c3a49dc0-63e5-4deb-84fc-8d465679e7c2 2019-04-01 15:38:01.404+08 2019-04-01 15:38:01.404+08 2054c2dc-9c63-4fc3-ab32-be0da644efea 32465ca8-9d2e-4f6d-91df-aadc7ba1619e
+6935e518-7457-43b3-a409-0aab962d5b28 2019-04-03 16:53:56.87+08 2019-04-03 16:53:56.87+08 5c6b51d6-d002-49af-9496-30fc8976c446 d830e326-46e8-46d1-8ef1-0b40a29c0a14
+7cab9eef-6fea-4e3b-97c5-74db10c65b16 2019-04-08 11:04:20.116+08 2019-04-08 11:04:20.116+08 836707a8-5a16-4674-9609-c13f9f0956ff 1b35e5c9-e4c7-49dc-a957-87cf135a7271
+7c747639-a395-4eb6-b68d-3f240decb8c7 2019-04-10 15:48:53.436+08 2019-04-10 15:48:53.436+08 8103cab6-bf6c-489b-af09-1ba2a278042b 12a4e096-faea-4a88-93ab-27a42d813c80
+0c25ffd2-91d9-4fb8-99ae-084a203a28df 2019-04-16 09:11:48.004+08 2019-04-16 09:11:48.004+08 7cc4cc34-60a4-4ff0-a85e-015a11eadeac 610d6acd-999b-4ad8-a4e2-476a1fb53d20
+055993fb-e608-49af-84d1-547b9f4ea4e4 2019-04-18 11:06:31.809+08 2019-04-18 11:06:31.809+08 d2add1b3-b21c-420b-82a4-e0c55ee3a019 332f021d-a41a-4385-8efa-6e17a2f538ee
+36b69a29-d5d1-49be-ac9d-06b526129b50 2019-04-18 13:55:01.765+08 2019-04-18 13:55:01.765+08 0050e0d2-2d7d-4e7b-8871-1b0196ce7094 aca44562-f9b0-4c7c-8c90-43f8a3b57de8
+74b368b1-37c6-4a9b-b580-91380187f5d2 2019-04-18 13:55:58.615+08 2019-04-18 13:55:58.615+08 fddf24e3-0068-448a-aee2-4b35af2a7e32 ba500390-3f34-454c-a11c-46a503db2d3e
+f94deca2-f038-47d0-a502-d8ec7b932ef9 2019-04-18 18:47:42.234+08 2019-04-18 18:47:42.234+08 a4c5312d-d964-4c7e-9d81-79f265acfc59 ce509d06-76f1-49ac-93d5-477b9705a395
+99c78a81-499e-439c-a57a-fa0c1c358561 2019-04-19 13:41:32.58+08 2019-04-19 13:41:32.58+08 aaec2c04-55f4-4c0a-b5ba-004a8b91593a 782ef934-e5fc-4964-a768-d435efa11399
+c57c4efb-1a83-405a-b740-4a79b6ccd6ce 2019-04-19 13:41:32.588+08 2019-04-19 13:41:32.588+08 aaec2c04-55f4-4c0a-b5ba-004a8b91593a a952ffd5-c302-4fa3-a7b5-475be69c08ed
+5f14d7f3-e601-4c63-8167-7ea6b17c8cec 2019-05-08 19:45:04.201+08 2019-05-08 19:45:04.201+08 1725bd62-6500-4740-a03e-78fd4a2f4a53 67e8079a-e342-4c82-96d0-5519b7d172eb
+b6878ae8-14a0-4a66-ad43-84bc7a0c4f33 2019-05-31 16:23:56.138+08 2019-05-31 16:23:56.138+08 64960998-d3e8-4ce1-857a-36e232a099c0 3499e091-c394-497f-bd44-36b866260f82
+6ee5d959-06a9-49c8-8e58-86e8f66a6774 2019-06-11 15:50:05.429+08 2019-06-11 15:50:05.429+08 35a2c8f0-a9c6-4f91-a9c5-94a0067e3095 4c7d09a5-8842-4f74-bc03-6b720fbbceef
+a71581a4-1226-4d3a-be8a-816b5e636b97 2019-06-11 15:50:05.433+08 2019-06-11 15:50:05.433+08 35a2c8f0-a9c6-4f91-a9c5-94a0067e3095 2a1269b0-1a5e-4abe-a183-bfd4ee301351
+489cd3cc-67ba-4651-a7cb-6441e1785667 2019-06-11 16:37:25.808+08 2019-06-11 16:37:25.808+08 0af3cf99-e69f-4f81-b486-9fcb5de59fd5 fb0a2107-aa2b-450a-b87e-534e8281eec9
+7ccdc88b-57c6-4a14-b84c-0d13a357e590 2019-06-11 16:37:25.814+08 2019-06-11 16:37:25.814+08 0af3cf99-e69f-4f81-b486-9fcb5de59fd5 0c9c30de-3021-42b5-845f-d418fa88b181
+12d3a2e2-04a1-41e8-93cb-695a181ef4f0 2018-06-29 10:31:21.387+08 2018-06-29 10:31:21.387+08 51e73aec-cdcf-4852-98fe-e6b9bae73590 b3e74ddf-2759-46b8-ba37-a944d5a83851
+9e43fdc0-04a4-4bc6-8500-fb48fc62edf2 2018-07-02 10:37:28.276+08 2018-07-02 10:37:28.276+08 e9b6e859-1dc9-499b-8656-99edd12b4157 35aaf533-2deb-46cb-b33e-0409c36b18e4
+6e6b43f1-5bbb-4d68-bcd5-e5b7b6f4e428 2018-10-12 10:19:30.583+08 2018-10-12 10:19:30.583+08 9e452b06-8db9-43cf-9378-0d66ff102697 ecca3930-fdb8-4e18-8da2-448131e548b7
+dc6f106b-55e0-4571-93b4-ef2363cb7fe9 2018-07-03 19:14:02.275+08 2018-07-03 19:14:02.275+08 db66c7ee-46c0-4931-ba0e-67e0a1231256 4e34c724-73e6-4bb6-8dfc-59443e627031
+ef924324-c0d9-4b14-9a8e-fcdcc8bb9181 2019-12-30 13:31:31.132+08 2019-12-30 13:31:31.132+08 954de091-0b47-4d24-b0fe-38e707df4448 e9bff5bc-8f70-41bb-bb95-baeb9e055634
+39f2a990-b686-48c3-8318-61eec439eb0d 2018-07-04 12:31:15.243+08 2018-07-04 12:31:15.243+08 da6a8c8f-0a98-4650-8b12-650a3e4e5914 b78cd8f6-60bd-42ad-8ee9-2fcc5603394d
+5b068875-60fe-4b69-9e19-1ef447d57d18 2018-07-04 12:32:25.276+08 2018-07-04 12:32:25.276+08 27235845-4d19-4dfa-adc8-4f7b84233022 8b671122-6145-4f8e-82f6-5294af6806a1
+f1691a39-21e2-46b6-96e9-c0428bddbbe1 2018-07-04 16:49:20.27+08 2018-07-04 16:49:20.27+08 a3e8fc6e-6dc8-4d65-b479-4b2ee719c712 c64d5f1b-a524-4a66-af36-52c23666d617
+f2867735-592c-4d0e-b1d1-48623bda635a 2018-07-05 14:21:10.318+08 2018-07-05 14:21:10.318+08 ead31896-f035-4ed5-8732-526210a6bfa2 173acc1a-9b79-4918-9ea8-2f9559e65794
+9b5f6f52-2497-4ac1-80cf-58cd694fb417 2018-07-06 17:14:37.677+08 2018-07-06 17:14:37.677+08 58c2aba6-dd26-4663-8976-a0b155297d3e 05f0ac13-f119-4b73-9254-18f6a4ebb3d4
+46d7a300-5499-48e3-b829-5d1bb76043d1 2018-07-09 11:43:50.752+08 2018-07-09 11:43:50.752+08 4563e22f-dc9b-4a86-a3df-5cae88d78dfa 087bb313-bb27-423b-bb51-c5970d80a61d
+9bab7441-9753-408b-b1bb-7995ff8495af 2018-07-09 15:29:50.001+08 2018-07-09 15:29:50.001+08 8b897f24-accb-4630-b1fa-e408e358fd35 3fc485df-6741-431d-a892-9ea00c094999
+8a2d11ca-9921-4756-9da6-744e6d5fd357 2018-07-10 11:55:47.367+08 2018-07-10 11:55:47.367+08 e51184be-7ba9-4184-af5e-374044450523 43afd7e5-c38f-4263-9508-b8e06098c954
+48d2a9ff-05a9-4d80-b928-7cfebcfedb77 2018-07-10 17:19:28.459+08 2018-07-10 17:19:28.459+08 7624deeb-3f22-45ff-8a6c-a588e617c17b d20564a8-5902-4ba7-a199-ee9c3800792a
+a5c5c64b-015e-4734-ba0a-d84d1b5cd801 2018-11-26 11:44:27.334+08 2018-11-26 11:44:27.334+08 2580380e-6175-4c59-829a-f4f2c36d4af2 d24f5460-15a0-4f18-9f2e-9e9b235bf27d
+0c4cfbad-8fe9-43c4-886c-97c2f315cb8d 2018-07-11 10:40:58.173+08 2018-07-11 10:40:58.173+08 72516f72-2faf-4bba-8e87-212b422ea7e7 c09c2619-45df-4f25-a765-58b559af0ea3
+71946b70-9b96-4153-81f0-54eff1a59fe3 2018-07-11 10:41:40.949+08 2018-07-11 10:41:40.949+08 08e932f8-151e-489f-9035-af9518581665 29f1ee6e-8283-419a-bbab-46ea0a54a6b5
+209f9f53-03ad-4c6d-b46d-6cca8e927f3b 2018-07-12 09:40:10.024+08 2018-07-12 09:40:10.024+08 99b24f8b-f852-48ef-954b-cf42248669af 18a4fb1d-a113-4ae3-81d7-405348e26869
+fb60c03f-e7dc-4080-91ab-8b3ce54fa436 2018-07-13 16:15:51.114+08 2018-07-13 16:15:51.114+08 da84feba-aff0-4b51-baee-a20f8e196dfe 00b03660-427a-4ce0-a8ef-abd2cd65ac31
+d75e8c25-72f4-4fc0-a149-e9f0253cedbd 2018-07-18 09:54:22.861+08 2018-07-18 09:54:22.861+08 0183e607-ae45-461a-84be-4b7fb9ef5951 291ecf10-1628-41fb-b42e-c7410d5cb72e
+07e35a2d-3a45-41d9-84fb-938c8d7037d9 2018-07-18 09:56:01.878+08 2018-07-18 09:56:01.878+08 68ac3567-5ac9-48f6-9dc3-121be2e321b0 a516724a-2214-48ba-abbd-287bf60d42ed
+d5d377ce-be15-431f-8da4-c8015e370cf3 2018-07-18 09:58:33.275+08 2018-07-18 09:58:33.275+08 6d7fdfc9-5735-4b35-85f6-238e34c241a0 b2835fca-b4e0-4ba4-9f6b-99f78ab6375c
+29745664-a8be-491e-b31f-13c2f55497c8 2018-07-18 09:59:05.543+08 2018-07-18 09:59:05.543+08 8f5658b2-c72d-4918-8f4c-e23b57d193a6 a615e317-7a24-4c74-9d3a-5ab19299559f
+b82dedd6-26e9-43ce-b376-ed914db7a297 2018-07-19 09:35:55.172+08 2018-07-19 09:35:55.172+08 5a0e1b09-57f7-4bcc-9f02-2ed2ac5f3d7e 9a43f07c-ca17-46c9-89dc-765e4df66475
+f4bb7335-e824-449b-bee5-13a5ca48fd52 2018-07-19 09:35:55.192+08 2018-07-19 09:35:55.192+08 95f120f4-02d5-454d-a848-b2749f786d6a 9a43f07c-ca17-46c9-89dc-765e4df66475
+ae2d4fba-f9d3-4608-9969-295bdfeb04d5 2018-07-19 09:35:56.566+08 2018-07-19 09:35:56.566+08 b0422984-356d-4020-ab24-9dd7cdd4d8fd b39dbca9-dd75-4ef1-901a-759dba6f3de7
+e915288e-ac99-4b2c-880d-0de3ecb2ed1f 2018-07-19 09:35:56.583+08 2018-07-19 09:35:56.583+08 2858f0e6-c2cb-4a9a-9efd-46af31146b5b b39dbca9-dd75-4ef1-901a-759dba6f3de7
+7c2d9312-984d-4ee4-b0f4-1500ba3a6333 2018-07-23 15:18:06.257+08 2018-07-23 15:18:06.257+08 55950607-45e9-4bdd-a586-388468bf4669 166bc1cb-32cb-4163-987b-19b1c9b35f66
+5fd4f1a5-8f34-44aa-86b6-3df9db9718a6 2018-07-23 15:29:31.283+08 2018-07-23 15:29:31.283+08 b41fcafa-5351-45f4-9151-991053b2229e 606698dd-2cbb-4401-8d88-78715c282b84
+6ee820c2-3407-43ff-979c-3fda814068c3 2018-07-23 15:31:50.033+08 2018-07-23 15:31:50.033+08 dd168476-c9b6-4bdf-802c-dd55353c4f42 8a7450fa-c8f0-4edb-a4bc-f7551f4d0971
+defa3079-81e5-44d4-82b4-9f2236eefc59 2018-07-23 15:34:09.537+08 2018-07-23 15:34:09.537+08 dafbdb25-384d-4431-b8b4-13396a4c781b 453c3722-5749-445a-9d0f-12b3f13c5f16
+57c72f83-fd3f-44ed-b15d-4b5bf9c70bb6 2018-07-23 15:38:47.534+08 2018-07-23 15:38:47.534+08 4c99b35d-021c-4e0f-a014-5516ee92a8b2 7956fe10-dfc9-4716-9118-d3f4e8880bb5
+06fe4df1-adba-42ee-8811-8c3eccd4a13e 2018-07-23 15:39:01.576+08 2018-07-23 15:39:01.576+08 f6f2bffb-7103-4421-aade-21c3c696c8dc 892f447b-ed6f-4eaa-8547-93100b1bdcf9
+05cb4c26-4f09-4472-bcd9-fc6860d3b1b1 2018-07-25 09:50:10.784+08 2018-07-25 09:50:10.784+08 0d993c54-d0eb-406e-beb3-422b28dd8bd2 7deeff92-08bd-495a-9d0c-6be8709457ed
+24ca982b-8118-4291-a324-69661fe3aa3b 2018-07-27 11:52:03.888+08 2018-07-27 11:52:03.888+08 56b4000a-2a4d-454a-9134-7499ca4e859b f229b1fc-3f30-4e7a-8909-9d75182c5b3d
+9a9f9d55-1505-44c6-ad00-143a2602311f 2018-07-27 16:11:26.078+08 2018-07-27 16:11:26.078+08 5c056ed2-d4cf-4083-82cc-8d7d0b564f4a e9c82794-1f38-45a6-abee-3f54b3894669
+37ad714f-18ff-49ad-9383-83262df51759 2018-07-27 17:05:47.929+08 2018-07-27 17:05:47.929+08 6efe879d-8d3e-4968-8824-131f8afe5aa8 51ddec14-349a-4066-af32-e3870d29b3b2
+c366b58d-7724-449f-bde0-7bc27e734d6d 2018-07-28 17:30:16.812+08 2018-07-28 17:30:16.812+08 fe52923b-3bb6-4390-be5f-32733342b67b 167a9888-36c3-4f8f-9b23-06f3f7751c23
+1a359225-211a-4491-afca-dcad42ff36c3 2018-07-30 13:55:25.99+08 2018-07-30 13:55:25.99+08 44ac981a-1670-4e29-8c35-d9adb0f84534 7f331791-d57f-4760-8a73-869a52dc89c1
+1caa1d47-f80e-4c24-b04f-75cdbdfcc922 2018-07-31 09:20:37.99+08 2018-07-31 09:20:37.99+08 0ef31610-c649-404b-849c-6a7d5a1d9d73 ead1ab34-9fee-42d7-af72-e553327035b9
+ad1b4e4e-19aa-47aa-bbb2-aeca52133e10 2018-07-31 14:23:39.303+08 2018-07-31 14:23:39.303+08 4bd4c44c-2dca-4de3-9e9e-39b2bebc57a5 45845af8-6001-40d8-9c80-a62cd1c498b2
+72e5ee39-a98c-4262-ba9f-c5430680fab7 2018-07-31 14:54:09.759+08 2018-07-31 14:54:09.759+08 fbeb2848-9908-4883-878a-10608a621168 f56a4f85-44cc-4ea7-970e-858dd9150566
+e1abb654-d320-4198-9a77-e79f381f612b 2018-07-31 15:08:50.433+08 2018-07-31 15:08:50.433+08 b61317eb-c793-4b2f-b680-2d15a061ec91 66642664-b51f-4599-a75a-963d32a18ca7
+b86ba852-24e5-41e2-aa38-586a1086115b 2018-07-31 15:13:27.662+08 2018-07-31 15:13:27.662+08 d702af0d-ac2f-48c9-bef4-31f6a5659b5a 9c2bfc48-4d7b-477f-8a2a-f0fd329da5bf
+55376c22-6010-4d4d-9ca6-35f320cb5bb6 2018-07-31 15:16:09.271+08 2018-07-31 15:16:09.271+08 b69bda25-731f-49db-b199-83207febe2ed 90b3d65e-5aec-420b-948e-4bb6cd546963
+7f22e4e8-2132-44e6-82f7-802b9723dfad 2018-07-31 15:19:17.219+08 2018-07-31 15:19:17.219+08 73e248c9-5515-4482-ac0a-af10af977c95 4b2e8fe7-8d33-4c61-b54a-62caea9e3947
+2bcc829a-9eec-41c6-a8d2-391486bc1cd8 2018-07-31 16:18:49.175+08 2018-07-31 16:18:49.175+08 42c99fb8-8f40-4693-952f-7124b9f38cda 9c330608-e096-4bc0-9c59-0036a16a2296
+b41180fc-ad37-44cf-a388-d91425775700 2018-07-31 16:19:27.207+08 2018-07-31 16:19:27.207+08 f67c6ffc-0414-4209-85ee-74153dcddd7d f62fb242-cddb-4387-ae70-7b27fcd161af
+6a0aec64-747e-4170-b0a6-96b71bbc0aca 2018-07-31 16:20:25.163+08 2018-07-31 16:20:25.163+08 8cc91875-80ee-4c35-abe4-4c64888e18fc 2237acf6-6dd9-4bb2-9dc4-72457562917d
+bd2062e6-4d51-4474-8914-f13af3a4d561 2018-07-31 16:20:52.837+08 2018-07-31 16:20:52.837+08 dd1508e1-c94d-46a9-9a86-08a80d670853 7cf8f57e-36fa-47e1-9c4f-eadd2c5a6f58
+44e33a7f-e017-42a3-b78f-cd6e936d634a 2018-07-31 17:08:23.258+08 2018-07-31 17:08:23.258+08 292bd1e7-c27c-4437-a899-3c61485b89e3 caf61f62-b229-4355-8d3f-dcf42c8a32eb
+b5bf155e-c024-4bb0-8086-90448ebc5c2b 2018-07-31 17:21:58.149+08 2018-07-31 17:21:58.149+08 95686247-9ee5-41d3-9cc8-08fa377da8cc b3e5ceec-9730-4ea1-a4ae-5e8e3082f718
+e622531a-234f-49dc-999b-753626489450 2019-12-30 16:35:39.9+08 2019-12-30 16:35:39.9+08 dcb7d951-15a5-4ee0-8b2b-9a30c1d60e52 507cca20-7447-4e32-b93f-7056f2964bb6
+7e91b491-11b7-4d73-aa67-14c476853caa 2018-10-18 15:18:15.164+08 2018-10-18 15:18:15.164+08 2e746e8b-7af0-488d-9e6a-6839f50952cd cfafdaea-f33d-431b-a4d9-44341366d0e8
+1ea68e7b-87d1-4bc9-ac98-2cef4d63fd0d 2018-11-02 11:40:18.856+08 2018-11-02 11:40:18.856+08 7b5d05d6-c187-4e6f-97aa-9add7a42ebbc 84c1cb7e-d5ff-428d-9382-a27e2284a946
+a6e1de79-f0d4-4463-adfa-f28ab2f503e1 2018-11-20 11:33:10.058+08 2018-11-20 11:33:10.058+08 9d766294-6005-4331-8071-045ac9e9c4fb e3114646-dc4d-48a2-bdf9-24ac4cee2e68
+454e7bb0-2c0e-4871-803c-8de9b0c8bee7 2019-12-31 08:40:13.14+08 2019-12-31 08:40:13.14+08 0650720c-5066-417d-99a8-936fcf6406a4 bfab9b6a-eb12-4dc4-b8c0-6d4de28b44b7
+63c9740c-353c-43b5-a86a-6fc48a15c4cf 2018-12-10 10:00:18.981+08 2018-12-10 10:00:18.981+08 9e3252d0-5674-400f-813b-eaf3f07ee1ff 790def09-4560-4246-b2e1-3ef7b9817c42
+35710e02-d5ec-4f3f-894a-b437d65b3cd7 2018-12-15 11:42:30.111+08 2018-12-15 11:42:30.111+08 5e55d0a9-995a-465c-ac1d-a0253c41bc53 90a7baa6-3124-4a2c-ad12-9415ae86f051
+ff92bad6-3367-4fec-901b-06429f0e30d7 2018-12-18 16:53:40.237+08 2018-12-18 16:53:40.237+08 36c1deeb-653e-4326-98ac-a804fac20490 c58f5dc3-27a5-4282-a3f8-94f9b3d16c6e
+f9a74254-30e3-4e11-afad-70b2221cc5f2 2018-12-21 17:02:44.819+08 2018-12-21 17:02:44.819+08 7ac65a44-f581-4440-81e8-123685b15bbb 225a2a41-62a1-4c65-b64b-a017f4e5ccd5
+1d3b26c8-5433-4446-b281-985084f7e741 2018-12-28 11:02:10.366+08 2018-12-28 11:02:10.366+08 7ab198d0-56df-4a07-9b1a-ea5c16664b5c 63041b9e-d1bc-4876-b127-ae8d3470301d
+787d0f07-ef7d-4974-ab7a-a002f7671659 2019-01-14 15:48:47.016+08 2019-01-14 15:48:47.016+08 d9a190a8-343c-43a4-8ad3-2dc5ee25e283 3ec66b5d-883c-4ae8-a7ae-2977a544c5ab
+755407a8-4c08-45e2-a682-7ffae9a2aaa8 2019-01-19 14:34:12.836+08 2019-01-19 14:34:12.836+08 6e13b5de-10cb-42f1-ac80-b2550d25a5ea 10ac1a73-d796-4fba-a87d-78f1352e2e13
+198ce1df-0bce-4d53-8578-62bb69519559 2019-01-19 14:35:13.521+08 2019-01-19 14:35:13.521+08 d530a5b1-8f7a-49ae-b3c8-2f255589e6bf bc561d59-77ee-4011-8762-39608d6b9c5a
+4658ec0c-36e1-425f-a7f0-80c4789783fb 2019-01-22 15:15:43.197+08 2019-01-22 15:15:43.197+08 e850fe28-ee2e-40bd-a8fd-c02a63f4107d 2c6a3261-9129-46ad-969b-1d0f360dc9a3
+fc9bc34d-6729-44d1-884f-ff3fc86fb0cd 2019-12-31 09:03:23.526+08 2019-12-31 09:03:23.526+08 f454e2b5-77c5-4282-aceb-bf86690270ba a12ba566-e9dd-49c6-b817-9e44e2efd96a
+5d93990d-3651-4f0d-84f1-6140dd2e842a 2019-02-22 13:27:41.908+08 2019-02-22 13:27:41.908+08 e956e4a1-49b3-46e3-b953-47c2c17a5098 1f96c713-b157-490a-87ef-75903faeec82
+2b557018-095f-4b78-8b98-38bc15f5e5be 2019-02-22 13:41:58.533+08 2019-02-22 13:41:58.533+08 64960998-d3e8-4ce1-857a-36e232a099c0 ca73c002-2faf-44ae-b3f6-44d42c0558c0
+a79e9dc3-2991-4c7f-94d8-3e5acfd65cd6 2019-02-25 11:52:45.959+08 2019-02-25 11:52:45.959+08 772b1b1c-b174-40d7-9d03-4e6a6ee4fa2a a4a803d0-a15c-4d5c-9c5f-c93e13505c5f
+7908c7e4-a402-464f-b57a-bedb355192aa 2019-02-25 11:52:45.99+08 2019-02-25 11:52:45.99+08 033a35ac-34f5-4970-871a-394dedbb920e a4a803d0-a15c-4d5c-9c5f-c93e13505c5f
+919c1de1-2e8d-46cb-af5b-e08e7c68c65b 2019-02-25 11:52:46.02+08 2019-02-25 11:52:46.02+08 459695d2-69ab-4d25-8ea2-64c5b1884652 a4a803d0-a15c-4d5c-9c5f-c93e13505c5f
+16ae172f-f687-4edb-8f8b-b1cbb6f28b3d 2019-02-25 14:18:58.153+08 2019-02-25 14:18:58.153+08 7cad6a7a-e258-4ed6-aa59-e6b8095beaae 15eb120d-af1f-4b2a-997d-aebb756c4244
+2de88956-055c-48a5-97b1-4365d3128c79 2019-02-25 15:47:53.745+08 2019-02-25 15:47:53.745+08 87e561ee-2bde-476f-9d3c-193c5be9f692 87a08465-e5ea-4be3-a7a3-4d802b029d0f
+ebff9638-02b7-4072-9b02-17b7944b831a 2019-03-05 13:35:31.074+08 2019-03-05 13:35:31.074+08 bbfe7c35-6457-4e4f-87d0-fec36f73c28b 95bb977a-fef4-4236-b1df-71ec5e232327
+8a4dd9f5-6b21-4623-89a8-804a11960533 2020-04-13 13:29:57.63+08 2020-04-13 13:29:57.63+08 82b95b39-2e60-4eae-9c51-1977fc3b73e9 7b391eac-4a16-4a35-88e7-c158c50a0f68
+97a6eeb4-4517-4e14-a95d-fdc7b3e7a2ea 2019-03-15 14:35:35.884+08 2019-03-15 14:35:35.884+08 d4af9993-5dc1-4f66-bc37-fd3ab9458c18 749bc501-a3f2-4fa2-be05-e916ef8ff484
+84d1917c-4a01-40b8-a7b7-1837c5302084 2019-02-25 14:18:58.131+08 2020-08-17 15:06:56.634+08 f98a9365-9230-47fd-82a1-9ba1f6908c8d ad16f71a-68b6-4014-bf6a-bcee4d3a60d5
+20f97c8d-aac9-48e3-bc43-eb0099909e71 2019-03-20 21:36:52.943+08 2019-03-20 21:36:52.943+08 31506359-c8d3-4562-94bb-8a26912ecbdf ff287390-6653-404a-ae72-c9c39e8ef4bd
+9f096d22-f9de-47c3-9514-e862241ac513 2019-03-27 10:19:53.3+08 2019-03-27 10:19:53.3+08 7d31224f-522e-4f6b-89f0-4802c150f9d7 8a7b5668-623e-4563-a0a1-1ed55b88e481
+3b48511d-193b-4f0a-b175-04e80a46b9d9 2019-04-03 17:33:06.462+08 2019-04-03 17:33:06.462+08 39d7c8a8-3ab0-4d56-95b4-3cb6c06cfd9c 6b91b9ed-0c0e-4566-95ff-1203866a2c57
+019d1bc4-4cff-480a-bbcd-e10b904d6c2b 2019-04-08 13:46:26.685+08 2019-04-08 13:46:26.685+08 edbb1563-c4ba-4090-9180-17cec3ec3ac3 936feab3-0e16-4bf8-8f9e-6c52df7a75af
+b4c4c934-7692-45ab-bd6a-b67aedd2ffbc 2019-04-18 13:56:34.369+08 2019-04-18 13:56:34.369+08 6ea6d122-5da2-41bd-a362-912f212d294b d02c8816-621a-49f2-85c0-3271f96748b5
+b4bf3f54-9f52-4213-8ba4-6c64378b70ce 2019-04-16 09:50:05.919+08 2019-04-19 10:44:10.908+08 cb1ad06a-023a-46da-a674-80b18513c1e4 81c78d91-7706-4922-82bd-38444ca9b046
+3db3f0f4-f9be-4db2-85c6-a265a30e606f 2019-04-19 16:42:52.625+08 2019-04-19 16:42:52.625+08 9ec28096-280e-4a66-b130-37a5ebc05047 f1484a98-4d8f-486e-836a-8dd14ccd1823
+c8e6b7a2-fb37-4f0c-a425-e1e44e94f8e5 2019-04-20 17:24:55.776+08 2019-04-20 17:24:55.776+08 254d4101-7301-4d4a-be79-29d0f7f616e3 25d28c61-1984-41c9-9543-be1517393c6e
+8331929f-5444-47f2-8a51-d2f783f7e13c 2019-04-22 13:13:08.918+08 2019-04-22 13:13:08.918+08 70909da5-46ce-4458-8129-4c34c077b2be 11985a9b-36a7-47e7-9f3e-188816953f32
+43081fcc-4dd0-4f0b-af4a-d681d062f274 2019-04-22 14:08:53.037+08 2019-04-22 14:08:53.037+08 79df1a9f-c843-4cdd-806d-4492fdeac2c2 8aa49ad7-2fe1-41c5-a102-a3c6784019f9
+0e99d44a-7a16-476d-a861-49f2b6132a2f 2019-04-23 14:22:13.672+08 2019-04-23 14:22:13.672+08 2c644dde-9a89-4c57-b9c2-07fae59e460d 0cf029a6-b198-4afc-abcf-a7279db56ba7
+6c81f0c6-9996-4543-b0ad-46c1ca12d4d0 2019-04-23 14:45:48.31+08 2019-04-23 14:45:48.31+08 897daa06-8487-49b5-b276-f688a5c99378 f547f965-5d5f-4aea-811e-8057633bc374
+b8189380-8c70-4c5f-ac43-e8e36606d005 2019-04-23 15:47:59.417+08 2019-04-23 15:47:59.417+08 d73e0c65-a8ab-492b-b6c1-1039f4630424 3e2852ce-43b1-46ff-bb32-dfcf92650dd0
+a257abad-d3fa-4594-b755-38cd416266ef 2019-04-24 09:19:20.826+08 2019-04-24 09:19:20.826+08 dfaa0aee-75a3-4f5f-a09c-c278b9e655ad 54db998e-43ed-46da-9c44-ff738728ed07
+2fb02dd6-e07c-40af-8d7d-be5903bf5551 2019-04-25 15:02:30.582+08 2019-04-25 15:02:30.582+08 0448eb89-a724-4340-a079-912513a55cb8 8e90f68c-0a42-4565-a0a0-734b5b4bd99c
+f4c60de6-141b-4933-aba3-66fafa7c02df 2019-04-26 13:07:35.565+08 2019-04-26 13:07:35.565+08 354393d4-5f59-436d-96a6-e7e3fb28a196 91476c9a-6eb5-46a2-9206-01b186e4e6fa
+ed637f88-36d2-4123-8cc3-ec36d98ac706 2019-04-26 15:57:34.702+08 2019-04-26 15:57:34.702+08 3e5c37a1-c1a6-4bd4-b3d9-e95a3236e873 ed76d0c6-f7a4-46fa-b322-90a6ac76fe30
+68ae3b4b-3710-478c-bccf-5d1f81587b98 2019-04-28 17:36:59.052+08 2019-04-28 17:36:59.052+08 1a9ae7b1-f3ca-46f5-82eb-a774d07949cc cfdc691c-18ca-4ece-a05a-61c433381df8
+4ccd24b7-a939-4b59-a3a0-71b7eadc09f8 2018-07-31 17:08:09.207+08 2018-07-31 17:08:09.207+08 b5a575d9-25af-47ce-8a43-89a35317f2a1 0511247f-0b74-49af-9ec1-81899d8c1024
+edf0d7f9-cb29-4c36-ad44-0d508882d211 2018-07-31 17:13:47.371+08 2018-07-31 17:14:10.896+08 5066bc97-d314-4800-891f-b7b4031c1ffc 762e55a6-c0c8-4444-8a74-24102e58cccd
+afded347-6ab2-44fd-9a98-d1761efa0e43 2019-12-31 08:43:30.024+08 2019-12-31 08:43:30.024+08 e0fd6ac0-4c4d-4683-9227-d614184aefe2 303fa19d-d73c-4e58-b8bc-9b74464f1dbd
+4f9d8241-ac77-4e69-84ef-bfd07ead1e37 2019-02-25 14:20:41.416+08 2020-05-09 09:28:21.128+08 b16d284f-8c22-4ef0-b6d1-1f0b10ead5fb 2b780bf5-2292-4dbe-ad9e-dcf41181f5d9
+a0bf932b-3d79-4ab7-9291-1fb94cc47dcb 2018-11-20 14:59:57.3+08 2018-11-20 14:59:57.3+08 99a6468c-6183-4253-bc6f-0e66fea8e3ce 3b79c6c2-39da-4c8e-9b85-df2a31cf822f
+8249bf93-14b7-4a7a-81af-a35692d59991 2019-02-25 15:51:46.932+08 2020-08-17 15:05:27.541+08 7533c2be-930a-4296-bdea-f4093aabfeb1 ecbc8c0a-03af-480d-9141-1943fbb35ab1
+d9de547c-4260-4fd7-ba44-c0754279e3e2 2018-12-06 10:22:33.354+08 2018-12-06 10:22:33.354+08 cf51dafe-466c-4549-b2c3-3eb4dbf5d871 9a265b2b-7300-4ceb-bba1-48150a012b88
+48aa06f1-88d1-4323-93b3-d1f3cbd67bcd 2018-12-10 11:36:18.839+08 2018-12-10 11:36:18.839+08 2818ab68-9d7c-4254-99e5-e1edc265931c f0c7e12e-dbe8-4c3e-9b01-cf184c7eef29
+b630dfba-9e1f-43dd-ad19-caf97b8d5c8c 2018-12-18 16:53:40.812+08 2018-12-18 16:53:40.812+08 3aff704a-a328-45da-b0eb-3fee9080c603 78099f25-c4b6-40ae-b659-7eaf416ca5a9
+400f0273-b0c0-438b-8c1b-7c5ae2b44b36 2018-12-15 16:52:13.996+08 2018-12-21 17:02:56.666+08 e277a4bb-5513-4464-be88-055a50df13b0 04562f37-0ed2-4adc-bebc-4221b5a5e8a4
+c84fb836-fc41-4a2e-b80e-174b944366a0 2018-12-22 09:58:06.301+08 2018-12-22 09:58:06.301+08 2ad69732-f5bc-48ff-9b70-ef6374830804 0139ef61-9f17-416c-ad0f-70f24fe921e8
+28d42e43-fcfc-4ea8-9b2b-5baea9b7d2ce 2018-12-28 11:07:29.3+08 2018-12-28 11:07:29.3+08 70c9304e-caaf-4c6e-aa82-b51207d7aeac 614b3b1e-fe7f-4ad3-a9d1-3a40b2cdc1fc
+b77c04c7-3e81-4315-b46d-7dd14edda704 2018-12-28 11:30:32.423+08 2018-12-28 11:30:32.423+08 0070fd98-008a-4af5-b805-e81d23644df8 1bdc5e70-82a2-4784-85fc-3dfa298e5d35
+411978ba-0504-4ff1-a82c-a6a313cda664 2019-01-14 15:51:12.931+08 2019-01-14 15:51:12.931+08 eed60769-7fe4-4bca-87ea-2de74bb2cd88 77558afc-920c-4316-9a55-b31c4ee1df61
+b2a23f5d-3cf5-407d-9e1d-ee06a4119009 2019-01-19 15:00:28.919+08 2019-01-19 15:00:28.919+08 59eccaba-e3d8-4c03-a603-6bd46db0b0a6 3eccadd7-08d3-44e8-b1b4-e23b646bd03b
+1a308822-a647-4491-8737-afd505463b08 2019-02-25 11:55:32.923+08 2019-02-25 11:55:32.923+08 4af15f4e-a452-4123-8c3f-17182b707f61 f7568e77-c6a6-4c03-8484-16c935134b2b
+4f85e41a-cbb0-4b6e-9321-665c2ebf0ecf 2019-02-25 11:55:32.955+08 2019-02-25 11:55:32.955+08 ad7457c8-1261-489f-a7d1-fba6ab6fd2cb f7568e77-c6a6-4c03-8484-16c935134b2b
+7a43b56d-1d12-4b60-8f6d-07132bdd04a5 2019-02-25 11:55:32.981+08 2019-02-25 11:55:32.981+08 7c8d2cc9-631b-4ba3-81d4-30126181dc94 f7568e77-c6a6-4c03-8484-16c935134b2b
+6e2c8121-d5d9-4f41-ae46-f51e51f0952f 2019-02-25 14:20:41.391+08 2019-02-25 14:20:41.391+08 5b7ef632-3a0a-470c-848a-488e63e67023 e3216636-9763-4b64-a0f3-a5d7f9fb40f0
+84f6ff3d-2907-45d0-9901-5438389469ca 2019-02-25 15:51:46.906+08 2019-02-25 15:51:46.906+08 1c56bfde-5866-450a-9682-65dd34bc3296 c627dfb1-eb49-4687-929a-9e02683846ff
+d72f6e19-ef74-46d4-aecf-da4996b5baf6 2019-03-15 14:36:33.054+08 2019-03-15 14:36:33.054+08 2bf1019d-5976-4ecf-9970-773d334f184d 2905fd0c-f857-4da4-871f-de9a6be87f04
+2ed23356-c71c-4752-9e53-cdf652c40b01 2019-03-19 15:25:07.009+08 2019-03-19 15:25:07.009+08 f331e32f-da35-4df4-80fe-50f681800a26 dd784afa-bc27-44c3-b5b1-3c2fe92b868f
+d50821bd-1da4-4abf-9cd6-063d79cb800e 2019-03-19 15:25:07.08+08 2019-03-19 15:25:07.08+08 856b0c3e-b6db-4332-93b2-88d4bc0e019f dd784afa-bc27-44c3-b5b1-3c2fe92b868f
+fbcbf37a-0d8b-4698-9484-f333f282afbe 2019-03-19 15:25:07.09+08 2019-03-19 15:25:07.09+08 dd63a0aa-71f9-4a32-9b10-0cce05dfc818 dd784afa-bc27-44c3-b5b1-3c2fe92b868f
+16aeb9ab-920c-4f96-949e-b68e6b21ec83 2019-03-27 10:22:14.2+08 2019-03-27 10:22:14.2+08 bad3bab6-cba0-402c-bcde-5fbffacfa1a8 9e907320-86e4-4bf3-b588-927cf6d6b615
+fbbadde3-6c8e-4f20-a057-07ace9536513 2019-04-04 11:32:30.464+08 2019-04-04 11:32:30.464+08 6ae6a109-549d-4832-b00c-b2fdd8a5a165 32435b8b-f100-4ed8-abc1-8fe485c14861
+45582e82-e625-4f44-b975-bad496e24329 2019-04-04 11:32:30.471+08 2019-04-04 11:32:30.471+08 016e4acd-bbed-4409-aa4d-4e410d67f9ec 32435b8b-f100-4ed8-abc1-8fe485c14861
+ab10c479-854b-4c68-a28c-ad3147790b2c 2019-04-16 09:52:28.891+08 2019-04-19 10:43:53.434+08 98161e10-b23b-4448-a389-0bd8a08fec4f 734c9298-f1e1-491d-a8b6-8642e1a0a0dc
+2729b931-6960-4c50-aec8-6500bd8ce0b0 2019-04-20 17:25:47.164+08 2019-04-20 17:25:47.164+08 fc95cca4-2304-48a7-a38e-b8280e1af82d 25d28c61-1984-41c9-9543-be1517393c6e
+dc13a358-08e9-48c1-9284-042b225a177d 2019-04-23 15:05:42.795+08 2019-04-23 15:05:42.795+08 e3c19ece-2c10-438e-8bd1-005169fa2da8 91a56b17-bd72-425a-b6fd-0c58a143058a
+b7e5684f-56fc-421e-ad6c-57e7bc75bdec 2019-04-24 09:21:38.795+08 2019-04-24 09:21:38.795+08 5bc34c90-3031-4ce7-bb12-eac34d220e11 13eecc28-7330-407f-9903-09b4dc78240a
+89f09eba-1b64-45c7-a6b5-a2e616cd90af 2019-04-25 15:04:01.465+08 2019-04-25 15:04:01.465+08 bca45090-3023-4d55-85e0-8c5216171df5 ad654f88-5e0b-41e4-bbaa-82af8fd16f95
+d8e21a5c-9624-4b59-abd5-d4506e125b8c 2019-04-28 11:24:32.862+08 2019-04-28 11:24:32.862+08 ff05da01-ca5c-4dbb-afb0-67ec5f513f40 35e02a89-9c94-4426-aeb2-86d112f36942
+6a4b5a8e-f0e1-4a9e-b7db-0cf6e5de48b8 2019-05-31 16:24:23.22+08 2019-05-31 16:24:23.22+08 b8f7deb8-c684-47d4-b8b0-a1d66615944c 17a5fc51-7701-471a-9ed2-22b64877374a
+7240f08a-75dc-4eb0-a27b-a903685c6c55 2019-06-11 15:55:27.381+08 2019-06-11 15:55:27.381+08 bf5ac821-5299-4099-9be9-c61c8b7d085c b9595344-32b0-4fa3-9516-545d002add5f
+8129ab95-6d57-478c-9d0f-205b7d832f6e 2019-06-11 15:55:27.386+08 2019-06-11 15:55:27.386+08 bf5ac821-5299-4099-9be9-c61c8b7d085c 933f6013-a45d-4373-b637-bdf66de02c3a
+136af7d8-455a-485f-9ead-c3dafd3a9a84 2019-06-11 17:18:00.735+08 2019-06-11 17:18:00.735+08 79193862-5667-4861-96ed-2c239a6535c2 f1622883-4682-42a2-b06f-85d0f35881e9
+f3cc31cb-efe5-4f6f-944e-96c95955f02f 2019-06-11 17:18:00.738+08 2019-06-11 17:18:00.738+08 79193862-5667-4861-96ed-2c239a6535c2 7d00bdfc-22b4-4369-aee0-bffe91fe1e52
+10046373-56d3-440d-b939-5da7b975e26c 2019-07-06 16:55:42.764+08 2019-07-06 16:55:42.764+08 bef735a7-a116-4448-8c98-c27e6f83fab2 5b242533-ee4b-4858-b1fa-3a64373c8be3
+b1e3d79c-caeb-49df-ac62-f005e5bff16c 2019-07-06 19:01:23.531+08 2019-07-06 19:01:23.531+08 3c5cfd97-4900-4001-95e5-6d3b6790bec8 5b242533-ee4b-4858-b1fa-3a64373c8be3
+273c9609-7c99-4fef-bd69-ac28bb15f648 2019-07-09 08:55:06.306+08 2019-07-09 08:55:06.306+08 a690c2d9-43b0-4c5d-b667-5020ef18e4ec cbad1c10-70d1-4f59-b5cb-6896f2134b6e
+4f262ee5-83bc-4068-aa2f-e32baceec59d 2019-07-09 15:05:43.555+08 2019-07-09 15:05:43.555+08 dbfb4fed-6353-4527-b6f7-b9af08f37fe1 77f2a844-f5a5-4fd5-93cc-2213ad29136e
+7e231794-1fd7-49db-833b-56695ba219f7 2019-07-15 13:40:16.53+08 2019-07-15 13:40:16.53+08 eb07419e-1090-4ef1-87af-c365af7a63d1 a806dc77-31eb-4de2-8dee-3003478abefb
+0b190bae-e314-4138-8287-72d343148393 2019-07-15 14:04:02.954+08 2019-07-15 14:04:02.954+08 0279aa9d-29eb-47eb-80ea-8bc7e0fa5541 4085b18f-dd96-4757-a9c9-baa3f2b6a431
+69e6e1b9-e309-4335-a090-a84e7024303a 2019-07-15 14:04:02.971+08 2019-07-15 14:04:02.971+08 f3177595-13d3-468c-8451-4677a7f3a0ef 4085b18f-dd96-4757-a9c9-baa3f2b6a431
+a3fdf771-775c-4fef-91a1-7bf0b71efc78 2019-07-26 11:18:48.47+08 2019-07-26 11:18:48.47+08 55c2a1eb-5dad-4181-86f8-9145d71e8077 55e7472f-14ef-49f5-a5bf-e9883ab12aaa
+e88e6aa6-4601-4c99-9707-f192f0c08e34 2019-07-26 13:54:09.323+08 2019-07-26 13:54:09.323+08 98affd25-d0f7-47f2-abe9-5dc74bdfb02f a5fe8095-bd72-41c5-adeb-cfda5c403460
+7b24d599-55de-46f9-85cc-f9d3fed06243 2019-07-26 16:32:46.707+08 2019-07-26 16:32:46.707+08 37b692f8-71bc-4741-928f-5eba35682efc a5fe8095-bd72-41c5-adeb-cfda5c403460
+90063e51-b6c9-4afa-8e0d-21703b4acc83 2018-07-31 17:21:42.69+08 2018-07-31 17:21:42.69+08 49ca2a7b-0092-4889-a0ee-6146802ec384 3ac73307-9df7-4d10-a3be-af55d9bf116b
+e35dcefb-e4e9-4171-895b-d91e4e76c913 2018-08-01 09:11:25.792+08 2018-08-01 09:11:25.792+08 273814e4-c4be-4198-9dd6-4d1f19cb0033 b1688753-3e48-4e22-a4dd-3acb689792bb
+4a9fa94f-d3b4-4ede-9295-c4cbf59485ce 2018-08-01 09:11:38.447+08 2018-08-01 09:11:38.447+08 55fe806c-652f-4b2c-a677-fa5aea862762 820be4de-7ec1-46b8-a364-0b98e4111d9d
+c5d221b4-a07a-4ec2-8bf2-489c715f28ee 2018-08-01 09:29:11.986+08 2018-08-01 09:29:11.986+08 5d00a146-91e7-49d0-bd5e-930d092c386b 15d6e1c6-40bd-42c1-8038-7a60a99a22ac
+fd37fc35-1046-40f0-ae71-a9804c93b47d 2018-08-01 09:29:21.763+08 2018-08-01 09:29:21.763+08 08b2e830-9291-4846-89e5-483cf8eca55e 72477d9c-fe9f-4047-a008-32bd34c54fd4
+8e9b8b73-2e08-4056-bf1f-8e1d22c68a22 2018-08-01 09:32:50.699+08 2018-08-01 09:32:50.699+08 985c0298-b963-4823-8fdc-38feb70806e1 4c4c16be-53e5-4082-b62a-71cf80609053
+acfa96b3-f069-4880-8630-8fa606e636ea 2018-08-01 09:33:09.743+08 2018-08-01 09:33:09.743+08 0e6129b0-ae01-4822-929e-e8a93b3a63aa e6b914ee-1893-44c7-bb8e-ebf12fce3747
+334e5708-c6b9-436c-80ae-3cdee1d938ec 2018-08-01 16:20:24.315+08 2018-08-01 16:20:24.315+08 0d7a1f75-6a7c-4626-8d33-2227c919115c 99bb5c58-f2bd-437a-bcf3-e1376792d2b5
+101070af-e606-4396-8680-395485afeb5f 2018-08-01 16:25:49.747+08 2018-08-01 16:25:49.747+08 d926943e-d400-4c4c-83c8-2c3a6fd62c1c bab8da8a-0a49-44f2-ade7-d8b741b2e868
+4bfe26fa-d00f-459b-b9c5-13c931522b4e 2019-12-31 08:47:53.132+08 2019-12-31 08:47:53.132+08 d39ca936-5931-458b-ac6a-3afd59f67b53 c614b8c0-2914-4cae-b78c-5101b78834fc
+0b09a3fb-8263-46cf-9656-53986b80a942 2018-08-02 10:31:54.606+08 2018-08-02 10:31:54.606+08 48082fb5-546a-4106-9c2c-674aec2640c1 fe0c5930-84b8-445c-9665-59f2c880f8a4
+f4d66a62-2239-4532-a1b7-27c16b005572 2018-08-02 10:33:18.564+08 2018-08-02 10:33:18.564+08 04709fe5-6ce9-4415-99f2-f349e03992fe 767752a2-9e11-4345-9b42-df1d3a202742
+7c09de83-3340-4b44-9147-0a3b35c7ea40 2018-08-02 10:35:48.104+08 2018-08-02 10:35:48.104+08 82623747-98d9-4dfa-9a9a-08188d0311e9 4e563302-f20e-4001-855b-d9cb1b56ad64
+20a0807f-6d28-4729-a770-be2714e337aa 2018-08-02 10:41:04.628+08 2018-08-02 10:41:04.628+08 87e911f0-3894-42f6-a05a-80c30c7e565e fabc7925-e9e4-408c-90fe-338bff871125
+6d0189e7-2b65-413b-b29c-8fc6782f9de8 2018-08-02 10:45:02.562+08 2018-08-02 10:45:02.562+08 812c58c6-4cd2-48fd-942a-2024f91035bb 549b472a-04f4-4df6-b246-2c324c122e2c
+7ce94b2d-f626-43fa-9e41-1d5be1dfbc90 2018-08-02 10:45:44.053+08 2018-08-02 10:45:44.053+08 ad9f806b-21ed-4a46-b6fb-964f135f3efd 1d497ad7-f56a-4e73-959f-29424bb92a2c
+791d95cd-6cb6-4ad6-94d0-5a35612f86a8 2018-08-10 09:35:53.059+08 2018-08-10 09:35:53.059+08 2528fa6d-da6e-4e88-9316-d13536a1a987 4e6dfa0f-e74c-4559-aedc-7c84e8545a87
+103559c7-9b76-4800-85dc-912ee1edea84 2018-08-01 16:05:37.459+08 2018-08-02 17:34:42.092+08 a59e747f-2b34-4867-bd4b-47994c6dc9b7 d6f3f5ec-f72e-417f-9d32-834f93d9f54e
+87e60fdb-80d8-40a9-bf77-8239dfa82f16 2018-08-10 09:43:03.969+08 2018-08-10 09:43:03.969+08 cde7d76f-5843-4001-88b3-5eb18836fc8f fc18a218-68fb-442b-ab28-cb0c1a7ed52c
+366967f2-1221-4924-9e8f-df8667a58d63 2018-08-03 07:13:57.971+08 2018-08-03 07:13:57.971+08 20a173c1-56c8-4576-8edc-906bdb04f749 2768cdc7-6232-43bc-a8f0-dd8bd3be5b29
+31c5afa1-9c8a-45e2-832a-067f0cfc8d4e 2018-08-03 07:38:12.899+08 2018-08-03 07:38:12.899+08 c3ed842a-d6dd-4db8-976c-2f12501159a0 301a49ab-6faf-4a1b-8080-2bf10037f0ca
+4e9984a4-96a3-4b0b-a2a9-a0c8f7218ba4 2018-08-03 10:29:52.7+08 2018-08-03 10:29:52.7+08 c5d291cd-bb26-4192-9454-e686cb8c1f9a d4fa3b20-5cd6-4baa-a7e2-0df8ddd2dfd8
+b0e8503a-7788-47d1-b5c3-82ec97ad1f32 2018-08-03 10:36:00.52+08 2018-08-03 10:36:00.52+08 380bb834-b2d8-495f-bccf-075375161a49 1e05a174-7435-4ab9-95dc-77a4fae8f42c
+4f901cc3-bd18-4342-b797-c0b97c2507a9 2018-08-03 10:41:17.512+08 2018-08-03 10:41:17.512+08 e17bf88d-d539-4c9d-9504-37c08672d5ba bc13f6ad-4c38-4542-bb2b-acadf895ab86
+e4fc9dc4-d40d-4bf7-9039-a95575a0b685 2018-08-07 16:38:34.256+08 2018-08-07 16:38:34.256+08 a0cd4a87-661c-43de-928c-22c5d63cbeee 5957e111-c3a4-4000-8948-6d1a7d17a7aa
+f215ddaa-1525-4393-9b8d-0066a84a9c03 2018-08-07 16:40:19.922+08 2018-08-07 16:40:19.922+08 29e946c4-e67d-4d58-aba2-a16897f4da42 5581361e-e00e-4621-b14d-ab5ffb4ec262
+b7fb9bcb-b17b-47cd-8b8c-0348c8cfb808 2018-08-09 14:40:15.585+08 2018-08-09 14:40:15.585+08 201d630c-2dfb-4918-8d48-0dc931b2337d f3eb0b34-26c7-4f24-9771-7a55f39cc3c9
+0241b3ea-939c-4b02-b220-90b6e57d86df 2018-08-09 14:40:18.336+08 2018-08-09 14:40:18.336+08 73438936-0d17-4107-85bc-2348926e9746 62796f44-b914-45f5-93a9-731b794d28c8
+8c296519-ef8e-4cbf-a162-72e75041ac2d 2018-08-09 14:55:00.891+08 2018-08-09 14:55:00.891+08 420c05f9-c835-4821-ac21-7cf1575dabb1 b18e471e-bbbd-43c1-b2bc-d83883e0967e
+987cbc3b-7250-4d0e-82d2-959855579707 2018-08-09 15:00:04.582+08 2018-08-09 15:00:04.582+08 0e3776d4-f177-404e-90be-59cb211c9921 9261925a-95b4-4602-9111-b6178b6ab599
+9d6514ee-b123-4fcc-8f11-5de06d3f5487 2018-08-09 16:03:35.227+08 2018-08-09 16:03:35.227+08 c52b1fc4-5d46-4f04-8fba-d9a9e6335b39 cac26ff8-0020-4e6c-8bdd-95c3c6cfccdb
+6245de3a-bb02-43c9-b14a-2e54c5d75b30 2018-08-09 16:17:22.32+08 2018-08-09 16:17:22.32+08 fb71513f-dc49-416f-b4d1-3dab69eaf1ac 32cde6c6-f27b-42fc-bd86-6b137168099e
+ff15936f-3448-4f00-9236-4a2263ddd40a 2018-08-09 16:19:28.519+08 2018-08-09 16:19:28.519+08 c0109f4c-f2dd-4a7d-85a5-e1c2ee65cd2c 94e7b97c-4024-4c29-90f1-244939526615
+fec25675-80c4-4492-84e8-dbf2f5c1fa43 2018-08-10 09:21:02.4+08 2018-08-10 09:21:02.4+08 8b8cab39-63aa-4ef8-95d7-a42959be4592 a695613e-cdcb-45bf-bc42-f569c998d922
+9bd0d077-a91f-478f-a0e3-ae6a6d3afd86 2018-08-10 09:23:32.767+08 2018-08-10 09:23:32.767+08 6c0449e2-22ab-4974-9d49-244a1ef1d08b 29459873-dfc4-4a81-acfb-927d10b96504
+d07b2a9f-041f-4f0e-af66-7a0995de7d5e 2018-08-10 09:33:09.104+08 2018-08-10 09:33:09.104+08 f9df0040-a2b5-442e-9fce-4787a7c308c9 0676a9c6-2a67-4f1f-adab-f4938e3a11aa
+fdd157cc-51d9-4549-986c-dde089bf54e9 2018-08-10 09:48:55.497+08 2018-08-10 09:48:55.497+08 0f7dadf8-5ab5-4a5d-b8b7-9d33d10e8d83 9bbc6377-d6cd-44ea-a123-fca513a10203
+ba846982-e9e2-4155-9c1a-0b50b9d636f5 2018-08-10 09:50:00.681+08 2018-08-10 09:50:00.681+08 37ee5f1d-d770-4c7a-b901-3f060b88fe86 91be2158-bafa-4eb4-863b-d32efa4de0bb
+58a68bef-074f-49e9-bf72-befda42b4d6c 2018-08-10 13:58:44.445+08 2018-08-10 13:58:44.445+08 b15c0841-8700-42f6-ad9e-cfcd0c6f5665 18e18a33-9f35-424b-b400-6ede2c984aef
+9feeefb1-8248-49bc-a460-afc9ce23b229 2018-08-10 14:52:45.141+08 2018-08-10 14:52:45.141+08 b0e56599-c58d-4d0a-8a80-f19855b36c80 e4838c48-621f-497f-8fd5-c49c9ca1b4cb
+c8b02274-2d4a-41a1-88aa-420001cf8828 2018-08-10 16:23:43.245+08 2018-08-10 16:23:43.245+08 fee66142-81ed-4cdc-8465-19d0f7acd6ec 50e9b4d1-2dc0-4ffc-bf5d-f1945b0f012b
+48869e56-0a04-46be-9aa2-c48bcc371390 2018-06-20 10:26:34.632+08 2018-08-10 16:46:17.091+08 23c218cd-7c9e-4ad1-bc78-2132a932fc9c 5c3be7dc-ab33-4131-854b-3a252f41281a
+1e33c1d0-4415-46d3-b071-6e7fc2ed79b1 2018-08-10 17:03:21.009+08 2018-08-10 17:03:21.009+08 4d1bca0a-fa5c-4af2-adc9-ded21aff72da f872ce6c-3df6-4a1d-922a-00a70b1c1af2
+f8a11b5b-2798-49a3-bd60-74d0e3b0b756 2018-08-13 10:56:46.619+08 2018-08-13 10:56:46.619+08 249bf211-a7fc-4649-977a-1ba27e2fc683 e3aa6165-6e76-4852-bcca-389784ae48f9
+50585f90-7631-4928-833b-bd554a124a86 2018-08-13 14:58:59.147+08 2018-08-13 14:58:59.147+08 93d4d05c-a5fe-48b1-88ff-1cb39cfdf02d e780352b-7e88-436a-a05c-6cc0b2ad1d51
+dbaaa44f-82cd-4fc7-9bae-b2a2bc498400 2018-08-14 14:13:28.657+08 2018-08-14 14:13:28.657+08 0ad35b65-43ba-4521-bc02-63bd34be0a39 15e7c745-7a6a-4fcc-9856-2964e2fa817b
+81baca5d-2519-4198-8faa-e64e187c57d2 2018-08-14 15:32:39.137+08 2018-08-14 15:32:39.137+08 f9a40c12-42a9-45fa-b780-10df712e19af 3cd692df-6f92-4583-b5d9-c984d06ff486
+a7c78a02-9a06-48b4-92ef-2dc26b52ae16 2018-08-14 16:18:30.093+08 2018-08-14 16:18:30.093+08 251fdf4e-2811-48e8-b21d-3bedb3ffb0a6 d3748bc0-b7f0-4ea1-b32e-8446ddae9b67
+ce0b9f83-ddaa-437d-b88e-d07c77d8cbf1 2018-08-14 16:26:33.745+08 2018-08-14 16:26:33.745+08 c7561cfc-94ff-4fcc-bdeb-63023c74839f 71472f06-593e-411b-adc2-4b3eb520a1a1
+d77d1e72-312f-426a-b3b5-154c083a4510 2018-08-14 16:31:33.445+08 2018-08-14 16:31:33.445+08 b4b6ffd7-09a1-4348-a270-a89f768a51be 686bd36b-e28a-435e-9568-0f256b5086e3
+008b0d2d-06cc-4cce-9d40-b29ac610d43c 2018-11-02 17:21:36.832+08 2018-11-02 17:21:36.832+08 383450e1-ee35-4242-86ef-f2b575b96ba0 59c6964a-3590-4ec3-8c18-9f58d2583cb9
+7eee3025-c77d-49ce-92fa-41fd40b5e48b 2018-11-20 15:19:51.014+08 2018-11-20 15:19:51.014+08 59ea18ad-dfaf-406a-95bc-213eaff64b6b b5c94690-f48a-4b07-92d3-78ff4c72866a
+1d2d65cf-586d-407e-8ee3-30cfa8bd49e9 2018-11-28 15:03:29.312+08 2018-11-28 15:03:29.312+08 37421fe7-d68a-4eb7-a2b4-f8238e4ee63d 8ee3c94e-fc38-4a55-a21d-00efe99c3575
+81e52085-658c-446f-aca5-ae1532f0b94e 2019-12-31 09:06:25.801+08 2019-12-31 09:06:25.801+08 f562d703-5cde-4a00-b1c8-1be54d51da9d e8d38f56-e9e3-422d-a7f3-ea901d8522e5
+9b6be3d7-d0e2-494a-9a1a-d94bf7a17c24 2018-12-18 16:53:41.328+08 2018-12-18 16:53:41.328+08 9b0aed36-6906-439d-8969-4918e4e723f5 d4a10687-30a5-42f2-bfba-bd833a11152b
+89ddee7b-7b0c-4f87-9820-0196c23ed8b8 2018-12-24 11:53:24.89+08 2018-12-24 11:53:24.89+08 fb5b0dad-7bf3-429f-a153-95ff04ef6b58 0560b094-8bc0-4d1e-9495-466f241e7391
+95e102cd-99ba-4811-86d7-ef4f80861148 2018-12-28 11:13:18.184+08 2018-12-28 11:13:18.184+08 14784dc2-a6ea-4008-acd6-bb96f3cedf1e b012ebe8-a730-40aa-87f3-82e77cfb599d
+d6655efb-a48f-48aa-8a22-4aae5ec7286d 2019-01-14 16:35:40.033+08 2019-01-14 16:35:40.033+08 b5064da1-895c-40e3-84db-b6330326f9c8 ad92b98f-514c-42f9-b387-3e963cf9410c
+90c0bff0-8022-4439-9ec7-42b981b02501 2019-01-22 09:31:07.203+08 2019-01-22 09:31:07.203+08 0264aff4-ba22-40ca-9ef9-866e00e00fb8 0767af83-f061-4628-8cce-76a442d4b998
+e57438b5-6e79-47ee-af7c-b9373fee97b5 2019-02-22 13:35:17.65+08 2019-02-22 13:35:17.65+08 b8f7deb8-c684-47d4-b8b0-a1d66615944c b9704e98-04a2-4552-b0aa-d0ca02c0bc51
+f9b1fd74-85ab-43af-ab00-825c2c502bd5 2019-02-25 13:30:27.019+08 2019-02-25 13:30:27.019+08 03afe194-fc01-4993-8f9a-ed4ca0ae6d90 2229186b-2e5b-4d19-8175-44c2bc060c0c
+e5b27cb6-5589-424a-97e7-11a4915f4224 2019-02-25 14:21:57.066+08 2019-02-25 14:21:57.066+08 7169451f-4110-4ba2-8482-b6e4a51eb459 3b4a9a5f-f359-465f-8082-cd95b32b6c73
+fe49db7b-437c-4b3d-9b3f-73f2b31a6cac 2019-02-25 14:25:00.101+08 2019-02-25 14:25:00.101+08 97be25b3-75df-4137-a479-22343213fe74 a6703faa-aa9d-4b91-a785-cfcbd58e52db
+0b9c7814-1f46-424c-bcd6-bdc01437b035 2020-04-13 16:34:42.636+08 2020-04-13 16:34:42.636+08 6cf95499-c1da-478c-918c-bc809d89feb6 986ece2d-6b6e-4c34-a78c-6f144d632f28
+158cd4ad-6fe1-4b77-82f8-0fc24c804826 2019-02-26 16:47:57.181+08 2019-02-26 16:47:57.181+08 cf9f22ff-a972-4050-b4be-93cd43ed5463 cbedc498-a7e7-4d15-a577-c4199e4590fe
+c339565a-23ec-4935-8a09-ee747021efed 2020-04-13 16:42:59.139+08 2020-04-13 16:42:59.139+08 29b24211-38a9-4c77-9218-11d0c3939a5b 3c8bf7ce-3934-4bbc-8d08-640b6937e7aa
+55465931-c7da-476e-8deb-0d6ef1ef8acb 2020-04-13 16:42:59.156+08 2020-04-13 16:42:59.156+08 8aef8520-904e-46b6-9223-952b50c16f52 9148c4e7-ccfc-457f-9523-76fb8eddb5a1
+a9fe9d16-639c-4be2-9fbf-7ab01906a2a0 2019-02-25 13:30:27.039+08 2020-04-14 10:27:14.801+08 0dc2011e-5962-4366-82dd-6a326e0ddbf6 89933af4-5fcc-4055-b42c-4f6ba258dae3
+65f4d222-fa55-4bc0-a16a-a7e0189eaa12 2019-02-25 14:25:00.146+08 2020-08-17 12:42:22.053+08 f2d80142-2f46-42d6-aa9e-c4e687c5690d 21e62032-777f-4643-a1f7-de24c0099e71
+b275d699-5a80-4bb1-983d-3f5f5d8dbe65 2019-02-25 14:25:00.172+08 2020-08-17 12:42:13.62+08 49ff32ed-be50-4c87-ba73-af20b848e154 6af6e7b8-a166-4eb9-b326-b70b47acc94e
+42beabbf-dcab-417a-ac3c-cd3b8c66fa7c 2019-04-28 11:26:12.335+08 2019-04-28 11:26:12.335+08 cc7ab8cd-332e-48d6-9a20-2d44055c2e61 d9fb92f0-acdc-4294-bf1b-bd3449d569ea
+8b1bf7f5-cb7b-42ea-ba1b-da7b289dc921 2019-04-30 09:49:47.7+08 2019-04-30 09:49:47.7+08 a18f5309-f499-412b-9cd7-b2a84c3302fa c1ae7a2c-395e-47ee-a6c7-1789ac8e0720
+48bb8be7-835f-4525-870e-2f7f2cb9b535 2019-05-06 10:14:28.462+08 2019-05-06 10:14:28.462+08 e1da9a91-3e0d-4f6f-8ba2-8169b1d06305 5ad2026e-5c8b-4567-bfb6-858e613b3d42
+5be03b26-95ca-4b3d-a82c-89c571705ca1 2019-05-07 11:19:26.474+08 2019-05-07 11:19:26.474+08 aacdb86a-92cc-47cf-a7e5-b139a96e4fbb b342d887-3839-4ce0-9314-4cdf7c9e7895
+a3902cae-3a1d-4ac5-9ca8-cf5c6ba48b8d 2019-05-09 09:58:07.906+08 2019-05-09 09:58:07.906+08 c05dd524-bff2-460c-b9b3-7fb235b2a7a8 3ced8ff2-50b3-487c-9d04-92a3ba8716c6
+632b72f4-067b-4aa2-b884-dde710647511 2019-05-13 11:18:59.512+08 2019-05-13 11:18:59.512+08 7e35a6df-64f0-483a-8582-859548ba7fc1 758e0b8e-cb3b-47b5-90f1-27debcd07c7a
+7f0264bb-29c2-4971-b3c7-5f62bf060635 2019-05-13 16:27:13.716+08 2019-05-13 16:27:13.716+08 7fa7ac4f-f693-4287-a813-9b123e633207 4699c34f-7862-41fe-bbe3-b86681abd493
+3f24b7c1-5e5c-4f7b-9614-ccf8e3155907 2019-05-14 16:57:37.964+08 2019-05-14 16:57:37.964+08 cf8bfa0f-1e08-48ed-9041-3826fd5f5135 a3f8ee67-dc1d-42dc-b7c8-19418d949d49
+3c7a3a72-c685-4252-9274-09138310a281 2019-05-16 18:02:13.706+08 2019-05-16 18:02:13.706+08 19c9b194-eaca-4785-9698-fcba4f960a2b a3f8ee67-dc1d-42dc-b7c8-19418d949d49
+fd20587e-e837-4f84-82dc-1452e997b917 2019-05-22 10:38:30.974+08 2019-05-22 10:38:30.974+08 99b535b3-ce4d-4950-97cc-45cd24ce64b1 d6faad75-a8a6-4eaf-85ed-30c0d9992e12
+dc5bf8a5-0815-4e41-bfb3-3a8d1c288706 2019-05-22 16:00:03.735+08 2019-05-22 16:00:03.735+08 dfb70ff4-6696-4f3c-b709-dfa5ad977714 e4b2eb17-1aa6-425b-8ed3-b6eb62ee862c
+ce0dca20-6221-404e-a259-23e46caae108 2019-05-22 18:05:37.582+08 2019-05-22 18:05:37.582+08 7ec4a983-93fb-4bd4-9daa-8f916e538b59 e94758b3-a6a6-4116-921c-8b7050cbada3
+d50394d8-7604-40fb-8bad-245710bb9a50 2019-05-23 13:53:19.26+08 2019-05-23 13:53:19.26+08 ffc66398-9927-4dc5-8fce-d0d0c87b5dd5 07ea4428-ccd3-428f-a85b-1c8460c545fa
+9bf5c842-fc80-474e-a50c-b8d2b0fb0260 2019-05-28 15:02:38.793+08 2019-05-28 15:02:38.793+08 8b850929-a890-4c69-898a-0388eec64db8 c6686a13-535d-4320-8b33-c625dbcbe77a
+21523c5f-261d-4995-9c5d-1731e71a1f8f 2019-05-29 14:51:02.766+08 2019-05-29 14:51:02.766+08 aeea3098-6149-4f87-9a9a-474122886ef7 19f133c9-6f68-4f24-87fd-14d6fdf4120d
+8061767a-f27a-428b-aac1-5c06476305c8 2019-05-29 15:57:45.392+08 2019-05-29 15:57:45.392+08 8f2c15d1-cb4f-45fd-b217-ecbf37787ddc 6629488f-b160-48aa-9b7f-842db418fbf6
+440180b6-851a-4a5a-b76f-6377ff7e938d 2019-05-30 10:24:12.583+08 2019-05-30 10:24:12.583+08 b1badcbe-62e0-4c45-85e8-8e3d712d3659 f684ae18-0aac-4dcb-aef8-d641277b7295
+3b40459e-dade-42cb-b8f6-bdbe26cdbc40 2019-05-30 14:29:19.861+08 2019-05-30 14:29:19.861+08 cb84ad58-6983-40a3-96ad-0f001cccaf96 774b9665-0093-406d-82a5-0876622a38b5
+0e895a9b-0702-4653-8538-6e5ea6e5eea3 2019-05-31 10:37:09.081+08 2019-05-31 10:37:09.081+08 0c37d684-9050-4e23-9121-2749044fb378 481e9d5e-986b-4e38-897f-dcbadfddd0b2
+f0124ed6-a013-42d1-9e53-34f2c20ca803 2019-05-31 10:37:09.089+08 2019-05-31 10:37:09.089+08 0c37d684-9050-4e23-9121-2749044fb378 e93fe806-fdc8-4e26-bb4b-9bfb860328e4
+a912a8bc-8a56-43e8-913a-9b520f7e204f 2019-05-31 16:20:37.158+08 2019-05-31 16:20:37.158+08 833ae7ac-9c57-4cd1-a324-4b49acee1dfe 64b42834-88da-4052-9a4b-d54d2ded8159
+69939fc7-4fe5-4f70-8b97-0ffba5860b2a 2019-05-31 16:23:31.62+08 2019-05-31 16:23:31.62+08 b1305d43-23de-4740-a7a2-213facc63133 4deee1cf-e422-45dc-ae21-00b253538032
+745362fe-3607-41af-ae5b-90de52813e3c 2019-05-31 16:24:53.452+08 2019-05-31 16:24:53.452+08 e956e4a1-49b3-46e3-b953-47c2c17a5098 68b64022-0338-4ea5-8724-b23e112b8606
+6a568263-9a93-4d5c-8257-900b242d8083 2019-06-03 10:53:21.895+08 2019-06-03 10:53:21.895+08 8a945623-1db8-433f-8eb9-062caccb5b89 a7fb1de1-1c96-4e0c-ab41-c24a6cc6fd79
+4c1c63d1-ddcd-4695-ab95-40bff177ca43 2019-06-03 10:53:21.902+08 2019-06-03 10:53:21.902+08 8a945623-1db8-433f-8eb9-062caccb5b89 231ec281-245a-42c4-a57c-118fc0c16011
+c161f59f-5b77-4941-85c6-d264d9cc3d2f 2019-06-03 11:50:03.944+08 2019-06-03 11:50:03.944+08 9cc08d17-9866-4da2-844e-be838245d9e3 7cb70a27-5f67-494d-aea7-976fceabd55e
+59b2fcf8-6e67-4968-88c9-04f5a65fd5d0 2018-08-14 16:36:12.22+08 2018-08-14 16:36:12.22+08 98b425ce-50b5-4c14-98e0-c13a615cf246 4b427bc9-84b9-4440-aff2-645c64601260
+425896b8-9571-4e31-bfe6-f9d03bf9d532 2018-08-15 09:48:18.561+08 2018-08-15 09:48:18.561+08 17c83e03-bd23-47ac-ad6f-637082b66444 27b6c83c-8a53-487a-a8f2-cde18a5da18e
+a445aeda-63ca-45bf-a81f-95215b25cdd8 2018-08-15 10:53:47.753+08 2018-08-15 10:53:47.753+08 8a367437-ef39-437a-9e88-1dc4c6c42d14 c04eaad9-2d31-4bb1-bf18-63f3caa29a71
+bc5e721d-af43-43c2-ab83-5362d3ad68e4 2018-11-03 15:41:07.73+08 2018-11-03 15:41:07.73+08 677a3cf9-1821-4ddf-98af-6bfef51be1d0 91f6f550-8306-4e10-8099-9b323d57edb1
+77fd5ea5-b894-47cb-8a44-d70f08f7dca7 2018-08-15 14:38:59.65+08 2018-08-15 14:38:59.65+08 3dbaa950-0bf5-4e4c-966f-8bff21df1e2f 28d0290a-7423-4c1d-8164-7b8762604543
+1969d4da-aa5c-4d4d-8f3c-d5df438615bd 2018-08-15 14:39:57.331+08 2018-08-15 14:39:57.331+08 a46e04df-5fc2-442e-8ca0-fc7da830f183 41073dc9-3180-4266-ae64-ef1d14e174f2
+2decf56e-badc-4ed7-a200-fa334abc47bf 2018-08-15 14:40:39.287+08 2018-08-15 14:40:39.287+08 39fc7575-6835-4685-a956-dbbf5987d27b 2ebb555f-57dc-4dcc-9b91-730615b6ca61
+a913397a-a6d8-440d-a684-65978f23c8cf 2018-08-15 14:40:50.469+08 2018-08-15 14:40:50.469+08 bdca95f5-1a68-43cb-8bbd-0940bd4f861e 47bbaf8a-77eb-47fa-8d8e-ebc01555ea5e
+dd80eb82-f488-420c-ab23-f5f29414b7b9 2018-08-15 14:41:47.962+08 2018-08-15 14:41:47.962+08 3f7364b2-c949-4499-a485-82f0a141968e 1af2457f-8ccf-4acb-9445-4e81b3c91225
+a4a90036-b70b-4531-ab8d-e4be33bc119e 2018-08-15 16:28:31.84+08 2018-08-15 16:28:31.84+08 b8376c42-2314-48d4-9cc4-34b538f2862e b18ce679-ba55-48e9-a324-7b90a90f5f99
+521c5fbe-7239-4915-b917-46ad204807a6 2018-08-15 17:13:27.466+08 2018-08-15 17:13:27.466+08 face6568-949b-4dcf-a799-fec9eafe6dd5 b4cb33dc-55b9-4b8f-86cb-ed164802a931
+89121c0d-b427-43a2-983c-fab6176e69f4 2018-11-09 14:39:37.225+08 2018-11-09 14:39:37.225+08 652126ab-6853-4c3d-ad18-2b150a0a799e b7fa7727-83e0-46f3-b9c6-de4800fb5451
+0124208c-9b08-4221-a13d-00e16dc6730c 2018-11-20 15:38:42.535+08 2018-11-20 15:38:42.535+08 24aa287d-5c1b-4564-8b10-d71615d3c626 f3fadba7-5ddb-4dcd-94d1-5b2d5f01125f
+319951c5-acc6-4a40-93e1-bab56dd0d1f8 2018-08-16 15:26:40.005+08 2018-08-16 15:30:52.941+08 244b1f17-13d5-4b46-88b9-2a48538f66f4 5127c2ad-f91e-4619-9edf-973a09cd81b9
+f6a43b18-fe15-443e-996e-910e6daf00b0 2018-08-16 16:25:36.785+08 2018-08-16 16:25:36.785+08 198e6298-06fe-49a7-9245-eaca7a85f263 703a3444-277d-4e97-8a24-d2cea6881997
+223b272f-817a-407b-94ff-ba72bd38fdda 2018-08-17 11:27:24.53+08 2018-08-17 11:27:24.53+08 25789235-88db-4ea7-9a8a-5d4aeb5f9532 e2ecd847-3032-449a-9cc9-ce707443625a
+6ca22186-8016-4bd7-b57e-add3e8bdf95f 2018-08-17 11:33:00.285+08 2018-08-17 11:33:00.285+08 70486f7c-d11e-4014-be32-71a2e8724359 e3cc63f3-b29f-48f1-ada2-3ccd62b1411e
+17ad0d86-dda4-4ba9-a8bd-065223260903 2018-08-17 11:39:56.622+08 2018-08-17 11:39:56.622+08 076391b0-0f5f-44c8-8b51-cf3c894b8b88 ed20e575-26ef-46bf-93a3-c9a1d7d099ce
+026da83c-8909-411d-9dd4-d5fa3ae4f518 2018-08-17 15:57:29.848+08 2018-08-17 15:57:29.848+08 6105dff0-c96c-439e-8101-e0e7906834e0 69c54d0d-fcb5-4607-8266-dd978f93f713
+2490f5ed-74b2-43ce-90a9-9259ab12486e 2018-08-24 09:09:28.366+08 2018-08-24 09:09:28.366+08 ce369680-ed47-4e58-8f38-4cbc786572a1 4ba2d703-2e5c-466e-8cc8-04bc992eb93c
+67866c8c-092b-4206-9a31-2ff8ff8fd67d 2018-08-24 15:42:01.436+08 2018-08-24 15:42:01.436+08 a94fe00f-a8ea-4634-9262-e3c1ea0fa965 ee21c1d7-3c43-4cf6-ae0f-a037134f1851
+c2a73850-dd77-4ce1-b93a-ae154b46a54b 2018-08-24 15:45:25.54+08 2018-08-24 15:45:25.54+08 e3a2390c-0ca0-4f9e-be9b-0214c81e5c4b fbdf2755-cb94-48e6-823f-a7a4b9cd9355
+caf80cb3-a1e7-45c9-8eb5-0a5a5ca2b8b1 2018-08-24 15:55:16.989+08 2018-08-24 15:55:16.989+08 1ce82d97-cb86-4a43-bf17-b75116cac5e9 b6991bd8-7da3-4eb2-ba43-907ea1ae054b
+a698e90e-d682-491f-9035-ec9266e1916b 2018-08-24 16:11:23.008+08 2018-08-24 16:11:23.008+08 8bc9ea4b-7a7d-4cfb-8950-a5c8f0ea038b 988ad232-d103-4cbe-a8fa-f7447da0cc47
+9befb243-7654-4e4a-b4be-c81679451b04 2018-08-24 16:11:23.732+08 2018-08-24 16:11:23.732+08 64fd2ff4-b5d5-475c-b2a7-9881c50a0f4d 6c3b58fc-ffb5-4370-8878-ebe1ff3956b6
+ba18e3b8-d036-435a-8877-d495ec3402e0 2018-08-24 16:11:25.601+08 2018-08-24 16:11:25.601+08 2a0639f4-2556-4682-bf61-63ab22867a18 d839dbcb-4ca1-49cf-8bad-7927d56ef8c2
+922f507f-6536-4e86-ab34-769e564650d6 2018-08-27 14:25:44.823+08 2018-08-27 16:01:21.462+08 360e9d0c-a402-4ab1-b120-b6323dc53ff5 2fa1d9b0-bc30-497a-a46d-d3d70c750edf
+347497da-b5e4-44ea-ab96-e02bdfef8d6c 2018-08-28 17:57:01.576+08 2018-08-28 17:57:01.576+08 3fe03489-ab89-4237-a623-60b0a9d068af 9a4f5022-d830-4559-bff6-a5b6e6b6393f
+03a4133f-1c15-44a1-87b9-603b58134eed 2018-08-30 16:11:13.782+08 2018-08-30 16:11:13.782+08 64210070-761e-4035-97b8-f76bfe61fca5 d2078c90-429d-4446-998d-d43e6ccd4b77
+c1286496-c73a-4155-876a-9c630a0335ab 2018-09-04 10:56:14.341+08 2018-09-04 10:56:14.341+08 433bad92-fb3c-4e0f-b28a-c82c4c85fb5d 6ac020e9-abb5-4bb3-bbef-a3b930f21731
+29d35fbf-992b-4780-99c2-7eeda087b23b 2018-09-04 15:12:25.834+08 2018-09-04 15:12:25.834+08 a3794dba-f03a-48b2-897e-e5f4f9c077e9 6ac020e9-abb5-4bb3-bbef-a3b930f21731
+3ee5d404-c1d1-4c48-be0b-531f42fecd47 2018-09-04 15:13:41.05+08 2018-09-04 15:13:41.05+08 621548d2-0189-47af-9d78-c0e928b92373 869aebb5-9093-4651-b0ff-eb3835c3e88d
+2728f9d9-72c7-45b7-aa0a-2a27814d7146 2018-09-05 09:55:00.358+08 2018-09-05 09:55:00.358+08 2ad7273d-8ff0-4461-b87e-01d92fe46764 d0212fe3-5814-4546-8b3a-de355f207a2a
+af91d83d-b1c9-4847-a99f-4b67a53fd1be 2018-09-07 09:46:01.479+08 2018-09-07 09:46:01.479+08 450bca7e-218d-4faa-9527-ee2f0eceb3fe 71a44ffa-c49f-4c12-8112-50ba20100e20
+fa60dbbb-b3bc-4c9c-93a2-7ccf688ca7f6 2018-09-07 10:55:19.828+08 2018-09-07 10:55:19.828+08 4918bd89-601e-4f79-b31f-0aeda6062c82 c0e552fb-ad46-451e-a33c-adc8fd3a7f24
+80c38f5a-d0ab-43a0-b4e0-de5338ce5249 2018-09-07 11:09:31.05+08 2018-09-07 11:09:31.05+08 f46e1f36-2e28-4b26-950d-2e00fb0b4a03 0bdad9e1-ec85-44fd-850e-954954381313
+d03cf059-b7dc-43ae-bdfb-43c5ebbf47a0 2018-09-07 11:18:28.042+08 2018-09-07 11:18:28.042+08 8e1cc471-0670-4c4f-aa30-013e6de6e3c0 c8bfa700-20bc-46d4-b876-a46a392e04a6
+cec80494-d1d0-4c17-b5fe-22305b99b2d1 2018-09-07 11:22:10.553+08 2018-09-07 11:22:10.553+08 402f6e2a-74c7-4a3b-9021-66f64352eb7c a088573a-f033-41a8-acb0-6670bcfac941
+d32a58fe-c623-4188-a231-976fb0fc7af1 2018-09-10 10:22:20.299+08 2018-09-10 10:22:20.299+08 54115f13-d150-41a4-8d45-05de44b8decb dd20c30f-b6c1-48bd-8033-6a74226db443
+9c4c59d7-d12e-4af9-920f-8395a979fc5a 2018-09-10 14:41:25.419+08 2018-09-10 14:41:25.419+08 a051bf54-cc33-484b-ace2-fe97c26e2ed8 10cd3331-634c-424d-bbbd-8722d7b57780
+c390d353-663b-4d92-a639-193305bd8bb6 2018-09-10 17:11:08.809+08 2018-09-10 17:11:08.809+08 da8b12eb-4ee8-488d-a51b-25c30a677462 d185b76d-f67c-45e7-a3ea-acaef9c07ec6
+db5a9e8f-94ce-4182-b68c-5121b9fae17f 2018-09-10 17:12:13.136+08 2018-09-10 17:12:13.136+08 7bca9e02-73e3-4462-b527-a443d6ba576b 01d7db4f-1d4f-48ad-9a55-f99c88c7d993
+4e9b5cd4-81ab-4e8d-b1ba-79ac82e9330f 2018-09-11 14:34:02.871+08 2018-09-11 14:34:02.871+08 6ea1caa6-8d9e-4f83-87ed-c73c2ed5e8ec 6ce95b94-a0b7-49cf-94c7-b61f921a526f
+aa249a85-7a7c-474a-9cd8-bfb0cc10ac77 2018-09-11 14:37:10.404+08 2018-09-11 14:37:10.404+08 df2bbcd2-bc11-48de-8307-826382959126 79718b5e-8dd9-4ae7-b11e-c17173b4793d
+a6dd5f5b-8b8c-4f5e-b16a-cb4cbde8048f 2018-09-11 15:50:20.326+08 2018-09-11 15:50:20.326+08 d0eba673-a21f-47b7-8c47-0368788a1b62 2c2b9e64-45cb-4df2-b0eb-aa6968c9ee08
+6839293a-da00-4f6f-be22-7ae7df9b09d1 2018-09-11 15:58:19.428+08 2018-09-11 15:58:19.428+08 5e49818b-0a1d-453c-aa14-1979f1371690 a964c6c9-365f-4c63-b62b-cdb064a34695
+0c006804-32be-4ff2-878d-cb5d0542d228 2018-09-13 17:12:19.027+08 2018-09-13 17:12:19.027+08 b9007592-b65f-41bb-9c2b-e283e2b01619 7f1dd7af-ebee-486f-9ead-aed01fb9cf19
+6b75c097-f196-454c-8c8e-94f4c0f05789 2018-09-13 17:17:20.664+08 2018-09-13 17:17:20.664+08 7bbe4206-6562-4fc4-b62c-94b500d6cc4d b7b5df77-bbf5-4850-a327-7ef397695976
+4f9ed9ae-51f3-45ec-80a3-6c592cf8fbe5 2018-11-05 09:08:45.143+08 2018-11-05 09:08:45.143+08 970a19fd-31b9-4485-90d3-6394bc637a87 bcce5a40-25ee-4628-81ec-ddb2ba172bbc
+a3406ee7-5682-4c72-b388-382b14dda76b 2019-12-31 09:09:31.629+08 2019-12-31 09:09:31.629+08 15046a7e-2b8d-446c-963e-0f8af7fe7475 8cd796d2-bdea-4fee-94fe-af39216acd9c
+ac469c2c-01e3-4607-ae13-bcec177f5ddc 2018-11-28 15:40:39.937+08 2018-11-28 15:40:39.937+08 bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a 2d72e310-41e8-48b3-8589-e1fdc02234a1
+565fdd7b-71d4-4469-85ea-fe71f6c504cf 2018-09-19 17:31:06.054+08 2018-09-19 17:31:06.054+08 6c510bc0-0f56-4f00-9c1c-41b619a86a28 c7ac0d00-dcd4-4dc1-ae3d-1ae943392ad1
+bfbba727-b454-4203-85fb-cea83f51ef85 2018-09-19 17:32:07.001+08 2018-09-19 17:32:07.001+08 3b5383c8-bd1b-4f0e-bfea-1f0d746133c5 161d57d4-a9b7-44a5-a6b0-90ea6c5a2121
+cd89b300-b405-4cc9-b560-146c8ab9795c 2018-09-20 13:52:41.754+08 2018-09-20 13:52:41.754+08 16407e57-188e-42f3-b626-ac8ff7405aeb a5d45d20-8865-47eb-9bc3-3982af96ed65
+9ae184c2-a545-4acb-bbc0-3014540d9fe2 2018-08-24 15:26:31.715+08 2018-09-21 11:23:25.187+08 042a30bb-34e1-4994-968e-af8cbfd1bd6a dc210dff-ef4a-4e64-adab-59655d775a74
+efa6e67a-3c28-4a99-b852-afdf1b5e8d22 2018-12-11 14:09:09.39+08 2018-12-11 14:09:09.39+08 a1a7e32d-9449-425a-9043-e40a835abf95 26ad1933-4049-40dc-8b89-c9122a6d58af
+b7be8634-1f7d-4665-8e64-918c8fedfb64 2018-12-18 16:53:41.862+08 2018-12-18 16:53:41.862+08 fda2ff9a-981a-43fb-9a27-2f74effa3e43 6aae0b51-ec60-4612-a5bf-bfb15e46401a
+6d607ce5-c835-436d-ba67-17057865470d 2018-12-24 11:53:26.531+08 2018-12-24 11:53:26.531+08 a20c22f5-81ae-4aa9-9a71-40fd0854d653 5de53d90-f7f0-4a31-b82b-f6582e38cc39
+b6c3b56c-030f-43d1-9f4a-2fffc3e43b96 2018-12-28 11:17:19.431+08 2018-12-28 11:17:19.431+08 b9a47230-060a-45fd-8409-4307247b8a62 a76e6a76-e9bd-462a-a916-27797d6febff
+87078ffe-51f4-4c7b-8667-6cf14d1e8019 2019-02-25 14:24:04.302+08 2020-05-09 09:29:10.89+08 8b567669-1458-4b89-8448-257ca3ecb15c a71d3565-92e0-406e-93f6-9a5b9edb1917
+fa408d5e-55d2-4ec3-ba04-78f1e2875984 2019-02-22 13:44:23.987+08 2019-02-22 13:44:23.987+08 b1305d43-23de-4740-a7a2-213facc63133 bb576050-eafc-4b48-80fd-4efee1d5db5d
+c6e95ed1-b13b-4b78-afb7-bda879781ea8 2019-02-25 13:32:42.921+08 2019-02-25 13:32:42.921+08 4a1e5bbd-ab8a-48fa-8915-98f9fad2be80 8489e217-3c86-459f-9fbf-33d6efcdc58e
+170225c8-2695-48d2-b665-274a1abc495d 2019-02-25 13:32:42.949+08 2019-02-25 13:32:42.949+08 666d6810-bfe4-47ca-93bd-fa60ced4252d 8489e217-3c86-459f-9fbf-33d6efcdc58e
+3e064406-873e-47ca-9334-ab67ffbe50a1 2019-02-25 14:24:04.325+08 2019-02-25 14:24:04.325+08 63df0f39-75da-443e-a275-59ebd94aa3ea 6e6be4e9-0c8a-4281-97d5-d61407a645f5
+99b6da3a-e798-480d-8ba9-bec1c1943b6c 2019-02-25 16:03:31.521+08 2019-02-25 16:03:31.521+08 9a7d0b50-af38-4c47-b314-4dbca09f5ad2 688625b2-bc87-49e2-8183-5ea065fe988c
+ace9ee4f-9f84-4289-81ca-cb46d6e67600 2019-03-15 16:36:12.145+08 2019-03-15 16:36:12.145+08 895b9731-8518-47fc-b126-37124415845f 5602db39-4448-48d0-bd83-5f5c7d153ee9
+f94c82a7-651c-4aba-9e05-d57e06962352 2019-03-19 15:25:15.768+08 2019-03-19 15:25:15.768+08 43846e9c-36d2-4aad-a9ed-cc837fecec96 c3311b93-b9ed-4269-93d7-b0ad072e57d5
+22c6a3ef-3f0d-4b14-9459-62a6288233d5 2019-03-19 15:25:15.783+08 2019-03-19 15:25:15.783+08 5c3255a3-17a0-4ff5-8704-351d606c322f c3311b93-b9ed-4269-93d7-b0ad072e57d5
+6fc8682d-9b95-4d0a-90e9-e6bca6f147a4 2019-03-19 15:25:15.797+08 2019-03-19 15:25:15.797+08 09b8a9bb-2979-488d-9ada-612e0e3c8104 c3311b93-b9ed-4269-93d7-b0ad072e57d5
+a13f40bf-148b-43a9-84a9-5caf593d36c9 2019-04-16 11:02:08.118+08 2019-04-16 11:02:08.118+08 51de3079-41a4-4b3b-9e3b-4d9bfb13fef8 cb44766d-6328-46a6-a1e2-dccbc8abf7ce
+c5ad3c3d-c626-4c50-9e95-40545c014d69 2019-02-25 14:24:04.276+08 2020-05-09 09:29:23.039+08 e2096ac1-6a10-4df5-9393-173d19fbbee0 3b7f8cc7-cdfb-433c-b2b1-3e94e0bb57af
+09eed98f-83e9-45ae-bb37-a0a78325ab11 2019-04-28 11:25:30.658+08 2019-04-28 11:25:30.658+08 55d1faba-c22b-4730-a51c-1979541f342b 443e2148-f4da-43ee-b65d-7871425558a6
+c0957965-eec5-4c2c-ab8a-650c2743336d 2019-04-28 11:27:08.995+08 2019-04-28 11:27:08.995+08 e5a6d57f-122f-4dac-994d-1a83a93b2440 ab6325d5-dbae-449e-8c76-86b82e488771
+53abf4a9-bd6c-46d8-8941-326ebabca895 2019-04-28 11:28:46.202+08 2019-04-28 11:28:46.202+08 833ae7ac-9c57-4cd1-a324-4b49acee1dfe 385ce4ca-9613-40dc-b62b-b939a0f49f24
+9f833b05-cd3a-45e0-adc9-57fb04397995 2019-05-07 16:51:29.091+08 2019-05-07 16:51:29.091+08 df20f27f-9f90-4d8f-b4bb-db033628f414 2c43bbd4-cbae-41b9-974f-84297e8d9e16
+4203bb19-614c-4a12-b495-41075ed75cb7 2019-05-30 11:21:18.834+08 2019-05-30 11:21:18.834+08 28904408-12e5-4569-8499-937ce3f253ef 29410758-574b-472b-86c3-7d1cf0e76b91
+866cdb2f-aac5-4a43-91d5-b3c9988b9db5 2019-05-15 10:48:06.52+08 2019-05-15 10:48:06.52+08 f21dbd7b-867d-4273-8141-7817fa5685d8 6721bd30-fd2e-446e-b46c-2d301c9bd8a6
+67d68d53-92c4-4ac0-bbcf-e2e4c53ba574 2019-05-23 00:05:40.576+08 2019-05-23 00:05:40.576+08 fd94be74-66bc-48ba-94d0-008b6d6d5413 d66fa059-5b42-428c-9c83-65b31ec08a45
+ea6f43f5-4576-4a76-8ed3-3c90b51fab43 2019-05-31 16:21:05.076+08 2019-05-31 16:21:05.076+08 589695ad-b029-4c5e-9425-4946e80f3fb6 d2bcc066-99d6-44a5-89b5-f3263bc219c0
+279662e5-8598-40b6-87c8-d49e95758a76 2019-05-31 16:25:19.631+08 2019-05-31 16:25:19.631+08 738a6ad2-95f1-403a-94a1-8f641b2ab73f 947b9222-20af-4c12-a0e3-b2ac87fe9f2a
+382ff159-dcd0-4a6b-9332-fecb801c69d3 2019-06-06 14:25:39.615+08 2019-06-06 14:25:39.615+08 e82b1781-0a86-4dd5-a38c-c66f1f0a1b0e cefce46e-a10e-4588-a7b1-c6b5e0454e31
+7ee052ca-eb55-43b9-b8b1-6eaa4d0ff3b5 2019-06-11 15:59:09.861+08 2019-06-11 15:59:09.861+08 7fbb94a7-5b6f-4dc1-8e38-872f387a2d31 3363d9e0-2735-405a-bdb3-d15c36520807
+9ace84eb-5912-4ca3-bdc8-fb0961c1a94d 2019-06-11 15:59:09.866+08 2019-06-11 15:59:09.866+08 7fbb94a7-5b6f-4dc1-8e38-872f387a2d31 0d24fa6d-e98f-46b5-a3f9-67b3e859cb96
+53105f07-2f57-4197-8780-1978faa23a98 2019-06-11 16:42:42.402+08 2019-06-11 16:42:42.402+08 aabd5c05-617a-41c3-9ba6-925ec3334ff7 9da50509-5f5e-41f3-b078-2be4bc483f28
+9caae2f1-c6c9-4d59-a07a-4689cca125c1 2019-06-11 16:42:42.408+08 2019-06-11 16:42:42.408+08 aabd5c05-617a-41c3-9ba6-925ec3334ff7 93585b8f-19ad-4e59-a78d-a9b4db270b0f
+531d8088-83d5-4815-b417-cbc865d2b531 2019-06-11 17:24:10.318+08 2019-06-11 17:24:10.318+08 1515cbb4-bda7-45b0-84c9-dedf0de93039 a8f79317-c98e-4a7e-8b54-5135e22f7e37
+47a87d0f-ddd0-4702-9652-3142062769ef 2019-06-11 17:24:10.322+08 2019-06-11 17:24:10.322+08 1515cbb4-bda7-45b0-84c9-dedf0de93039 0cff1454-261b-4273-aced-f792a7e564cf
+a696013e-5b54-4568-a711-d75504f9259b 2019-06-18 15:44:35.522+08 2019-06-18 15:44:35.522+08 43bce07c-dfec-4867-b501-00a047455ab9 f89b5fe4-284c-47da-9883-f515e6d73929
+ff4a18e9-1e4d-4a06-9640-9c05eccfddef 2019-06-19 13:58:50.992+08 2019-06-19 13:58:50.992+08 b97de8e9-82aa-492d-9c8f-5d7347a24d93 99f48679-0083-474b-a125-a3c4f4180626
+b3a2a84d-41b6-4553-936f-fc675d8a9cdd 2019-06-20 09:22:50.974+08 2019-06-20 09:22:50.974+08 26896cc1-415c-44cd-a3d0-36d3908ab014 009461bc-fccf-4311-a769-a2d7dc5e05fa
+34734e55-43e5-495e-9e86-75f328043d1f 2019-06-20 16:55:24.382+08 2019-06-20 16:55:24.382+08 deca7d64-27f6-4e88-9247-34756d2e3073 559c9c33-544e-421d-ae15-3a68d3a2c6a3
+b60f696d-63fb-4070-be25-3ca1067be0a1 2019-06-25 11:39:02.437+08 2019-06-25 11:39:02.437+08 a6a9bd4f-093d-4573-8511-3d805c7fbe9c f4e5cb7a-c6da-4082-a9e6-7ce7fa47cc20
+d6a4840b-bfbf-4884-b036-fd74c0e4a51c 2019-06-27 09:35:05.718+08 2019-06-27 09:35:05.718+08 b071ffa1-9fb5-4fac-8295-cecff8edaa95 6d14cdaf-b1e2-431a-8696-9509d87aee1b
+3c706b3a-ba81-4a92-944e-46f7b097afef 2019-12-31 09:12:37.789+08 2019-12-31 09:12:37.789+08 514bb698-2903-47d6-9749-67f6ead2de82 261b6b65-18f2-4652-8cad-489527158a97
+238ebf03-79b1-4095-b2d8-6acded61f20f 2019-07-26 16:38:11.742+08 2019-07-26 16:38:11.742+08 4801d3ef-12b9-41d2-bea8-f20ddeb90568 a5fe8095-bd72-41c5-adeb-cfda5c403460
+d4d26ae6-af80-4e83-b438-91ebeaf2bb4e 2020-01-02 14:23:30.869+08 2020-01-02 14:23:30.869+08 83b1e284-b0e5-43d1-8881-bc7fc3317dd9 8d019347-0d6d-435e-a798-e7dba9b83e94
+bb24be94-b44c-4f69-a434-97adc9e02d15 2019-07-27 11:32:00.718+08 2019-07-27 11:32:00.718+08 c2632f26-f172-4ed4-bc84-48cc89b6e36a a5fe8095-bd72-41c5-adeb-cfda5c403460
+c8a20255-9dcc-4f26-9cc8-078871ced66e 2019-07-31 10:14:14.853+08 2019-07-31 10:14:14.853+08 16eac313-4d5b-4b3b-960b-e3c3b7fbe450 577193c0-1b0d-478b-9564-5e4fbdeb93a7
+9756295a-f202-4f90-8973-e64671e6b729 2019-07-31 16:04:11.153+08 2019-07-31 16:04:11.153+08 e7674511-d506-492f-9321-966a9efe6971 77cd6691-869c-430a-963f-76d142e0fc59
+b80a8014-7e88-40b2-a438-803851989c80 2019-08-03 18:26:25.698+08 2019-08-03 18:26:25.698+08 b781fb04-d60a-46c0-9081-e7ce553bb7e3 a5fe8095-bd72-41c5-adeb-cfda5c403460
+f59bf8d4-0846-406a-aa02-cd55b2d3e1bd 2019-08-05 09:26:48.716+08 2019-08-05 09:26:48.716+08 64576b12-36a8-4ca6-ac63-273401d692c6 5db05fad-c8d0-49d4-b1b4-fdc4d103a4f2
+63b85297-3111-458e-971b-9349a2942e75 2020-03-01 20:27:14.573+08 2020-03-01 20:27:14.573+08 d5ca53cd-12eb-4cb5-81e0-8697934670ab e95096f3-3c08-4f2c-a05d-474bc1c21b61
+52edd12f-67f8-4d1b-95d2-60fdafbbf1d7 2020-04-13 16:45:01.118+08 2020-04-13 16:45:01.118+08 b9a9f40b-2946-4b0f-abe7-10611a02fe1d c244de67-ab93-4d9f-94a3-7965dfdd1554
+843c2c3d-70b9-4879-8efb-c0207f4a8c9a 2019-08-05 18:13:22.794+08 2019-08-05 18:13:22.794+08 32f98475-6b76-4723-a2f5-b0b7aed04cf7 c68e5d05-a0df-41b4-a083-bf39676b5f16
+b4806fc9-550c-4fb7-8a47-b5d446b1e444 2019-08-05 18:14:48.663+08 2019-08-05 18:14:48.663+08 16beb620-de9c-4137-a7cf-e63da5b0108c 755738d1-45b6-4543-9264-338035fde289
+7d3e1504-8a91-4b78-911a-fb6e96fd9e54 2019-08-06 11:00:53.843+08 2019-08-06 11:00:53.843+08 33bba333-0d20-43b4-a0e4-7dfaba4a9896 ac6b47f4-f4e5-4116-9ecb-ea3a596d6c87
+ee8ae698-a715-46da-8e63-cbab61c8ac4b 2019-08-07 10:27:40.176+08 2019-08-07 10:27:40.176+08 008ccbe4-2335-4ad6-98e4-57807ab4de7e 9ca0fc98-cca7-4941-9663-845bae9ea161
+36c85fd2-c10b-47fa-9417-dcd1265a6b52 2019-08-07 10:34:16.599+08 2019-08-07 10:34:16.599+08 13b1b357-66cc-467f-9f25-078c46fe28b6 651fa16d-db86-4bc6-ab8b-b897d720abda
+53a6f578-516d-4aec-ba9a-9f11384291c2 2019-08-07 10:40:39.075+08 2019-08-07 10:40:39.075+08 5848ef89-cf06-481f-8044-51774b0a2694 4bc02775-53a6-4460-b702-ad1052ca5d16
+0e832400-d381-4203-a217-7471a6354d6e 2020-12-24 14:38:04.639+08 2020-12-24 14:38:04.639+08 ce14d28b-bad7-4d5e-b418-d40663dceaec 30181893-36ba-45e6-b87f-8d8cac3d3b37
+0ed3daa7-5923-425c-b415-c90094115f20 2019-08-22 14:28:44.638+08 2019-08-22 14:28:44.638+08 9fe86237-419a-40b2-890a-00e0bb8d4af7 880b9fcc-cf91-4493-8a91-62eff6c334c5
+5f823c0b-ee33-493c-806e-1ef8025b541a 2019-08-08 16:08:27.681+08 2019-08-08 16:08:27.681+08 09943af3-4f49-495c-8612-c63a3a407e28 5988c18f-590f-492e-a15b-dedb507026b5
+43ddd6c4-04ba-433e-8415-3e3438c4fcd6 2019-08-08 17:57:55.414+08 2019-08-08 17:57:55.414+08 75960822-83b9-4eb4-accd-bbccb4f4d139 f2304d99-4332-428d-bb9b-c9114a9920d2
+f8d5c2ff-02bb-46c8-a0d7-3cbbe64b11b0 2019-08-09 13:11:50.741+08 2019-08-09 13:11:50.741+08 1e9d3e4b-b208-4686-822c-c164a4f9cf7f 3272414d-9f0c-4b06-8b0a-a795eb6efd7b
+93983d23-28eb-40b7-9605-cd471591f67a 2019-08-09 13:16:39.316+08 2019-08-09 13:16:39.316+08 106bec29-1b71-4f53-aab5-ad3d19c17116 b6842940-36df-42a2-88c5-b23821666a3b
+b8412865-06e3-40bc-81f8-8addb2dfadc6 2019-08-12 10:05:14.774+08 2019-08-12 10:05:14.774+08 f51d17c7-ad54-48ce-997c-13c1fb3ab155 2d14a681-e0d3-4bdd-baa9-55d66f12a7e7
+87a6fd84-2aa4-45c5-9736-df7d40445303 2019-08-13 17:52:48.316+08 2019-08-13 17:52:48.316+08 f31682e1-01ba-49e5-9639-886bee03cd1b e04f7d4c-fa14-4062-9c51-d6b0339fa07b
+9241ca3e-a8f1-4674-8e57-712eecfbd55e 2019-08-19 10:39:47.475+08 2019-08-19 10:39:47.475+08 eb5ec9d1-8ab7-49ea-8ced-3602ed68f445 89c979fe-c1e6-4f97-bb91-23de053d3180
+40ce4705-f8ba-454a-9b75-3f0bef7a6ece 2019-08-22 11:04:32.313+08 2019-08-22 11:04:32.313+08 de5f27da-de79-4d11-a4ca-65bc1a9f178a c989c701-e938-4278-b25a-c8e62760f036
+c9afe19f-ea93-4ab0-9771-9822dfdec2d3 2019-08-22 11:27:45.896+08 2019-08-22 11:27:45.896+08 bdcb0ea7-10de-4b76-80bd-c01f036ccd33 cbbb0c0f-8a80-4df3-87cb-d80512c19639
+2172f832-f3f1-484c-9156-0d3fe51b3f2c 2019-08-22 11:37:33.016+08 2019-08-22 11:37:33.016+08 6545a9cc-c2d6-4477-ba72-3db5a96d2ad8 29c6d92b-4c71-4826-a921-8ceb10b7560d
+fb31c7b6-4361-4a7a-979e-4d9b71a23c8a 2019-08-22 11:37:44.957+08 2019-08-22 11:37:44.957+08 85cd155d-f611-4694-8051-4d81fbef2028 3375723c-28e2-4d43-a5c2-e10974373d01
+1908983e-6418-44f9-9957-04c6f5d2a948 2019-08-22 11:41:46.109+08 2019-08-22 11:41:46.109+08 8f177fbf-0fed-4306-a80b-6a2751f5fb9b eecdc85d-85a0-4dca-aae0-dec7fd23b8a7
+dddb8f95-534f-48b6-9340-1e7e65d1b633 2019-08-22 11:51:37.065+08 2019-08-22 11:51:37.065+08 0f06e6d2-1ad3-4cad-92a2-c3a23e36206b 3375723c-28e2-4d43-a5c2-e10974373d01
+7fe4ffab-e366-4004-b65e-5c64108d9584 2019-08-22 14:09:28.32+08 2019-08-22 14:09:28.32+08 451d64cc-b568-44be-bace-184e24b4e827 2ce5d834-0933-4b80-92a1-0f8e07c12cae
+a13f91d8-3da7-482b-977f-81a4cb1637c0 2019-08-22 14:20:43.396+08 2019-08-22 14:20:43.396+08 84e805aa-df66-43bf-9705-01e6b6c1e741 a4f761da-30fe-4ab6-9723-15ddfee5a122
+a4b8ba4e-373c-4b47-ab20-22db3f7b8971 2019-08-26 11:02:04.251+08 2019-08-26 11:02:04.251+08 ff22ed2b-4d22-47b5-b0e1-9d35c72caf99 443334e7-e33b-42a5-a28b-c6d5236a3bdc
+00e057f9-0551-4833-bf0f-709c27eca4ca 2019-08-27 09:01:04.07+08 2019-08-27 09:01:04.07+08 0a9589f0-6b8d-474c-b07d-8c6da527a61c 2a35435c-8310-4106-8f81-62cd9e5ff419
+fd8cd9e5-f679-4ca7-83bb-7f99671b951a 2019-08-27 09:54:34.305+08 2019-08-27 09:54:59.477+08 4e08e98b-f49d-4032-bade-d8145cd4bad7 191ea0f6-1f56-4d21-afd5-79e38a293bed
+4e28ee47-8ece-415b-9294-77bdb2b2b6e6 2019-08-27 15:43:13.017+08 2019-08-27 15:43:13.017+08 5af22086-4fb6-4d39-b439-f1bfb44b2bcf 3538712f-979f-4a0b-8023-88d67e679dd2
+62186140-a0c9-4550-b449-14b9e691d4e9 2019-08-27 16:31:15.683+08 2019-08-27 16:31:15.683+08 7d5f863e-8fad-4de4-a417-48b29d1df1de e7bc168f-4187-4d39-826a-117d253cb165
+905ca5d0-67c8-40fd-9b5f-d8b6fa109cf5 2019-08-29 09:13:21.322+08 2019-08-29 09:13:21.322+08 aa7aaf91-1e54-411a-b174-22ee7c40c07e 8edb15e2-2c8d-4166-907c-65607aee4f74
+2928b185-9e7d-43fe-81d4-c2e9c355a87b 2019-08-30 12:11:38.828+08 2019-08-30 12:11:38.828+08 2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13 0821e034-0233-4466-97ad-13ab408fabcf
+1703ad21-463f-4b0e-8025-789d08ea6438 2019-09-04 13:53:37.979+08 2019-09-04 13:53:37.979+08 5664cb08-5e57-46c1-ac71-23220613639c 4fdf90fe-1ffa-4099-96ac-7f29ac3d8c02
+518c4d04-922f-4c5b-b41d-2114f98008fa 2019-09-04 15:12:14.205+08 2019-09-04 15:12:14.205+08 034ff83b-34b0-48a5-9ccb-774a844901f8 ad4ff171-1622-4d98-be68-31ccc47670ce
+7d113507-2c94-4d0b-be33-dbbc6d3c81d7 2019-09-04 15:22:34.905+08 2019-09-04 15:22:34.905+08 58baaabd-502a-4f68-a62d-c0cfeddd7ec4 94a57fd5-7132-46a4-bd02-c8bf82b23612
+81c0a534-bd53-4614-bdca-f34abdc0bf3b 2019-09-04 15:40:23.398+08 2019-09-04 15:40:23.398+08 e52f95e1-8fac-40af-a49a-baad70dab906 b0fab7ce-8158-48ad-8adc-7afd0fd05b6f
+74154e25-be47-412b-8ec8-596a2a7c84d7 2019-09-04 15:48:38.146+08 2019-09-04 15:48:38.146+08 cf8445c6-e70a-419f-8a2f-ba7f44896604 e45fe22a-617a-4c7b-81bc-fab457214014
+d56e2db3-1075-456b-9be3-4c03d8772c35 2019-09-04 16:08:42.927+08 2019-09-04 16:08:42.927+08 a7d88dec-6a2c-4ab2-8b2c-864f8c9a5eab 656a3518-d900-4a80-8f78-1ddd189e4a99
+9d40730e-8c29-4553-a220-a02b12964a8f 2019-09-06 10:08:00.11+08 2019-09-06 10:08:00.11+08 63cf9ae9-373c-4b2c-82de-58d3172094bf 3a45f740-c977-47f3-adee-712981f14584
+8b66fe3a-20d7-499b-bb1b-28e3f295f759 2019-09-06 11:16:52.02+08 2019-09-06 11:16:52.02+08 92438dc5-877a-4bef-9261-a651bc3439ac c0ff77a6-4d80-413c-a71b-842314237d20
+bc76ba63-aff1-4fdc-98b0-5d2dd610f6f0 2019-09-10 14:47:17.503+08 2019-09-10 14:47:17.503+08 5dea6ab3-3969-4e41-804f-eff249d5d9ce 03bbaf0f-a95e-4fc3-8be0-f1bb133e6c59
+f76a8915-b150-4a3a-b557-5e9f76e1fe6e 2018-04-16 16:01:22.153+08 2019-09-10 15:44:53.915+08 ae06a9a5-6f60-4dae-9983-cc4677c08d97 f3f91a46-2eb7-4c1c-a364-2af8856c8e67
+a970556f-3d66-483c-ae93-ed95ebe92f87 2019-09-10 16:52:37.764+08 2019-09-10 16:52:37.764+08 f1841b24-8182-4a14-ae68-c0bad62cec3f 1c6fff73-3ce7-4ad2-9d35-9d56b4546354
+f109667e-40e1-4009-89de-1485287518a8 2019-09-25 11:24:05.401+08 2019-09-25 11:24:05.401+08 1bcbd000-415e-460a-a4f2-63d8f232bbf6 0219f24f-25b9-4546-9d81-8367349d0277
+59c2e8c0-af9f-454e-980d-e30087d04d3d 2019-09-10 16:52:37.773+08 2019-09-10 16:59:00.066+08 10c5b435-17c1-49f9-b45c-6a61c35f8071 a901b930-3d22-42d7-a4c5-fa642e4d6d6a
+f48486d2-81bc-4d39-9b42-3764e4886599 2019-09-10 17:05:25.335+08 2019-09-10 17:05:25.335+08 7cb252c1-fad7-4874-bc56-417537d2d35d c9a6c01a-1560-452d-9a35-679537571bf2
+24c18590-d5c5-41a8-b1e3-22ac99fd1d2f 2019-09-11 10:29:02.885+08 2019-09-11 10:29:02.885+08 7a7c3f51-9057-44b5-b7e7-ea9b73c89a50 0b4f22fa-ae6a-4447-885d-35c6ef622b78
+07c3066b-391b-4b5f-8063-fc40cf4ca835 2019-09-11 11:36:46.924+08 2019-09-11 11:36:46.924+08 799b57ce-6f05-46b8-8d02-8b0e71997270 618e7f9f-11ec-480e-8851-e26d099ea06c
+fedbdbe3-235d-4426-8a8f-dc9e69541b53 2019-09-11 11:57:38.703+08 2019-09-11 11:57:38.703+08 1fdc974b-f062-45cb-910f-13b5a193e084 dcee217a-22ab-4996-9ad1-03c62a6b4902
+dc2a8458-fd3b-4866-b677-18d7971696ee 2019-09-16 16:50:20.702+08 2019-09-16 16:50:20.702+08 b57f384f-11d7-499f-8e6f-5bcfbc054334 405f26fd-abc1-46d4-8f41-3a60c6765ed4
+b994283b-91bb-4d0b-9010-d514a33c37a9 2019-09-17 09:35:57.991+08 2019-09-17 09:35:57.991+08 7915bd50-f8d3-4c3b-b9a6-fa1fe10f00e6 b65ec323-0509-46fe-9d0c-52e8330fb545
+41bd1e5c-d9fa-42ae-8255-ca03b10cc0dc 2019-09-19 09:41:34.185+08 2019-09-19 09:41:34.185+08 7cb1a32e-60d7-4241-b1aa-4a2fadd39d82 7e256ea6-aa85-4094-a615-21f74404888d
+1d6caa1d-7854-498d-bafa-8500b5b237e0 2019-09-19 12:42:11.939+08 2019-09-19 12:42:11.939+08 c90e6cc1-21a1-44ce-9ab1-77c8808b3fe2 cd348cb5-97c6-4981-8022-26e74e9d0b35
+c773c04e-c4a1-4a8e-a63f-9d7eb4d56483 2019-09-19 16:41:31.462+08 2019-09-19 16:41:31.462+08 ef5fc14d-bace-4e50-a536-81112feb65a8 5e03d125-7525-421a-9697-995ac40df8f5
+27cf2992-7a1e-451a-800f-e54904eeda14 2019-09-20 14:50:00.961+08 2019-09-20 14:50:00.961+08 5451cf1c-6aec-416c-9e9c-de8d9281110c 3634cea3-6aed-48c2-8d2e-90ddacf28317
+db927157-5a91-4218-86df-e24e91ae6d0f 2019-09-24 11:35:40.963+08 2019-09-24 11:35:40.963+08 1155c110-625f-47ac-b8bb-f85733b50122 5e16458b-b726-48c0-b781-96f28b18ecc4
+45c0879e-4a5f-4bcd-886a-e3b80995250c 2019-09-24 11:35:43.257+08 2019-09-24 11:35:43.257+08 dd622fcd-0936-4ede-855b-50f5439f0fe1 24ad6c87-e81b-45f9-b240-fddaba5e2b44
+17ff4679-8879-4326-9c36-4cad2b0f8710 2019-09-24 11:44:07.149+08 2019-09-24 11:44:07.149+08 35c6a683-69d3-43c9-af6e-ac9c72bab707 e8db6360-e3df-44ba-b4d7-270b6b3fccbd
+956daba0-95e1-4ae6-8f81-a2f699551022 2019-09-24 11:48:21.03+08 2019-09-24 11:48:21.03+08 cd84b56e-7ef8-4b5b-ab86-ebefb3e7706f a6b46729-f63a-42c7-946c-2f308b7e169a
+de2895d9-0291-43d9-bc4b-4f720e517c0d 2019-09-24 11:49:24.143+08 2019-09-24 11:49:24.143+08 d08e3d1f-ce1b-4f62-a2b7-0acb0e48a942 033a8ac7-85bb-4a73-bf58-df30fe677bef
+f35402da-a3cc-496f-a450-f917d72e8b97 2019-09-24 11:50:48.679+08 2019-09-24 11:50:48.679+08 723258be-4d0f-4a3b-9e4b-da3c3dd14524 6ac020e9-abb5-4bb3-bbef-a3b930f21731
+2ddd3a97-60d9-4eb8-8137-02c920ddea53 2019-09-24 11:53:37.812+08 2019-09-24 11:53:37.812+08 5dc53d97-b267-49c4-a4be-f289a2812764 8ec909d3-5d38-410c-8e0c-ef9e2d5d3417
+d723f186-ca5c-466a-b175-6b0fcc6acb84 2019-09-24 13:54:21.767+08 2019-09-24 13:54:21.767+08 ef0dc799-e1ec-4fb3-86f7-2ac498f26f55 c38840bc-94d7-4887-9f97-2851fd59423d
+4ea00e47-c9eb-4141-b9eb-7b0e680ddcc5 2019-09-25 10:41:37.043+08 2019-09-25 10:41:37.043+08 a308f5d2-2559-4f60-8323-c243f04ce8cd 4c016552-7e6a-402f-b5cc-d4cf2644cef4
+1469fde6-e1ab-49ab-8c0d-583175f11051 2019-09-25 10:49:31.398+08 2019-09-25 10:49:31.398+08 806e534e-417f-4802-a29d-23edbe5ac02d 6e2c64c6-e0f9-4454-bebe-cc6b592c47d9
+a5ad7a20-2bec-4fcf-ab2d-51e155f1eeea 2019-09-25 11:07:08.074+08 2019-09-25 11:07:08.074+08 8dc2cfaa-524f-4b62-b655-1061f1a863ff 23530c8d-f685-42cb-94a9-f36a8966b2f8
+618d639f-d616-480e-a586-459d7b67c3f8 2019-09-25 11:19:02.088+08 2019-09-25 11:19:02.088+08 804133e0-c4a4-441e-acb9-a504734bbd62 741fd631-a364-419a-9231-7283a28cb242
+a4b80875-cffc-4abd-85df-0c2c899cb34a 2019-09-25 11:32:47.418+08 2019-09-25 11:32:47.418+08 d9ea813b-d066-472d-b08e-2436f6520e9f 137361e0-8a77-40bf-9f25-5f47f6b6a564
+b9178017-54bf-4119-9ad6-2de62cd993af 2019-09-25 11:38:34.955+08 2019-09-25 11:38:34.955+08 88ec5756-da5e-4fa0-b882-39727baf501b 9990bd9a-102b-4275-9a68-0667708bbd65
+020da3a5-56b9-41f8-9a94-c0f66309eb7d 2019-09-25 11:51:56.985+08 2019-09-25 11:51:56.985+08 a58243c4-2874-46f4-86b9-bc864f203eec 0002c6d3-ef7c-43f5-964e-395a2626910f
+ba5d1317-00df-459a-8718-3410e8ef6ae6 2019-09-25 11:54:59.67+08 2019-09-25 11:54:59.67+08 3d535ccc-ec09-44f8-b278-5e93d4ff79ae cb4a020c-164a-411c-8fd4-4d91dfe12240
+9d7c8cc8-b631-4e62-883d-41e1b59ab040 2019-09-25 17:13:20.31+08 2019-09-25 17:13:20.31+08 22da5422-3017-46d1-b154-701f9a128e3c 788ffd0b-a898-4e60-99fd-2f47e5499d19
+e7438028-d55b-4d24-b5ab-d6d7607ca2cb 2019-09-25 17:25:19.288+08 2019-09-25 17:25:19.288+08 f12659ce-b28d-4602-a33a-879eedbbbcaa 7cb0143f-d2d1-48e4-a7c2-29a61b4692a0
+6e505e80-71c3-408e-8b03-c580d5f65a30 2019-09-29 11:26:30.148+08 2019-09-29 11:26:30.148+08 c1c93d31-aef7-48fb-bccc-f3f76ec1689a 67e89a04-ffdb-41e7-be13-eb8a1db4e66c
+3bffcb57-57b7-4d56-9855-da014edcd84b 2019-09-29 11:32:07.989+08 2019-09-29 11:32:07.989+08 3f518643-909e-45c6-b816-3cabb1fd8af9 67141178-8db8-4460-bf60-95b8a6172236
+b09e516e-8775-4634-9e08-37a96dd67c5c 2019-09-29 13:32:12.565+08 2019-09-29 13:32:12.565+08 f3923edc-71cc-43bd-a3a5-48894181f917 3c8be1a4-ce5e-424b-a96b-0fbd0cd338dd
+991ed472-722d-4eb6-90d0-19f200015026 2019-09-29 13:35:44.794+08 2019-09-29 13:35:44.794+08 8a578a79-fd96-4c69-8069-99e4e77dbbf9 9796f4dc-0b66-4078-9c9f-88c1fb840d70
+599ae706-b35c-4b54-bab3-a5c4d5499198 2019-09-29 14:37:47.04+08 2019-09-29 14:37:47.04+08 b9a786ad-b6be-4aa7-9aca-43b903852ad0 4f6b51e2-0f80-4681-9aa0-f27d25b55ab1
+1ed9f6a9-5f89-4291-acec-18c3f0eab883 2019-09-29 15:43:10.893+08 2019-09-29 15:43:10.893+08 b58daded-2fb1-4ea1-a68d-bdb20b492fdf f9c188d1-ab33-4041-b345-e308b3175a65
+a238981c-92ca-41c1-98d3-91a9df9947f5 2019-09-29 16:28:26.965+08 2019-09-29 16:28:26.965+08 acc72050-2df9-4098-81f2-863eeb756ff8 e05d5580-4166-4bca-9526-883e221fa201
+143e7306-4c31-4f95-be38-de7f000ce2e4 2019-09-29 17:52:28.815+08 2019-09-29 17:52:28.815+08 15e2a325-246a-4e43-8bea-784596788377 36459c6d-944a-4893-8184-4e285b638e81
+41fde45f-e214-4de2-b748-c404b0460dde 2019-09-29 17:57:27.741+08 2019-09-29 17:57:27.741+08 f34514f6-cca7-4baa-89e2-d57be4bd26e2 542252d8-f28d-4f94-82f6-1158b3bc4931
+1a5efe12-9b3b-467f-abd9-d7123596b6d9 2019-09-29 17:59:29.408+08 2019-09-29 17:59:29.408+08 284b9b6d-6aaa-4ec4-a075-d2bb4817d6fe 80cbdfcf-cba2-40ac-b382-0b54536d6b8c
+f61464ef-e1a2-4e04-baa9-85a85490bbea 2019-10-08 17:04:35.741+08 2019-10-08 17:04:35.741+08 c509c8e0-06ea-469a-9004-68542a1617e7 5fdabe6f-6d78-44ea-97cd-0b6a4c56a315
+78de3623-c717-4c8b-af02-b8a9d44efaaa 2019-10-09 13:09:24.427+08 2019-10-09 13:09:24.427+08 c996ba97-9aa2-4102-9c84-4020cfe7bd30 d387901e-2390-4c45-9f74-a63d0f38caa9
+3c8ed8db-da12-4f03-af58-c2081e906a7d 2019-10-09 13:11:20.988+08 2019-10-09 13:11:20.988+08 6f7568b7-e717-4cf9-9eb4-2d7f91a8fed4 923951b5-1a1f-450f-b565-8466f343b98f
+a0bd7846-8723-4111-baa1-791fef4cf26b 2019-10-09 14:19:59.814+08 2019-10-09 14:19:59.814+08 0a495f63-803f-4145-a48d-f54fa7f66d22 564ac3e4-e029-464a-8895-44f162d8c138
+6b9bdb45-4b96-49d1-9570-80ab3e02a829 2019-10-08 13:42:51.588+08 2019-10-09 14:33:06.414+08 5daa9060-cbbb-4736-ba79-7440d7d8178a f943fc11-0ad9-44b0-8183-4887c3fd064a
+fde77311-51a5-4fa9-b9f2-756cd1237648 2019-10-09 16:10:35.073+08 2019-10-09 16:10:35.073+08 35547185-29e1-45d9-ac07-1c22c2166d0e f39343aa-3c12-4106-b5ae-da2b8b4ec719
+fb9830e5-6ee1-46a0-9e9c-c5ce31d5e8d9 2019-10-10 10:05:09.793+08 2019-10-10 10:05:09.793+08 d34cb069-c7b8-4dd5-95f7-ec88197b9650 9ec55f06-3e5b-4df9-908f-f00fc616ad7b
+2f1bdeff-8e15-49d6-8853-3cdb3aa927dc 2019-10-10 10:48:36.509+08 2019-10-10 10:48:36.509+08 4b89bcb9-ce24-4016-b105-5d950bd997b0 7d85244f-1491-4309-89c6-16e33effa749
+54b06b60-9fda-40f5-a7e4-fc5650876445 2019-10-11 13:23:21.193+08 2019-10-11 13:23:21.193+08 ec1d8582-b39b-4e28-a13d-0d8db91976b0 4490ab7d-0201-4309-a7a3-bf6dd143e3c5
+be83ce72-b4d5-4eac-aece-1ce52f32326c 2019-10-11 14:16:27.001+08 2019-10-11 14:16:27.001+08 46632020-7139-44de-a5e8-1fa4f067df7c 55195d48-baa7-42e9-a307-ac8489ccbf9e
+ebef594d-5009-4b91-929b-697c9db1e104 2019-10-14 09:31:41.059+08 2019-10-14 09:31:41.059+08 1e915828-7914-48e0-88bf-33430c62fd36 7897ad5c-fcaf-4864-a5f5-258372b978fa
+6e84a293-69bb-4c1b-a264-ef6a618305ad 2019-10-14 09:45:26.553+08 2019-10-14 09:45:26.553+08 bfcf9463-f865-4f10-9aff-33066bd6f245 5c58447a-84f4-4abc-9f85-3e82e4969387
+ae77a4bf-6e7e-4513-9966-5a32ecf8d514 2019-10-14 09:47:26.077+08 2019-10-14 09:47:26.077+08 15c74504-c3c8-4739-8b58-10b0bcd0e83d 2eb916f8-e824-4ba9-bbda-1359554271ec
+6f98449f-f7af-47c0-bc30-e08345dfc202 2019-10-14 09:49:18.039+08 2019-10-14 09:49:18.039+08 d3206948-c73c-49b5-a593-473e8a6bc209 106e9686-2a44-4515-af18-aea0986c51dc
+6c622e49-abd1-4e3e-b78b-d6ba41ef3d88 2019-10-14 09:52:24.135+08 2019-10-14 09:52:24.135+08 0d6f1736-a3a0-4a8b-97dd-2cafc52767b4 8607b060-3791-4b77-8f50-7da488d58697
+c102d68a-aef0-4fcb-b532-e5b5993adf15 2019-10-14 11:39:41.991+08 2019-10-14 11:39:41.991+08 dc4ab80b-3b8a-4088-a468-06a078637a45 277fe60c-a017-4add-9b87-167f51155998
+66b0c42f-6603-4625-8d61-35a175facaf0 2019-10-14 16:03:45.931+08 2019-10-14 16:03:45.931+08 e8620f1d-ab05-40a9-ba5f-197894c20a49 fa4a0ad2-684d-4ede-9f8a-83995f13e4fe
+5148b796-c67f-40a2-b4e9-e66006e95da5 2019-10-16 14:50:46.104+08 2019-10-16 14:50:46.104+08 4235259d-d5d3-4488-8f71-1f6ee7631fb4 5dbf1e88-6875-442e-b049-c57705ec9fa3
+0157d624-177c-48aa-bf87-bbdb712571b2 2019-10-16 15:16:12.222+08 2019-10-16 15:16:12.222+08 15237a2c-3030-4ece-9901-f8c9c3d5e158 505c92e0-5a51-4372-8454-68c46eb977c8
+c86957f5-530c-4ac5-b512-5365d19eb260 2019-10-16 15:20:46.752+08 2019-10-16 15:20:46.752+08 ff5ffe96-ab0f-4368-af0c-52020e8d2188 e4f8f6a5-ebc5-4ad3-8ac2-9603b40fa7c5
+9111905a-0d4c-4bcc-ac79-7684bc5f4cac 2019-10-17 14:30:36.574+08 2019-10-17 14:30:36.574+08 2ec89b60-f2d5-4458-bcc7-de0050ff50f1 5dbf1e88-6875-442e-b049-c57705ec9fa3
+83e3a06b-04e7-43e4-8fa7-4be490b3c7cc 2019-10-18 16:29:31.409+08 2019-10-18 16:29:31.409+08 1ff1e182-a5de-4d2f-bf40-72a40dbc29e6 81bb8383-2e76-4a53-a51c-2b1a470edb68
+c07729f2-d361-4dfb-b4a4-f446e1c357c2 2019-10-20 16:11:22.51+08 2019-10-20 16:11:22.51+08 15e1b52d-2e21-410c-a442-b7c480cc07bb 1d228765-f4bd-489f-8f0f-ad293ef4aee5
+d7ac773d-42c4-4351-8082-67800faec129 2019-10-22 13:45:08.972+08 2019-10-22 13:45:08.972+08 a0350e1d-e615-4e4b-ad8a-ad2a9142f6e8 2b56d499-313a-4124-bef4-5c54154fae56
+30835641-2765-4865-81f7-eb6be1141373 2019-10-22 13:48:51.946+08 2019-10-22 13:48:51.946+08 8d553a41-0d8b-46ae-8329-ff94e6009958 3d84e10f-88bb-494c-b470-47da743c23b1
+9fed7b1b-d231-4887-bb58-96496651e88f 2019-10-22 14:58:00.165+08 2019-10-22 14:58:00.165+08 592da43b-5c27-401b-9118-c0519ecbc5b3 c7e29b9d-b8af-49f4-ad15-1141c32eb37a
+8d3c94f2-8a40-4580-8d20-e72ad0bfc5ab 2019-10-23 10:16:21.735+08 2019-10-23 10:16:21.735+08 3da2f371-f622-4f8b-b700-52af31eaa6b1 58b22fe8-94ac-4030-b318-2f63d5240416
+335e3e3f-4e3b-4b0a-8eb8-23b5ba9c347d 2019-10-24 11:26:51.327+08 2019-10-24 11:26:51.327+08 5b0c875e-50cb-493a-bb89-af4d008cc6e2 051f7494-ede4-4cdb-8ce2-bc6bf14edd23
+0d962a55-13fa-4e00-8661-6b7b26a416d8 2019-10-24 11:47:52.709+08 2019-10-24 11:47:52.709+08 ee19f59c-9bf5-436f-b3e9-3298da57448f c06ef9be-c07d-40ee-b1f5-87dd61bd518a
+f17f75ed-8b06-412d-935d-bf03730db5b8 2019-10-24 11:51:03.289+08 2019-10-24 11:51:03.289+08 c12bfa47-96c4-4d82-b508-7a8dc380df18 e9693610-a8bc-42df-80d1-fb9b1fd442dc
+74b71de8-f215-4803-9ad6-6c07780d11f3 2019-10-28 17:20:38.037+08 2019-10-28 17:20:38.037+08 b8b3091d-39a3-4ad0-9c49-ba4a7b85538d 33547e16-e9bf-4aec-b932-3725456e99b1
+4eb933f9-5fd4-4548-80e0-a83031709dd2 2019-10-28 17:22:11.038+08 2019-10-28 17:22:11.038+08 b28c3db2-7ea7-4311-9b60-ccd4af997bcd 93728943-47a0-4721-9eb2-51a320bd66a7
+69cf2ede-ec3f-4d4c-825c-27092174220d 2019-10-30 09:09:12.597+08 2019-10-30 09:09:12.597+08 98d04a09-cee2-4b6f-8250-160a824e6e27 d00b1e09-e4ec-4b38-827c-347361e24502
+93d01d27-df45-4312-91be-1f757836b9ea 2019-10-29 11:00:04.417+08 2019-10-29 11:00:04.417+08 d4227f5a-828a-4fe2-80c5-bb09da246b47 dbff7247-f39b-49bd-9564-df24d4a0b2b2
+c628561b-e971-49c3-9a14-dbc97c28d102 2019-10-29 11:32:32.718+08 2019-10-29 11:32:32.718+08 d07816f1-06b9-4acc-b33c-16928982cde6 cf03bc4a-827f-4f5c-acc5-a4652f32035e
+478abd6c-e511-4106-a66d-e651c135d532 2019-10-29 13:17:07.59+08 2019-10-29 13:17:07.59+08 39cebd11-af5b-47ac-abfa-db8cef103a38 221c0192-d454-4fea-a71c-6880c041c43a
+732b77db-a91a-476a-b5ee-1a203768ae18 2019-10-30 09:06:58.262+08 2019-10-30 09:06:58.262+08 9df36e4a-3670-47fb-b965-41c2704b6fd1 924170fb-d5be-4ae0-b90f-657bed50a717
+ba8ad74a-f9cf-49fb-bb70-2cda79140948 2019-10-31 16:01:05.965+08 2019-10-31 16:01:05.965+08 24a8c155-8275-4e27-8355-01550cda1374 94ddbc11-b96c-4382-ba8e-dce7be2f6cd8
+ac140cdf-d31d-493a-85e3-caf2d216b9f9 2019-11-01 14:59:07.358+08 2019-11-01 14:59:07.358+08 0a0eef97-0c71-486a-a1ed-fc6ff48005ec 289f79f9-8c66-46c4-8104-ea6f1e48269a
+1871004f-9d0d-4c51-90fb-de973da1fdd6 2019-11-01 15:01:02.831+08 2019-11-01 15:01:02.831+08 093428eb-fcd3-4adf-aad8-db3423f78c60 fd7c5e83-595f-417c-add3-4b8dc0a130f4
+4a96d5bc-8c45-41e0-8305-2b067699d7cd 2019-11-04 09:56:01.816+08 2019-11-04 09:56:01.816+08 75eb8303-ca9c-4afd-9f82-e4aaab2ed119 13d98625-2934-4747-964c-406642bf41ca
+b9ddca2a-7e9d-4ab0-85cc-b69740310a97 2019-11-04 16:33:47.711+08 2019-11-04 16:33:47.711+08 7979ff13-c8b1-4bee-986a-094e12da9553 8a86ac72-72e7-41dc-9e39-c7aaa351c922
+aab2109e-eeec-4dce-913d-4244eac1a814 2019-11-04 16:36:01.174+08 2019-11-04 16:36:01.174+08 5f39116e-f4a1-499e-85da-b67e0f93a044 a0385cff-9bf0-4b10-9d67-830883a5f188
+213d2431-fb03-417a-a9de-a79108b0513a 2019-11-04 16:36:44.229+08 2019-11-04 16:36:44.229+08 5ffc3472-8381-4000-a185-1f3a8d4ed263 363c087f-59a5-4790-9e0a-495fc46ee52d
+32ef7b0c-b5f4-40d5-b1e1-8da36f3bd444 2019-11-04 16:37:23.037+08 2019-11-04 16:37:23.037+08 aef1a81a-27fd-4648-9208-00b719cea8b9 de074497-49de-49e5-bde0-d7ff72a7abdf
+00a3b308-4597-4d60-8719-1875294b6396 2019-11-04 16:37:55.464+08 2019-11-04 16:37:55.464+08 4b24c098-2d80-49b0-89b6-9092c52053bd c2d79e3e-ee77-44fd-b514-47b315a14d29
+0f475dd2-de44-4cba-919d-9e78ffd07e2b 2019-11-04 16:38:29.872+08 2019-11-04 16:38:29.872+08 ad636ee6-c6e4-4d46-a2a6-cd1e8acc8e51 3ab162fd-2116-4967-94a7-c7e3f684d505
+023455ef-f8c6-43a4-8ea1-dc282fee9dc9 2019-11-04 16:42:05.512+08 2019-11-04 16:42:05.512+08 d17ee4be-2675-4d98-aab6-4b6ec7c271a6 c7ad8552-d9c1-48e6-af24-2cbe475048ec
+a11a7ec1-9313-48d6-b380-55f5d7aac021 2019-11-04 16:42:40.929+08 2019-11-04 16:42:40.929+08 0475dd0e-b02f-4a19-a933-dee73c76ef6a f6585a69-7dba-4119-b987-45b41298bd72
+48309318-b8ae-4d4b-a3a8-48126de2d7e1 2019-11-05 13:22:53.733+08 2019-11-05 13:22:53.733+08 2943a420-80a5-4d38-a6fe-68807623c20d 0691fd52-f558-4788-8131-c93e5021efa1
+20d339df-16bf-4781-ae00-5c008d56da1e 2019-11-05 14:06:15.043+08 2019-11-05 14:06:15.043+08 ee5dd742-7370-4a06-89b6-d40b3c6a0446 c787e7f9-4888-41b4-9ab2-6b1d3c1ade0b
+495d1787-1af7-48a0-8b31-183ee4855cce 2019-11-07 10:41:02.21+08 2019-11-07 10:41:02.21+08 26634fa3-2b25-4428-8b50-8d4e899a0304 cdb78dd5-791d-41a1-b977-135b319f643a
+46c7d0c2-1ee1-485e-a296-a1f3e08a1e36 2019-11-08 13:12:19.633+08 2019-11-08 13:12:19.633+08 7beea55a-7613-4d26-9003-485f6ae91791 98de9979-ee3f-49fd-a24e-6ffd754f32a1
+67b29973-8051-462e-9ce1-942daf4fd280 2019-11-08 13:18:41.6+08 2019-11-08 13:18:41.6+08 b4b08250-12e5-4346-99a6-64df0c58487b b4ae6323-5ad7-4484-a8dc-f3436e18620b
+3a1e8140-9754-4f16-8b4d-4cfc880d6700 2019-11-08 13:43:46.068+08 2019-11-08 13:43:46.068+08 2cfd28c0-bd76-4a55-af3e-d21b921263cc 827b0843-a207-4dc8-86ed-167435ebacda
+f5a2c142-ec68-46e6-9df3-1142955a033e 2019-11-08 17:23:25.366+08 2019-11-08 17:23:25.366+08 19d3b12a-ef96-4053-b50b-004075527249 626ee6c5-4367-4f3b-90b1-928ee5ae72c7
+36e31069-a07c-421a-816a-8580ed7091ff 2019-11-09 10:07:15.875+08 2019-11-09 10:07:15.875+08 e76e23fb-b7d4-4991-8687-a3a31084ce60 430c515c-04d4-442d-a803-1be1e55aa3f7
+d8d779d3-4080-4e26-8ab0-44ab4397e8e8 2019-11-09 10:13:20.23+08 2019-11-09 10:13:20.23+08 a556c96d-7976-48d5-9bb0-de9f1661654d b14b27af-b110-465e-a3c1-173d7135681d
+414c4ed2-7abe-4d21-9ac3-0fa9c0d422f8 2019-11-09 10:17:13.381+08 2019-11-09 10:17:13.381+08 8ef82507-140e-4675-8de3-21d0d91759a0 ea5bcd28-e40e-4d77-a512-57cbc5fd9230
+b36f97d2-1039-4d43-98b9-9e47cfc55f4a 2019-11-09 10:23:17.644+08 2019-11-09 10:23:17.644+08 ae758eae-e892-4168-a8c1-4ec7ceb81e5e c1425aa3-869c-4b30-bd57-1f2a3da95b2d
+7288d8dc-af73-4db3-9bdd-e36e7f81a24c 2019-11-09 10:28:16.284+08 2019-11-09 10:28:16.284+08 fd40883e-bc42-4776-b631-e353c0761303 1d6724bb-cabf-47af-a23f-4bedef2b0e4e
+415ea343-c757-491d-834f-5fde97036020 2019-11-09 10:32:45.08+08 2019-11-09 10:32:45.08+08 1535b2bf-3149-430e-97d6-32972b838167 12ccb6a2-95a8-4477-b07d-68d4ce5986d8
+fa4d16ea-0140-4fbf-9628-c742bb502d08 2019-11-09 10:38:35.815+08 2019-11-09 10:38:35.815+08 db875fbb-2c21-49f8-bac0-342276dec8ce 71a25702-d398-4011-bf1c-a0c2e7883dc5
+30463687-4b66-4f2a-892b-fedb5be0491f 2019-11-09 10:42:27.945+08 2019-11-09 10:42:27.945+08 956b5d84-5687-4405-803b-c9d1790c6ceb ffd786df-1c50-4887-8975-b4b7842bbf23
+6c0bd287-631f-412f-bb81-53c1055661b8 2019-11-09 10:46:16.067+08 2019-11-09 10:46:16.067+08 3746c474-0d8e-4d5b-8ca8-eb80c3a46d87 67704247-d8a7-4587-b27f-3c1559f7be34
+748b2d0c-c2c7-406d-a20d-71b20797d7ac 2019-11-09 10:50:51.697+08 2019-11-09 10:50:51.697+08 2eca1e8b-3f1a-4272-94c5-bfa4f8e6ab9e c0a9e5b7-2af9-45b9-a22a-b6a4a8b160e7
+bf4b35fb-cbf0-4a15-89ca-16fbf33dbed8 2019-11-11 11:43:37.468+08 2019-11-11 11:43:37.468+08 a1b787fe-741a-4eef-a65b-531baff33f6e 58fd4d47-a02f-4e6b-a495-106b88467e5d
+9f40ed05-2b17-4903-bb16-d326c363a3c4 2019-11-11 14:53:57.087+08 2019-11-11 14:53:57.087+08 578e459e-ee49-4fa5-88cc-9d2edcfbdcac ea642d87-00bb-4060-aa1f-d13a1aecd8a1
+d89e1e82-56f0-4563-8a46-a9dcc9cddcb5 2019-11-13 11:48:20.489+08 2019-11-13 11:48:20.489+08 f7ccec63-ff80-4c16-8c21-8a5f7c3cc971 ee36577d-5afe-491b-894b-8b398e24c706
+c3761819-59e3-4698-8b8b-f2c3bfea1c25 2019-11-13 16:49:53.576+08 2019-11-13 16:49:53.576+08 6fac5183-d1d7-4dcd-9507-e29c2eb60419 b6bfe859-8459-4311-82a6-7b1e4dbc7538
+f8e54074-66c4-42bf-b278-691607012c06 2019-11-14 14:06:18.526+08 2019-11-14 14:06:18.526+08 354d4c65-0d09-4272-8748-3e53d2c1668f 0fe6cf40-6755-4974-be51-0a77071794d6
+98985f7a-952d-4b42-b6a0-05bcf8d3caac 2019-11-14 14:48:50.994+08 2019-11-14 14:48:50.994+08 aef915e1-110e-44cc-8425-3532b1566b78 2479723b-feda-46f2-99bb-5ffd4ec390ff
+2aa305e0-9051-470f-80d2-733a83a90587 2019-11-14 14:56:28.579+08 2019-11-14 14:56:28.579+08 553043f1-1489-49e7-8685-476b53719b37 34114f6f-3b62-486d-9556-ed4bf17476f6
+db1abc9f-b347-4712-82eb-2838bbc84924 2019-11-14 15:03:17.501+08 2019-11-14 15:03:17.501+08 c6e9864f-e7aa-46c6-bc38-7cf89f82005b d00476da-54b8-4d71-b94e-c8a547f8baee
+e4349e83-dbd4-4f4c-86ce-14e054c08c6a 2020-04-13 17:26:55.03+08 2020-04-13 17:26:55.03+08 05c7bb43-2fc0-4f0f-8be5-af5d4da3c75a 8aa9e896-0f9a-4897-97ea-b698b71a1b56
+ad9e013d-80ca-4a83-a66e-4e721741e2c3 2020-04-14 09:46:47.134+08 2020-04-14 09:46:47.134+08 cb22fb01-45b8-4e12-83cd-75fb5dcf585e 1545c9d8-07e6-45eb-859c-71e14c99d100
+90de7369-90db-4d5d-9090-de0d1add1936 2020-04-14 10:12:44.818+08 2020-04-14 10:12:44.818+08 0928966d-ed3a-4cab-9e1b-32af22f5f89b 0a42cef2-35fb-41bd-88f3-884b49a30967
+80fb9378-7c2e-4921-8767-6b4e9b431266 2020-04-14 10:17:16.441+08 2020-04-14 10:17:16.441+08 fbafe139-6003-4dff-a59a-bf51b0d5ce75 bdfb666a-8123-4601-8533-db0a9b92ea55
+4e4be714-8921-4b2d-8569-8c295721967f 2020-04-14 10:33:18.984+08 2020-04-14 10:33:18.984+08 886912b7-fff8-4aff-84f4-04c043946eb0 2f9705c2-7b35-4829-ac02-aad5df643695
+7a45aa69-2566-45b0-a4e1-eecf2e8feaec 2020-04-14 10:39:52.929+08 2020-04-14 10:39:52.929+08 17324dd0-1385-4d70-92fc-49d595c88ed8 5525ac80-6984-4305-a58c-fdcdea1edfb7
+627cb5a7-9ae5-4926-9d6b-3fde7e16ecc6 2020-04-14 10:45:03.165+08 2020-04-14 10:45:03.165+08 b350cfa3-4960-4e96-ae63-0e0ab3319c29 d844ea04-2ebd-4f69-a1c8-f58b2da3d757
+edaa14f0-f9d0-4561-8231-4af5abbee4a6 2020-04-14 10:54:44.719+08 2020-04-14 10:54:44.719+08 2de26052-b602-4ad3-9690-aa841c9c3a97 756a5045-b519-4794-b341-6f0e9a8c63a2
+8a6f51d2-89f0-491c-9507-141c5474558e 2020-04-14 10:57:04.058+08 2020-04-14 10:57:04.058+08 6ddff0ae-11d3-40f2-8e9c-2ddf160489d8 e421f6ea-3b1e-496b-a895-4b7b541647f3
+c1e41651-975b-4232-964a-4a4604ebbeec 2020-04-14 10:57:58.086+08 2020-04-14 10:57:58.086+08 9cb1bdb2-4235-4ca7-bdd2-7b7719325a45 acbc087a-cff1-4103-ab5d-5a1b270a5b22
+8eb2cb64-ad28-4937-bd83-b42fd74e48f0 2020-04-21 13:41:09.091+08 2020-04-21 13:41:09.091+08 f605cba3-4024-46ad-b288-3c83568c5609 fb0ac975-a15e-47d2-accf-814c412ad5e8
+c0357d10-c663-4631-9c77-336ee774a2cf 2019-11-15 14:29:26.238+08 2020-05-09 09:23:56.038+08 bbd01f40-d430-4d85-95ec-e91a22fab396 bc09c546-2858-43b3-9a27-880b1601f475
+74dae663-879d-4ecd-a6df-1a4efb9bbe3e 2019-02-25 14:20:41.356+08 2020-05-09 09:28:11.542+08 0119f42c-7e17-4f77-81ed-3e55f31b8e61 da3c65bd-1c3b-4e2d-9c93-df7bc942e10f
+bc7d4c59-bebc-42f9-b284-8f8fcf7c132d 2020-05-12 13:52:16.104+08 2020-05-12 13:52:16.104+08 d54486ff-766c-4275-bf4e-b13e58574dd7 5b9e38a0-3fc3-4165-866d-fb5259c29c99
+04718253-0c0e-40e5-a35e-b7d975f7c0ab 2020-05-13 11:41:39.158+08 2020-05-13 11:41:39.158+08 428d318f-f610-4b34-8068-7a928691a7d9 328d73ca-efc8-4070-96bc-e219a26ebe70
+6888c0bb-b674-4d93-a1e6-36cd22ec37a8 2020-05-14 11:32:48.521+08 2020-05-14 11:32:48.521+08 aebaf729-ad98-42f3-a375-2c40c11065cb 9a7a64d6-cf0a-4182-9feb-1b5032169823
+8904a959-becc-4faa-bf35-4ca7f5e96ebb 2020-05-20 11:50:17.623+08 2020-05-20 11:50:17.623+08 bc9ee149-cefe-4978-99b6-9c1cec2f6b4c 79718313-a599-4e1a-ac4f-dae5017e2e64
+9d7026e6-0188-41bb-9e93-50ecdd2a2690 2020-05-21 15:16:20.175+08 2020-05-21 15:16:20.175+08 67095107-c333-487e-9e12-1d69facb6297 21c89044-25ad-4df8-aebe-8032f531f59f
+e0b75446-d8f9-4319-9093-e0f77d25793d 2020-05-21 15:23:07.822+08 2020-05-21 15:23:07.822+08 68b2ac58-25ea-408d-a955-797ded16d57e 2b2d768b-6b55-406a-8f2b-0e8d55efbd38
+408596b4-8710-4e66-8140-4e9ce3dc4d8c 2020-05-25 16:36:09.254+08 2020-05-25 16:36:09.254+08 582512d5-3343-4f9a-bab0-0312f0f83dea c5962a60-67df-47e7-9113-00cac921d0fe
+a0c19aac-9de1-4baf-951e-caf9fee535d2 2020-05-28 10:53:52.239+08 2020-05-28 10:53:52.239+08 5e890b4e-e5c4-406b-a48b-96ecf4963921 cdb61000-c726-4791-ac57-c3d79b4c32b6
+2ed415d2-65bb-4dc9-99b8-8c43239e40d3 2020-05-28 15:02:00.611+08 2020-05-28 15:02:00.611+08 5e62be71-2e05-4eb7-b50b-233e6ad91069 cc32c566-291c-4843-acdc-abe10b99aa75
+11138483-9f0c-488f-b441-5e5019b386f0 2020-06-05 15:02:09.834+08 2020-06-05 15:02:09.834+08 9b2759fd-8c00-478b-9168-f2dc2f1bab11 4c99cb74-82ae-4966-b8e9-db1a39ffd3d7
+2e0111d3-eec0-4bd7-a219-721e5b26ef94 2020-06-08 11:22:21.312+08 2020-06-08 11:22:21.312+08 11006daf-ca33-466e-970d-48c4889b56e3 16069271-c678-4ab0-830d-b550eb698a87
+b9f58426-988b-4f59-a904-771196d35110 2020-06-08 11:42:18.121+08 2020-06-08 11:42:18.121+08 865a418e-8597-4f29-954b-6953bf8a8390 901af8f9-5176-44d1-bdcc-ce352e485320
+83f46825-af0b-4cc1-a4f4-3b4aac770dfc 2020-06-08 11:45:42.735+08 2020-06-08 11:45:42.735+08 5cd21446-c4fc-45a2-b2d3-a2fb1ae08135 7e9a75d3-78b2-4190-af48-917872395dff
+76d38c8c-e797-4336-8fc2-615c2140e268 2020-06-10 13:43:00.452+08 2020-06-10 13:43:00.452+08 1ab8db7c-e725-4119-9c09-6555bb04ce5d 8877a5c7-25c7-43aa-9131-b6361c0a06e8
+ab59ef8a-edb7-4f43-b59f-6e154d4041f2 2020-06-10 14:00:54.731+08 2020-06-10 14:00:54.731+08 4a707f5b-4a1a-4c21-8c3a-01cc99f0d25b daac9c39-afad-4886-86c6-363bd5785bff
+3ec949e7-e336-46f6-b06b-6fa3ff54272e 2020-06-10 14:05:06.802+08 2020-06-10 14:05:06.802+08 33ad2409-682f-4b09-918b-9f6f9396a1c3 76e17746-b712-4967-a506-ecd13d7f0ecd
+2a386996-e20b-45fc-912d-78e6f198eabc 2020-06-10 14:06:51.15+08 2020-06-10 14:06:51.15+08 64351b5c-4b45-42d1-a60b-81f410c1d0b3 5a9d971b-ad1f-4360-966e-b7d83d502bf1
+e0d6f725-1817-4686-88ef-095f14218578 2020-06-10 17:07:04.29+08 2020-06-10 17:07:04.29+08 fb469083-0a30-4a41-a31d-b1bc0c0ed098 6d4212fe-6acc-407d-a5c1-10642accea1a
+92c5e468-7327-4451-bdff-892e0ceef8c9 2020-06-10 17:08:53.409+08 2020-06-10 17:08:53.409+08 71d81eb7-504a-4f9f-ad7a-1a7479fe82b3 55ca4f63-083f-4fdb-9406-bf94466cd4b6
+7362e37f-6109-46b3-8471-db379c5f9a8d 2020-06-10 17:12:06.754+08 2020-06-10 17:12:06.754+08 ad2045e5-d052-4689-b49f-fa1c42ccca5b d7b5d330-bd98-4e0b-8fe2-ed6c6241bd16
+a2a51561-6362-44b7-9681-9bacc78391a1 2020-06-10 17:40:40.521+08 2020-06-10 17:40:40.521+08 d7404d08-da09-4d5c-9443-0abdf60d1a13 f5c0e7a5-4bcb-4876-9cc6-f4d753afcbfe
+422e56c7-ef73-44d4-ad8a-3ebb5e3f32c8 2020-06-11 17:32:44.162+08 2020-06-11 17:32:44.162+08 ef2a2a56-6abd-459f-8899-2756698bd997 ff5565a0-4e66-4477-bd2f-9d481073129f
+a5489d97-75c1-4d8d-9957-252e53d14dcf 2020-06-11 17:41:16.038+08 2020-06-11 17:41:16.038+08 60d83c64-9bad-43d3-9920-7dad96154fd7 5f2cb212-f147-41f7-b054-13f9b47f7392
+6411f9b7-d265-400c-9d9d-9ce19eda43eb 2020-06-12 09:23:23.131+08 2020-06-12 09:23:23.131+08 f8148d64-f381-4893-8e57-854575f49d47 bc4fa7e9-4d2c-43da-ad06-0870638b5c4e
+d43e755d-b5cf-4b09-9c2e-f6ddffde75ef 2020-06-12 13:40:28.813+08 2020-06-12 13:40:28.813+08 c8ea2318-d321-46b9-9333-d2679ca7a30f 976c4e88-8f14-44be-9572-6cfcfe029da9
+d786fb8d-bee3-419f-8427-c9beaf5af80b 2020-06-15 10:48:35.013+08 2020-06-15 10:48:35.013+08 1f3783bc-bfe9-4abe-b7da-539a0ec57e34 0ab42106-9c70-43f0-8a3a-74694d0af133
+fdf64d39-243e-4afc-9f5c-ad6736f45e2a 2020-06-16 14:26:24.069+08 2020-06-16 14:26:24.069+08 ca3175c2-be00-4fd5-8738-d149df98fb25 0063aaea-c921-45c0-8ff5-ae08b21f3590
+1e096f87-8c3d-4f82-aba0-61c38ff55919 2020-06-18 15:15:41.705+08 2020-06-18 15:15:41.705+08 aeb4e21b-b0fd-42d0-8eef-e8d525576507 6b71bb33-2824-48ba-b989-a52719e86916
+2c2d2865-e06f-4dfd-a4bd-4e0a1805b876 2020-06-24 15:20:50.949+08 2020-06-24 15:20:50.949+08 018e289f-43b3-4cc0-a3be-2a903cef1fab 14a69a88-1670-4519-b2e7-b000cc9b26c6
+b59a7110-3c5e-4501-9c71-f21d2e5e1c76 2020-06-29 09:47:45.486+08 2020-06-29 09:47:45.486+08 ec37073d-d10e-4bf9-9e04-a5dbff374b3c be17d735-b121-426e-ad77-0c9ee0207d44
+293887cb-e6a5-4211-abcc-352231d06143 2020-06-29 09:58:29.166+08 2020-06-29 09:58:29.166+08 0a837b07-531e-4fea-861a-ff73f35fb9ba 779efde0-4e70-4765-857a-9b96bdcfc08e
+bbd8b4ee-e9a4-4f25-b9ad-a1e50cc7ebbd 2020-06-29 16:12:12.876+08 2020-06-29 16:12:12.876+08 adc0b723-3ef2-4cb4-af3d-c74d6fd9cafb c6d00d85-cb05-405a-b910-289bded0649c
+60f2d3ae-2c6e-43cc-9bdc-69be694cc682 2020-07-01 13:44:03.124+08 2020-07-01 13:44:03.124+08 43b79748-d5d2-4ff7-b9c2-4d8a115cf28f 5bd10d7a-1049-40dd-baa7-61fcf9a02b07
+7ddc2594-5beb-4089-9222-ea44e4870aa8 2019-11-14 15:07:44.249+08 2019-11-14 15:07:44.249+08 7e54985e-4293-452f-bd1e-27d54e8c9259 8ba5c52a-3159-41ff-99c3-f356a2442d1b
+e1b47129-aee6-4352-9d17-a0c342072ab7 2020-01-06 15:12:33.836+08 2020-01-06 15:12:33.836+08 c8044788-3713-45ab-a8f8-cd3b8b3db86f 1ccfad69-bfd5-4a03-b03e-42541ba41172
+041c6fcd-08f3-4b91-a595-c800859f5838 2020-01-06 15:12:33.853+08 2020-01-06 15:12:33.853+08 c8044788-3713-45ab-a8f8-cd3b8b3db86f e3dc2dd7-b809-423c-875d-fd4e8f551348
+9cfb4558-ba74-4474-9e0c-4fdf2abaac24 2020-01-07 09:52:02.058+08 2020-01-07 09:52:02.058+08 65968c97-efd5-4c64-9f9c-79017790f273 88d5b4cf-1f0c-4875-a5dd-6dee39e6505b
+063b437f-f903-467a-9512-373bffe846d4 2020-01-07 14:23:09.076+08 2020-01-07 14:23:09.076+08 32c69be1-0051-4e6c-8821-fe8b2a3f8215 a7735a3f-1762-45ba-80c2-79f16186e3a2
+26e90dc0-f5a9-485c-bf8e-2e941469cc2c 2020-01-10 10:53:10.6+08 2020-01-10 10:53:10.6+08 5d3b0ddc-308b-4ad6-93cd-7aefd34b600f 3f092ecf-4e4f-428d-9bee-add7cf19355a
+ac63eb18-0c55-40c7-a677-91d55929a19a 2020-01-14 13:53:59.882+08 2020-01-14 13:53:59.882+08 b4574024-8282-445a-b3d6-068582522d6a af7320c8-2821-44d5-8022-cb77f1d34195
+0d1b686b-85ca-4980-8620-a4ddd4eef3d2 2020-01-14 13:57:25.427+08 2020-01-14 13:57:25.427+08 4b26b77c-de95-45d0-b83b-ee0c410e20a0 d321d917-c48b-4c9d-a6b5-b12201ea05ba
+ea54ba6c-d61e-4c07-9eb5-4bc6ac32d31f 2020-01-14 14:00:56.911+08 2020-01-14 14:00:56.911+08 74475f60-31b1-44f8-b887-60013184ef38 458f1eb8-9e88-4975-b79d-55b0674ef142
+2f1a1a42-0e91-4c6b-bc99-9e067fe154e8 2020-01-14 14:02:50.269+08 2020-01-14 14:02:50.269+08 d3d60241-e4b2-445a-bde1-5e5e83bbcace 2c1aa332-b340-4d0b-b1e4-a88d533a9e65
+34fc48ff-27fa-4848-b4eb-c750bdeb9d96 2020-01-14 14:10:01.189+08 2020-01-14 14:10:01.189+08 11373c99-1270-4b66-9d6d-d19c6ad95118 16dfc6ce-8611-47f9-ae69-d9fa44e19138
+5e0577fb-a520-411f-b9cb-077a7aacefbc 2020-01-17 15:51:20.626+08 2020-01-17 15:51:20.626+08 8481bad4-e00b-4018-bc7f-33c5c4c800ef 019051cd-3f9b-4557-b417-ff2853ac7152
+74e8fb2f-f3ce-4ba7-aa3d-8bc46e1b76df 2020-02-11 14:49:28.631+08 2020-02-11 14:49:28.631+08 227b30cf-bef6-488b-b9db-9eaaf4e2f2da 73ebc60b-ecd7-4a5c-9bc3-977dba7d3d85
+2b4a3207-5449-4d35-8648-2a8a934f552a 2020-02-19 16:24:50.754+08 2020-02-19 16:24:50.754+08 1392402b-26fe-47c7-91d6-d380095aac9f 6cd932f6-1535-49bc-a14a-d30cef2b6cd5
+917da57f-ebdb-4df0-a483-6e99f414ac3f 2020-02-20 16:35:47.52+08 2020-02-20 16:35:47.52+08 37eaae27-d936-4e7d-8680-2d062ac5bb82 983de5ed-36e6-4031-a1f4-2eed91e1e680
+7270d07e-7be9-4343-ae73-fe1ba5f33be4 2020-04-14 10:33:35.175+08 2020-04-14 10:33:35.175+08 abffe5ee-8ad1-41b8-95f2-70a6d52220db 8c7dcb9d-43de-45f7-b210-5ace75e5ab7b
+2d0379be-b380-420d-b411-11101400e3ff 2020-04-14 10:40:07.799+08 2020-04-14 10:40:07.799+08 9c9a0091-2f1b-4c1d-8b7c-ff60c41fca6f 3fa86c58-864f-4ace-ac19-a7c2e63273d8
+9113f51b-7dec-4169-949b-2275b1cfe05f 2020-04-14 10:45:14.158+08 2020-04-14 10:45:14.158+08 53e381f9-db33-430e-8304-c344985c37f6 bb16892a-4da0-4e00-b9c7-20b2e528b980
+f34850be-44fe-4545-b7ce-eef23a32361a 2020-05-14 15:02:47.409+08 2020-05-14 15:02:47.409+08 11936f12-8bb7-42ec-8d27-5e01eb5c4ba1 e982a7aa-e38e-45b3-a537-bdcfe35d468a
+45216782-7ea3-4afb-ab13-2480db30991f 2020-06-11 17:08:14.322+08 2020-06-11 17:08:14.322+08 38ab5b80-b75c-42f6-b9a8-cb1e96603099 1052e946-4d2a-4d30-8789-5f05eb88e1a8
+fc232803-13da-421b-b6db-dab0ee764254 2020-06-24 15:21:21.124+08 2020-06-24 15:21:21.124+08 dac5aa29-4b9b-4dd0-9200-afc564bb32c5 a7a8865e-320e-45c0-b1a3-09d036a338ae
+2a60d63b-dfff-48ac-8ec9-a8b25a794fca 2020-07-02 10:41:52.555+08 2020-07-02 10:41:52.555+08 e372ec30-5000-4a22-90ce-923829b2d608 3ce62d6a-067d-4a2f-8a05-34e60b35bc4b
+c3783c5c-5788-44d3-b962-d86292245d13 2020-12-25 12:07:30.11+08 2020-12-25 12:07:30.11+08 cce324d2-9c6a-4637-a928-b6a40648a114 1feaeb31-f479-466f-9219-95eae1bd10a5
+fb06d9ff-32e8-442b-85b7-6c6290989819 2020-12-28 14:13:55.62+08 2020-12-28 14:13:55.62+08 9b051f3e-8ded-40e9-bdce-c5b5723b3858 7d84ff9a-1a34-4ad9-8aea-b297a9ed6ef5
+22cf6e0c-e01a-4c3d-a66d-9e7a07c8e744 2020-12-31 13:46:30.846+08 2020-12-31 13:46:30.846+08 7ce42d82-9728-4463-afd2-906136b87ad7 c99292ce-b061-45bd-9b6e-e8b245d590dc
+80f70aa3-47da-4d37-960b-eefb37793ffb 2020-12-31 14:25:20.961+08 2020-12-31 14:25:20.961+08 8cb0c7e1-fe83-4b63-9f7f-7598487ef57a a9da4397-40d0-4c10-8344-38b3959d6b40
+183030a2-de2e-4f1c-9e59-9ab67f8a09f0 2020-12-31 14:28:18.784+08 2020-12-31 14:28:18.784+08 e673c024-edd4-495c-a9a9-c5c6306ed6d0 7db61a3a-b4fd-491b-a05a-e4f380f2a393
+fd26ccab-128f-4f0b-8bb0-46ed9085e54a 2021-01-04 09:20:07.817+08 2021-01-04 09:20:07.817+08 e0856580-9791-4d76-8d0a-4673e9e7f1bd 6aa6d215-9d88-4b12-bddf-55f7df1a9f8c
+4340a7e8-e4b6-4405-aa91-d027d837d692 2021-01-07 10:06:02.499+08 2021-01-07 10:06:02.499+08 a68a5258-d2d1-40df-beb0-710a190c1175 5eae67bd-91d8-4f16-a91d-5c3131acc7f6
+004c88de-2e68-40b3-9551-ca923ccfa3ab 2021-01-08 17:49:15.381+08 2021-01-08 17:49:15.381+08 9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22 318cfca2-7541-4831-898e-e01728bbd146
+3d6be0a3-e93c-47a4-93ee-21bcbc2dd65b 2021-01-11 13:06:59.479+08 2021-01-11 13:06:59.479+08 68049b31-8deb-465e-a468-2cbafc9b8023 353a977d-4e30-402d-b68d-fdc968f0ecfd
+f6ba7c72-b7a2-494b-98b3-fe6f1e5cc5f0 2021-01-14 14:36:35.524+08 2021-01-14 14:36:35.524+08 a9e161b5-80ac-44f8-b7e3-eab4baaab9d8 3ed67224-6373-43aa-88bb-5525f307f389
+9dd2a8d5-3354-4d18-a0ed-83e6cf196c8f 2021-01-18 12:37:46.543+08 2021-01-18 12:37:46.543+08 b0ddaaab-3ad2-4674-a102-dc2459657a7d 5ce61c17-343b-40d0-bf89-b0f98ec0655b
+d3e15535-e73a-4aa3-a69a-1baeb19e6763 2021-01-18 14:02:08.26+08 2021-01-18 14:02:08.26+08 d1124662-5294-40cf-a8cb-6cac92776c40 d10c20a7-bf0e-431f-8b46-af16b2dc3493
+72076068-6a59-4b9c-bb5f-c51ac07d0d26 2021-01-18 14:04:59.4+08 2021-01-18 14:04:59.4+08 1de99810-efe3-468a-a89b-0d42d5933634 ac89a7c8-8b35-4dea-ae35-7083555aa058
+09b98a15-11b4-488c-927c-ed0cebd5edb3 2021-01-18 14:09:49.702+08 2021-01-18 14:09:49.702+08 cd504e3c-bb6a-472e-bf23-eac4d2c0ca1a 25177421-56bd-4526-bb61-80bfbdac6734
+945f3544-5e32-4c67-95bc-63e68db0da39 2021-01-18 14:14:29.667+08 2021-01-18 14:14:29.667+08 cff46266-6321-44f0-a893-0a66249826b1 37b35270-ef60-478e-86b9-af7505a103a9
+a72ecaf9-d102-44d0-824e-c7b36036539c 2021-01-26 15:42:15.156+08 2021-01-26 15:42:15.156+08 2df0457d-dcdc-43a8-b9be-cde18d3e3f6f bcd81306-0c52-4917-9f4e-1f12b2aba1f1
+88bef009-2f5d-4ff0-8492-fe94c9640f04 2021-01-26 15:59:08.549+08 2021-01-26 15:59:08.549+08 b781e844-b4da-4a6b-9420-bd6796c7188b e1bc079f-babd-4346-85d1-114dbaa2c21d
+7c3a01de-9e5b-4d81-b638-3ed148bed5af 2021-01-27 13:52:00.552+08 2021-01-27 13:52:00.552+08 ad519e49-e9a4-46e1-8166-c56e97bac6d5 638f0588-b801-4d2b-8670-ca4fdec60d41
+ec52dcba-227c-419e-8a99-b3ff3c4ee7ab 2021-01-27 13:54:55.098+08 2021-01-27 13:54:55.098+08 4f43df6e-9984-45bb-9ec3-62e789fb6b72 9a540453-32cf-40af-adda-95642eb383a7
+40105a80-4d89-4df7-a208-a86d276b7898 2021-01-28 08:50:30.366+08 2021-01-28 08:50:30.366+08 c9b1921e-62db-4dc5-b15b-663afe09388e 90588043-412c-498f-9155-0685988d8bd0
+36c0f2cf-6bb0-4094-a979-6f85d52e16e7 2021-01-28 09:37:35.501+08 2021-01-28 09:37:35.501+08 7dbd6789-715f-43ad-94d2-ca3ede2c52e2 fab87677-888e-4518-8659-53b5dfd3c6a3
+96455559-fc63-4faa-9630-1c7710da4e71 2021-01-28 09:41:22.898+08 2021-01-28 09:41:22.898+08 40e24053-00bb-4c0d-9d0d-6b44178ab0f2 65efe93f-1a17-4eb4-a179-ce76ab6c17e9
+c4005b7b-0e5b-469c-8bd0-14a00d2fa010 2020-12-29 14:11:13.815+08 2021-01-29 10:21:07.577+08 6680d7d5-905b-4311-8a63-a8c11b0c765a 01bcec7f-94a6-4e4b-aa40-0bfbc6e7a7cd
+91eeae41-4cdc-42a0-88b2-65da68a675a4 2020-01-14 13:59:03.98+08 2020-01-14 13:59:03.98+08 ce7d8a22-74e1-4ba0-b501-8f0ca23a4b27 3a9c27e9-df8e-4ad0-875d-c9de6327dce2
+3e30bbb1-9ca6-47c7-bdbb-e633e484a496 2020-01-14 14:04:32.658+08 2020-01-14 14:04:32.658+08 9a4964ae-b88b-47d8-8007-8ddcf068d4bf 179fa641-a8ed-484f-a6e9-72b1f93e0391
+41ad8a54-3e34-4ccf-9109-89f1ab041b8d 2020-06-24 09:49:50.6+08 2020-06-24 09:49:50.6+08 a8cf8420-9ce0-464d-8af7-1940466015bd fc33cf83-21e1-4e98-ad5e-2389e836de21
+fece2113-5fa5-45c5-bbf8-dd770d3aec3d 2020-07-20 09:56:07.54+08 2020-07-20 09:56:07.54+08 a15cd089-6db0-463f-a927-c36d1dca96a4 45f68805-d64d-425b-834f-f6944a46c9b2
+2d2eb102-f9f7-4b23-a1a4-deaaecf0855b 2020-07-20 16:29:58.327+08 2020-07-20 16:29:58.327+08 d600b35e-ef0a-4115-9af4-779c7bd726b9 66a6b0b4-56e0-4f0e-8850-c776a629c121
+34f10dc1-d702-40da-89ec-359a4fcaf9b2 2020-07-21 10:26:44.218+08 2020-07-21 10:26:44.218+08 3d72c148-2e62-41d7-b0f2-528fd13952dd a40c154f-9e69-436b-9d23-e0fc39b97725
+386bb330-7909-44f4-8c5c-c54b86bb4001 2020-07-21 15:31:35.598+08 2020-07-21 15:31:35.598+08 47e859b1-fd7c-4d91-b482-25d7a9547047 e14de5eb-d92b-4081-aa14-3c3849bef9ca
+4a3dec9c-0ae5-4a09-a6e0-44f350986583 2020-07-23 13:38:56.16+08 2020-07-23 13:38:56.16+08 601d3b7b-0a17-4c81-9200-b0be68df23c4 efe8225f-4482-4c27-8139-9b81ffd35456
+4fb822e1-8f00-45d5-9aa6-ef910d5dbe29 2020-07-31 11:07:57.665+08 2020-07-31 11:07:57.665+08 3e0cbd36-be46-4841-bd03-26f5540d8ceb db3e4e5b-f023-40df-862c-4d8d0c48d0c2
+964d4c85-a0d9-49e1-8a99-5da7d569b36d 2020-08-03 09:13:17.83+08 2020-08-03 09:13:17.83+08 1093449c-fdd4-4e36-9153-53b8e4be297d 2a70f392-6f2c-405a-a65f-7e4491610af2
+f596421d-9f0a-4588-a133-2df0bc7e3129 2020-08-05 16:54:52.116+08 2020-08-05 16:54:52.116+08 dd71ac62-451e-4f14-a231-1209612ec59d 38f5fb03-c53d-42c6-9a3b-b18d127d383e
+9dd4b3d1-e337-4066-a45c-1696e124ba35 2020-08-05 18:03:46.965+08 2020-08-05 18:03:46.965+08 c1159812-0b0e-4d84-bd67-8328afd12dc6 fa16930b-9773-4678-86e7-3918128f1dc9
+4c0b899e-1e7a-4a65-af29-a0301652b08e 2020-08-13 09:48:00.044+08 2020-08-13 09:48:00.044+08 4dce787d-0acb-41d1-a959-a043d0546736 a1657550-326d-4cc0-8c1c-d0aa2a208d37
+c1e86ce4-b5a1-458f-a9b1-b691a963ce3c 2020-08-14 11:53:53.195+08 2020-08-14 11:53:53.195+08 06350cde-bd6e-495d-8ef5-c318d3694381 bb9ca53f-ddab-44b1-838b-f1edc018fb6d
+d5a33cc4-1ae7-47d0-88f9-0c5aede3de03 2020-08-14 15:25:23.096+08 2020-08-14 15:25:23.096+08 dba91da4-00da-4cef-a91c-f39c97f9b45a fb637416-6bbd-4ce3-8785-55c7a1e1993f
+3ef0ed82-f4ee-43bc-972e-c61bd242c140 2020-08-14 16:22:21.551+08 2020-08-14 16:22:21.551+08 2c774eef-6573-419e-8726-e505ae3447f2 0a996db6-1ea0-4869-9d7e-7d4f42055999
+ac82bb78-1cf5-4fba-8494-10e4f42bfbd1 2020-08-14 16:26:59.95+08 2020-08-14 16:26:59.95+08 a53c2dac-206d-44da-b18f-584b9ad1deab 0fbee95d-d04d-4eb4-96f8-5b7a88a695b1
+a9d56b5f-f8f0-4296-82fc-9f70f9f00342 2020-08-17 14:07:48.154+08 2020-08-17 14:07:48.154+08 ba9214a7-0d02-453f-ae49-912a45fd027f 88d4cda9-f09e-4941-b443-9dc8a4436f90
+b9949db8-4e27-4735-89a2-17cbf96b3164 2019-02-25 15:47:53.77+08 2020-08-17 15:06:13.568+08 f4d6d7aa-f0b7-4b93-b291-5fb8305a4318 2c650f14-4abe-465c-a46e-a58b61e31607
+0a417921-09a7-4acb-ada1-92a4720a51eb 2020-08-18 11:14:36.639+08 2020-08-18 11:14:36.639+08 f1307ae1-f85b-4d6f-b239-eaa2c46d6b15 89c95ea2-6cca-47b2-aee1-cab6eed0e1a6
+baa8c03a-09d2-4e0f-a2e8-d6985d6d2be7 2020-08-26 13:33:36.877+08 2020-08-26 13:33:36.877+08 847df328-4c47-460a-a6dd-cf1203e5bd27 9ddf05ea-8a4e-4c98-bb4d-ce137ddfcfbd
+dc308039-1cfc-40da-8c4d-9d62db82c192 2020-08-27 16:13:15.876+08 2020-08-27 16:13:15.876+08 2f22d155-cb55-42be-9323-14e5da7f8912 e95b219e-b28a-47be-a720-4a8bdd1cc484
+bec2ff0d-3e3e-4b09-9844-3ec13872e891 2020-08-27 16:22:16.994+08 2020-08-27 16:22:16.994+08 1caff493-5e1b-472f-a65f-502a9d9865bd 718f3c5c-ef47-408e-9eda-38e1c3bbdd2a
+437faa48-d770-409e-a8ea-1c2579dddc60 2020-08-27 17:24:28.557+08 2020-08-27 17:24:28.557+08 b387422f-44fa-4d9e-a701-d6c9c57d630d 2c9fd49a-e60f-4df2-9ba6-bccf7891b1e6
+bab6f76a-cd7c-424e-a5ad-99b694fed116 2020-09-01 10:29:11.214+08 2020-09-01 10:29:11.214+08 f2ad29ab-0075-41c4-9972-59da62b556f4 4107b08d-9406-4946-bd4e-bb974e47732a
+f47b61ec-c9a8-4b31-a0a0-9fbbb67cf61b 2020-09-01 11:26:58.016+08 2020-09-01 11:26:58.016+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 c512274c-ac24-4850-af88-419cb4f76e9e
+1973746a-3ead-4f41-afa4-e91f35af5ebd 2020-09-02 16:46:19.763+08 2020-09-02 16:46:19.763+08 efd36daa-1bdb-44e0-8f90-00cf67f20abb c512274c-ac24-4850-af88-419cb4f76e9e
+6a91feb2-0180-482c-bab0-d6774da77f71 2020-09-03 16:18:46.748+08 2020-09-03 16:18:46.748+08 88cb50e8-fbcc-4dd1-a18d-915017dbee86 ceafa9d0-f201-4545-93a4-f683b05ac5a4
+c8b3d37e-17f4-4fe8-bf49-937a2e8785b5 2020-09-04 13:22:13.079+08 2020-09-04 13:22:13.079+08 036f8003-a82c-40bc-a175-7cb81f4da7c9 0874fdd8-f0a4-49e1-9529-25857531ab35
+a4bf532e-0eff-4e63-9742-a2877e10dc81 2020-09-04 15:30:52.504+08 2020-09-04 15:30:52.504+08 ed73bd4c-f957-425b-bc61-b1a49b812aba 30c49a1a-f920-4de0-b130-43a7c2e55e37
+8318cbd2-2136-4e5e-888b-9eda9d40e5a3 2020-09-07 16:10:09.078+08 2020-09-07 16:10:09.078+08 d04cc631-3bc1-496c-af61-fd0ff0ff3e85 500cb3e6-5fad-41f5-8d2c-4e3d46b2c1a6
+30dc440a-0c1e-4b31-b068-ddebd522c0bf 2020-09-07 16:10:09.086+08 2020-09-07 16:10:09.086+08 f482d51a-31e4-4f0d-b32e-184d1b527094 500cb3e6-5fad-41f5-8d2c-4e3d46b2c1a6
+04605992-21dc-4f1f-ab54-13d1c776238b 2020-09-10 11:15:15.552+08 2020-09-10 11:15:15.552+08 2862c1ac-f3a8-45b9-88e8-abd2591928d4 4609913f-cc94-4682-a556-127da768b954
+0c1ca356-ca84-411d-baa7-a0d8b7688db2 2020-09-11 13:29:23.128+08 2020-09-11 13:29:23.128+08 d140758d-3441-4156-9b00-7de4589d7f9c 9f8055cb-759b-4594-b5ac-09653a838120
+6084e775-3d6e-4551-86be-0ae68342ded7 2020-09-11 14:36:39.604+08 2020-09-11 14:36:39.604+08 f928b4a7-3c4f-42bc-aa12-32d1b835c3e6 ff49683c-d0d3-4fb4-a3cb-e79dbedbff42
+95ea5872-d2f7-4fe5-8011-d489f31b13ea 2020-09-15 08:51:22.062+08 2020-09-15 08:51:22.062+08 c438d8c1-8b99-41e6-9cc0-5339b773c3bb 3e449c37-d3bd-43ae-a79f-bd187b76007e
+06d5de1f-c7d8-40bb-9385-8ffa80788402 2020-09-15 08:59:09.165+08 2020-09-15 08:59:09.165+08 40df1f23-955c-462f-b233-785df1759d7f a43e41e5-da9a-4f68-be1b-d5e69dd4735b
+0001d9ac-8793-4380-a3ef-1424d4256283 2020-09-17 16:56:54.47+08 2020-09-17 16:56:54.47+08 cd020968-8d12-4951-a6bb-0658b8ea6799 30d0291e-acce-4511-a468-7b15a87262e2
+77e318b4-cf12-4532-81d5-796e1ce863e6 2020-09-18 11:09:37.82+08 2020-09-18 11:09:37.82+08 2b1cc86c-c2cf-4037-8280-b5ae28fcab8e c48b7e59-f422-4b80-a712-b414a713240d
+375a9a58-069b-4a8f-ad47-7a5f5c654c2a 2020-09-21 09:55:14.291+08 2020-09-21 09:55:14.291+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 6b32a15d-6fa0-4856-bf23-2bbd8355ab79
+10372fa6-f504-47e7-957a-8410494ebc34 2020-09-21 09:55:14.298+08 2020-09-21 09:55:14.298+08 ea8b2fda-2249-47bb-a0e7-eed50eb5de24 6b32a15d-6fa0-4856-bf23-2bbd8355ab79
+e0f75fd1-dda4-4be7-a302-375d7503e364 2020-09-25 08:57:42.853+08 2020-09-25 08:57:42.853+08 0ca15a19-3a6b-42c0-8336-096b8ebcc01d 6caf6a7c-66cc-4a2d-96f0-ffe8f989d427
+5f617b46-3850-4e5e-b2c5-c99129f75dbb 2020-09-28 10:33:27.948+08 2020-09-28 10:33:27.948+08 3817ac1f-6e39-4157-b1af-99d143da6fbf c852dc68-be4c-4e55-abe9-657778e17115
+8d4f80f6-610f-45a5-aca3-7cf36b33ae5c 2020-09-28 10:40:08.048+08 2020-09-28 10:40:08.048+08 7332ce81-93c4-4c1c-b659-caa2fc92a94a ffa3ceac-455f-4f77-a6ff-9672588c611f
+c9ee6685-a588-4a6e-9119-078f6ded9752 2020-09-28 10:45:02.903+08 2020-09-28 10:45:02.903+08 7a6e0cbd-c0db-4dd6-92e7-94092fc071dc 83f56f79-81e4-4274-9385-6ad10247f3f4
+a10dbc87-a975-42c9-8a87-c944c443d900 2020-09-28 10:45:02.915+08 2020-09-28 10:45:02.915+08 e94da122-530a-4e1b-af6f-da5b6dfb2a29 e86b43e7-33da-4bd2-8984-7d4a79397349
+9a795c1d-4d9b-428f-a934-36e4843dd778 2020-09-29 09:40:44.569+08 2020-09-29 09:40:44.569+08 59e10250-dfd7-4381-8c22-cca2e7a51ccc 2c6aef25-4dec-40f3-9c11-0d31971ba699
+5993be4c-de02-41be-8c89-cfb14c693cfc 2020-09-29 10:15:54.181+08 2020-09-29 10:15:54.181+08 c76bd374-4160-4615-8ba7-63a2f19f790b 0164eb27-0f0d-485f-a6fe-aabce5f65b3a
+2d2cdef8-b7d8-442a-b376-e27e00fc7578 2020-01-14 14:06:32.994+08 2020-01-14 14:06:32.994+08 0ae8ed9d-56c2-4b07-b81a-a23a10192d1d 30f53c73-6ccb-4c44-b639-6100f39a6df2
+b2b736c1-d35f-4995-bb3e-c89751676889 2020-02-27 21:02:55.287+08 2020-02-27 21:02:55.287+08 458b31ce-11c3-4abc-aeee-3cdaa45215c2 e5a65814-7d06-41cd-b77e-4efcda706d73
+61a5293a-c1e2-48b1-a508-e0c269c2f3a6 2020-03-01 20:27:22.725+08 2020-03-01 20:27:22.725+08 cb88ad52-fd36-4f48-8946-4e33300d3b1e e95096f3-3c08-4f2c-a05d-474bc1c21b61
+c81cbf4c-8f42-4fdf-82e0-2bce93080c53 2020-03-07 16:35:47.296+08 2020-03-07 16:35:47.296+08 b6fbb28e-3823-4d97-8ade-baadda4ca2f2 61a7cfea-bccf-4f67-83f4-d08707f2e363
+3e11a3c0-194f-4647-8493-8fddb10a1906 2020-03-07 16:35:47.32+08 2020-03-07 16:35:47.32+08 d8a43904-24f4-496b-acd9-bc41e483b144 61a7cfea-bccf-4f67-83f4-d08707f2e363
+e8170cbf-064b-4b03-9d18-4cf95fe89215 2020-03-10 13:52:34.951+08 2020-03-10 13:52:34.951+08 83e59e62-4f0e-438c-af09-6988ceca1a91 c45ebf7a-994c-4eea-b3f6-45a94048d9ce
+4a4d5a00-b9cc-4f36-b003-cf938cf866c6 2019-02-25 15:46:53.847+08 2020-04-08 15:00:03.087+08 88b4c158-2959-46c0-950e-aa1f77962dbc 0fd6829f-47b8-4f06-8d61-7819cf367cb9
+18a13ad8-448a-49da-9d17-83bdf471f976 2020-03-12 15:39:58.779+08 2020-03-12 15:39:58.779+08 a347cbc7-41df-43d5-96a1-0424f00954d5 4722c16e-a855-4eb0-97d9-e99c47c9ef72
+13410138-9f60-43d9-b5ae-c76574761d5e 2020-03-13 15:41:34.944+08 2020-03-13 18:38:58.063+08 dc8f2875-b635-4147-9a96-92b72ccadfef e852da81-b1c4-4d47-b3ef-39e64cbce075
+561eec37-4bf4-4e79-b1a5-9903087b07a5 2020-03-13 15:46:07.553+08 2020-03-13 18:40:35.248+08 27cc4200-3c65-481b-92b3-1d747cbef33b 0dad32d1-e9ac-4632-8096-80bb0f46aa03
+cd1a6812-b5c1-45ad-8ee3-0fdee5d5264d 2020-03-13 17:42:56.783+08 2020-03-13 19:09:27.636+08 f51d3996-cd2a-4ea0-9430-94c6f5b5268a 4d41141b-c17b-42a1-89f4-4fadda5a662b
+c59c15b9-0042-4373-8c07-48f07ae98914 2020-03-19 13:26:13.657+08 2020-03-19 13:26:13.657+08 e5576d87-40b2-472c-88cc-78bedaddc163 4c440444-0e57-456c-8f11-981d32662ddb
+30ae9291-109d-4ddf-834b-73f8a8ea66ea 2020-03-20 11:16:14.053+08 2020-03-20 11:16:14.053+08 8a226009-de6a-448d-8fc8-1056e5a62c7c ab673ce3-dfbe-44b9-9694-bb3d71016009
+f8b9c61d-4338-4f6a-98be-cfecac3e2c69 2020-03-23 13:05:37.719+08 2020-03-23 13:05:37.719+08 9474176b-8d55-48c0-bd60-1bcfb6da0576 f5be1c9b-cf89-4857-b349-a43edf06b737
+17a1ce66-0d6a-4bf5-8389-0f57ff7c365c 2020-03-23 16:30:30.305+08 2020-03-23 16:30:30.305+08 01444399-9e03-4682-bb70-3b5137cd469e 5db618dd-db52-4c2f-9ced-6b16d708ddae
+a093e79c-bb47-456f-b283-5927c67edd85 2020-03-23 17:25:42+08 2020-03-23 17:25:42+08 919db10d-5cbf-423f-ac9b-035d06ecf13b 9ddb1044-aa3f-41ad-a145-d7b53882597c
+893f311f-a2a7-4811-8ee3-b3cb1a9a7ab1 2020-03-18 14:12:05.064+08 2020-03-27 17:04:15.016+08 974fa08a-e1e6-4e6b-b3ac-19e3863675aa 73a9ac3e-6c5a-446d-b67f-911d54f5301c
+cf3cf279-5d2c-4921-b65c-ce72eb2cc9cb 2020-04-03 17:27:44.773+08 2020-04-03 17:27:44.773+08 34d873b8-b4cf-4313-ae19-a2fedae19eca ecf245cf-eb1c-424e-87de-581473dee579
+377843ee-19c3-4707-a03e-68d506e84439 2020-04-03 17:31:33.078+08 2020-04-03 17:31:33.078+08 a868b3a8-85ed-4780-a0cf-9d0206e3cd58 7190cc29-33df-48c4-b5fb-f67674d4b819
+0318ed51-aae4-4e29-a0ef-751c26a313fc 2020-04-05 12:09:45.45+08 2020-04-05 12:09:45.45+08 616814a6-1aac-4201-b9cd-8164fd2198f0 9631f2f6-6210-42e2-a6de-6bba2aab0c84
+2aaa366d-19ba-4133-933f-e91b9293df15 2020-04-05 14:13:19.308+08 2020-04-05 14:13:19.308+08 87fb5477-8056-44e6-b0a0-5cb1e55703d8 00b7975b-2a18-4146-9e51-b8d8b71550d8
+c1d9eaca-1fdc-4d4c-8976-18543f1d6bf3 2020-04-08 09:44:52.322+08 2020-04-08 09:44:52.322+08 8f9706bb-e71b-448c-b32d-4b4cfe420ddf 50b8d95e-d224-4c41-ad37-affb54641460
+96efa9bd-7a70-46b1-afa0-f566345cfe72 2020-04-08 10:43:30.799+08 2020-04-08 10:43:30.799+08 8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0 1fee9b9a-9944-41aa-928a-c015f61bb511
+ac018bfb-3922-4269-bc64-7eaa5c70f6e5 2020-04-08 14:13:21.718+08 2020-04-08 14:23:47.278+08 b912ee89-771c-412b-b6f1-43fd55aa3743 e7a92768-7533-4715-afc6-80476f5f2389
+53a9baf5-3ae5-4594-b45b-debce240b698 2020-04-08 14:18:11.339+08 2020-04-08 14:24:17.929+08 3d4528b4-3198-487f-9a4f-60b0b142f4fa ceff386a-bc6e-46c5-a13a-d7380cc60803
+61afecbe-490d-48bc-8823-5581565b9dbd 2019-02-25 14:14:48.877+08 2020-04-08 14:31:20.865+08 cdf26baa-f8c9-435a-ace0-c2eff041d8c2 c9e0d0f5-9c30-4188-a161-a46d017455d0
+8f821884-3347-4674-ac5a-9fdf5e1eb0bf 2020-04-08 15:29:32.164+08 2020-04-08 15:29:32.164+08 235e50cf-8332-4752-ad90-735b21a65636 f9c22bc0-1320-4f70-91b8-20cb8bcb6993
+df8da39a-bfdd-4635-a524-c578e81d1caa 2020-04-08 15:30:15.66+08 2020-04-08 15:30:15.66+08 43f54168-c6b9-4a10-af52-08fea895afd5 46c82a52-a4f0-4d35-8358-d9c757f40187
+f95e2252-9fae-4696-93a8-672932c0d32e 2020-04-08 15:30:30.781+08 2020-04-08 15:30:30.781+08 ac9005d2-5ca6-44c7-a4c2-d9dc1b66738b df8f6580-c6ce-4fc4-92d7-819c27dcdb40
+afa842f4-4d64-4b73-9133-0a4de7a1af08 2020-04-08 15:57:37.346+08 2020-04-08 15:57:37.346+08 ec4bef46-3f33-4abc-bc5a-fdd02804546e dbd1879f-ee6f-490b-95a2-179458f48a30
+587ad961-bc11-4d2d-9a21-1ff39b4dcf7a 2020-04-08 15:57:59.956+08 2020-04-08 15:57:59.956+08 facb0a36-aad1-464a-9e62-5982e7f96038 4ec9c481-f55b-41a8-bf3d-617f0d62fbd8
+6acdb817-e61a-4f6d-a597-30970b439ccd 2020-04-08 16:12:37.543+08 2020-04-08 16:12:37.543+08 22d12570-1067-4643-901f-035e0bedcd19 86328969-acb0-4364-940b-b059ee66f415
+8db1044b-6074-4326-9e82-fb815e9f79a7 2020-04-08 16:18:59.692+08 2020-04-08 16:18:59.692+08 c118d176-8dae-46d2-af7a-637b0b4ad23f 83da887c-5273-42ad-b513-502c3e584888
+a333b61f-483b-4eb2-8e07-51b088c1750d 2020-04-08 16:23:51.262+08 2020-04-08 16:23:51.262+08 ab5284c6-527b-497b-ad77-a59c41b4202f 41b65cf5-a40e-4714-9539-cde9205d35c0
+49faa7d5-30b4-4b26-916d-5682fba0cf65 2020-04-08 16:36:50.895+08 2020-04-08 16:36:50.895+08 93a512ff-ed6a-423c-a66b-0a9c882a1f7c 4bd7b385-1d5b-434d-954d-a0f51efdc4de
+ffd54d54-3143-46ce-99eb-760dcb981f9b 2020-04-09 09:22:36.761+08 2020-04-09 09:22:36.761+08 47fbc1d7-872f-4e0d-b675-c7d51436f795 64a1e2bd-ed3c-4512-a373-e461b1c50059
+2b408d77-ec9c-479e-a9df-0633c4149ce5 2020-04-09 09:29:04.026+08 2020-04-09 09:29:04.026+08 36882038-cdf2-4b13-ba96-4cc30aec58fd e9bffaa3-62a5-4116-90ad-ec2f64398bf7
+8ea1b60c-fc49-41d8-96e1-9a5bf6159786 2020-04-09 09:51:08.169+08 2020-04-09 09:51:08.169+08 4975a00d-a65f-4564-9e87-4d0e75b2b44a c65cc7aa-c86b-4e79-923a-0d06f60d610c
+d2efd39f-c98b-4e31-a39e-6ee9cbc75476 2020-04-09 09:55:16.525+08 2020-04-09 09:55:16.525+08 3b90cfc3-9011-4dac-a197-db1f1224684d dca64f43-08c5-413c-8ad9-5417bb512881
+b2bd76f8-1676-4245-ac2c-08fb434b046f 2020-04-09 09:59:58.172+08 2020-04-09 09:59:58.172+08 33cf337b-b7b3-44f0-ba1c-a4394b8b357f e7dde14b-e17a-42e9-89a9-a3c23524bb1a
+c550b194-a37f-4dac-87df-6254347a2f7b 2020-04-09 10:11:06.275+08 2020-04-09 10:11:06.275+08 9fb72bd5-827f-42b1-8c3f-9cd2b7bb9f4b d30c7f75-8f53-40c6-938b-fca23eea3726
+74ebec5d-2d03-41e9-8f36-a45b027584ed 2020-04-09 11:50:56.604+08 2020-04-09 11:50:56.604+08 da212a69-66d5-4870-a4f5-c49da884d914 25b5c305-5424-403f-a687-5391a90c53e1
+928986ef-106b-49b9-b142-e031c7677a08 2020-04-09 11:51:13.817+08 2020-04-09 11:51:13.817+08 ad8e440e-0f52-4e43-95ed-97bed0575767 b0122d06-52ab-4363-a518-9dee079e5566
+052fdfc7-3bc6-44a5-ab25-a04dc14b4307 2020-04-09 11:51:49.075+08 2020-04-09 11:51:49.075+08 f8e59d17-39f9-4805-895b-be09de939091 c2dd8e73-5c33-4c6b-a015-37abf3a4bf7d
+3f76cc2a-a814-488d-84ca-535bfa6df576 2020-04-09 11:52:17.557+08 2020-04-09 11:52:17.557+08 719b1f89-ba16-4e07-bcb6-f3914f8e0aca 3ee3e6ae-95c3-4076-bdc0-580e90fbe94d
+601923bf-8fdd-476a-9c95-2c91620ac6fe 2020-04-09 15:43:59.532+08 2020-04-09 15:43:59.532+08 d39a1487-77c8-4310-88e9-e12ee46a79a7 ca4f7fbb-cedf-4805-a5e6-f7ab3dcaf58a
+26d1110e-2876-45a3-973e-f80b84630219 2020-04-09 16:26:13.177+08 2020-04-09 16:26:13.177+08 6dfd1190-97ed-46dc-aca7-921af38cdf01 5960f593-fe7a-49d6-be3b-1c0529ab8e03
+c163f214-6da8-4396-86cc-71481c79c5be 2020-04-09 16:43:40.931+08 2020-04-09 16:43:40.931+08 62e931ef-494f-487d-b32d-d4025cfccc5b dd9c6ddd-01ca-4750-b867-f985cf0bbe35
+ffcde91c-bf03-4259-b418-309ca41ef448 2019-11-15 14:30:33.948+08 2019-11-15 14:30:33.948+08 52567547-16d9-4a75-b748-d64c0a0b01cf cfed20f0-05de-4d94-8f58-7beea29927e4
+b8f532a0-4238-42a9-9a59-8a3e25961269 2019-11-18 09:58:17.667+08 2019-11-18 09:58:17.667+08 b4cd49a5-53df-4791-aece-50f8fe3be0e3 37e489f6-f1ea-4a99-9473-26b1f24af25d
+df62dd83-609e-43a4-8094-2857feef7082 2020-01-14 14:07:48.557+08 2020-01-14 14:07:48.557+08 631fe06e-045c-4b18-b9a5-a6e18d8f3511 a0b7f6d4-66fb-4a0c-8ef7-636676479bd6
+ef0abd36-2328-46c1-aa7b-3d545b377bd9 2020-02-27 21:03:12.283+08 2020-02-27 21:03:12.283+08 39e094af-e8c9-455b-8f47-7d5b627b56c1 e5a65814-7d06-41cd-b77e-4efcda706d73
+d8a57177-7161-469a-a5af-9fe251006d45 2020-03-26 11:01:07.196+08 2020-03-26 11:01:07.196+08 f58d1284-4cba-47d9-b2ff-2bfeeff62797 c0f06645-ac54-4ee7-8a18-d2da4cf349e3
+98aedbab-82ea-480f-82fe-052c46a33faf 2020-04-03 17:20:04.177+08 2020-04-03 17:20:04.177+08 a6d36e90-1e77-42f2-9d03-3852f9e5a9ed fe902161-ccf0-4f4e-9087-6118bfeecd9e
+e1779f66-665d-47c9-a378-1fdbcca75ac9 2020-04-08 15:58:15.747+08 2020-04-08 15:58:15.747+08 2fedcbbc-d631-410f-9dbf-9868452b711e 3ca948fd-694f-4d59-a491-05081b807271
+32b46e0c-b87c-4427-8a60-e470e72808fc 2020-04-09 09:42:34.527+08 2020-04-09 09:42:34.527+08 fdd4dd73-2235-45a2-98b3-c7838697717c 174d5f4f-1823-4d8a-977f-39f7b1ace156
+bf1a1f9d-e28b-4377-a2bc-9b9a3a957a25 2020-04-09 16:47:43.474+08 2020-04-09 16:47:43.474+08 8e1b795f-20a4-49c1-844a-6818b46743f2 32e92b0e-4d21-4986-865c-842ca4573ec3
+03c1a6db-103d-4515-a106-d664b6c712a6 2020-04-13 11:00:04.938+08 2020-04-13 11:00:20.063+08 0bf1ab3a-44c3-44d5-bcec-83c1507080c9 8238c7ec-b9d9-4ea6-aa1d-17bdef1c9d8c
+e130fb49-f595-415b-aa26-f880806bb0a0 2020-04-14 09:39:59.483+08 2020-04-14 09:39:59.483+08 6084f264-aec5-4a6c-be5e-028c5139dfb8 38f5f75e-8918-4148-94a3-355f97ff0a4e
+7c584a1b-e079-4f4e-9b47-044251779660 2020-04-21 23:56:27.171+08 2020-04-21 23:56:27.171+08 4c4009bc-3eeb-4597-8866-fc0e9f3a1691 0e443d95-5d0e-4aac-b1e4-a1adaff332da
+b08c06bb-370b-46e3-86b1-1c8e5deba0f4 2020-04-22 19:14:33.179+08 2020-04-22 19:21:27.621+08 afe13a11-ee0e-417e-a431-844bd3608ce8 4844ea23-31c6-4752-a17b-b2f72320575e
+4b1a5421-6973-4740-8770-03cbe3d639a9 2020-04-22 19:14:33.271+08 2020-04-22 19:21:35.505+08 af456be9-95da-45a5-a65f-2d3cb31732ff 4844ea23-31c6-4752-a17b-b2f72320575e
+3c614369-f01f-47bd-8e01-e1b8567e9201 2019-11-15 14:29:41.086+08 2020-05-09 09:24:20.209+08 80209593-8753-4642-bc14-5537e3223d75 bbc1ddfa-9e1f-4ff2-bee6-a0b2720f41ff
+441c7e27-35db-4cd8-9a29-a580ba7aa54d 2020-07-20 17:56:19.36+08 2020-07-20 17:56:19.36+08 823e5c6d-df3b-4d9f-aea9-f9953192aabf 67882d64-f018-48ae-84a2-ca763a66b972
+d32eac3c-829d-425d-8d07-d2f4dc2a2593 2020-07-31 11:04:47.26+08 2020-07-31 11:04:47.26+08 8afcb657-9391-4be2-9527-fbc2142bdf64 3a666cf1-c5e9-47ad-83a2-f28e8d3e68ec
+8a68105f-667c-4d2d-9c8b-7c6b87c7373e 2019-02-25 15:41:07.365+08 2020-08-17 14:08:06.777+08 89297513-df93-40a4-bfb4-cc2393d5128a c872b023-f403-4046-a167-4a9865399e6d
+41ed0ca9-61f8-4a0f-a59b-08318c05c867 2020-08-18 08:55:03.249+08 2020-08-18 08:55:03.249+08 6e72e2fc-da68-46a6-8a68-3022057b0937 4d250038-b2e2-43a6-86b6-8b47920bcf86
+7d706a48-9dba-460d-a88d-3752b93c15f2 2020-08-21 10:27:48.295+08 2020-08-21 10:27:48.295+08 9a584682-5906-4fd4-ad79-245e90061e02 e509deea-5eb4-42e2-a446-937ace3243a6
+ee4cacfa-df73-4289-8495-2f12b541bb58 2020-09-03 16:18:53.19+08 2020-09-03 16:18:53.19+08 d59b49b6-2470-4652-aac0-5760f9cce697 a55bdb42-e095-43be-ab7a-5c026a49008b
+65136d8a-bf59-403c-87fd-b6b957773a53 2020-09-29 11:19:59.062+08 2020-09-29 11:19:59.062+08 fe84d4c4-d79f-4a80-bd65-950c4c044636 f0653362-f4de-4461-a2ed-7c75c32e2474
+1f43a8df-a57d-4afd-b2bd-0d7ffafd7398 2020-10-10 10:53:31.434+08 2020-10-10 10:53:31.434+08 185c3316-9ed2-4a9c-b365-0691b303600f 77da0a6f-3db6-4714-8add-a2e306bf06ac
+207bc4f1-ada2-4501-a01d-37987419591f 2020-10-13 10:08:39.393+08 2020-10-13 10:08:39.393+08 42d7c213-aa9e-4263-9e97-e57ed97f4342 36d81901-6ca4-41f4-912a-9088650f7d78
+a39c34fc-c164-4d68-b15b-fe4c249aa8bc 2020-10-16 11:41:30.092+08 2020-10-16 11:41:30.092+08 8006946a-43de-49dc-b665-3603da448dec 8bed1966-b73c-4195-a86b-8eccc6181611
+c21925a9-23c5-44ef-bfa6-29cc9d004578 2020-10-16 13:52:59.061+08 2020-10-16 13:52:59.061+08 2997a6da-3093-40f9-b0e3-00b1f8c383b1 238c0049-a09c-40cb-bf15-77e8e1158751
+b54682ad-e5ff-4bf5-87a6-ed3b3339bb80 2020-10-16 14:22:53.594+08 2020-10-16 14:22:53.594+08 249d472d-1470-4d8e-b629-3e1c3fcd772e 8e649d83-aaba-4c63-9f92-02946a92fff1
+13e0ea64-d97c-400a-a82b-04dfb408ca3c 2020-10-19 14:44:51.534+08 2020-10-19 14:44:51.534+08 7a954891-860b-4321-ab9b-290a023d288f a0fc7ae8-d89f-479c-a454-f21088237c6d
+9521d0d9-4e44-4ffd-8080-b3a76fe60399 2020-10-19 14:46:21.277+08 2020-10-19 14:46:21.277+08 7aee0c4c-edb0-43e3-a3bc-9fbff9871499 f20ac868-25d7-4f6d-b54d-e068948a7310
+42aa6d64-66bd-4408-87e7-e1d4552c8489 2020-10-21 16:15:38.43+08 2020-10-21 16:15:38.43+08 7257f8df-a9ef-4358-9754-228732a8953b ae721f2e-dfd5-4d2a-9b62-85033317b741
+565cd238-1d2d-4621-8c84-b8311259df90 2020-10-23 17:03:59.967+08 2020-10-23 17:03:59.967+08 95a38af8-bdb9-4f10-ad6a-f3cccec12f59 0c5bc927-e4bd-4894-aa69-ddc2f9e9b60b
+bb87c4ed-6649-4350-953e-cf87be1e8100 2020-10-26 13:25:34.231+08 2020-10-26 13:25:34.231+08 4200d327-7520-40f5-a476-fdb18a6c0e3e 95143a7c-bbd9-4b58-a1e5-acf118cb793d
+4aebba5c-b4b4-4996-8cc3-9b56fc438555 2020-10-28 13:30:29.636+08 2020-10-28 13:30:29.636+08 ba00d9a2-f064-49eb-918c-0924558607bc 96438e38-60bd-4a77-a047-8c1a15df5f20
+a4f7e6c1-7a1c-4d99-9c29-54ca8d16e021 2020-10-30 14:32:49.875+08 2020-10-30 14:32:49.875+08 77f66a9f-48f4-4970-b406-a8abc2aa39f9 dee1c7ea-3f0b-4008-a84f-d6ac39dc26bf
+1e4d3ab5-2911-4a07-8473-11b549e28574 2020-11-02 10:08:20.471+08 2020-11-02 10:08:20.471+08 f2b6d5a0-114e-4c45-9066-5a938d4f620a 4665d5ce-a0fb-461c-863c-7da4cce84972
+2ce84b4b-1b3e-4ae6-bda1-1bdcf7394c56 2020-11-02 13:44:41.987+08 2020-11-02 13:44:41.987+08 5bffec18-538b-4422-8cfa-c602ce69cb7e 51e7373e-8b18-4003-824f-c0a386f73332
+a07c5d4f-1efd-4992-a7ad-06358e17b02e 2020-11-03 11:31:50.883+08 2020-11-03 11:31:50.883+08 bdbf00d7-ac36-4768-947b-32347dec4054 51e7373e-8b18-4003-824f-c0a386f73332
+54792fa2-8870-40e3-be2c-493ed82c7c23 2020-11-04 09:48:42.726+08 2020-11-04 09:48:42.726+08 dd00727c-90ae-49ec-b8a5-9a89497b7d8c 74b044d5-7f85-47df-ac2d-6d7530f04770
+54f0958f-1dfc-4810-92ee-af67d02d7e7c 2020-11-04 09:56:29.875+08 2020-11-04 09:56:29.875+08 f4d0c081-5014-42df-8154-c7c3b4657cfb 210fdd62-59d0-40a2-822d-edc9f6615021
+57e56347-ee5b-4450-bfe3-d18157c95c15 2020-11-04 10:06:19.422+08 2020-11-04 10:06:19.422+08 e6bcf4a3-0d98-48a5-8a7d-401f96e01bfa b0475fd4-5fc9-4e6d-992c-533c82f7f804
+a87a7be3-5d01-4e81-88e3-38876c2733e3 2020-11-09 14:27:57.372+08 2020-11-09 14:27:57.372+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 324f2d71-3a50-4146-9aae-e363bd12206d
+f0c0a2a5-5e10-49d3-ace3-5b8138282522 2020-11-10 14:36:02.94+08 2020-11-10 14:36:02.94+08 ce6a00e6-475a-4ecd-8890-b523c3c65e53 8ff777a4-d7db-4151-8495-ab0a86d08eb0
+1516cb14-8951-4e79-8ebe-b8572a585ef7 2020-11-10 15:56:24.116+08 2020-11-10 15:56:24.116+08 fc0dc028-86e5-4a74-a75b-15c2d9b30d63 07eec80e-4e25-40b1-b117-021f32f3af0f
+7b0b1277-6b13-4db9-9ade-c51a8e59d14d 2020-11-11 17:47:58.934+08 2020-11-11 17:47:58.934+08 dee5d110-9c34-4382-a725-42cf5d298587 fa8be449-f162-49ab-808d-7be4700b888a
+5026232c-dbd6-4db8-9f8d-69f05171b137 2020-11-16 09:26:32.466+08 2020-11-16 09:26:32.466+08 eaa7d913-e972-4a8b-9bb6-870673b450a2 5959f7bf-e2f7-4596-82f1-1857bf097444
+4ca5d050-5970-450f-b04e-b8bccf1e5a35 2020-11-16 13:57:56.736+08 2020-11-16 13:57:56.736+08 3a1eee94-6d31-4cfe-a9cf-c2522302fa16 e3b0d12c-5881-4284-9c16-a0c396f04b67
+6f3fe8f4-ac59-448b-a6f8-95bab0933586 2020-11-16 16:17:25.588+08 2020-11-16 16:17:25.588+08 65de659d-c7f6-4fa3-a500-a0cead6dd856 324f2d71-3a50-4146-9aae-e363bd12206d
+11e04367-aca6-4d4f-9113-b8d4e45a040a 2020-11-19 09:19:24.25+08 2020-11-19 09:19:24.25+08 cfcac206-4e6f-41f2-b40c-a9294cb606d7 ba1ad632-f452-47b6-93cb-c52336b35e05
+e354ab30-24f9-427b-bc40-52c3f2bfdd1f 2019-11-20 09:12:06.564+08 2019-11-20 09:12:06.564+08 403ed6b4-3b5f-464a-8da3-51142a22d535 a28365f2-ea6b-4780-a957-fff124cbf738
+ca70ce3f-5baa-4bec-9aec-cd8e902d4bc1 2019-11-20 09:27:50.799+08 2019-11-20 09:27:50.799+08 84e785f0-1280-4066-ac32-66fc93019612 7e07fddc-00e8-4b54-bf75-2ad0f837571c
+9c97dabb-a0a8-4a81-8949-df9aee69c17c 2019-11-21 09:33:12.263+08 2019-11-21 09:33:12.263+08 42a0ae36-f70b-40f3-8883-e04b90d177b1 056ddac9-ad99-4ed4-9287-756b0c637166
+dd23f94f-5d42-4658-8c7e-2e6b8bf7b9bf 2019-11-21 10:23:20.858+08 2019-11-21 10:23:20.858+08 ef56e794-df70-42a3-a2f4-e69f4621981a 58b4ce37-0691-4cff-95bc-df60aeb79a41
+1ba1557c-0823-4134-aaa8-0466e24d891b 2019-11-21 11:47:17.669+08 2019-11-21 11:47:17.669+08 a5bf8b8f-51ec-4e4c-8ffe-9d01644f9395 2b2090b3-6b7f-4134-9f51-c061f980f02b
+6087bbfc-f4d4-46e6-868b-88514f261f6a 2019-11-21 11:47:19.239+08 2019-11-21 11:47:19.239+08 8b29ca1c-631b-4899-b819-7fb1a9d8cd63 a5c0c2dd-2568-4e65-a7ec-cf06d9f743c7
+ef43a351-73d8-4652-92a0-a0d3eeba748c 2019-11-21 11:48:21.879+08 2019-11-21 11:48:21.879+08 299ea989-d531-4a5c-9371-aa3ae165c2da be19acbd-14ed-4e4a-927a-19534e17b02b
+c13f2098-7d19-40db-a912-4ad96d71ab98 2019-11-21 14:01:06.94+08 2019-11-21 14:01:06.94+08 4b017286-f61b-4777-bbdd-aa7cab984440 c12324f7-d9d8-4772-8c47-90741c404d70
+c5020666-7066-4b5a-8ac4-8dbaa8a68111 2019-11-21 15:13:15.437+08 2019-11-21 15:13:15.437+08 c7eb65e8-262a-42fe-a9a2-3a77e07a84c9 c23f8e42-87d0-419b-857b-35b8cbb12678
+37e93b93-945b-4fbd-9d11-38d343d43abd 2019-11-21 15:17:49.697+08 2019-11-21 15:17:49.697+08 b3db1020-2db0-4931-ab2e-2661c6b459ff ef56b00e-603c-4c26-b132-037795bab2ce
+1f6715d7-b25c-4f92-a29e-35f00ba06c10 2019-11-21 15:17:51.655+08 2019-11-21 15:17:51.655+08 22a573d1-d13d-447f-9984-1335ac15e1be 5d4044c7-40c8-46e5-a5f6-7d7172a69bc9
+44ac5421-1302-4d1a-aae3-80ae6894be00 2019-11-21 16:06:37.694+08 2019-11-21 16:06:37.694+08 bcb2585f-9765-4795-8033-eaf0d467ab1c 6bb6e4a7-0f87-4a93-8126-d22831a7b915
+7d31f6d9-d297-47ae-bcbc-43279b9fe473 2019-11-21 16:15:06.566+08 2019-11-21 16:15:06.566+08 5fa7d170-eda6-4d15-a767-25fc37a090bc 2877880f-2974-4163-96e4-f48a1aae4387
+70a28584-77a0-4b5c-bdbf-c8ca24190b38 2019-11-21 16:15:07.79+08 2019-11-21 16:15:07.79+08 61e1f659-3d27-4958-8881-d4e6103c309b 23bc92df-57b9-4222-a6b3-7cb4fbdd87f5
+e30a7b42-3ec8-4060-8986-669ddf14a6fb 2019-11-22 15:35:28.386+08 2019-11-22 15:35:28.386+08 6dd33289-d530-4c8b-a41c-aa946291a7df 7fce98bf-5b42-4847-8d54-bc1f0e54a61e
+323572cd-24f5-4a4c-8f1d-70f1fde683d8 2019-11-21 11:47:19.213+08 2020-01-07 14:23:38.685+08 7afd8b52-1811-40be-88ec-64173b08f522 157eca28-0baa-4b0e-9b28-1015cbe6430d
+8557cf42-779b-4a2a-b0bd-13b4848490b9 2019-11-21 11:47:19.188+08 2020-01-07 14:23:48.858+08 202ac1b5-9f83-4de2-b423-a27607b53f28 0f01d510-ea86-4324-937a-baa805d53f2c
+9fa8162b-3d5a-4728-aaf0-6989a84f2f61 2019-11-21 11:47:19.161+08 2020-01-07 14:23:58.516+08 f745e8e9-041e-4578-8568-38fec10b69c1 724f7a46-0ccf-42cd-a991-1b0479907152
+65176ef2-983a-4226-8a28-c4e58b8a4ceb 2019-11-21 11:47:17.654+08 2020-01-07 14:24:28.906+08 746f3ce2-5918-4156-bee1-cf4e3a0c51ca a08d0dff-ea22-4b65-b24d-9422e9b8c7a8
+726f8c02-7e4a-4ef6-b8b8-426573e3b821 2019-11-21 11:47:17.639+08 2020-01-07 14:24:52.06+08 3d75f1d4-c46d-443a-ba67-ea09c7642e11 223ca791-daeb-4b6e-a828-7b17b443839d
+3e287a73-1169-443e-870b-77cd4c720974 2019-11-21 11:47:17.623+08 2020-01-07 14:24:59.092+08 0666d951-058b-4519-ba87-4889fda65f5d 4a6f99f4-e082-4a55-9f0b-601ec2131409
+67ec0edc-f803-4712-a820-41d3a8dee601 2020-01-14 14:12:06.483+08 2020-01-14 14:12:06.483+08 698204ef-2e94-4c91-9c1b-f1145b054f0e 5174769f-c646-48c6-a882-98c9ada82dc4
+261526fb-2a59-4513-a754-b58ec85edfe1 2020-04-01 09:57:00.442+08 2020-04-01 09:57:00.442+08 a3e674eb-3100-4cd1-907c-b545482bce0d 530325fb-4018-4055-ac6f-06af5e9ef92b
+d0641720-e91a-471a-a5b8-6617d3a76943 2020-04-03 17:23:40.985+08 2020-04-03 17:23:40.985+08 69888b76-d5a8-4e6d-90a8-cfa968515267 cb8c1117-720e-4ecc-bf73-94387c4d9883
+85a66d3d-e4eb-49f9-a29d-d4b83ce4924e 2020-04-05 14:13:59.996+08 2020-04-05 14:13:59.996+08 7fe724a3-9e75-4cdf-94e3-bdd7451ff05c 9bc994ef-a76e-46fb-82c4-60946018fa97
+b1d8f4ca-a426-4d3d-b328-8c7b025edaab 2020-04-09 10:06:38.593+08 2020-04-09 10:06:38.593+08 a52e2352-c27a-4d80-85fd-aaf9967cc19f 04eb0c8a-7900-4291-bb44-31bbeb4fd7ab
+1d064f52-7ba1-431b-89d2-4c21507026f1 2020-04-09 16:26:24.256+08 2020-04-09 16:26:24.256+08 8e1681a6-92f5-472c-a4dd-f40e16934f94 8cb986c9-a790-43ec-903e-0f2af0dccd72
+b8f571fa-e358-4161-a8c8-08145a54d420 2020-04-09 16:53:13.499+08 2020-04-09 16:53:13.499+08 e905e3ce-b6ac-4237-9590-14ee97e867fe b5a7e307-8a67-407b-8360-5c4d86168f55
+5c55585e-cf5c-41a7-aeeb-36ba3f95eff2 2020-04-09 17:04:22.014+08 2020-04-09 17:04:22.014+08 7938b967-3298-4052-b8c2-d0fd4b57adb2 c4c769f4-1eb6-4060-90e0-6ab56634cada
+4ec7fbfd-7918-43fa-9317-70a4799508c3 2020-04-09 17:07:54.161+08 2020-04-09 17:07:54.161+08 44e109ee-d542-45f6-914e-6313d2ef5aee fd9283db-69e1-463f-b61e-d3ce9876e6dc
+6f6c74c3-251b-44c7-a9b2-0f6ac5d6fd98 2020-04-09 17:17:37.098+08 2020-04-09 17:17:37.098+08 7b3502a3-1fd6-467c-b66f-221cc977bcda 0b0187d8-96d9-45cd-bb7f-0f4d14744210
+3390c6cb-42a2-41c8-84bc-08f9ddf1f060 2020-04-09 17:22:39.438+08 2020-04-09 17:22:39.438+08 b51644b9-4159-40db-9599-8b080069cc65 cb6e2488-674d-4a24-a326-2524e76d1435
+4a7e149d-efc5-4001-bbfa-5725ab78813b 2020-04-10 10:44:44.122+08 2020-04-10 10:44:44.122+08 de345f11-6d4a-420b-963d-0bc26a7144f1 00d2a316-5cd5-4f82-bf3c-5d87cf208506
+a467b755-f48d-4830-836f-0c424646bed8 2020-04-10 14:35:20.905+08 2020-04-10 14:35:20.905+08 22fd06d1-3028-481b-9025-f4fa0093bb6a 338a761e-e215-4402-9c5e-91bdba47beba
+ff822625-0e30-4ab1-af1d-54ccb5fe444d 2020-04-13 10:59:41.679+08 2020-04-13 10:59:41.679+08 bf5542b0-0eaf-48a7-acf5-359e608b19d0 7a4c06da-1e5b-4464-b1a7-54778e3a62a4
+6e467307-5124-4043-9a2c-78a23207d1cd 2020-04-10 14:52:19.58+08 2020-04-10 14:52:19.58+08 bd6fbf3d-b14f-4da0-bcfe-fec0c1afa863 954f6b1d-f314-4d0d-aee1-d9e0d846261b
+13275af2-b1d2-4341-909f-0ba39023a614 2020-04-10 15:37:56.732+08 2020-04-10 15:37:56.732+08 0c8d3e5c-4b72-4b7f-bc25-e0f20e899f0f eeb39967-06ae-4270-8441-e6a248cd6c88
+0477ec2e-ea2c-496e-a586-0b4d358393d8 2020-04-10 17:03:36.551+08 2020-04-10 17:03:36.551+08 ce9b72cb-67fd-4117-b485-a9443b3409e9 dbc01469-d28b-493e-b1bf-5996ac187e6d
+6112f06e-5349-4ae4-8175-e40669689518 2020-04-10 17:04:48.16+08 2020-04-10 17:04:48.16+08 9aaf71fd-cc26-4738-86f0-f27fb8983581 38df0be1-f399-437f-b72a-17ebcb9d0cdb
+8925523f-191f-4f9c-a29c-bfb16656a110 2020-04-10 17:10:11.919+08 2020-04-10 17:10:11.919+08 e8d508fb-9ad6-4f72-bab4-552351765b49 c4d3eac7-dfda-4e6a-b84a-5fa59f3b5a19
+d6933d9e-3b71-4eea-810a-79ad63bc572d 2020-04-13 08:47:00.977+08 2020-04-13 08:47:00.977+08 09173a38-657c-4584-97f6-d5fd984c6cef ee0d80c9-097b-4ef3-96b8-f24576e09e68
+30557180-71eb-457a-b984-66ac91485f59 2020-04-13 08:51:58.154+08 2020-04-13 08:51:58.154+08 be4087dd-e776-49f6-a2a0-6ad64e530ac9 a1e9ade4-6412-4226-acea-eeb400ea6253
+14033b75-1c36-4a45-b68a-88f664e87267 2020-04-13 08:58:10.84+08 2020-04-13 08:58:10.84+08 600fa9e0-1e6c-4c0f-b9df-2445d771d54f b8b81a41-de19-46b3-95e6-dc715e1c56d9
+a47bb98f-ba4a-430a-b6a9-6453bf51f7b0 2020-04-13 09:02:01.881+08 2020-04-13 09:02:01.881+08 c3cf2a99-570b-480e-bd03-d4218a84382d 94b900d2-4db5-4562-9a6d-a747d706985c
+a042242d-f65a-4bea-8a69-f5939b78ebe6 2020-04-13 11:00:52.493+08 2020-04-13 11:00:52.493+08 74d8243e-c93f-4694-b627-27150be13541 d7d75ad3-725f-4605-b594-c107f7ac2ef9
+56a94aa0-00dd-4f34-ab57-e9cdd7a06b33 2020-04-13 11:04:26.402+08 2020-04-13 11:04:26.402+08 ed4d092d-260f-49cc-a985-176fd50d18c9 a67019ee-1b5e-4b6f-b38e-2e81ffb6dfed
+8493a4a1-c4aa-428f-845e-f85e2bec7881 2020-04-13 11:27:00.948+08 2020-04-13 11:27:00.948+08 ab916260-ed75-4e0b-8109-d9b164ac1f2c 25cfb943-c37a-4bd9-ac3b-ca76bb92a135
+262bd6e0-3e1b-49c8-87a5-e0caaf1576cc 2020-04-13 11:30:42.555+08 2020-04-13 11:30:42.555+08 475ef4a4-f7ad-47ca-bf47-6c02061d73f8 bc3a1277-e947-4a62-b9ff-a9f4884680b0
+92461e36-53e3-4d3f-960a-d620e191a8ee 2020-04-13 11:34:04.591+08 2020-04-13 11:34:04.591+08 8e6f0fd7-4b27-47b4-8e62-85c8302d8219 bc518004-4d3b-4979-b2b2-0ce1c530ad4f
+16462c10-6006-4bfd-8045-e2d031cb0632 2019-11-21 16:17:19.741+08 2019-11-21 16:17:19.741+08 ab533430-50a9-42f0-be2d-3f49990cd470 07191c46-d74c-4c0b-9401-dc53e34f0d5a
+c5744210-21fe-43a6-bcf7-1311e4fc7097 2019-11-22 14:54:33.461+08 2019-11-22 14:54:33.461+08 4ea55c69-435f-40ec-b8fd-6ba3cbb45b6c eab9bb3c-ae22-4574-b211-e3fce64aa313
+ed9fb8fe-92b7-4a9e-a09e-a2752488169f 2019-11-22 15:31:51.651+08 2019-11-22 15:31:51.651+08 cfbc93ae-34de-4b5c-b78f-393d80e6be1e e4c9283f-3609-4df0-abe4-92d822218a2f
+74697cda-7666-4af5-a3d9-546c5ccba03c 2019-11-22 15:35:00.206+08 2019-11-22 15:35:00.206+08 00d1f8ae-26c7-4fde-93ee-415598dab3dd 0e411585-691d-43e4-b153-df45634de70d
+42bab2ab-757a-4e94-b1c1-47d8e6ab9fe1 2019-11-22 15:38:27.579+08 2019-11-22 15:38:27.579+08 61e2ddde-025e-4a3a-b03e-49cddfe2c09c 591529fd-732e-4ad9-b1ce-71cb137fb31b
+cc29c2ec-02fd-44ec-a228-8be39ef27296 2019-11-25 13:10:42.706+08 2019-11-25 13:10:42.706+08 c3035443-22e8-4067-b775-2be4cf81939e 5e4753f7-d79b-4ac3-a1a5-fc299c91f9e4
+abad3039-7ef4-46d7-a52f-f4469aa9df4e 2019-11-25 13:12:43.527+08 2019-11-25 13:12:43.527+08 03a86ebd-9100-429c-a1a2-edacea7380c3 86bfce2a-faa5-42e9-a1c6-4ffb22a4e09f
+c6259dfb-fb78-4895-9222-494eb884f41e 2019-11-25 14:21:27.99+08 2019-11-25 14:21:27.99+08 e6b1563f-dafa-47e5-bb75-fa29d3388298 694e8b8f-9239-4d5d-8cdc-bc5b715e6afa
+66ee108f-26f9-4134-bd66-16676cf2d855 2019-11-25 17:26:40.033+08 2019-11-25 17:26:40.033+08 e95f9ff7-5a7c-495d-87c9-993463fb3945 34ff37dd-975e-4fa8-a5ab-487b5cb6e1df
+78834134-2cc2-42bb-9e75-570e309c3599 2019-11-26 10:03:08.903+08 2019-11-26 10:03:08.903+08 169af4ea-ded9-488d-8a88-96e79e1526b0 45a3dabe-e080-4fc9-ba6f-01200690facd
+8a7a73cc-15f0-4f24-89e0-d3bafe32c8e7 2019-11-26 10:07:42.41+08 2019-11-26 10:07:42.41+08 3081c848-b498-42a0-9887-5fba5a8eb28f 3377f9e3-709d-4cf5-9f5c-ac0e47f0a28c
+023ce537-ad3f-402e-8abd-84b4d0bd7c56 2019-11-26 10:13:25.792+08 2019-11-26 10:13:25.792+08 94787d41-6353-4a20-a84b-848d79e1e209 fd0f002e-7ec1-491e-9ff7-3e2781000f30
+6d33840f-8034-4d46-a12d-facd68487f55 2019-11-26 10:16:09.414+08 2019-11-26 10:16:09.414+08 c4ae4615-1bce-476b-96bb-827de9a9a3f5 bb97ef77-9c29-40b3-9e93-72eb26d9f67e
+fec9a8f6-b6c4-4bc9-916e-b3f0f9050415 2019-11-26 16:27:03.641+08 2019-11-26 16:27:03.641+08 9e616b46-c079-4ea8-a379-71bc5fa74f42 0b1f985c-862f-4fed-9064-73f092421e8c
+b255d0f0-7799-4c07-87d5-806f87105132 2019-11-27 14:16:07.382+08 2019-11-27 14:16:26.873+08 047b4ec5-9aa9-44cd-8410-9484195bcc5b d3c5a98f-b595-4635-9033-eef1233cca38
+bdf07eda-c05c-4dbf-a1a1-dbbf33df1057 2019-12-04 11:31:15.017+08 2019-12-04 11:31:15.017+08 fd38a31b-ae19-46d2-87ab-29c622bb6c41 8f62138e-2ba9-42e6-960f-0c9996e6bb32
+461c972b-159d-4ba0-961d-01d02e17a649 2019-12-04 17:52:08.262+08 2019-12-04 17:52:08.262+08 6447edf7-84a6-451a-b207-a3714c23e9c1 e916fe27-5463-44f6-82dd-3430cd5213c0
+df24cada-f603-4d01-8e7c-92207b7ca542 2019-12-05 09:45:18.216+08 2019-12-05 09:45:18.216+08 7620b964-ee22-4e91-bae4-86f74ff0906f 5dbf1e88-6875-442e-b049-c57705ec9fa3
+221f84c5-4fd7-432e-acb3-a78348506c04 2019-12-05 15:45:15.356+08 2019-12-05 17:42:34.086+08 c4a77a9d-c2ff-4de9-bbc9-36fe8bba8a5e 4c4ef3cf-f1b5-4aef-9d5b-94fe66ddb957
+32610968-b2a7-45af-ba73-cfc5d7241b11 2019-12-06 10:18:48.78+08 2019-12-06 10:18:48.78+08 28802bd7-d538-4d62-8a84-87a3e3f5c9d3 6c25fbca-0d16-41c8-b1b7-ff724d5d9a76
+9176d406-83fc-45bc-8acd-8ed9380dabe8 2019-12-06 10:23:27.693+08 2019-12-06 10:23:27.693+08 3f322286-3072-444d-8d6b-06f433f2f5aa 00d429fe-3521-43bd-82c5-27c3701da1b1
+7928c73d-b2de-4041-98ee-2e3380646cb5 2019-12-06 11:33:26.537+08 2019-12-06 11:33:26.537+08 6d7906b4-b1de-4c3c-b100-bcdf039094f2 1795a06d-3a75-4151-9dd1-347cf67c803d
+81f72171-54ca-48a9-80d4-d2b8386bf718 2019-12-06 15:16:13.065+08 2019-12-06 15:16:13.065+08 5fb83056-bcb5-4ed3-8b11-5d2233522941 fa0cbbe4-447f-408d-8ecf-7904f0ea8ff8
+82269eb2-8dc9-41ef-a716-d39db149cd04 2019-12-09 10:11:44.306+08 2019-12-09 10:11:44.306+08 bc46fbac-32c0-44aa-829d-5852b69db566 05b98b4f-78c3-4a40-8efc-e36fb6debb58
+21bf2ed2-d826-4d91-8964-40b68f04e8c9 2019-12-09 10:15:11.895+08 2019-12-09 10:15:11.895+08 6c5eb31e-a7e6-4289-a25e-5cf08bb4ad82 1357595c-1801-4b05-a42d-1ca21020c433
+42ca7a4b-db3a-469e-8d82-f587cbf62e91 2019-12-10 11:41:11.252+08 2019-12-10 11:41:11.252+08 7c4993c0-3771-4ad6-a71d-2f84390f48e6 78e16739-e9e2-425d-934a-bcf3104e1eaa
+510ef4a3-8426-4c51-8915-68f23fa542cf 2019-12-11 10:59:06.974+08 2019-12-11 10:59:06.974+08 bee3569d-fbcf-4c8e-809d-535e0e515921 f667f85f-5b6b-488d-b771-4a991eca38ac
+48ee8ca9-de96-4dfd-a3c6-969ca7cc238c 2019-12-11 15:37:46.774+08 2019-12-11 15:37:46.774+08 9960853c-2f09-4f84-83dd-6ef785bd63d8 9eb1b073-e915-4c9e-b7cc-13d1b6f6c4f9
+c1c3b375-075d-4ff5-a74b-0d6c4a12e013 2019-12-11 15:51:39.686+08 2019-12-11 15:51:39.686+08 53281743-bc5c-46cf-addc-706810bcd681 1df8930c-6467-4c9a-8494-5a2beef7d031
+e51fe796-9fe4-4cb2-8dea-a43660bd84f2 2019-12-12 11:29:56.737+08 2019-12-12 11:29:56.737+08 699f8e7d-9985-4a05-83be-7ff6a0c7188b 1a7515b2-0caa-48b3-a171-af2232a46152
+58c10e8e-22d8-42e3-acf9-1eaa773f38f3 2019-12-12 16:54:27.273+08 2019-12-12 16:54:27.273+08 c8ec5d4d-0d9c-4262-8ec6-3a089114fb5d 69ddd5cc-db94-4a65-9ea0-e7592350d708
+ef7cdcf7-3173-4829-9bf5-0c22a7e204c1 2019-12-12 17:00:31.882+08 2019-12-12 17:00:31.882+08 89941851-3e91-426b-b842-0e31d50848f5 b0a927bb-109d-4f9f-b32c-b5b6b0dd3e54
+11b6c50e-3bd3-441d-a31f-683111f54ff8 2020-01-14 14:13:41.908+08 2020-01-14 14:13:41.908+08 9538c3ec-e6e4-4d94-b1f6-dcd1bc2e2527 3a0e9308-533e-424a-812d-3f13e104da57
+d78d32a1-1400-4e44-9e66-32211437ebb7 2020-04-05 14:14:10.187+08 2020-04-05 14:14:10.187+08 0593d534-af19-4662-bf37-b3393cd7d706 4232eb85-d2fb-435e-a1fa-3896c591fcf2
+07f71da8-ab78-441b-9f61-9e218499afb3 2020-04-10 15:38:12.121+08 2020-04-10 15:38:12.121+08 bef72760-da7f-4b64-a389-b3040de2ded3 d4ee7b16-0e6e-44f8-ac05-439cb2e04ff9
+3b923a2b-cc7b-4f65-a2e2-88d0c689747d 2020-04-10 17:13:02.984+08 2020-04-10 17:13:02.984+08 f018487f-55ee-4fc2-b204-738cde478d4b bd9cee05-9bbc-426f-a969-96c02256895b
+3942f678-ebb7-49c5-999b-1f713f9966d4 2020-04-13 11:48:21.35+08 2020-04-13 11:48:21.35+08 a31c164d-a581-4bda-8e94-7c41ab12cfa1 d9fe2336-3f05-4f8b-9fd4-61d917ccae4f
+da3c2231-65f8-4476-8d53-ff715899d110 2020-08-17 14:08:13.511+08 2020-08-17 14:08:22.618+08 bdcdab4d-62d5-48d2-9a07-cd61a9cc108a 55d0479b-e79d-439f-9c46-4f49f203ac5c
+2ac71cdd-e2ff-4186-a818-27f3a9161994 2020-08-26 13:33:59.35+08 2020-08-26 13:33:59.35+08 c30ccd00-f637-44d0-b87a-84f158985f88 25a1a6c1-89ba-4bdc-af70-9b3483916a5c
+46e4f6b0-472f-491a-be30-d55c3494a2fa 2020-10-10 10:53:58.043+08 2020-10-10 10:53:58.043+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 9d5d9205-b7b8-46bf-9ed6-9222582bfd40
+3abd68e3-c8c5-4d20-8df0-da0c9fa6a95c 2020-10-29 16:45:15.946+08 2020-10-29 16:45:15.946+08 e7114e7a-a8cd-4265-93bd-3d86a0ab5864 13eb704f-aaab-459d-911d-acd9fa5e7775
+46f6871b-96e2-4648-80b4-79db0f94ec7c 2020-11-11 09:55:32.345+08 2020-11-11 09:55:32.345+08 5fd6dff1-680f-410f-9631-e645a33bddda e890945f-ea10-48a2-afc1-a84a42096f27
+27bbcc96-bbfc-4536-9bfd-60d4532b0875 2020-11-11 17:47:47.763+08 2020-11-11 17:47:47.763+08 468aada9-eeb5-4174-a21f-73f4ac420d78 fa8be449-f162-49ab-808d-7be4700b888a
+9f77c65a-72f5-401e-8ed2-cf8a6f4b2a15 2020-12-31 14:26:55.493+08 2020-12-31 14:26:55.493+08 3cd111a3-296e-4cfe-af80-2d206f3a2b36 c08049c6-42da-40a9-80b2-e665985b24e6
+7fa9b9f8-8143-4ab1-b492-69bba1df25b9 2021-01-28 09:48:47.939+08 2021-01-28 09:48:47.939+08 d0e4aa6d-cc64-4e1d-9ce4-a91c1fd76e87 5576f96c-9581-4276-b739-0573a8ebf1b8
+c1a933e4-5705-486f-a1ee-94348c116798 2019-12-16 11:28:20.067+08 2019-12-16 11:28:20.067+08 39ae566f-f125-4bb3-8f18-39fd4ace09dd dc20f3ad-4827-4b31-b4c9-9d7ea4a9950b
+ebe430a2-00e3-40d9-9b1c-06f8746c575b 2019-12-17 14:35:16.135+08 2019-12-17 14:35:16.135+08 da328767-f26f-4fce-967c-7dbf5af7df6f ebb51648-fe47-4a08-8f10-fd9c08005537
+077398bf-8d97-412d-99d9-133d4b400034 2020-01-14 14:15:56.355+08 2020-01-14 14:15:56.355+08 71301f1e-11cb-40ce-8550-770dc2877603 d9270c78-35a3-4962-b1d2-a35418e082b8
+d713c942-9ed3-421d-a19e-0161b74c3f3d 2020-04-13 11:49:37.823+08 2020-04-13 11:49:37.823+08 4b648fd9-37fe-4060-b04f-70c5e351b0a4 08115467-24e5-4a70-81dd-a360e725171b
+a6d47e38-692a-497e-aa5a-a6d0873f26c8 2020-04-13 11:49:49.99+08 2020-04-13 11:49:49.99+08 ff32ae55-d999-4f10-b4fa-53ef0c69d6be a23f321f-21b8-44f7-b58f-a407221f9b93
+b5c34d49-719d-4b6a-af7a-73d0eb489fd9 2020-04-13 13:06:47.917+08 2020-04-13 13:06:47.917+08 d7755dfe-3b58-4cd9-a3b1-1cce2f6cb34d 9f6a6386-111a-495e-9975-202724aaae19
+0ccd0502-c450-4b80-930a-0c1d1a31bbfc 2020-11-24 11:14:02.691+08 2020-11-24 11:14:02.691+08 ad7a78bd-4769-4409-90d0-955998f1b916 814b8d71-d9f6-4d3f-906a-c1434a830aa6
+198e0dda-0df9-439a-8531-179256d84129 2021-01-28 09:58:52.859+08 2021-01-28 09:58:52.859+08 532e0ecd-69b7-4dc4-945e-e4503cb4f4de ffc7efdf-4cd5-4f4f-92ec-3db6e058e699
+a64db93e-fa1d-45be-bb7d-77c9416afe43 2021-01-28 15:15:41.972+08 2021-01-28 15:15:41.972+08 6aa8f789-816f-4edf-9d5f-b3a4c3a34e2c e3114646-dc4d-48a2-bdf9-24ac4cee2e68
+53dfde27-d17b-4d7f-9e89-249728125efd 2021-01-29 10:12:04.676+08 2021-01-29 10:12:04.676+08 4af6c519-ea08-4b4b-a19e-ca0574265fdc 63e11cb5-cde5-4171-9f98-29bd1a2fc703
+4bd56b19-e54c-451c-8a43-8fa00f23b150 2021-01-29 10:41:27.978+08 2021-01-29 10:41:27.978+08 e983c3bb-0606-43f3-ad7a-0a1c80bf1df4 754ed2aa-e632-424f-9b30-cade02417893
+31b8be85-0a34-4391-a5b5-1bf15a328564 2021-01-29 11:00:43.457+08 2021-01-29 11:00:43.457+08 fc3a3026-9e74-4e31-9927-3936778248b5 b48adf9e-d73a-4eaa-9164-db7f61700a1b
+e2af5fe6-a240-4977-ab22-d1bff5f048b7 2021-02-04 15:51:02.035+08 2021-02-04 15:51:02.035+08 074a59c4-fb97-4bb9-9835-8c6463a9dd8a 6bf73ef5-add7-4fca-9109-abeff44fb7c5
+896ba7d1-e97f-43b1-8e1b-bba134d5c145 2021-02-04 16:04:59.962+08 2021-02-04 16:04:59.962+08 0ae9cc6b-99ae-4795-a8c3-b31ff5b2e7d2 d78ba7fc-eb9a-469d-b35b-b200fb48a6bb
+4211da99-130d-4ac4-8432-a67ad44c0857 2021-02-04 16:07:35.013+08 2021-02-04 16:07:35.013+08 5cecb8ee-3d0b-41dd-8293-4108719a7e08 6a0564cf-84b7-417f-b2d3-2d28b6c7b638
+50f2eda7-ae88-4f1b-a4f1-24df1b6e17d7 2021-02-04 16:16:51.949+08 2021-02-04 16:16:51.949+08 2940ee26-449d-4390-8707-b8e0b150faad 7a654ff2-acea-4f2d-b306-1228a40efd06
+79368027-6041-4beb-84ae-4a755186bbe0 2021-02-05 15:01:15.427+08 2021-02-05 15:01:15.427+08 bf24a684-40ba-4a05-9745-dfad12c4a4a2 26b345ea-524f-418a-9d6a-d49951b47485
+8cce4c10-b042-49df-b93c-56113a71a92f 2021-02-05 15:02:09.635+08 2021-02-05 15:02:09.635+08 8ebf5c23-cb3c-4f9f-a506-a3d125575921 0c3e6ef2-ff60-4ea4-a244-445fb7892e3d
+f1532caf-ec92-4856-9540-6078184f8ea7 2021-02-05 15:04:22.755+08 2021-02-05 15:04:22.755+08 68beb8e6-51d2-40db-8cae-5ba79d4cf5c6 b02ec007-4ee9-4359-b072-214b6ca173e8
+7e844cca-cbae-4b3e-99f5-f58e82768971 2021-02-05 15:08:44.937+08 2021-02-05 15:08:44.937+08 915fe37c-0682-4390-8b9c-06edc2294532 f3aa671f-e62a-4ba6-ae6c-97bfcd022d22
+6b991f09-8245-4ba8-9371-5828936816d8 2021-02-05 15:18:10.081+08 2021-02-05 15:18:10.081+08 257470bc-2299-4185-a68b-b194c1b926ad 0e3d3a37-7895-4682-8c35-27d59bdfae11
+4989f3a0-7180-4a0a-8d40-0a591a5ba4f9 2021-02-05 15:20:48.056+08 2021-02-05 15:20:48.056+08 99112554-2cb9-43fc-adef-6068fdb897a7 7eeac6c1-3030-42a2-a1f5-53ade070641a
+1ceb933b-28ce-43f2-85ab-f24e1bb107d2 2021-02-09 14:17:17.696+08 2021-02-09 14:17:17.696+08 05a8211d-6e5e-4a0a-98d2-f84900bba1a5 80560552-2ebd-411b-8da6-0292bc9fdd7c
+52330a4b-fbbd-4e63-900d-33466df3137a 2021-02-09 17:31:07.33+08 2021-02-09 17:31:07.33+08 5fdff23a-1bda-42fc-bde0-fc7f6fe1b4cb ffa7ddbc-1735-46e1-b3ad-10c710cd67c9
+b153450c-004e-4c69-a119-92644496198b 2021-02-20 15:02:02.879+08 2021-02-20 15:02:02.879+08 5b2e7aad-4a66-4797-8897-7eefc972e1f9 ba575768-81c4-4c14-9f2d-04fa864e226d
+75280fee-b568-41b7-bab6-debf3a7fe0c4 2021-02-23 11:01:05.867+08 2021-02-23 11:01:05.867+08 3d7d32da-438a-4e22-8879-eb3b7b2f98d2 c5e4fedb-77c1-4314-a2ab-ca98dbe14c21
+772da985-0ffa-413b-851d-24b813cd106d 2021-02-24 14:45:18.818+08 2021-02-24 14:45:18.818+08 487f64fc-b23f-4c0e-ac96-c610a0ff7a08 6c79ae4b-1355-4f76-b425-653185144205
+f725b38f-caf5-42b6-8456-1748c7fdaa46 2021-02-24 17:32:39.44+08 2021-02-24 17:32:39.44+08 e9332808-1b40-44af-9aeb-7c21643b1e80 ac468c3a-9a33-4fd5-89b2-7b2a21cd90bb
+cb733ee8-ca62-4f68-ba58-3eeac7c0224d 2021-02-24 17:38:25.397+08 2021-02-24 17:38:25.397+08 74dd6bb1-b532-407c-b444-e640a9ee293e 738176b6-6b0f-4161-9e28-2bb76e3c2ea8
+f6450ff9-e6a4-417c-9c03-79d9ff5363cd 2019-12-18 13:35:43.323+08 2019-12-18 13:35:43.323+08 5733bc64-355b-495b-adf8-e8cbae48d357 456f2fa3-686a-4b01-9e49-7d92132f998e
+75a3a7f8-811b-463f-a208-968a2eed5304 2020-04-13 13:07:13.862+08 2020-04-13 13:07:13.862+08 1afc6939-be77-4cb0-b7a1-59ed529b9ee1 c478a407-4b1f-4320-b3ac-df373fa8c28a
+9fd02fae-52fa-4d26-af28-8200e04693b5 2020-10-09 14:19:56.448+08 2020-10-09 14:19:56.448+08 9ceb3806-c599-431c-b278-80ea9d6db7ba d225ef09-9a28-4c68-9bc5-b9856e4b9af6
+0ed07e4d-2f54-4ed5-8815-7b162df809bd 2020-10-10 10:54:56.539+08 2020-10-10 10:54:56.539+08 a717ab85-b28a-45e5-a9f2-4ed179975b6e 9d5d9205-b7b8-46bf-9ed6-9222582bfd40
+177d4588-7929-44f3-bfdf-44b7c8606f98 2020-11-26 10:49:09.72+08 2020-11-26 10:49:09.72+08 ec43a63c-84a3-4a0a-964e-79fa8af558e7 a91c63ab-c8b0-40b3-9e9b-d01e9a977815
+26dca2b3-6cce-4696-8e44-5be32f4f2ae8 2020-11-26 10:57:51.668+08 2020-11-26 10:57:51.668+08 6c6317e7-c5c4-4ef8-ab38-3da0e4824f91 c9821beb-28aa-47a7-a541-24967d0e81d1
+9fb11220-d54a-4d3a-9781-ae907bc46d48 2020-11-27 10:01:58.021+08 2020-11-27 10:01:58.021+08 830b53c4-b4d6-4d85-9776-3b448ee62c5e 516bd35c-8acd-4dec-bea1-ec61f54b6182
+13c6ecee-c2ef-4c4a-a69d-0c4ab55dcab4 2020-12-03 17:40:46.596+08 2020-12-03 17:40:46.596+08 aa8f7231-23cf-47e0-a8cb-f045759a3304 993bbe10-57d5-46e6-87d1-ee971f5cade7
+a13caf46-d0e2-4696-a846-52cba2452738 2020-12-08 17:06:14.296+08 2020-12-08 17:06:14.296+08 82830f9f-f318-4308-babc-79341cb03954 44d4ef21-b985-488f-9e4b-bfa73bc4a80e
+f0557492-16ed-4b04-bd63-b089c5f87068 2020-12-09 13:48:51.974+08 2020-12-09 13:48:51.974+08 d09dc928-d5c0-4723-b23f-863fbb56c56f a3e88944-8cb9-4ae0-85d9-d25e1cb4d78d
+ca20a358-51e1-468b-b1dc-88329c9cd142 2020-12-09 13:58:22.373+08 2020-12-09 13:58:22.373+08 47875511-0ac0-4938-a38b-277669f302e9 de034ad9-62e3-419a-9411-ae2b018ae160
+f4283101-1811-412b-babc-e5892e48452e 2020-12-10 15:59:20.592+08 2020-12-10 15:59:20.592+08 08d7f8f5-45fb-4a61-8b6f-04c0710b09c3 80e27ea5-5874-43f7-8f20-c298ef43108b
+859a954c-2561-431c-b98b-9bc82f01adb8 2020-12-11 09:50:36.504+08 2020-12-11 09:50:36.504+08 dbbe4022-fbd5-42cc-9e58-233046723571 2dc45df9-c912-47a6-87f4-8eb1a5ee1272
+3b2984f5-0ef0-4a48-afa3-9ebcfd8dccd5 2020-12-11 10:22:17.882+08 2020-12-11 10:22:17.882+08 bf13586b-7b53-4c49-8131-f81bb6128330 740161b7-4fc4-4ea8-a6e7-92e2967ca6eb
+ae912f8c-a1ce-45be-82c6-10a7561345e5 2020-12-15 09:15:14.449+08 2020-12-15 09:15:14.449+08 cfb7053c-3698-4308-9245-c7fdfb84a202 11dcf80d-a46c-4e22-9a8f-bb593a7e28fd
+6c750999-8147-4ae4-8c14-544f95377878 2020-12-16 15:29:32.433+08 2020-12-16 15:29:32.433+08 4b302156-72de-4f74-a828-06b1e47938a3 702a3ccf-9ab6-4e19-95b9-6245c6e04333
+8472f70e-34fe-43c2-aae1-2fba8b16675c 2020-12-16 15:35:33.778+08 2020-12-16 15:35:33.778+08 9acc6ecb-52ee-4070-8fe5-6e893642d30e 2e3d8e5f-92c8-4b83-9d21-aef4be9b2263
+bf48148e-4c92-45bc-839a-6de986f9d861 2020-12-16 15:38:50.632+08 2020-12-16 15:38:50.632+08 bd26c9fd-802a-4cca-8f55-3a27e7bfb026 dab5f60a-dbfc-4951-96bb-dad1810a2ad0
+674d24e8-b26a-41ab-ad1e-10b4db95f271 2020-12-21 17:00:24.216+08 2020-12-21 17:00:24.216+08 09252fcf-2e4d-42ea-b1a0-04b8fd99c5dc 433ff29e-a7c6-430b-a1e5-3a709951b9e0
+41099241-9771-442d-9ccc-eb2dd342ed88 2020-12-22 08:40:50.187+08 2020-12-22 08:40:50.187+08 31ecb271-8866-4680-add6-52e257911749 9e915601-a6e0-42f9-b2bc-cf1796c48cb1
+713ca15b-8227-4fdb-8508-c235a536ad15 2020-12-24 12:36:44.277+08 2020-12-24 12:36:44.277+08 198ba586-24af-4e12-9eff-7c35453816b6 7acb204d-bb15-4ee5-894c-714cc65e4daf
+b323b1a2-f8b7-4ffe-8849-0c496a08421f 2020-12-24 14:37:40.338+08 2020-12-24 14:37:40.338+08 b7a0ef5f-adce-4d74-808d-e8cb24d7955b 30181893-36ba-45e6-b87f-8d8cac3d3b37
+6c03615c-45a0-4604-9246-ddbe52ca8c30 2021-01-29 11:01:43.637+08 2021-01-29 11:01:43.637+08 2364818e-4cde-4614-a15d-7a127ceabf7d 429a3145-8b01-4e86-b3ca-dbc5fe17a025
+88e029ae-3bb6-4cdf-a3b7-6fb022566cb4 2021-02-05 15:18:26.082+08 2021-02-05 15:18:26.082+08 d9456b27-5a08-40b3-bac7-967d99928997 65c99cac-65a9-4d11-ba14-78bf2cbeae96
+\.
+
+
+--
+-- Data for Name: CapabilityProperty; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."CapabilityProperty" (id, name, "showName", category, image, enum, "defaultValue", "precision", max, min, unit, "desc", "createdAt", "updatedAt", "capabilityMetaId", "propertyTypeId", required, "isOtherParameter") FROM stdin;
+342 xDegree X轴角度 Output \N \N \N 3 15 -15 ° 2017-11-06 15:04:16.821+08 2017-11-06 15:04:16.821+08 8e034647-583f-43a4-9aa1-1291e5bd3b0d 2 t f
+343 yDegree Y轴角度 Output \N \N \N 3 15 -15 ° 2017-11-06 15:04:16.826+08 2017-11-06 15:04:16.826+08 8e034647-583f-43a4-9aa1-1291e5bd3b0d 2 t f
+345 channel channel Output \N 0 2017-11-10 14:17:53.9+08 2017-11-10 14:22:11.273+08 e265c046-3bc7-43b9-85d7-493bfd4c76d8 1 t f
+274 temp 温度 Output \N 0 ℃ 2017-09-25 20:17:11.292+08 2017-09-25 20:23:02.063+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+1308 jmxCurrentConnNum jmx当前连接数节点 Variable \N \N objectName=Catalina:j2eeType=Servlet,* \N \N \N \N 2018-01-09 10:35:25.645+08 2018-01-09 10:35:25.645+08 3a66e33a-e25c-45ce-b87b-534d9d4bcaf4 5 t f
+350 direction 车向 Output \N \N \N \N \N \N 2017-11-10 14:26:45.919+08 2017-11-10 14:26:45.927+08 e265c046-3bc7-43b9-85d7-493bfd4c76d8 1 t f
+254 angleX X轴角度 Output \N 4 ° 2017-09-25 10:44:21.681+08 2017-09-26 14:56:18.66+08 13cc9f05-5d98-4778-93a9-a423b70250a7 2 t f
+1354 phy1 温度 Output \N \N \N 2 85 -25 ℃ 2018-01-10 16:58:20.476+08 2018-01-10 16:58:20.489+08 9bf06fea-f0b0-492f-9d2f-5ea749264883 2 t f
+351 fSumWeight 总重 Output \N \N \N \N \N \N 2017-11-10 14:27:07.608+08 2017-11-10 14:27:07.612+08 e265c046-3bc7-43b9-85d7-493bfd4c76d8 1 t f
+317 overload 超重 Output \N \N \N \N \N \N 2017-09-29 09:13:52.561+08 2017-09-29 09:13:52.574+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+1358 phy4 CO2浓度 Output \N \N \N 2 5000 0 ppm 2018-01-10 17:15:24.796+08 2018-01-10 17:15:24.811+08 8096b88c-dc64-4f26-8f04-6ac919d70447 2 t f
+336 y Output \N \N \N \N \N \N 2017-10-31 18:02:48.597+08 2017-10-31 18:02:48.597+08 cbd4f0c1-9be1-4123-8fff-9d16d6f163a3 2 t f
+337 temp Output \N \N \N \N \N \N 2017-10-31 18:02:48.602+08 2017-10-31 18:02:48.602+08 cbd4f0c1-9be1-4123-8fff-9d16d6f163a3 2 t f
+1435 memRate 内存使用率 Variable \N \N 20.00 2 100.00 10.00 % 内存使用率 2018-01-19 15:35:35.369+08 2018-01-19 15:35:35.374+08 1e87be3b-9782-4b75-8b62-0aa49b44daea 2 t f
+341 yDegree Y轴角度 Output \N 3 15 -15 ° 2017-11-06 11:16:45.21+08 2017-11-06 14:45:45.562+08 62f4f7c3-95a8-49d9-a5d1-c8f432c8d598 2 t f
+316 overload 超重 Output \N 0 2017-09-28 17:35:28.526+08 2018-05-09 16:30:43.574+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+352 axieWeight1 轴1重量 Output \N \N \N \N \N \N 2017-11-10 14:27:59.36+08 2017-11-10 14:27:59.373+08 e265c046-3bc7-43b9-85d7-493bfd4c76d8 1 t f
+335 x Output \N \N 2017-10-31 18:02:48.59+08 2018-02-28 16:46:11.943+08 cbd4f0c1-9be1-4123-8fff-9d16d6f163a3 2 t f
+353 axieWeight2 轴2重量 Output \N \N \N \N \N \N 2017-11-10 14:28:13.459+08 2017-11-10 14:28:13.464+08 e265c046-3bc7-43b9-85d7-493bfd4c76d8 1 t f
+355 axieWeight4 轴4重量 Output \N \N \N \N \N \N 2017-11-10 14:28:46.44+08 2017-11-10 14:28:46.448+08 e265c046-3bc7-43b9-85d7-493bfd4c76d8 1 t f
+1735 能力1-属性1 属性1 Constant \N \N 0.0 \N \N \N 米 2018-03-07 14:04:43.47+08 2018-03-07 14:04:43.477+08 7ca00003-ea25-4456-acad-32705e36bea1 2 t f
+357 axieWeight6 轴6重量 Output \N \N \N \N \N \N 2017-11-10 14:30:14.203+08 2017-11-10 14:30:14.211+08 e265c046-3bc7-43b9-85d7-493bfd4c76d8 1 t f
+1736 frequency 频率 Output \N 3 \N \N HZ 2018-03-07 17:15:48.186+08 2018-03-07 17:15:48.186+08 c6ff7e02-05d5-45ee-9837-f61976b9d230 2 t f
+47 flow 标况流量 Output \N \N \N \N \N \N m^3/h 2017-08-26 15:45:06.833+08 2017-08-26 15:45:06.833+08 e1d1f6d5-ffa4-4ad6-b314-d49a9c25735b 2 t f
+1737 temperature 温度 Output \N 2 \N \N ℃ 2018-03-07 17:15:48.192+08 2018-03-07 17:15:48.192+08 c6ff7e02-05d5-45ee-9837-f61976b9d230 2 t f
+48 cumulant 累积量 Output \N \N \N \N \N \N m³ 2017-08-26 15:45:06.837+08 2017-08-26 15:45:06.837+08 e1d1f6d5-ffa4-4ad6-b314-d49a9c25735b 2 t f
+49 temp 温度 Output \N \N \N \N \N \N ℃ 2017-08-26 15:45:06.841+08 2017-08-26 15:45:06.841+08 e1d1f6d5-ffa4-4ad6-b314-d49a9c25735b 2 t f
+50 pressure 压力 Output \N \N \N \N \N \N KPa 2017-08-26 15:45:06.844+08 2017-08-26 15:45:06.844+08 e1d1f6d5-ffa4-4ad6-b314-d49a9c25735b 2 t f
+255 temp 温度 Output \N \N \N 2 120 -40 ℃ 2017-09-25 10:54:34.188+08 2017-09-25 10:54:34.188+08 8092619d-978e-402a-9aa1-897cb718a39b 2 t f
+281 grossWeight 总重 Output \N \N \N \N \N \N Kg 2017-09-25 20:40:46.386+08 2017-09-25 20:40:46.386+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+282 speed 车速 Output \N \N \N \N \N \N Kg 2017-09-25 20:40:46.39+08 2017-09-25 20:40:46.39+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+283 axisnum 轴数 Output \N \N \N \N \N \N 2017-09-25 20:40:46.394+08 2017-09-25 20:40:46.394+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+284 totalBase 总轴距 Output \N \N \N \N \N \N cm 2017-09-25 20:40:46.397+08 2017-09-25 20:40:46.397+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+1063 frequency 频率 Output \N 3 \N \N HZ 2018-01-08 08:17:08.6+08 2018-01-08 08:17:08.6+08 743c44f5-480c-4c97-80ef-a03ba282ed49 2 t f
+285 carType 车型号 Output \N \N \N \N \N \N 2017-09-25 20:40:46.401+08 2017-09-25 20:40:46.401+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+286 direction 方向 Output \N \N \N \N \N \N 2017-09-25 20:40:46.405+08 2017-09-25 20:40:46.405+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+287 cmsLength 车长 Output \N \N \N \N \N \N cm 2017-09-25 20:40:46.409+08 2017-09-25 20:40:46.409+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+288 licence 车牌 Output \N \N \N \N \N \N 2017-09-25 20:40:46.414+08 2017-09-25 20:40:46.414+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+27 length 测量距离 Output \N 4 80 0.05 m 2017-08-24 20:03:54.302+08 2017-11-30 15:25:50.843+08 86b95247-634a-44af-8af0-b047a5f10f5d 2 t f
+1074 frequency 频率 Output \N 3 \N \N HZ 2018-01-08 08:30:38.771+08 2018-01-08 08:30:38.771+08 f2e47767-7959-4aeb-bfe0-0c07202c906c 2 t f
+1895 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 11:52:14.581+08 2018-03-26 11:52:14.588+08 afdde18b-1a6e-4e2b-8ef9-d5aeb34e82cc 2 t f
+1218 yDegree Y轴角度 Output \N 3 10 -10 ° 2018-01-08 14:58:38.577+08 2018-01-08 17:12:48.855+08 db8bf711-b26f-4e79-bc46-564fbc4f60ac 2 t f
+1732 anglex X轴角度 Output \N 2 \N \N ° 2018-03-07 09:25:51.002+08 2018-04-02 17:11:17.686+08 c08bb21f-6cdb-46c1-a8df-3ea9d92279ba 2 t f
+1699 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 10:27:18.747+08 2018-03-02 10:27:18.754+08 e7092d0b-709a-414e-a8ca-a1e21ef6e36c 2 t f
+1701 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 10:53:56.609+08 2018-03-02 10:53:56.616+08 fbdf40ff-88c5-4ca5-a2cf-e0fcbcb9d45d 2 t f
+1738 physicalvalue 应力 Output \N 3 \N \N MPa 2018-03-07 17:15:48.197+08 2018-03-23 14:08:16.463+08 c6ff7e02-05d5-45ee-9837-f61976b9d230 2 t f
+289 axieWeight 轴重 Output \N 0 Kg 2017-09-25 20:40:46.417+08 2018-05-09 17:05:11.662+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+1516 frequency 频率 Output \N 3 \N \N Hz 2018-01-23 14:53:15.775+08 2018-03-02 14:24:14.459+08 069cdfbe-2463-40a3-a677-fa3564d06956 2 t f
+805 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 15:11:19.833+08 2018-01-05 15:11:19.833+08 4f08e245-f581-4570-8175-92b665bdd6c8 2 t f
+72 Distance 沉降值 Variable \N \N 0 3 1000 -1000 mm 2017-08-31 17:10:06.858+08 2017-08-31 17:10:06.866+08 38b407d6-2d46-46be-bb4d-9d0c6e673051 2 t f
+73 Temp 温度值 Variable \N \N 0 2 100 -10 ° 2017-08-31 17:10:50.355+08 2017-08-31 17:10:50.362+08 38b407d6-2d46-46be-bb4d-9d0c6e673051 2 t f
+65 temp 温度 Output \N \N \N \N \N \N ℃ 2017-08-28 20:54:47.342+08 2017-08-28 20:54:47.351+08 a5866031-3267-4c41-97d2-0c8eeff1baab 2 t f
+299 temp 温度 Output \N \N \N \N \N \N ℃ 2017-09-25 20:40:46.453+08 2017-09-25 20:40:46.453+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+1896 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 11:52:41.68+08 2018-03-26 11:52:41.687+08 afdde18b-1a6e-4e2b-8ef9-d5aeb34e82cc 2 t f
+1739 frequency 频率 Output \N 3 \N \N HZ 2018-03-07 17:18:03.912+08 2018-03-07 17:18:03.912+08 a0f44ec1-49da-4ca4-83d2-323cdeeb2864 2 t f
+1740 temperature 温度 Output \N 2 \N \N ℃ 2018-03-07 17:18:03.917+08 2018-03-07 17:18:03.917+08 a0f44ec1-49da-4ca4-83d2-323cdeeb2864 2 t f
+300 width 车宽 Output \N \N \N \N \N \N cm 2017-09-25 20:40:46.456+08 2017-09-25 20:40:46.456+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+301 height 车高 Output \N \N \N \N \N \N cm 2017-09-25 20:40:46.459+08 2017-09-25 20:40:46.459+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+302 crossRoad 跨道 Output \N \N \N \N \N \N 2017-09-25 20:40:46.462+08 2017-09-25 20:40:46.462+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+303 serialNum 序列号 Output \N \N \N \N \N \N 2017-09-25 20:40:46.465+08 2017-09-25 20:40:46.465+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+807 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-05 15:11:19.838+08 2018-01-05 15:11:19.838+08 4f08e245-f581-4570-8175-92b665bdd6c8 2 t f
+808 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 15:11:20.713+08 2018-01-05 15:11:20.713+08 63bfc488-1cc3-4d31-a86c-0b1d49baddc6 2 t f
+810 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-05 15:11:20.723+08 2018-01-05 15:11:20.723+08 63bfc488-1cc3-4d31-a86c-0b1d49baddc6 2 t f
+1867 physicalvalue 应变 Output \N 4 1500 -1500 με 2018-03-26 11:24:13.133+08 2018-03-26 11:24:13.133+08 921508aa-21fc-41c6-b609-b6df5206ea7b 2 t f
+809 physicalvalue 应力 Output \N 3 300 0 MPa 2018-01-05 15:11:20.718+08 2018-03-23 11:18:01.914+08 63bfc488-1cc3-4d31-a86c-0b1d49baddc6 2 t f
+811 windSpeed 风速 Output \N 1 10 0 m/s 2018-01-05 15:12:52.901+08 2018-01-08 16:54:37.653+08 d9aa001d-6bbe-436c-89ac-c361f78f38ea 2 t f
+1066 frequency 频率 Output \N 3 \N \N HZ 2018-01-08 08:30:38.165+08 2018-01-08 08:30:38.165+08 af9a44db-ee90-4372-87a9-b050e87791bc 2 t f
+68 laeq 平均声压 Output \N \N \N \N \N \N dB 2017-08-28 22:04:57.697+08 2017-08-28 22:04:57.705+08 7fab5981-f265-41b6-b77c-36ac36a17a85 2 t f
+1868 physicalvalue 应变 Output \N \N \N 4 1500 -1500 με 2018-03-26 11:24:13.142+08 2018-03-26 11:24:13.142+08 8e3f282e-7428-497b-baa8-0ca8fd248e36 2 t f
+806 physicalvalue 应力 Output \N 3 400 0 MPa 2018-01-05 15:11:19.836+08 2018-03-23 11:17:34.782+08 4f08e245-f581-4570-8175-92b665bdd6c8 2 t f
+1741 physicalvalue 荷载 Output \N 3 \N \N t 2018-03-07 17:18:03.921+08 2018-03-23 14:08:08.401+08 a0f44ec1-49da-4ca4-83d2-323cdeeb2864 2 t f
+340 xDegree X轴角度 Output \N 3 15 -15 ° 2017-11-06 11:16:45.205+08 2017-11-06 14:45:35.805+08 62f4f7c3-95a8-49d9-a5d1-c8f432c8d598 2 t f
+346 carmodel 车型号 Output \N 0 2017-11-10 14:20:31.56+08 2017-11-10 14:22:06.689+08 e265c046-3bc7-43b9-85d7-493bfd4c76d8 1 t f
+257 speed 车速 Output \N 0 Km/h 2017-09-25 19:45:57.221+08 2017-09-25 20:21:10.069+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+256 grossWeight 总重 Output \N 0 Kg 2017-09-25 19:45:57.217+08 2017-09-25 20:21:15.251+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+275 width 车宽 Output \N 0 cm 2017-09-25 20:17:54.534+08 2017-09-25 20:23:06.686+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+277 crossRoad 跨道 Output \N 0 2017-09-25 20:21:03.019+08 2017-09-25 20:25:42.896+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+304 limitWeight 限重 Output \N \N \N \N \N \N Kg 2017-09-25 20:40:46.468+08 2017-09-25 20:40:46.468+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+2 y Y角度 Output \N 0 ° 2017-08-12 17:30:28.191+08 2017-12-06 18:55:19.939+08 e8a19dbd-26d3-49a0-87b6-8248ceb6fc53 2 t f
+63 temperature 温度 Output \N 2 70 -25 ℃ 2017-08-28 20:38:41.959+08 2018-03-23 16:10:12.846+08 e232591d-9a18-42c9-a7a4-dad82336325d 2 t f
+1897 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 11:53:17.901+08 2018-03-26 11:53:17.908+08 afdde18b-1a6e-4e2b-8ef9-d5aeb34e82cc 2 t f
+1905 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 13:45:09.276+08 2018-03-26 13:45:09.285+08 f2877cda-87cc-485a-9fc6-11f7ef8b2624 2 t f
+1082 frequency 频率 Output \N 3 \N \N HZ 2018-01-08 08:30:39.68+08 2018-01-08 08:30:39.68+08 ab8b7681-8ef7-4101-9a8a-5bee37ee7510 2 t f
+1906 physicalvalue 荷载力 Output \N 3 105 -105 KN 正值是张拉力,负值是承压力 2018-03-26 13:46:14.879+08 2018-03-26 13:46:29.007+08 f2877cda-87cc-485a-9fc6-11f7ef8b2624 2 t f
+1072 physicalvalue 压力 Output \N 3 1 0 MPa 2018-01-08 08:30:38.193+08 2018-03-28 23:16:30.601+08 af9a44db-ee90-4372-87a9-b050e87791bc 2 t f
+1067 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-08 08:30:38.169+08 2018-03-28 23:16:36.209+08 af9a44db-ee90-4372-87a9-b050e87791bc 2 t f
+264 axieWeight 轴重 Output \N 0 Kg 2017-09-25 20:13:06.442+08 2018-05-09 17:00:45.546+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+821 am 幅值 Output \N 3 \N \N mv 2018-01-05 15:18:31.335+08 2018-03-02 10:24:18.996+08 5714767a-3b97-4a8c-a5f6-abd8091e8662 2 t f
+305 limitTotalWeight 限总重 Output \N \N \N \N \N \N Kg 2017-09-25 20:40:46.471+08 2017-09-25 20:40:46.471+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 5 t f
+124 windSpeed 风速 Output \N 3 60 0 m/s 2017-09-04 14:12:42.51+08 2017-09-27 10:23:23.312+08 8b897f24-accb-4630-b1fa-e408e358fd35 2 t f
+1898 physicalvalue 应变 Output \N 3 3000 -3000 με 2018-03-26 11:54:32.744+08 2018-03-26 11:57:05.33+08 afdde18b-1a6e-4e2b-8ef9-d5aeb34e82cc 2 t f
+1900 temperature 温度 Output \N \N \N 2 \N ℃ 2018-03-26 13:40:29.94+08 2018-03-26 13:40:29.945+08 c26fbe87-b6ec-4f0d-a907-e05fddec8f41 2 t f
+61 anglex X轴角度 Output \N 2 30 -30 ° 2017-08-28 20:37:36.993+08 2018-03-23 16:10:26.59+08 e232591d-9a18-42c9-a7a4-dad82336325d 2 t f
+318 temp 温度 Output \N \N \N 2 \N \N ℃ 2017-09-29 15:08:42.958+08 2017-09-29 15:08:42.958+08 72037569-7638-4b93-9212-ba15109f9afb 2 t f
+338 temp 温度 Output \N 2 125 -40 ℃ 2017-11-01 15:38:54.186+08 2018-01-08 17:15:57.932+08 59674186-4b3a-4864-845c-81ba695df093 2 t f
+258 axisnum 轴数 Output \N 0 2017-09-25 20:04:44.357+08 2017-09-25 20:21:19.176+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+262 cmsLength 车长 Output \N 0 cm 2017-09-25 20:11:42.536+08 2017-09-25 20:21:58.777+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+280 limtTotalWeight 限总重 Output \N \N \N \N \N \N Kg 2017-09-25 20:25:18.224+08 2017-09-25 20:25:18.231+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+278 serialNum 序列号 Output \N 0 2017-09-25 20:24:10.153+08 2017-09-25 20:25:50.902+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+306 max Output \N \N \N \N \N \N 2017-09-26 10:30:13.282+08 2017-09-26 10:30:13.282+08 46e0602d-85be-45f3-99cd-4a9a0ec8c3f0 2 t f
+307 min Output \N \N \N \N \N \N 2017-09-26 10:30:13.287+08 2017-09-26 10:30:13.287+08 46e0602d-85be-45f3-99cd-4a9a0ec8c3f0 2 t f
+308 Laeq Output \N \N \N \N 2017-09-26 10:30:13.29+08 2017-09-28 09:15:15.39+08 46e0602d-85be-45f3-99cd-4a9a0ec8c3f0 2 t f
+319 12312312 12312312 Variable \N 1 0 1 1 13 5555555555555555 2017-09-30 11:42:38.229+08 2017-09-30 11:43:08.238+08 755904b4-158d-413b-bc84-ad489380caf2 1 t f
+822 physicalvalue 荷载力 Output \N 4 160 -160 kN 正值是张拉力,负值是承压力 2018-01-05 15:18:31.339+08 2018-03-23 15:52:18.805+08 5714767a-3b97-4a8c-a5f6-abd8091e8662 2 t f
+62 angley Y轴角度 Output \N 2 30 -30 ° 2017-08-28 20:38:12.457+08 2018-03-23 16:10:47.198+08 e232591d-9a18-42c9-a7a4-dad82336325d 2 t f
+339 humi 湿度 Output \N 2 100 0 % 2017-11-01 15:38:54.192+08 2017-11-01 16:28:44.571+08 59674186-4b3a-4864-845c-81ba695df093 2 t f
+344 licence 车牌号 Output \N 0 2017-11-10 14:16:16.938+08 2017-11-10 14:18:26.039+08 e265c046-3bc7-43b9-85d7-493bfd4c76d8 5 t f
+348 axisnum 轴数 Output \N \N \N \N \N 2017-11-10 14:21:49.982+08 2017-11-10 14:21:49.994+08 e265c046-3bc7-43b9-85d7-493bfd4c76d8 1 t f
+347 speed 车数 Output \N 0 2017-11-10 14:21:15.914+08 2017-11-10 14:22:01.206+08 e265c046-3bc7-43b9-85d7-493bfd4c76d8 1 t f
+349 totalBase 轴距 Output \N \N \N \N \N \N 2017-11-10 14:24:37.141+08 2017-11-10 14:24:37.15+08 e265c046-3bc7-43b9-85d7-493bfd4c76d8 1 t f
+354 axieWeight3 轴3重量 Output \N \N \N \N \N \N 2017-11-10 14:28:31.401+08 2017-11-10 14:28:31.41+08 e265c046-3bc7-43b9-85d7-493bfd4c76d8 1 t f
+356 axieWeight5 轴5重量 Output \N \N \N \N \N \N 2017-11-10 14:29:53.471+08 2017-11-10 14:29:53.486+08 e265c046-3bc7-43b9-85d7-493bfd4c76d8 1 t f
+242 nlsx nlsx Variable \N \N nlsx \N \N \N 2017-09-19 16:23:55.249+08 2017-09-19 16:23:55.249+08 153bec2e-1a9a-428d-a5f6-8ff6a5b85fa0 5 t f
+263 licence 车牌 Output \N \N \N \N \N \N 2017-09-25 20:12:24.508+08 2017-09-25 20:12:24.515+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+276 height 车高 Output \N 0 cm 2017-09-25 20:18:13.212+08 2017-09-25 20:23:10.536+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+53 frequency 频率 Output \N \N \N \N \N \N Hz 2017-08-26 15:59:26.866+08 2017-08-26 15:59:26.866+08 12aa80e0-acfc-43e1-85c9-9cbabe6fa2ee 2 t f
+54 temperature 温度 Output \N \N \N \N ℃ 2017-08-26 15:59:26.869+08 2018-03-23 16:15:56.812+08 12aa80e0-acfc-43e1-85c9-9cbabe6fa2ee 2 t f
+69 lmax 最大声压 Output \N \N \N \N \N \N dB 2017-08-28 22:05:14.882+08 2017-08-28 22:05:14.888+08 7fab5981-f265-41b6-b77c-36ac36a17a85 2 t f
+70 lmin 最小声压 Output \N \N \N \N \N \N dB 2017-08-28 22:05:28.875+08 2017-08-28 22:05:28.883+08 7fab5981-f265-41b6-b77c-36ac36a17a85 2 t f
+71 power 电量 Output \N \N \N \N \N \N % 2017-08-28 22:08:07.352+08 2017-08-28 22:08:07.363+08 06cd5938-5a30-4ca3-910e-b174b900daff 1 t f
+1880 physicalvalue 荷载力 Output \N 4 105 -105 kN 2018-03-26 11:35:23.109+08 2018-03-26 11:36:48.258+08 053f72a5-5576-48de-baa6-a2732ff863cc 2 t f
+1879 physicalvalue 荷载力 Output \N 4 105 -105 kN 2018-03-26 11:35:23.093+08 2018-03-26 11:36:54.58+08 43e14c1c-a425-4001-9886-f41df72945ea 2 t f
+1075 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-08 08:30:38.775+08 2018-03-28 23:15:37.788+08 f2e47767-7959-4aeb-bfe0-0c07202c906c 2 t f
+1901 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 13:40:48.522+08 2018-03-26 13:40:48.531+08 c26fbe87-b6ec-4f0d-a907-e05fddec8f41 2 t f
+1882 physicalvalue 荷载力 Output \N 4 136 -136 kN 2018-03-26 11:35:23.216+08 2018-03-26 11:37:52.879+08 4f92b0e6-a618-4221-8c58-169247d88bd0 2 t f
+1881 physicalvalue 荷载力 Output \N 4 136 -136 kN 2018-03-26 11:35:23.21+08 2018-03-26 11:37:59.294+08 82a15a43-5463-4d67-88ea-0a816235bd70 2 t f
+1904 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 13:44:52.772+08 2018-03-26 13:44:52.781+08 f2877cda-87cc-485a-9fc6-11f7ef8b2624 2 t f
+1920 physicalvalue 荷载力 Output \N \N \N 4 160 -160 KN 2018-03-26 14:00:17.687+08 2018-03-26 14:00:17.692+08 ce140baa-bcd7-4756-9d06-9591535eed2a 2 t f
+817 frequency 频率 Output \N 3 \N \N Hz 2018-01-05 15:18:31.307+08 2018-03-26 14:01:15.798+08 5714767a-3b97-4a8c-a5f6-abd8091e8662 2 t f
+819 temperature 温度 Output \N 2 \N \N ℃ 2018-01-05 15:18:31.316+08 2018-03-26 14:01:19.846+08 5714767a-3b97-4a8c-a5f6-abd8091e8662 2 t f
+1080 physicalvalue 变位量 Output \N 3 200 0 mm 2018-01-08 08:30:38.805+08 2018-03-28 23:15:30.715+08 f2e47767-7959-4aeb-bfe0-0c07202c906c 2 t f
+147 illumination 光照 Output \N \N \N \N \N \N lux 2017-09-06 20:02:42.858+08 2017-09-06 20:02:42.865+08 1637283e-980c-4ed8-8cf3-71e794c45bb2 2 t f
+239 humi 湿度 Output \N \N \N \N \N \N % 2017-09-18 20:53:58.411+08 2017-09-18 20:53:58.411+08 2b50fea6-1651-43d8-8e42-2faca6f3d3ac 2 t f
+240 Temp 温度 Output \N \N \N \N \N \N ℃ 2017-09-18 21:07:16.322+08 2017-09-18 21:07:16.332+08 30898650-f0f5-46dc-adad-62e86317d96b 2 t f
+241 Hum 湿度 Output \N \N \N \N \N \N ° 2017-09-18 21:07:50.148+08 2017-09-18 21:07:50.155+08 30898650-f0f5-46dc-adad-62e86317d96b 2 t f
+125 windDirection 风向 Output \N 2 360 0 ° 2017-09-04 14:12:42.516+08 2017-09-27 10:23:07.561+08 8b897f24-accb-4630-b1fa-e408e358fd35 2 t f
+259 totalBase 总轴距 Output \N 0 cm 2017-09-25 20:06:00.587+08 2017-09-25 20:21:32.542+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+177 windSpeed 风速 Output \N 2 m/s 2017-09-13 09:13:35.777+08 2017-09-27 11:03:36.965+08 d0fd7335-0b93-4716-9793-e95ae31f1765 2 t f
+814 zAccelertation Z轴加速度 Output \N 2 5000 0 mg 2018-01-05 15:16:50.301+08 2018-01-08 16:50:27.713+08 12ffe39f-e941-4496-a0af-ae5d4c1e0d29 2 t f
+149 yDegree Y轴角度 Output \N 4 180 0 ° 2017-09-07 14:40:21.34+08 2017-09-27 15:40:35.023+08 eea54bd1-3ede-4ab6-b07d-8b1f58292efc 2 t f
+148 xDegree X轴角度 Output \N 4 180 0 ° 2017-09-07 14:40:21.332+08 2017-09-27 15:40:42.095+08 eea54bd1-3ede-4ab6-b07d-8b1f58292efc 2 t f
+150 temp 温度 Output \N 2 120 -40 ℃ 2017-09-07 14:40:21.345+08 2017-09-27 15:40:56.419+08 eea54bd1-3ede-4ab6-b07d-8b1f58292efc 2 t f
+93 yDegree Y轴角度 Output \N 4 30 -30 ° 2017-09-02 14:47:06.956+08 2017-09-28 09:05:59.78+08 753c5c99-5da6-4172-9173-492353bb0533 2 t f
+92 xDegree X轴角度 Output \N 4 30 -30 ° 2017-09-02 14:47:06.952+08 2017-09-28 09:06:07.242+08 753c5c99-5da6-4172-9173-492353bb0533 2 t f
+1899 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 13:39:10.996+08 2018-03-26 13:39:11.002+08 c26fbe87-b6ec-4f0d-a907-e05fddec8f41 2 t f
+1907 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 13:50:32.994+08 2018-03-26 13:50:33.004+08 e3bf8273-2a58-438d-b214-0fd258644ef8 2 t f
+1356 phy2 湿度 Output \N \N \N 2 100 0 %RH 2018-01-10 17:12:02.3+08 2018-01-10 17:12:02.314+08 8096b88c-dc64-4f26-8f04-6ac919d70447 2 t f
+168 temp 温度 Output \N \N \N \N \N \N ℃ 2017-09-12 17:57:39.274+08 2017-09-12 17:57:39.274+08 e5bbfc36-064a-45ac-adf0-2003947dd2c4 2 t f
+1439 name 名称 Variable \N \N \N \N \N \N 2018-01-22 10:22:11.35+08 2018-01-22 10:22:11.355+08 3d303bbc-0f1a-4105-b7a6-9db99aefb409 5 t f
+169 pressure 压强 Output \N \N \N \N \N \N KPa 2017-09-12 17:57:39.28+08 2017-09-12 17:57:39.28+08 e5bbfc36-064a-45ac-adf0-2003947dd2c4 2 t f
+170 standardTotalFlow 标况累积量 Output \N \N \N \N \N \N m^3 2017-09-12 17:57:39.283+08 2017-09-12 17:57:39.283+08 e5bbfc36-064a-45ac-adf0-2003947dd2c4 2 t f
+171 standardInstanceFlow 标况瞬时量 Output \N \N \N \N \N \N m^3/h 2017-09-12 17:57:39.286+08 2017-09-12 17:57:39.286+08 e5bbfc36-064a-45ac-adf0-2003947dd2c4 2 t f
+172 normalTotalFlow 工况累积量 Output \N \N \N \N \N \N m^3 2017-09-12 17:57:39.29+08 2017-09-12 17:57:39.29+08 e5bbfc36-064a-45ac-adf0-2003947dd2c4 2 t f
+173 normalInstanceFlow 工况瞬时量 Output \N \N \N \N \N \N m^3/h 2017-09-12 17:57:39.293+08 2017-09-12 17:57:39.293+08 e5bbfc36-064a-45ac-adf0-2003947dd2c4 2 t f
+174 length 长度 Output \N \N \N \N \N \N m 2017-09-12 18:08:25.116+08 2017-09-12 18:08:25.116+08 c59b78f5-1913-43de-8355-67d4c34b662a 2 t f
+813 yAccelertation Y轴加速度 Output \N 2 5000 0 mg 2018-01-05 15:16:28.763+08 2018-01-08 16:50:17.985+08 12ffe39f-e941-4496-a0af-ae5d4c1e0d29 2 t f
+158 length 液位 Output \N 3 \N \N mm 2017-09-09 11:32:45.962+08 2018-07-02 14:28:17.147+08 27235845-4d19-4dfa-adc8-4f7b84233022 2 t f
+153 angleX X轴角度 Output \N 2 90 -90 ° 2017-09-07 20:33:27.571+08 2017-12-21 14:21:55.626+08 12de1b06-528f-42a2-8174-daa14d29506d 2 t f
+1 x X角度 Output \N 0 ° 2017-08-12 17:30:28.186+08 2017-12-06 18:56:38.368+08 e8a19dbd-26d3-49a0-87b6-8248ceb6fc53 2 t f
+154 angleY Y轴角度 Output \N 2 90 -90 ° 2017-09-07 20:34:10.815+08 2017-12-21 14:21:47.755+08 12de1b06-528f-42a2-8174-daa14d29506d 2 t f
+131 elongationIndicator 偏移量 Output \N 3 500 0 mm 2017-09-04 19:04:13.365+08 2018-01-08 10:20:30.569+08 2f698b72-9c05-42fe-a0e9-3224917239aa 2 t f
+164 hum 湿度 Output \N 2 100 0 %RH 2017-09-11 20:35:38.755+08 2017-12-21 13:57:24.953+08 368cf5ab-5455-422a-a659-ba613b272684 2 t f
+157 yDegree Y轴角度 Output \N 2 60 -60 ° 2017-09-08 17:28:38.393+08 2017-12-08 16:00:17.827+08 62a1a275-a6d3-44b4-b472-901f274afaaa 2 t f
+165 temp 温度 Output \N 2 80 -20 ℃ 2017-09-12 17:44:24.686+08 2017-12-21 17:52:00.794+08 6e5f9207-905d-4732-bb07-89e21da54dd1 2 t f
+331 PM10 PM10 Output \N 1 10000 0 ug/m³ 2017-10-31 15:36:38.667+08 2017-12-12 11:36:30.887+08 9b5c5f27-ebad-42e1-8586-405066f03c1d 2 t f
+156 xDegree X轴角度 Output \N 2 60 -60 ° 2017-09-08 17:28:38.391+08 2017-12-08 16:00:07.785+08 62a1a275-a6d3-44b4-b472-901f274afaaa 2 t f
+104 angley Y轴角度 Output \N 2 30 -30 ° 2017-09-04 09:36:21.651+08 2018-03-23 16:17:16.925+08 cbca938f-e317-4e23-a721-4f2b7b54a827 2 t f
+105 temperature 温度 Output \N 2 70 -25 ℃ 2017-09-04 09:36:21.655+08 2018-03-23 16:17:25.435+08 cbca938f-e317-4e23-a721-4f2b7b54a827 2 t f
+52 temperature 温度 Output \N 2 120 -40 ℃ 2017-08-26 15:51:32.561+08 2018-03-23 16:01:27.746+08 aa48a11a-b276-4670-bc85-8c69368a7def 2 t f
+155 distance 距离 Output \N 1 40000 50 mm 2017-09-08 09:20:57.964+08 2017-12-21 11:25:50.866+08 394f3594-52f4-472a-9078-081172abaaae 2 t f
+146 pressure 压强 Output \N 3 200 0 mH2O 2017-09-06 19:42:30.112+08 2017-12-21 11:54:08.563+08 f02e6117-3fda-43f0-b465-8f5961e08bed 2 t f
+163 temp 温度 Output \N 2 70 -20 ℃ 2017-09-11 20:34:59.746+08 2017-12-21 13:49:36.003+08 368cf5ab-5455-422a-a659-ba613b272684 2 t f
+176 distance 距离 Output \N 3 2000 50 mm 2017-09-12 20:35:06.033+08 2017-12-21 15:57:53.785+08 d4a43ecd-43b6-4232-a482-16e675aadb59 2 t f
+166 humi 湿度 Output \N 2 100 0 %RH 2017-09-12 17:44:24.691+08 2017-12-21 17:52:15.5+08 6e5f9207-905d-4732-bb07-89e21da54dd1 2 t f
+160 yDegree Y轴角度 Output \N 2 30 -30 ° 2017-09-09 14:39:09.824+08 2018-01-08 10:42:31.089+08 bda64c7e-58cc-4668-8f46-8d08be815f1a 2 t f
+159 xDegree X轴角度 Output \N 2 30 -30 ° 2017-09-09 14:39:09.82+08 2018-01-08 10:42:34.767+08 bda64c7e-58cc-4668-8f46-8d08be815f1a 2 t f
+144 temperature 温度 Output \N 2 \N \N ℃ 2017-09-06 18:47:18.576+08 2018-06-12 13:34:05.375+08 abcd5e24-44d0-47ba-95db-9bdfab8d2d92 2 t f
+66 temperature 温度 Output \N 2 120 -40 ℃ 2017-08-28 21:26:59.603+08 2018-03-23 16:00:30.774+08 11450ef7-f0d4-4947-acd3-d1f7afd85e0d 2 t f
+1517 temperature 温度 Output \N 2 \N \N ℃ 2018-01-23 14:53:15.779+08 2018-03-23 15:44:55.531+08 069cdfbe-2463-40a3-a677-fa3564d06956 2 t f
+67 humidity 湿度 Output \N 2 100 0 %RH 2017-08-28 21:27:56.274+08 2018-03-23 16:00:42.382+08 11450ef7-f0d4-4947-acd3-d1f7afd85e0d 2 t f
+55 physicalvalue 应变 Output \N 4 1500 -1500 με 2017-08-26 15:59:26.874+08 2018-03-23 16:15:45.264+08 12aa80e0-acfc-43e1-85c9-9cbabe6fa2ee 2 t f
+103 anglex X轴角度 Output \N 2 30 -30 ° 2017-09-04 09:36:21.646+08 2018-03-23 16:17:08.279+08 cbca938f-e317-4e23-a721-4f2b7b54a827 2 t f
+1828 force 重量 Output \N 3 \N \N kg 2018-03-19 14:57:03.371+08 2018-04-02 11:06:50.163+08 e23258d4-5427-479c-b19b-25ac08c4888f 2 t f
+178 length 长度 Output \N \N \N \N \N \N mm 2017-09-13 10:00:10.884+08 2017-09-13 10:00:10.884+08 1108a01e-cf7e-4407-be7a-85cf6851ca6d 2 t f
+180 waterLevel 水位 Output \N \N \N \N \N \N mm 2017-09-14 14:34:58.936+08 2017-09-14 14:34:58.936+08 31983eec-ccfb-4540-8ab1-12b5b3c8eeb2 2 t f
+181 waterLevel 水位 Output \N \N \N \N \N \N mm 2017-09-14 14:41:42.382+08 2017-09-14 14:41:42.382+08 32d914f1-c9e2-402c-b81f-3805e8f60e60 2 t f
+182 concentration 浓度 Output \N \N \N \N \N \N ppm 2017-09-14 14:47:52.17+08 2017-09-14 14:47:52.17+08 bbb36e1c-2e68-4274-881d-77618b327419 2 t f
+183 concentration 浓度 Output \N \N \N \N \N \N ppm 2017-09-14 14:50:50.81+08 2017-09-14 14:50:50.81+08 806a1583-b6da-4e6d-89f9-419fad701d56 2 t f
+184 concentration 浓度 Output \N \N \N \N \N \N ppm 2017-09-14 14:53:06.109+08 2017-09-14 14:53:06.109+08 b640dd61-c4cb-4b47-af2d-fc9a2284f407 2 t f
+185 location1 位置1水位 Output \N 0 mm 2017-09-14 17:27:01.219+08 2017-09-14 17:49:22.06+08 ed246dd4-64be-4a48-a869-c4de71bbb2b6 2 t f
+186 location2 位置2水位 Output \N \N \N \N \N \N mm 2017-09-14 17:49:42.131+08 2017-09-14 17:49:42.144+08 ed246dd4-64be-4a48-a869-c4de71bbb2b6 2 t f
+187 temp1 温度1 Output \N \N \N \N \N \N ℃ 2017-09-14 17:50:10.471+08 2017-09-14 17:50:10.48+08 ed246dd4-64be-4a48-a869-c4de71bbb2b6 2 t f
+188 temp2 温度2 Output \N \N \N \N \N \N ℃ 2017-09-14 17:50:33.875+08 2017-09-14 17:50:33.882+08 ed246dd4-64be-4a48-a869-c4de71bbb2b6 2 t f
+189 temp3 温度3 Output \N \N \N \N \N \N ℃ 2017-09-14 17:50:53.052+08 2017-09-14 17:50:53.06+08 ed246dd4-64be-4a48-a869-c4de71bbb2b6 2 t f
+195 mainSpeed 主起变频输出转速 Output \N \N \N \N \N \N r/min 2017-09-14 19:37:28.699+08 2017-09-14 19:37:28.699+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+196 mainCurrt 主起变频输出电流 Output \N \N \N \N \N \N A 2017-09-14 19:37:28.703+08 2017-09-14 19:37:28.703+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+197 mainTorque 主起变频输出转矩 Output \N \N \N \N \N \N % 2017-09-14 19:37:28.706+08 2017-09-14 19:37:28.706+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+198 mainVoltage 主起变频输出电压 Output \N \N \N \N \N \N V 2017-09-14 19:37:28.708+08 2017-09-14 19:37:28.708+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+199 mainGVoltage 主起变频母线电压 Output \N \N \N \N \N \N V 2017-09-14 19:37:28.711+08 2017-09-14 19:37:28.711+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+200 mainPosition 主起位置 Output \N \N \N \N \N \N m 2017-09-14 19:37:28.714+08 2017-09-14 19:37:28.714+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+201 mainWeight 主起重量 Output \N \N \N \N \N \N T 2017-09-14 19:37:28.716+08 2017-09-14 19:37:28.716+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+202 deputyPosition 副起位置 Output \N \N \N \N \N \N m 2017-09-14 19:37:28.721+08 2017-09-14 19:37:28.721+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+203 deputyWeight 副起重量 Output \N \N \N \N \N \N T 2017-09-14 19:37:28.725+08 2017-09-14 19:37:28.725+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+175 noise 等效声级 Output \N 2 dB 2017-09-12 19:48:22.314+08 2017-09-27 11:15:04.269+08 548cf988-bee3-40cd-b3b9-5d7d2da91605 2 t f
+142 concentration 气体浓度 Output \N 4 100 0 ppm 2017-09-05 10:54:48.266+08 2017-09-27 14:58:25.88+08 0e235516-0320-49a5-91e7-a70282c3bb70 2 t f
+204 sCarSpeed 小车变频输出转速 Output \N \N \N \N \N \N r/min 2017-09-14 19:37:28.728+08 2017-09-14 19:37:28.728+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+205 sCarCurrt 小车变频输出电流 Output \N \N \N \N \N \N A 2017-09-14 19:37:28.73+08 2017-09-14 19:37:28.73+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+206 sCarTorque 小车变频输出转矩 Output \N \N \N \N \N \N % 2017-09-14 19:37:28.732+08 2017-09-14 19:37:28.732+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+207 sCarVoltage 小车变频输出电压 Output \N \N \N \N \N \N V 2017-09-14 19:37:28.734+08 2017-09-14 19:37:28.734+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+208 sCarGVoltage 小车变频母线电压 Output \N \N \N \N \N \N V 2017-09-14 19:37:28.737+08 2017-09-14 19:37:28.737+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+209 sCarPosition 小车位置 Output \N \N \N \N \N \N m 2017-09-14 19:37:28.74+08 2017-09-14 19:37:28.74+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+210 lCarSpeed 大车变频输出转速 Output \N \N \N \N \N \N r/min 2017-09-14 19:37:28.743+08 2017-09-14 19:37:28.743+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+211 lCarCurrt 大车变频输出电流 Output \N \N \N \N \N \N A 2017-09-14 19:37:28.745+08 2017-09-14 19:37:28.745+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+212 lCarTorque 大车变频输出转矩 Output \N \N \N \N \N \N % 2017-09-14 19:37:28.747+08 2017-09-14 19:37:28.747+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+213 lCarVoltage 大车变频输出电压 Output \N \N \N \N \N \N V 2017-09-14 19:37:28.749+08 2017-09-14 19:37:28.749+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+214 lCarGVoltage 大车变频母线电压 Output \N \N \N \N \N \N V 2017-09-14 19:37:28.752+08 2017-09-14 19:37:28.752+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+215 lCarPosition 大车位置 Output \N \N \N \N \N \N m 2017-09-14 19:37:28.754+08 2017-09-14 19:37:28.754+08 675bed44-95cd-4c66-890c-97fd1ffb3cd9 2 t f
+216 salinity 盐分 Output \N \N \N \N \N \N % 2017-09-14 20:24:32.018+08 2017-09-14 20:24:32.018+08 64bf5540-28ff-480e-9225-c13af83a12bc 2 t f
+218 humid 湿度 Output \N \N \N \N \N \N % 2017-09-14 20:36:40.102+08 2017-09-14 20:36:40.102+08 7e142a42-bfc3-472c-8c56-ef90d2964c67 2 t f
+219 anion 负氧离子 Output \N 0 个/cm3 2017-09-14 20:36:40.105+08 2017-09-14 20:36:57.429+08 7e142a42-bfc3-472c-8c56-ef90d2964c67 2 t f
+1359 phy1 温度 Output \N \N \N 2 85 -25 ℃ 2018-01-11 09:31:46.084+08 2018-01-11 09:31:46.092+08 67806ef3-539e-4cfc-932c-2b9fd5d49329 2 t f
+222 elongationIndicator 偏移量 Output \N \N \N \N \N \N mm 2017-09-16 12:22:16.729+08 2017-09-16 12:22:16.729+08 cb38bec9-e2e2-4a58-8bf5-b730c85910b3 2 t f
+223 Temp 温度 Output \N \N \N \N \N \N ℃ 2017-09-16 14:20:09.413+08 2017-09-16 14:20:09.423+08 c9f6eadb-715b-4ad3-9354-fcfe2735ba5a 2 t f
+224 Strain 应变值 Output \N \N \N \N \N \N mm 2017-09-16 14:21:10.31+08 2017-09-16 14:21:10.32+08 c9f6eadb-715b-4ad3-9354-fcfe2735ba5a 2 t f
+225 Offset 偏移值 Output \N \N \N \N \N \N mm 2017-09-16 14:22:36.265+08 2017-09-16 14:22:36.274+08 c9f6eadb-715b-4ad3-9354-fcfe2735ba5a 2 t f
+226 Pressure 压力 Output \N \N \N \N \N \N Kpa 2017-09-16 15:23:51.989+08 2017-09-16 15:23:52.014+08 33bc9e2c-5131-4c06-836f-79051ffccb1e 2 t f
+227 temp 温度 Output \N \N \N \N \N \N ℃ 2017-09-16 16:10:09.743+08 2017-09-16 16:10:09.743+08 797175f9-4873-4010-8299-cb4ce6a3e386 2 t f
+228 humi 湿度 Output \N \N \N \N \N \N % 2017-09-16 16:10:09.748+08 2017-09-16 16:10:09.748+08 797175f9-4873-4010-8299-cb4ce6a3e386 2 t f
+229 pressure 气压 Output \N \N \N \N \N \N kpa 2017-09-16 16:10:09.751+08 2017-09-16 16:10:09.751+08 797175f9-4873-4010-8299-cb4ce6a3e386 2 t f
+230 speedofWind 风速 Output \N \N \N \N \N \N m/s 2017-09-16 16:10:09.754+08 2017-09-16 16:10:09.754+08 797175f9-4873-4010-8299-cb4ce6a3e386 2 t f
+231 azimuthofWind 风向 Output \N \N \N \N \N \N ° 2017-09-16 16:10:09.758+08 2017-09-16 16:10:09.758+08 797175f9-4873-4010-8299-cb4ce6a3e386 2 t f
+1365 phy1 光照 Output \N \N \N 3 200000 0 Lux 2018-01-11 10:13:20.805+08 2018-01-11 10:13:20.812+08 979e7ae3-520f-4bf4-b641-7451c30378c6 2 t f
+2173 length 裂缝 Output \N \N \N 3 \N \N mm 2018-04-10 09:58:59.675+08 2018-04-10 09:58:59.684+08 541024ad-b513-4adb-b4ea-9a3eb3b67f5c 2 t f
+220 windSpeed 风速 Output \N 2 60 0 m/s 2017-09-14 20:57:53.47+08 2017-12-21 14:12:30.641+08 2e7a1db8-dd48-47e0-87d0-023cd2b9ff08 2 t f
+190 PH PH值 Output \N 2 \N \N pH 2017-09-14 19:08:55.131+08 2018-11-06 10:31:30.172+08 4a08b319-23f2-4854-ad86-755792e575d4 2 t f
+191 temp 温度 Output \N 2 \N \N ℃ 2017-09-14 19:08:55.136+08 2018-11-06 10:31:36.215+08 4a08b319-23f2-4854-ad86-755792e575d4 2 t f
+232 rainFall 雨量 Output \N \N \N \N \N \N mm 2017-09-16 16:10:09.761+08 2017-09-16 16:10:09.761+08 797175f9-4873-4010-8299-cb4ce6a3e386 2 t f
+233 radiation 总辐射 Output \N \N \N \N \N \N W/m2 2017-09-16 16:10:09.764+08 2017-09-16 16:10:09.764+08 797175f9-4873-4010-8299-cb4ce6a3e386 2 t f
+234 illumination 照度 Output \N \N \N \N \N \N lux 2017-09-16 16:10:09.767+08 2017-09-16 16:10:09.767+08 797175f9-4873-4010-8299-cb4ce6a3e386 2 t f
+235 soilTemp 土温 Output \N \N \N \N \N \N ℃ 2017-09-16 16:10:09.77+08 2017-09-16 16:10:09.77+08 797175f9-4873-4010-8299-cb4ce6a3e386 2 t f
+236 soilHum 土湿 Output \N \N \N \N \N \N % 2017-09-16 16:10:09.772+08 2017-09-16 16:10:09.772+08 797175f9-4873-4010-8299-cb4ce6a3e386 2 t f
+237 evaporation 蒸发 Output \N \N \N \N \N \N mm 2017-09-16 16:10:09.775+08 2017-09-16 16:10:09.775+08 797175f9-4873-4010-8299-cb4ce6a3e386 2 t f
+238 temp 温度 Output \N \N \N \N \N \N ℃ 2017-09-18 20:53:58.406+08 2017-09-18 20:53:58.406+08 2b50fea6-1651-43d8-8e42-2faca6f3d3ac 2 t f
+251 angleY Y轴角度 Output \N 4 ° 2017-09-21 10:57:18.466+08 2017-09-26 15:21:47.575+08 523d0a38-7b6b-4808-94b0-63bb477e7ead 2 t f
+250 angleX X轴角度 Output \N 4 ° 2017-09-21 10:57:18.462+08 2017-09-26 15:21:56.684+08 523d0a38-7b6b-4808-94b0-63bb477e7ead 2 t f
+260 carmodle 车型号 Output \N 0 2017-09-25 20:08:28.088+08 2017-09-25 20:21:46.108+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+261 direction 方向 Output \N 0 2017-09-25 20:10:32.086+08 2017-09-25 20:21:54.298+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+279 limitWeight 限重 Output \N \N \N \N \N \N Kg 2017-09-25 20:24:47.048+08 2017-09-25 20:24:47.055+08 05c849f0-63f3-4d19-97bf-f22e655c0852 5 t f
+249 angleY Y轴角度 Output \N 4 ° 2017-09-20 16:26:18.718+08 2017-09-26 15:22:50.941+08 c0659a78-00c3-480d-a385-21a57e7eba37 2 t f
+248 angleX X轴角度 Output \N 4 ° 2017-09-20 16:26:18.713+08 2017-09-26 15:23:01.463+08 c0659a78-00c3-480d-a385-21a57e7eba37 2 t f
+217 temp 温度 Output \N 2 ℃ 2017-09-14 20:36:40.098+08 2017-09-26 20:51:00.236+08 7e142a42-bfc3-472c-8c56-ef90d2964c67 2 t f
+332 temperature 温度 Output \N 2 60 -40 ℃ 2017-10-31 16:29:27.92+08 2017-11-08 16:57:38.182+08 32ccecbf-6cc2-4076-9f31-9541382b444a 2 t f
+1311 jmxTotalConnNum 总连接数jmx节点 Variable \N \N objectName=Catalina:j2eeType=Servlet,* attribute=processingTime \N \N \N \N 总连接数jmx节点 2018-01-09 10:55:44.911+08 2018-01-09 10:55:44.918+08 e240a124-006b-4a79-9006-c8fcb6842ef7 5 t f
+94 length 长度 Output \N 4 70 0.05 mm 2017-09-02 14:59:34.589+08 2017-09-28 16:26:06.224+08 3c90cbd4-1398-4e10-b930-11e414495e2f 2 t f
+333 humidity 湿度 Output \N 2 100 0 % 2017-10-31 16:29:27.927+08 2017-11-06 10:14:34.966+08 32ccecbf-6cc2-4076-9f31-9541382b444a 2 t f
+334 pressure 压力 Output \N 2 110 10 Kpa 2017-10-31 16:29:27.932+08 2017-11-08 16:58:29.66+08 32ccecbf-6cc2-4076-9f31-9541382b444a 2 t f
+3 temp 温度 Output \N 0 °C 2017-08-12 17:30:28.195+08 2018-12-28 13:43:08.557+08 e8a19dbd-26d3-49a0-87b6-8248ceb6fc53 2 t f
+358 illuminance 光照 Output \N \N \N 2 100000 0 Lux 2017-11-16 13:50:55.931+08 2017-11-16 13:50:55.931+08 96c5d707-f87c-4a33-a34e-4094c74b8cea 2 t f
+359 co2 浓度 Output \N \N \N 2 5000 0 ppm 2017-11-16 17:03:23.921+08 2017-11-16 17:03:23.921+08 80773b73-3653-4506-8298-8dfcb4865a90 2 t f
+361 tempture 温度 Output \N 2 \N \N ℃ 2017-11-17 09:36:19.812+08 2018-11-26 14:09:52.057+08 2580380e-6175-4c59-829a-f4f2c36d4af2 2 t f
+363 value 粉尘 Output \N \N \N 2 \N \N mg/m3 2017-11-20 16:42:59.973+08 2017-11-20 16:42:59.973+08 5e0f1662-8477-42af-9c5a-ae89e5c992c1 2 t f
+364 xDegree X轴角度 Output \N \N \N 2 \N \N ° 2017-11-21 15:57:22.486+08 2017-11-21 15:57:22.486+08 3c4f26a5-6ee8-410b-b9d2-1e114b7f71b2 2 t f
+365 yDegree Y轴角度 Output \N \N \N 2 \N \N ° 2017-11-21 15:57:22.492+08 2017-11-21 15:57:22.492+08 3c4f26a5-6ee8-410b-b9d2-1e114b7f71b2 2 t f
+366 PM10 PM10 Output \N \N \N 2 1000 0 ug/m3 2017-11-23 10:44:01.182+08 2017-11-23 10:44:01.182+08 eb818780-0ef4-4fd6-9b77-64d3c96493c4 2 t f
+367 PM25 PM2.5 Output \N \N \N 2 1000 0 ug/m3 2017-11-23 10:44:01.189+08 2017-11-23 10:44:01.189+08 eb818780-0ef4-4fd6-9b77-64d3c96493c4 2 t f
+369 temperature 温度 Output \N 2 \N \N ℃ 2017-11-25 12:01:56.874+08 2018-03-28 23:07:33.634+08 ef22c0f1-7da1-47eb-915f-8ef899a1c2e0 2 t f
+370 physicalvalue 压力 Output \N 4 \N \N MPa 2017-11-25 12:02:58.465+08 2018-03-28 23:30:34.625+08 ef22c0f1-7da1-47eb-915f-8ef899a1c2e0 2 t f
+368 frequency 频率 Output \N 3 \N \N HZ 2017-11-25 12:01:20.89+08 2017-11-25 12:03:10.813+08 ef22c0f1-7da1-47eb-915f-8ef899a1c2e0 2 t f
+243 anglex X轴角度 Output \N \N \N \N ° 2017-09-19 20:20:53.745+08 2018-03-29 10:13:08.472+08 66c8cd90-726f-42dd-afd8-2aa08f68a71f 2 t f
+244 angley Y轴角度 Output \N \N \N \N ° 2017-09-19 20:20:53.751+08 2018-03-29 10:13:14.66+08 66c8cd90-726f-42dd-afd8-2aa08f68a71f 2 t f
+246 angleX X轴角度 Output \N 2 90 -90 ° 2017-09-19 20:43:48.828+08 2017-12-21 15:08:27.468+08 e87c4f0a-877a-4865-98c6-bca08f38164b 2 t f
+245 temperature 温度 Output \N \N \N \N ℃ 2017-09-19 20:20:53.755+08 2018-03-29 10:13:21.11+08 66c8cd90-726f-42dd-afd8-2aa08f68a71f 2 t f
+252 anglex X轴角度 Output \N 4 ° 2017-09-22 17:34:24.773+08 2018-03-29 10:14:06.444+08 9e159552-fb77-4196-aea1-d7e9f88fcbbc 2 t f
+132 concentration CO浓度 Output \N 2 10000 0 ppm 2017-09-04 20:42:35.986+08 2017-11-27 16:24:48.801+08 8f438749-6713-4139-86ef-08d02243f962 2 t f
+376 elongationIndicator 偏移量 Output \N 3 50 0 mm 2017-11-28 16:56:19.229+08 2018-01-08 10:19:50.205+08 7fa794ae-2b82-40df-9084-5d7b66236d50 2 t f
+378 concentration 气体浓度 Output \N 2 \N \N \N 2017-11-29 09:25:05.697+08 2017-11-29 09:25:14.188+08 25fa942f-2929-4429-85e1-e3deb8f728b0 2 t f
+1903 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 13:44:30.831+08 2018-03-26 13:44:30.843+08 f2877cda-87cc-485a-9fc6-11f7ef8b2624 2 t f
+377 elongationIndicator 偏移量 Output \N 3 500 0 mm 2017-11-28 16:59:54.988+08 2018-01-08 10:18:51.162+08 f8a92db3-4b55-47ec-a466-2d3c44e8b97d 2 t f
+193 turbidity 浊度 Output \N 2 \N \N NTU 2017-09-14 19:08:55.143+08 2019-10-24 14:14:50.367+08 4a08b319-23f2-4854-ad86-755792e575d4 2 t f
+383 pressure 压强 Output \N 4 20 0 Kpa 2017-11-29 11:58:58.951+08 2017-11-29 12:00:31.445+08 3dad677f-3582-41e5-a77c-ea629f6974fe 2 t f
+1829 x x Output \N 9 99999999999 -999999999999 \N 2018-03-20 09:47:45.329+08 2018-03-21 09:48:39.196+08 e3742e72-d9c4-44b2-86aa-e90a5fa8255a 2 t f
+360 length 裂缝值 Output \N 3 \N \N mm 2017-11-17 09:35:22.349+08 2018-11-26 14:09:27.504+08 2580380e-6175-4c59-829a-f4f2c36d4af2 2 t f
+384 temperature 温度 Output \N 2 \N \N ℃ 2017-11-29 12:00:59.533+08 2018-06-12 13:32:48.948+08 3dad677f-3582-41e5-a77c-ea629f6974fe 2 t f
+247 angleY Y轴角度 Output \N 2 180 -180 ° 2017-09-19 20:44:21.037+08 2017-12-21 15:08:34.411+08 e87c4f0a-877a-4865-98c6-bca08f38164b 2 t f
+253 angley Y轴角度 Output \N 4 ° 2017-09-22 17:34:24.779+08 2018-03-29 10:14:11.422+08 9e159552-fb77-4196-aea1-d7e9f88fcbbc 2 t f
+382 temperature 温度 Output \N 2 ℃ 2017-11-29 11:56:45.753+08 2018-06-12 13:32:38.987+08 4bf64044-476d-4d5a-933e-5a493f1ee2e4 2 f f
+1902 physicalvalue 荷载力 Output \N 3 75 -75 KN 正值是张拉力,负值是承压力 2018-03-26 13:41:50.659+08 2018-03-26 13:42:00.282+08 c26fbe87-b6ec-4f0d-a907-e05fddec8f41 2 t f
+381 pressure 压强 Output \N 4 50 0 Kpa 2017-11-29 11:55:07.037+08 2017-11-29 15:19:29.735+08 4bf64044-476d-4d5a-933e-5a493f1ee2e4 2 t f
+1088 physicalvalue 裂缝 Output \N 3 200 0 mm 2018-01-08 08:30:39.703+08 2018-03-28 23:14:35.954+08 ab8b7681-8ef7-4101-9a8a-5bee37ee7510 2 t f
+389 pressure 米水柱 Output \N 4 10 0 mH2O 2017-11-29 13:52:18.322+08 2017-11-29 15:32:08.236+08 8275461f-e7c3-4595-ae09-36a4288c65fd 2 t f
+1525 temperature 温度 Output \N 2 \N \N ℃ 2018-01-23 14:53:15.978+08 2018-03-23 15:44:03.62+08 1933583a-00cd-4d11-99f5-76e7dbeaa81c 2 t f
+849 temperature 温度 Output \N 2 \N \N ℃ 2018-01-05 15:36:59.05+08 2018-03-23 15:50:12.424+08 1d70f5ea-f754-4ee5-98e8-98bdaa7694e2 2 t f
+847 physicalvalue 应力 Output \N 4 0.8 0 MPa 2018-01-05 15:36:59.041+08 2018-03-23 15:50:24.256+08 1d70f5ea-f754-4ee5-98e8-98bdaa7694e2 2 t f
+841 temperature 温度 Output \N 2 \N \N ℃ 2018-01-05 15:36:58.441+08 2018-03-23 15:51:06.871+08 24ea4e76-d09c-44d9-8d18-7c634e2b1b22 2 t f
+839 physicalvalue 应力 Output \N 4 0.4 0 MPa 2018-01-05 15:36:58.429+08 2018-03-23 15:51:15.15+08 24ea4e76-d09c-44d9-8d18-7c634e2b1b22 2 t f
+857 temperature 温度 Output \N 2 \N \N ℃ 2018-01-05 15:36:59.856+08 2018-03-23 16:25:33.25+08 6bcbbc0d-ed3f-43f1-b6da-98c0ff2bed39 2 t f
+855 physicalvalue 应力 Output \N 4 1 0 MPa 2018-01-05 15:36:59.851+08 2018-03-23 16:25:41.573+08 6bcbbc0d-ed3f-43f1-b6da-98c0ff2bed39 2 t f
+1911 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 13:54:07.834+08 2018-03-26 13:54:07.841+08 228d8257-dcf7-4493-a4d4-083712716318 2 t f
+1091 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-08 08:30:40.266+08 2018-03-28 23:13:37.892+08 2e57f353-4b30-441f-a69e-f9e7e639e6a7 2 t f
+1096 physicalvalue 应变 Output \N 3 3000 0 με 2018-01-08 08:30:40.285+08 2018-03-28 23:13:43.19+08 2e57f353-4b30-441f-a69e-f9e7e639e6a7 2 t f
+388 temperature 温度 Output \N 2 \N \N ℃ 2017-11-29 13:47:41.051+08 2018-06-12 13:33:04.572+08 06beef64-e140-4b7c-865d-64d043fcecc1 2 t f
+390 temperature 温度 Output \N 2 \N \N ℃ 2017-11-29 13:53:04.096+08 2018-06-12 13:33:13.756+08 8275461f-e7c3-4595-ae09-36a4288c65fd 2 t f
+1360 phy2 湿度 Output \N \N \N 2 100 0 %RH 2018-01-11 09:32:31.33+08 2018-01-11 09:32:31.335+08 67806ef3-539e-4cfc-932c-2b9fd5d49329 2 t f
+1090 frequency 频率 Output \N 3 \N \N HZ 2018-01-08 08:30:40.261+08 2018-01-08 08:30:40.261+08 2e57f353-4b30-441f-a69e-f9e7e639e6a7 2 t f
+1676 level 沉降 Output \N 3 \N \N mm 2018-02-07 09:50:28.766+08 2018-02-07 09:51:26.977+08 511b86b5-3773-45aa-b518-9b29071357e1 2 t f
+846 am 幅值 Output \N 3 mv 2018-01-05 15:36:58.466+08 2018-03-02 10:56:33.489+08 24ea4e76-d09c-44d9-8d18-7c634e2b1b22 2 t f
+854 am 幅值 Output \N 3 mv 2018-01-05 15:36:59.071+08 2018-03-02 10:58:39.041+08 1d70f5ea-f754-4ee5-98e8-98bdaa7694e2 2 t f
+862 am 幅值 Output \N 3 mv 2018-01-05 15:36:59.869+08 2018-03-02 11:00:22.133+08 6bcbbc0d-ed3f-43f1-b6da-98c0ff2bed39 2 t f
+856 frequency 频率 Output \N 3 \N \N Hz 2018-01-05 15:36:59.854+08 2018-03-02 11:03:20.685+08 6bcbbc0d-ed3f-43f1-b6da-98c0ff2bed39 2 t f
+848 frequency 频率 Output \N 3 \N \N Hz 2018-01-05 15:36:59.046+08 2018-03-02 11:03:41.012+08 1d70f5ea-f754-4ee5-98e8-98bdaa7694e2 2 t f
+840 frequency 频率 Output \N 3 \N \N Hz 2018-01-05 15:36:58.435+08 2018-03-02 11:04:08.426+08 24ea4e76-d09c-44d9-8d18-7c634e2b1b22 2 t f
+1703 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 11:21:12.398+08 2018-03-02 11:21:12.405+08 f331ae21-9607-401d-b8c4-9d17e40eba9a 2 t f
+1707 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 14:21:17.836+08 2018-03-02 14:21:17.843+08 1933583a-00cd-4d11-99f5-76e7dbeaa81c 2 t f
+1524 frequency 频率 Output \N 3 \N \N Hz 2018-01-23 14:53:15.974+08 2018-03-02 14:21:26.18+08 1933583a-00cd-4d11-99f5-76e7dbeaa81c 2 t f
+1708 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 14:22:43.68+08 2018-03-02 14:22:43.687+08 069cdfbe-2463-40a3-a677-fa3564d06956 2 t f
+1709 am 幅值 Output \N \N \N 3 \N mv 2018-03-02 14:23:47.502+08 2018-03-02 14:23:47.51+08 fd91ebd4-1201-4b5b-a5a0-e4636fb4ecbd 2 t f
+1710 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 14:37:54.847+08 2018-03-02 14:37:54.853+08 bc03541b-fb13-44ff-8cc4-9419e81554f3 2 t f
+1711 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 14:39:19.705+08 2018-03-02 14:39:19.712+08 b28ce81b-55a8-4e81-a4da-5a5b9d89ef29 2 t f
+1712 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 14:49:12.466+08 2018-03-02 14:49:12.473+08 3d52b0e5-39ac-4e19-99b4-7bd96b15888a 2 t f
+1713 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 14:51:18.237+08 2018-03-02 14:51:18.244+08 028d4dfc-6b2c-40e4-9960-97c813408030 2 t f
+1714 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 14:55:36.337+08 2018-03-02 14:55:36.341+08 2db014d8-3273-467f-b938-8e6b9c22031e 2 t f
+1715 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 14:58:33.877+08 2018-03-02 14:58:33.884+08 c631534f-fef5-4db4-b5c2-e7cb081db305 2 t f
+1716 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 15:01:17.215+08 2018-03-02 15:01:17.221+08 d36bb0ee-6c5c-4778-bc5b-5e03db483152 2 t f
+1717 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 15:02:36.351+08 2018-03-02 15:02:36.355+08 10deb250-d676-4883-bfb1-2f557ec84677 2 t f
+1718 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 15:18:47.684+08 2018-03-02 15:18:47.691+08 1a664a1a-b5f1-4e75-916f-21bc94749d0e 2 t f
+1719 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 15:21:02.49+08 2018-03-02 15:21:02.495+08 6fbdae8b-7c5b-4125-8df3-4d9bef10997a 2 t f
+1720 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 15:22:17.049+08 2018-03-02 15:22:17.055+08 4e508627-863b-46fa-9454-a074ef2fbe8a 2 t f
+1721 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 15:24:35.947+08 2018-03-02 15:24:35.955+08 f564da79-91f3-4eff-8919-3501b7fb8046 2 t f
+1722 phy 风速 Output \N \N \N 2 \N \N m/s 2018-03-05 10:21:39.816+08 2018-03-05 10:21:39.824+08 405db392-c820-4892-b209-c01d5f2d0724 2 t f
+1724 phy 雨量 Output \N \N \N 3 \N \N mm 2018-03-05 10:53:10.856+08 2018-03-05 10:53:10.864+08 9943507b-e6a7-4ed0-a44a-d71689542076 2 t f
+1725 phy 风向 Output \N \N \N 2 360 0 ° 2018-03-05 11:00:26.08+08 2018-03-05 11:00:26.085+08 cfd05991-7dcc-45cc-a7c3-afeef665f4c8 2 t f
+1726 x X位置 Output \N \N \N 4 \N \N mm 2018-03-05 13:35:21.232+08 2018-03-05 13:35:21.24+08 d05b0093-f276-418f-90d3-8e0bfe3c36ef 2 t f
+1727 y Y位置 Output \N \N \N 4 \N \N mm 2018-03-05 13:35:48.467+08 2018-03-05 13:35:48.473+08 d05b0093-f276-418f-90d3-8e0bfe3c36ef 2 t f
+385 pressure 压强 Output \N 4 10 0 Kpa 2017-11-29 13:40:33.529+08 2017-11-29 13:41:31.375+08 7224902a-6cd1-4877-a92f-d8cb544d36ce 2 t f
+2347 concentration PM2.5浓度 Output \N 0 \N \N ug/m³ 2018-06-20 11:04:02.549+08 2018-06-20 11:13:22.425+08 e607b37a-17fe-4e85-9316-7eed2a219c25 2 t f
+387 pressure 压强 Output \N 2 0 -100 Kpa 2017-11-29 13:47:20.226+08 2017-11-29 15:05:05.273+08 06beef64-e140-4b7c-865d-64d043fcecc1 2 t f
+1908 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 13:50:50.993+08 2018-03-26 13:50:51.003+08 e3bf8273-2a58-438d-b214-0fd258644ef8 2 t f
+1916 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 13:55:20.169+08 2018-03-26 13:55:20.174+08 c0ea2d7f-7778-47aa-af49-0119a729c741 2 t f
+871 temperature 温度 Output \N 2 \N \N ℃ 2018-01-05 15:48:51.366+08 2018-03-23 15:49:37.533+08 028ff831-cfab-43f0-a757-fe8933b46002 2 t f
+1925 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:05:45.819+08 2018-03-26 14:05:45.845+08 b72802e5-4982-4ba1-bd1b-15ba05d7d832 2 t f
+875 physicalvalue 应力 Output \N 4 2 0 MPa 2018-01-05 15:48:51.381+08 2018-03-23 15:49:46.714+08 028ff831-cfab-43f0-a757-fe8933b46002 2 t f
+1832 humidity 湿度 Output \N 2 \N \N %RH 2018-03-20 17:30:18.265+08 2018-03-22 10:27:05.44+08 fca1794e-e349-42fb-aef1-59f5eb4c3efd 2 t f
+1098 frequency 频率 Output \N 3 \N \N HZ 2018-01-08 08:30:40.843+08 2018-01-08 08:30:40.843+08 c20df626-7eb9-47e5-8d36-88233fff0015 2 t f
+1930 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:07:32.876+08 2018-03-26 14:07:32.884+08 08b32693-e4b0-44db-9d79-e45dff49062a 2 t f
+832 temperature 温度 Output \N 2 \N \N ℃ 2018-01-05 15:33:22.345+08 2018-03-23 15:51:42.345+08 fbdf40ff-88c5-4ca5-a2cf-e0fcbcb9d45d 2 t f
+1361 phy3 大气压力 Output \N \N \N 2 1100 0 hPa 2018-01-11 09:33:20.088+08 2018-01-11 09:33:20.094+08 67806ef3-539e-4cfc-932c-2b9fd5d49329 2 t f
+1362 phy1 温度 Output \N \N \N 2 80 -20 ℃ 2018-01-11 09:36:08.519+08 2018-01-11 09:36:08.531+08 17077adc-cfaa-428d-a6e5-346aa75678d9 2 t f
+1443 23 w Output \N wr \N \N \N \N \N 2018-01-22 17:20:14.783+08 2018-01-22 17:20:14.794+08 aca808a3-91a5-43d4-9aa2-171a388266a1 4 t f
+2295 physicalvalue 压力 Output \N 3 6 0 Mpa 2018-05-28 10:50:00.213+08 2018-05-28 14:00:29.278+08 d314e16c-4cc2-47bc-92b5-af0639bdc7a8 2 t f
+1931 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 14:09:07.894+08 2018-03-26 14:09:07.901+08 aca7e15e-5b9f-4595-8640-9e7c920ef810 2 t f
+738 angley Y轴角度 Output \N 3 10 -10 ° 2018-01-05 13:56:07.337+08 2018-03-29 15:13:00.282+08 2766d297-6127-449f-b73f-089b38e01267 2 t f
+1934 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:12:24.77+08 2018-03-26 14:12:24.781+08 8bc60164-fa52-4d68-a3b0-2c63af3113c0 2 t f
+1224 frequency 频率 Output \N 3 \N \N HZ 2018-01-08 15:10:26.54+08 2018-01-08 15:10:26.54+08 7a1da717-ec87-450e-9707-47f782954311 2 t f
+1935 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:12:42.065+08 2018-03-26 14:12:42.073+08 8bc60164-fa52-4d68-a3b0-2c63af3113c0 2 t f
+1448 temp 温度 Output \N \N \N 1 100 -40 ℃ 2018-01-23 14:02:27.115+08 2018-01-23 14:02:27.115+08 558e2b4d-a2dc-443a-98e5-142e99791b74 2 t f
+1937 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:15:44.15+08 2018-03-26 14:15:44.159+08 750c60f8-168e-4bca-acf5-df2d502915f5 2 t f
+1234 frequency 频率 Output \N 3 \N \N HZ 2018-01-08 15:14:58.28+08 2018-01-08 15:14:58.28+08 9a6a651f-0042-4ae6-af31-20d976cf4566 2 t f
+1942 temperature 温度 Output \N \N \N 3 \N \N ℃ 2018-03-26 14:17:26.145+08 2018-03-26 14:17:26.15+08 b70abc38-5a40-4c7c-8bc8-f238c0b3dc15 2 t f
+1449 value 湿度 Output \N \N \N 1 100 0 %RH 2018-01-23 14:02:27.12+08 2018-01-23 14:02:27.12+08 558e2b4d-a2dc-443a-98e5-142e99791b74 2 t f
+835 physicalvalue 应力 Output \N 4 0.2 0 MPa 2018-01-05 15:33:22.358+08 2018-03-23 15:51:46.879+08 fbdf40ff-88c5-4ca5-a2cf-e0fcbcb9d45d 2 t f
+1943 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:17:28.624+08 2018-03-26 14:17:28.63+08 32b8c637-51b5-405c-920d-f7ae0adefafd 2 t f
+1099 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-08 08:30:40.847+08 2018-03-28 23:12:48.374+08 c20df626-7eb9-47e5-8d36-88233fff0015 2 t f
+1104 physicalvalue 应变 Output \N 3 3000 0 με 2018-01-08 08:30:40.867+08 2018-03-28 23:12:53.91+08 c20df626-7eb9-47e5-8d36-88233fff0015 2 t f
+877 am 幅值 Output \N 3 mv 2018-01-05 15:48:51.388+08 2018-03-02 11:01:43.538+08 028ff831-cfab-43f0-a757-fe8933b46002 2 t f
+878 frequency 频率 Output \N 3 \N \N Hz 2018-01-05 15:48:51.391+08 2018-03-02 11:02:24.281+08 028ff831-cfab-43f0-a757-fe8933b46002 2 t f
+831 frequency 频率 Output \N 3 \N \N Hz 2018-01-05 15:33:22.339+08 2018-03-02 11:04:27.228+08 fbdf40ff-88c5-4ca5-a2cf-e0fcbcb9d45d 2 t f
+2103 anglex X轴角度 Output \N 2 \N \N ° 2018-03-29 13:37:27.985+08 2018-03-29 13:38:29.151+08 1ed1816a-f590-4eba-8702-c334ec7a1e1d 2 t f
+1230 physicalvalue 应力 Output \N 3 210 0 MPa 2018-01-08 15:14:58.265+08 2018-03-29 18:26:13.837+08 9a6a651f-0042-4ae6-af31-20d976cf4566 2 t f
+1226 physicalvalue 应变 Output \N 3 3000 -3000 με 2018-01-08 15:10:26.55+08 2018-03-29 18:26:36.686+08 7a1da717-ec87-450e-9707-47f782954311 2 t f
+1590 temperature 温度 Output \N 1 60 -40 ℃ 2018-01-23 17:19:51.373+08 2018-03-30 08:15:07.666+08 9f562e54-5c03-4b59-89cf-d12739821be5 2 t f
+2174 value 应变 Output \N 1 3000 -3000 με 2018-04-11 09:27:08.927+08 2018-04-26 00:01:16.139+08 ade7450e-eb35-4424-8b11-83f4c466bef7 2 t f
+2271 lane 车道 Output \N \N \N \N 128 1 \N 2018-05-09 16:56:53.81+08 2018-05-09 16:56:53.815+08 05c849f0-63f3-4d19-97bf-f22e655c0852 1 t f
+2267 anglex X轴角度 Output \N 3 30 -30 ° 2018-05-09 10:42:20.045+08 2018-05-10 09:09:20.339+08 289b0a55-03e7-4154-bdd7-b7bbb15a6d28 2 t f
+2268 angley Y轴角度 Output \N 3 30 -30 ° 2018-05-09 10:42:20.05+08 2018-05-10 09:09:28.931+08 289b0a55-03e7-4154-bdd7-b7bbb15a6d28 2 t f
+2293 temperature 温度 Output \N 3 40 0 ℃ 2018-05-28 10:50:00.188+08 2018-05-28 10:50:00.188+08 d314e16c-4cc2-47bc-92b5-af0639bdc7a8 2 t f
+2294 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-05-28 10:50:00.204+08 2018-05-28 10:50:00.204+08 d314e16c-4cc2-47bc-92b5-af0639bdc7a8 2 t f
+2299 123456 1 Variable \N \N 1 \N 1 1 \N 2018-05-28 17:35:04.157+08 2018-05-28 17:35:04.163+08 2205fdef-b595-4f0d-8268-e9d2370638aa 1 t f
+386 temperature 温度 Output \N 2 ℃ 2017-11-29 13:41:19.887+08 2018-06-12 13:32:56.941+08 7224902a-6cd1-4877-a92f-d8cb544d36ce 2 t f
+2342 concentration SO2浓度 Output \N 0 \N \N ppb 2018-06-20 10:35:52.514+08 2018-06-20 10:45:05.702+08 d8aa757b-681c-4522-a76f-b2484a854563 2 t f
+2382 length 液位 Output \N \N \N 3 \N \N mm 2018-07-04 12:31:15.238+08 2018-07-04 12:31:15.238+08 da6a8c8f-0a98-4650-8b12-650a3e4e5914 2 t f
+2384 licence 车牌号 Output \N 0 2018-07-04 16:56:33.702+08 2018-07-04 17:00:50.623+08 a3e8fc6e-6dc8-4d65-b479-4b2ee719c712 5 t f
+2387 overload 总重超限 Output \N 0 2018-07-04 17:00:27.104+08 2018-07-24 10:33:31.376+08 a3e8fc6e-6dc8-4d65-b479-4b2ee719c712 5 t f
+391 pressure 压强 Output \N 4 500 0 Kpa 2017-11-29 13:53:47.195+08 2017-11-29 13:53:53.046+08 71f3c15e-91d9-4044-ba95-66957d312dc8 2 t f
+392 temperature 温度 Output \N 2 80 -20 ℃ 2017-11-29 13:54:23.393+08 2019-01-02 10:13:55.203+08 71f3c15e-91d9-4044-ba95-66957d312dc8 2 t f
+393 pressure 压强 Output \N \N \N 4 200 0 Kpa 2017-11-29 13:56:03.772+08 2017-11-29 13:56:03.785+08 857d5408-8cb5-4084-a7a3-ab0f9d3dd1da 2 t f
+395 pressure 压强 Output \N \N \N 4 1000 0 Kpa 2017-11-29 13:57:17.994+08 2017-11-29 13:57:18.018+08 29f596e9-1ed7-49db-b932-0d436bef0d59 2 t f
+399 pressure 压强 Output \N \N \N 4 100 0 Kpa 2017-11-29 15:29:51.633+08 2017-11-29 15:29:51.648+08 90706e3b-13d8-4862-a1d4-3ace7d4a7b6e 2 t f
+145 pressure 压强 Output \N 1 2000 0 Kpa 2017-09-06 18:47:18.58+08 2017-11-29 15:33:25.268+08 abcd5e24-44d0-47ba-95db-9bdfab8d2d92 2 t f
+401 pressure 压强 Output \N \N \N 4 3.5 0 mH2O 2017-11-29 15:37:49.459+08 2017-11-29 15:37:49.465+08 c49b63f0-5fc2-41bb-ad27-231510dde4c0 2 t f
+1909 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 13:51:08.111+08 2018-03-26 13:51:08.116+08 e3bf8273-2a58-438d-b214-0fd258644ef8 2 t f
+405 pressure 压强 Output \N \N \N 4 5 0 mH2O 2017-11-29 15:43:55.882+08 2017-11-29 15:43:55.893+08 e6cd110e-7720-4d98-bf4b-655e7d545791 2 t f
+407 pressure 压强 Output \N \N \N 4 50 0 mH2O 2017-11-29 15:48:06.147+08 2017-11-29 15:48:06.153+08 dd89b226-58f4-4509-9eb9-cf119be26a80 2 t f
+409 pressure 压强 Output \N \N \N 4 20 0 mH2O 2017-11-29 15:52:49.769+08 2017-11-29 15:52:49.778+08 0c5f1ed6-626c-4903-ba56-b99bb676bfc1 2 t f
+408 temperature 温度 Output \N 2 \N \N ℃ 2017-11-29 15:48:35.19+08 2018-06-12 13:31:52.997+08 dd89b226-58f4-4509-9eb9-cf119be26a80 2 t f
+411 pressure 压强 Output \N \N \N 4 100 0 mH2O 2017-11-29 15:57:36.544+08 2017-11-29 15:57:36.551+08 f124fe60-87de-429a-ae17-249d22ce2005 2 t f
+406 temperature 温度 Output \N 2 \N \N ℃ 2017-11-29 15:44:17.909+08 2018-06-12 13:32:02.991+08 e6cd110e-7720-4d98-bf4b-655e7d545791 2 t f
+413 liquidLevel 沉降 Output \N 2 5 0 m 2017-11-30 13:56:50.031+08 2017-12-20 11:55:51.69+08 06a3c28a-b1d4-41cc-b291-aa2cd6682d60 2 t f
+414 Ouput \N Output \N \N \N \N \N \N \N 2017-11-30 15:01:46.318+08 2017-11-30 15:01:46.318+08 d864e964-72fe-43e7-96a5-8e0a2079b731 5 t f
+417 length 测量距离 Variable \N 4 30 0.05 m 2017-11-30 15:25:27.911+08 2017-11-30 15:26:01.931+08 689910ff-378c-4467-b95b-22907c3076e5 2 t f
+416 length 测量距离 Output \N 4 10 0.05 m 2017-11-30 15:18:38.819+08 2017-11-30 15:26:12.226+08 2de4150f-19f7-4fff-9cb5-9d97226ded24 2 t f
+415 length 测量距离 Output \N 4 3 0.05 m 2017-11-30 15:14:59.463+08 2017-11-30 15:26:25.32+08 acb1f3e2-048a-4eb3-a01f-36e1f1968b4a 2 t f
+418 temperature 温度 Output \N \N \N 2 120 -40 ℃ 2017-12-01 09:59:04.601+08 2017-12-01 09:59:04.601+08 8c4a1dc0-f42b-4a5b-9267-e447615a1821 2 t f
+1106 frequency 频率 Output \N 3 \N \N HZ 2018-01-08 08:30:41.377+08 2018-01-08 08:30:41.377+08 cac190e9-a228-4032-afbc-2f3bf990cc82 2 t f
+412 temperature 温度 Output \N 2 \N \N ℃ 2017-11-29 15:58:06.551+08 2018-06-12 10:23:31.386+08 f124fe60-87de-429a-ae17-249d22ce2005 2 t f
+402 temperature 温度 Output \N 2 \N \N ℃ 2017-11-29 15:38:34.873+08 2018-06-12 13:32:11.752+08 c49b63f0-5fc2-41bb-ad27-231510dde4c0 2 t f
+433 temp 温度 Output \N 2 80 -20 ℃ 2017-12-04 12:58:05.362+08 2017-12-20 15:13:30.196+08 176efcfa-0544-41c5-8aef-5821cb43a0e3 2 t f
+434 offsetValue Y方向角度 Output \N 2 30 -30 ° 2017-12-04 12:59:11.697+08 2017-12-20 15:13:56.216+08 176efcfa-0544-41c5-8aef-5821cb43a0e3 2 t f
+435 value X方向角度 Output \N 2 30 -30 ° 2017-12-04 13:35:33.894+08 2017-12-20 15:14:02.88+08 176efcfa-0544-41c5-8aef-5821cb43a0e3 2 t f
+1107 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-08 08:30:41.381+08 2018-03-28 23:11:45.378+08 cac190e9-a228-4032-afbc-2f3bf990cc82 2 t f
+440 rainFall 雨量 Output \N 2 4 0 mm/min 2017-12-05 10:56:13.771+08 2017-12-05 10:57:40.043+08 84868dd7-e484-47d3-b26f-8c39e898bb4d 2 t f
+442 soilTemp 土壤温度 Output \N \N \N 2 100 -50 ℃ 2017-12-05 10:58:25.547+08 2017-12-05 10:58:25.557+08 84868dd7-e484-47d3-b26f-8c39e898bb4d 2 t f
+441 temp 大气温度 Output \N \N \N 2 100 -50 ℃ 2017-12-05 10:57:15.813+08 2017-12-05 10:57:15.82+08 84868dd7-e484-47d3-b26f-8c39e898bb4d 2 t f
+439 speedWind 风速 Output \N 2 70 0 m/s 2017-12-05 10:54:45.806+08 2017-12-05 10:57:23.92+08 84868dd7-e484-47d3-b26f-8c39e898bb4d 2 t f
+443 pressure 数字气压 Output \N \N \N 2 1100 10 hpa 2017-12-05 10:59:23.506+08 2017-12-05 10:59:23.52+08 84868dd7-e484-47d3-b26f-8c39e898bb4d 2 t f
+444 radiation 简易总辐射 Output \N \N \N 2 1500 0 w/m2 2017-12-05 11:00:18.534+08 2017-12-05 11:00:18.543+08 84868dd7-e484-47d3-b26f-8c39e898bb4d 2 t f
+410 temperature 温度 Output \N 2 \N \N ℃ 2017-11-29 15:53:07.126+08 2018-06-12 10:23:41.398+08 0c5f1ed6-626c-4903-ba56-b99bb676bfc1 2 t f
+400 temperature 温度 Output \N 2 \N \N ℃ 2017-11-29 15:30:18.754+08 2018-06-12 13:32:26.828+08 90706e3b-13d8-4862-a1d4-3ace7d4a7b6e 2 t f
+394 temperature 温度 Output \N 2 \N \N ℃ 2017-11-29 13:56:23.956+08 2018-06-12 13:33:38.566+08 857d5408-8cb5-4084-a7a3-ab0f9d3dd1da 2 t f
+396 temperature 温度 Output \N 1 \N \N ℃ 2017-11-29 13:57:58.373+08 2018-06-12 13:33:51.622+08 29f596e9-1ed7-49db-b932-0d436bef0d59 2 t f
+431 concentration 气体浓度 Output \N 2 1000 0 ug/m3 2017-12-01 15:00:04.231+08 2017-12-20 13:44:14.763+08 d28e689e-1bcd-4f9e-81ac-a0bfc56667e3 2 t f
+437 strain Y方向位移 Output \N 2 400 -400 mm 2017-12-04 14:33:34.384+08 2017-12-05 13:25:19.567+08 50cd4d61-29c8-4d36-b143-85fcda3f99e5 2 t f
+438 displacement X方向位移 Output \N 2 300 -300 mm 2017-12-04 14:33:34.389+08 2017-12-05 13:25:33.23+08 50cd4d61-29c8-4d36-b143-85fcda3f99e5 2 t f
+432 concentration 温度 Output \N 2 60 -20 ℃ 2017-12-01 15:05:58.356+08 2017-12-20 13:54:42.507+08 95a5b30a-5159-471a-810a-14e31c3a868c 2 t f
+613 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-01-04 12:16:22.833+08 2018-01-04 12:16:22.844+08 58ccd139-9573-44ce-84f3-b043e0841c7a 2 t f
+445 direction 风向 Output \N \N \N 2 360 0 ° 2017-12-05 11:00:54.196+08 2017-12-05 11:00:54.202+08 84868dd7-e484-47d3-b26f-8c39e898bb4d 2 t f
+459 pressure 压强 Output \N \N \N 2 \N \N Mpa 2017-12-06 12:00:43.631+08 2017-12-06 12:00:43.631+08 8929f60c-f9d6-4a0f-a19b-0a57b7025b43 2 t f
+1929 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:07:14.408+08 2018-03-26 14:07:14.415+08 b0488049-bfc9-40ee-8dfa-79f9233638ec 2 t f
+1910 physicalvalue 荷载力 Output \N 4 136 -136 KN 正值是张拉力,负值是承压力 2018-03-26 13:51:40.189+08 2018-03-26 13:52:10.276+08 e3bf8273-2a58-438d-b214-0fd258644ef8 2 t f
+1913 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 13:54:30.774+08 2018-03-26 13:54:30.781+08 ce140baa-bcd7-4756-9d06-9591535eed2a 2 t f
+1915 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 13:54:49.112+08 2018-03-26 13:54:49.118+08 ce140baa-bcd7-4756-9d06-9591535eed2a 2 t f
+1921 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 14:03:03.081+08 2018-03-26 14:03:03.088+08 aca7e15e-5b9f-4595-8640-9e7c920ef810 2 t f
+1922 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 14:03:21.913+08 2018-03-26 14:03:21.922+08 aca7e15e-5b9f-4595-8640-9e7c920ef810 2 t f
+1927 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:06:40.277+08 2018-03-26 14:06:40.287+08 08b32693-e4b0-44db-9d79-e45dff49062a 2 t f
+2296 physicalvalue 角度 Output \N 3 90 -90 ° 2018-05-28 11:45:20.164+08 2018-05-28 15:48:06.806+08 ff3a290c-3a62-49a8-8db9-f4083f855397 2 t f
+1114 frequency 频率 Output \N 3 \N \N HZ 2018-01-08 08:30:41.943+08 2018-01-08 08:30:41.943+08 09032111-4073-461a-82b6-1c193ef88077 2 t f
+2480 pressure 压力 Output \N \N \N 3 \N \N Kpa 2018-07-25 09:53:02.07+08 2018-07-25 09:53:02.07+08 0d993c54-d0eb-406e-beb3-422b28dd8bd2 2 t f
+2344 concentration O3浓度 Output \N 0 \N \N ppb 2018-06-20 10:35:54.639+08 2018-06-21 11:04:12.09+08 e98557d0-139a-4938-acfb-9870abe496bc 2 t f
+1227 accelertation 加速度 Output \N 2 4000 0 mg 2018-01-08 15:12:21.613+08 2018-01-08 16:23:41.968+08 dde034ce-aa0b-4c0d-bfdb-bcbb2f231808 2 t f
+1240 accelertation 加速度 Output \N 2 70000 0 mg 2018-01-08 16:22:24.858+08 2018-01-08 16:24:14.915+08 9c370a1f-67ec-4686-a7f6-da10dc99c770 2 t f
+1241 accelertation 加速度 Output \N 2 250000 0 mg 2018-01-08 16:22:25.022+08 2018-01-08 16:24:44.935+08 ab8f77d8-d732-48a5-805a-07d6cde1067d 2 t f
+1245 lvdt 位移 Output \N 2 54 0 mm 2018-01-08 16:27:58.787+08 2018-01-08 16:29:11.275+08 ceb32ec1-625c-450d-b1c8-54be51bd97f6 2 t f
+1244 lvdt 位移 Output \N 2 135 0 mm 2018-01-08 16:27:58.099+08 2018-01-08 16:29:50.271+08 68998ba3-d344-4ae4-9ada-bebb5bba6ec3 2 t f
+812 xAccelertation X轴加速度 Output \N 2 5000 0 mg 2018-01-05 15:16:02.959+08 2018-01-08 16:50:09.759+08 12ffe39f-e941-4496-a0af-ae5d4c1e0d29 2 t f
+1258 windSpeed 风速 Output \N 1 50 0 m/s 2018-01-08 16:54:48.918+08 2018-01-08 17:00:59.766+08 a5889f87-05f4-4786-9e66-b322f564f5f9 2 t f
+1257 windSpeed 风速 Output \N 1 75 0 m/s 2018-01-08 16:54:47.937+08 2018-01-08 17:01:30.252+08 2e5b58fb-acb8-4ec6-a177-95a7a1c20745 2 t f
+1932 physicalvalue 应力 Output \N 4 0.2 0 MPa 2018-03-26 14:09:53.015+08 2018-03-26 14:11:12.795+08 aca7e15e-5b9f-4595-8640-9e7c920ef810 2 t f
+1754 temperature 温度 Output \N 3 120 -30 ℃ 2018-03-08 20:03:31.704+08 2018-03-23 16:09:36.587+08 6d7fdfc9-5735-4b35-85f6-238e34c241a0 2 t f
+1938 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:16:04.561+08 2018-03-26 14:16:04.565+08 d8193d74-feb5-4872-8e42-95a335cd383f 2 t f
+1940 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:16:39.947+08 2018-03-26 14:16:39.953+08 750c60f8-168e-4bca-acf5-df2d502915f5 2 t f
+1941 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 14:17:03.073+08 2018-03-26 14:17:03.08+08 b70abc38-5a40-4c7c-8bc8-f238c0b3dc15 2 t f
+1944 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 14:17:40.137+08 2018-03-26 14:17:40.15+08 b70abc38-5a40-4c7c-8bc8-f238c0b3dc15 2 t f
+1120 physicalvalue 应变 Output \N 3 3000 0 με 2018-01-08 08:30:41.967+08 2018-03-28 23:10:39.446+08 09032111-4073-461a-82b6-1c193ef88077 2 t f
+1115 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-08 08:30:41.947+08 2018-03-28 23:10:49.123+08 09032111-4073-461a-82b6-1c193ef88077 2 t f
+1112 physicalvalue 应力 Output \N 3 3000 -3000 kg/cm2 2018-01-08 08:30:41.401+08 2018-03-28 23:11:55.844+08 cac190e9-a228-4032-afbc-2f3bf990cc82 2 t f
+2175 rainfall 雨量 Output \N 1 \N \N mm/h 2018-04-11 16:24:01.264+08 2018-04-11 16:24:01.264+08 9f8406e9-e9ca-4ca0-ae96-258bb6917390 2 t f
+2269 speed 风速 Output \N \N \N 2 60 0 m/s 2018-05-09 13:55:22.694+08 2018-05-09 13:55:22.694+08 d7460b80-d3f3-48f1-9287-d7220b1b7f3d 2 t f
+2270 direction 风向 Output \N \N \N 2 359 0 ° 2018-05-09 13:55:22.699+08 2018-05-09 13:55:22.699+08 d7460b80-d3f3-48f1-9287-d7220b1b7f3d 2 t f
+2481 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-07-25 09:53:15.545+08 2018-07-25 09:53:15.545+08 0d993c54-d0eb-406e-beb3-422b28dd8bd2 2 t f
+2501 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-07-31 14:52:13.948+08 2018-07-31 14:52:13.948+08 4bd4c44c-2dca-4de3-9e9e-39b2bebc57a5 2 t f
+2507 physicalvalue 微应变 Output \N \N \N 3 3000 -3000 με 2018-07-31 14:57:30.043+08 2018-07-31 14:57:30.043+08 fbeb2848-9908-4883-878a-10608a621168 2 t f
+2509 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-07-31 15:10:02.322+08 2018-07-31 15:10:02.322+08 b61317eb-c793-4b2f-b680-2d15a061ec91 2 t f
+2510 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-07-31 15:10:23.365+08 2018-07-31 15:10:23.365+08 b61317eb-c793-4b2f-b680-2d15a061ec91 2 t f
+2383 crossRoad 车道号 Output \N 0 \N 2018-07-04 16:56:16.184+08 2018-07-24 10:33:57.464+08 a3e8fc6e-6dc8-4d65-b479-4b2ee719c712 5 t f
+2514 frequency 频率 Output \N \N \N 3 \N HZ 2018-07-31 15:14:45.132+08 2018-07-31 15:14:45.132+08 d702af0d-ac2f-48c9-bef4-31f6a5659b5a 2 t f
+2515 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-07-31 15:15:04.767+08 2018-07-31 15:15:04.767+08 d702af0d-ac2f-48c9-bef4-31f6a5659b5a 2 t f
+2522 am 幅值 Output \N \N \N 3 \N \N mv 2018-07-31 15:20:32.787+08 2018-07-31 15:20:32.787+08 73e248c9-5515-4482-ac0a-af10af977c95 2 t f
+2542 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-08-02 09:53:52.201+08 2018-08-02 09:53:52.201+08 d926943e-d400-4c4c-83c8-2c3a6fd62c1c 2 t f
+2546 y Y方向角度 Output \N \N \N 2 \N \N ° 2018-08-02 10:33:18.539+08 2018-08-02 10:33:18.539+08 04709fe5-6ce9-4415-99f2-f349e03992fe 2 t f
+2547 x X方向角度 Output \N \N \N 2 \N \N ° 2018-08-02 10:33:18.549+08 2018-08-02 10:33:18.549+08 04709fe5-6ce9-4415-99f2-f349e03992fe 2 t f
+2548 displacement 支架水平位移 Output \N \N \N 2 \N \N mm 2018-08-02 10:33:18.558+08 2018-08-02 10:33:18.558+08 04709fe5-6ce9-4415-99f2-f349e03992fe 2 t f
+2567 physicalvalue 角度 Output \N 2 \N \N ° 2018-08-03 10:29:52.694+08 2018-08-03 10:35:04.669+08 c5d291cd-bb26-4192-9454-e686cb8c1f9a 2 t f
+2591 physicalvalue 温度 Output \N 2 \N \N ℃ 2018-08-10 09:33:09.093+08 2018-08-10 09:35:13.94+08 f9df0040-a2b5-442e-9fce-4787a7c308c9 2 t f
+2575 pressure 液位 Output \N 3 1000 0 mm 2018-08-07 16:40:45.492+08 2018-08-10 14:03:23.643+08 29e946c4-e67d-4d58-aba2-a16897f4da42 2 t f
+2611 flow_hour 瞬时流量(时) Output \N 4 \N \N m³/h 2018-08-13 11:04:35.324+08 2018-08-13 14:11:11.553+08 249bf211-a7fc-4649-977a-1ba27e2fc683 2 t f
+2617 packtemperature2 探头温度B Output \N \N \N 2 \N \N ℃ 2018-08-14 16:20:16.765+08 2018-08-14 16:20:16.765+08 251fdf4e-2811-48e8-b21d-3bedb3ffb0a6 2 t f
+446 soilHumidity 土壤湿度 Output \N \N \N 2 100 0 %RH 2017-12-05 11:02:14.097+08 2017-12-05 11:02:14.105+08 84868dd7-e484-47d3-b26f-8c39e898bb4d 2 t f
+450 co2 二氧化碳 Output \N \N \N 2 2000 0 PPM 2017-12-05 11:06:13.809+08 2017-12-05 11:06:13.821+08 84868dd7-e484-47d3-b26f-8c39e898bb4d 2 t f
+1912 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 13:54:12.059+08 2018-03-26 13:54:12.065+08 ce140baa-bcd7-4756-9d06-9591535eed2a 2 t f
+1262 temp 温度 Output \N 2 125 -40 ℃ 2018-01-08 17:03:46.478+08 2018-01-08 17:05:11.868+08 546dee6f-5d8b-4572-931b-fa64627c058a 2 t f
+1129 CPU-oid CPU-oid Constant \N \N .0.1.2.3.4.5.6.0 \N \N \N \N 2018-01-08 09:46:41.15+08 2018-01-08 09:46:41.15+08 d30c1deb-b88d-4111-a4df-6810595e0a63 5 t f
+1130 尝试次数 尝试次数 Variable \N \N 3 \N 5 2 2018-01-08 09:46:41.153+08 2018-01-08 09:46:41.153+08 d30c1deb-b88d-4111-a4df-6810595e0a63 1 t f
+1131 内存oid 内存oid Variable \N \N 0.2.3.4.5.0 \N \N \N 2018-01-08 09:46:41.163+08 2018-01-08 09:46:41.163+08 31a6e729-2f1b-4d8a-8f13-399b327f0d70 5 t f
+1142 elongationIndicator 偏移量 Output \N 4 5 0 mm 2018-01-08 10:24:02.584+08 2018-01-08 10:24:58.771+08 7b98954d-1ba2-4349-9f4b-26d35ab67107 2 t f
+1141 elongationIndicator 偏移量 Output \N 4 40 0 mm 2018-01-08 10:24:02.011+08 2018-01-08 10:26:04.754+08 51734448-f0f6-4268-8191-cd093e9e6e60 2 t f
+1140 elongationIndicator 偏移量 Output \N 4 8 0 mm 2018-01-08 10:24:01.162+08 2018-01-08 10:26:43.401+08 e29ac2dd-147b-403e-a9a8-6737b7799100 2 t f
+1914 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 13:54:47.861+08 2018-03-26 13:54:47.866+08 228d8257-dcf7-4493-a4d4-083712716318 2 t f
+1145 frequency 频率 Output \N 3 \N \N HZ 2018-01-08 10:43:07.575+08 2018-01-08 10:43:07.575+08 eb737450-437c-4c7c-9a72-f54364c468a8 2 t f
+1928 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:06:55.973+08 2018-03-26 14:06:55.989+08 b0488049-bfc9-40ee-8dfa-79f9233638ec 2 t f
+1918 temperature 温度 Output \N 4 \N \N ℃ 2018-03-26 13:57:13.728+08 2018-03-26 16:44:17.77+08 1361a9fa-8c55-4a5f-a13c-2da8e4ca89ad 2 t f
+1755 anglex X方向角度 Output \N 4 30 -30 ° 2018-03-08 20:04:28.453+08 2018-03-23 16:09:16.534+08 6d7fdfc9-5735-4b35-85f6-238e34c241a0 2 t f
+1143 phy 载荷 Output \N 3 250 -150 MPa 负值为压应力,正值为拉应力 2018-01-08 10:43:07.565+08 2018-03-12 09:39:58.711+08 eb737450-437c-4c7c-9a72-f54364c468a8 2 t f
+1919 humidity 湿度 Output \N 2 \N \N RS% 2018-03-26 13:57:13.733+08 2018-03-26 16:44:29.006+08 1361a9fa-8c55-4a5f-a13c-2da8e4ca89ad 2 t f
+1242 lvdt 位移 Output \N 2 600 0 mm 2018-01-08 16:27:56.748+08 2018-01-08 16:47:56.984+08 4d545e19-172c-4acb-9183-248abe86f986 2 t f
+1147 temperature 温度 Output \N 2 80 -30 ℃ 2018-01-08 10:43:07.583+08 2018-03-12 09:55:07.743+08 eb737450-437c-4c7c-9a72-f54364c468a8 2 t f
+1247 phy 应变 Output \N 2 2000 -2000 με 2018-01-08 16:40:09.757+08 2018-01-22 16:59:45.006+08 1377db1c-e2f6-4ac5-832d-53103233d957 2 t f
+2352 length 位移 Output \N \N \N 3 \N \N mm 2018-06-21 13:41:41.277+08 2018-06-21 13:41:41.295+08 0c4dd41a-453b-440b-a28b-26d7768832d5 2 t f
+1363 phy2 湿度 Output \N \N \N 2 100 0 %RH 2018-01-11 09:39:49.859+08 2018-01-11 09:39:49.875+08 17077adc-cfaa-428d-a6e5-346aa75678d9 2 t f
+1364 phy1 雨量 Output \N \N \N 2 4 0.01 mm/min 2018-01-11 10:06:13.048+08 2018-01-11 10:06:13.058+08 af851f6e-99a5-40e6-b8f1-e3ae9cc7fca2 2 t f
+1444 wrewr werwe Output \N \N \N \N 111 11 11 111 2018-01-22 17:20:53.365+08 2018-01-22 17:20:53.404+08 aca808a3-91a5-43d4-9aa2-171a388266a1 1 t f
+1083 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-08 08:30:39.685+08 2018-03-28 23:14:42.078+08 ab8b7681-8ef7-4101-9a8a-5bee37ee7510 2 t f
+1583 frequency 频率 Output \N \N \N \N \N \N Hz 2018-01-23 15:06:34.942+08 2018-01-23 15:06:34.942+08 787be20b-1887-4708-a1db-c0d581a322eb 2 t f
+1831 temperature 温度 Output \N 2 \N \N ℃ 2018-03-20 17:29:56.43+08 2018-03-22 10:26:59.22+08 fca1794e-e349-42fb-aef1-59f5eb4c3efd 2 t f
+1582 physicalvalue 应变 Output \N 4 1500 -1500 με 2018-01-23 15:06:34.935+08 2018-03-23 15:39:22.114+08 787be20b-1887-4708-a1db-c0d581a322eb 2 t f
+1581 temperature 温度 Output \N \N \N \N ℃ 2018-01-23 15:06:34.931+08 2018-03-23 15:39:29.721+08 787be20b-1887-4708-a1db-c0d581a322eb 2 t f
+1321 physicalvalue 湿度 Output \N 2 100 0 %RH 2018-01-09 11:10:39.8+08 2018-03-29 11:39:37.83+08 926a081e-9ed3-4bab-a8d1-c556a8be9404 2 t f
+2106 length 能见度 Output \N \N \N 4 \N \N m 2018-04-02 16:41:11.451+08 2018-04-02 16:41:11.457+08 c4424e56-9f35-4bdd-b7c1-66836e3ba1cb 2 t f
+2113 angley Y轴角度 Output \N \N \N 2 \N \N ° 2018-04-02 17:11:41.901+08 2018-04-02 17:11:41.912+08 c08bb21f-6cdb-46c1-a8df-3ea9d92279ba 2 t f
+2176 length 液位 Output \N 3 300 0 mm 2018-04-12 11:22:38.595+08 2018-04-12 11:23:22.547+08 3c6dfe0c-5013-4f63-9222-721718b82b24 2 t f
+2272 lane 车道 Output \N \N \N \N 128 1 \N 2018-05-09 17:04:53.386+08 2018-05-09 17:04:53.401+08 7795f990-07c0-4953-aab6-8af73f1bf2d2 1 t f
+2298 physicalvalue 风速 Output \N 2 \N \N m/s 2018-05-28 14:14:57.648+08 2018-05-28 14:16:40.359+08 1d256945-ce40-4216-ba9b-2071e6e1548e 2 t f
+2368 reverseflow 反向累计流量 Output \N 4 \N \N m3 2018-06-28 16:30:04.991+08 2018-06-28 16:58:30.201+08 419116d4-4614-4d66-bc30-ce2394eed251 2 t f
+2345 concentration 温度 Output \N 1 \N \N ℃ 2018-06-20 11:04:00.675+08 2018-06-20 11:08:00.106+08 3fe35a29-777b-4a79-a6fd-2e57e60caa11 2 t f
+2495 warning 提醒状态 Output \N \N \N \N \N \N 2018-07-28 17:16:20.014+08 2018-07-28 17:16:20.014+08 fe52923b-3bb6-4390-be5f-32733342b67b 1 t f
+2489 torquePercent 力矩百分比 Output \N 2 100 0 % 2018-07-28 17:11:55.237+08 2018-07-31 10:23:09.772+08 fe52923b-3bb6-4390-be5f-32733342b67b 2 t f
+2423 radiation 光辐射 Output \N 3 \N \N μM/m^2 2018-07-13 11:06:21.798+08 2018-07-13 15:15:32.801+08 ead31896-f035-4ed5-8732-526210a6bfa2 2 t f
+2482 rotationAngle 回转角度 Output \N \N \N 2 360 -360 ° 2018-07-28 17:07:01.921+08 2018-07-28 17:07:01.921+08 fe52923b-3bb6-4390-be5f-32733342b67b 2 t f
+2486 elevationAngle 仰角 Output \N \N \N 2 90 -90 ° 2018-07-28 17:09:55.728+08 2018-07-28 17:09:55.728+08 fe52923b-3bb6-4390-be5f-32733342b67b 2 t f
+2519 physicalvalue 应变 Output \N \N \N 4 3000 -3000 με 2018-07-31 15:17:56.964+08 2018-07-31 15:17:56.964+08 b69bda25-731f-49db-b199-83207febe2ed 2 t f
+2504 temperature 温度 Output \N \N \N 3 \N \N ℃ 2018-07-31 14:54:36.02+08 2018-07-31 14:54:36.02+08 fbeb2848-9908-4883-878a-10608a621168 2 t f
+2520 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-07-31 15:19:53.792+08 2018-07-31 15:19:53.792+08 73e248c9-5515-4482-ac0a-af10af977c95 2 t f
+2528 temperature 温度 Output \N \N \N 2 120 -40 ℃ 2018-07-31 17:10:08.217+08 2018-07-31 17:10:08.217+08 292bd1e7-c27c-4437-a899-3c61485b89e3 2 t f
+2543 y Y方向角度 Output \N \N \N 2 \N \N ° 2018-08-02 10:31:54.58+08 2018-08-02 10:31:54.58+08 48082fb5-546a-4106-9c2c-674aec2640c1 2 t f
+2544 settling 模板沉降 Output \N \N \N 2 \N \N mm 2018-08-02 10:31:54.59+08 2018-08-02 10:31:54.59+08 48082fb5-546a-4106-9c2c-674aec2640c1 2 t f
+2545 x X方向角度 Output \N \N \N 2 \N \N ° 2018-08-02 10:31:54.599+08 2018-08-02 10:31:54.599+08 48082fb5-546a-4106-9c2c-674aec2640c1 2 t f
+447 humidity 大气湿度 Output \N \N \N 2 100 0 %RH 2017-12-05 11:03:12.506+08 2017-12-05 11:03:12.517+08 84868dd7-e484-47d3-b26f-8c39e898bb4d 2 t f
+2110 airq_no2 二氧化氮 Output \N 0 μg/m3 2018-04-02 16:51:42.744+08 2018-04-02 17:11:51.112+08 c12bb164-9c52-4a79-8210-b5c74534053a 5 t f
+463 pressure 电流 Output \N 2 \N \N A 变频器电流 2017-12-06 16:10:58.461+08 2017-12-06 16:11:18.523+08 6b13c027-dfe8-4dd3-ae23-c5266b03d77b 2 t f
+461 emptyHigh 空高 Output \N 3 20 0 m 2017-12-06 14:14:09.604+08 2017-12-21 11:28:19.403+08 49be5f93-ae43-4fc7-89f9-58581a1f495e 2 t f
+1366 T0 初始温度 Variable \N 1 16 1000 -100 ℃ 2018-01-12 10:08:09.323+08 2018-01-12 10:08:09.323+08 349567b6-f674-4299-89df-0d64e448a6b3 2 t f
+1367 formula 转换公式 Constant \N \N ε=k*(fi^2-f0^2)+kt*(ti-to) \N \N \N 2018-01-12 10:08:09.329+08 2018-01-12 10:08:09.329+08 349567b6-f674-4299-89df-0d64e448a6b3 5 t f
+1368 K 模量系数 Variable \N 1 16 9999999999 -9999999999 2018-01-12 10:08:09.334+08 2018-01-12 10:08:09.334+08 349567b6-f674-4299-89df-0d64e448a6b3 2 t f
+1369 Kt 温度补偿系数 Variable \N 1 16 100000 -100000 2018-01-12 10:08:09.338+08 2018-01-12 10:08:09.338+08 349567b6-f674-4299-89df-0d64e448a6b3 2 t f
+1370 temp 温度 Output \N \N \N \N \N \N ℃ 2018-01-12 10:08:09.342+08 2018-01-12 10:08:09.342+08 349567b6-f674-4299-89df-0d64e448a6b3 2 t f
+1371 frequency 频率 Output \N \N \N \N \N \N Hz 2018-01-12 10:08:09.345+08 2018-01-12 10:08:09.345+08 349567b6-f674-4299-89df-0d64e448a6b3 2 t f
+1372 force 应变 Output \N 4 3000 -3000 με 2018-01-12 10:08:09.349+08 2018-01-12 10:08:09.349+08 349567b6-f674-4299-89df-0d64e448a6b3 2 t f
+1373 F0 频率初值 Variable \N 1 16 999999999 -100000 Hz 2018-01-12 10:08:09.352+08 2018-01-12 10:08:09.352+08 349567b6-f674-4299-89df-0d64e448a6b3 2 t f
+1445 234e23 23423 Variable \N \N 234 2 234 234 234 234 2018-01-22 17:23:29.959+08 2018-01-22 17:23:29.965+08 3d303bbc-0f1a-4105-b7a6-9db99aefb409 2 t f
+928 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 16:18:59.695+08 2018-01-05 16:18:59.695+08 ae9f3c10-ba3a-42be-a58d-35ec3c3c15ea 2 t f
+927 temperature 温度 Output \N 2 ℃ 2018-01-05 16:18:59.688+08 2018-01-05 16:35:46.009+08 ae9f3c10-ba3a-42be-a58d-35ec3c3c15ea 2 t f
+1540 frequency 频率 Output \N 3 \N \N Hz 2018-01-23 15:00:11.235+08 2018-03-02 15:01:22.623+08 d36bb0ee-6c5c-4778-bc5b-5e03db483152 2 t f
+1260 temp 温度 Output \N 2 55 -5 ℃ 2018-01-08 17:03:45.956+08 2018-01-08 17:06:32.11+08 80b225c1-5a28-46fd-aa9c-81e77818c907 2 t f
+1541 temperature 温度 Output \N 2 \N \N ℃ 2018-01-23 15:00:11.239+08 2018-03-23 15:42:58.21+08 d36bb0ee-6c5c-4778-bc5b-5e03db483152 2 t f
+1917 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 13:55:46.686+08 2018-03-26 13:55:46.693+08 c0ea2d7f-7778-47aa-af49-0119a729c741 2 t f
+1923 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:05:03.049+08 2018-03-26 14:05:03.055+08 0f684ae0-ceb8-4c6a-95c4-e83bdd79059e 2 t f
+1924 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:05:24.007+08 2018-03-26 14:05:24.011+08 b72802e5-4982-4ba1-bd1b-15ba05d7d832 2 t f
+1946 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:18:10.143+08 2018-03-26 14:18:10.15+08 84fc8a27-019f-4640-bbf6-466627f7c6d6 2 t f
+1947 physicalvalue 应力 Output \N \N \N 4 0.4 0 MPa 2018-03-26 14:18:12.853+08 2018-03-26 14:18:12.861+08 b70abc38-5a40-4c7c-8bc8-f238c0b3dc15 2 t f
+1948 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:18:26+08 2018-03-26 14:18:26.006+08 32b8c637-51b5-405c-920d-f7ae0adefafd 2 t f
+1064 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-08 08:17:08.604+08 2018-03-28 23:17:33.395+08 743c44f5-480c-4c97-80ef-a03ba282ed49 2 t f
+1327 physicalvalue 土壤水分 Output \N 2 100 0 %RH 2018-01-09 11:31:58.842+08 2018-03-29 17:55:59.333+08 f4bf34ce-15d4-402f-a4d4-8e307936393d 2 t f
+2107 airq_pm2_5 PM2.5 Output \N 4 \N \N μg/m3 2018-04-02 16:51:42.732+08 2018-04-02 17:01:54.303+08 c12bb164-9c52-4a79-8210-b5c74534053a 2 t f
+2108 airq_pm10 PM10 Output \N 4 \N \N μg/m3 2018-04-02 16:51:42.735+08 2018-04-02 17:02:00.547+08 c12bb164-9c52-4a79-8210-b5c74534053a 2 t f
+2305 anglex X轴角度 Output \N \N \N 2 \N \N ° 2018-05-30 20:46:04.56+08 2018-05-30 20:46:04.572+08 d1f3cdb1-95b4-4970-90b8-cdb6c2201063 2 t f
+2111 airq_co 一氧化碳 Output \N 4 \N \N μg/m3 2018-04-02 16:51:42.747+08 2018-04-02 17:02:44.608+08 c12bb164-9c52-4a79-8210-b5c74534053a 2 t f
+2109 airq_so2 二氧化硫 Output \N 4 \N \N μg/m3 2018-04-02 16:51:42.741+08 2018-04-02 17:11:44.534+08 c12bb164-9c52-4a79-8210-b5c74534053a 2 t f
+1833 y y Output \N \N \N 9 99999999 -99999999 \N 2018-03-21 09:48:24.096+08 2018-03-21 09:48:24.111+08 e3742e72-d9c4-44b2-86aa-e90a5fa8255a 2 t f
+929 physicalvalue 应变 Output \N 3 με 2018-01-05 16:18:59.701+08 2018-03-23 14:09:01.558+08 ae9f3c10-ba3a-42be-a58d-35ec3c3c15ea 2 t f
+1756 angley Y方向角度 Output \N 4 30 -30 ° 2018-03-08 20:05:11.939+08 2018-03-23 16:09:07.755+08 6d7fdfc9-5735-4b35-85f6-238e34c241a0 2 t f
+2115 anglex X轴角度 Output \N \N \N 3 \N \N ° 2018-04-02 17:18:39.129+08 2018-04-02 17:18:39.133+08 bf250923-ab23-43ab-a4c3-0aebe72d5c84 2 t f
+1246 lvdt 位移 Output \N 2 65 0 mm 2018-01-08 16:27:59.734+08 2018-01-08 16:28:38.489+08 b9611c6a-f9b9-4ebe-a1e9-8665bd4f8734 2 t f
+2177 am 幅值 Output \N \N \N 3 mv 2018-04-16 11:54:59.747+08 2018-04-16 11:54:59.747+08 a85e3b5f-f279-4094-b079-07d51a243899 2 t f
+1261 temp 温度 Output \N 2 120 -40 ℃ 2018-01-08 17:03:46.157+08 2018-01-08 17:05:40.513+08 d53a176b-9c3c-46b6-8e05-37b776800b13 2 t f
+2178 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 11:54:59.753+08 2018-04-16 11:54:59.753+08 a85e3b5f-f279-4094-b079-07d51a243899 2 t f
+2179 physicalvalue 轴力 Output \N \N \N 4 1000 -1000 kN 2018-04-16 11:54:59.761+08 2018-04-16 11:54:59.761+08 a85e3b5f-f279-4094-b079-07d51a243899 2 t f
+2180 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-04-16 11:54:59.771+08 2018-04-16 11:54:59.771+08 a85e3b5f-f279-4094-b079-07d51a243899 2 t f
+2273 anglex X轴角度 Output \N \N \N 3 30 -30 ° 2018-05-10 09:21:45.787+08 2018-05-10 09:21:45.804+08 33ced0d8-f342-4bc5-8c11-45dcb0304ffd 2 t f
+1446 pressure 绳索张力 Output \N 3 kN 2018-01-23 10:24:45.963+08 2018-05-21 15:38:50.061+08 3fde2361-48e1-41a2-9063-28daac442f9b 2 t f
+2300 length 液位 Output \N \N \N 3 \N \N mm 2018-05-29 11:45:13.016+08 2018-05-29 11:45:13.025+08 d3ba7fce-1ab9-4423-8888-27fbc8244e5c 2 t f
+2306 angley Y轴角度 Output \N \N \N 2 \N \N ° 2018-05-30 20:46:28.046+08 2018-05-30 20:46:28.053+08 d1f3cdb1-95b4-4970-90b8-cdb6c2201063 2 t f
+2346 concentration 湿度 Output \N 0 \N \N %RH 2018-06-20 11:04:01.405+08 2018-06-20 11:09:08.333+08 91e8b285-92af-4ba8-a401-14561bfe4d82 2 t f
+2396 axieSpeed 轴速 Output \N 0 km/h 2018-07-05 09:12:27.182+08 2018-07-24 10:32:16.557+08 a3e8fc6e-6dc8-4d65-b479-4b2ee719c712 5 t f
+2425 CO2 CO2浓度 Output \N \N \N 3 \N \N ppm 2018-07-13 14:18:02.338+08 2018-07-13 14:18:02.343+08 ead31896-f035-4ed5-8732-526210a6bfa2 2 t f
+2426 length 液位 Output \N \N \N \N \N \N mm 2018-07-13 16:17:36.667+08 2018-07-13 16:17:36.678+08 da84feba-aff0-4b51-baee-a20f8e196dfe 2 t f
+2445 am 幅值 Output \N \N \N 3 \N \N mv 2018-07-19 09:35:55.16+08 2018-07-19 09:35:55.16+08 5a0e1b09-57f7-4bcc-9f02-2ed2ac5f3d7e 2 t f
+448 ultravioletRadiation 紫外辐射 Output \N \N \N 2 200 0 w/m2 2017-12-05 11:04:18.696+08 2017-12-05 11:04:18.705+08 84868dd7-e484-47d3-b26f-8c39e898bb4d 2 t f
+458 temp 温度 Output \N \N \N 2 \N \N ℃ 2017-12-06 10:37:27.493+08 2017-12-06 10:37:27.493+08 514c15fe-e538-4824-9e48-1d3a83a560c1 2 t f
+1926 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:06:01.965+08 2018-03-26 14:06:01.971+08 0f684ae0-ceb8-4c6a-95c4-e83bdd79059e 2 t f
+456 angleX X轴角度 Output \N 2 30 -30 ° 2017-12-06 10:37:27.483+08 2017-12-20 17:24:46.681+08 514c15fe-e538-4824-9e48-1d3a83a560c1 2 t f
+457 angleY Y轴角度 Output \N 2 30 -30 ° 2017-12-06 10:37:27.489+08 2017-12-20 17:24:53.881+08 514c15fe-e538-4824-9e48-1d3a83a560c1 2 t f
+460 level 液位值 Output \N 3 20 0 m 2017-12-06 14:13:40.778+08 2017-12-21 11:28:24.099+08 49be5f93-ae43-4fc7-89f9-58581a1f495e 2 t f
+1933 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:12:04.834+08 2018-03-26 14:12:04.852+08 7721177a-8610-4836-82c5-d08d05a6be97 2 t f
+1936 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:12:56.007+08 2018-03-26 14:12:56.013+08 7721177a-8610-4836-82c5-d08d05a6be97 2 t f
+1939 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:16:21.895+08 2018-03-26 14:16:21.906+08 d8193d74-feb5-4872-8e42-95a335cd383f 2 t f
+2181 am 幅值 Output \N \N \N 3 \N \N mv 2018-04-16 13:53:01.844+08 2018-04-16 13:53:01.85+08 64cbf359-5e92-46a5-ac77-4ba6566e6539 2 t f
+1168 phy 载荷 Output \N 3 1000 0 KN 2018-01-08 11:40:11.767+08 2018-01-08 11:40:11.767+08 bbcb8570-b0c2-4fb4-ac75-c28c9bf38503 2 t f
+1945 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:17:47.782+08 2018-03-26 14:17:47.789+08 84fc8a27-019f-4640-bbf6-466627f7c6d6 2 t f
+1170 frequency 频率 Output \N 3 \N \N HZ 2018-01-08 11:40:11.774+08 2018-01-08 11:40:11.774+08 bbcb8570-b0c2-4fb4-ac75-c28c9bf38503 2 t f
+1374 anglex X轴角度 Output \N 3 10 -10 ° 2018-01-16 09:44:42.419+08 2018-03-29 10:15:41.922+08 01a3d220-4d3f-45c9-96f8-39d2cbbf8ef5 2 t f
+1375 angley Y轴角度 Output \N 3 10 -10 ° 2018-01-16 09:44:42.424+08 2018-03-29 10:15:47.886+08 01a3d220-4d3f-45c9-96f8-39d2cbbf8ef5 2 t f
+1376 temperature 温度 Output \N 3 85 -40 ℃ 2018-01-16 09:44:42.428+08 2018-03-29 10:16:05.568+08 01a3d220-4d3f-45c9-96f8-39d2cbbf8ef5 2 t f
+1381 temperature 温度 Output \N 3 85 -40 ℃ 2018-01-16 10:33:58.405+08 2018-03-29 10:23:24.029+08 e146e8c0-39b3-4922-b153-21492123982d 2 t f
+1253 xAccelertation X轴加速度 Output \N 2 4000 0 mg 2018-01-08 16:50:48.91+08 2018-01-08 16:52:26.331+08 de7958de-0a8a-4492-8705-642b5c4df424 2 t f
+1259 windSpeed 风速 Output \N 1 20 0 m/s 2018-01-08 16:54:49.758+08 2018-01-08 17:00:19.81+08 2bfe226a-cde2-4d95-8420-b3ba3f669aa8 2 t f
+2185 am 幅值 Output \N \N \N 3 \N \N mv 2018-04-16 14:07:58.019+08 2018-04-16 14:07:58.019+08 b848da41-0b65-4b04-afdb-aedda940be03 2 t f
+2186 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 14:07:58.026+08 2018-04-16 14:07:58.026+08 b848da41-0b65-4b04-afdb-aedda940be03 2 t f
+2187 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-04-16 14:07:58.031+08 2018-04-16 14:07:58.031+08 b848da41-0b65-4b04-afdb-aedda940be03 2 t f
+1383 anglex X轴角度 Output \N 3 60 -60 ° 2018-01-16 10:33:59.649+08 2018-03-29 10:24:07.932+08 8d3ad66f-9a24-4adb-99de-1b86ae3e5d46 2 t f
+1385 angley Y轴角度 Output \N 3 60 -60 ° 2018-01-16 10:33:59.656+08 2018-03-29 10:24:14.057+08 8d3ad66f-9a24-4adb-99de-1b86ae3e5d46 2 t f
+1338 physicalvalue 风速 Output \N 2 70 0 m/s 2018-01-09 14:14:58.462+08 2018-03-29 17:59:59.36+08 b69afb69-84fd-4273-be31-9727323de2e0 2 t f
+1333 physicalvalue 风向 Output \N 2 359 0 ° 2018-01-09 14:07:31.212+08 2018-03-29 18:02:34.029+08 b1683813-a1e0-4d50-969b-1bad76311398 2 t f
+1757 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-08 20:20:54.388+08 2018-03-08 20:20:54.394+08 99a6c9c1-0f57-45bc-a1ff-e98a56faef46 2 t f
+1759 am 幅值 Output \N \N \N 5 \N \N mV 2018-03-08 20:22:06.946+08 2018-03-08 20:22:06.954+08 99a6c9c1-0f57-45bc-a1ff-e98a56faef46 2 t f
+1380 anglex X轴角度 Output \N 3 30 -30 ° 2018-01-16 10:33:58.399+08 2018-03-29 10:23:28.187+08 e146e8c0-39b3-4922-b153-21492123982d 2 t f
+1835 physicalvalue 物理值 Output \N 8 9999999 -9999999 \N 2018-03-21 09:54:46.406+08 2018-03-23 16:24:09.813+08 eaa55b41-7d6a-48d3-8600-2b52eaad59a4 2 t f
+1167 temperature 温度 Output \N 2 80 -30 ℃ 2018-01-08 11:40:11.763+08 2018-03-12 09:49:19.506+08 bbcb8570-b0c2-4fb4-ac75-c28c9bf38503 2 t f
+1523 physicalvalue 荷载 Output \N 4 kN 2018-01-23 14:53:15.8+08 2021-03-02 13:56:10.454+08 069cdfbe-2463-40a3-a677-fa3564d06956 2 t f
+1834 z z Output \N \N \N 9 99999999 -99999999 2018-03-21 09:49:00.086+08 2018-03-21 09:49:00.101+08 e3742e72-d9c4-44b2-86aa-e90a5fa8255a 2 t f
+1382 angley Y轴角度 Output \N 3 30 -30 ° 2018-01-16 10:33:58.41+08 2018-03-29 10:23:32.767+08 e146e8c0-39b3-4922-b153-21492123982d 2 t f
+1384 temperature 温度 Output \N 3 85 -40 ℃ 2018-01-16 10:33:59.652+08 2018-03-29 10:24:03.02+08 8d3ad66f-9a24-4adb-99de-1b86ae3e5d46 2 t f
+1387 temperature 温度 Output \N 3 85 -40 ℃ 2018-01-16 10:34:00.731+08 2018-03-29 10:24:28.682+08 2b18c0fd-b077-4d22-92b0-c38896c4d150 2 t f
+1388 angley Y轴角度 Output \N 3 5 -5 ° 2018-01-16 10:34:00.735+08 2018-03-29 10:24:32.881+08 2b18c0fd-b077-4d22-92b0-c38896c4d150 2 t f
+742 frequency 频率 Output \N \N \N \N \N \N Hz 2018-01-05 14:02:09.81+08 2018-01-05 14:02:09.81+08 da94e805-9621-4290-b239-5ddc2e0504a7 2 t f
+1386 anglex X轴角度 Output \N 3 90 -90 ° 2018-01-16 10:34:00.728+08 2018-03-29 10:24:37.893+08 2b18c0fd-b077-4d22-92b0-c38896c4d150 2 t f
+2189 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 14:07:58.045+08 2018-04-16 14:07:58.045+08 02d9ea95-34c0-4d67-a8dc-755e3330cb36 2 t f
+2112 airq_o3 臭氧 Output \N 0 μg/m3 2018-04-02 16:52:58.834+08 2018-04-02 17:02:51.496+08 c12bb164-9c52-4a79-8210-b5c74534053a 5 t f
+2190 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-04-16 14:07:58.049+08 2018-04-16 14:07:58.049+08 02d9ea95-34c0-4d67-a8dc-755e3330cb36 2 t f
+2192 am 温度 Output \N \N \N 3 \N \N mv 2018-04-16 14:07:58.057+08 2018-04-16 14:07:58.057+08 02d9ea95-34c0-4d67-a8dc-755e3330cb36 2 t f
+2217 am 幅值 Output \N \N \N 3 \N \N mv 2018-04-16 16:00:53.277+08 2018-04-16 16:00:53.277+08 3987b49b-1b19-4b06-889b-b102edd2abe3 2 t f
+2218 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 16:00:53.281+08 2018-04-16 16:00:53.281+08 3987b49b-1b19-4b06-889b-b102edd2abe3 2 t f
+2219 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-04-16 16:00:53.288+08 2018-04-16 16:00:53.288+08 3987b49b-1b19-4b06-889b-b102edd2abe3 2 t f
+2221 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 16:00:53.3+08 2018-04-16 16:00:53.3+08 c538c4cc-6b50-4a51-9706-9a112551be27 2 t f
+2222 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-04-16 16:00:53.306+08 2018-04-16 16:00:53.306+08 c538c4cc-6b50-4a51-9706-9a112551be27 2 t f
+2224 am 温度 Output \N \N \N 3 \N \N mv 2018-04-16 16:00:53.315+08 2018-04-16 16:00:53.315+08 c538c4cc-6b50-4a51-9706-9a112551be27 2 t f
+2223 physicalvalue 荷载 Output \N 4 100 -100 kN 2018-04-16 16:00:53.311+08 2018-04-16 17:49:44.787+08 c538c4cc-6b50-4a51-9706-9a112551be27 2 t f
+2191 physicalvalue 荷载 Output \N 4 50 -50 kN 2018-04-16 14:07:58.052+08 2018-04-16 17:49:12.428+08 02d9ea95-34c0-4d67-a8dc-755e3330cb36 2 t f
+2188 physicalvalue 荷载 Output \N 4 50 -50 kN 2018-04-16 14:07:58.035+08 2018-04-16 17:49:20.47+08 b848da41-0b65-4b04-afdb-aedda940be03 2 t f
+2220 physicalvalue 荷载 Output \N 4 100 -100 kN 2018-04-16 16:00:53.291+08 2018-04-16 17:49:40.38+08 3987b49b-1b19-4b06-889b-b102edd2abe3 2 t f
+2274 angley Y轴角度 Output \N \N \N 3 30 -30 ° 2018-05-10 09:22:09.578+08 2018-05-10 09:22:09.584+08 33ced0d8-f342-4bc5-8c11-45dcb0304ffd 2 t f
+2301 anglex X轴角度 Output \N \N \N 3 \N \N ° 2018-05-29 14:51:48.732+08 2018-05-29 14:51:48.732+08 9517f5d2-02f2-47c6-b688-35e0efa0f25f 2 t f
+449 illumination 照度 Output \N \N \N 2 200000 0 LUX 2017-12-05 11:05:11.884+08 2017-12-05 11:05:11.901+08 84868dd7-e484-47d3-b26f-8c39e898bb4d 2 t f
+451 pm25 PM2.5 Output \N \N \N 2 500 0 ug/m3 2017-12-05 11:07:06.599+08 2017-12-05 11:07:06.607+08 84868dd7-e484-47d3-b26f-8c39e898bb4d 2 t f
+1949 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 14:23:16.35+08 2018-03-26 14:23:16.36+08 5775692b-7acf-46f2-b924-d040fb8bd751 2 t f
+221 windDirection 风向 Output \N 2 360 0 ° 2017-09-14 20:58:20.376+08 2017-12-21 14:12:37.336+08 2e7a1db8-dd48-47e0-87d0-023cd2b9ff08 2 t f
+484 distance 距离 Output \N 3 100000 500 mm 2017-12-08 15:12:43.779+08 2017-12-21 15:56:19.139+08 20231ffb-4f57-4ebc-bef1-cfd72e18d550 2 t f
+464 xDegree X轴角度 Output \N 3 30 -30 ° 2017-12-07 10:22:56.756+08 2017-12-21 14:18:43.621+08 df01da11-6cbc-4a10-b62d-dba26d636f74 2 t f
+477 angleX X轴角度 Output \N 2 90 -90 ° 2017-12-08 09:56:07.533+08 2017-12-21 15:07:29.86+08 096efcee-8caa-4bf3-9f0b-b8ce92ace83c 2 t f
+467 angleY Y轴角度 Output \N 2 90 -90 ° 2017-12-07 11:45:53.579+08 2017-12-21 15:19:49.971+08 13268453-da66-4d7a-a972-e67bd897b1a9 2 t f
+468 temp 温度 Output \N 2 80 -40 ℃ 2017-12-07 11:46:13.923+08 2017-12-21 15:19:57.213+08 13268453-da66-4d7a-a972-e67bd897b1a9 2 t f
+469 temp 温度 Output \N 2 123.8 -40 ℃ 2017-12-07 14:27:17.109+08 2017-12-21 15:26:56.244+08 b314cfb9-6a52-40c6-ab30-cc7f75189c59 2 t f
+475 ph PH Output \N 2 14 0 PH 2017-12-07 15:21:29.951+08 2017-12-21 15:33:59.272+08 05aa0ad1-dcc0-40c2-80cc-198e8e1a6511 2 t f
+472 speedofWind 风速 Output \N 2 60 0 m/s 2017-12-07 14:30:48.803+08 2017-12-21 15:28:05.854+08 b314cfb9-6a52-40c6-ab30-cc7f75189c59 2 t f
+471 pressure 气压 Output \N 2 1100 10 mBar 2017-12-07 14:29:12.671+08 2017-12-21 15:27:50.544+08 b314cfb9-6a52-40c6-ab30-cc7f75189c59 2 t f
+473 azimuthofWind 风向 Output \N 2 359.9 0 ° 2017-12-07 14:31:11.75+08 2017-12-21 15:28:13.803+08 b314cfb9-6a52-40c6-ab30-cc7f75189c59 2 t f
+474 rainFall 雨量 Output \N 2 500 0 mm 2017-12-07 14:32:29.118+08 2017-12-21 15:28:24.035+08 b314cfb9-6a52-40c6-ab30-cc7f75189c59 2 t f
+470 hum 相对湿度 Output \N 2 100 0 %RH 2017-12-07 14:28:28.858+08 2017-12-21 15:28:36.216+08 b314cfb9-6a52-40c6-ab30-cc7f75189c59 2 t f
+476 temp 温度 Output \N 2 65 0 ℃ 2017-12-07 15:22:01.23+08 2017-12-21 15:34:39.151+08 05aa0ad1-dcc0-40c2-80cc-198e8e1a6511 2 t f
+487 distance 距离 Output \N 3 250000 500 mm 2017-12-08 15:31:10.958+08 2017-12-21 15:55:15.584+08 ed796d50-66db-40b1-be39-62728b8d5fdc 2 t f
+478 angleY Y轴角度 Output \N 2 180 -180 ° 2017-12-08 09:56:40.15+08 2017-12-21 15:07:36.365+08 096efcee-8caa-4bf3-9f0b-b8ce92ace83c 2 t f
+466 angleX X轴角度 Output \N 2 90 -90 ° 2017-12-07 11:45:28.464+08 2017-12-21 15:19:43.31+08 13268453-da66-4d7a-a972-e67bd897b1a9 2 t f
+485 distance 距离 Output \N 3 150000 500 mm 2017-12-08 15:17:26+08 2017-12-21 15:55:58.329+08 88876216-b879-4524-bada-01f39ed17c93 2 t f
+486 distance 距离 Output \N 3 200000 500 mm 2017-12-08 15:24:25.118+08 2017-12-21 15:55:41.915+08 16b2379a-313c-434d-8eb3-56120068c40a 2 t f
+481 distance 距离 Output \N 3 30000 100 mm 2017-12-08 14:54:33.996+08 2017-12-21 15:57:03.474+08 a5e1cd4e-fda7-425f-970e-ad4449eb546c 2 t f
+480 distance 距离 Output \N 3 12000 200 mm 2017-12-08 14:51:04.865+08 2017-12-21 15:57:15.094+08 e9b00fde-a1f2-4167-af71-7fc7862cc867 2 t f
+1951 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 14:24:02.066+08 2018-03-26 14:24:02.071+08 5775692b-7acf-46f2-b924-d040fb8bd751 2 t f
+479 distance 距离 Output \N 3 12000 200 mm 2017-12-08 14:41:10.689+08 2017-12-21 15:57:36.613+08 e905978b-35fd-48b2-8dca-d3af8020841e 2 t f
+482 distance 距离 Output \N 3 60000 200 mm 2017-12-08 14:58:29.647+08 2017-12-21 15:56:51.648+08 22f8366a-f855-462a-ab4d-6f140e075584 2 t f
+483 diatance 距离 Output \N 3 70000 50 mm 2017-12-08 15:03:19.858+08 2017-12-21 15:56:32.058+08 e4d8894c-78bb-485f-a691-8288a65c6967 2 t f
+489 totalFlow 累计流量 Output \N 3 \N \N m3/h 2017-12-11 15:27:03.008+08 2017-12-11 15:57:34.37+08 6bc1aa05-f9ce-4f21-92f8-d1464535b0c2 2 t f
+490 transientFlow 瞬时流量 Output \N \N \N 3 \N \N m3/h 2017-12-11 15:58:16.359+08 2017-12-11 15:58:16.373+08 6bc1aa05-f9ce-4f21-92f8-d1464535b0c2 2 t f
+497 humidity 湿度 Output \N \N \N 2 95 5 %RH 2017-12-12 14:44:18.949+08 2017-12-12 14:44:18.956+08 9b5c64a1-06b3-48e2-83d2-92d0278e050c 2 t f
+330 PM25 PM25 Output \N 1 10000 0 ug/m³ 2017-10-31 15:36:07.59+08 2017-12-12 11:36:16.336+08 9b5c5f27-ebad-42e1-8586-405066f03c1d 2 t f
+492 windSpeed 风速 Output \N \N \N 2 60 0 m/s 2017-12-12 11:55:51.6+08 2017-12-12 11:55:51.613+08 7563b8d0-13b1-42d9-91dd-b7a48a97089f 2 t f
+493 windDirection 风向 Output \N \N \N 2 359.9 0 ° 2017-12-12 11:56:16.364+08 2017-12-12 11:56:16.37+08 7563b8d0-13b1-42d9-91dd-b7a48a97089f 2 t f
+494 temp 温度 Output \N \N \N 2 50 -10 ℃ 2017-12-12 14:09:29.446+08 2017-12-12 14:09:29.452+08 48838bfb-174e-42ac-a6c4-1c694dbf569b 2 t f
+495 humidity 湿度 Output \N 2 100 0 %RH 2017-12-12 14:09:55.546+08 2017-12-12 14:10:46.351+08 48838bfb-174e-42ac-a6c4-1c694dbf569b 2 t f
+496 temp 温度 Output \N \N \N 2 120 -40 ℃ 2017-12-12 14:41:34.706+08 2017-12-12 14:41:34.712+08 9b5c64a1-06b3-48e2-83d2-92d0278e050c 2 t f
+498 temp 温度 Output \N \N \N 2 50 0 ℃ 2017-12-13 13:09:49.056+08 2017-12-13 13:09:49.062+08 e5550e74-9d03-440d-b9a8-0175cec5ed42 2 t f
+499 humidity 湿度 Output \N \N \N 2 100 0 %RH 2017-12-13 13:10:24.535+08 2017-12-13 13:10:24.543+08 e5550e74-9d03-440d-b9a8-0175cec5ed42 2 t f
+500 temp 温度 Output \N \N \N 2 55 -5 ℃ 2017-12-13 13:22:50.099+08 2017-12-13 13:22:50.108+08 cd2059de-7aca-4f60-9b28-90d4aec7dfcc 2 t f
+501 humidity 湿度 Output \N \N \N 2 100 0 %RH 2017-12-13 13:23:15.055+08 2017-12-13 13:23:15.062+08 cd2059de-7aca-4f60-9b28-90d4aec7dfcc 2 t f
+502 temp 温度 Output \N \N \N 2 60 -10 ℃ 2017-12-13 13:28:03.153+08 2017-12-13 13:28:03.17+08 8409a1f6-b5f7-46c7-98e8-e8ed92f8113a 2 t f
+503 humidity 湿度 Output \N \N \N 2 100 0 %RH 2017-12-13 13:28:34.047+08 2017-12-13 13:28:34.054+08 8409a1f6-b5f7-46c7-98e8-e8ed92f8113a 2 t f
+505 humidity 湿度 Output \N \N \N 2 100 0 %RH 2017-12-13 13:42:04.76+08 2017-12-13 13:42:04.766+08 d6ba5199-32e3-4c9c-a69c-1317e15f21a6 2 t f
+504 temp 温度 Output \N 2 80 -20 ℃ 2017-12-13 13:41:40.857+08 2017-12-13 13:42:24.044+08 d6ba5199-32e3-4c9c-a69c-1317e15f21a6 2 t f
+506 temp 温度 Output \N \N \N 2 60 -40 ℃ 2017-12-13 13:46:54.182+08 2017-12-13 13:46:54.189+08 03c5dd3d-859b-41e6-89df-ca3000a46e14 2 t f
+507 humidity 湿度 Output \N \N \N 2 100 0 %RH 2017-12-13 13:47:15.665+08 2017-12-13 13:47:15.671+08 03c5dd3d-859b-41e6-89df-ca3000a46e14 2 t f
+508 x X位置 Output \N 2 \N \N mm 2017-12-13 13:59:30.922+08 2017-12-14 16:30:48.355+08 95683aa7-b094-4883-a2a1-bdabe2c7d59f 2 t f
+511 PM25 PM2.5值 Output \N 1 10000 1 ug/m3 2017-12-14 14:22:34.598+08 2017-12-14 14:24:57.404+08 846fe925-eaae-47c8-91a4-b1d3d7fc3bc7 2 t f
+509 y Y位置 Output \N 2 \N \N mm 2017-12-13 13:59:30.93+08 2017-12-14 16:30:58.533+08 95683aa7-b094-4883-a2a1-bdabe2c7d59f 2 t f
+510 z Z位置 Output \N 2 \N \N mm 2017-12-13 13:59:30.937+08 2017-12-14 16:31:07.52+08 95683aa7-b094-4883-a2a1-bdabe2c7d59f 2 t f
+462 weight 压力 Output \N 2 KN 2017-12-06 15:19:16.191+08 2017-12-21 13:42:09.319+08 fcbff74f-610d-4dc8-b2a8-d5c54792fc7c 2 t f
+465 yDegree Y轴角度 Output \N 3 30 -30 ° 2017-12-07 10:23:29.747+08 2017-12-21 14:18:39.136+08 df01da11-6cbc-4a10-b62d-dba26d636f74 2 t f
+541 airPressure 气压 Output \N 1 \N \N hPa 2017-12-20 10:35:00.822+08 2017-12-20 10:44:44.592+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+512 PM10 PM10.0值 Output \N 1 10000 1 ug/m3 2017-12-14 14:22:34.603+08 2017-12-14 14:24:48.623+08 846fe925-eaae-47c8-91a4-b1d3d7fc3bc7 2 t f
+513 TSP TSP值 Output \N 1 10000 1 ug/m3 2017-12-14 14:22:34.609+08 2017-12-14 14:40:42.462+08 846fe925-eaae-47c8-91a4-b1d3d7fc3bc7 2 t f
+519 angleX X轴角度 Output \N \N \N 2 30 -30 ° 2017-12-14 16:50:42.658+08 2017-12-14 16:50:42.669+08 9f1dab20-8943-4d5f-9c48-e25d55a8a3d3 2 t f
+520 angleY Y轴角度 Output \N \N \N 2 30 -30 ° 2017-12-14 16:51:16.18+08 2017-12-14 16:51:16.189+08 9f1dab20-8943-4d5f-9c48-e25d55a8a3d3 2 t f
+521 angleX X轴角度 Output \N \N \N 2 30 -30 ° 2017-12-14 16:56:56.491+08 2017-12-14 16:56:56.501+08 ec181902-8df8-4d46-9c16-a1deefd286e5 2 t f
+522 angleY Y轴角度 Output \N \N \N 2 30 -30 ° 2017-12-14 16:57:33.274+08 2017-12-14 16:57:33.281+08 ec181902-8df8-4d46-9c16-a1deefd286e5 2 t f
+523 settlement 沉降 Output \N 3 1000 0 mm 2017-12-18 10:57:40.221+08 2017-12-18 13:27:32.64+08 63010e3e-4783-485c-a5dc-4f26a1153ece 2 t f
+558 concentration CO浓度 Output \N \N \N 2 50 0 ppm 2017-12-20 14:00:19.695+08 2017-12-20 14:00:19.7+08 ab03ba4c-6102-471a-a570-87b77683dcc3 2 t f
+525 temp 温度 Output \N 3 30 -10 ℃ 2017-12-18 17:23:33.744+08 2017-12-19 13:46:44.453+08 235950eb-8bd2-40b5-945f-6ba95c40892d 2 t f
+524 settlement 沉降 Output \N 3 1500 0 mm 2017-12-18 17:23:33.737+08 2017-12-19 13:46:54.522+08 235950eb-8bd2-40b5-945f-6ba95c40892d 2 t f
+526 turbidity 浊度 Output \N \N \N 2 1000 0.1 NTU 2017-12-19 14:29:24.972+08 2017-12-19 14:29:25.273+08 53e4c42b-3996-45c2-9631-73b200cb840c 2 t f
+527 temp 温度 Output \N \N \N 2 50 0 ℃ 2017-12-19 14:31:40.464+08 2017-12-19 14:31:40.478+08 53e4c42b-3996-45c2-9631-73b200cb840c 2 t f
+529 physicalvalue 压力 Output \N 2 \N \N MPa 2017-12-19 18:00:48.924+08 2018-04-20 13:43:30.063+08 b6bff26c-a89e-4fd7-85db-adb7ff80af6c 2 t f
+1950 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 14:23:48.272+08 2018-03-26 14:23:48.278+08 5775692b-7acf-46f2-b924-d040fb8bd751 2 t f
+531 radiation1day 辐射1日累计 Output \N \N \N 3 \N MJ/m² 2017-12-20 10:35:00.784+08 2017-12-20 10:35:00.784+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+532 radiation2day 辐射2日累计 Output \N \N \N 3 \N \N MJ/m² 2017-12-20 10:35:00.79+08 2017-12-20 10:35:00.79+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+533 groundTemperature1 地温1 Output \N \N \N 1 \N \N ℃ 2017-12-20 10:35:00.795+08 2017-12-20 10:35:00.795+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+534 groundTemperature2 地温2 Output \N \N \N 1 \N \N ℃ 2017-12-20 10:35:00.799+08 2017-12-20 10:35:00.799+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+535 groundTemperature3 地温3 Output \N \N \N 1 \N \N ℃ 2017-12-20 10:35:00.802+08 2017-12-20 10:35:00.802+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+536 groundTemperature4 地温4 Output \N \N \N 1 \N \N ℃ 2017-12-20 10:35:00.806+08 2017-12-20 10:35:00.806+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+537 groundTemperature5 地温5 Output \N \N \N 1 \N \N ℃ 2017-12-20 10:35:00.809+08 2017-12-20 10:35:00.809+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+538 temperature 环温 Output \N \N \N 1 \N \N ℃ 2017-12-20 10:35:00.813+08 2017-12-20 10:35:00.813+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+539 humidity 环湿 Output \N \N \N 1 \N \N %RH 2017-12-20 10:35:00.816+08 2017-12-20 10:35:00.816+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+540 dewPoint 露点 Output \N \N \N 2 \N \N ℃ 2017-12-20 10:35:00.819+08 2017-12-20 10:35:00.819+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+542 altitude 海拨 Output \N \N \N 0 \N \N m 2017-12-20 10:35:00.825+08 2017-12-20 10:35:00.825+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+543 windSpeed 风速 Output \N \N \N 1 \N \N m/s 2017-12-20 10:35:00.828+08 2017-12-20 10:35:00.828+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+544 windSpeed2mins 2分钟平均风速 Output \N \N \N 1 \N \N m/s 2017-12-20 10:35:00.831+08 2017-12-20 10:35:00.831+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+545 windSpeed10mins 10分钟平均风速 Output \N \N \N 1 \N \N m/s 2017-12-20 10:35:00.834+08 2017-12-20 10:35:00.834+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+546 windDirection 风向 Output \N \N \N 0 \N \N ° 2017-12-20 10:35:00.837+08 2017-12-20 10:35:00.837+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+547 radiation1 辐射1 Output \N \N \N 0 \N \N w/m² 2017-12-20 10:35:00.84+08 2017-12-20 10:35:00.84+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+548 radiation2 辐射2 Output \N \N \N 0 \N \N w/m² 2017-12-20 10:35:00.842+08 2017-12-20 10:35:00.842+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+549 groundHumidity 土湿 Output \N \N \N 1 \N \N %m³/m³ 2017-12-20 10:35:00.845+08 2017-12-20 10:35:00.845+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+550 voltage 电池电压 Output \N \N \N 1 \N \N V 2017-12-20 10:35:00.848+08 2017-12-20 10:35:00.848+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+551 rainfall 雨量日累计 Output \N \N \N 1 \N \N mm 2017-12-20 10:35:00.85+08 2017-12-20 10:35:00.85+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+562 temp 温度 Output \N \N \N 2 80 -20 ℃ 2017-12-20 15:18:57.35+08 2017-12-20 15:18:57.36+08 06d28e3e-8a80-4110-bf18-a06cadc13e9b 2 t f
+1958 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:26:31.203+08 2018-03-26 14:26:31.21+08 7c9f78f3-049b-4f4f-86ce-ed4945136111 2 t f
+1959 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 14:26:43.936+08 2018-03-26 14:26:43.944+08 21a71013-2a7f-46e0-8ced-77ada77b1342 2 t f
+1961 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 14:27:02.837+08 2018-03-26 14:27:02.86+08 21a71013-2a7f-46e0-8ced-77ada77b1342 2 t f
+1971 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:29:47.713+08 2018-03-26 14:29:47.74+08 921508aa-21fc-41c6-b609-b6df5206ea7b 2 t f
+1972 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 14:29:50.788+08 2018-03-26 14:29:50.793+08 f3879800-9585-4575-a261-25c1128fcaf9 2 t f
+1973 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:30:05.439+08 2018-03-26 14:30:05.45+08 8e3f282e-7428-497b-baa8-0ca8fd248e36 2 t f
+1975 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:31:47.871+08 2018-03-26 14:31:47.876+08 4f92b0e6-a618-4221-8c58-169247d88bd0 2 t f
+1976 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:32:17.862+08 2018-03-26 14:32:17.866+08 82a15a43-5463-4d67-88ea-0a816235bd70 2 t f
+1977 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:32:36.251+08 2018-03-26 14:32:36.256+08 4f92b0e6-a618-4221-8c58-169247d88bd0 2 t f
+1979 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 14:34:35.256+08 2018-03-26 14:34:35.264+08 f3879800-9585-4575-a261-25c1128fcaf9 2 t f
+1984 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:35:44.38+08 2018-03-26 14:35:44.387+08 614819ae-798a-406e-befe-fe6749ac5536 2 t f
+528 physicalvalue 温度 Output \N 2 ℃ 2017-12-19 17:53:23.347+08 2018-04-20 13:43:12.905+08 488ca4a1-e5d4-4905-ac99-a63bf4b4e98c 2 t f
+2363 anglex X轴角度 Output \N \N \N 2 \N \N ° 2018-06-27 16:44:55.256+08 2018-06-27 16:44:55.27+08 b4e49abe-4948-4f36-978f-8804c1531ca1 2 t f
+2366 flowsvelocity 瞬时流速 Output \N \N \N 4 \N \N m/s 2018-06-28 16:28:37.253+08 2018-06-28 16:28:37.258+08 419116d4-4614-4d66-bc30-ce2394eed251 2 t f
+552 visibility 能见度 Output \N \N \N 0 \N \N m 2017-12-20 10:35:00.853+08 2017-12-20 10:35:00.853+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+553 visibility10mins 能见度10分钟平均 Output \N \N \N 0 \N \N m 2017-12-20 10:35:01.136+08 2017-12-20 10:35:01.136+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+554 sunshine 日照时日累计 Output \N \N \N 0 \N \N mins 2017-12-20 10:35:01.141+08 2017-12-20 10:35:01.141+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+555 CO2 CO2 Output \N \N \N 1 \N \N ppm 2017-12-20 10:35:01.146+08 2017-12-20 10:35:01.146+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+556 eCompass 电子罗盘 Output \N \N \N 0 \N \N 2017-12-20 10:35:01.151+08 2017-12-20 10:35:01.151+08 851255ec-cf34-4e21-b95e-bcd0c6fe6a4b 2 t f
+557 concentration PM10 Output \N \N \N 2 2000 0 ug/m3 2017-12-20 13:53:13.308+08 2017-12-20 13:53:13.323+08 b55ffd52-9693-40dd-a732-e5271f0d5fb5 2 t f
+559 concentration SO2 Output \N \N \N 2 500 0 ppb 2017-12-20 14:04:53.349+08 2017-12-20 14:04:53.362+08 60ae0347-0874-4d6c-b39a-e0bc3fd616c9 2 t f
+436 value 沉降 Output \N 2 100 0 mm 2017-12-04 13:47:01.143+08 2017-12-20 14:34:31.775+08 06d28e3e-8a80-4110-bf18-a06cadc13e9b 2 t f
+560 value 沉降 Output \N 2 200 0 mm 2017-12-20 14:30:53.48+08 2017-12-20 14:34:41.891+08 f0e35d78-efe9-4656-ae6a-5116d547772f 2 t f
+563 concentration NO2 Output \N \N \N 2 500 0 ppb 2017-12-20 15:25:40.139+08 2017-12-20 15:25:40.149+08 5f58f358-39b7-4cf1-a4ad-c8b16d83a0b0 2 t f
+564 concentration O3 Output \N \N \N 2 500 0 ppb 2017-12-20 15:40:09.993+08 2017-12-20 15:40:10.007+08 f17f6e9c-827e-4dbe-b6d9-48937e2ca2b5 2 t f
+565 concentration 湿度 Output \N \N \N 2 100 0 %RH 2017-12-20 15:45:16.566+08 2017-12-20 15:45:16.578+08 b9dd081e-69bc-46c3-a372-d46269234b57 2 t f
+566 concentration VOC Output \N \N \N 2 20 0 ppm 2017-12-20 15:49:24.655+08 2017-12-20 15:49:24.66+08 1adc0b25-92ae-4d60-9c59-b001fc8b8120 2 t f
+1952 physicalvalue 应力 Output \N \N \N 4 0.8 0 MPa 2018-03-26 14:24:24.986+08 2018-03-26 14:24:24.995+08 5775692b-7acf-46f2-b924-d040fb8bd751 2 t f
+568 temp 温度 Output \N \N \N 2 85 -55 ℃ 2017-12-21 11:15:16.279+08 2017-12-21 11:15:16.279+08 ef29b89e-1964-40d7-b8c8-489d9562ce9d 2 t f
+488 distance 距离 Output \N 3 1000000 3000 mm 2017-12-08 15:40:39.209+08 2017-12-21 15:55:28.502+08 1bbadeee-62da-4062-bcf4-f0f18757aead 2 t f
+570 temp 温度 Output \N \N \N 2 70 -20 ℃ 2017-12-21 16:38:15.408+08 2017-12-21 16:38:15.42+08 b17563d4-fe75-4b40-9fb8-97fedae3abce 2 t f
+571 humid 湿度 Output \N \N \N 2 95 0 %RH 2017-12-21 16:38:44.686+08 2017-12-21 16:38:44.693+08 b17563d4-fe75-4b40-9fb8-97fedae3abce 2 t f
+1151 frequency 频率 Output \N 3 \N \N HZ 2018-01-08 11:06:18.397+08 2018-01-08 11:06:18.397+08 d0696649-4f35-48e3-b1da-79384789f28b 2 t f
+1341 formula 模拟量线性转换数字量公式 Constant \N \N y=(RH-RL)/(aH-aL)*(x-aL)+RL \N \N \N \N 2018-01-09 15:01:35.202+08 2018-01-09 15:01:35.202+08 84e943aa-b142-4142-89f4-5db0cc8e5233 5 t f
+1342 aL 模拟量下限 Constant \N \N 4 \N \N \N mA 2018-01-09 15:01:35.206+08 2018-01-09 15:01:35.206+08 84e943aa-b142-4142-89f4-5db0cc8e5233 1 t f
+579 strain 应变 Output \N \N \N 1 3000 -3000 με 2017-12-28 20:13:20.344+08 2017-12-28 20:13:20.344+08 02eb3150-86c4-4e4f-933e-9adadf378910 2 t f
+1377 anglex X轴角度 Output \N 3 5 -5 ° 2018-01-16 10:21:41.717+08 2018-03-29 10:22:57.883+08 7ef9f068-1ac5-4c5a-802a-3b3a1bb55191 2 t f
+1450 value 裂缝 Output \N \N \N 1 100 0 mm 2018-01-23 14:05:00.657+08 2018-01-23 14:05:00.657+08 c0392392-9da8-4232-8535-3962a4b88b7a 2 t f
+1343 aH 模拟量上限 Constant \N 20 0 \N \N mA 2018-01-09 15:01:35.21+08 2018-01-09 15:01:35.21+08 84e943aa-b142-4142-89f4-5db0cc8e5233 1 t f
+1344 RH 数字量上限 Constant \N 4 0 mm/min 2018-01-09 15:01:35.214+08 2018-01-09 15:25:33.297+08 84e943aa-b142-4142-89f4-5db0cc8e5233 1 t f
+1345 RL 数字量下限 Constant \N 0 0 mm/min 2018-01-09 15:01:35.218+08 2018-01-09 15:25:36.894+08 84e943aa-b142-4142-89f4-5db0cc8e5233 1 t f
+1340 phy 风速 Output \N 2 4 0 mm/min 2018-01-09 15:01:35.196+08 2018-01-09 15:30:42.039+08 84e943aa-b142-4142-89f4-5db0cc8e5233 2 t f
+587 phy 温度 Output \N 2 120 -30 ℃ 2018-01-02 17:33:10.091+08 2018-01-22 16:57:31.189+08 9c7d9db3-d6b5-46e5-a01e-af70a296bc8d 2 t f
+590 pressure 压力 Output \N \N \N 1 100 0.1 MPa 2018-01-03 16:19:19.152+08 2018-01-03 16:19:19.152+08 5a1c9521-1fea-46f6-82bd-3073923b164f 2 t f
+569 thickness 结冰厚度 Output \N 2 10 0 mm 2017-12-21 11:15:16.283+08 2018-01-03 20:10:20.83+08 ef29b89e-1964-40d7-b8c8-489d9562ce9d 2 t f
+1762 pressure 重力 Output \N 3 \N KN 2018-03-09 15:20:37.207+08 2018-05-21 15:39:09.809+08 83056ece-02bc-466a-a4c2-4b916ea6e41a 2 t f
+1956 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:25:31.397+08 2018-03-26 14:25:31.413+08 fdd4dd73-2235-45a2-98b3-c7838697717c 2 t f
+599 temperature 温度 Output \N 3 40 0 ℃ 2018-01-04 11:57:17.404+08 2018-01-04 14:08:37.466+08 161be263-2daf-4d9c-8a3e-5a5dfa458cf2 2 t f
+593 frequency 频率 Output \N \N \N 2 \N \N HZ 2018-01-04 11:21:08.714+08 2018-01-04 11:21:08.728+08 26034a4c-81b7-4470-a5e4-65494772f35b 2 t f
+595 physicalvalue 位移 Output \N 3 200 0 mm 2018-01-04 11:24:55.718+08 2018-03-22 14:22:02.826+08 26034a4c-81b7-4470-a5e4-65494772f35b 2 t f
+1988 frequency 频率 Output \N 4 2000 1000 Hz 2018-03-26 14:37:05.965+08 2019-08-12 11:00:29.163+08 43e14c1c-a425-4001-9886-f41df72945ea 2 t f
+491 elongationIndicator 裂缝 Output \N 2 2000 0 mm 2017-12-12 10:33:47.192+08 2020-07-14 17:02:01.401+08 8c9d6aac-81ca-48cb-b67c-6916c734bf63 2 t f
+597 frequency 频率 Output \N \N \N 3 \N HZ 2018-01-04 11:56:45.449+08 2018-01-04 11:56:45.466+08 161be263-2daf-4d9c-8a3e-5a5dfa458cf2 2 t f
+598 pressure 压强 Output \N \N \N 2 \N \N Kpa 2018-01-04 11:56:59.884+08 2018-01-04 11:56:59.884+08 f4542b67-c857-40a2-8aa7-11850aace3bd 2 t f
+594 temperature 温度 Output \N 2 60 -25 ℃ 2018-01-04 11:21:36.221+08 2018-01-04 14:09:29.112+08 26034a4c-81b7-4470-a5e4-65494772f35b 2 t f
+1758 temperature 温度 Output \N 3 \N \N ℃ 2018-03-08 20:21:34.565+08 2018-03-23 16:21:41.445+08 99a6c9c1-0f57-45bc-a1ff-e98a56faef46 2 t f
+600 physicalvalue 水压 Output \N 3 2500 0 kPa 2018-01-04 12:02:16.625+08 2018-03-23 11:37:49.491+08 161be263-2daf-4d9c-8a3e-5a5dfa458cf2 2 t f
+1957 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:26:12.892+08 2018-03-26 14:26:12.898+08 aca3e62f-b4ec-46cc-887a-563ce53b652a 2 t f
+1153 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-08 11:06:18.407+08 2018-03-28 23:09:16.557+08 d0696649-4f35-48e3-b1da-79384789f28b 2 t f
+1154 physicalvalue 位移 Output \N 3 200 0 mm 2018-01-08 11:06:18.411+08 2018-03-28 23:30:14.658+08 d0696649-4f35-48e3-b1da-79384789f28b 2 t f
+1378 angley Y轴角度 Output \N 3 5 -5 ° 2018-01-16 10:21:41.725+08 2018-03-29 10:23:02.855+08 7ef9f068-1ac5-4c5a-802a-3b3a1bb55191 2 t f
+1379 temperature 温度 Output \N 3 85 -40 ℃ 2018-01-16 10:21:41.731+08 2018-03-29 10:23:07.918+08 7ef9f068-1ac5-4c5a-802a-3b3a1bb55191 2 t f
+1048 level 沉降 Output \N 3 mm 2018-01-05 17:42:46.304+08 2018-01-10 11:19:39.872+08 ca59c7e9-eb74-4ab9-a98f-4604bfbf0b8c 2 t f
+1953 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:24:37.842+08 2018-03-26 14:24:37.847+08 fdd4dd73-2235-45a2-98b3-c7838697717c 2 t f
+1954 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:24:54.719+08 2018-03-26 14:24:54.726+08 ba74ef0e-3ec4-4203-9d65-17906c8f64d1 2 t f
+1963 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 14:27:26.759+08 2018-03-26 14:27:26.766+08 21a71013-2a7f-46e0-8ced-77ada77b1342 2 t f
+1176 phy 载荷 Output \N 3 1000 0 KN 2018-01-08 11:44:22.224+08 2018-01-08 11:44:22.224+08 0a8e8043-1c0a-48af-b8fd-68658e1b1b61 2 t f
+1993 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 14:38:52.831+08 2018-03-26 14:38:52.835+08 ea781b14-56d0-478f-991f-05c1ed5fdf93 2 t f
+1178 frequency 频率 Output \N 3 \N \N HZ 2018-01-08 11:44:22.233+08 2018-01-08 11:44:22.233+08 0a8e8043-1c0a-48af-b8fd-68658e1b1b61 2 t f
+1996 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:39:26.18+08 2018-03-26 14:39:26.186+08 363b62ae-2ccd-4c86-915d-03380bc9d89c 2 t f
+2001 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 14:45:38.97+08 2018-03-26 14:45:38.974+08 794d13af-907b-4165-bd7d-5c9d4e3410f4 2 t f
+1271 yDegree Y轴角度 Output \N 2 30 -30 ° 2018-01-08 17:10:41.664+08 2018-01-08 17:11:24.801+08 0d9f22e5-95c7-4e56-8963-6576d22b3209 2 t f
+1272 xDegree X轴角度 Output \N 2 30 -30 ° 2018-01-08 17:10:41.67+08 2018-01-08 17:11:31.439+08 0d9f22e5-95c7-4e56-8963-6576d22b3209 2 t f
+1269 yDegree Y轴角度 Output \N 3 30 -30 ° 2018-01-08 17:10:41.157+08 2018-01-08 17:12:18.685+08 893afc3d-9fb4-47f5-aa47-80e8321a052c 2 t f
+1270 xDegree X轴角度 Output \N 3 30 -30 ° 2018-01-08 17:10:41.162+08 2018-01-08 17:12:27.379+08 893afc3d-9fb4-47f5-aa47-80e8321a052c 2 t f
+1267 yDegree Y轴角度 Output \N 2 90 -90 ° 2018-01-08 17:10:40.676+08 2018-01-08 17:15:01.191+08 054f1a33-18e3-4476-a321-2a5482f783da 2 t f
+1268 xDegree X轴角度 Output \N 2 90 -90 ° 2018-01-08 17:10:40.682+08 2018-01-08 17:15:07.878+08 054f1a33-18e3-4476-a321-2a5482f783da 2 t f
+1273 phy 应变 Output \N 3 3000 0 με 2018-01-08 17:19:40.384+08 2018-01-08 17:19:40.384+08 9ea4750b-b3f2-4d2b-a190-8ac310bec295 2 t f
+1275 frequency 频率 Output \N 3 \N \N HZ 2018-01-08 17:19:40.394+08 2018-01-08 17:19:40.394+08 9ea4750b-b3f2-4d2b-a190-8ac310bec295 2 t f
+2002 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 14:45:58.282+08 2018-03-26 14:45:58.288+08 794d13af-907b-4165-bd7d-5c9d4e3410f4 2 t f
+2003 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 14:46:20.625+08 2018-03-26 14:46:20.63+08 794d13af-907b-4165-bd7d-5c9d4e3410f4 2 t f
+1393 anglex X轴角度 Output \N 3 60 -60 ° 2018-01-16 10:34:03.988+08 2018-03-29 10:25:28.91+08 efab5ad9-0126-4a8f-a0b1-35e21e77c0f1 2 t f
+1394 angley Y轴角度 Output \N 3 60 -60 ° 2018-01-16 10:34:03.992+08 2018-03-29 10:25:38.784+08 efab5ad9-0126-4a8f-a0b1-35e21e77c0f1 2 t f
+1396 anglex X轴角度 Output \N 3 90 -90 ° 2018-01-16 10:34:04.399+08 2018-03-29 10:26:17.919+08 9cbbc8b3-67dd-400f-95c4-31f2f9814062 2 t f
+1399 anglex X轴角度 Output \N 3 5 -5 ° 2018-01-16 11:50:37.242+08 2018-03-29 10:26:35.266+08 79df301c-8707-4e42-8546-2b6a77f017f8 2 t f
+1398 temperature 温度 Output \N 3 85 -40 ℃ 2018-01-16 11:50:37.237+08 2018-03-29 10:26:40.275+08 79df301c-8707-4e42-8546-2b6a77f017f8 2 t f
+2182 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 13:53:35.944+08 2018-04-16 13:53:35.95+08 64cbf359-5e92-46a5-ac77-4ba6566e6539 2 t f
+2193 am 幅值 Output \N \N \N 3 \N \N mv 2018-04-16 15:46:07.729+08 2018-04-16 15:46:07.729+08 c76c28b1-6041-44be-9ce9-39728d5de7c6 2 t f
+1402 temperature 温度 Output \N 3 60 -25 ℃ 2018-01-17 17:52:43.808+08 2018-01-17 17:52:43.808+08 a84db97e-114a-4cbe-8e97-a18f398857a7 2 t f
+1403 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-01-17 17:52:43.812+08 2018-01-17 17:52:43.812+08 a84db97e-114a-4cbe-8e97-a18f398857a7 2 t f
+2005 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 15:02:45.747+08 2018-03-26 15:02:45.758+08 c77f3d16-3577-4f09-9c32-cc99cbb68966 2 t f
+1677 temp 温度 Output \N \N \N 2 \N \N ℃ 2018-02-07 09:51:05.095+08 2018-02-07 09:51:05.103+08 511b86b5-3773-45aa-b518-9b29071357e1 2 t f
+1175 temperature 温度 Output \N 2 60 -10 ℃ 2018-01-08 11:44:22.161+08 2018-03-12 09:43:21.234+08 0a8e8043-1c0a-48af-b8fd-68658e1b1b61 2 t f
+1836 wavelength 波长 Output \N \N \N 9 9999999 -9999999 \N 2018-03-21 09:55:26.759+08 2018-03-21 09:55:26.766+08 eaa55b41-7d6a-48d3-8600-2b52eaad59a4 2 t f
+1404 physicalvalue 应变 Output \N 3 4000 -4000 με 2018-01-17 17:52:43.815+08 2018-03-23 11:37:11.446+08 a84db97e-114a-4cbe-8e97-a18f398857a7 2 t f
+1760 physicalvalue 微应变 Output \N 4 5000 -5000 με 2018-03-08 20:23:00.151+08 2018-03-23 16:21:32.94+08 99a6c9c1-0f57-45bc-a1ff-e98a56faef46 2 t f
+2011 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 15:10:13.192+08 2018-03-26 15:10:13.198+08 15598365-4401-4d31-9ebe-d0e46f6d4ce5 2 t f
+2013 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 15:14:21.759+08 2018-03-26 15:14:21.765+08 153dac9d-f2e3-4e56-8402-86df0c0ae5d9 2 t f
+2014 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 15:14:42.863+08 2018-03-26 15:14:42.869+08 153dac9d-f2e3-4e56-8402-86df0c0ae5d9 2 t f
+2027 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 15:28:42.703+08 2018-03-26 15:28:42.711+08 79fa3616-07da-47da-a26c-0faac333d89d 2 t f
+2030 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 15:37:06.115+08 2018-03-26 15:37:06.121+08 5c6f4070-1acc-4ac2-91d6-b7420f02a37b 2 t f
+1389 temperature 温度 Output \N 3 85 -40 ℃ 2018-01-16 10:34:03.654+08 2018-03-29 10:24:58.414+08 9a5459f7-7499-41f5-87d2-e55b430a9134 2 t f
+1390 anglex X轴角度 Output \N 3 30 -30 ° 2018-01-16 10:34:03.658+08 2018-03-29 10:25:03.653+08 9a5459f7-7499-41f5-87d2-e55b430a9134 2 t f
+1391 angley Y轴角度 Output \N 3 30 -30 ° 2018-01-16 10:34:03.662+08 2018-03-29 10:25:08.065+08 9a5459f7-7499-41f5-87d2-e55b430a9134 2 t f
+1392 temperature 温度 Output \N 3 85 -40 ℃ 2018-01-16 10:34:03.984+08 2018-03-29 10:25:24.156+08 efab5ad9-0126-4a8f-a0b1-35e21e77c0f1 2 t f
+1395 temperature 温度 Output \N 3 85 -40 ℃ 2018-01-16 10:34:04.393+08 2018-03-29 10:26:08.211+08 9cbbc8b3-67dd-400f-95c4-31f2f9814062 2 t f
+2016 physicalvalue 荷载 Output \N 4 kN 2018-03-26 15:15:54.772+08 2021-03-02 14:00:04.746+08 153dac9d-f2e3-4e56-8402-86df0c0ae5d9 2 t f
+1397 angley Y轴角度 Output \N 3 90 -90 ° 2018-01-16 10:34:04.402+08 2018-03-29 10:26:13.095+08 9cbbc8b3-67dd-400f-95c4-31f2f9814062 2 t f
+1400 angley Y轴角度 Output \N 3 5 -5 ° 2018-01-16 11:50:37.245+08 2018-03-29 10:26:44.675+08 79df301c-8707-4e42-8546-2b6a77f017f8 2 t f
+2194 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 15:46:07.734+08 2018-04-16 15:46:07.734+08 c76c28b1-6041-44be-9ce9-39728d5de7c6 2 t f
+2196 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-04-16 15:46:07.74+08 2018-04-16 15:46:07.74+08 c76c28b1-6041-44be-9ce9-39728d5de7c6 2 t f
+2197 am 幅值 Output \N \N \N 3 \N \N mv 2018-04-16 15:46:07.749+08 2018-04-16 15:46:07.749+08 b4f14b5d-82f1-4ea1-b10f-3e38e552168c 2 t f
+2198 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 15:46:07.752+08 2018-04-16 15:46:07.752+08 b4f14b5d-82f1-4ea1-b10f-3e38e552168c 2 t f
+2275 f 应变 Output \N \N \N 6 \N \N \N 2018-05-10 17:53:00.785+08 2018-05-10 17:53:00.785+08 60f374db-1336-4bb2-8dda-311955dca706 2 t f
+2195 physicalvalue 轴力 Output \N 4 2000 -2000 kN 2018-04-16 15:46:07.737+08 2018-04-16 15:47:23.903+08 c76c28b1-6041-44be-9ce9-39728d5de7c6 2 t f
+1955 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:25:14.862+08 2018-03-26 14:25:14.866+08 ba74ef0e-3ec4-4203-9d65-17906c8f64d1 2 t f
+614 temperature 温度 Output \N 3 60 -25 ℃ 2018-01-04 12:16:47.118+08 2018-01-04 14:07:15.52+08 58ccd139-9573-44ce-84f3-b043e0841c7a 2 t f
+1960 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:26:51.698+08 2018-03-26 14:26:51.704+08 7c9f78f3-049b-4f4f-86ce-ed4945136111 2 t f
+1967 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:28:22.868+08 2018-03-26 14:28:22.876+08 e4c071d1-afb9-4178-923b-18a37265ca86 2 t f
+1969 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:29:07.896+08 2018-03-26 14:29:07.901+08 8e3f282e-7428-497b-baa8-0ca8fd248e36 2 t f
+1040 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 16:34:08.81+08 2018-01-05 16:34:08.81+08 e087d664-23b6-4a21-b166-ac37688c0ec0 2 t f
+1043 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 16:34:09.777+08 2018-01-05 16:34:09.777+08 e82e8948-89ce-4dd5-89dd-1a3d319d351d 2 t f
+1042 temperature 温度 Output \N 2 ℃ 2018-01-05 16:34:09.773+08 2018-01-05 16:35:28.527+08 e82e8948-89ce-4dd5-89dd-1a3d319d351d 2 t f
+1039 temperature 温度 Output \N 2 ℃ 2018-01-05 16:34:08.805+08 2018-01-05 16:35:37.561+08 e087d664-23b6-4a21-b166-ac37688c0ec0 2 t f
+1621 temperature 温度 Output \N 2 \N \N ℃ 2018-01-24 11:32:24.999+08 2018-03-23 15:37:46.577+08 6fbdae8b-7c5b-4125-8df3-4d9bef10997a 2 t f
+1183 熟悉002 \N Variable \N \N \N \N \N \N 2018-01-08 12:02:17.341+08 2018-01-08 12:02:17.341+08 06fcfe9a-4b1a-4db0-897b-05746cda4814 5 t f
+1347 cpuRate cpu使用率 Variable \N \N \N \N \N % 2018-01-09 17:04:48.356+08 2018-01-09 17:04:48.364+08 d3a626a7-97a1-434d-a4ca-4a939af207b9 5 t f
+1401 3 3 Variable \N \N \N \N \N \N 2018-01-17 13:45:21.843+08 2018-01-17 13:45:21.843+08 cb86448f-61c6-408f-9e5f-06ba94979fdd 5 t f
+1970 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:29:24.082+08 2018-03-26 14:29:24.092+08 921508aa-21fc-41c6-b609-b6df5206ea7b 2 t f
+1281 phy 沉降 Output \N 3 1000 0 mm 2018-01-08 17:33:37.635+08 2018-01-08 17:35:15.571+08 f846e46e-f9f4-4c0f-b697-4f3fc7d64f25 2 t f
+1282 phy 液位 Output \N 3 100 0 m 2018-01-08 17:35:44.861+08 2018-01-08 17:39:57.22+08 f0df6373-949a-4e30-b883-f49611315df1 2 t f
+1974 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:30:31.657+08 2018-03-26 14:30:31.663+08 82a15a43-5463-4d67-88ea-0a816235bd70 2 t f
+1283 temp 温度 Output \N 2 120 -40 ℃ 2018-01-08 17:48:20.629+08 2018-01-08 18:05:35.337+08 d6464eff-41e6-49fb-a8f9-7ebbe2e297e0 2 t f
+1300 voltage 电压 Output \N \N \N 3 \N \N V 2018-01-08 19:28:51.352+08 2018-01-08 19:28:51.352+08 be68ca54-6bb8-4d57-8db7-6acdaa05c876 2 t f
+1302 stemp 传感器温度 Output \N 2 \N \N ℃ 2018-01-08 19:28:51.362+08 2018-01-08 19:28:51.362+08 be68ca54-6bb8-4d57-8db7-6acdaa05c876 2 t f
+1303 ctemp 采集仪温度 Output \N \N \N 2 \N \N ℃ 2018-01-08 19:28:51.366+08 2018-01-08 19:28:51.366+08 be68ca54-6bb8-4d57-8db7-6acdaa05c876 2 t f
+1301 cableforce 索力 Output \N 3 \N \N KN 2018-01-08 19:28:51.358+08 2018-10-08 14:43:49.012+08 be68ca54-6bb8-4d57-8db7-6acdaa05c876 2 t f
+1539 physicalvalue 水压 Output \N 4 2 0 MPa 2018-01-23 14:57:48.804+08 2018-03-23 15:43:22.701+08 10deb250-d676-4883-bfb1-2f557ec84677 2 t f
+1533 temperature 温度 Output \N 2 \N \N ℃ 2018-01-23 14:57:48.764+08 2018-03-23 15:43:32.826+08 10deb250-d676-4883-bfb1-2f557ec84677 2 t f
+1978 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 14:34:08.418+08 2018-03-26 14:34:08.422+08 f3879800-9585-4575-a261-25c1128fcaf9 2 t f
+1044 physicalvalue 应变 Output \N 3 \N \N MPa 2018-01-05 16:34:09.781+08 2018-03-23 14:08:43.486+08 e82e8948-89ce-4dd5-89dd-1a3d319d351d 2 t f
+1041 physicalvalue 应变 Output \N 3 \N \N με 2018-01-05 16:34:08.814+08 2018-03-23 14:08:51.556+08 e087d664-23b6-4a21-b166-ac37688c0ec0 2 t f
+1638 temperature 温度 Output \N 2 \N \N ℃ 2018-01-24 11:34:49.477+08 2018-03-23 15:36:56.543+08 b28ce81b-55a8-4e81-a4da-5a5b9d89ef29 2 t f
+1639 physicalvalue 位移 Output \N 4 50 0 mm 2018-01-24 11:34:49.481+08 2018-03-23 15:37:04.727+08 b28ce81b-55a8-4e81-a4da-5a5b9d89ef29 2 t f
+1986 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:36:31.868+08 2018-03-26 14:36:31.874+08 053f72a5-5576-48de-baa6-a2732ff863cc 2 t f
+1990 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:38:09.499+08 2018-03-26 14:38:09.504+08 f75af319-b305-463e-a3dc-78df902b61ef 2 t f
+1991 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:38:30.083+08 2018-03-26 14:38:30.089+08 f75af319-b305-463e-a3dc-78df902b61ef 2 t f
+1992 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:38:46.454+08 2018-03-26 14:38:46.461+08 6c75e8aa-7e92-4611-8962-1c79a7ba9ef2 2 t f
+1995 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 14:39:14.253+08 2018-03-26 14:39:14.259+08 ea781b14-56d0-478f-991f-05c1ed5fdf93 2 t f
+2015 am 温度 Output \N \N \N 3 \N \N mv 2018-03-26 15:15:27.87+08 2018-03-26 15:15:27.879+08 153dac9d-f2e3-4e56-8402-86df0c0ae5d9 2 t f
+2023 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 15:23:58.666+08 2018-03-26 15:23:58.673+08 b3e8b1eb-5d72-4bda-875a-d83d7c593dfe 2 t f
+1604 pressure 压强 Output \N 4 1 0 MPa 2018-01-24 11:18:54.123+08 2018-02-02 15:42:14.849+08 010ebb8f-5154-406a-a14c-cf57be327ecf 2 t f
+1532 frequency 频率 Output \N 3 \N \N Hz 2018-01-23 14:57:48.756+08 2018-03-02 15:02:47.118+08 10deb250-d676-4883-bfb1-2f557ec84677 2 t f
+1618 frequency 频率 Output \N 3 \N \N Hz 2018-01-24 11:32:24.989+08 2018-03-02 15:21:07.562+08 6fbdae8b-7c5b-4125-8df3-4d9bef10997a 2 t f
+2025 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 15:28:07.874+08 2018-03-26 15:28:07.88+08 79fa3616-07da-47da-a26c-0faac333d89d 2 t f
+1625 physicalvalue 沉降 Output \N 3 200 0 mm 2018-01-24 11:32:25.01+08 2018-03-26 16:54:15.212+08 6fbdae8b-7c5b-4125-8df3-4d9bef10997a 2 t f
+1591 humidity 湿度 Output \N 1 95 5 %RH 2018-01-23 17:19:51.377+08 2018-03-30 08:15:13.878+08 9f562e54-5c03-4b59-89cf-d12739821be5 2 t f
+2183 physicalvalue 轴力 Output \N \N \N 4 1000 -1000 kN 2018-04-16 13:54:06.827+08 2018-04-16 13:54:06.841+08 64cbf359-5e92-46a5-ac77-4ba6566e6539 2 t f
+2184 temperature 温度 Output \N \N \N 3 \N \N ℃ 2018-04-16 13:54:58.453+08 2018-04-16 13:54:58.461+08 64cbf359-5e92-46a5-ac77-4ba6566e6539 2 t f
+2225 am 幅值 Output \N \N \N 3 \N \N mv 2018-04-16 16:00:54.782+08 2018-04-16 16:00:54.782+08 ad6a8655-acd4-4092-ac47-6d7e96cdb2a2 2 t f
+1507 physicalvalue 荷载 Output \N 4 kN 2018-01-23 14:53:15.205+08 2021-03-02 13:44:56.852+08 cbc0a4f0-8c2c-4215-9210-4f81c6de6fd9 2 t f
+1451 value 压力 Output \N 1 Kpa 2018-01-23 14:10:45.514+08 2020-11-11 17:22:43.819+08 986f4655-aea5-4e28-8507-f17ce74073cb 2 t f
+2226 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 16:00:54.785+08 2018-04-16 16:00:54.785+08 ad6a8655-acd4-4092-ac47-6d7e96cdb2a2 2 t f
+2227 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-04-16 16:00:54.787+08 2018-04-16 16:00:54.787+08 ad6a8655-acd4-4092-ac47-6d7e96cdb2a2 2 t f
+2229 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 16:00:54.796+08 2018-04-16 16:00:54.796+08 81b14e1d-4d14-4741-b581-31e3c543a0f9 2 t f
+1348 phy1 CO2浓度 Output \N 3 300000 0 ppm 2018-01-09 17:40:39.784+08 2018-01-10 16:50:20.906+08 4211c278-30f5-4c53-ad81-d296e391b8db 2 t f
+1032 anglex X轴角度 Output \N 2 30 -30 ° 2018-01-05 16:28:13.404+08 2018-03-23 17:52:06.809+08 e05b776c-d411-49c1-9775-9c02bf5dd41f 2 t f
+1962 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:27:07.863+08 2018-03-26 14:27:07.867+08 aca3e62f-b4ec-46cc-887a-563ce53b652a 2 t f
+1964 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:27:43.028+08 2018-03-26 14:27:43.035+08 bc373436-023b-41d4-9608-6a33bb926e80 2 t f
+1966 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:28:00.038+08 2018-03-26 14:28:00.042+08 e4c071d1-afb9-4178-923b-18a37265ca86 2 t f
+1968 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:28:41.493+08 2018-03-26 14:28:41.503+08 bc373436-023b-41d4-9608-6a33bb926e80 2 t f
+1184 oid oid Constant \N \N 0.1.2.32.0 \N \N \N \N 2018-01-08 13:36:45.759+08 2018-01-08 13:36:45.759+08 0c0a3e16-95cf-42da-8d6c-09d28a68415d 5 t f
+1185 值 值 Output \N \N \N 2 \N \N 2018-01-08 13:36:45.765+08 2018-01-08 13:36:45.765+08 0c0a3e16-95cf-42da-8d6c-09d28a68415d 2 t f
+1186 输入变量1 输入变量1 Variable \N 1,2,3,4 2 \N \N \N 2018-01-08 13:36:45.776+08 2018-01-08 13:36:45.776+08 28cd8b3b-ce84-4ece-b281-9c46bbac045c 4 t f
+1187 输入变量2 变量2 Variable \N \N true \N \N \N 2018-01-08 13:36:46.054+08 2018-01-08 13:36:46.054+08 28cd8b3b-ce84-4ece-b281-9c46bbac045c 3 t f
+1188 输出结果 输出结果 Output \N \N \N \N \N \N 数据结果json 2018-01-08 13:36:46.06+08 2018-01-08 13:36:46.06+08 28cd8b3b-ce84-4ece-b281-9c46bbac045c 5 t f
+1573 temperature 温度 Output \N 2 \N \N ℃ 2018-01-23 15:00:13.322+08 2018-03-23 15:39:50.357+08 3d52b0e5-39ac-4e19-99b4-7bd96b15888a 2 t f
+1579 physicalvalue 水压 Output \N 4 0.2 0 MPa 2018-01-23 15:00:13.368+08 2018-03-23 15:39:57.856+08 3d52b0e5-39ac-4e19-99b4-7bd96b15888a 2 t f
+1284 humi 湿度 Output \N 2 100 0 % 2018-01-08 17:48:47.288+08 2018-01-08 18:05:18.36+08 d6464eff-41e6-49fb-a8f9-7ebbe2e297e0 2 t f
+1571 physicalvalue 水压 Output \N 4 0.4 0 MPa 2018-01-23 15:00:12.73+08 2018-03-23 15:40:16.542+08 028d4dfc-6b2c-40e4-9960-97c813408030 2 t f
+1565 temperature 温度 Output \N 2 \N \N ℃ 2018-01-23 15:00:12.716+08 2018-03-23 15:40:22.561+08 028d4dfc-6b2c-40e4-9960-97c813408030 2 t f
+1557 temperature 温度 Output \N 2 \N \N ℃ 2018-01-23 15:00:12.515+08 2018-03-23 15:40:35.739+08 2db014d8-3273-467f-b938-8e6b9c22031e 2 t f
+1563 physicalvalue 水压 Output \N 4 0.6 0 MPa 2018-01-23 15:00:12.538+08 2018-03-23 15:40:43.732+08 2db014d8-3273-467f-b938-8e6b9c22031e 2 t f
+1547 physicalvalue 水压 Output \N 4 1 0 MPa 2018-01-23 15:00:11.26+08 2018-03-23 15:43:06.895+08 d36bb0ee-6c5c-4778-bc5b-5e03db483152 2 t f
+51 humidity 湿度 Output \N 2 100 0 %RH 2017-08-26 15:51:32.557+08 2018-03-23 16:01:17.657+08 aa48a11a-b276-4670-bc85-8c69368a7def 2 t f
+1037 humidity 湿度 Output \N 2 100 0 %RH 2018-01-05 16:29:20.584+08 2018-03-23 17:03:42.591+08 2fa52a8c-6ff8-4131-b74d-761173132a03 2 t f
+1038 temperature 温度 Output \N 2 120 -40 ℃ 2018-01-05 16:29:20.589+08 2018-03-23 17:04:01.588+08 2fa52a8c-6ff8-4131-b74d-761173132a03 2 t f
+1033 temperature 温度 Output \N 2 70 -25 ℃ 2018-01-05 16:28:13.409+08 2018-03-23 17:52:16.163+08 e05b776c-d411-49c1-9775-9c02bf5dd41f 2 t f
+1034 angley Y轴角度 Output \N 2 30 -30 ° 2018-01-05 16:28:13.414+08 2018-03-23 17:52:35.728+08 e05b776c-d411-49c1-9775-9c02bf5dd41f 2 t f
+1029 temperature 温度 Output \N 2 70 -25 ℃ 2018-01-05 16:27:59.076+08 2018-03-23 17:58:04.248+08 824dfcd1-4745-4087-aa8e-237d72715c4d 2 t f
+1030 anglex X轴角度 Output \N 2 30 -30 ° 2018-01-05 16:27:59.081+08 2018-03-23 17:58:16.622+08 824dfcd1-4745-4087-aa8e-237d72715c4d 2 t f
+1031 angley Y轴角度 Output \N 2 30 -30 ° 2018-01-05 16:27:59.086+08 2018-03-23 17:58:22.779+08 824dfcd1-4745-4087-aa8e-237d72715c4d 2 t f
+1027 physicalvalue 应变 Output \N 4 1500 -1500 με 2018-01-05 16:26:30.116+08 2018-03-26 10:52:18.614+08 7721177a-8610-4836-82c5-d08d05a6be97 2 t f
+1980 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:34:43.84+08 2018-03-26 14:34:43.847+08 614819ae-798a-406e-befe-fe6749ac5536 2 t f
+1981 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:35:01.571+08 2018-03-26 14:35:01.58+08 f4d2673b-f6ac-4be7-9068-95a68442426e 2 t f
+2004 physicalvalue 轴力 Output \N \N \N 4 2000 -2000 KN 2018-03-26 14:46:55.18+08 2018-03-26 14:46:55.187+08 794d13af-907b-4165-bd7d-5c9d4e3410f4 2 t f
+2010 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 15:09:55.285+08 2018-03-26 15:09:55.292+08 15598365-4401-4d31-9ebe-d0e46f6d4ce5 2 t f
+2018 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 15:18:24.55+08 2018-03-26 15:18:24.561+08 88e6acfa-2714-4821-9ff8-c5d96a23ce68 2 t f
+2022 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 15:23:13.32+08 2018-03-26 15:23:13.329+08 b3e8b1eb-5d72-4bda-875a-d83d7c593dfe 2 t f
+615 physicalvalue 应力 Output \N 3 500 0 kN 2018-01-04 12:18:28.773+08 2018-12-28 15:38:02.316+08 58ccd139-9573-44ce-84f3-b043e0841c7a 2 t f
+2031 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 15:37:21.581+08 2018-03-26 15:37:21.59+08 5c6f4070-1acc-4ac2-91d6-b7420f02a37b 2 t f
+1572 frequency 频率 Output \N 3 \N \N Hz 2018-01-23 15:00:13.318+08 2018-03-02 14:49:52.099+08 3d52b0e5-39ac-4e19-99b4-7bd96b15888a 2 t f
+2201 am 幅值 Output \N \N \N 3 \N \N mv 2018-04-16 15:46:07.885+08 2018-04-16 15:46:07.885+08 3a873f72-4f94-4141-94f5-023d34b61d1f 2 t f
+1564 frequency 频率 Output \N 3 \N \N Hz 2018-01-23 15:00:12.714+08 2018-03-02 14:51:35.155+08 028d4dfc-6b2c-40e4-9960-97c813408030 2 t f
+167 rainfall 雨量 Output \N 1 mm/h 2017-09-12 17:44:48.577+08 2018-04-03 09:23:21.8+08 b71b35e9-7756-46e1-84c8-d8c092029638 2 t f
+1556 frequency 频率 Output \N 3 \N \N Hz 2018-01-23 15:00:12.512+08 2018-03-02 14:55:42.21+08 2db014d8-3273-467f-b938-8e6b9c22031e 2 t f
+2202 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 15:46:07.889+08 2018-04-16 15:46:07.889+08 3a873f72-4f94-4141-94f5-023d34b61d1f 2 t f
+2118 pmstandard 标况pm10 Output \N 3 \N \N ug/m³ 2018-04-03 11:42:35.781+08 2018-04-19 13:40:44.089+08 ca247144-4f2b-40e9-a2a9-de78942565e5 2 t f
+2200 temperature 温度 Output \N \N \N 3 \N \N ℃ 2018-04-16 15:46:07.759+08 2018-04-16 15:46:07.759+08 b4f14b5d-82f1-4ea1-b10f-3e38e552168c 2 t f
+2204 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-04-16 15:46:07.896+08 2018-04-16 15:46:07.896+08 3a873f72-4f94-4141-94f5-023d34b61d1f 2 t f
+2205 am 幅值 Output \N \N \N 3 \N \N mv 2018-04-16 15:46:07.904+08 2018-04-16 15:46:07.904+08 a5c1d727-4820-4d7b-b758-dea1af104b33 2 t f
+2206 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 15:46:07.907+08 2018-04-16 15:46:07.907+08 a5c1d727-4820-4d7b-b758-dea1af104b33 2 t f
+2208 temperature 温度 Output \N \N \N 3 \N \N ℃ 2018-04-16 15:46:07.914+08 2018-04-16 15:46:07.914+08 a5c1d727-4820-4d7b-b758-dea1af104b33 2 t f
+2203 physicalvalue 轴力 Output \N 4 3000 -3000 kN 2018-04-16 15:46:07.892+08 2018-04-16 15:49:27.602+08 3a873f72-4f94-4141-94f5-023d34b61d1f 2 t f
+2207 physicalvalue 轴力 Output \N 4 3000 -3000 kN 2018-04-16 15:46:07.911+08 2018-04-16 15:49:38.727+08 a5c1d727-4820-4d7b-b758-dea1af104b33 2 t f
+1768 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-13 23:14:49.152+08 2018-03-13 23:14:49.16+08 0d251d94-b1b6-4772-8066-2ae317277574 2 t f
+664 changedx X轴位移 Output \N 3 \N \N mm 2018-01-05 11:06:57.953+08 2018-03-29 15:13:50.269+08 2766d297-6127-449f-b73f-089b38e01267 2 t f
+1349 phy1 风速 Output \N \N \N 2 30 0 m/s 2018-01-09 17:53:52.131+08 2018-01-09 17:53:52.138+08 d3ea47f8-1472-484d-a6fc-411e6637a71b 2 t f
+1773 analog 模拟量 Output \N 3 \N \N mA 2018-03-14 08:24:49.343+08 2018-03-14 08:24:49.343+08 19db0824-d40d-49ce-a3e8-b63510dcbb7a 2 t f
+639 physicalvlaue 沉降 Output \N 3 mm 2018-01-04 12:28:18.024+08 2018-06-07 13:37:52.232+08 d6b914e8-a4e6-443c-a9f4-7fb5eb5148be 2 t f
+668 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-05 11:06:58.808+08 2018-03-22 09:31:40.096+08 2f00a22f-2cdc-46e5-94b8-a4c599c0618d 2 t f
+646 physicalvalue 应变 Output \N 3 4000 0 με 2018-01-04 13:52:09.885+08 2018-03-22 14:21:52.491+08 a2e1b758-5210-49f0-986e-78305b6cef20 2 t f
+1036 temperature 温度 Output \N 2 120 -40 ℃ 2018-01-05 16:29:05.838+08 2018-03-23 15:36:19.476+08 26976155-0f82-42c9-962d-6d8f206f40d1 2 t f
+1473 am 幅值 Output \N 3 mv 2018-01-23 14:46:19.201+08 2018-03-02 14:11:05.85+08 f1ab939a-33ee-4a01-8373-13c941cbce03 2 t f
+1465 am 幅值 Output \N 3 mv 2018-01-23 14:46:19.002+08 2018-03-02 14:12:08.374+08 3436c379-cac3-4baf-8a3f-7fa4b1fe6188 2 t f
+665 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-05 11:06:58.402+08 2018-03-22 09:32:09.166+08 57f3c9e5-43c5-42ce-92e4-a67bf6f28452 2 t f
+644 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-01-04 13:49:27.785+08 2018-01-04 13:49:27.801+08 a2e1b758-5210-49f0-986e-78305b6cef20 2 t f
+645 temperature 温度 Output \N \N \N 3 60 -25 ℃ 2018-01-04 13:50:07.608+08 2018-01-04 13:50:07.613+08 a2e1b758-5210-49f0-986e-78305b6cef20 2 t f
+657 physicalvalue 应变 Output \N 3 3000 0 με 2018-01-05 10:51:34.761+08 2018-03-23 11:00:57.115+08 9c9bf6ea-e390-4af6-9eb7-64fdd8325887 2 t f
+647 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-01-04 14:02:41.795+08 2018-01-04 14:02:41.803+08 cd26103f-0538-43bd-9bbd-a8b3b84e10ff 2 t f
+1297 cableforce 索力 Output \N 3 \N \N KN 2018-01-08 19:23:48.7+08 2018-10-08 14:43:32.107+08 978ae9f7-08b3-4e87-add1-abccd6d759d0 2 t f
+648 temperature 温度 Output \N 3 90 -30 ℃ 2018-01-04 14:04:03.979+08 2018-01-04 14:05:57.819+08 cd26103f-0538-43bd-9bbd-a8b3b84e10ff 2 t f
+656 temperature 温度 Output \N 2 \N \N ℃ 2018-01-05 10:51:34.755+08 2018-03-21 14:10:01.937+08 9c9bf6ea-e390-4af6-9eb7-64fdd8325887 2 t f
+672 physicalvalue 应变 Output \N 3 50000 0 με 2018-01-05 11:07:00.028+08 2018-03-23 11:04:18.473+08 9b2fd7d2-690b-4c40-a7f9-a52bdf8c1735 2 t f
+658 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 10:51:34.767+08 2018-01-05 10:51:34.767+08 9c9bf6ea-e390-4af6-9eb7-64fdd8325887 2 t f
+675 physicalvalue 裂缝 Output \N 3 250 0 mm 2018-01-05 11:07:00.15+08 2018-03-23 11:04:29.953+08 11c69c81-4c8e-49c2-bde6-92d68c3d8092 2 t f
+666 physicalvalue 应变 Output \N 3 2500 0 με 2018-01-05 11:06:58.407+08 2018-03-23 11:14:57.315+08 57f3c9e5-43c5-42ce-92e4-a67bf6f28452 2 t f
+669 physicalvalue 应变 Output \N 3 2500 0 με 2018-01-05 11:06:58.812+08 2018-03-23 11:15:07.505+08 2f00a22f-2cdc-46e5-94b8-a4c599c0618d 2 t f
+1295 ctemp 采集仪温度 Output \N \N \N 2 \N \N ℃ 2018-01-08 19:23:48.689+08 2018-01-08 19:23:48.689+08 978ae9f7-08b3-4e87-add1-abccd6d759d0 2 t f
+667 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 11:06:58.411+08 2018-01-05 11:06:58.411+08 57f3c9e5-43c5-42ce-92e4-a67bf6f28452 2 t f
+670 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 11:06:58.817+08 2018-01-05 11:06:58.817+08 2f00a22f-2cdc-46e5-94b8-a4c599c0618d 2 t f
+673 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 11:07:00.03+08 2018-01-05 11:07:00.03+08 9b2fd7d2-690b-4c40-a7f9-a52bdf8c1735 2 t f
+663 anglex X轴角度 Output \N 3 10 -10 ° 2018-01-05 11:06:57.948+08 2018-03-29 15:14:02.885+08 2766d297-6127-449f-b73f-089b38e01267 2 t f
+1035 humidity 湿度 Output \N 2 100 0 %RH 2018-01-05 16:29:05.833+08 2018-03-23 15:36:27.2+08 26976155-0f82-42c9-962d-6d8f206f40d1 2 t f
+1474 temperature 温度 Output \N \N \N \N ℃ 2018-01-23 14:46:19.203+08 2018-03-23 15:48:26.542+08 f1ab939a-33ee-4a01-8373-13c941cbce03 2 t f
+1467 frequency 频率 Output \N 3 \N \N Hz 2018-01-23 14:46:19.007+08 2018-03-26 14:40:35.73+08 3436c379-cac3-4baf-8a3f-7fa4b1fe6188 2 t f
+1464 physicalvalue 轴力 Output \N 4 1000 -1000 kN 2018-01-23 14:46:19+08 2018-03-23 15:49:04.22+08 3436c379-cac3-4baf-8a3f-7fa4b1fe6188 2 t f
+671 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-05 11:07:00.026+08 2018-01-05 11:24:57.428+08 9b2fd7d2-690b-4c40-a7f9-a52bdf8c1735 2 t f
+1837 temperature 温度 Output \N \N \N 2 70 -25 ℃ 2018-03-23 16:17:52.535+08 2018-03-23 16:17:52.541+08 a3a7688c-d8f4-4315-aeb1-e78ecddf9b7d 2 t f
+674 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-05 11:07:00.146+08 2018-01-05 11:26:39.94+08 11c69c81-4c8e-49c2-bde6-92d68c3d8092 2 t f
+1774 physicalvalue 液位 Output \N 3 \N \N mm 2018-03-14 08:24:49.349+08 2018-03-29 17:31:44.5+08 19db0824-d40d-49ce-a3e8-b63510dcbb7a 2 t f
+1051 value1 应变 Output \N 3 3000 -3000 με 2018-01-05 18:09:59.831+08 2018-01-08 07:36:48.471+08 2578ea6c-aef6-4458-b889-dc7a102143af 2 t f
+1296 stemp 传感器温度 Output \N 2 \N \N ℃ 2018-01-08 19:23:48.695+08 2018-01-08 19:23:48.695+08 978ae9f7-08b3-4e87-add1-abccd6d759d0 2 t f
+1050 value1 水压 Output \N 3 0.3 0 MPa 2018-01-05 17:57:19.74+08 2018-01-08 07:39:06.768+08 c66f2638-5449-4aad-b566-ffff92086b82 2 t f
+1841 angley Y轴角度 Output \N \N \N 2 30 -30 ° 2018-03-23 16:19:29.976+08 2018-03-23 16:19:29.982+08 d64be76d-e00e-4984-bd5e-6c6be4ccd7d3 2 t f
+1843 temperature 温度 Output \N \N \N 2 70 -25 ℃ 2018-03-23 16:20:23.238+08 2018-03-23 16:20:23.243+08 d64be76d-e00e-4984-bd5e-6c6be4ccd7d3 2 t f
+1965 physicalvalue 应力 Output \N \N \N 4 1 0 MPa 2018-03-26 14:27:55.43+08 2018-03-26 14:27:55.434+08 21a71013-2a7f-46e0-8ced-77ada77b1342 2 t f
+1195 data1 温度 Output \N 2 50 -50 ℃ 2018-01-08 13:46:38.369+08 2018-01-08 13:50:04.813+08 5b6bf70d-354f-4930-ac36-534e1a992440 2 t f
+1199 data2 土壤水分 Output \N 2 100 0 %RH 2018-01-08 13:46:38.385+08 2018-01-08 13:51:18.445+08 5b6bf70d-354f-4930-ac36-534e1a992440 2 t f
+1298 voltage 电压 Output \N \N \N 3 \N \N V 2018-01-08 19:23:48.704+08 2018-01-08 19:23:48.704+08 978ae9f7-08b3-4e87-add1-abccd6d759d0 2 t f
+1466 temperature 温度 Output \N 2 \N \N ℃ 2018-01-23 14:46:19.004+08 2018-03-26 14:40:28.14+08 3436c379-cac3-4baf-8a3f-7fa4b1fe6188 2 t f
+1287 physicalvalue 温度 Output \N 2 80 -40 ℃ 2018-01-08 18:36:03.337+08 2018-03-29 11:39:07.083+08 f07e4888-28ea-482b-bbe3-a61929f52026 2 t f
+676 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 11:07:00.153+08 2018-01-05 11:07:00.153+08 11c69c81-4c8e-49c2-bde6-92d68c3d8092 2 t f
+679 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 11:07:00.283+08 2018-01-05 11:07:00.283+08 a5f188ab-9f47-44f3-a454-2b85f0aaa7ce 2 t f
+680 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-01-05 11:07:01.131+08 2018-01-05 11:07:01.131+08 90e33926-b804-46d8-9c62-0fad9b87edab 2 t f
+682 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 11:07:01.141+08 2018-01-05 11:07:01.141+08 90e33926-b804-46d8-9c62-0fad9b87edab 2 t f
+700 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 11:07:04.221+08 2018-01-05 11:07:04.221+08 571ad024-5982-4fc7-b01e-684b112a8092 2 t f
+1480 physicalvalue 轴力 Output \N 4 3000 -3000 kN 2018-01-23 14:46:19.423+08 2018-03-23 15:47:48.539+08 53649022-343c-4129-b626-9dbf8c660e28 2 t f
+677 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-05 11:07:00.274+08 2018-01-05 11:37:43.863+08 a5f188ab-9f47-44f3-a454-2b85f0aaa7ce 2 t f
+1838 anglex X轴角度 Output \N \N \N 2 30 -30 ° 2018-03-23 16:18:23.285+08 2018-03-23 16:18:23.291+08 a3a7688c-d8f4-4315-aeb1-e78ecddf9b7d 2 t f
+698 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-05 11:07:04.202+08 2018-01-05 11:59:07.607+08 571ad024-5982-4fc7-b01e-684b112a8092 2 t f
+1046 temperature 温度 Output \N 2 \N \N ℃ 2018-01-05 16:50:30.003+08 2018-01-05 16:50:30.003+08 7be90de6-78ea-44a4-8896-d18f9b9ab89a 2 t f
+1047 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 16:50:30.008+08 2018-01-05 16:50:30.008+08 7be90de6-78ea-44a4-8896-d18f9b9ab89a 2 t f
+1350 phy1 湿度 Output \N \N \N 3 100 0 %RH 2018-01-10 16:34:37.402+08 2018-01-10 16:34:37.41+08 5aa08735-2f16-4ca2-b9a3-dfbf95e1153d 2 t f
+1770 physicalvalue 液位 Output \N 3 \N \N mm 2018-03-14 00:35:41.201+08 2018-04-20 13:43:02.818+08 a318fba6-92d9-4d50-8a3a-1662c9b24fb9 2 t f
+1844 pressure 压强 Output \N 5 500 0 KPa 2018-03-23 16:35:47.26+08 2018-06-29 10:30:32.667+08 95211a4e-66c1-46be-b7cd-9edc8ac63621 2 t f
+678 physicalvalue 位移 Output \N 3 300 0 mm 2018-01-05 11:07:00.278+08 2018-03-23 11:04:41.488+08 a5f188ab-9f47-44f3-a454-2b85f0aaa7ce 2 t f
+1209 data2 风速 Output \N 2 100 0 m/s 2018-01-08 13:55:43.524+08 2018-01-08 14:00:42.733+08 a8d7c27f-35f9-4a65-943b-afa42ba34e5a 2 t f
+1210 data1 风向 Output \N 2 360 0 ° 2018-01-08 14:03:13.657+08 2018-01-08 14:03:13.657+08 45dc0871-e9be-4b68-bc6d-76d80581e8dc 2 t f
+1212 data1 空气温度 Output \N 2 125 -40 ℃ 2018-01-08 14:10:26.896+08 2018-01-08 14:11:46.106+08 d2d71857-97dc-4969-92f1-e380d0ad4bf9 2 t f
+1213 data2 空气湿度 Output \N 2 100 0 %RH 2018-01-08 14:10:26.9+08 2018-01-08 14:11:51.291+08 d2d71857-97dc-4969-92f1-e380d0ad4bf9 2 t f
+1289 voltage 电压 Output \N \N \N 3 \N \N V 2018-01-08 18:44:26.299+08 2018-01-08 18:44:26.315+08 0b714d0d-91d6-4e91-940d-189bec077752 2 t f
+681 physicalvalue 压力 Output \N 3 0.17 0 MPa 2018-01-05 11:07:01.136+08 2018-03-23 11:04:52.593+08 90e33926-b804-46d8-9c62-0fad9b87edab 2 t f
+1426 angley Y轴角度 Output \N 3 10 -10 ° 2018-01-18 15:22:34.526+08 2018-03-29 10:27:02.088+08 ef4bfc5b-4560-487e-9e27-4a3249da9ae3 2 t f
+1427 anglex X轴角度 Output \N 3 30 -30 ° 2018-01-18 15:22:34.702+08 2018-03-29 10:27:27.846+08 73fc848a-0c95-4953-a162-0679cf2a8586 2 t f
+1428 angley Y轴角度 Output \N 3 30 -30 ° 2018-01-18 15:22:34.707+08 2018-03-29 10:27:31.929+08 73fc848a-0c95-4953-a162-0679cf2a8586 2 t f
+1429 anglex X轴角度 Output \N 3 60 -60 ° 2018-01-18 15:22:34.882+08 2018-03-29 10:27:39.38+08 1e00c4ae-1aa0-4767-bc51-c7b09621466d 2 t f
+1430 angley Y轴角度 Output \N 3 60 -60 ° 2018-01-18 15:22:34.887+08 2018-03-29 10:27:43.074+08 1e00c4ae-1aa0-4767-bc51-c7b09621466d 2 t f
+1431 anglex X轴角度 Output \N 3 90 -90 ° 2018-01-18 15:22:35.043+08 2018-03-29 10:27:55.154+08 78740935-2863-41f7-ba2b-ed0d3d55d5c5 2 t f
+1432 angley Y轴角度 Output \N 3 90 -90 ° 2018-01-18 15:22:35.048+08 2018-03-29 10:27:59.612+08 78740935-2863-41f7-ba2b-ed0d3d55d5c5 2 t f
+1769 physicalvalue 应变 Output \N 3 \N \N ε 2018-03-13 23:15:52.409+08 2018-03-29 15:43:09.478+08 0d251d94-b1b6-4772-8066-2ae317277574 2 t f
+1475 frequency 频率 Output \N \N \N \N \N \N Hz 2018-01-23 14:46:19.206+08 2018-01-23 14:46:19.206+08 f1ab939a-33ee-4a01-8373-13c941cbce03 2 t f
+699 physicalvalue 沉降 Output \N 3 250 0 mm 2018-01-05 11:07:04.208+08 2018-03-23 11:16:30.78+08 571ad024-5982-4fc7-b01e-684b112a8092 2 t f
+1045 physicalvalue 应变 Output \N 3 \N \N KN 2018-01-05 16:50:29.997+08 2018-03-23 14:08:26.542+08 7be90de6-78ea-44a4-8896-d18f9b9ab89a 2 t f
+1501 temperature 温度 Output \N 2 \N \N ℃ 2018-01-23 14:53:15.183+08 2018-03-23 15:45:54.301+08 cbc0a4f0-8c2c-4215-9210-4f81c6de6fd9 2 t f
+1488 physicalvalue 轴力 Output \N 4 4000 -4000 kN 2018-01-23 14:46:19.629+08 2018-03-23 15:47:03.496+08 4f360434-b54d-41c3-8163-4df050a68350 2 t f
+1483 frequency 频率 Output \N 3 \N \N Hz 2018-01-23 14:46:19.431+08 2018-03-26 15:04:45.783+08 53649022-343c-4129-b626-9dbf8c660e28 2 t f
+1842 anglex X轴角度 Output \N \N \N 2 30 -30 ° 2018-03-23 16:19:58.693+08 2018-03-23 16:19:58.699+08 d64be76d-e00e-4984-bd5e-6c6be4ccd7d3 2 t f
+1839 temperature 温度 Output \N 2 70 -25 ℃ 2018-03-23 16:18:32.588+08 2018-03-23 16:18:48.618+08 0183e607-ae45-461a-84be-4b7fb9ef5951 2 t f
+1840 angley Y轴角度 Output \N 2 30 -30 ° 2018-03-23 16:18:49.607+08 2018-03-23 16:18:57.387+08 a3a7688c-d8f4-4315-aeb1-e78ecddf9b7d 2 t f
+1489 am 幅值 Output \N 3 mv 2018-01-23 14:46:19.631+08 2018-03-02 14:08:11.071+08 4f360434-b54d-41c3-8163-4df050a68350 2 t f
+1481 am 幅值 Output \N 3 mv 2018-01-23 14:46:19.425+08 2018-03-02 14:09:56.713+08 53649022-343c-4129-b626-9dbf8c660e28 2 t f
+1506 am 幅值 Output \N 3 mv 2018-01-23 14:53:15.201+08 2018-03-02 14:34:52.983+08 cbc0a4f0-8c2c-4215-9210-4f81c6de6fd9 2 t f
+1500 frequency 频率 Output \N 3 \N \N Hz 2018-01-23 14:53:15.178+08 2018-03-02 14:38:28.199+08 cbc0a4f0-8c2c-4215-9210-4f81c6de6fd9 2 t f
+1299 humidity 湿度 Output \N 2 100 0 % 2018-01-08 19:24:18.061+08 2018-12-14 17:51:34.406+08 a7e720b6-f0ca-4a8d-aabd-18b8c8825303 2 t f
+1982 physicalvalue 应力 Output \N \N \N 4 2 0 MPa 2018-03-26 14:35:05.955+08 2018-03-26 14:35:05.96+08 f3879800-9585-4575-a261-25c1128fcaf9 2 t f
+1983 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:35:25.781+08 2018-03-26 14:35:25.789+08 f4d2673b-f6ac-4be7-9068-95a68442426e 2 t f
+1994 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-03-26 14:39:11.607+08 2018-03-26 14:39:11.615+08 8693e382-e7e6-4efa-8583-d0251cb0b360 2 t f
+1997 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 14:39:37.883+08 2018-03-26 14:39:37.888+08 ea781b14-56d0-478f-991f-05c1ed5fdf93 2 t f
+2000 physicalvalue 轴力 Output \N \N \N 4 1000 -1000 KN 2018-03-26 14:40:18.15+08 2018-03-26 14:40:18.162+08 ea781b14-56d0-478f-991f-05c1ed5fdf93 2 t f
+1482 temperature 温度 Output \N 2 \N \N ℃ 2018-01-23 14:46:19.428+08 2018-03-26 15:04:41.608+08 53649022-343c-4129-b626-9dbf8c660e28 2 t f
+1052 value2 温度 Output \N \N \N 2 80 -20 ℃ 2018-01-08 07:36:33.205+08 2018-01-08 07:36:33.217+08 2578ea6c-aef6-4458-b889-dc7a102143af 2 t f
+694 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 11:07:03.209+08 2018-01-05 11:07:03.209+08 5fa4fdf3-0b6f-4b2c-9015-3ec3e23f909f 2 t f
+1989 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-03-26 14:37:47.839+08 2018-03-26 14:37:47.845+08 6c75e8aa-7e92-4611-8962-1c79a7ba9ef2 2 t f
+692 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-05 11:07:03.195+08 2018-01-05 11:52:46.444+08 5fa4fdf3-0b6f-4b2c-9015-3ec3e23f909f 2 t f
+1056 value1 X轴角度 Output \N 2 30 -30 ° 2018-01-08 08:03:31.856+08 2018-01-08 08:05:19.734+08 8b4d52b7-47ef-4940-9b4e-7353a2a62765 2 t f
+1055 value2 Y轴角度 Output \N 2 30 -30 ° 2018-01-08 08:03:31.851+08 2018-01-08 08:05:43.842+08 8b4d52b7-47ef-4940-9b4e-7353a2a62765 2 t f
+1351 phy1 大气压力 Output \N \N \N 3 1100 300 hPa 2018-01-10 16:38:09.801+08 2018-01-10 16:38:09.817+08 c71648f4-8926-4408-b731-937ce2b9db90 2 t f
+1291 ctemp 采集仪温度 Output \N \N \N 2 \N \N ℃ 2018-01-08 18:45:56.79+08 2018-01-08 18:45:56.796+08 0b714d0d-91d6-4e91-940d-189bec077752 2 t f
+1290 stemp 传感器温度 Output \N 2 \N \N ℃ 2018-01-08 18:45:26.953+08 2018-01-08 18:46:03.687+08 0b714d0d-91d6-4e91-940d-189bec077752 2 t f
+1293 cableforce 索力 Output \N \N \N 3 \N \N KN 2018-01-08 19:09:03.952+08 2018-01-08 19:09:03.959+08 0b714d0d-91d6-4e91-940d-189bec077752 2 t f
+1490 temperature 温度 Output \N 2 \N \N ℃ 2018-01-23 14:46:19.634+08 2019-11-26 10:17:26.538+08 4f360434-b54d-41c3-8163-4df050a68350 2 t f
+1493 frequency 频率 Output \N 3 \N \N Hz 2018-01-23 14:49:59.724+08 2018-03-02 14:38:01.372+08 bc03541b-fb13-44ff-8cc4-9419e81554f3 2 t f
+2302 angley Y轴角度 Output \N \N \N 3 \N \N ° 2018-05-29 14:51:48.744+08 2018-05-29 14:51:48.744+08 9517f5d2-02f2-47c6-b688-35e0efa0f25f 2 t f
+2007 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 15:03:17.896+08 2018-03-26 15:03:17.9+08 c77f3d16-3577-4f09-9c32-cc99cbb68966 2 t f
+693 physicalvalue 压力 Output \N 3 3 0 MPa 2018-01-05 11:07:03.201+08 2018-03-23 11:00:29.584+08 5fa4fdf3-0b6f-4b2c-9015-3ec3e23f909f 2 t f
+1629 temperature 温度 Output \N 2 \N \N ℃ 2018-01-24 11:33:34.523+08 2018-03-23 15:37:24.21+08 4e508627-863b-46fa-9454-a074ef2fbe8a 2 t f
+2211 physicalvalue 轴力 Output \N 4 4000 -4000 kN 2018-04-16 15:46:12.381+08 2018-04-16 15:51:38.338+08 2a88ded3-16cd-4e38-bbb3-ed48fe6d5efc 2 t f
+1617 temperature 温度 Output \N 2 \N \N ℃ 2018-01-24 11:30:26.78+08 2018-03-23 15:38:24.078+08 1a664a1a-b5f1-4e75-916f-21bc94749d0e 2 t f
+1609 temperature 温度 Output \N 2 125 -55 ℃ 2018-01-24 11:26:28.349+08 2018-03-23 15:38:43.537+08 6b9cf407-77e8-47af-b3c7-571606764785 2 t f
+1555 physicalvalue 水压 Output \N 4 0.8 0 MPa 2018-01-23 15:00:11.868+08 2018-03-23 15:41:32.084+08 c631534f-fef5-4db4-b5c2-e7cb081db305 2 t f
+2019 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 15:18:40.969+08 2018-03-26 15:18:40.976+08 88e6acfa-2714-4821-9ff8-c5d96a23ce68 2 t f
+2276 fre 频率 Output \N \N \N 4 \N \N Hz 2018-05-10 17:53:31.357+08 2018-05-10 17:53:31.385+08 60f374db-1336-4bb2-8dda-311955dca706 2 t f
+1549 temperature 温度 Output \N 2 \N \N ℃ 2018-01-23 15:00:11.845+08 2018-03-23 15:42:33.686+08 c631534f-fef5-4db4-b5c2-e7cb081db305 2 t f
+1472 physicalvalue 轴力 Output \N 4 2000 -2000 kN 2018-01-23 14:46:19.198+08 2018-03-23 15:48:36.538+08 f1ab939a-33ee-4a01-8373-13c941cbce03 2 t f
+1494 temperature 温度 Output \N 2 \N \N ℃ 2018-01-23 14:49:59.73+08 2018-03-23 16:34:49.744+08 bc03541b-fb13-44ff-8cc4-9419e81554f3 2 t f
+2020 physicalvalue 荷载 Output \N \N \N 4 100 -100 t 2018-03-26 15:19:04.731+08 2018-03-26 15:19:04.738+08 88e6acfa-2714-4821-9ff8-c5d96a23ce68 2 t f
+1612 physicalvalue 沉降 Output \N 3 100 0 mm 2018-01-24 11:30:26.768+08 2018-03-26 16:46:22.883+08 1a664a1a-b5f1-4e75-916f-21bc94749d0e 2 t f
+1633 physicalvalue 位移 Output \N 3 100 0 mm 2018-01-24 11:33:34.535+08 2018-03-26 17:02:29.437+08 4e508627-863b-46fa-9454-a074ef2fbe8a 2 t f
+2120 anglex X轴角度 Output \N \N \N 2 40 -40 ° 2018-04-03 11:53:08.697+08 2018-04-03 11:53:08.697+08 855e5472-f1f9-4119-818a-337b5f302028 2 t f
+2121 angley Y轴角度 Output \N \N \N 2 40 -40 ° 2018-04-03 11:53:08.705+08 2018-04-03 11:53:08.705+08 855e5472-f1f9-4119-818a-337b5f302028 2 t f
+1607 pressure 压强 Output \N 5 0.5 0 MPa 2018-01-24 11:19:10.116+08 2018-02-02 15:41:04.202+08 9a25cd7a-d145-4a19-95a1-bae3a0cb0260 2 t f
+1605 pressure 压强 Output \N 4 2 0 MPa 2018-01-24 11:19:02.109+08 2018-02-02 15:41:58.396+08 a4dea266-bdd4-4ec6-8334-565d7cdc947c 2 t f
+2122 anglez Z轴角度 Output \N \N \N 2 40 -40 ° 2018-04-03 11:53:08.709+08 2018-04-03 11:53:08.709+08 855e5472-f1f9-4119-818a-337b5f302028 2 t f
+1548 frequency 频率 Output \N 3 \N \N Hz 2018-01-23 15:00:11.838+08 2018-03-02 14:58:40.948+08 c631534f-fef5-4db4-b5c2-e7cb081db305 2 t f
+2209 am 幅值 Output \N \N \N 3 \N \N mv 2018-04-16 15:46:12.374+08 2018-04-16 15:46:12.374+08 2a88ded3-16cd-4e38-bbb3-ed48fe6d5efc 2 t f
+1614 frequency 频率 Output \N 3 \N \N Hz 2018-01-24 11:30:26.773+08 2018-03-02 15:18:53.406+08 1a664a1a-b5f1-4e75-916f-21bc94749d0e 2 t f
+2210 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 15:46:12.378+08 2018-04-16 15:46:12.378+08 2a88ded3-16cd-4e38-bbb3-ed48fe6d5efc 2 t f
+1626 frequency 频率 Output \N 3 \N \N Hz 2018-01-24 11:33:34.512+08 2018-03-02 15:22:23.957+08 4e508627-863b-46fa-9454-a074ef2fbe8a 2 t f
+2212 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-04-16 15:46:12.385+08 2018-04-16 15:46:12.385+08 2a88ded3-16cd-4e38-bbb3-ed48fe6d5efc 2 t f
+2213 am 幅值 Output \N \N \N 3 \N \N mv 2018-04-16 15:46:12.393+08 2018-04-16 15:46:12.393+08 a2fa85fa-2e1a-427e-99f2-595757cb505b 2 t f
+2214 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 15:46:12.396+08 2018-04-16 15:46:12.396+08 a2fa85fa-2e1a-427e-99f2-595757cb505b 2 t f
+2216 temperature 温度 Output \N \N \N 3 \N \N ℃ 2018-04-16 15:46:12.403+08 2018-04-16 15:46:12.403+08 a2fa85fa-2e1a-427e-99f2-595757cb505b 2 t f
+2215 physicalvalue 轴力 Output \N 4 4000 -4000 kN 2018-04-16 15:46:12.4+08 2018-04-16 15:51:49.643+08 a2fa85fa-2e1a-427e-99f2-595757cb505b 2 t f
+1588 distance 距离 Output \N 3 8000 50 mm 2018-01-23 15:32:11.054+08 2018-04-16 17:22:24.684+08 9486f04c-16ee-42bb-9f4b-485632a1857e 2 t f
+2277 x x方向角度 Output \N 6 30 -30 \N 2018-05-10 17:55:50.41+08 2018-05-10 17:57:02.857+08 5d8abf22-14e4-474f-9a3a-11a4976643ee 2 t f
+2279 physicalvalue X轴角度 Output \N 3 \N \N ° 2018-05-11 10:41:15.502+08 2018-05-11 10:42:29.948+08 ec17d151-95d9-4c87-a5c9-799089626714 2 t f
+2307 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-05-30 20:46:49.727+08 2018-05-30 20:46:49.734+08 d1f3cdb1-95b4-4970-90b8-cdb6c2201063 2 t f
+2351 length 位移 Output \N \N \N 3 \N \N mm 2018-06-21 11:13:15.953+08 2018-06-21 11:13:15.965+08 934f46a0-88fb-47d5-95c9-745cdaf1c07e 2 t f
+1845 pressure 压强 Output \N 5 200 0 KPa 2018-03-23 16:37:55.07+08 2018-06-29 10:30:54.786+08 ced94dca-0afa-4ab7-b273-744ff40f6b7a 2 t f
+2511 am 幅值 Output \N \N \N 3 \N \N mv 2018-07-31 15:11:43.956+08 2018-07-31 15:11:43.956+08 b61317eb-c793-4b2f-b680-2d15a061ec91 2 t f
+1053 value2 温度 Output \N \N \N 3 80 -20 ℃ 2018-01-08 07:43:00.036+08 2018-01-08 07:43:00.056+08 c66f2638-5449-4aad-b566-ffff92086b82 2 t f
+697 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 11:07:03.712+08 2018-01-05 11:07:03.712+08 0c7ac7cb-305a-4871-9335-1e95d569358c 2 t f
+717 frequency 频率 Output \N 3 \N \N Hz 2018-01-05 11:50:25.13+08 2018-03-02 11:19:09.547+08 45469a20-748c-4740-9741-4c971a209601 2 t f
+737 changedy Y轴位移 Output \N 3 mm 2018-01-05 13:52:32.941+08 2018-03-29 15:13:37.856+08 2766d297-6127-449f-b73f-089b38e01267 2 t f
+1352 phy1 土壤温度 Output \N 2 80 -40 ℃ 2018-01-10 16:48:58.338+08 2018-01-10 16:50:00.973+08 19e68163-a7e9-4be7-b9ae-6966035ac671 2 t f
+2325 ppv 峰峰值 Output \N \N \N 5 \N \N \N 2018-06-11 10:36:24.35+08 2018-06-11 10:36:24.356+08 7685d43c-d87a-4eb4-88e0-1bde3d9eed5b 2 t f
+696 physicalvalue 应力 Output \N 3 210 0 MPa 2018-01-05 11:07:03.707+08 2018-03-23 11:16:20.113+08 0c7ac7cb-305a-4871-9335-1e95d569358c 2 t f
+743 temperature 温度 Output \N \N \N \N ℃ 2018-01-05 14:02:09.812+08 2018-03-23 15:55:27.012+08 da94e805-9621-4290-b239-5ddc2e0504a7 2 t f
+740 physicalvalue 应变 Output \N 4 3000 -3000 με 2018-01-05 14:02:09.805+08 2018-03-23 15:55:36.714+08 da94e805-9621-4290-b239-5ddc2e0504a7 2 t f
+736 physicalvalue 应变 Output \N 4 1500 -1500 με 2018-01-05 12:01:35.839+08 2018-03-23 15:56:09.606+08 4412085f-1890-4b38-b715-f72085af2b7b 2 t f
+718 temperature 温度 Output \N 2 \N \N ℃ 2018-01-05 11:50:25.135+08 2018-03-23 15:56:54.348+08 45469a20-748c-4740-9741-4c971a209601 2 t f
+719 physicalvalue 应变 Output \N 4 5000 -5000 με 2018-01-05 11:50:25.14+08 2018-03-23 15:57:01.567+08 45469a20-748c-4740-9741-4c971a209601 2 t f
+1492 physicalvalue 荷载 Output \N 4 kN 2018-01-23 14:49:59.717+08 2021-03-02 13:45:33.995+08 bc03541b-fb13-44ff-8cc4-9419e81554f3 2 t f
+2024 physicalvalue 荷载 Output \N 4 kN 2018-03-26 15:24:50.729+08 2021-03-02 13:55:11.86+08 b3e8b1eb-5d72-4bda-875a-d83d7c593dfe 2 t f
+2028 physicalvalue 荷载 Output \N 4 kN 2018-03-26 15:31:47.875+08 2021-03-02 13:56:32.992+08 79fa3616-07da-47da-a26c-0faac333d89d 2 t f
+2524 length 位移 Output \N \N \N 5 50 -50 mm 2018-07-31 16:19:59.527+08 2018-07-31 16:19:59.527+08 f67c6ffc-0414-4209-85ee-74153dcddd7d 2 t f
+711 physicalvalue 应变 Output \N 4 3000 -3000 με 2018-01-05 11:50:22.321+08 2018-03-23 15:57:49.774+08 f331ae21-9607-401d-b8c4-9d17e40eba9a 2 t f
+2006 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 15:03:03.755+08 2018-03-26 15:03:03.763+08 c77f3d16-3577-4f09-9c32-cc99cbb68966 2 t f
+695 temperature 温度 Output \N 2 80 -20 ℃ 2018-01-05 11:07:03.7+08 2018-01-05 11:55:14.973+08 0c7ac7cb-305a-4871-9335-1e95d569358c 2 t f
+746 am 幅值 Output \N 3 mv 2018-01-05 14:02:09.819+08 2018-03-02 13:57:25.899+08 da94e805-9621-4290-b239-5ddc2e0504a7 2 t f
+2008 physicalvalue 幅值 Output \N \N \N 4 3000 -3000 KN 2018-03-26 15:03:43.345+08 2018-03-26 15:03:43.351+08 c77f3d16-3577-4f09-9c32-cc99cbb68966 2 t f
+2009 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 15:09:24.014+08 2018-03-26 15:09:24.019+08 15598365-4401-4d31-9ebe-d0e46f6d4ce5 2 t f
+1251 yAccelertation Y轴加速度 Output \N 2 4000 0 mg 2018-01-08 16:50:48.9+08 2018-01-08 16:52:29.842+08 de7958de-0a8a-4492-8705-642b5c4df424 2 t f
+1216 lvdt 位移 Output \N 2 35 0 mm 2018-01-08 14:53:25.092+08 2018-01-08 16:26:08.703+08 58459465-409c-47c0-b73f-a8a1c2cf563c 2 t f
+2012 physicalvalue 轴力 Output \N \N \N 4 4000 -4000 KN 2018-03-26 15:10:51.386+08 2018-03-26 15:10:51.392+08 15598365-4401-4d31-9ebe-d0e46f6d4ce5 2 t f
+2017 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 15:18:06.458+08 2018-03-26 15:18:06.465+08 88e6acfa-2714-4821-9ff8-c5d96a23ce68 2 t f
+2021 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 15:22:53.163+08 2018-03-26 15:22:53.172+08 b3e8b1eb-5d72-4bda-875a-d83d7c593dfe 2 t f
+2327 yDegree Y轴角度 Output \N 4 30 -30 ° 2018-06-11 14:59:44.593+08 2018-06-11 14:59:44.593+08 cd9e5fa9-97a7-4494-ac8f-69c526262d6d 2 t f
+2026 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 15:28:26.523+08 2018-03-26 15:28:26.53+08 79fa3616-07da-47da-a26c-0faac333d89d 2 t f
+2029 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 15:36:42.746+08 2018-03-26 15:36:42.754+08 5c6f4070-1acc-4ac2-91d6-b7420f02a37b 2 t f
+733 temperature 温度 Output \N 2 \N \N ℃ 2018-01-05 12:01:35.825+08 2018-03-27 11:06:03.416+08 4412085f-1890-4b38-b715-f72085af2b7b 2 t f
+734 frequency 频率 Output \N 3 \N \N Hz 2018-01-05 12:01:35.83+08 2018-03-27 11:06:07.836+08 4412085f-1890-4b38-b715-f72085af2b7b 2 t f
+1058 physicalvalue 压力 Output \N 4 1 0 MPa 2018-01-08 08:17:08.58+08 2018-03-28 23:17:40.87+08 743c44f5-480c-4c97-80ef-a03ba282ed49 2 t f
+1252 zAccelertation Z轴加速度 Output \N 2 4000 0 mg 2018-01-08 16:50:48.905+08 2018-01-08 16:52:35.428+08 de7958de-0a8a-4492-8705-642b5c4df424 2 t f
+1248 yAccelertation Y轴加速度 Output \N 2 8000 0 mg 2018-01-08 16:50:48.402+08 2018-01-08 16:53:05.276+08 1ec0d96c-843a-4da9-ada2-a70c23ebe8f4 2 t f
+1249 zAccelertation Z轴加速度 Output \N 2 8000 0 mg 2018-01-08 16:50:48.408+08 2018-01-08 16:53:09.936+08 1ec0d96c-843a-4da9-ada2-a70c23ebe8f4 2 t f
+1250 xAccelertation X轴加速度 Output \N 2 8000 0 mg 2018-01-08 16:50:48.413+08 2018-01-08 16:53:15.467+08 1ec0d96c-843a-4da9-ada2-a70c23ebe8f4 2 t f
+1215 temp 温度 Output \N 2 80 -40 ℃ 2018-01-08 14:45:53.6+08 2018-01-08 17:03:29.138+08 47aba0a9-a828-4842-9ce0-4733fa6efa10 2 t f
+2328 xDegree X轴角度 Output \N 4 30 -30 ° 2018-06-11 14:59:44.598+08 2018-06-11 14:59:44.598+08 cd9e5fa9-97a7-4494-ac8f-69c526262d6d 2 t f
+2199 physicalvalue 轴力 Output \N 4 2000 -2000 kN 2018-04-16 15:46:07.755+08 2018-04-16 15:47:37.117+08 b4f14b5d-82f1-4ea1-b10f-3e38e552168c 2 t f
+2123 pmstandard 标况pm2.5 Output \N 3 \N \N ug/m³ 2018-04-03 11:53:35.038+08 2018-04-19 13:40:32.889+08 61625131-a37b-4478-a0dc-f7c55d54f34e 2 t f
+2126 anglez Z轴角度 Output \N 2 360 -180 ° 2018-04-03 13:48:09.027+08 2018-05-07 21:04:40.778+08 ea35c8e5-60d3-46c7-a819-b0557f2be17b 2 t f
+2278 x0 x方向初值 Variable \N \N \N 4 30 -30 \N 2018-05-10 17:56:47.179+08 2018-05-10 17:56:47.185+08 5d8abf22-14e4-474f-9a3a-11a4976643ee 2 t f
+2308 token token Output \N \N \N \N \N \N \N 2018-05-31 07:53:47.623+08 2018-05-31 07:53:47.63+08 642f187b-6fa0-4dad-9bb4-1ebee9558b41 5 t f
+2365 flowrate 瞬时流量 Output \N \N \N 4 \N \N m3/h 2018-06-28 16:26:44.806+08 2018-06-28 16:26:44.819+08 419116d4-4614-4d66-bc30-ce2394eed251 2 t f
+2354 anglex X轴角度 Output \N 5 \N \N ° 2018-06-25 09:06:03.75+08 2018-06-25 14:43:34.871+08 7f0bdd9e-f9d0-4739-b764-18f3c615ca79 2 t f
+1846 pressure 压强 Output \N 4 2000 0 KPa 2018-03-23 16:44:59.326+08 2018-06-29 10:31:41.977+08 51e73aec-cdcf-4852-98fe-e6b9bae73590 2 t f
+2516 am 幅值 Output \N \N \N 3 \N \N mv 2018-07-31 15:16:35.514+08 2018-07-31 15:16:35.514+08 b69bda25-731f-49db-b199-83207febe2ed 2 t f
+2446 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-07-19 09:35:55.164+08 2018-07-19 09:35:55.164+08 5a0e1b09-57f7-4bcc-9f02-2ed2ac5f3d7e 2 t f
+2447 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-07-19 09:35:55.168+08 2018-07-19 09:35:55.168+08 5a0e1b09-57f7-4bcc-9f02-2ed2ac5f3d7e 2 t f
+2448 am 幅值 Output \N \N \N 3 \N \N mv 2018-07-19 09:35:55.178+08 2018-07-19 09:35:55.178+08 95f120f4-02d5-454d-a848-b2749f786d6a 2 t f
+2449 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-07-19 09:35:55.181+08 2018-07-19 09:35:55.181+08 95f120f4-02d5-454d-a848-b2749f786d6a 2 t f
+2450 temperature 温度 Output \N \N \N 3 \N \N ℃ 2018-07-19 09:35:55.185+08 2018-07-19 09:35:55.185+08 95f120f4-02d5-454d-a848-b2749f786d6a 2 t f
+709 frequency 频率 Output \N 3 \N \N Hz 2018-01-05 11:50:22.313+08 2018-07-31 15:17:04.982+08 f331ae21-9607-401d-b8c4-9d17e40eba9a 2 t f
+710 temperature 温度 Output \N 2 \N \N ℃ 2018-01-05 11:50:22.316+08 2018-07-31 15:17:32.032+08 f331ae21-9607-401d-b8c4-9d17e40eba9a 2 t f
+758 frequency 频率 Output \N 3 \N \N Hz 2018-01-05 14:46:16.344+08 2018-03-26 13:39:42.887+08 08fbb708-7333-4f0f-b4a6-1b185f02fd34 2 t f
+750 frequency 频率 Output \N \N \N \N \N \N Hz 2018-01-05 14:02:10.816+08 2018-01-05 14:02:10.816+08 77becc38-82f7-4612-83e2-10e0ebf5e6e3 2 t f
+795 temperature 温度 Output \N \N \N \N ℃ 2018-01-05 14:53:53.048+08 2018-03-23 15:52:54.172+08 e7092d0b-709a-414e-a8ca-a1e21ef6e36c 2 t f
+759 temperature 温度 Output \N 2 \N \N ℃ 2018-01-05 14:46:16.348+08 2018-03-26 13:39:52.044+08 08fbb708-7333-4f0f-b4a6-1b185f02fd34 2 t f
+767 temperature 温度 Output \N \N \N \N ℃ 2018-01-05 14:50:21.869+08 2018-03-23 15:53:22.089+08 5d7b8c97-4528-4c8a-8da7-bcc37d2a9ed2 2 t f
+755 physicalvalue 荷载力 Output \N 4 75 -75 kN 正值是张拉力,负值是承压力 2018-01-05 14:46:16.313+08 2018-03-26 13:41:56.047+08 08fbb708-7333-4f0f-b4a6-1b185f02fd34 2 t f
+1254 yAccelertation Y轴加速度 Output \N 2 4000 0 mg 2018-01-08 16:50:49.872+08 2018-01-08 16:51:24.762+08 58543b3a-1b0d-44ce-a3c3-856bc133204a 2 t f
+2034 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 15:43:53.765+08 2018-03-26 15:43:53.77+08 d5370a7a-bba2-4997-9b8b-2cbbad5ebfa0 2 t f
+788 physicalvalue 压力 Output \N 3 0.7 0 MPa 2018-01-05 14:53:22.531+08 2018-03-23 11:16:53.752+08 9c34b3cc-56f3-4463-b264-888d55002e8b 2 t f
+791 physicalvalue 压力 Output \N 3 3 0 MPa 2018-01-05 14:53:24.814+08 2018-03-23 11:17:10.14+08 cc4c86bd-de99-4664-97f7-6cc8f14d9163 2 t f
+768 frequency 频率 Output \N \N \N \N \N \N Hz 2018-01-05 14:50:21.873+08 2018-01-05 14:50:21.873+08 5d7b8c97-4528-4c8a-8da7-bcc37d2a9ed2 2 t f
+803 physicalvalue 水位 Output \N 3 1500 0 mm 2018-01-05 14:57:25.924+08 2018-03-23 11:17:22.318+08 7cfe14d1-5568-4d3a-abf6-b24791db9643 2 t f
+1775 angley Y方向角度 Output \N 4 30 -30 ° 2018-03-14 09:33:01.433+08 2018-03-23 15:33:47.36+08 0183e607-ae45-461a-84be-4b7fb9ef5951 2 t f
+764 physicalvalue 荷载力 Output \N 4 105 -105 kN 正值是张拉力,负值是承压力 2018-01-05 14:50:21.85+08 2018-03-23 15:53:33.647+08 5d7b8c97-4528-4c8a-8da7-bcc37d2a9ed2 2 t f
+1255 zAccelertation Z轴加速度 Output \N 2 4000 0 mg 2018-01-08 16:50:49.879+08 2018-01-08 16:51:28.844+08 58543b3a-1b0d-44ce-a3c3-856bc133204a 2 t f
+1509 temperature 温度 Output \N 2 \N \N ℃ 2018-01-23 14:53:15.39+08 2018-03-23 15:45:06.945+08 fd91ebd4-1201-4b5b-a5a0-e4636fb4ecbd 2 t f
+794 physicalvalue 荷载力 Output \N 4 136 -136 kN 正值是张拉力,负值是承压力 2018-01-05 14:53:53.044+08 2018-03-23 15:52:44.723+08 e7092d0b-709a-414e-a8ca-a1e21ef6e36c 2 t f
+2047 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 16:13:57.828+08 2018-03-26 16:13:57.833+08 9da5e8ea-d055-48f8-97e4-5e64ccb9334c 2 t f
+1217 xDegree X轴角度 Output \N 3 10 -10 ° 2018-01-08 14:58:05.967+08 2018-01-08 17:12:52.237+08 db8bf711-b26f-4e79-bc46-564fbc4f60ac 2 t f
+1243 lvdt 位移 Output \N 2 280 0 mm 2018-01-08 16:27:57.455+08 2018-01-08 16:47:17.935+08 477069fb-894d-4a5c-9b41-d004be827ac5 2 t f
+1256 xAccelertation X轴加速度 Output \N 2 4000 0 mg 2018-01-08 16:50:49.888+08 2018-01-08 16:51:33.685+08 58543b3a-1b0d-44ce-a3c3-856bc133204a 2 t f
+1353 phy2 土壤湿度 Output \N 2 100 0 %RH 2018-01-10 16:49:40.899+08 2018-01-10 16:49:46.608+08 19e68163-a7e9-4be7-b9ae-6966035ac671 2 t f
+787 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-01-05 14:53:22.526+08 2018-01-05 14:53:22.526+08 9c34b3cc-56f3-4463-b264-888d55002e8b 2 t f
+789 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 14:53:22.535+08 2018-01-05 14:53:22.535+08 9c34b3cc-56f3-4463-b264-888d55002e8b 2 t f
+790 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-01-05 14:53:24.811+08 2018-01-05 14:53:24.811+08 cc4c86bd-de99-4664-97f7-6cc8f14d9163 2 t f
+792 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 14:53:24.816+08 2018-01-05 14:53:24.816+08 cc4c86bd-de99-4664-97f7-6cc8f14d9163 2 t f
+751 temperature 温度 Output \N \N \N \N ℃ 2018-01-05 14:02:10.821+08 2018-03-23 15:54:54.005+08 77becc38-82f7-4612-83e2-10e0ebf5e6e3 2 t f
+748 physicalvalue 微应变 Output \N 4 5000 -5000 με 2018-01-05 14:02:10.802+08 2018-03-23 15:55:02.892+08 77becc38-82f7-4612-83e2-10e0ebf5e6e3 2 t f
+798 frequency 频率 Output \N \N \N \N \N \N Hz 2018-01-05 14:53:53.061+08 2018-01-05 14:53:53.061+08 e7092d0b-709a-414e-a8ca-a1e21ef6e36c 2 t f
+2035 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 15:44:09.249+08 2018-03-26 15:44:09.254+08 d5370a7a-bba2-4997-9b8b-2cbbad5ebfa0 2 t f
+801 frequency 频率 Output \N 3 \N \N HZ 2018-01-05 14:57:25.913+08 2018-01-05 14:57:25.913+08 7cfe14d1-5568-4d3a-abf6-b24791db9643 2 t f
+802 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-01-05 14:57:25.919+08 2018-01-05 14:57:25.919+08 7cfe14d1-5568-4d3a-abf6-b24791db9643 2 t f
+1355 phy1 温度 Output \N \N \N 2 80 -20 ℃ 2018-01-10 17:09:50.593+08 2018-01-10 17:09:50.605+08 8096b88c-dc64-4f26-8f04-6ac919d70447 2 t f
+1357 phy3 光照 Output \N \N \N 2 200000 0 Lux 2018-01-10 17:13:41.341+08 2018-01-10 17:13:41.355+08 8096b88c-dc64-4f26-8f04-6ac919d70447 2 t f
+1434 cpuRate cpu使用率 Variable \N \N 30.00 2 100.00 10.00 % cpu使用率 2018-01-19 15:34:49.11+08 2018-01-19 15:34:49.114+08 1e87be3b-9782-4b75-8b62-0aa49b44daea 2 t f
+2038 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 15:49:25.544+08 2018-03-26 15:49:25.557+08 8e638b0a-bbf4-4856-add9-c4db9b55b032 2 t f
+762 am 幅值 Output \N 3 mv 2018-01-05 14:46:16.355+08 2018-03-02 10:32:19.849+08 08fbb708-7333-4f0f-b4a6-1b185f02fd34 2 t f
+2040 physicalvalue 水压 Output \N \N \N 4 1 0 MPa 2018-03-26 15:50:11.335+08 2018-03-26 15:50:11.341+08 8e638b0a-bbf4-4856-add9-c4db9b55b032 2 t f
+1508 frequency 频率 Output \N 3 \N \N Hz 2018-01-23 14:53:15.386+08 2018-03-02 14:23:53.46+08 fd91ebd4-1201-4b5b-a5a0-e4636fb4ecbd 2 t f
+2053 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 16:24:49.563+08 2018-03-26 16:24:49.566+08 81a87805-fc42-456d-960f-fb793999d631 2 t f
+2056 physicalvalue 水压 Output \N \N \N 4 0.2 0 MPa 2018-03-26 16:25:59.545+08 2018-03-26 16:25:59.551+08 81a87805-fc42-456d-960f-fb793999d631 2 t f
+2067 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 17:01:11.439+08 2018-03-26 17:01:11.444+08 606bd0b9-0694-4ff6-b0f2-f591ab56a3d4 2 t f
+2073 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-27 10:57:43.513+08 2018-03-27 10:57:43.519+08 0428f647-9944-415c-b6f0-93e7329d31c9 2 t f
+2076 physicalvalue 位移 Output \N \N \N 4 50 0 mm 2018-03-27 10:58:59.282+08 2018-03-27 10:58:59.29+08 0428f647-9944-415c-b6f0-93e7329d31c9 2 t f
+2077 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-27 11:00:54.694+08 2018-03-27 11:00:54.702+08 6ebb2c0f-06fa-4b77-b028-4818465a7019 2 t f
+2079 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-27 11:01:59.053+08 2018-03-27 11:01:59.059+08 6ebb2c0f-06fa-4b77-b028-4818465a7019 2 t f
+2084 physicalvalue 应力 Output \N 4 1500 -1500 με 2018-03-27 11:05:35.371+08 2018-03-27 11:05:48.278+08 50696e87-2214-4a20-b537-5530d2921ccd 2 t f
+2087 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-27 11:09:06.171+08 2018-03-27 11:09:06.182+08 533e4f1c-c95f-46b6-9d76-1e77bcd20732 2 t f
+2088 physicalvalue 应变 Output \N 4 5000 -5000 με 2018-03-27 11:09:22.813+08 2018-03-27 11:09:40.877+08 533e4f1c-c95f-46b6-9d76-1e77bcd20732 2 t f
+2091 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-27 11:13:48.314+08 2018-03-27 11:13:48.322+08 5aeba65e-e787-4076-8e03-a33698701ff2 2 t f
+1847 pressure 压强 Output \N 4 1000 0 KPa 2018-03-23 16:51:54.996+08 2018-06-29 10:32:04.914+08 6831367e-c4c8-407a-b2d6-3259490ee594 2 t f
+1776 anglex X方向角度 Output \N 4 30 -30 ° 2018-03-14 09:33:38.317+08 2018-03-23 15:33:40.196+08 0183e607-ae45-461a-84be-4b7fb9ef5951 2 t f
+1647 physicalvalue 位移 Output \N 4 200 0 mm 2018-01-24 11:34:50.395+08 2018-03-23 15:36:33.314+08 f564da79-91f3-4eff-8919-3501b7fb8046 2 t f
+1646 temperature 温度 Output \N \N \N \N ℃ 2018-01-24 11:34:50.392+08 2018-03-23 15:36:42.601+08 f564da79-91f3-4eff-8919-3501b7fb8046 2 t f
+1649 frequency 频率 Output \N \N \N \N \N \N Hz 2018-01-24 11:34:50.4+08 2018-01-24 11:34:50.4+08 f564da79-91f3-4eff-8919-3501b7fb8046 2 t f
+1641 frequency 频率 Output \N 3 \N \N Hz 2018-01-24 11:34:49.486+08 2018-03-02 15:23:32.321+08 b28ce81b-55a8-4e81-a4da-5a5b9d89ef29 2 t f
+2033 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 15:43:34.248+08 2018-03-26 15:43:34.253+08 d5370a7a-bba2-4997-9b8b-2cbbad5ebfa0 2 t f
+1848 humidity 湿度 Output \N \N \N 2 100 0 %RH 2018-03-23 17:05:18.739+08 2018-03-23 17:05:18.76+08 4ad74d57-806a-4fc6-82ec-37d782d99cab 2 t f
+2039 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 15:49:43.472+08 2018-03-26 15:49:43.479+08 8e638b0a-bbf4-4856-add9-c4db9b55b032 2 t f
+2043 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 16:00:25.281+08 2018-03-26 16:00:25.297+08 381fa9a7-3a18-49ce-91bb-b29ebd23429f 2 t f
+2045 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 16:13:24.835+08 2018-03-26 16:13:24.841+08 9da5e8ea-d055-48f8-97e4-5e64ccb9334c 2 t f
+2049 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 16:18:25.521+08 2018-03-26 16:18:25.53+08 9f6bcc66-e76f-49d5-87e4-fd469c6af1d0 2 t f
+2051 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 16:19:27.842+08 2018-03-26 16:19:27.857+08 9f6bcc66-e76f-49d5-87e4-fd469c6af1d0 2 t f
+2054 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 16:25:15.274+08 2018-03-26 16:25:15.279+08 81a87805-fc42-456d-960f-fb793999d631 2 t f
+2058 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 16:44:49.003+08 2018-03-26 16:44:49.015+08 642663da-bc66-430b-8367-41e2ae5ed8b2 2 t f
+2065 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 16:53:39.519+08 2018-03-26 16:53:39.53+08 f19d92bc-802e-4662-9419-3f664f0d7eba 2 t f
+2068 temperature 温度 Output \N 2 \N \N ℃ 2018-03-26 17:01:33.366+08 2018-03-26 17:02:39.19+08 606bd0b9-0694-4ff6-b0f2-f591ab56a3d4 2 t f
+2081 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-27 11:04:25.076+08 2018-03-27 11:04:25.088+08 50696e87-2214-4a20-b537-5530d2921ccd 2 t f
+2082 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-27 11:04:51.297+08 2018-03-27 11:04:51.307+08 50696e87-2214-4a20-b537-5530d2921ccd 2 t f
+2083 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-27 11:05:06.426+08 2018-03-27 11:05:06.433+08 50696e87-2214-4a20-b537-5530d2921ccd 2 t f
+2451 physicalvalue 轴力 Output \N 4 5000 -5000 kN 2018-07-19 09:35:55.188+08 2018-07-19 09:50:16.53+08 95f120f4-02d5-454d-a848-b2749f786d6a 2 t f
+2230 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-04-16 16:00:54.799+08 2018-04-16 16:00:54.799+08 81b14e1d-4d14-4741-b581-31e3c543a0f9 2 t f
+2232 am 温度 Output \N \N \N 3 \N \N mv 2018-04-16 16:00:54.804+08 2018-04-16 16:00:54.804+08 81b14e1d-4d14-4741-b581-31e3c543a0f9 2 t f
+2364 angley Y轴角度 Output \N \N \N 2 \N \N ° 2018-06-27 16:45:32.422+08 2018-06-27 16:45:32.46+08 b4e49abe-4948-4f36-978f-8804c1531ca1 2 t f
+2459 physicalvalue 轴力 Output \N 4 6000 -6000 kN 2018-07-19 09:35:56.58+08 2018-07-19 09:51:29.869+08 2858f0e6-c2cb-4a9a-9efd-46af31146b5b 2 t f
+2231 physicalvalue 荷载 Output \N 4 200 -200 kN 2018-04-16 16:00:54.802+08 2018-04-16 17:50:14.885+08 81b14e1d-4d14-4741-b581-31e3c543a0f9 2 t f
+2124 anglex X轴角度 Output \N 2 360 -180 ° 2018-04-03 12:41:11.897+08 2018-05-07 21:04:58.413+08 ea35c8e5-60d3-46c7-a819-b0557f2be17b 2 t f
+2280 测量值 测量值 Tag \N \N \N \N \N \N \N 2018-05-11 15:45:31.134+08 2018-05-11 15:45:31.134+08 c135c6c2-af77-42b4-9fd8-a684c629383e 2 t f
+2361 pressure 压力 Output \N 3 \N mH2O 2018-06-25 15:30:55.985+08 2018-06-28 15:35:34.896+08 16b92db5-4d33-4218-a6d5-7fa7c24194b0 2 t f
+2312 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-06-01 16:26:56.743+08 2018-06-01 16:26:56.743+08 1dcd37b0-1db2-401d-80d1-bef6c0f180d3 2 t f
+2326 pv 峰值 Output \N \N \N 5 \N \N 2018-06-11 10:36:50.396+08 2018-06-11 10:36:50.409+08 7685d43c-d87a-4eb4-88e0-1bde3d9eed5b 2 t f
+2452 physicalvalue 轴力 Output \N 4 6000 -6000 kN 2018-07-19 09:35:56.552+08 2018-07-19 09:51:38.355+08 b0422984-356d-4020-ab24-9dd7cdd4d8fd 2 t f
+2356 temperature 温度 Output \N \N \N 2 70 -25 ℃ 2018-06-25 11:28:59.867+08 2018-06-25 11:28:59.872+08 8c6c2c54-4620-4096-8773-6a3ee2ffc168 2 t f
+2357 angley Y方向角度 Output \N \N \N 4 30 -30 ° 2018-06-25 11:29:29.655+08 2018-06-25 11:29:29.664+08 8c6c2c54-4620-4096-8773-6a3ee2ffc168 2 t f
+2355 angley Y轴角度 Output \N 5 \N \N ° 2018-06-25 09:06:24.842+08 2018-06-25 14:43:41.006+08 7f0bdd9e-f9d0-4739-b764-18f3c615ca79 2 t f
+2404 totalBase 总轴距 Output \N 0 cm 2018-07-05 09:17:50.028+08 2018-07-24 10:33:11.904+08 a3e8fc6e-6dc8-4d65-b479-4b2ee719c712 5 t f
+2367 positiveflow 正向累计流量 Output \N 4 \N \N m3 2018-06-28 16:29:31.637+08 2018-06-28 16:58:51.987+08 419116d4-4614-4d66-bc30-ce2394eed251 2 t f
+2496 alarm 报警状态 Output \N \N \N \N \N \N 2018-07-28 17:16:38.158+08 2018-07-28 17:16:38.158+08 fe52923b-3bb6-4390-be5f-32733342b67b 1 t f
+2483 allRotationAngle 全回转角度 Output \N \N \N 2 360 -360 ° 2018-07-28 17:07:47.967+08 2018-07-28 17:07:47.967+08 fe52923b-3bb6-4390-be5f-32733342b67b 2 t f
+2453 am 幅值 Output \N \N \N 3 \N \N mv 2018-07-19 09:35:56.556+08 2018-07-19 09:35:56.556+08 b0422984-356d-4020-ab24-9dd7cdd4d8fd 2 t f
+2454 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-07-19 09:35:56.559+08 2018-07-19 09:35:56.559+08 b0422984-356d-4020-ab24-9dd7cdd4d8fd 2 t f
+2455 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-07-19 09:35:56.563+08 2018-07-19 09:35:56.563+08 b0422984-356d-4020-ab24-9dd7cdd4d8fd 2 t f
+2456 am 幅值 Output \N \N \N 3 \N \N mv 2018-07-19 09:35:56.571+08 2018-07-19 09:35:56.571+08 2858f0e6-c2cb-4a9a-9efd-46af31146b5b 2 t f
+2457 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-07-19 09:35:56.574+08 2018-07-19 09:35:56.574+08 2858f0e6-c2cb-4a9a-9efd-46af31146b5b 2 t f
+2458 temperature 温度 Output \N \N \N 3 \N \N ℃ 2018-07-19 09:35:56.577+08 2018-07-19 09:35:56.577+08 2858f0e6-c2cb-4a9a-9efd-46af31146b5b 2 t f
+2484 radius 幅度 Output \N 2 \N \N m 2018-07-28 17:08:25.72+08 2018-07-31 09:35:52.996+08 fe52923b-3bb6-4390-be5f-32733342b67b 2 t f
+2490 windSpeed 风速 Output \N 2 \N \N m/s 2018-07-28 17:12:27.533+08 2018-07-31 09:37:12.574+08 fe52923b-3bb6-4390-be5f-32733342b67b 2 t f
+2517 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-07-31 15:17:07.544+08 2018-07-31 15:17:07.544+08 b69bda25-731f-49db-b199-83207febe2ed 2 t f
+2518 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-07-31 15:17:28.502+08 2018-07-31 15:17:28.502+08 b69bda25-731f-49db-b199-83207febe2ed 2 t f
+2521 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-07-31 15:20:12.273+08 2018-07-31 15:20:12.273+08 73e248c9-5515-4482-ac0a-af10af977c95 2 t f
+2530 humidity 湿度 Output \N \N \N 2 100 0 %RH 2018-07-31 17:14:43.983+08 2018-07-31 17:14:43.983+08 5066bc97-d314-4800-891f-b7b4031c1ffc 2 t f
+2549 y Y方向角度 Output \N \N \N 2 \N \N ° 2018-08-02 10:35:48.086+08 2018-08-02 10:35:48.086+08 82623747-98d9-4dfa-9a9a-08188d0311e9 2 t f
+2550 force 轴力 Output \N \N \N 2 \N \N KN 2018-08-02 10:35:48.094+08 2018-08-02 10:35:48.094+08 82623747-98d9-4dfa-9a9a-08188d0311e9 2 t f
+2551 x X方向角度 Output \N \N \N 2 \N \N ° 2018-08-02 10:35:48.099+08 2018-08-02 10:35:48.099+08 82623747-98d9-4dfa-9a9a-08188d0311e9 2 t f
+2313 physicalvalue 锚杆拉力 Output \N 3 \N \N με 2018-06-01 16:26:56.749+08 2018-12-18 17:00:16.75+08 1dcd37b0-1db2-401d-80d1-bef6c0f180d3 2 t f
+1786 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-14 15:32:30.963+08 2018-03-14 15:32:30.963+08 7d5454c7-afcf-4af8-a34c-03fd5ec820f8 2 t f
+1787 temperature 温度 Output \N \N \N 3 60 -25 ℃ 2018-03-14 15:32:30.966+08 2018-03-14 15:32:30.966+08 7d5454c7-afcf-4af8-a34c-03fd5ec820f8 2 t f
+1789 temperature 温度 Output \N 3 40 0 ℃ 2018-03-14 15:32:44.481+08 2018-03-14 15:32:44.481+08 e2e4c206-ed4b-4fae-8755-5dc970720c89 2 t f
+1790 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-14 15:32:44.485+08 2018-03-14 15:32:44.485+08 e2e4c206-ed4b-4fae-8755-5dc970720c89 2 t f
+1803 temperature 温度 Output \N \N \N 3 60 -25 ℃ 2018-03-14 15:54:05.912+08 2018-03-14 15:54:05.912+08 d6f7c1bb-56ff-4e70-b237-b1c8cfd826ac 2 t f
+2239 physicalvalue 荷载 Output \N 4 300 -300 kN 2018-04-16 16:01:22.165+08 2018-04-16 17:50:30.527+08 2f72ef62-1d3b-4c4b-9308-5abb39a919d0 2 t f
+2236 physicalvalue 荷载 Output \N 4 300 -300 kN 2018-04-16 16:01:22.15+08 2018-04-16 17:50:35.848+08 ae06a9a5-6f60-4dae-9983-cc4677c08d97 2 t f
+2036 physicalvalue 水压 Output \N 4 2 0 MPa 2018-03-26 15:44:45.952+08 2018-03-26 15:45:12.696+08 d5370a7a-bba2-4997-9b8b-2cbbad5ebfa0 2 t f
+1801 physicalvalue 应变 Output \N 3 1000 -1500 με 负数为压力 正数为张力 2018-03-14 15:54:05.905+08 2018-03-23 14:21:47.41+08 d6f7c1bb-56ff-4e70-b237-b1c8cfd826ac 2 t f
+1802 Resistor1 电阻1 Output \N 3 \N \N Ω 2018-03-14 15:54:05.909+08 2018-03-23 14:29:24.76+08 d6f7c1bb-56ff-4e70-b237-b1c8cfd826ac 2 t f
+1849 temperature 温度 Output \N \N \N 2 120 -40 ℃ 2018-03-23 17:05:46.825+08 2018-03-23 17:05:46.829+08 4ad74d57-806a-4fc6-82ec-37d782d99cab 2 t f
+2048 physicalvalue 水压 Output \N \N \N 4 0.6 0 MPa 2018-03-26 16:15:15.445+08 2018-03-26 16:15:15.451+08 9da5e8ea-d055-48f8-97e4-5e64ccb9334c 2 t f
+2055 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 16:25:37.74+08 2018-03-26 16:25:37.751+08 81a87805-fc42-456d-960f-fb793999d631 2 t f
+2059 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 16:45:16.357+08 2018-03-26 16:45:16.363+08 642663da-bc66-430b-8367-41e2ae5ed8b2 2 t f
+2060 physicalvalue 沉降 Output \N \N \N 3 100 0 mm 2018-03-26 16:46:04.042+08 2018-03-26 16:46:04.049+08 642663da-bc66-430b-8367-41e2ae5ed8b2 2 t f
+2064 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 16:52:01.282+08 2018-03-26 16:52:01.289+08 f19d92bc-802e-4662-9419-3f664f0d7eba 2 t f
+2066 physicalvalue 沉降 Output \N \N \N 3 200 0 mm 2018-03-26 16:54:04.832+08 2018-03-26 16:54:04.838+08 f19d92bc-802e-4662-9419-3f664f0d7eba 2 t f
+2125 angley Y轴角度 Output \N 2 360 -180 ° 2018-04-03 13:47:36.365+08 2018-05-07 21:05:17.748+08 ea35c8e5-60d3-46c7-a819-b0557f2be17b 2 t f
+2072 pressure 压力 Output \N 1 100 0.1 MPa 2018-03-27 10:51:06.129+08 2018-03-27 10:51:48.157+08 a266afb7-b532-4336-b199-cb33af206062 2 t f
+2074 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-27 10:58:03.297+08 2018-03-27 10:58:03.316+08 0428f647-9944-415c-b6f0-93e7329d31c9 2 t f
+2075 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-27 10:58:19.357+08 2018-03-27 10:58:19.363+08 0428f647-9944-415c-b6f0-93e7329d31c9 2 t f
+2078 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-27 11:01:29.588+08 2018-03-27 11:01:29.594+08 6ebb2c0f-06fa-4b77-b028-4818465a7019 2 t f
+2085 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-27 11:08:11.385+08 2018-03-27 11:08:11.39+08 533e4f1c-c95f-46b6-9d76-1e77bcd20732 2 t f
+2090 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-27 11:13:35.775+08 2018-03-27 11:13:35.793+08 5aeba65e-e787-4076-8e03-a33698701ff2 2 t f
+2529 humidity 湿度 Output \N \N \N 2 100 0 %RH 2018-07-31 17:10:33.54+08 2018-07-31 17:10:33.54+08 292bd1e7-c27c-4437-a899-3c61485b89e3 2 t f
+1791 physicalvalue 水压 Output \N 3 6 0 Mpa 2018-03-14 15:32:44.487+08 2018-03-29 15:31:00.003+08 e2e4c206-ed4b-4fae-8755-5dc970720c89 2 t f
+1788 physicalvalue 应变 Output \N 3 1200 -1800 με 负数为压力 正数为张力 2018-03-14 15:32:30.973+08 2018-03-29 15:31:17.87+08 7d5454c7-afcf-4af8-a34c-03fd5ec820f8 2 t f
+2497 peccancy 违章状态 Output \N \N \N \N \N \N 2018-07-28 17:17:25.141+08 2018-07-28 17:17:25.141+08 fe52923b-3bb6-4390-be5f-32733342b67b 1 t f
+2233 am 幅值 Output \N \N \N 3 \N \N mv 2018-04-16 16:01:22.14+08 2018-04-16 16:01:22.14+08 ae06a9a5-6f60-4dae-9983-cc4677c08d97 2 t f
+2234 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 16:01:22.144+08 2018-04-16 16:01:22.144+08 ae06a9a5-6f60-4dae-9983-cc4677c08d97 2 t f
+2235 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-04-16 16:01:22.147+08 2018-04-16 16:01:22.147+08 ae06a9a5-6f60-4dae-9983-cc4677c08d97 2 t f
+2237 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 16:01:22.157+08 2018-04-16 16:01:22.157+08 2f72ef62-1d3b-4c4b-9308-5abb39a919d0 2 t f
+2238 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-04-16 16:01:22.16+08 2018-04-16 16:01:22.16+08 2f72ef62-1d3b-4c4b-9308-5abb39a919d0 2 t f
+2485 height 高度 Output \N 2 \N \N m 2018-07-28 17:09:03.634+08 2018-07-31 09:36:02.265+08 fe52923b-3bb6-4390-be5f-32733342b67b 2 t f
+2281 length 位移 Output \N 3 50 -50 mm 2018-05-16 17:44:54.897+08 2018-05-16 17:53:33.598+08 42c99fb8-8f40-4693-952f-7124b9f38cda 2 t f
+2310 length 液位 Output \N 2 \N \N mm 2018-05-31 14:37:08.565+08 2018-05-31 14:39:15.734+08 93a73320-1cb3-4b2f-a8be-f31d131ba881 2 t f
+2282 length 位移 Output \N 5 50 -50 mm 2018-05-16 17:44:54.914+08 2018-06-05 11:15:08.837+08 2e6e8c47-b162-44b0-802f-689c0a71fb2c 2 t f
+2329 distance 距离 Output \N \N \N 4 \N \N m 2018-06-13 17:01:20.458+08 2018-06-13 17:01:20.465+08 66df2f89-5584-46b3-ad9e-0d1932fcf096 2 t f
+2358 anglex X方向角度 Output \N \N \N 4 -30 -30 ° 2018-06-25 11:30:05.22+08 2018-06-25 11:30:05.228+08 8c6c2c54-4620-4096-8773-6a3ee2ffc168 2 t f
+2362 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-06-27 14:05:17.971+08 2018-06-27 14:05:17.991+08 fa9efaaf-b27b-4f77-90c3-fa0f903666ed 2 t f
+2488 safeLoad 安全吊重 Output \N 2 \N \N t 2018-07-28 17:10:54.982+08 2018-07-31 09:36:14.041+08 fe52923b-3bb6-4390-be5f-32733342b67b 2 t f
+2444 physicalvalue 轴力 Output \N 4 5000 -5000 kN 2018-07-19 09:35:55.155+08 2018-07-19 09:50:06.643+08 5a0e1b09-57f7-4bcc-9f02-2ed2ac5f3d7e 2 t f
+2407 carType 车辆类型 Output \N 0 2018-07-05 09:23:00.573+08 2018-07-24 10:32:57.132+08 a3e8fc6e-6dc8-4d65-b479-4b2ee719c712 5 t f
+2405 cmsLength 车长 Output \N 0 cm 2018-07-05 09:21:46.112+08 2018-07-24 10:33:05.854+08 a3e8fc6e-6dc8-4d65-b479-4b2ee719c712 5 t f
+2095 frequency 频率 Output \N 3 \N \N Hz 2018-03-27 11:29:33.134+08 2018-07-31 15:19:52.119+08 79cc1497-99b7-4eb4-bbb5-b69192903d18 2 t f
+2525 length 位移 Output \N \N \N 5 10 0 mm 2018-07-31 16:21:22.099+08 2018-07-31 16:21:22.099+08 dd1508e1-c94d-46a9-9a86-08a80d670853 2 t f
+2526 temperature 温度 Output \N \N \N 2 120 -40 ℃ 2018-07-31 17:09:04.478+08 2018-07-31 17:09:04.478+08 b5a575d9-25af-47ce-8a43-89a35317f2a1 2 t f
+2531 temperature 温度 Output \N \N \N 2 120 -40 ℃ 2018-07-31 17:15:11.989+08 2018-07-31 17:15:11.989+08 5066bc97-d314-4800-891f-b7b4031c1ffc 2 t f
+2532 pressure 压强 Variable \N \N \N 4 1000 0 KPa 2018-07-31 17:24:50.297+08 2018-07-31 17:24:50.297+08 95686247-9ee5-41d3-9cc8-08fa377da8cc 2 t f
+2556 speed 风速 Output \N 2 m/s 2018-08-02 10:37:02.612+08 2018-12-29 10:17:00.09+08 812c58c6-4cd2-48fd-942a-2024f91035bb 2 t f
+2555 direction 风向 Output \N 2 ° 2018-08-02 10:37:02.607+08 2018-12-29 10:16:54.611+08 812c58c6-4cd2-48fd-942a-2024f91035bb 2 t f
+2554 pm10 PM10 Output \N 2 ug/m³ 2018-08-02 10:37:02.602+08 2018-12-29 10:16:46.813+08 812c58c6-4cd2-48fd-942a-2024f91035bb 2 t f
+2037 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 15:49:09+08 2018-03-26 15:49:09.007+08 8e638b0a-bbf4-4856-add9-c4db9b55b032 2 t f
+1661 state 路面潮湿度 Output \N 0 \N \N \N 2018-01-30 15:49:35.491+08 2018-01-30 15:54:37.366+08 ef29b89e-1964-40d7-b8c8-489d9562ce9d 1 t f
+1662 smoke 烟雾浓度 Output \N \N \N 1 \N \N ppm 2018-01-30 17:26:52.479+08 2018-01-30 17:26:52.479+08 500186ab-cb13-4844-b7d8-ed0fa7a17c9b 2 t f
+1663 windSpeed 风速 Output \N \N \N 1 30 0 m/s 2018-01-30 17:38:49.924+08 2018-01-30 17:38:49.924+08 70d4d474-0524-459c-9144-237922982ec3 2 t f
+1606 pressure 压强 Output \N 5 0.2 0 MPa 2018-01-24 11:19:06.365+08 2018-02-02 15:41:36.322+08 09048659-5be8-43d3-9189-61f71c225e04 2 t f
+1668 level 液位 Output \N \N \N 1 2000 0.2 mm 2018-02-05 14:54:12.674+08 2018-02-05 14:54:12.674+08 0d2a48dd-a7d4-4752-9e64-d17ca8555ca8 2 t f
+1669 test test Variable \N \N 50 \N 100 10 aaaa aaaaa 2018-02-06 16:34:19.408+08 2018-02-06 16:34:19.408+08 5c7af394-fc34-459a-bf95-62b91eafed29 1 t f
+1670 test2 test2 Variable \N \N aaaa \N \N \N aaaaa aaaaaa 2018-02-06 16:34:19.414+08 2018-02-06 16:34:19.414+08 5c7af394-fc34-459a-bf95-62b91eafed29 5 t f
+1792 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-14 15:32:53.602+08 2018-03-14 15:32:53.602+08 68518b11-55c5-4191-8116-1d27ee89268e 2 t f
+1794 temperature 温度 Output \N 3 90 -30 ℃ 2018-03-14 15:32:53.614+08 2018-03-14 15:32:53.614+08 68518b11-55c5-4191-8116-1d27ee89268e 2 t f
+1678 value 位移 Output \N \N \N 3 9999999 -999999 mm 2018-02-07 16:40:02.714+08 2018-02-07 16:40:02.714+08 b767a3ea-663e-402a-82c0-ee964abae581 2 t f
+1690 lvdt 位移 Output \N 3 400 -400 mm 2018-02-28 16:48:45.386+08 2018-02-28 16:50:04.317+08 ad956aa4-9d9f-414e-aa8b-d48cb81e9a60 2 t f
+1679 value 应变 Output \N \N \N 1 3000 0 με 2018-02-11 16:58:21.743+08 2018-02-11 16:58:21.743+08 a31f033d-a4ca-4dd4-8e20-5180f376df79 2 t f
+1691 lvdt 位移 Output \N 3 450 -450 mm 2018-02-28 16:48:46.017+08 2018-02-28 16:50:24.375+08 1f12ae0a-fb0a-497e-af70-8e53094543a1 2 t f
+1692 lvdt 位移 Output \N 3 500 -500 mm 2018-02-28 16:48:46.687+08 2018-02-28 16:50:45.798+08 342ac320-e429-49f0-b647-e4d7e5f4b545 2 t f
+362 value 水位 Output \N 2 1000 0 mm 2017-11-17 09:45:45.979+08 2018-02-11 17:02:55.962+08 5e270a72-9da6-4029-98ae-eb0326ad0d97 2 t f
+1680 value 角度 Output \N 3 15 -15 ° 2018-02-11 17:07:24.777+08 2018-02-11 17:09:47.5+08 bd051793-11f0-4c75-bb85-912a2c4e022b 2 t f
+1681 value 角度 Output \N \N \N 2 15 -15 ° 2018-02-11 17:16:18.666+08 2018-02-11 17:16:18.666+08 cf2e6e9e-b046-437d-a041-4461ff0be3e3 2 t f
+1675 value 位移 Output \N 2 25 -25 mm 2018-02-06 17:32:56.524+08 2018-02-12 10:25:15.941+08 dcbc00f3-d440-4b2e-b869-c6e2e602316c 2 t f
+1674 value 角度 Output \N 3 15 -15 ° 2018-02-06 17:17:32.195+08 2018-02-12 10:25:27.362+08 363a580c-77e4-4464-8c92-4ee9c989358f 2 t f
+1687 lvdt 位移 Output \N \N \N 3 50 -50 mm 2018-02-28 16:21:14.328+08 2018-02-28 16:21:14.328+08 479ab844-11f3-43d2-b8da-1b5e32abf466 2 t f
+1686 lvdt 位移 Output \N 3 100 -100 mm 2018-02-28 16:21:13.695+08 2018-02-28 16:22:17.673+08 c73c5915-cc27-425f-b6e9-288aa74c6fd4 2 t f
+1685 lvdt 位移 Output \N 3 150 -150 mm 2018-02-28 16:21:13.125+08 2018-02-28 16:22:44.015+08 d33fe3ee-6bc4-44c8-bdf0-4e36e569ff33 2 t f
+1684 lvdt 位移 Output \N 3 200 -200 mm 2018-02-28 16:21:12.176+08 2018-02-28 16:23:11.14+08 9fb57bf4-6e35-4918-ac61-3f04bf81e691 2 t f
+1683 lvdt 位移 Output \N 3 250 -250 mm 2018-02-28 16:01:53.174+08 2018-02-28 16:23:34.471+08 af49da8c-cb29-4435-974c-d96d01e992bc 2 t f
+1688 lvdt 位移 Output \N 3 300 -300 mm 2018-02-28 16:48:43.055+08 2018-02-28 16:49:22.695+08 ab5ddc7a-c116-496f-9658-12522697a1d0 2 t f
+1689 lvdt 位移 Output \N 3 350 -350 mm 2018-02-28 16:48:44.79+08 2018-02-28 16:49:44.154+08 e277560c-2da5-499d-a3eb-99ed74f642d9 2 t f
+2127 length 沉降 Output \N \N \N 3 \N \N mm 2018-04-04 16:50:17.59+08 2018-04-04 16:50:17.596+08 e59809ab-9197-4c91-8a1b-041a187eafc0 2 t f
+1592 distance 距离 Output \N 2 80 0 m 2018-01-24 11:05:24.813+08 2018-03-21 18:06:06.757+08 b9bb6058-9981-44a3-8688-1df4dc7f042b 2 t f
+2041 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 15:59:39.054+08 2018-03-26 15:59:39.06+08 381fa9a7-3a18-49ce-91bb-b29ebd23429f 2 t f
+1660 temperature 温度 Output \N 2 50 -15 ℃ 2018-01-26 16:34:44.314+08 2018-03-23 15:17:49.752+08 b9bb6058-9981-44a3-8688-1df4dc7f042b 2 t f
+1850 temperature 温度 Output \N \N \N 2 120 -40 ℃ 2018-03-23 17:37:51.441+08 2018-03-23 17:37:51.461+08 798127c2-0250-443c-8627-ac234388ae50 2 t f
+1665 pressure 压强 Output \N 4 2000 0 KPa 2018-02-05 11:21:34.558+08 2018-06-29 10:32:56.998+08 cc7aaee4-9939-40cc-b584-234221061c01 2 t f
+1667 pressure 压强 Output \N 5 500 0 KPa 2018-02-05 11:22:03.79+08 2018-06-29 10:33:45.043+08 6c1400a4-ffcc-4f86-955b-dad07fb58c17 2 t f
+2046 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 16:13:42.768+08 2018-03-26 16:13:42.773+08 9da5e8ea-d055-48f8-97e4-5e64ccb9334c 2 t f
+2057 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 16:44:21.564+08 2018-03-26 16:44:21.571+08 642663da-bc66-430b-8367-41e2ae5ed8b2 2 t f
+2071 length 距离 Output \N \N \N 5 \N \N mm 2018-03-26 17:36:26.28+08 2018-03-26 17:36:26.28+08 0e3fff68-6973-4327-9be6-6d5172b7ad80 2 t f
+2089 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-27 11:13:17.959+08 2018-03-27 11:13:17.965+08 5aeba65e-e787-4076-8e03-a33698701ff2 2 t f
+1793 physicalvalue 压力 Output \N 3 10 0 MPa 2018-03-14 15:32:53.61+08 2018-03-29 15:30:49.765+08 68518b11-55c5-4191-8116-1d27ee89268e 2 t f
+1659 1dsfdsfdffffffffffff 2 Variable \N 1 0 2 1 \N 2018-01-26 13:57:56.089+08 2018-04-03 14:23:30.347+08 3825f4a5-cc05-4d5a-860a-c277ff0c1cc6 1 t f
+2228 physicalvalue 荷载 Output \N 4 200 -200 kN 2018-04-16 16:00:54.79+08 2018-04-16 17:50:10.551+08 ad6a8655-acd4-4092-ac47-6d7e96cdb2a2 2 t f
+1682 length 液位 Output \N 3 300 0 mm 2018-02-27 09:46:30.768+08 2018-04-17 11:51:44.705+08 4763af57-7fa9-48b5-a8f2-db469fce1e1a 2 t f
+2315 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-06-01 16:29:15.01+08 2018-06-01 16:29:15.01+08 164546bd-01df-4cb9-a0f0-27590351aa74 2 t f
+2330 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2018-06-14 10:35:46.52+08 2018-06-14 10:35:46.527+08 6be3220f-3cb0-4081-8ef4-a7c51cecda48 5 t f
+1666 pressure 压强 Output \N 5 200 0 KPa 2018-02-05 11:21:49.796+08 2018-06-29 10:34:36.811+08 69df2525-998a-4f00-a7f5-857a888eb1b9 2 t f
+1664 pressure 压强 Output \N 4 1000 0 KPa 2018-02-05 11:21:19.481+08 2018-06-29 10:35:21.892+08 88d7fc54-bcbf-4532-839e-0dc916df537e 2 t f
+2369 temperature 温度 Output \N \N \N 2 100 -40 ℃ 2018-07-02 10:37:28.27+08 2018-07-02 10:37:28.27+08 e9b6e859-1dc9-499b-8656-99edd12b4157 2 t f
+2314 physicalvalue 应变值 Output \N 3 \N \N με 2018-06-01 16:29:15.003+08 2018-12-18 14:33:48.58+08 164546bd-01df-4cb9-a0f0-27590351aa74 2 t f
+2460 load 载重 Output \N \N \N 2 \N \N \N 2018-07-23 15:18:45.589+08 2018-07-23 15:18:45.596+08 55950607-45e9-4bdd-a586-388468bf4669 2 t f
+2461 range 幅度 Output \N \N \N 2 \N \N 2018-07-23 15:19:10.919+08 2018-07-23 15:19:10.935+08 55950607-45e9-4bdd-a586-388468bf4669 2 t f
+2462 speed 风速 Output \N \N \N 2 \N \N m/s 2018-07-23 15:19:36.781+08 2018-07-23 15:19:36.793+08 55950607-45e9-4bdd-a586-388468bf4669 2 t f
+2463 angle 角度 Output \N \N \N 2 \N \N ° 2018-07-23 15:20:07.514+08 2018-07-23 15:20:07.519+08 55950607-45e9-4bdd-a586-388468bf4669 2 t f
+2042 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 16:00:03.747+08 2018-03-26 16:00:03.753+08 381fa9a7-3a18-49ce-91bb-b29ebd23429f 2 t f
+2044 physicalvalue 水压 Output \N \N \N 4 0.8 0 MPa 2018-03-26 16:01:08.854+08 2018-03-26 16:01:08.862+08 381fa9a7-3a18-49ce-91bb-b29ebd23429f 2 t f
+1799 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-14 15:53:54.011+08 2018-03-14 15:53:54.011+08 146da222-f300-4109-b71f-337ad767c336 2 t f
+1800 temperature 温度 Output \N \N \N 3 60 -25 ℃ 2018-03-14 15:53:54.016+08 2018-03-14 15:53:54.016+08 146da222-f300-4109-b71f-337ad767c336 2 t f
+1804 frequency 频率 Output \N 3 \N \N HZ 2018-03-14 16:17:20.819+08 2018-03-14 16:17:20.819+08 5bab107f-be1b-4c0d-a2cf-207aae73d273 2 t f
+1806 temperature 温度 Output \N 2 80 -20 ℃ 2018-03-14 16:17:20.828+08 2018-03-14 16:17:20.828+08 5bab107f-be1b-4c0d-a2cf-207aae73d273 2 t f
+2050 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-26 16:19:06.174+08 2018-03-26 16:19:06.182+08 9f6bcc66-e76f-49d5-87e4-fd469c6af1d0 2 t f
+1805 physicalvalue 应变 Output \N 3 3000 -3000 με 2018-03-14 16:17:20.824+08 2018-03-23 11:00:02.261+08 5bab107f-be1b-4c0d-a2cf-207aae73d273 2 t f
+1798 physicalvalue 应变 Output \N 3 800 -1200 με 负数为压力 正数为张力 2018-03-14 15:53:54.005+08 2018-03-23 14:22:02.512+08 146da222-f300-4109-b71f-337ad767c336 2 t f
+1851 humidity 湿度 Output \N \N \N 2 100 0 %RH 2018-03-23 17:38:26.254+08 2018-03-23 17:38:26.261+08 798127c2-0250-443c-8627-ac234388ae50 2 t f
+2052 physicalvalue 水压 Output \N \N \N 4 0.4 0 MPa 2018-03-26 16:20:10.266+08 2018-03-26 16:20:10.272+08 9f6bcc66-e76f-49d5-87e4-fd469c6af1d0 2 t f
+2061 anglex x方向倾角 Output \N \N \N 6 \N \N ° 2018-03-26 16:47:53.779+08 2018-03-26 16:47:53.779+08 ac2bc3da-4bf9-435b-b48f-d06f4cabd50a 2 t f
+2062 angley y方向倾角 Output \N \N \N 6 \N \N ° 2018-03-26 16:47:53.786+08 2018-03-26 16:47:53.786+08 ac2bc3da-4bf9-435b-b48f-d06f4cabd50a 2 t f
+2063 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-03-26 16:51:26.339+08 2018-03-26 16:51:26.347+08 f19d92bc-802e-4662-9419-3f664f0d7eba 2 t f
+2069 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-26 17:01:49.28+08 2018-03-26 17:01:49.289+08 606bd0b9-0694-4ff6-b0f2-f591ab56a3d4 2 t f
+2070 physicalvalue 位移 Output \N \N \N 3 100 0 mm 2018-03-26 17:02:22.954+08 2018-03-26 17:02:22.959+08 606bd0b9-0694-4ff6-b0f2-f591ab56a3d4 2 t f
+2128 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-04-08 14:00:40.999+08 2018-04-08 14:00:40.999+08 8e60936a-d379-48c0-bab9-7f9d02c1a5f0 2 t f
+2129 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-04-08 14:00:41.005+08 2018-04-08 14:00:41.005+08 8e60936a-d379-48c0-bab9-7f9d02c1a5f0 2 t f
+2131 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-04-08 14:00:41.042+08 2018-04-08 14:00:41.042+08 5d266e86-fadf-4335-843c-a721ecb814c3 2 t f
+2132 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-04-08 14:00:41.046+08 2018-04-08 14:00:41.046+08 5d266e86-fadf-4335-843c-a721ecb814c3 2 t f
+2134 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-04-08 14:06:24.503+08 2018-04-08 14:06:24.503+08 c160a4b0-d8da-4e66-ae49-305ecdd5ca48 2 t f
+2135 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-04-08 14:06:24.506+08 2018-04-08 14:06:24.506+08 c160a4b0-d8da-4e66-ae49-305ecdd5ca48 2 t f
+2137 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-04-08 14:06:24.527+08 2018-04-08 14:06:24.527+08 b446a06d-eb4f-4b6f-98ff-4eba1f2dd35a 2 t f
+2138 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-04-08 14:06:24.529+08 2018-04-08 14:06:24.529+08 b446a06d-eb4f-4b6f-98ff-4eba1f2dd35a 2 t f
+2370 PM25 PM2.5浓度 Output \N \N \N \N \N \N ug/m3 2018-07-02 11:17:44.849+08 2018-07-02 11:17:44.853+08 23c218cd-7c9e-4ad1-bc78-2132a932fc9c 2 t f
+2241 physicalvalue 荷载 Output \N 4 400 -400 kN 2018-04-16 16:14:50.374+08 2018-04-16 17:50:51.204+08 c86b0543-8d73-4c04-95d7-aa52f68d8c67 2 t f
+2136 physicalvalue 压强 Output \N 4 0.2 0 Mpa 2018-04-08 14:06:24.52+08 2018-04-08 14:16:18.813+08 c160a4b0-d8da-4e66-ae49-305ecdd5ca48 2 t f
+2139 physicalvalue 压强 Output \N 4 0.2 0 MPa 2018-04-08 14:06:24.531+08 2018-04-08 14:16:24.408+08 b446a06d-eb4f-4b6f-98ff-4eba1f2dd35a 2 t f
+2133 physicalvalue 压强 Output \N 4 0.1 0 MPa 2018-04-08 14:00:41.051+08 2018-04-08 14:16:37.722+08 5d266e86-fadf-4335-843c-a721ecb814c3 2 t f
+2130 physicalvalue 压强 Output \N 4 0.1 0 Mpa 2018-04-08 14:00:41.033+08 2018-04-08 14:16:43.73+08 8e60936a-d379-48c0-bab9-7f9d02c1a5f0 2 t f
+2242 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 16:14:50.378+08 2018-04-16 16:14:50.378+08 c86b0543-8d73-4c04-95d7-aa52f68d8c67 2 t f
+2243 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-04-16 16:14:50.387+08 2018-04-16 16:14:50.387+08 c86b0543-8d73-4c04-95d7-aa52f68d8c67 2 t f
+2244 am 温度 Output \N \N \N 3 \N \N mv 2018-04-16 16:14:50.392+08 2018-04-16 16:14:50.392+08 c86b0543-8d73-4c04-95d7-aa52f68d8c67 2 t f
+2245 am 幅值 Output \N \N \N 3 \N \N mv 2018-04-16 16:14:50.488+08 2018-04-16 16:14:50.488+08 b5c9d48e-6b32-41c8-ad53-93f60da390b1 2 t f
+2246 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-04-16 16:14:50.507+08 2018-04-16 16:14:50.507+08 b5c9d48e-6b32-41c8-ad53-93f60da390b1 2 t f
+2247 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-04-16 16:14:51.085+08 2018-04-16 16:14:51.085+08 b5c9d48e-6b32-41c8-ad53-93f60da390b1 2 t f
+2248 physicalvalue 荷载 Output \N 4 400 -400 kN 2018-04-16 16:14:51.122+08 2018-04-16 17:51:00.657+08 b5c9d48e-6b32-41c8-ad53-93f60da390b1 2 t f
+2258 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2018-04-18 17:03:02.791+08 2018-04-18 17:03:02.798+08 08d15c9c-009a-49dd-bf90-c1c2b55a229d 5 t f
+2284 test 11111 Output \N \N \N \N \N \N \N 2018-05-18 14:30:30.283+08 2018-05-18 14:30:30.289+08 c135c6c2-af77-42b4-9fd8-a684c629383e 1 t f
+2316 physicalvalue 加速度 Output \N \N \N \N \N \N \N 2018-06-04 18:00:22.406+08 2018-06-04 18:00:22.406+08 b94c6303-8f36-416c-9210-9a8bbeb2d8e9 5 t f
+2317 temperature 温度 Output \N 2 120 -40 ℃ 2018-06-05 14:53:28.371+08 2018-06-05 14:53:42.868+08 e2359d98-6bbd-4d7e-b370-d8c81c765dc0 2 t f
+2331 lmin \N Output \N \N \N \N \N \N \N 2018-06-15 17:09:27.716+08 2018-06-15 17:09:27.716+08 50c50ca6-2fa4-4c78-903e-78fccdee6100 2 t f
+2332 lmax Output \N \N \N \N \N \N 2018-06-15 17:09:27.724+08 2018-06-15 17:09:27.724+08 50c50ca6-2fa4-4c78-903e-78fccdee6100 2 t f
+2376 TVOC TVOC浓度 Output \N 3 \N \N mg/m3 2018-07-02 11:24:42.728+08 2018-08-30 10:40:42.791+08 23c218cd-7c9e-4ad1-bc78-2132a932fc9c 2 t f
+2408 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-07-05 14:21:10.276+08 2018-07-05 14:21:10.276+08 ead31896-f035-4ed5-8732-526210a6bfa2 2 t f
+2409 humidity 湿度 Output \N \N \N 2 \N \N % 2018-07-05 14:21:10.295+08 2018-07-05 14:21:10.295+08 ead31896-f035-4ed5-8732-526210a6bfa2 2 t f
+2464 height 高度 Output \N \N \N 2 \N \N m 2018-07-23 15:20:38.534+08 2018-07-23 15:20:38.541+08 55950607-45e9-4bdd-a586-388468bf4669 2 t f
+2470 noise 噪声 Output \N \N \N 2 \N \N dB 2018-07-23 15:27:12.264+08 2018-07-23 15:27:12.269+08 4c99b35d-021c-4e0f-a014-5516ee92a8b2 2 t f
+2475 y Y方向角度 Output \N \N \N 2 \N \N ° 2018-07-23 15:32:41.024+08 2018-07-23 15:32:41.03+08 dd168476-c9b6-4bdf-802c-dd55353c4f42 2 t f
+2478 y Y方向角度 Output \N \N \N 2 \N \N ° 2018-07-23 15:35:25.331+08 2018-07-23 15:35:25.337+08 dafbdb25-384d-4431-b8b4-13396a4c781b 2 t f
+2333 laeq Output \N \N \N \N 2018-06-15 17:09:27.731+08 2018-07-24 17:59:12.205+08 50c50ca6-2fa4-4c78-903e-78fccdee6100 2 t f
+2321 length 距离 Output \N 4 30000 0 mm 2018-06-07 14:26:49.13+08 2018-12-20 09:24:45.187+08 f259b7e6-928b-4ef0-8752-bfdf1a834dc4 2 t f
+1698 liquidLevel 沉降 Output \N \N \N 3 \N \N mm 2018-03-01 14:30:17.239+08 2018-03-01 14:30:17.247+08 b38d50f8-60f9-44b9-865d-647810e416cf 2 t f
+2472 y Y方向角度 Output \N \N \N 2 \N \N ° 2018-07-23 15:30:21.742+08 2018-07-23 15:30:21.754+08 b41fcafa-5351-45f4-9151-991053b2229e 2 t f
+2473 force 轴力 Output \N \N \N 2 \N \N KN 2018-07-23 15:30:52.428+08 2018-07-23 15:30:52.433+08 b41fcafa-5351-45f4-9151-991053b2229e 2 t f
+2080 physicalvalue 位移 Output \N \N \N 3 200 0 mm 2018-03-27 11:02:21.097+08 2018-03-27 11:02:21.11+08 6ebb2c0f-06fa-4b77-b028-4818465a7019 2 t f
+2086 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-27 11:08:29.073+08 2018-03-27 11:08:29.08+08 533e4f1c-c95f-46b6-9d76-1e77bcd20732 2 t f
+2093 temperature 温度 Output \N \N \N 2 120 -40 ℃ 2018-03-27 11:24:29.61+08 2018-03-27 11:24:29.616+08 fb9e1eb8-cd2a-4c4c-8395-78cf468ad98a 2 t f
+2094 humidity 湿度 Output \N \N \N 2 100 0 %RH 2018-03-27 11:24:54.298+08 2018-03-27 11:24:54.305+08 fb9e1eb8-cd2a-4c4c-8395-78cf468ad98a 2 t f
+2140 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-04-08 14:06:25.444+08 2018-04-08 14:06:25.444+08 c5b8fbc8-aee5-43cd-a2e8-6f48cfe463e5 2 t f
+2141 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-04-08 14:06:25.448+08 2018-04-08 14:06:25.448+08 c5b8fbc8-aee5-43cd-a2e8-6f48cfe463e5 2 t f
+2143 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-04-08 14:06:25.46+08 2018-04-08 14:06:25.46+08 8b5d7571-fbed-4a64-8ae5-158979e259d4 2 t f
+2144 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-04-08 14:06:25.463+08 2018-04-08 14:06:25.463+08 8b5d7571-fbed-4a64-8ae5-158979e259d4 2 t f
+2474 x X方向角度 Output \N \N \N 2 \N \N ° 2018-07-23 15:32:15.208+08 2018-07-23 15:32:15.213+08 dd168476-c9b6-4bdf-802c-dd55353c4f42 2 t f
+2476 displacement 支架水平位移 Output \N \N \N 2 \N \N mm 2018-07-23 15:33:09.779+08 2018-07-23 15:33:09.787+08 dd168476-c9b6-4bdf-802c-dd55353c4f42 2 t f
+2142 physicalvalue 压强 Output \N 4 0.3 0 Mpa 2018-04-08 14:06:25.45+08 2018-04-08 14:15:57.945+08 c5b8fbc8-aee5-43cd-a2e8-6f48cfe463e5 2 t f
+2145 physicalvalue 压强 Output \N 4 0.3 0 MPa 2018-04-08 14:06:25.472+08 2018-04-08 14:16:02.812+08 8b5d7571-fbed-4a64-8ae5-158979e259d4 2 t f
+2164 length 位移 Output \N 5 10 0 mm 2018-04-08 14:40:14.002+08 2018-04-08 15:46:06.998+08 93d4d05c-a5fe-48b1-88ff-1cb39cfdf02d 2 t f
+2166 length 位移 Output \N 5 10 0 mm 2018-04-08 14:40:14.015+08 2018-04-08 15:46:27.412+08 b484a973-d8b7-4e1f-a3a1-8be21122c6fe 2 t f
+2259 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2018-04-18 17:04:33.126+08 2018-04-18 17:04:33.133+08 f45f4852-853f-4a66-a359-8b48c4624b75 5 t f
+2285 1123 1 Variable \N \N 1213 \N \N \N 123 231 2018-05-18 15:14:35.068+08 2018-05-18 15:14:35.074+08 c64d06e4-145c-4bbb-919c-1147dac429b9 6 t f
+2318 laeq \N Output \N \N \N \N \N \N \N 2018-06-06 18:05:17.097+08 2018-06-06 18:05:17.097+08 8f4cc815-04e2-482c-afbc-e565f35e0f76 2 t f
+2319 lmax \N Output \N \N \N \N \N \N \N 2018-06-06 18:05:29.122+08 2018-06-06 18:05:29.132+08 8f4cc815-04e2-482c-afbc-e565f35e0f76 2 t f
+2335 physicalvalue 裂缝 Output \N \N \N 3 \N \N mm 2018-06-19 09:48:52.809+08 2018-06-19 09:48:52.816+08 6f11ad74-c92f-4122-8e48-31a6684e862f 2 t f
+2371 PM10 PM10浓度 Output \N \N \N 3 \N \N ug/m3 2018-07-02 11:20:26.58+08 2018-07-02 11:20:26.676+08 23c218cd-7c9e-4ad1-bc78-2132a932fc9c 2 t f
+2374 CO CO浓度 Output \N \N \N 3 \N \N ppm 2018-07-02 11:23:15.189+08 2018-07-02 11:23:15.198+08 23c218cd-7c9e-4ad1-bc78-2132a932fc9c 2 t f
+2419 temperature 温度 Output \N \N \N \N \N \N ℃ 2018-07-10 17:34:19.976+08 2018-07-10 17:34:19.996+08 7624deeb-3f22-45ff-8a6c-a588e617c17b 2 t f
+2322 physicalvalue 距离 Output \N 3 30 0 m 2018-06-07 15:37:44.402+08 2020-06-10 13:49:53.05+08 5de3dae0-fa13-4844-9c58-c960926aa470 2 t f
+2433 physicalvalue 加速度 Output \N \N \N \N \N \N \N 2018-07-18 09:51:58.266+08 2018-07-18 09:51:58.266+08 621548d2-0189-47af-9d78-c0e928b92373 5 t f
+2434 temperature 温度 Output \N \N \N 2 70 -25 ℃ 2018-07-18 09:56:45.593+08 2018-07-18 09:56:45.598+08 68ac3567-5ac9-48f6-9dc3-121be2e321b0 2 t f
+2479 settling 模板沉降 Output \N \N \N 2 \N \N mm 2018-07-23 15:35:46.124+08 2018-07-23 15:35:46.129+08 dafbdb25-384d-4431-b8b4-13396a4c781b 2 t f
+2494 inputState 输入状态 Output \N \N \N \N \N \N 2018-07-28 17:15:42.973+08 2018-07-28 17:15:42.973+08 fe52923b-3bb6-4390-be5f-32733342b67b 1 t f
+2498 controlState 继电器控制状态 Output \N \N \N \N \N \N 2018-07-28 17:18:01.401+08 2018-07-28 17:18:01.401+08 fe52923b-3bb6-4390-be5f-32733342b67b 1 t f
+2491 obliquity 塔机倾角 Output \N 2 \N \N ° 2018-07-28 17:13:18.054+08 2018-07-31 09:36:47.233+08 fe52923b-3bb6-4390-be5f-32733342b67b 2 t f
+2534 pressure 压强 Output \N \N \N 4 2 0 MPa 2018-08-01 09:12:42.034+08 2018-08-01 09:12:42.034+08 55fe806c-652f-4b2c-a677-fa5aea862762 2 t f
+2539 pressure 压强 Output \N \N \N 5 0.5 0 MPa 2018-08-01 09:34:32.173+08 2018-08-01 09:34:32.173+08 985c0298-b963-4823-8fdc-38feb70806e1 2 t f
+2540 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2018-08-01 16:06:48.298+08 2018-08-01 16:06:48.298+08 a59e747f-2b34-4867-bd4b-47994c6dc9b7 5 t f
+2557 y Y方向角度 Output \N \N \N 2 \N \N ° 2018-08-02 10:41:04.609+08 2018-08-02 10:41:04.609+08 87e911f0-3894-42f6-a05a-80c30c7e565e 2 t f
+2559 x X方向角度 Output \N \N \N 2 \N \N ° 2018-08-02 10:41:04.622+08 2018-08-02 10:41:04.622+08 87e911f0-3894-42f6-a05a-80c30c7e565e 2 t f
+2568 physicalvalue 风速 Output \N 2 \N \N m/s 2018-08-03 10:36:00.514+08 2018-08-03 10:38:02.924+08 380bb834-b2d8-495f-bccf-075375161a49 2 t f
+2570 current 模拟量 Output \N \N \N 3 \N \N mA 2018-08-03 10:40:50.604+08 2018-08-03 10:40:50.604+08 c5d291cd-bb26-4192-9454-e686cb8c1f9a 2 t f
+2581 physicalvalue X轴角度 Output \N 2 \N \N ° 2018-08-09 14:55:00.875+08 2018-08-09 14:58:50.662+08 420c05f9-c835-4821-ac21-7cf1575dabb1 2 t f
+2588 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-08-09 16:19:28.515+08 2018-08-09 16:19:28.515+08 c0109f4c-f2dd-4a7d-85a5-e1c2ee65cd2c 2 t f
+2587 physicalvalue 应力 Output \N 3 \N \N MPa 2018-08-09 16:19:28.511+08 2018-08-09 17:32:25.488+08 c0109f4c-f2dd-4a7d-85a5-e1c2ee65cd2c 2 t f
+2577 physicalvalue 饶度 Output \N 4 \N \N mm 2018-08-09 14:40:15.573+08 2018-08-10 09:44:08.497+08 201d630c-2dfb-4918-8d48-0dc931b2337d 2 t f
+2595 physicalvalue 位移 Output \N 4 \N \N mm 2018-08-10 09:48:55.491+08 2018-08-10 09:49:22.105+08 0f7dadf8-5ab5-4a5d-b8b7-9d33d10e8d83 2 t f
+2579 physicalvalue 位移 Output \N 4 \N \N mm 2018-08-09 14:40:18.319+08 2018-08-10 09:49:34.402+08 73438936-0d17-4107-85bc-2348926e9746 2 t f
+2596 physicalvalue X轴角度 Output \N 2 \N \N ° 2018-08-10 09:50:00.675+08 2018-08-10 09:50:00.675+08 37ee5f1d-d770-4c7a-b901-3f060b88fe86 2 t f
+2605 wavelength 波长 Output \N \N \N \N \N \N \N 2018-08-10 16:23:43.239+08 2018-08-10 16:23:43.239+08 fee66142-81ed-4cdc-8465-19d0f7acd6ec 2 t f
+2608 wavelength 波长 Output \N \N \N \N \N \N \N 2018-08-10 17:03:21.002+08 2018-08-10 17:03:21.002+08 4d1bca0a-fa5c-4af2-adc9-ded21aff72da 2 t f
+2612 length 距离 Output \N \N \N 2 mm 2018-08-14 14:13:28.653+08 2018-08-14 14:13:28.653+08 0ad35b65-43ba-4521-bc02-63bd34be0a39 2 t f
+2607 physicalvalue 温度 Output \N 2 \N \N ℃ 2018-08-10 17:03:20.996+08 2018-08-10 17:04:19.598+08 4d1bca0a-fa5c-4af2-adc9-ded21aff72da 2 t f
+2604 physicalvalue 应变 Output \N 6 \N \N με 2018-08-10 16:23:43.227+08 2018-08-10 17:05:35.042+08 fee66142-81ed-4cdc-8465-19d0f7acd6ec 2 t f
+2618 packtemperature3 探头温度C Output \N \N \N 2 \N \N ℃ 2018-08-14 16:20:43.304+08 2018-08-14 16:20:43.304+08 251fdf4e-2811-48e8-b21d-3bedb3ffb0a6 2 t f
+2620 voltage 节点电压 Output \N \N \N \N \N \N mv 2018-08-14 16:22:08.758+08 2018-08-14 16:22:08.758+08 251fdf4e-2811-48e8-b21d-3bedb3ffb0a6 1 t f
+2621 O2 氧气浓度 Output \N \N \N 2 \N \N % 2018-08-14 16:27:48.865+08 2018-08-14 16:27:48.865+08 c7561cfc-94ff-4fcc-bdeb-63023c74839f 2 t f
+1700 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 10:30:31.633+08 2018-03-02 10:30:31.639+08 5d7b8c97-4528-4c8a-8da7-bcc37d2a9ed2 2 t f
+2417 workValue_Sum 工况累积量 Output \N \N \N \N \N \N m³/h 2018-07-10 17:32:32.764+08 2018-07-10 17:32:32.769+08 7624deeb-3f22-45ff-8a6c-a588e617c17b 2 t f
+2418 workValue_Instant 工况瞬时量 Output \N \N \N \N \N \N m³/h 2018-07-10 17:34:02.388+08 2018-07-10 17:34:02.393+08 7624deeb-3f22-45ff-8a6c-a588e617c17b 2 t f
+1855 temperature 温度 Output \N \N \N 2 70 -25 ℃ 2018-03-23 17:59:16.99+08 2018-03-23 17:59:17.002+08 0226f5d5-c83d-4a9b-8448-adb854fa4336 2 t f
+1856 anglex X轴角度 Output \N \N \N 2 30 -30 2018-03-23 17:59:41.108+08 2018-03-23 17:59:41.115+08 0226f5d5-c83d-4a9b-8448-adb854fa4336 2 t f
+1857 angley Y轴角度 Output \N \N \N 2 30 -30 ° 2018-03-23 18:00:15.086+08 2018-03-23 18:00:15.091+08 0226f5d5-c83d-4a9b-8448-adb854fa4336 2 t f
+2092 physicalvalue 应变 Output \N 3 3000 -3000 με 2018-03-27 11:14:06.92+08 2018-03-27 11:14:14.45+08 5aeba65e-e787-4076-8e03-a33698701ff2 2 t f
+2096 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-03-27 11:29:53.95+08 2018-03-27 11:29:53.955+08 79cc1497-99b7-4eb4-bbb5-b69192903d18 2 t f
+2097 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-27 11:30:10.105+08 2018-03-27 11:30:10.111+08 79cc1497-99b7-4eb4-bbb5-b69192903d18 2 t f
+2262 temperature 温度 Output \N \N \N 5 \N \N ℃ 2018-04-24 14:42:02.903+08 2018-04-24 14:42:02.911+08 1ea28db3-0c1b-4b71-8fb6-d38b5b55fc3b 2 t f
+2098 physicalvalue 应变 Output \N 4 1500 -1500 με 2018-03-27 11:30:41.05+08 2018-03-27 11:31:00.072+08 79cc1497-99b7-4eb4-bbb5-b69192903d18 2 t f
+2146 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-04-08 14:06:26.079+08 2018-04-08 14:06:26.079+08 72a5348d-2988-4bd5-ad2b-b46b616e70a9 2 t f
+2147 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-04-08 14:06:26.083+08 2018-04-08 14:06:26.083+08 72a5348d-2988-4bd5-ad2b-b46b616e70a9 2 t f
+2149 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-04-08 14:06:26.099+08 2018-04-08 14:06:26.099+08 b689f4eb-472a-4f21-93e2-9a7c753479bd 2 t f
+2150 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-04-08 14:06:26.105+08 2018-04-08 14:06:26.105+08 b689f4eb-472a-4f21-93e2-9a7c753479bd 2 t f
+2152 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-04-08 14:06:27.125+08 2018-04-08 14:06:27.125+08 fa4989e0-0602-43e4-a5d6-3b5492e9711d 2 t f
+2153 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-04-08 14:06:27.131+08 2018-04-08 14:06:27.131+08 fa4989e0-0602-43e4-a5d6-3b5492e9711d 2 t f
+2155 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-04-08 14:06:27.153+08 2018-04-08 14:06:27.153+08 5d4fd2cc-9b83-48da-80df-6dd615d69195 2 t f
+2156 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-04-08 14:06:27.157+08 2018-04-08 14:06:27.157+08 5d4fd2cc-9b83-48da-80df-6dd615d69195 2 t f
+2158 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-04-08 14:06:27.659+08 2018-04-08 14:06:27.659+08 88f8eecf-bb3b-4dbc-b003-2c28bdf07be4 2 t f
+2159 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-04-08 14:06:27.662+08 2018-04-08 14:06:27.662+08 88f8eecf-bb3b-4dbc-b003-2c28bdf07be4 2 t f
+2161 temperature 温度 Output \N \N \N 4 \N \N ℃ 2018-04-08 14:06:27.668+08 2018-04-08 14:06:27.668+08 a40e7ecd-bd8d-4e58-95af-f964d8861447 2 t f
+2162 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-04-08 14:06:27.67+08 2018-04-08 14:06:27.67+08 a40e7ecd-bd8d-4e58-95af-f964d8861447 2 t f
+2286 physicalvalue 加速度 Output \N 0 \N 2018-05-22 15:54:50.848+08 2018-06-04 17:48:57.437+08 7685d43c-d87a-4eb4-88e0-1bde3d9eed5b 5 t f
+2320 lmin Output \N \N \N \N \N \N 2018-06-06 18:05:41.484+08 2018-06-06 18:05:41.491+08 8f4cc815-04e2-482c-afbc-e565f35e0f76 2 t f
+2323 length 距离 Output \N 3 30 0 m 2018-06-07 15:54:22.28+08 2018-06-07 15:54:22.28+08 1e068f94-2089-43a7-89d1-f2c5be29ab86 2 t f
+2160 physicalvalue 压强 Output \N 4 1 0 MPa 2018-04-08 14:06:27.664+08 2018-04-08 14:15:12.253+08 88f8eecf-bb3b-4dbc-b003-2c28bdf07be4 2 t f
+2163 physicalvalue 压强 Output \N 4 1 0 MPa 2018-04-08 14:06:27.672+08 2018-04-08 14:15:17.79+08 a40e7ecd-bd8d-4e58-95af-f964d8861447 2 t f
+2157 physicalvalue 压强 Output \N 4 0.6 0 MPa 2018-04-08 14:06:27.164+08 2018-04-08 14:15:27.321+08 5d4fd2cc-9b83-48da-80df-6dd615d69195 2 t f
+2154 physicalvalue 压强 Output \N 4 0.6 0 MPa 2018-04-08 14:06:27.136+08 2018-04-08 14:15:34.271+08 fa4989e0-0602-43e4-a5d6-3b5492e9711d 2 t f
+2148 physicalvalue 压强 Output \N 4 0.4 0 MPa 2018-04-08 14:06:26.088+08 2018-04-08 14:15:44.426+08 72a5348d-2988-4bd5-ad2b-b46b616e70a9 2 t f
+2151 physicalvalue 压强 Output \N 4 0.4 0 MPa 2018-04-08 14:06:26.108+08 2018-04-08 14:15:49.102+08 b689f4eb-472a-4f21-93e2-9a7c753479bd 2 t f
+2260 anglex X轴角度 Output \N 4 15 -15 ° 2018-04-24 14:39:30.96+08 2018-04-24 14:39:48.753+08 1ea28db3-0c1b-4b71-8fb6-d38b5b55fc3b 2 t f
+2336 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-06-19 09:49:19.696+08 2018-06-19 09:49:19.712+08 6f11ad74-c92f-4122-8e48-31a6684e862f 2 t f
+2421 direction 风向 Output \N \N \N 3 \N \N ° 2018-07-11 10:42:10.737+08 2018-07-11 10:42:10.745+08 08e932f8-151e-489f-9035-af9518581665 2 t f
+2372 SO2 SO2浓度 Output \N \N \N 3 \N \N ppb 2018-07-02 11:21:11.578+08 2018-07-02 11:21:11.584+08 23c218cd-7c9e-4ad1-bc78-2132a932fc9c 2 t f
+2375 O3 O3浓度 Output \N \N \N 3 \N \N ppb 2018-07-02 11:24:09.733+08 2018-07-02 11:24:09.739+08 23c218cd-7c9e-4ad1-bc78-2132a932fc9c 2 t f
+2411 anglex X轴角度 Output \N \N \N 3 \N \N ° 2018-07-09 13:38:45.549+08 2018-07-09 13:38:45.56+08 4563e22f-dc9b-4a86-a3df-5cae88d78dfa 2 t f
+2415 standValue_Instant 标况瞬时量 Output \N \N \N \N \N \N m³/h 2018-07-10 17:29:52.862+08 2018-07-10 17:29:52.869+08 7624deeb-3f22-45ff-8a6c-a588e617c17b 2 t f
+2435 angley Y方向角度 Output \N \N \N 4 30 -30 ° 2018-07-18 09:57:22.424+08 2018-07-18 09:57:22.428+08 68ac3567-5ac9-48f6-9dc3-121be2e321b0 2 t f
+2438 angley Y方向角度 Output \N \N \N 4 30 -30 ° 2018-07-18 09:59:53.389+08 2018-07-18 09:59:53.98+08 8f5658b2-c72d-4918-8f4c-e23b57d193a6 2 t f
+2467 pm25 PM2.5 Output \N \N \N \N \N \N ug/m³ 2018-07-23 15:25:02.481+08 2018-07-23 15:25:02.489+08 4c99b35d-021c-4e0f-a014-5516ee92a8b2 2 t f
+2477 x X方向角度 Output \N \N \N 2 \N \N ° 2018-07-23 15:35:01.179+08 2018-07-23 15:35:01.185+08 dafbdb25-384d-4431-b8b4-13396a4c781b 2 t f
+2493 powerQuantity 电池电量 Output \N 0 100 0 % 2018-07-28 17:14:33.477+08 2018-07-31 10:22:51.902+08 fe52923b-3bb6-4390-be5f-32733342b67b 1 t f
+2492 stringFactor 吊绳倍率 Output \N 0 \N \N 根 2018-07-28 17:14:00.112+08 2018-07-31 10:23:37.712+08 fe52923b-3bb6-4390-be5f-32733342b67b 1 t f
+2535 pressure 压强 Output \N \N \N 4 2 0 MPa 2018-08-01 09:13:22.551+08 2018-08-01 09:13:22.551+08 273814e4-c4be-4198-9dd6-4d1f19cb0033 2 t f
+2569 current 模拟量 Output \N \N \N 3 \N \N mA 2018-08-03 10:40:22.628+08 2018-08-03 10:40:22.628+08 380bb834-b2d8-495f-bccf-075375161a49 2 t f
+2572 current 模拟量 Output \N \N \N 3 \N \N mA 2018-08-03 10:41:17.502+08 2018-08-03 10:41:17.502+08 e17bf88d-d539-4c9d-9504-37c08672d5ba 2 t f
+2571 physicalvalue 风向 Output \N 2 \N \N ° 2018-08-03 10:41:17.491+08 2018-08-03 10:41:52.295+08 e17bf88d-d539-4c9d-9504-37c08672d5ba 2 t f
+2597 pressure 压力 Output \N \N \N 3 \N \N mm 2018-08-10 13:59:30.084+08 2018-08-10 13:59:30.084+08 b15c0841-8700-42f6-ad9e-cfcd0c6f5665 2 t f
+2583 physicalvalue 应力 Output \N 3 \N \N Mpa 2018-08-09 15:00:04.573+08 2018-08-09 15:56:47.759+08 0e3776d4-f177-404e-90be-59cb211c9921 2 t f
+2613 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-08-14 14:16:02.902+08 2018-08-14 14:16:02.902+08 0ad35b65-43ba-4521-bc02-63bd34be0a39 2 t f
+2560 temperature 温度 Output \N 2 ℃ 2018-08-02 15:10:25.428+08 2018-12-29 10:16:40.861+08 812c58c6-4cd2-48fd-942a-2024f91035bb 2 t f
+1702 am 幅值 Output \N 3 \N \N mv 2018-03-02 11:18:56.177+08 2018-03-02 11:19:03.642+08 45469a20-748c-4740-9741-4c971a209601 2 t f
+2168 anglex X轴角度 Output \N \N \N 2 \N \N ° 2018-04-09 08:05:45.701+08 2018-04-09 08:05:45.716+08 def3cc25-dff3-43d3-b77c-855e1683db60 2 t f
+1821 wavelength 波长 Output \N \N \N 5 \N \N \N 2018-03-16 11:39:28.698+08 2018-03-16 11:39:28.716+08 7b458eae-2daa-407f-8597-e3a64d0dbb65 2 t f
+1822 phy 物理值 Output \N \N \N 5 \N \N 2018-03-16 11:39:57.07+08 2018-03-16 11:39:57.077+08 7b458eae-2daa-407f-8597-e3a64d0dbb65 2 t f
+2261 angley Y轴角度 Output \N \N \N 4 15 -15 ° 2018-04-24 14:40:21.186+08 2018-04-24 14:40:21.196+08 1ea28db3-0c1b-4b71-8fb6-d38b5b55fc3b 2 t f
+2287 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2018-05-23 10:55:33.023+08 2018-05-23 10:55:33.03+08 37a8aa55-7282-4e2a-8cf5-a32e6a00c381 5 t f
+2644 temperature 温度 Output \N 3 40 0 ℃ 2018-08-15 14:41:47.949+08 2018-08-15 14:41:47.949+08 3f7364b2-c949-4499-a485-82f0a141968e 2 t f
+1813 Resistor2 电阻2 Output \N 3 Ω 2018-03-15 15:37:21.465+08 2018-03-23 14:29:17.327+08 d6f7c1bb-56ff-4e70-b237-b1c8cfd826ac 2 t f
+2614 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-08-14 15:32:39.128+08 2018-08-14 15:32:39.128+08 f9a40c12-42a9-45fa-b780-10df712e19af 2 t f
+1858 frequency 频率 Output \N \N \N 6 \N \N \N 2018-03-25 19:20:50.006+08 2018-03-25 19:20:50.006+08 af89ba1b-5b99-481c-a213-a2171c2e4700 2 t f
+1859 temperature 温度 Output \N \N \N 4 \N \N 2018-03-25 19:20:50.011+08 2018-03-25 19:20:50.011+08 af89ba1b-5b99-481c-a213-a2171c2e4700 2 t f
+1860 am 幅值 Output \N \N \N 8 \N \N 2018-03-25 19:20:50.016+08 2018-03-25 19:20:50.016+08 af89ba1b-5b99-481c-a213-a2171c2e4700 2 t f
+1861 physicalvalue 应变 Output \N \N \N 4 \N \N 2018-03-25 19:20:50.023+08 2018-03-25 19:20:50.023+08 af89ba1b-5b99-481c-a213-a2171c2e4700 2 t f
+1873 physicalvalue 应变 Output \N 4 3000 -3000 με 2018-03-26 11:27:33.452+08 2018-03-26 11:27:33.452+08 f4d2673b-f6ac-4be7-9068-95a68442426e 2 t f
+1874 physicalvalue 应变 Output \N 4 3000 -3000 με 2018-03-26 11:27:33.461+08 2018-03-26 11:27:33.461+08 614819ae-798a-406e-befe-fe6749ac5536 2 t f
+1883 physicalvalue 荷载力 Output \N 4 160 -160 kN 2018-03-26 11:35:24.362+08 2018-03-26 11:39:02.738+08 ba74ef0e-3ec4-4203-9d65-17906c8f64d1 2 t f
+1884 physicalvalue 荷载力 Output \N 4 160 -160 kN 2018-03-26 11:35:24.368+08 2018-03-26 11:39:09.945+08 fdd4dd73-2235-45a2-98b3-c7838697717c 2 t f
+2324 length 距离 Output \N 4 30 0 m 2018-06-07 15:54:34.23+08 2018-06-07 15:54:34.23+08 dc3fee9e-0633-4af5-9ef7-39f838c935e9 2 t f
+1824 rms 有效值 Output \N 5 2018-03-16 14:02:57.809+08 2018-06-11 10:35:54.512+08 7685d43c-d87a-4eb4-88e0-1bde3d9eed5b 2 t f
+2337 length 距离 Output \N \N \N 4 \N \N m 2018-06-19 09:51:04.798+08 2018-06-19 09:51:04.807+08 d41d604d-7dba-4a66-902c-8b1257cde117 2 t f
+2377 temperature 温度 Output \N \N \N 3 \N \N ℃ 2018-07-02 11:25:02.571+08 2018-07-02 11:25:02.582+08 23c218cd-7c9e-4ad1-bc78-2132a932fc9c 2 t f
+2412 angley Y轴角度 Output \N \N \N 3 \N \N ° 2018-07-09 13:39:16.845+08 2018-07-09 13:39:16.896+08 4563e22f-dc9b-4a86-a3df-5cae88d78dfa 2 t f
+2436 anglex X方向角度 Output \N \N \N 4 30 -30 ° 2018-07-18 09:58:04.78+08 2018-07-18 09:58:04.785+08 68ac3567-5ac9-48f6-9dc3-121be2e321b0 2 t f
+2468 pm10 PM10 Output \N \N \N 2 \N ug/m³ 2018-07-23 15:25:59.984+08 2018-07-23 15:25:59.996+08 4c99b35d-021c-4e0f-a014-5516ee92a8b2 2 t f
+2471 x X方向角度 Output \N \N \N 2 \N \N ° 2018-07-23 15:29:58.521+08 2018-07-23 15:29:58.533+08 b41fcafa-5351-45f4-9151-991053b2229e 2 t f
+2499 direction 风向 Output \N \N \N \N \N \N \N 2018-07-30 16:25:53.911+08 2018-07-30 16:25:53.911+08 4c99b35d-021c-4e0f-a014-5516ee92a8b2 5 t f
+2536 pressure 压强 Output \N \N \N 5 0.2 0 MPa 2018-08-01 09:30:32.647+08 2018-08-01 09:30:32.647+08 5d00a146-91e7-49d0-bd5e-930d092c386b 2 t f
+2537 pressure 压强 Output \N \N \N \N 5 0 MPa 2018-08-01 09:30:57.608+08 2018-08-01 09:30:57.608+08 08b2e830-9291-4846-89e5-483cf8eca55e 2 t f
+2538 pressure 压强 Output \N \N \N 5 0.5 0 MPa 2018-08-01 09:34:04.432+08 2018-08-01 09:34:04.432+08 0e6129b0-ae01-4822-929e-e8a93b3a63aa 2 t f
+2615 length 距离 Output \N 2 \N \N m 2018-08-14 15:32:39.133+08 2019-10-29 11:34:13.027+08 f9a40c12-42a9-45fa-b780-10df712e19af 2 t f
+2622 MINIR_60_CO2 二氧化碳浓度 Output \N \N \N 2 \N \N ppm 2018-08-14 16:28:31.856+08 2018-08-14 16:28:31.856+08 c7561cfc-94ff-4fcc-bdeb-63023c74839f 2 t f
+2563 physicalvalue 温度 Output \N 2 \N \N ℃ 2018-08-03 07:13:57.956+08 2018-08-03 08:29:13.133+08 20a173c1-56c8-4576-8edc-906bdb04f749 2 t f
+2576 temperature 温度 Output \N \N \N 2 120 -40 ℃ 2018-08-07 16:41:05.059+08 2018-08-07 16:41:05.059+08 29e946c4-e67d-4d58-aba2-a16897f4da42 2 t f
+2573 pressure 液位 Output \N 3 2000 0 mm 2018-08-07 16:39:22.262+08 2018-08-10 14:04:22.212+08 a0cd4a87-661c-43de-928c-22c5d63cbeee 2 t f
+2599 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-08-10 14:52:45.127+08 2018-08-10 14:52:45.127+08 b0e56599-c58d-4d0a-8a80-f19855b36c80 2 t f
+2600 pressure 压力 Output \N \N \N 3 \N \N Kpa 2018-08-10 14:52:45.132+08 2018-08-10 14:52:45.132+08 b0e56599-c58d-4d0a-8a80-f19855b36c80 2 t f
+2624 humidity 湿度 Output \N 2 \N \N %RH 2018-08-14 16:29:54.667+08 2018-08-14 16:43:21.675+08 c7561cfc-94ff-4fcc-bdeb-63023c74839f 2 t f
+2623 temperature 温度 Output \N 2 \N \N ℃ 2018-08-14 16:29:29.308+08 2018-08-14 16:43:32.414+08 c7561cfc-94ff-4fcc-bdeb-63023c74839f 2 t f
+2626 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-08-14 16:49:50.171+08 2018-08-14 16:49:50.171+08 b4b6ffd7-09a1-4348-a270-a89f768a51be 2 t f
+2627 humidity 湿度 Output \N \N \N 2 \N \N %RH 2018-08-14 16:50:11.633+08 2018-08-14 16:50:11.633+08 b4b6ffd7-09a1-4348-a270-a89f768a51be 2 t f
+2630 temperature 水温 Output \N \N \N 2 \N \N ℃ 2018-08-15 10:22:23.912+08 2018-08-15 10:22:23.912+08 17c83e03-bd23-47ac-ad6f-637082b66444 2 t f
+2632 physicalvalue 应变 Output \N 3 4000 0 με 2018-08-15 14:38:59.639+08 2018-08-15 14:38:59.639+08 3dbaa950-0bf5-4e4c-966f-8bff21df1e2f 2 t f
+2633 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-08-15 14:38:59.644+08 2018-08-15 14:38:59.644+08 3dbaa950-0bf5-4e4c-966f-8bff21df1e2f 2 t f
+2634 temperature 温度 Output \N \N \N 3 60 -25 ℃ 2018-08-15 14:38:59.647+08 2018-08-15 14:38:59.647+08 3dbaa950-0bf5-4e4c-966f-8bff21df1e2f 2 t f
+2635 frequency 频率 Output \N \N \N 2 \N \N HZ 2018-08-15 14:39:57.315+08 2018-08-15 14:39:57.315+08 a46e04df-5fc2-442e-8ca0-fc7da830f183 2 t f
+2636 physicalvalue 位移 Output \N 3 200 0 mm 2018-08-15 14:39:57.32+08 2018-08-15 14:39:57.32+08 a46e04df-5fc2-442e-8ca0-fc7da830f183 2 t f
+2637 temperature 温度 Output \N 2 60 -25 ℃ 2018-08-15 14:39:57.325+08 2018-08-15 14:39:57.325+08 a46e04df-5fc2-442e-8ca0-fc7da830f183 2 t f
+2645 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-08-15 14:41:47.955+08 2018-08-15 14:41:47.955+08 3f7364b2-c949-4499-a485-82f0a141968e 2 t f
+2646 physicalvalue 水压 Output \N 3 2500 0 kPa 2018-08-15 14:41:47.959+08 2018-08-15 14:41:47.959+08 3f7364b2-c949-4499-a485-82f0a141968e 2 t f
+2654 wavelength 距离 Output \N 5 \N \N 2018-08-16 16:25:36.777+08 2018-08-16 16:26:46.723+08 198e6298-06fe-49a7-9245-eaca7a85f263 2 t f
+2655 physicalvalue 裂缝 Output \N \N \N 2 \N \N mm 2018-08-16 16:27:07.596+08 2018-08-16 16:27:07.596+08 198e6298-06fe-49a7-9245-eaca7a85f263 2 t f
+2657 o 操作 Output \N bi,bu,bd \N \N \N \N 2018-08-17 11:28:18.696+08 2018-08-17 11:28:18.696+08 25789235-88db-4ea7-9a8a-5d4aeb5f9532 4 t f
+2659 temperature 温度 Output \N 2 60 -25 ℃ 2018-08-17 11:33:00.274+08 2018-08-17 11:38:21.689+08 70486f7c-d11e-4014-be32-71a2e8724359 2 t f
+1704 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 11:26:30.686+08 2018-03-02 11:26:30.704+08 12aa80e0-acfc-43e1-85c9-9cbabe6fa2ee 2 t f
+1705 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 13:55:31.865+08 2018-03-02 13:55:31.871+08 77becc38-82f7-4612-83e2-10e0ebf5e6e3 2 t f
+1706 am 幅值 Output \N \N \N 3 \N \N mv 2018-03-02 13:58:26.243+08 2018-03-02 13:58:26.248+08 4412085f-1890-4b38-b715-f72085af2b7b 2 t f
+1814 data2 风向 Output \N 2 \N \N ° 2018-03-15 16:51:58.44+08 2018-03-15 16:51:58.44+08 8ceadb1a-8f3b-42df-848d-523f3f16aaf2 2 t f
+1815 data1 风速 Output \N 3 \N \N m/s 2018-03-15 16:51:58.445+08 2018-03-15 16:51:58.445+08 8ceadb1a-8f3b-42df-848d-523f3f16aaf2 2 t f
+1862 physicalvalue 应变 Output \N \N \N 4 1500 -1500 με 2018-03-26 10:55:28.455+08 2018-03-26 10:55:28.464+08 8bc60164-fa52-4d68-a3b0-2c63af3113c0 2 t f
+1864 physicalvalue 应变 Output \N 4 5000 -5000 με 2018-03-26 11:16:11.516+08 2018-03-26 11:23:05.003+08 7c9f78f3-049b-4f4f-86ce-ed4945136111 2 t f
+1863 physicalvalue 应变 Output \N 4 5000 -5000 με 2018-03-26 11:16:11.502+08 2018-03-26 11:23:12.971+08 aca3e62f-b4ec-46cc-887a-563ce53b652a 2 t f
+2102 physicalvalue 速度 Output \N \N \N \N \N \N mm/s 2018-03-28 14:54:49.046+08 2018-03-28 14:54:49.046+08 72f27aba-3030-490b-9c55-ca21f1294c15 5 t f
+2169 angley Y轴角度 Output \N \N \N 2 \N \N ° 2018-04-09 08:06:14.668+08 2018-04-09 08:06:14.673+08 def3cc25-dff3-43d3-b77c-855e1683db60 2 t f
+2170 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-04-09 08:06:39.816+08 2018-04-09 08:06:39.832+08 def3cc25-dff3-43d3-b77c-855e1683db60 2 t f
+2638 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-08-15 14:40:39.268+08 2018-08-15 14:40:39.268+08 39fc7575-6835-4685-a956-dbbf5987d27b 2 t f
+2639 temperature 温度 Output \N 3 90 -30 ℃ 2018-08-15 14:40:39.276+08 2018-08-15 14:40:39.276+08 39fc7575-6835-4685-a956-dbbf5987d27b 2 t f
+2640 physicalvalue 压力 Output \N 3 6.4 0 MPa 2018-08-15 14:40:39.282+08 2018-08-15 14:40:39.282+08 39fc7575-6835-4685-a956-dbbf5987d27b 2 t f
+2378 humidity 湿度 Output \N \N \N 3 \N \N %RH 2018-07-02 11:26:07.28+08 2018-07-02 11:26:07.292+08 23c218cd-7c9e-4ad1-bc78-2132a932fc9c 2 t f
+2413 str 数据 Output \N \N \N \N \N \N \N 2018-07-10 11:56:14.981+08 2018-07-10 11:56:14.987+08 e51184be-7ba9-4184-af5e-374044450523 5 t f
+2416 pressure 压力 Output \N \N \N \N \N \N kpa 2018-07-10 17:30:31.513+08 2018-07-10 17:30:31.518+08 7624deeb-3f22-45ff-8a6c-a588e617c17b 2 t f
+2420 speed 风速 Output \N \N \N 3 \N \N m/s 2018-07-11 10:41:27.186+08 2018-07-11 10:41:27.192+08 72516f72-2faf-4bba-8e87-212b422ea7e7 2 t f
+2437 temperature 温度 Output \N \N \N \N 70 -25 ℃ 2018-07-18 09:59:31.504+08 2018-07-18 09:59:31.511+08 8f5658b2-c72d-4918-8f4c-e23b57d193a6 2 t f
+2469 speed 风速 Output \N \N \N 2 \N \N m/s 2018-07-23 15:26:32.736+08 2018-07-23 15:26:32.741+08 4c99b35d-021c-4e0f-a014-5516ee92a8b2 2 t f
+2487 loadValue 吊重 Output \N 2 \N \N t 2018-07-28 17:10:28.318+08 2018-07-31 09:36:20.172+08 fe52923b-3bb6-4390-be5f-32733342b67b 2 t f
+2541 physicalvalue 应变 Output \N \N \N 3 \N \N με 2018-08-02 09:53:24.948+08 2018-08-02 09:53:24.948+08 d926943e-d400-4c4c-83c8-2c3a6fd62c1c 2 t f
+2641 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-08-15 14:40:50.454+08 2018-08-15 14:40:50.454+08 bdca95f5-1a68-43cb-8bbd-0940bd4f861e 2 t f
+2589 physicalvalue 裂缝 Output \N \N \N 3 \N \N mm 2018-08-10 09:21:02.389+08 2018-08-10 09:21:02.389+08 8b8cab39-63aa-4ef8-95d7-a42959be4592 2 t f
+2590 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-08-10 09:21:02.395+08 2018-08-10 09:21:02.395+08 8b8cab39-63aa-4ef8-95d7-a42959be4592 2 t f
+2593 physicalvalue 湿度 Output \N 2 \N \N %RH 2018-08-10 09:35:53.054+08 2018-08-10 09:36:28.269+08 2528fa6d-da6e-4e88-9316-d13536a1a987 2 t f
+2594 physicalvalue 饶度 Output \N 4 \N \N mm 2018-08-10 09:43:03.964+08 2018-08-10 09:43:54.969+08 cde7d76f-5843-4001-88b3-5eb18836fc8f 2 t f
+2616 packtemperature1 探头温度A Output \N \N \N 2 \N \N ℃ 2018-08-14 16:19:55.33+08 2018-08-14 16:19:55.33+08 251fdf4e-2811-48e8-b21d-3bedb3ffb0a6 2 t f
+2619 packtemperature4 探头温度D Output \N \N \N 2 \N \N ℃ 2018-08-14 16:21:15.768+08 2018-08-14 16:21:15.768+08 251fdf4e-2811-48e8-b21d-3bedb3ffb0a6 2 t f
+2625 voltage 节点电压 Output \N \N \N \N \N \N mv 2018-08-14 16:30:22.912+08 2018-08-14 16:30:22.912+08 c7561cfc-94ff-4fcc-bdeb-63023c74839f 1 t f
+2628 moisture 水分值 Output \N \N \N 2 \N \N % 2018-08-14 16:50:59.213+08 2018-08-14 16:50:59.213+08 b4b6ffd7-09a1-4348-a270-a89f768a51be 2 t f
+2629 level 水位 Output \N \N \N \N \N \N mm 2018-08-15 09:49:22.527+08 2018-08-15 09:49:22.527+08 17c83e03-bd23-47ac-ad6f-637082b66444 1 t f
+2631 anglex X轴角度 Output \N \N \N 2 \N \N ° 2018-08-15 10:55:10.6+08 2018-08-15 10:55:10.6+08 8a367437-ef39-437a-9e88-1dc4c6c42d14 2 t f
+2642 temperature 温度 Output \N 3 60 -25 ℃ 2018-08-15 14:40:50.459+08 2018-08-15 14:40:50.459+08 bdca95f5-1a68-43cb-8bbd-0940bd4f861e 2 t f
+2643 physicalvalue 应力 Output \N 3 300 0 MPa 压缩100MPa 拉伸300MPa 2018-08-15 14:40:50.464+08 2018-08-15 14:40:50.464+08 bdca95f5-1a68-43cb-8bbd-0940bd4f861e 2 t f
+2656 t 模型 Variable \N \N \N \N \N \N 2018-08-17 11:27:57.788+08 2018-08-17 11:27:57.788+08 25789235-88db-4ea7-9a8a-5d4aeb5f9532 5 t f
+2660 physicalvalue 液位 Output \N 3 mm 2018-08-17 11:33:00.277+08 2018-08-17 11:38:03.367+08 70486f7c-d11e-4014-be32-71a2e8724359 2 t f
+2664 physicalvalue X轴角度 Output \N 3 \N \N ° 2018-08-17 11:39:56.61+08 2018-08-17 11:39:56.61+08 076391b0-0f5f-44c8-8b51-cf3c894b8b88 2 t f
+2647 physicalvalue 温度 Output \N 3 100 -20 ℃ 2018-08-15 17:13:27.45+08 2019-03-05 10:59:15.348+08 face6568-949b-4dcf-a799-fec9eafe6dd5 2 t f
+1728 z Z位置 Output \N \N \N 4 \N \N mm 2018-03-05 13:36:07.907+08 2018-03-05 13:36:07.913+08 d05b0093-f276-418f-90d3-8e0bfe3c36ef 2 t f
+1729 a ss Variable \N \N \N \N 66 1 \N 2018-03-06 11:27:44.262+08 2018-03-06 11:27:44.269+08 8d3e93e6-61dc-4f46-b610-22b88a38d41d 1 t f
+1730 b b Variable \N \N \N \N 33 2 2018-03-06 11:28:03.962+08 2018-03-06 11:28:03.97+08 8d3e93e6-61dc-4f46-b610-22b88a38d41d 1 t f
+1731 pressure 重量 Output \N \N \N 2 99999999 -99999999 kg 2018-03-06 16:50:09.589+08 2018-03-06 16:50:09.589+08 7572058c-09cc-4eeb-a9ba-be3be9bacf77 2 t f
+1816 data2 湿度 Output \N \N \N 2 \N \N %RH 2018-03-15 16:52:12.166+08 2018-03-15 16:52:12.166+08 5ce3382a-6764-4a08-8bfe-5b058e8a9017 2 t f
+1817 data1 温度 Output \N 2 \N \N ℃ 2018-03-15 16:52:12.172+08 2018-03-15 16:52:12.172+08 5ce3382a-6764-4a08-8bfe-5b058e8a9017 2 t f
+2265 physicalvalue 浓度 Output \N \N \N 2 \N \N %vol 2018-05-03 10:35:59.185+08 2018-05-03 10:35:59.185+08 6accf380-8a73-4f88-8a5c-42b3366bc358 2 t f
+1820 anglex X轴角度 Output \N 3 \N ° 2018-03-15 17:45:33.197+08 2018-03-23 17:02:28.71+08 af8660db-af7f-4f8a-ad12-70bb18f62638 2 t f
+1865 physicalvalue 应变 Output \N 4 3000 -3000 με 2018-03-26 11:16:13.101+08 2018-03-26 11:18:23.25+08 bc373436-023b-41d4-9608-6a33bb926e80 2 t f
+1866 physicalvalue 应变 Output \N 4 3000 -3000 με 2018-03-26 11:16:13.111+08 2018-03-26 11:18:34.465+08 e4c071d1-afb9-4178-923b-18a37265ca86 2 t f
+1875 physicalvalue 应变 Output \N 4 5000 -5000 με 2018-03-26 11:27:35.443+08 2018-03-26 11:27:35.443+08 363b62ae-2ccd-4c86-915d-03380bc9d89c 2 t f
+1876 physicalvalue 应变 Output \N 4 5000 -5000 με 2018-03-26 11:27:35.453+08 2018-03-26 11:27:35.453+08 8693e382-e7e6-4efa-8583-d0251cb0b360 2 t f
+2266 physicalvalue 浓度 Output \N \N \N 2 \N \N %LEL 2018-05-03 10:37:15.486+08 2018-05-03 10:37:15.486+08 56227677-39fd-4bfe-a59b-8c5f28682832 2 t f
+1877 physicalvalue 荷载力 Output \N 4 75 -75 kN 2018-03-26 11:30:25.472+08 2018-03-26 11:33:40.86+08 f75af319-b305-463e-a3dc-78df902b61ef 2 t f
+2264 physicalvalue 浓度 Output \N 2 \N \N μmol/mol 2018-05-03 10:34:23.757+08 2018-05-07 11:46:51.803+08 51fbf199-10ab-4718-8b70-c92beea24f6a 2 t f
+1878 physicalvalue 荷载力 Output \N 4 75 -75 kN 2018-03-26 11:30:25.491+08 2018-03-26 11:33:59.195+08 6c75e8aa-7e92-4611-8962-1c79a7ba9ef2 2 t f
+2171 length 位移 Output \N 5 10 -10 mm 2018-04-09 16:11:41.556+08 2018-05-16 17:52:48.927+08 663eba54-78c3-4aa6-abbf-66cde27953e2 2 t f
+2289 anglex X轴角度 Output \N \N \N 3 \N \N ° 2018-05-28 10:45:28.336+08 2018-05-28 10:45:28.336+08 1da4370b-ba2d-4f6a-92f0-485a163d45e2 2 t f
+2290 angley Y轴角度 Output \N \N \N 3 \N \N ° 2018-05-28 10:45:28.344+08 2018-05-28 10:45:28.344+08 1da4370b-ba2d-4f6a-92f0-485a163d45e2 2 t f
+2341 concentration CO浓度 Output \N \N \N 2 \N \N ppm 2018-06-20 10:34:56.92+08 2018-06-20 10:34:56.925+08 7ce72daf-c0a1-4752-9e13-53fb00d348da 2 t f
+1894 physicalvalue 压力 Output \N 4 2 0 MPa 2018-03-26 11:43:24.224+08 2018-03-26 14:14:16.015+08 0f684ae0-ceb8-4c6a-95c4-e83bdd79059e 2 t f
+1893 physicalvalue 压力 Output \N 4 2 0 MPa 2018-03-26 11:43:24.208+08 2018-03-26 14:14:23.501+08 b72802e5-4982-4ba1-bd1b-15ba05d7d832 2 t f
+1892 physicalvalue 压力 Output \N 4 1 0 MPa 2018-03-26 11:43:23.187+08 2018-03-26 14:14:40.864+08 228d8257-dcf7-4493-a4d4-083712716318 2 t f
+1891 physicalvalue 压力 Output \N 4 1 0 MPa 2018-03-26 11:43:23.174+08 2018-03-26 14:14:47.827+08 c0ea2d7f-7778-47aa-af49-0119a729c741 2 t f
+1890 physicalvalue 压力 Output \N 4 0.8 0 MPa 2018-03-26 11:43:22.874+08 2018-03-26 14:15:02.815+08 08b32693-e4b0-44db-9d79-e45dff49062a 2 t f
+1889 physicalvalue 压力 Output \N 4 0.8 0 MPa 2018-03-26 11:43:22.866+08 2018-03-26 14:15:09.469+08 b0488049-bfc9-40ee-8dfa-79f9233638ec 2 t f
+1888 physicalvalue 压力 Output \N 4 0.4 0 MPa 2018-03-26 11:43:22.727+08 2018-03-26 14:15:31.072+08 750c60f8-168e-4bca-acf5-df2d502915f5 2 t f
+1887 physicalvalue 压力 Output \N 4 0.4 0 MPa 2018-03-26 11:43:22.71+08 2018-03-26 14:15:50.858+08 d8193d74-feb5-4872-8e42-95a335cd383f 2 t f
+1885 physicalvalue 压力 Output \N 4 0.2 0 MPa 2018-03-26 11:41:39.436+08 2018-03-26 14:17:08.523+08 84fc8a27-019f-4640-bbf6-466627f7c6d6 2 t f
+1886 physicalvalue 压力 Output \N 4 0.2 0 MPa 2018-03-26 11:41:39.444+08 2018-03-26 14:17:13.919+08 32b8c637-51b5-405c-920d-f7ae0adefafd 2 t f
+1425 anglex X轴角度 Output \N 3 10 -10 ° 2018-01-18 15:22:34.52+08 2018-03-29 10:26:57.805+08 ef4bfc5b-4560-487e-9e27-4a3249da9ae3 2 t f
+2104 angley Y轴角度 Output \N 2 \N \N ° 2018-03-29 13:38:18.217+08 2018-03-29 13:38:23.488+08 1ed1816a-f590-4eba-8702-c334ec7a1e1d 2 t f
+2172 length 位移 Output \N \N \N 5 10 0 mm 2018-04-09 16:11:41.568+08 2018-04-09 16:11:41.568+08 8cc91875-80ee-4c35-abe4-4c64888e18fc 2 t f
+2506 am 幅值 Output \N \N \N 5 \N \N mV 2018-07-31 14:56:32.836+08 2018-07-31 14:56:32.836+08 fbeb2848-9908-4883-878a-10608a621168 2 t f
+2343 concentration NO2浓度 Output \N 0 \N \N ppb 2018-06-20 10:35:53.288+08 2018-06-20 10:45:17.424+08 e3ec18ee-3f12-43f2-ba02-ac370abbc877 2 t f
+2348 concentration PM10浓度 Output \N 0 \N \N ug/m³ 2018-06-20 11:13:47.063+08 2018-06-20 11:14:16.327+08 87fdf1e4-fdd0-44c6-9bc3-bc5651c19030 2 t f
+2380 out out Variable \N \N 0 2 99 -99 \N 2018-07-03 19:14:02.265+08 2018-07-03 19:14:02.265+08 db66c7ee-46c0-4931-ba0e-67e0a1231256 2 t f
+2508 physicalvalue 应变 Output \N \N \N 4 1500 -1500 με 2018-07-31 15:09:37.928+08 2018-07-31 15:09:37.928+08 b61317eb-c793-4b2f-b680-2d15a061ec91 2 t f
+2385 axisnum 轴数 Output \N 0 2018-07-04 16:56:58.549+08 2018-07-24 10:31:30.716+08 a3e8fc6e-6dc8-4d65-b479-4b2ee719c712 5 t f
+2512 am 幅值 Output \N \N \N 3 \N \N mv 2018-07-31 15:13:55.361+08 2018-07-31 15:13:55.361+08 d702af0d-ac2f-48c9-bef4-31f6a5659b5a 2 t f
+2406 direction 方向 Output \N 0 2018-07-05 09:22:32.418+08 2018-07-24 10:33:45.408+08 a3e8fc6e-6dc8-4d65-b479-4b2ee719c712 5 t f
+2500 physicalvalue 微应变 Output \N \N \N 4 5000 -5000 με 2018-07-31 14:50:34.953+08 2018-07-31 14:50:34.953+08 4bd4c44c-2dca-4de3-9e9e-39b2bebc57a5 2 t f
+2414 standValue_Sum 标况累积量 Output \N \N \N \N \N \N m³/h 2018-07-10 17:26:01.742+08 2018-07-10 17:26:01.756+08 7624deeb-3f22-45ff-8a6c-a588e617c17b 2 t f
+2439 anglex X方向角度 Output \N \N \N 4 30 -30 ° 2018-07-18 10:00:20.014+08 2018-07-18 10:00:20.02+08 8f5658b2-c72d-4918-8f4c-e23b57d193a6 2 t f
+2388 axieWeight 轴重 Output \N 0 kg 2018-07-04 17:01:59.574+08 2018-07-24 10:31:12.528+08 a3e8fc6e-6dc8-4d65-b479-4b2ee719c712 5 t f
+2502 am 幅值 Output \N \N \N 5 \N \N mV 2018-07-31 14:52:40.414+08 2018-07-31 14:52:40.414+08 4bd4c44c-2dca-4de3-9e9e-39b2bebc57a5 2 t f
+2503 temperature 温度 Output \N \N \N 3 \N \N ℃ 2018-07-31 14:53:04.13+08 2018-07-31 14:53:04.13+08 4bd4c44c-2dca-4de3-9e9e-39b2bebc57a5 2 t f
+2505 frequency 频率 Output \N \N \N 4 \N \N Hz 2018-07-31 14:54:57.042+08 2018-07-31 14:54:57.042+08 fbeb2848-9908-4883-878a-10608a621168 2 t f
+2513 physicalvalue 应变 Output \N \N \N 4 5000 -5000 με 2018-07-31 15:14:20.795+08 2018-07-31 15:14:20.795+08 d702af0d-ac2f-48c9-bef4-31f6a5659b5a 2 t f
+2523 physicalvalue 应变 Output \N \N \N 4 1500 -1500 με 2018-07-31 15:20:55.83+08 2018-07-31 15:20:55.83+08 73e248c9-5515-4482-ac0a-af10af977c95 2 t f
+2527 humidity 湿度 Output \N 2 100 0 %RH 2018-07-31 17:09:27.765+08 2018-07-31 17:09:35.597+08 b5a575d9-25af-47ce-8a43-89a35317f2a1 2 t f
+2533 pressure 压强 Output \N \N \N 4 1000 0 KPa 2018-07-31 17:25:23.534+08 2018-07-31 17:25:23.534+08 49ca2a7b-0092-4889-a0ee-6146802ec384 2 t f
+2691 height 高度 Output \N 2 \N \N m 2018-08-17 15:55:31.709+08 2018-08-17 15:55:31.709+08 6105dff0-c96c-439e-8101-e0e7906834e0 2 t f
+2711 yDegree Y轴角度 Output \N 4 30 -30 ° 2018-08-24 09:09:28.332+08 2018-08-24 09:09:28.332+08 ce369680-ed47-4e58-8f38-4cbc786572a1 2 t f
+2712 xDegree X轴角度 Output \N 4 30 -30 ° 2018-08-24 09:09:28.344+08 2018-08-24 09:09:28.344+08 ce369680-ed47-4e58-8f38-4cbc786572a1 2 t f
+2695 obliquity 塔机倾角 Output \N 2 \N \N ° 2018-08-17 15:55:31.727+08 2018-08-17 16:09:43.287+08 6105dff0-c96c-439e-8101-e0e7906834e0 2 t f
+2694 rotation 回转角度 Output \N 0 \N \N ° 2018-08-17 15:55:31.724+08 2018-08-17 16:10:12.953+08 6105dff0-c96c-439e-8101-e0e7906834e0 1 t f
+2689 speed 风速 Output \N 2 \N \N m/s 2018-08-17 15:55:31.701+08 2018-08-17 16:10:33.492+08 6105dff0-c96c-439e-8101-e0e7906834e0 2 t f
+2696 moment 力矩 Output \N 2 100 0 % 2018-08-17 15:55:31.734+08 2018-08-17 16:12:26.64+08 6105dff0-c96c-439e-8101-e0e7906834e0 2 t f
+2708 Speeddeg 超载风速比 Output \N \N \N \N \N \N % 2018-08-17 17:43:50.518+08 2018-08-17 17:43:50.518+08 6105dff0-c96c-439e-8101-e0e7906834e0 1 t f
+2710 Obliquitydeg 超载倾角比 Output \N \N \N \N \N \N % 2018-08-17 17:44:35.706+08 2018-08-17 17:44:35.706+08 6105dff0-c96c-439e-8101-e0e7906834e0 1 t f
+2704 Rotationdeg 回转角度比 Output \N \N \N \N % 2018-08-17 17:41:03.268+08 2018-08-17 17:44:51.935+08 6105dff0-c96c-439e-8101-e0e7906834e0 2 t f
+2702 Heightdeg 超载高度比 Output \N \N \N \N % 2018-08-17 17:39:47.482+08 2018-08-17 17:45:07.621+08 6105dff0-c96c-439e-8101-e0e7906834e0 2 t f
+2700 Weightdeg 超载重量比 Output \N 0 \N \N % 2018-08-17 17:38:53.404+08 2018-08-17 17:45:21.943+08 6105dff0-c96c-439e-8101-e0e7906834e0 2 t f
+2706 Radiusdeg 超载幅度比 Output \N 0 \N \N % 2018-08-17 17:42:21.799+08 2018-10-12 16:13:12.704+08 6105dff0-c96c-439e-8101-e0e7906834e0 1 t f
+2698 weight 额定重量 Output \N 0 \N \N T 2018-08-17 15:55:31.741+08 2018-10-12 16:13:19.134+08 6105dff0-c96c-439e-8101-e0e7906834e0 1 t f
+2697 curweight 当前重量 Output \N 0 \N \N T 2018-08-17 15:55:31.738+08 2018-10-12 16:13:22.563+08 6105dff0-c96c-439e-8101-e0e7906834e0 1 t f
+2688 radius 幅度 Output \N 2 \N \N m 2018-08-17 15:55:31.696+08 2018-10-12 16:16:49.171+08 6105dff0-c96c-439e-8101-e0e7906834e0 2 t f
+2715 frequency 频率 Output \N 3 \N \N HZ 2018-08-24 15:55:16.967+08 2018-08-24 15:55:16.967+08 1ce82d97-cb86-4a43-bf17-b75116cac5e9 2 t f
+2716 temperature 温度 Output \N 2 80 -20 ℃ 2018-08-24 15:55:16.976+08 2018-08-24 15:55:16.976+08 1ce82d97-cb86-4a43-bf17-b75116cac5e9 2 t f
+2717 physicalvalue 荷载 Output \N 3 kN 2018-08-24 15:55:16.983+08 2018-08-24 16:08:58.714+08 1ce82d97-cb86-4a43-bf17-b75116cac5e9 2 t f
+2718 frequency 频率 Output \N 3 \N \N HZ 2018-08-24 16:11:22.986+08 2018-08-24 16:11:22.986+08 8bc9ea4b-7a7d-4cfb-8950-a5c8f0ea038b 2 t f
+2719 temperature 温度 Output \N 2 80 -20 ℃ 2018-08-24 16:11:22.999+08 2018-08-24 16:11:22.999+08 8bc9ea4b-7a7d-4cfb-8950-a5c8f0ea038b 2 t f
+2720 physicalvalue 荷载 Output \N 3 \N \N kN 2018-08-24 16:11:23.004+08 2018-08-24 16:11:23.004+08 8bc9ea4b-7a7d-4cfb-8950-a5c8f0ea038b 2 t f
+2721 frequency 频率 Output \N 3 \N \N HZ 2018-08-24 16:11:23.711+08 2018-08-24 16:11:23.711+08 64fd2ff4-b5d5-475c-b2a7-9881c50a0f4d 2 t f
+2722 temperature 温度 Output \N 2 80 -20 ℃ 2018-08-24 16:11:23.718+08 2018-08-24 16:11:23.718+08 64fd2ff4-b5d5-475c-b2a7-9881c50a0f4d 2 t f
+2723 physicalvalue 荷载 Output \N 3 \N \N kN 2018-08-24 16:11:23.725+08 2018-08-24 16:11:23.725+08 64fd2ff4-b5d5-475c-b2a7-9881c50a0f4d 2 t f
+2724 frequency 频率 Output \N 3 \N \N HZ 2018-08-24 16:11:25.531+08 2018-08-24 16:11:25.531+08 2a0639f4-2556-4682-bf61-63ab22867a18 2 t f
+2725 temperature 温度 Output \N 2 80 -20 ℃ 2018-08-24 16:11:25.591+08 2018-08-24 16:11:25.591+08 2a0639f4-2556-4682-bf61-63ab22867a18 2 t f
+2726 physicalvalue 荷载 Output \N 3 \N \N kN 2018-08-24 16:11:25.597+08 2018-08-24 16:11:25.597+08 2a0639f4-2556-4682-bf61-63ab22867a18 2 t f
+2727 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2018-08-28 18:06:12.438+08 2018-08-28 18:06:12.438+08 433bad92-fb3c-4e0f-b28a-c82c4c85fb5d 5 t f
+2728 physicalvalue 液位 Output \N 3 \N \N m 2018-08-30 16:11:49.461+08 2018-08-30 16:12:28.163+08 64210070-761e-4035-97b8-f76bfe61fca5 2 t f
+2751 physicalvalue X方向位移 Output \N \N \N 3 \N \N mm 2018-09-11 16:00:57.757+08 2018-09-11 16:00:57.757+08 5e49818b-0a1d-453c-aa14-1979f1371690 2 t f
+2729 physicalvalue 温度 Output \N 2 \N \N ℃ 2018-09-05 09:55:00.353+08 2018-09-05 14:38:59.167+08 2ad7273d-8ff0-4461-b87e-01d92fe46764 2 t f
+2730 physicalvalue 温度 Output \N 2 1000 -20 ℃ 2018-09-07 09:47:45.462+08 2018-09-07 10:54:09.837+08 450bca7e-218d-4faa-9527-ee2f0eceb3fe 2 t f
+2732 physicalvalue 温度 Output \N 2 100 0 %RH 2018-09-07 10:55:19.807+08 2018-09-07 10:55:19.807+08 4918bd89-601e-4f79-b31f-0aeda6062c82 2 t f
+2753 humidity 湿度 Output \N 2 \N \N %RH 2018-09-13 17:22:06.848+08 2018-09-13 17:44:14.828+08 7bbe4206-6562-4fc4-b62c-94b500d6cc4d 2 t f
+2735 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-09-07 11:15:01.147+08 2018-09-07 11:15:01.147+08 f46e1f36-2e28-4b26-950d-2e00fb0b4a03 2 t f
+2738 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-09-07 11:18:28.025+08 2018-09-07 11:18:28.025+08 8e1cc471-0670-4c4f-aa30-013e6de6e3c0 2 t f
+2734 frequency 频率 Output \N 2 HZ 2018-09-07 11:14:20.938+08 2018-09-07 11:20:59.138+08 f46e1f36-2e28-4b26-950d-2e00fb0b4a03 2 t f
+2733 physicalvalue 压力 Output \N 2 KN 2018-09-07 11:09:31.04+08 2018-09-07 11:21:46.401+08 f46e1f36-2e28-4b26-950d-2e00fb0b4a03 2 t f
+2739 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-09-07 11:22:10.529+08 2018-09-07 11:22:10.529+08 402f6e2a-74c7-4a3b-9021-66f64352eb7c 2 t f
+2740 frequency 频率 Output \N 2 \N \N HZ 2018-09-07 11:22:10.536+08 2018-09-07 11:22:10.536+08 402f6e2a-74c7-4a3b-9021-66f64352eb7c 2 t f
+2741 physicalvalue 压力 Output \N 2 \N \N KN 2018-09-07 11:22:10.545+08 2018-09-07 11:22:10.545+08 402f6e2a-74c7-4a3b-9021-66f64352eb7c 2 t f
+2737 angley Y轴角度 Output \N 2 ° 2018-09-07 11:18:28.011+08 2018-09-07 14:11:56.759+08 8e1cc471-0670-4c4f-aa30-013e6de6e3c0 2 t f
+2736 anglex X轴角度 Output \N 2 ° 2018-09-07 11:18:27.997+08 2018-09-07 14:12:05.049+08 8e1cc471-0670-4c4f-aa30-013e6de6e3c0 2 t f
+2742 length 液位 Output \N \N \N 3 \N \N mm 2018-09-10 10:24:28.347+08 2018-09-10 10:24:28.347+08 54115f13-d150-41a4-8d45-05de44b8decb 2 t f
+2743 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-09-10 10:27:43.877+08 2018-09-10 10:27:43.877+08 54115f13-d150-41a4-8d45-05de44b8decb 2 t f
+2744 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2018-09-10 15:29:08.321+08 2018-09-10 15:29:08.321+08 56b4000a-2a4d-454a-9134-7499ca4e859b 5 t f
+2745 length 液位 Output \N \N \N 3 \N \N mm 2018-09-10 17:12:48.023+08 2018-09-10 17:12:48.023+08 7bca9e02-73e3-4462-b527-a443d6ba576b 2 t f
+2746 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-09-10 17:13:13.28+08 2018-09-10 17:13:13.28+08 7bca9e02-73e3-4462-b527-a443d6ba576b 2 t f
+2747 length 液位 Output \N \N \N 3 \N \N mm 2018-09-11 14:40:25.76+08 2018-09-11 14:40:25.76+08 df2bbcd2-bc11-48de-8307-826382959126 2 t f
+2748 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-09-11 14:41:20.076+08 2018-09-11 14:41:20.076+08 df2bbcd2-bc11-48de-8307-826382959126 2 t f
+2749 physicalvalue 水位 Output \N \N \N 3 \N \N m 2018-09-11 15:52:56.576+08 2018-09-11 15:52:56.576+08 d0eba673-a21f-47b7-8c47-0368788a1b62 2 t f
+2750 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-09-11 15:53:17.911+08 2018-09-11 15:53:17.911+08 d0eba673-a21f-47b7-8c47-0368788a1b62 2 t f
+2752 temperature 温度 Output \N 2 \N \N ℃ 2018-09-13 17:21:00.323+08 2018-09-13 17:44:21.267+08 7bbe4206-6562-4fc4-b62c-94b500d6cc4d 2 t f
+2756 physicalvalue 应变 Output \N \N \N \N \N \N με 2018-09-19 17:33:03.806+08 2018-09-19 17:33:03.806+08 3b5383c8-bd1b-4f0e-bfea-1f0d746133c5 1 t f
+2757 anglex X轴角度 Output \N \N \N 2 \N \N ° 2018-09-20 13:53:03.287+08 2018-09-20 13:53:03.287+08 16407e57-188e-42f3-b626-ac8ff7405aeb 2 t f
+2758 angley Y轴角度 Output \N \N \N 2 \N \N ° 2018-09-20 13:53:25.764+08 2018-09-20 13:53:25.764+08 16407e57-188e-42f3-b626-ac8ff7405aeb 2 t f
+2714 physicalvalue X轴角度 Output \N 2 \N \N ° 2018-08-24 15:45:59.892+08 2018-09-21 15:39:05.631+08 e3a2390c-0ca0-4f9e-be9b-0214c81e5c4b 2 t f
+2759 x \N Output \N \N \N \N \N \N \N 2018-09-21 17:53:12.738+08 2018-09-21 17:53:12.738+08 7aa0f7e1-677e-4285-8888-33c63cf443d7 2 t f
+2766 physicalvalue 应变 Output \N \N \N \N \N \N με 2018-09-26 17:10:21.455+08 2018-09-26 17:10:21.455+08 0b0d6db1-2a75-4d2d-a4e9-7690437a3900 1 t f
+2713 physicalvalue 水位 Output \N 3 \N \N mm 2018-08-24 15:42:53.157+08 2018-09-21 16:19:23.407+08 a94fe00f-a8ea-4634-9262-e3c1ea0fa965 2 t f
+2760 y Output \N \N \N \N \N \N 2018-09-21 17:53:12.751+08 2018-09-21 17:53:12.751+08 7aa0f7e1-677e-4285-8888-33c63cf443d7 2 t f
+2761 z Output \N \N \N \N \N \N 2018-09-21 17:53:12.762+08 2018-09-21 17:53:12.762+08 7aa0f7e1-677e-4285-8888-33c63cf443d7 2 t f
+2762 length 位移 Output \N \N \N 5 50 0 mm 2018-09-25 10:58:51.07+08 2018-09-25 10:58:51.07+08 94fdfca3-2f0b-4003-b3fd-77dc3e522b6e 2 t f
+2763 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2018-09-25 15:45:23.994+08 2018-09-25 15:45:23.994+08 b9257d1a-c48e-498a-85a0-6a928f32b049 5 t f
+2765 level 液位 Output \N \N \N 3 \N \N mm 2018-09-26 14:40:09.253+08 2018-09-26 14:40:09.253+08 5b2b2647-ee99-48d8-b069-f487f052a552 2 t f
+2767 physicalvalue 应变 Output \N 3 4000 0 με 2018-09-29 15:46:46.73+08 2018-09-29 15:46:46.73+08 589f754e-ea3a-4643-9d79-234ed0834807 2 t f
+2768 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-09-29 15:46:46.736+08 2018-09-29 15:46:46.736+08 589f754e-ea3a-4643-9d79-234ed0834807 2 t f
+2769 temperature 温度 Output \N \N \N 3 60 -25 ℃ 2018-09-29 15:46:46.739+08 2018-09-29 15:46:46.739+08 589f754e-ea3a-4643-9d79-234ed0834807 2 t f
+2770 angley 角度 Output \N 2 30 -30 ° 2018-10-05 09:56:54.41+08 2018-10-06 17:46:55.503+08 de94d984-9d2e-4129-8fcb-b2655ab694b3 2 t f
+2771 oxygen 溶解氧 Output \N \N \N 2 20 0 mg/L 溶解氧值 2018-10-08 14:13:14.286+08 2018-10-08 14:13:14.286+08 7d700433-bb05-4381-8ace-4cf1f8dbd1df 2 t f
+2773 ph PH值 Output \N \N \N 2 \N \N pH 2018-10-08 16:48:22.309+08 2018-10-08 16:48:22.309+08 da364ec6-34cf-4bb6-8eb8-10548f45e67a 2 t f
+2774 temp 温度 Output \N \N \N 1 60 -10 ℃ 2018-10-08 16:48:22.317+08 2018-10-08 16:48:22.317+08 da364ec6-34cf-4bb6-8eb8-10548f45e67a 2 t f
+2772 temp 温度 Output \N 1 60 -10 ℃ 2018-10-08 14:13:14.292+08 2018-10-09 09:37:33.578+08 7d700433-bb05-4381-8ace-4cf1f8dbd1df 2 t f
+2775 pressure 压强 Output \N 5 \N \N kPa 2018-10-09 17:02:23.467+08 2018-10-09 17:03:34.183+08 ca8a3be8-72cf-497c-9743-e3d348c53672 2 t f
+2776 wavelength 波长 Output \N \N \N 3 \N \N mm 2018-10-10 11:27:42.941+08 2018-10-10 11:27:42.941+08 42ff7750-3e27-4669-8018-92caf824ecd2 2 t f
+2777 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-10-11 09:07:12.046+08 2018-10-11 09:07:12.046+08 6c2c69a6-9f3d-4429-b4ad-1515ec6ac5e9 2 t f
+2778 pressure 压强 Output \N \N \N 2 9999 -1999 kPa 2018-10-11 14:47:31.913+08 2018-10-11 14:47:31.913+08 9e7de9ac-68c1-48c2-bea1-751c1149407a 2 t f
+2784 winddirection 风向 Output \N \N \N 1 \N ° 2018-10-12 10:22:38.571+08 2018-10-12 10:22:38.571+08 9e452b06-8db9-43cf-9378-0d66ff102697 2 t f
+2782 humidity 湿度 Output \N 2 \N \N % 2018-10-12 10:21:41.982+08 2018-10-12 10:24:04.943+08 9e452b06-8db9-43cf-9378-0d66ff102697 2 t f
+2786 pm PM2.5 Output \N 3 500 0 ug/m3 2018-10-16 14:25:43.124+08 2018-11-08 12:41:21.933+08 bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a 2 t f
+2847 direction 风向 Output \N \N \N 2 \N \N ° 2018-11-02 17:15:03.067+08 2018-11-02 17:15:03.067+08 383450e1-ee35-4242-86ef-f2b575b96ba0 2 t f
+2779 temperature 温度 Output \N 2 \N \N ℃ 2018-10-12 10:19:30.561+08 2018-10-12 10:24:45.6+08 9e452b06-8db9-43cf-9378-0d66ff102697 2 t f
+2794 co 一氧化碳 Output \N 3 150 0 mg/m3 2018-10-16 14:51:30.595+08 2018-11-03 14:35:37.48+08 bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a 2 t f
+2780 wind 阵风 Output \N 2 \N \N km/h 2018-10-12 10:19:30.573+08 2018-11-05 17:02:54.645+08 9e452b06-8db9-43cf-9378-0d66ff102697 2 t f
+2787 pm10 PM10 Output \N 3 600 0 ug/m3 2018-10-16 14:26:00.899+08 2018-11-08 12:41:11.425+08 bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a 2 t f
+2791 so2 二氧化硫 Output \N 3 800 0 ug/m3 2018-10-16 14:49:00.857+08 2018-11-03 14:36:29.846+08 bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a 2 t f
+2788 pm100 PM100 Output \N 3 2000 0 ug/m3 2018-10-16 14:26:18.436+08 2018-11-08 12:41:44.552+08 bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a 2 t f
+2792 no2 二氧化氮 Output \N 3 3840 0 ug/m3 2018-10-16 14:49:52.898+08 2018-11-03 14:36:17.154+08 bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a 2 t f
+2807 windspeed 风速 Output \N 2 70 0 m/s 2018-10-24 15:35:26.657+08 2018-11-10 14:08:48.31+08 8221e541-b6e9-4b4b-8b70-7e533565674f 2 t f
+2800 wavelength 波长 Output \N \N \N 3 \N \N \N 2018-10-24 13:36:28.41+08 2018-10-24 13:36:28.41+08 6a85de5f-e927-43bb-bb03-21f34d546aca 2 t f
+2801 physicalvalue 温度 Output \N \N \N 2 \N ℃ 2018-10-24 13:38:36.428+08 2018-10-24 13:38:36.428+08 6a85de5f-e927-43bb-bb03-21f34d546aca 2 t f
+2799 range_weight 量程 Output \N 0 \N \N Kg 2018-10-18 15:28:50.236+08 2018-10-26 14:42:10.728+08 2e746e8b-7af0-488d-9e6a-6839f50952cd 1 t f
+2798 division 分度 Output \N 0 \N \N Kg 2018-10-18 15:28:25.19+08 2018-10-26 14:42:15.305+08 2e746e8b-7af0-488d-9e6a-6839f50952cd 1 t f
+2797 upLimit 满点 Output \N 0 \N \N Kg 2018-10-18 15:27:35.45+08 2018-10-26 14:42:18.02+08 2e746e8b-7af0-488d-9e6a-6839f50952cd 1 t f
+2796 lowerLimit 零点 Output \N 0 \N \N Kg 2018-10-18 15:26:17.878+08 2018-10-26 14:42:21.062+08 2e746e8b-7af0-488d-9e6a-6839f50952cd 1 t f
+2795 weight 重量 Output \N 0 \N \N Kg 2018-10-18 15:25:49.229+08 2018-10-26 14:42:25.337+08 2e746e8b-7af0-488d-9e6a-6839f50952cd 1 t f
+2783 windspeed 风速 Output \N 2 \N \N km/h 2018-10-12 10:22:04.04+08 2018-11-02 16:58:02.161+08 9e452b06-8db9-43cf-9378-0d66ff102697 2 t f
+2785 radiation 光辐射 Output \N 3 \N \N wat/m^2 2018-10-12 10:23:18.422+08 2018-11-02 16:58:13.573+08 9e452b06-8db9-43cf-9378-0d66ff102697 2 t f
+2824 male_out 男厕出流量 Output \N 0 \N \N 人 2018-10-26 16:28:41.012+08 2018-10-30 20:03:14.375+08 27f22c17-c2a9-47b7-82f9-f87716de54fa 1 t f
+2825 male_in 男厕进流量 Output \N 0 人 2018-10-26 16:29:10.228+08 2018-10-30 20:03:01.189+08 27f22c17-c2a9-47b7-82f9-f87716de54fa 1 t f
+2823 male_stay 男厕驻留人数 Output \N 0 \N \N 人 2018-10-26 16:28:22.689+08 2018-10-30 20:03:17.04+08 27f22c17-c2a9-47b7-82f9-f87716de54fa 1 t f
+2822 female_in 女厕进流量 Output \N 0 人 2018-10-26 16:28:00.746+08 2018-10-30 20:03:19.602+08 27f22c17-c2a9-47b7-82f9-f87716de54fa 1 t f
+2821 female_out 女厕出流量 Output \N 0 \N \N 人 2018-10-26 16:27:29.978+08 2018-10-30 20:03:22.355+08 27f22c17-c2a9-47b7-82f9-f87716de54fa 1 t f
+2820 female_stay 女厕驻留人数 Output \N 0 \N \N 人 2018-10-26 16:27:10.991+08 2018-10-30 20:03:27.214+08 27f22c17-c2a9-47b7-82f9-f87716de54fa 1 t f
+2834 humidity 湿度 Output \N \N \N 2 \N \N %RH 2018-10-30 22:17:59.337+08 2018-10-30 22:17:59.337+08 02e056da-0fdc-4477-bdb1-f52f28a1f6bd 2 t f
+2826 readingNumber 电表示数 Output \N 3 \N \N kWh 2018-10-26 17:55:21.461+08 2018-11-02 11:02:55.014+08 abcf8bcb-b863-4219-b7df-9f5ac18ccaf1 2 t f
+2817 pitstate 坑位状态 Output \N 0 \N 2018-10-26 16:17:49.055+08 2018-11-02 14:56:23.29+08 4caa397a-da74-42c1-b0a7-a83ba80b975e 5 t f
+2863 physicalvalue 压力 Output \N \N \N 3 \N \N Mpa 2018-11-07 10:57:54.645+08 2018-11-07 10:57:54.645+08 b5a32d0d-110f-4eba-9d54-a5a661fb55d2 2 t f
+2793 o3 臭氧 Output \N 3 1200 0 ug/m3 2018-10-16 14:51:10.111+08 2018-11-03 14:34:51.342+08 bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a 2 t f
+2789 temp 温度 Output \N 1 80 -40 ℃ 2018-10-16 14:27:20.016+08 2018-11-03 14:25:44.721+08 bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a 2 t f
+2790 humi 湿度 Output \N 1 100 0 % 2018-10-16 14:27:58.663+08 2018-11-03 14:25:53.905+08 bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a 2 t f
+2806 humidity 湿度 Output \N 2 100 0 % 2018-10-24 15:34:59.639+08 2018-11-10 14:08:56.533+08 8221e541-b6e9-4b4b-8b70-7e533565674f 2 t f
+2805 temp 温度 Output \N 2 120 -40 ℃ 2018-10-24 15:27:02.653+08 2018-11-10 14:09:10.18+08 8221e541-b6e9-4b4b-8b70-7e533565674f 2 t f
+2804 noise 噪声 Output \N 2 120 30 db 2018-10-24 15:26:30.498+08 2018-11-10 14:09:29.107+08 8221e541-b6e9-4b4b-8b70-7e533565674f 2 t f
+2803 pm10 PM10 Output \N 2 999.9 0 ug/m³ 2018-10-24 15:24:05.783+08 2018-11-10 14:09:43.45+08 8221e541-b6e9-4b4b-8b70-7e533565674f 2 t f
+2802 pm25 PM2.5 Output \N 2 999.9 0 ug/m³ 2018-10-24 15:23:32.16+08 2018-11-10 14:09:51.191+08 8221e541-b6e9-4b4b-8b70-7e533565674f 2 t f
+2808 winddir 风向 Output \N 2 360 0 ° 2018-10-24 15:35:57.337+08 2018-11-10 14:10:01.395+08 8221e541-b6e9-4b4b-8b70-7e533565674f 2 t f
+2835 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-10-30 22:17:59.343+08 2018-10-30 22:17:59.343+08 02e056da-0fdc-4477-bdb1-f52f28a1f6bd 2 t f
+2833 NH3 氨气浓度 Output \N 2 \N \N ppm 2018-10-30 22:17:59.329+08 2018-10-30 22:18:12.386+08 02e056da-0fdc-4477-bdb1-f52f28a1f6bd 2 t f
+2836 ph PH值 Output \N \N \N 2 \N \N pH 2018-10-31 18:17:39.535+08 2018-10-31 18:17:39.535+08 27a9d353-a3e8-4669-97b5-f467e52007c5 2 t f
+2552 noise 噪声 Output \N 2 dB 2018-08-02 10:37:02.589+08 2018-12-29 10:16:27.825+08 812c58c6-4cd2-48fd-942a-2024f91035bb 2 t f
+2842 rainfall 雨量 Output \N \N \N 2 \N \N mm 2018-11-02 17:01:22.478+08 2018-11-02 17:01:22.478+08 9e452b06-8db9-43cf-9378-0d66ff102697 2 t f
+2843 pm10 PM10 Output \N \N \N 2 \N \N μg/m³ 2018-11-02 17:13:16.851+08 2018-11-02 17:13:16.851+08 383450e1-ee35-4242-86ef-f2b575b96ba0 2 t f
+2844 pm25 PM2.5 Output \N \N \N 2 \N \N μg/m³ 2018-11-02 17:13:40.006+08 2018-11-02 17:13:40.006+08 383450e1-ee35-4242-86ef-f2b575b96ba0 2 t f
+2845 noise 噪声 Output \N \N \N 2 \N \N dB 2018-11-02 17:14:03.856+08 2018-11-02 17:14:03.856+08 383450e1-ee35-4242-86ef-f2b575b96ba0 2 t f
+2846 speed 风速 Output \N \N \N 2 \N \N m/s 2018-11-02 17:14:42.164+08 2018-11-02 17:14:42.164+08 383450e1-ee35-4242-86ef-f2b575b96ba0 2 t f
+2848 humidity 湿度 Output \N \N \N 2 \N \N %RH 2018-11-02 17:15:27.803+08 2018-11-02 17:15:27.803+08 383450e1-ee35-4242-86ef-f2b575b96ba0 2 t f
+2849 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-11-02 17:15:44.245+08 2018-11-02 17:15:44.245+08 383450e1-ee35-4242-86ef-f2b575b96ba0 2 t f
+2840 temperature 温度 Output \N 2 \N \N ℃ 2018-10-31 18:21:44.205+08 2018-11-02 18:30:18.325+08 27a9d353-a3e8-4669-97b5-f467e52007c5 2 t f
+2837 conductivity 电导 Output \N 0 \N \N μs/cm 2018-10-31 18:18:34.409+08 2018-11-02 18:30:36.137+08 27a9d353-a3e8-4669-97b5-f467e52007c5 1 t f
+2850 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-11-03 15:55:05.864+08 2018-11-03 15:55:05.864+08 677a3cf9-1821-4ddf-98af-6bfef51be1d0 2 t f
+2851 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-11-03 15:55:33.784+08 2018-11-03 15:55:33.784+08 677a3cf9-1821-4ddf-98af-6bfef51be1d0 2 t f
+2852 physicalvalue 压力 Output \N \N \N 3 \N \N Kpa 2018-11-03 17:14:39.506+08 2018-11-03 17:14:39.506+08 677a3cf9-1821-4ddf-98af-6bfef51be1d0 2 t f
+2853 conductivity 电导 Output \N \N \N \N \N \N μs/cm 2018-11-05 09:08:45.118+08 2018-11-05 09:08:45.118+08 970a19fd-31b9-4485-90d3-6394bc637a87 1 t f
+2854 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-11-05 09:08:45.125+08 2018-11-05 09:08:45.125+08 970a19fd-31b9-4485-90d3-6394bc637a87 2 t f
+2855 turbidity 浊度 Output \N \N \N 5 \N \N NTU 2018-11-05 09:08:45.13+08 2018-11-05 09:08:45.13+08 970a19fd-31b9-4485-90d3-6394bc637a87 2 t f
+2856 oxygen 溶解氧 Output \N \N \N 5 \N \N mg/l 2018-11-05 09:08:45.135+08 2018-11-05 09:08:45.135+08 970a19fd-31b9-4485-90d3-6394bc637a87 2 t f
+2857 ph PH值 Output \N \N \N 2 \N \N pH 2018-11-05 09:08:45.14+08 2018-11-05 09:08:45.14+08 970a19fd-31b9-4485-90d3-6394bc637a87 2 t f
+2859 soiltemp 土壤温度 Output \N \N \N 2 \N \N ℃ 2018-11-05 16:35:56.565+08 2018-11-05 16:35:56.565+08 9e452b06-8db9-43cf-9378-0d66ff102697 2 t f
+2860 soilcond 土壤电导率 Output \N \N \N 2 \N \N ms/cm 2018-11-05 16:36:33.766+08 2018-11-05 16:36:33.766+08 9e452b06-8db9-43cf-9378-0d66ff102697 2 t f
+2875 speed 风速 Output \N \N \N 2 \N \N m/s 2018-11-13 15:31:16.384+08 2018-11-13 15:31:16.384+08 d1fa6c6c-dfb0-450d-bc20-1207b2973420 2 t f
+2861 soilwater2 土壤水分(SM100) Output \N 2 \N \N % 2018-11-05 16:40:53.308+08 2018-11-05 16:57:52.343+08 9e452b06-8db9-43cf-9378-0d66ff102697 2 t f
+2858 soilwater 土壤水分 Output \N 2 \N \N % 2018-11-05 16:35:36.551+08 2018-11-05 16:57:59.36+08 9e452b06-8db9-43cf-9378-0d66ff102697 2 t f
+194 conductivity 导电率 Output \N 2 \N \N μs/cm 2017-09-14 19:08:55.146+08 2018-11-06 10:30:51.822+08 4a08b319-23f2-4854-ad86-755792e575d4 2 t f
+2862 soiltemp2 土壤温度(3677) Output \N \N \N 2 \N \N ℃ 2018-11-06 15:37:12.851+08 2018-11-06 15:37:12.851+08 9e452b06-8db9-43cf-9378-0d66ff102697 2 t f
+2864 temp 温度 Output \N \N \N 2 \N \N ℃ 2018-11-09 14:49:07.702+08 2018-11-09 14:49:07.702+08 ed0bee37-45a5-464f-aec8-5b97ee0fb1d3 2 t f
+2876 direction 风向 Output \N \N \N 2 \N \N ° 2018-11-13 15:31:40.778+08 2018-11-13 15:31:40.778+08 d1fa6c6c-dfb0-450d-bc20-1207b2973420 2 t f
+2867 pm10 pm10 Output \N \N \N 2 \N \N ug/m3 2018-11-10 11:22:00.206+08 2018-11-10 11:22:00.206+08 bf029965-3d0b-4ca6-9426-c9aa2ea4b091 2 t f
+2866 pm25 pm25 Output \N 2 \N \N ug/m3 2018-11-10 11:11:24.632+08 2018-11-10 11:22:07.103+08 bf029965-3d0b-4ca6-9426-c9aa2ea4b091 2 t f
+2868 noise 噪声 Output \N \N \N 2 \N \N dB 2018-11-10 11:22:28.416+08 2018-11-10 11:22:28.416+08 bf029965-3d0b-4ca6-9426-c9aa2ea4b091 2 t f
+2869 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-11-10 11:22:50.342+08 2018-11-10 11:22:50.342+08 bf029965-3d0b-4ca6-9426-c9aa2ea4b091 2 t f
+2870 humidity 湿度 Output \N \N \N 2 \N \N %RH 2018-11-10 11:23:07.077+08 2018-11-10 11:23:07.077+08 bf029965-3d0b-4ca6-9426-c9aa2ea4b091 2 t f
+2871 windSpeed 风速 Output \N \N \N 2 \N \N m/s 2018-11-10 11:23:30.819+08 2018-11-10 11:23:30.819+08 bf029965-3d0b-4ca6-9426-c9aa2ea4b091 2 t f
+2872 windDirection 风向 Output \N \N \N 2 \N \N ° 2018-11-10 11:23:49.653+08 2018-11-10 11:23:49.653+08 bf029965-3d0b-4ca6-9426-c9aa2ea4b091 2 t f
+2873 windForce 风力 Output \N \N \N 1 \N \N 级 2018-11-10 11:24:34.852+08 2018-11-10 11:24:34.852+08 bf029965-3d0b-4ca6-9426-c9aa2ea4b091 2 t f
+2877 temp 温度 Output \N \N \N 2 \N \N ℃ 2018-11-13 15:36:10.376+08 2018-11-13 15:36:10.376+08 f27415f0-f6a5-43cb-bb3c-f54d94dd0930 2 t f
+2878 humdity 湿度 Output \N \N \N 2 \N \N % 2018-11-13 15:36:10.383+08 2018-11-13 15:36:10.383+08 f27415f0-f6a5-43cb-bb3c-f54d94dd0930 2 t f
+2838 oxygen 溶解氧 Output \N 2 \N \N mg/l 2018-10-31 18:20:34.967+08 2019-10-24 14:15:55.419+08 27a9d353-a3e8-4669-97b5-f467e52007c5 2 t f
+2901 obliguityY 倾角Y Output \N \N \N 2 9.9 -9.9 ° 2018-11-15 16:05:49.478+08 2018-11-15 16:05:49.478+08 23587253-110b-4b12-8c74-53f5147ad189 2 t f
+2880 pm1 PM1.0 Output \N \N \N \N \N \N ug/m3 2018-11-13 16:37:13.343+08 2018-11-13 16:37:13.343+08 18903d51-d495-45f0-8d08-6f52d8a62684 1 t f
+2881 pm25 PM2.5 Output \N \N \N \N \N \N ug/m3 2018-11-13 16:37:13.347+08 2018-11-13 16:37:13.347+08 18903d51-d495-45f0-8d08-6f52d8a62684 1 t f
+2882 pm10 PM10 Output \N \N \N \N \N \N ug//m3 2018-11-13 16:37:13.351+08 2018-11-13 16:37:13.351+08 18903d51-d495-45f0-8d08-6f52d8a62684 1 t f
+2883 Obliguity 倾角 Output \N 2 9.99 -9.99 ° 2018-11-14 13:58:46.928+08 2018-11-14 17:18:03.529+08 3452703a-aec3-4cca-9aa7-7041c1ba236e 2 t f
+2887 RRange 幅度 Output \N 2 99.99 0 m 2018-11-14 14:04:54.773+08 2018-11-14 17:16:43.651+08 3452703a-aec3-4cca-9aa7-7041c1ba236e 2 t f
+2884 WindLevel 风级 Output \N 0 12 0 2018-11-14 13:59:35.68+08 2018-11-14 17:16:22.947+08 3452703a-aec3-4cca-9aa7-7041c1ba236e 1 t f
+2886 Height 高度 Output \N 2 655.35 0 m 2018-11-14 14:04:20.616+08 2018-11-14 17:17:05.804+08 3452703a-aec3-4cca-9aa7-7041c1ba236e 2 t f
+2885 Angle 角度 Output \N 2 359.9 0 ° 2018-11-14 14:03:35.684+08 2018-11-14 17:17:33.405+08 3452703a-aec3-4cca-9aa7-7041c1ba236e 2 t f
+2907 isOnline 上线 Output \N \N \N \N 1 0 \N 2018-11-16 15:48:15.345+08 2018-11-16 15:48:15.345+08 23587253-110b-4b12-8c74-53f5147ad189 1 t f
+2912 height 高度 Output \N \N \N 3 \N \N mm 2018-11-17 14:09:20.452+08 2018-11-17 14:09:20.452+08 6867f7aa-51dd-4f2d-acd3-ed771f2fb33b 2 t f
+2553 pm25 PM2.5 Output \N 3 ug/m³ 2018-08-02 10:37:02.596+08 2018-12-29 10:16:32.398+08 812c58c6-4cd2-48fd-942a-2024f91035bb 2 t f
+2561 humidity 湿度 Output \N 2 %RH 2018-08-02 15:10:50.291+08 2018-12-29 10:16:36.431+08 812c58c6-4cd2-48fd-942a-2024f91035bb 2 t f
+2940 value 轴向力 Output \N 3 160 70 KN 2018-12-03 14:10:32.259+08 2018-12-03 14:13:35.903+08 f5c02f07-5612-47c7-a0e8-2f5284f203e3 2 t f
+2889 Multiple 倍率 Output \N 0 99 1 2018-11-14 14:07:07.799+08 2018-11-14 17:14:01.485+08 3452703a-aec3-4cca-9aa7-7041c1ba236e 1 t f
+2894 Moment 力矩百分比 Output \N 2 655.35 0 % 2018-11-14 15:37:20.827+08 2018-11-14 17:14:34.562+08 3452703a-aec3-4cca-9aa7-7041c1ba236e 2 t f
+2892 Weight 载重 Output \N 2 99.99 0 t 2018-11-14 15:35:18.686+08 2018-11-14 17:14:58.7+08 3452703a-aec3-4cca-9aa7-7041c1ba236e 2 t f
+2891 RatedWeight 额定载重 Output \N 2 99.99 0 t 2018-11-14 15:22:58.162+08 2018-11-14 17:15:29.458+08 3452703a-aec3-4cca-9aa7-7041c1ba236e 2 t f
+2890 WindSpeed 风速 Output \N 2 36.90 0 m/s 2018-11-14 15:21:11.531+08 2018-11-14 17:15:55.891+08 3452703a-aec3-4cca-9aa7-7041c1ba236e 2 t f
+2895 peopleCnt 人数 Output \N 0 \N \N 人 2018-11-15 15:52:14.514+08 2018-11-15 15:52:38.555+08 23587253-110b-4b12-8c74-53f5147ad189 1 t f
+2896 weight 载重 Output \N \N \N 2 9.99 0 t 2018-11-15 15:53:10.978+08 2018-11-15 15:53:10.978+08 23587253-110b-4b12-8c74-53f5147ad189 2 t f
+2897 speed 速度 Output \N \N \N 2 9.9 -9.9 m/s 2018-11-15 15:56:01.074+08 2018-11-15 15:56:01.074+08 23587253-110b-4b12-8c74-53f5147ad189 2 t f
+2898 height 高度 Output \N \N \N 1 999.9 -999.9 m 2018-11-15 15:58:12.029+08 2018-11-15 15:58:12.029+08 23587253-110b-4b12-8c74-53f5147ad189 2 t f
+2899 floor 楼层 Output \N \N \N \N 999 -999 层 2018-11-15 16:04:46.288+08 2018-11-15 16:04:46.288+08 23587253-110b-4b12-8c74-53f5147ad189 1 t f
+2900 obliguityX 倾角X Output \N \N \N 2 9.9 -9.9 ° 2018-11-15 16:05:16.455+08 2018-11-15 16:05:16.455+08 23587253-110b-4b12-8c74-53f5147ad189 2 t f
+2902 windSpeed 风速 Output \N \N \N 2 36.90 0 m/s 2018-11-15 16:06:29.714+08 2018-11-15 16:06:29.714+08 23587253-110b-4b12-8c74-53f5147ad189 2 t f
+2903 windLevel 风级 Output \N \N \N \N 12 0 级 2018-11-15 16:06:58.144+08 2018-11-15 16:06:58.144+08 23587253-110b-4b12-8c74-53f5147ad189 1 t f
+2904 doorState 笼门开关状态 Output \N \N \N \N \N \N 2018-11-15 16:07:24.723+08 2018-11-15 16:07:24.723+08 23587253-110b-4b12-8c74-53f5147ad189 1 t f
+2905 isOnline 上线 Output \N \N \N \N 1 0 \N 2018-11-16 15:23:05.97+08 2018-11-16 15:23:05.97+08 3452703a-aec3-4cca-9aa7-7041c1ba236e 1 t f
+2913 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-11-17 14:09:58.052+08 2018-11-17 14:09:58.052+08 6867f7aa-51dd-4f2d-acd3-ed771f2fb33b 2 t f
+2914 voltage 电压 Output \N 2 \N \N v 2018-11-17 14:10:37.478+08 2018-11-17 14:10:45.591+08 6867f7aa-51dd-4f2d-acd3-ed771f2fb33b 2 t f
+2943 pm25 PM2.5 Output \N \N \N 3 \N \N μg/m³ 2018-12-03 16:30:01.637+08 2018-12-03 16:30:01.637+08 f51fa45a-b4ee-4071-a1cb-b9b7657421f5 2 t f
+2918 length 裂缝 Output \N \N \N 3 \N \N mm 2018-11-20 16:26:58.27+08 2018-11-20 16:26:58.27+08 7faa8d59-78aa-493f-855c-39efc2890727 2 t f
+2909 length 位移 Output \N 3 \N \N mm 2018-11-17 09:49:16.466+08 2018-11-20 16:36:20.504+08 ec90f249-7504-4b98-93e1-8f6f39352105 2 t f
+2919 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-11-21 14:58:32.108+08 2018-11-21 14:58:32.108+08 7faa8d59-78aa-493f-855c-39efc2890727 2 t f
+2924 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-11-22 17:13:27.268+08 2018-11-22 17:13:27.268+08 41d50f61-0dd5-4761-977c-1ebf6e29b35f 2 t f
+2927 frequency 频率 Output \N 3 \N \N HZ 2018-11-23 10:32:50.895+08 2018-11-23 10:32:50.895+08 7d4a13ce-fcb5-4eb4-89dc-77f1b0b46fe8 2 t f
+2929 temperature 温度 Output \N 2 80 -20 ℃ 2018-11-23 10:32:50.905+08 2018-11-23 10:32:50.905+08 7d4a13ce-fcb5-4eb4-89dc-77f1b0b46fe8 2 t f
+2928 physicalvalue 位移 Output \N 3 2000 0 mm 2018-11-23 10:32:50.901+08 2018-11-23 10:35:08.007+08 7d4a13ce-fcb5-4eb4-89dc-77f1b0b46fe8 2 t f
+2930 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-11-23 17:10:41.064+08 2018-11-23 17:10:41.064+08 07b4abb3-3cd6-43ad-80af-e256996876d7 2 t f
+2933 frequency 频率 Output \N 3 \N \N Hz 2018-11-24 17:43:54.089+08 2018-11-24 17:44:01.457+08 00da1250-a423-4a89-993d-3cacb4df488c 2 t f
+2934 am 幅值 Output \N \N \N 3 \N \N mv 2018-11-24 17:44:24.308+08 2018-11-24 17:44:24.308+08 00da1250-a423-4a89-993d-3cacb4df488c 2 t f
+2935 physicalvalue 应力 Output \N 4 \N \N MPa 2018-11-24 17:44:39.774+08 2018-11-24 17:44:51.64+08 00da1250-a423-4a89-993d-3cacb4df488c 2 t f
+2959 physicalvalue 水压 Output \N 4 0.6 0 MPa 2018-12-06 10:15:59.118+08 2018-12-06 10:16:05.656+08 f7d87585-4ebf-4d22-a1ce-05ef947311e7 2 t f
+2960 temperature 温度 Output \N 2 \N \N ℃ 2018-12-06 10:17:03.031+08 2018-12-06 10:17:16.712+08 f7d87585-4ebf-4d22-a1ce-05ef947311e7 2 t f
+2965 am 幅值 Output \N \N \N 3 \N \N mv 2018-12-06 10:20:50.298+08 2018-12-06 10:20:50.298+08 0d021590-ab48-4d98-b318-458faaf5d934 2 t f
+2966 physicalvalue 水压 Output \N \N \N 4 1 0 MPa 2018-12-06 10:22:57.235+08 2018-12-06 10:22:57.235+08 cf51dafe-466c-4549-b2c3-3eb4dbf5d871 2 t f
+2970 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-12-06 10:26:16.011+08 2018-12-06 10:26:16.011+08 322b0741-7b10-4499-a14d-5c660bc3dadf 2 t f
+2982 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-12-06 11:39:05.006+08 2018-12-06 11:39:05.006+08 cba87e64-ebf2-4b4b-8fe3-8df973625a56 2 t f
+2986 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-06 11:48:25.439+08 2018-12-06 11:48:25.439+08 21c31597-4e3d-4568-bc38-7d53a010fe90 2 t f
+2996 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-12-07 17:12:17.907+08 2018-12-07 17:12:17.907+08 383732b4-ea54-49fb-8e63-4dd2c614e5fd 2 t f
+2997 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-07 17:12:17.912+08 2018-12-07 17:12:17.912+08 383732b4-ea54-49fb-8e63-4dd2c614e5fd 2 t f
+2998 physicalvalue 应变 Output \N 3 \N \N με 2018-12-07 17:12:17.917+08 2018-12-07 17:12:17.917+08 383732b4-ea54-49fb-8e63-4dd2c614e5fd 2 t f
+3020 dy dy累积形变量 Output \N 6 \N \N mm 2018-12-08 15:44:48.074+08 2018-12-08 16:06:55.303+08 d1c4860a-e460-4a8a-928a-0c08b2f1e408 2 t f
+2915 saltContent 盐分 Output \N 0 8000 0 mg/L 2018-11-19 11:12:59.734+08 2018-12-13 11:05:36.039+08 067d099e-3d4d-40f5-8ca7-68383ffd5208 1 t f
+2916 concentration 浓度 Output \N \N \N \N \N \N ppm 2018-11-20 15:00:21.595+08 2018-11-20 15:00:21.595+08 99a6468c-6183-4253-bc6f-0e66fea8e3ce 1 t f
+2917 ph PH Output \N \N \N 2 \N \N \N 2018-11-20 15:20:27.125+08 2018-11-20 15:20:27.125+08 59ea18ad-dfaf-406a-95bc-213eaff64b6b 2 t f
+2920 temperature 温度 Output \N 2 70 -25 ℃ 2018-11-22 15:43:55.865+08 2018-11-22 15:44:22.494+08 08549605-83a6-46c5-8fbc-83279c95d08e 2 t f
+2921 angley Y方向角度 Output \N 4 30 -30 ° 2018-11-22 15:44:51.892+08 2018-11-22 15:45:07.643+08 08549605-83a6-46c5-8fbc-83279c95d08e 2 t f
+2946 speed 风速 Output \N \N \N 2 \N m/s 2018-12-03 16:31:05.39+08 2018-12-03 16:31:05.39+08 f51fa45a-b4ee-4071-a1cb-b9b7657421f5 2 t f
+2922 anglex X方向角度 Output \N \N \N 4 30 -30 ° 2018-11-22 15:45:32.346+08 2018-11-22 15:45:32.346+08 08549605-83a6-46c5-8fbc-83279c95d08e 2 t f
+2923 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2018-11-22 16:02:31.609+08 2018-11-22 16:02:31.609+08 b0d9fed6-e9d2-46d8-9995-4b9865155e77 5 t f
+2925 humidity 湿度 Output \N \N \N 2 \N \N % 2018-11-22 17:13:45.465+08 2018-11-22 17:13:45.465+08 41d50f61-0dd5-4761-977c-1ebf6e29b35f 2 t f
+2926 intensity 照度 Output \N \N \N \N 200000 0 Lux 2018-11-22 17:32:58.687+08 2018-11-22 17:32:58.687+08 e2cb4c00-ac04-478b-afc2-eb7928bfb361 1 t f
+2931 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-11-23 17:10:58.826+08 2018-11-23 17:10:58.826+08 07b4abb3-3cd6-43ad-80af-e256996876d7 2 t f
+2936 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-11-24 17:45:06.49+08 2018-11-24 17:45:06.49+08 00da1250-a423-4a89-993d-3cacb4df488c 2 t f
+2989 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-12-06 11:51:11.455+08 2018-12-06 11:51:11.455+08 21c31597-4e3d-4568-bc38-7d53a010fe90 2 t f
+2932 physicalvalue 轴力 Output \N 3 \N \N KN 2018-11-23 17:11:23.418+08 2018-12-07 17:13:55.678+08 07b4abb3-3cd6-43ad-80af-e256996876d7 2 t f
+2937 温度 温度 Variable \N \N 26 2 100 -50 C 2018-11-28 15:04:14.069+08 2018-11-28 15:04:14.069+08 37421fe7-d68a-4eb7-a2b4-f8238e4ee63d 2 t f
+2938 length 水位 Output \N \N \N \N \N \N mm 2018-12-03 10:39:43.581+08 2018-12-03 10:39:43.581+08 ffb4a9e7-51b0-45d7-b5a7-a80bf31c7f6a 1 t f
+2939 value 拉力 Output \N 3 1000 0 KN 2018-12-03 14:00:53.521+08 2018-12-03 14:13:49.182+08 a9a88239-bda9-4074-8162-0831dde92dd6 2 t f
+2941 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-03 16:28:21.62+08 2018-12-03 16:28:21.62+08 f51fa45a-b4ee-4071-a1cb-b9b7657421f5 2 t f
+2942 humidity 湿度 Output \N 2 \N \N %RH 2018-12-03 16:29:03.714+08 2018-12-03 16:29:39.413+08 f51fa45a-b4ee-4071-a1cb-b9b7657421f5 2 t f
+2944 pm10 PM10 Output \N \N \N 3 \N \N pm10 2018-12-03 16:30:16.37+08 2018-12-03 16:30:16.37+08 f51fa45a-b4ee-4071-a1cb-b9b7657421f5 2 t f
+2945 noise 噪音 Output \N \N \N 2 \N \N dB 2018-12-03 16:30:39.53+08 2018-12-03 16:30:39.53+08 f51fa45a-b4ee-4071-a1cb-b9b7657421f5 2 t f
+2947 direction 风向 Output \N \N \N 2 \N \N ° 2018-12-03 16:31:32.728+08 2018-12-03 16:31:32.728+08 f51fa45a-b4ee-4071-a1cb-b9b7657421f5 2 t f
+2948 TSP TSP Output \N 2 \N \N μg/m³ 2018-12-03 16:32:25.502+08 2018-12-03 16:32:39.075+08 f51fa45a-b4ee-4071-a1cb-b9b7657421f5 2 t f
+2949 wind 风力 Output \N \N \N 1 \N \N 级 2018-12-03 16:33:47.315+08 2018-12-03 16:33:47.315+08 f51fa45a-b4ee-4071-a1cb-b9b7657421f5 2 t f
+2950 frequency 频率 Output \N 3 \N \N Hz 2018-12-05 15:00:20.406+08 2018-12-05 15:00:30.896+08 4f2419a5-1b3b-4929-9b0f-27d286d684a4 2 t f
+2975 am 幅值 Output \N \N \N 3 \N \N mv 2018-12-06 11:12:55.7+08 2018-12-06 11:12:55.7+08 d8d994be-3cdb-4646-a06b-d2869fdbedf6 2 t f
+3005 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-12-07 17:22:03.078+08 2018-12-07 17:22:03.078+08 c8e9affc-7965-452f-af9d-db9cafc1a54f 2 t f
+3006 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-07 17:22:03.085+08 2018-12-07 17:22:03.085+08 c8e9affc-7965-452f-af9d-db9cafc1a54f 2 t f
+3007 physicalvalue 压力 Output \N 3 \N \N KN 2018-12-07 17:22:03.09+08 2018-12-07 17:24:07.6+08 c8e9affc-7965-452f-af9d-db9cafc1a54f 2 t f
+2951 physicalvalue 水压 Output \N 4 0.2 0 MPa 2018-12-05 15:00:46.945+08 2018-12-05 15:01:08.492+08 4f2419a5-1b3b-4929-9b0f-27d286d684a4 2 t f
+2952 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-05 15:01:36.492+08 2018-12-05 15:01:36.492+08 4f2419a5-1b3b-4929-9b0f-27d286d684a4 2 t f
+2953 am 幅值 Output \N 3 \N \N mv 2018-12-05 15:01:53.119+08 2018-12-05 15:02:00.041+08 4f2419a5-1b3b-4929-9b0f-27d286d684a4 2 t f
+2954 frequency 频率 Output \N 3 \N \N Hz 2018-12-06 10:06:42.428+08 2018-12-06 10:06:52.128+08 f944e6ec-6886-471e-b0e0-41afb54df653 2 t f
+2955 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-06 10:07:42.572+08 2018-12-06 10:07:42.572+08 f944e6ec-6886-471e-b0e0-41afb54df653 2 t f
+2956 physicalvalue 水压 Output \N 4 0.4 0 MPa 2018-12-06 10:08:09.577+08 2018-12-06 10:08:15.897+08 f944e6ec-6886-471e-b0e0-41afb54df653 2 t f
+2957 am 幅值 Output \N 3 \N \N mv 2018-12-06 10:08:34.103+08 2018-12-06 10:08:39.295+08 f944e6ec-6886-471e-b0e0-41afb54df653 2 t f
+2974 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-12-06 11:11:38.794+08 2018-12-06 11:11:38.794+08 d8d994be-3cdb-4646-a06b-d2869fdbedf6 2 t f
+2978 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-12-06 11:29:40.622+08 2018-12-06 11:29:40.622+08 a1051359-cb72-4421-9dae-06e5cc0d8622 2 t f
+2985 temperature 温度 Output \N \N \N 2 \N ℃ 2018-12-06 11:40:14.265+08 2018-12-06 11:40:14.265+08 cba87e64-ebf2-4b4b-8fe3-8df973625a56 2 t f
+3011 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-12-07 17:22:04.457+08 2018-12-07 17:22:04.457+08 1065f451-14e7-45e9-8d0e-511f274b97c4 2 t f
+3012 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-07 17:22:04.462+08 2018-12-07 17:22:04.462+08 1065f451-14e7-45e9-8d0e-511f274b97c4 2 t f
+3013 physicalvalue 轴力 Output \N 3 \N \N KN 2018-12-07 17:22:04.466+08 2018-12-07 17:25:18.315+08 1065f451-14e7-45e9-8d0e-511f274b97c4 2 t f
+2958 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-12-06 10:15:35.416+08 2018-12-06 10:15:35.416+08 f7d87585-4ebf-4d22-a1ce-05ef947311e7 2 t f
+2961 am 幅值 Output \N 3 \N \N mv 2018-12-06 10:17:37.358+08 2018-12-06 10:17:42.329+08 f7d87585-4ebf-4d22-a1ce-05ef947311e7 2 t f
+2962 frequency 频率 Output \N 3 \N \N Hz 2018-12-06 10:19:38.567+08 2018-12-06 10:19:43.564+08 0d021590-ab48-4d98-b318-458faaf5d934 2 t f
+2983 am 幅值 Output \N \N \N 3 \N \N mv 2018-12-06 11:39:17.939+08 2018-12-06 11:39:17.939+08 cba87e64-ebf2-4b4b-8fe3-8df973625a56 2 t f
+2963 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-06 10:20:03.344+08 2018-12-06 10:20:03.344+08 0d021590-ab48-4d98-b318-458faaf5d934 2 t f
+2964 physicalvalue 水压 Output \N \N \N 4 0.8 0 MPa 2018-12-06 10:20:31.456+08 2018-12-06 10:20:31.456+08 0d021590-ab48-4d98-b318-458faaf5d934 2 t f
+2967 temperature 温度 Output \N \N \N 2 \N ℃ 2018-12-06 10:23:24.215+08 2018-12-06 10:23:24.215+08 cf51dafe-466c-4549-b2c3-3eb4dbf5d871 2 t f
+2968 frequency 频率 Output \N \N \N 3 \N \N Hz 2018-12-06 10:23:56.069+08 2018-12-06 10:23:56.069+08 cf51dafe-466c-4549-b2c3-3eb4dbf5d871 2 t f
+2969 am 幅值 Output \N \N \N 3 \N \N mv 2018-12-06 10:24:12.663+08 2018-12-06 10:24:12.663+08 cf51dafe-466c-4549-b2c3-3eb4dbf5d871 2 t f
+2971 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-06 10:26:38.648+08 2018-12-06 10:26:38.648+08 322b0741-7b10-4499-a14d-5c660bc3dadf 2 t f
+2972 physicalvalue 水压 Output \N \N \N 4 2 0 MPa 2018-12-06 10:27:39.929+08 2018-12-06 10:27:39.929+08 322b0741-7b10-4499-a14d-5c660bc3dadf 2 t f
+2973 am 幅值 Output \N \N \N 3 \N \N mv 2018-12-06 10:27:55.863+08 2018-12-06 10:27:55.863+08 322b0741-7b10-4499-a14d-5c660bc3dadf 2 t f
+2976 physicalvalue 应力 Output \N \N \N 4 2 0 MPa 2018-12-06 11:13:43.069+08 2018-12-06 11:13:43.069+08 d8d994be-3cdb-4646-a06b-d2869fdbedf6 2 t f
+2977 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-06 11:14:36.16+08 2018-12-06 11:14:36.16+08 d8d994be-3cdb-4646-a06b-d2869fdbedf6 2 t f
+2988 physicalvalue 应力 Output \N \N \N 4 0.2 0 MPa 2018-12-06 11:49:54.276+08 2018-12-06 11:49:54.276+08 21c31597-4e3d-4568-bc38-7d53a010fe90 2 t f
+2990 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-12-07 17:12:17.187+08 2018-12-07 17:12:17.187+08 b8bf89a8-9e01-42a3-b331-a3b2c1fb2e06 2 t f
+2991 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-07 17:12:17.192+08 2018-12-07 17:12:17.192+08 b8bf89a8-9e01-42a3-b331-a3b2c1fb2e06 2 t f
+2992 physicalvalue 索力 Output \N 3 \N \N KN 2018-12-07 17:12:17.198+08 2018-12-07 17:16:15.474+08 b8bf89a8-9e01-42a3-b331-a3b2c1fb2e06 2 t f
+2979 am 幅值 Output \N 3 \N \N mv 2018-12-06 11:31:40.611+08 2018-12-06 11:31:50.881+08 a1051359-cb72-4421-9dae-06e5cc0d8622 2 t f
+2980 physicalvalue 应力 Output \N \N \N 4 0.8 0 MPa 2018-12-06 11:32:55.809+08 2018-12-06 11:32:55.809+08 a1051359-cb72-4421-9dae-06e5cc0d8622 2 t f
+2981 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-06 11:33:18.48+08 2018-12-06 11:33:18.48+08 a1051359-cb72-4421-9dae-06e5cc0d8622 2 t f
+2984 physicalvalue 应力 Output \N 4 0.4 0 MPa 2018-12-06 11:39:44.715+08 2018-12-06 11:39:51.709+08 cba87e64-ebf2-4b4b-8fe3-8df973625a56 2 t f
+2987 am 幅值 Output \N \N \N 3 \N \N mv 2018-12-06 11:48:41.627+08 2018-12-06 11:48:41.627+08 21c31597-4e3d-4568-bc38-7d53a010fe90 2 t f
+2993 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-12-07 17:12:17.336+08 2018-12-07 17:12:17.336+08 fecfc4c4-f65d-44d1-afdb-57d325216958 2 t f
+2994 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-07 17:12:17.344+08 2018-12-07 17:12:17.344+08 fecfc4c4-f65d-44d1-afdb-57d325216958 2 t f
+2995 physicalvalue 应变 Output \N 3 \N \N με 2018-12-07 17:12:17.35+08 2018-12-07 17:12:17.35+08 fecfc4c4-f65d-44d1-afdb-57d325216958 2 t f
+2999 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-12-07 17:22:01.996+08 2018-12-07 17:22:01.996+08 bbfe4ad2-61fd-4c9b-9a68-a0682458a01c 2 t f
+3000 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-07 17:22:02.003+08 2018-12-07 17:22:02.003+08 bbfe4ad2-61fd-4c9b-9a68-a0682458a01c 2 t f
+3002 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-12-07 17:22:02.574+08 2018-12-07 17:22:02.574+08 71c10c83-3856-45fb-ab38-c75aabf7d5ea 2 t f
+3003 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-07 17:22:02.58+08 2018-12-07 17:22:02.58+08 71c10c83-3856-45fb-ab38-c75aabf7d5ea 2 t f
+3008 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-12-07 17:22:03.98+08 2018-12-07 17:22:03.98+08 4c36ad2e-c8d1-4ed3-a415-bf31d5bb8329 2 t f
+3009 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-07 17:22:03.985+08 2018-12-07 17:22:03.985+08 4c36ad2e-c8d1-4ed3-a415-bf31d5bb8329 2 t f
+3001 physicalvalue 压力 Output \N 3 \N \N KN 2018-12-07 17:22:02.008+08 2018-12-07 17:22:49.038+08 bbfe4ad2-61fd-4c9b-9a68-a0682458a01c 2 t f
+3004 physicalvalue 压力 Output \N 3 \N \N KN 2018-12-07 17:22:02.586+08 2018-12-07 17:23:27.81+08 71c10c83-3856-45fb-ab38-c75aabf7d5ea 2 t f
+3010 physicalvalue 应力 Output \N 3 \N \N KN 2018-12-07 17:22:03.989+08 2018-12-07 17:24:33.577+08 4c36ad2e-c8d1-4ed3-a415-bf31d5bb8329 2 t f
+3015 deviceId deviceId Output \N \N \N \N \N 2018-12-08 15:13:13.216+08 2018-12-08 15:13:13.216+08 d1c4860a-e460-4a8a-928a-0c08b2f1e408 1 t f
+3041 conductivity 电导率 Output \N \N \N 2 20 0 mS/cm 2018-12-13 11:05:28.679+08 2018-12-13 11:05:28.679+08 067d099e-3d4d-40f5-8ca7-68383ffd5208 2 t f
+3045 power 电量 Output \N \N \N \N \N \N % 2018-12-13 13:58:23.83+08 2018-12-13 13:58:23.83+08 72701fdd-9595-45b1-8bed-190d4bf8ea7f 1 t f
+3016 x X位置 Output \N 6 \N \N mm 2018-12-08 15:43:58.647+08 2018-12-08 16:04:55.694+08 d1c4860a-e460-4a8a-928a-0c08b2f1e408 2 t f
+3017 y Y位置 Output \N 6 \N \N mm 2018-12-08 15:44:11.131+08 2018-12-08 16:05:01.888+08 d1c4860a-e460-4a8a-928a-0c08b2f1e408 2 t f
+3018 z Z位置 Output \N 6 \N \N mm 2018-12-08 15:44:20.99+08 2018-12-08 16:05:15.656+08 d1c4860a-e460-4a8a-928a-0c08b2f1e408 2 t f
+3019 dx dx累积形变量 Output \N 6 \N \N mm 2018-12-08 15:44:32.38+08 2018-12-08 16:06:47.265+08 d1c4860a-e460-4a8a-928a-0c08b2f1e408 2 t f
+3021 dz dz累积形变量 Output \N 6 \N \N mm 2018-12-08 15:45:00.513+08 2018-12-08 16:06:51.149+08 d1c4860a-e460-4a8a-928a-0c08b2f1e408 2 t f
+3022 mass 毛重 Output \N \N \N 3 \N \N KG 2018-12-08 17:38:49.081+08 2018-12-08 17:38:49.081+08 0437f985-a7fc-497c-82ce-fda992d3a8d3 2 t f
+3023 mass 毛重 Output \N \N \N \N \N \N Kg 2018-12-10 10:00:51.297+08 2018-12-10 10:00:51.297+08 9e3252d0-5674-400f-813b-eaf3f07ee1ff 1 t f
+3024 frequency 频率 Output \N \N \N 3 \N \N HZ 2018-12-10 11:37:08.59+08 2018-12-10 11:37:08.59+08 2818ab68-9d7c-4254-99e5-e1edc265931c 2 t f
+3026 physicalvalue 轴力 Output \N \N \N 3 \N KN 2018-12-10 11:37:48.97+08 2018-12-10 11:37:48.97+08 2818ab68-9d7c-4254-99e5-e1edc265931c 2 t f
+3025 temperature 温度 Output \N 2 80 -20 ℃ 2018-12-10 11:37:27.26+08 2018-12-10 11:39:27.769+08 2818ab68-9d7c-4254-99e5-e1edc265931c 2 t f
+3027 value 沉降 Output \N 2 1500 0 mm 2018-12-11 14:11:28.312+08 2018-12-11 14:22:42.768+08 a1a7e32d-9449-425a-9043-e40a835abf95 2 t f
+3044 alarm 报警信息 Output \N 0 2018-12-13 13:58:23.827+08 2018-12-13 15:52:03.838+08 72701fdd-9595-45b1-8bed-190d4bf8ea7f 5 t f
+3051 direction 方向 Output \N \N \N \N \N \N \N 2018-12-15 11:42:30.098+08 2018-12-15 11:42:30.098+08 5e55d0a9-995a-465c-ac1d-a0253c41bc53 5 t f
+3052 speed 车速 Output \N \N \N \N \N \N km/h 2018-12-15 11:42:30.103+08 2018-12-15 11:42:30.103+08 5e55d0a9-995a-465c-ac1d-a0253c41bc53 1 t f
+3043 long 经度 Output \N 4 \N \N ° 2018-12-13 13:58:23.819+08 2018-12-13 15:53:14.25+08 72701fdd-9595-45b1-8bed-190d4bf8ea7f 2 t f
+3042 lang 纬度 Output \N 4 \N \N ° 2018-12-13 13:58:23.811+08 2018-12-13 15:53:19.054+08 72701fdd-9595-45b1-8bed-190d4bf8ea7f 2 t f
+3049 windspeed 风速 Output \N \N \N \N \N \N m/s 2018-12-15 11:36:54.195+08 2018-12-15 11:36:54.195+08 7ac65a44-f581-4440-81e8-123685b15bbb 1 t f
+3050 winddirection 风向 Output \N \N \N \N \N \N ° 2018-12-15 11:36:54.202+08 2018-12-15 11:36:54.202+08 7ac65a44-f581-4440-81e8-123685b15bbb 1 t f
+3053 roadno 车道 Output \N \N \N \N \N \N 2018-12-15 11:42:30.107+08 2018-12-15 11:42:30.107+08 5e55d0a9-995a-465c-ac1d-a0253c41bc53 1 t f
+2841 readingNumber 水表读数 Output \N 3 \N \N m3 2018-11-02 11:08:38.973+08 2018-12-15 15:10:34.526+08 7b5d05d6-c187-4e6f-97aa-9add7a42ebbc 2 t f
+3054 pm25 PM2.5 Output \N \N \N \N \N \N ug/m³ 2018-12-15 16:52:13.983+08 2018-12-15 16:52:13.983+08 e277a4bb-5513-4464-be88-055a50df13b0 1 t f
+3055 pm10 PM10 Output \N \N \N \N \N \N ug/m³ 2018-12-15 16:52:13.99+08 2018-12-15 16:52:13.99+08 e277a4bb-5513-4464-be88-055a50df13b0 1 t f
+3057 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-18 16:35:54.042+08 2018-12-18 16:35:54.042+08 f8c7d826-f0aa-4b53-a793-833a2e913699 2 t f
+3014 projectId projectId Output \N 0 2018-12-08 15:13:00.74+08 2020-04-22 14:58:52.624+08 d1c4860a-e460-4a8a-928a-0c08b2f1e408 5 t f
+3080 anglex X轴角度 Output \N \N \N 3 180 -180 ° 2018-12-24 11:48:31.876+08 2018-12-24 11:48:31.876+08 f50640f2-9144-4d3a-ae14-f042492a899b 2 t f
+3047 physicalvalue 波长 Output \N 3 \N \N mm 2018-12-13 15:34:15.376+08 2019-01-11 11:49:33.539+08 61f238e3-e9dd-4c9c-a451-114ab6682354 2 t f
+3059 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-18 16:35:55.162+08 2018-12-18 16:35:55.162+08 fe292a77-3306-4e04-9708-072c060f3e74 2 t f
+3061 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-18 16:53:40.233+08 2018-12-18 16:53:40.233+08 36c1deeb-653e-4326-98ac-a804fac20490 2 t f
+3063 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-18 16:53:40.806+08 2018-12-18 16:53:40.806+08 3aff704a-a328-45da-b0eb-3fee9080c603 2 t f
+3065 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-18 16:53:41.322+08 2018-12-18 16:53:41.322+08 9b0aed36-6906-439d-8969-4918e4e723f5 2 t f
+3067 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-18 16:53:41.857+08 2018-12-18 16:53:41.857+08 fda2ff9a-981a-43fb-9a27-2f74effa3e43 2 t f
+3069 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-18 16:53:42.385+08 2018-12-18 16:53:42.385+08 cebdbb60-2d1c-4a4a-af8c-85a571d69232 2 t f
+3071 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-18 16:53:42.856+08 2018-12-18 16:53:42.856+08 16fd9521-16ab-499d-b342-4ed89b2fb211 2 t f
+3073 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-18 16:53:43.589+08 2018-12-18 16:53:43.589+08 4604ffee-b4ae-49e6-8498-281f3954e051 2 t f
+3056 physicalvalue 应变 Output \N 3 \N \N με 2018-12-18 16:35:54.035+08 2018-12-18 16:59:47.598+08 f8c7d826-f0aa-4b53-a793-833a2e913699 2 t f
+3058 physicalvalue 应变 Output \N 3 \N \N με 2018-12-18 16:35:55.15+08 2018-12-18 17:00:02.672+08 fe292a77-3306-4e04-9708-072c060f3e74 2 t f
+3060 physicalvalue 应力 Output \N 3 \N \N με 2018-12-18 16:53:40.227+08 2018-12-18 17:00:55.217+08 36c1deeb-653e-4326-98ac-a804fac20490 2 t f
+3062 physicalvalue 应变 Output \N 3 \N \N με 2018-12-18 16:53:40.798+08 2018-12-18 17:01:31.967+08 3aff704a-a328-45da-b0eb-3fee9080c603 2 t f
+3064 physicalvalue 荷载 Output \N 3 \N \N με 2018-12-18 16:53:41.315+08 2018-12-18 17:01:44.188+08 9b0aed36-6906-439d-8969-4918e4e723f5 2 t f
+3066 physicalvalue 轴力 Output \N 3 \N \N με 2018-12-18 16:53:41.852+08 2018-12-18 17:01:58.148+08 fda2ff9a-981a-43fb-9a27-2f74effa3e43 2 t f
+3068 physicalvalue 水压 Output \N 3 \N \N με 2018-12-18 16:53:42.376+08 2018-12-18 17:02:18.668+08 cebdbb60-2d1c-4a4a-af8c-85a571d69232 2 t f
+3078 totalFlow 累积流量 Output \N 2 120 0 m3 2018-12-21 15:26:00.422+08 2018-12-25 11:43:23.933+08 7f040f7c-5295-47e8-9ad0-e60c4bbb45b9 2 t f
+3070 physicalvalue 土压力 Output \N 3 \N \N με 2018-12-18 16:53:42.852+08 2018-12-18 17:03:10.707+08 16fd9521-16ab-499d-b342-4ed89b2fb211 2 t f
+3072 physicalvalue 土压力 Output \N 3 \N \N με 2018-12-18 16:53:43.576+08 2018-12-18 17:03:19.078+08 4604ffee-b4ae-49e6-8498-281f3954e051 2 t f
+3074 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-20 14:58:47.456+08 2018-12-20 14:58:47.456+08 764df0c7-c68c-47cf-827f-d2cee7802096 2 t f
+3075 physicalvalue 沉降 Output \N \N \N 2 \N \N mm 2018-12-20 14:59:20.536+08 2018-12-20 14:59:20.536+08 764df0c7-c68c-47cf-827f-d2cee7802096 2 t f
+3076 temperature 温度 Output \N \N \N 2 \N \N ℃ 2018-12-20 15:05:52.071+08 2018-12-20 15:05:52.071+08 ecdcbcbd-7dc4-4195-8207-a0d0d3a50f94 2 t f
+3077 transientFlow 瞬时流量 Output \N 2 12000000 0 L/h 2018-12-21 15:25:28.147+08 2018-12-25 11:43:44.806+08 7f040f7c-5295-47e8-9ad0-e60c4bbb45b9 2 t f
+3079 level 液位 Output \N 3 mm 2018-12-22 09:58:40.886+08 2018-12-22 17:08:46.78+08 2ad69732-f5bc-48ff-9b70-ef6374830804 2 t f
+3081 angley Y轴角度 Output \N \N \N 3 180 -180 ° 2018-12-24 11:48:54.26+08 2018-12-24 11:48:54.26+08 f50640f2-9144-4d3a-ae14-f042492a899b 2 t f
+3082 anglex X轴角度 Output \N \N \N 3 180 -180 ° 2018-12-24 11:53:24.877+08 2018-12-24 11:53:24.877+08 fb5b0dad-7bf3-429f-a153-95ff04ef6b58 2 t f
+3083 angley Y轴角度 Output \N \N \N 3 180 -180 ° 2018-12-24 11:53:24.884+08 2018-12-24 11:53:24.884+08 fb5b0dad-7bf3-429f-a153-95ff04ef6b58 2 t f
+3084 anglex X轴角度 Output \N \N \N 3 180 -180 ° 2018-12-24 11:53:26.52+08 2018-12-24 11:53:26.52+08 a20c22f5-81ae-4aa9-9a71-40fd0854d653 2 t f
+3085 angley Y轴角度 Output \N \N \N 3 180 -180 ° 2018-12-24 11:53:26.527+08 2018-12-24 11:53:26.527+08 a20c22f5-81ae-4aa9-9a71-40fd0854d653 2 t f
+3086 anglex X轴角度 Output \N \N \N 3 180 -180 ° 2018-12-24 11:53:35.04+08 2018-12-24 11:53:35.04+08 9bec257b-dd97-4034-ada6-eb01b7a69868 2 t f
+3087 angley Y轴角度 Output \N \N \N 3 180 -180 ° 2018-12-24 11:53:35.046+08 2018-12-24 11:53:35.046+08 9bec257b-dd97-4034-ada6-eb01b7a69868 2 t f
+3088 length 长度 Output \N 5 \N \N cm 2018-12-24 14:39:01.243+08 2018-12-24 14:39:58.404+08 865d7b6a-d5c7-4c8a-915f-4350e6cbab7b 2 t f
+3089 angley Y轴角度 Output \N \N \N 3 180 -180 ° 2018-12-24 15:31:37.908+08 2018-12-24 15:31:37.908+08 a625037d-7d72-4479-857e-ba45ebf3a2db 2 t f
+3090 anglex X轴角度 Output \N \N \N 3 180 -180 ° 2018-12-24 15:31:37.914+08 2018-12-24 15:31:37.914+08 a625037d-7d72-4479-857e-ba45ebf3a2db 2 t f
+3091 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2018-12-27 15:45:15.468+08 2018-12-27 15:45:15.468+08 12f5bcb9-fd4e-4b1c-bb2f-36ddf7727452 5 t f
+3092 physicalvalue 应变 Output \N \N \N 2 \N \N με 2018-12-28 11:04:06.916+08 2018-12-28 11:04:06.916+08 7ab198d0-56df-4a07-9b1a-ea5c16664b5c 2 t f
+3093 physicalvalue 位移 Output \N \N \N 2 \N \N mm 2018-12-28 11:08:17.641+08 2018-12-28 11:08:17.641+08 70c9304e-caaf-4c6e-aa82-b51207d7aeac 2 t f
+3094 physicalvalue 裂缝 Output \N 3 \N \N mm 2018-12-28 11:15:02.007+08 2018-12-28 11:15:45.458+08 14784dc2-a6ea-4008-acd6-bb96f3cedf1e 2 t f
+3095 physicalvalue 角度 Output \N \N \N 2 \N \N ° 2018-12-28 11:18:05.697+08 2018-12-28 11:18:05.697+08 b9a47230-060a-45fd-8409-4307247b8a62 2 t f
+3096 physicalvalue 位移 Output \N \N \N 2 \N \N mm 2018-12-28 11:30:29.897+08 2018-12-28 11:30:29.897+08 8b827cae-a928-42a2-bcd6-0071556c240f 2 t f
+3100 noise 噪音 Output \N \N \N \N \N \N dB 2018-12-28 14:32:37.364+08 2018-12-28 14:32:37.364+08 e277a4bb-5513-4464-be88-055a50df13b0 1 t f
+3101 temp 温度 Output \N \N \N \N \N \N ℃ 2018-12-28 14:33:13.58+08 2018-12-28 14:33:13.58+08 e277a4bb-5513-4464-be88-055a50df13b0 1 t f
+3097 physicalvalue 挠度 Output \N 2 \N \N mm 2018-12-28 11:30:32.418+08 2018-12-28 11:33:27.965+08 0070fd98-008a-4af5-b805-e81d23644df8 2 t f
+3098 physicalvalue 温度 Output \N 2 \N \N ℃ 2018-12-28 11:30:33.812+08 2018-12-28 11:34:23.355+08 4a8364ac-890a-4260-b8d7-6e4ae7dcd4e3 2 t f
+3099 physicalvalue 湿度 Output \N 2 \N \N % 2018-12-28 11:30:35.254+08 2018-12-28 11:35:01.764+08 114001d1-f9ab-4564-b7e0-319e04d86a54 2 t f
+3102 humidy 湿度 Output \N \N \N \N \N \N %RH 2018-12-28 14:34:06.916+08 2018-12-28 14:34:06.916+08 e277a4bb-5513-4464-be88-055a50df13b0 1 t f
+3104 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-01-04 15:54:20.085+08 2019-01-04 15:54:20.085+08 35ec137a-ea04-4c81-bbaf-23ddae650c0e 2 t f
+3106 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-01-04 15:55:45.827+08 2019-01-04 15:55:45.827+08 becc893e-7135-41ab-8e23-10257bd06437 2 t f
+3107 pressure 液位 Output \N 3 \N \N mm 2019-01-07 11:09:19.362+08 2019-01-07 11:09:24.655+08 b6fe084b-3bb8-4dcc-922d-b85d47f1149b 2 t f
+3108 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-01-07 11:11:49.584+08 2019-01-07 11:11:49.584+08 b6fe084b-3bb8-4dcc-922d-b85d47f1149b 2 t f
+3109 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-01-07 17:23:55.783+08 2019-01-07 17:23:55.783+08 9b5b793a-5bfb-4693-9fd1-1d8a85b6e4a7 2 t f
+3111 temperature 温度 Output \N 3 40 0 ℃ 2019-01-07 17:23:55.793+08 2019-01-07 17:23:55.793+08 9b5b793a-5bfb-4693-9fd1-1d8a85b6e4a7 2 t f
+3103 pressure 压强 Output \N 2 \N \N Kpa 2019-01-04 15:54:00.578+08 2019-07-16 10:36:56.537+08 35ec137a-ea04-4c81-bbaf-23ddae650c0e 2 t f
+3112 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-01-07 17:45:50.827+08 2019-01-07 17:45:50.827+08 98c8c785-f229-4409-b2a6-a1e57af72b26 2 t f
+3114 temperature 温度 Output \N 3 40 0 ℃ 2019-01-07 17:45:50.869+08 2019-01-07 17:45:50.869+08 98c8c785-f229-4409-b2a6-a1e57af72b26 2 t f
+3148 pressure 压强 Output \N 3 kPa 2019-01-19 17:15:44.543+08 2019-01-19 17:16:45.565+08 4aaa9fb5-2119-4f7a-bd49-74a4c73e0e9b 2 t f
+3110 physicalvalue 轴力 Output \N 3 10000 0 KN 2019-01-07 17:23:55.788+08 2019-01-07 17:49:10.37+08 9b5b793a-5bfb-4693-9fd1-1d8a85b6e4a7 2 t f
+3115 physicalvalue 液位 Output \N \N \N 3 \N \N mm 2019-01-08 15:13:58.845+08 2019-01-08 15:13:58.845+08 7406dcb2-9b68-42e3-9178-90ac77d39703 2 t f
+3138 sleeptype 睡眠类型 Output \N 0 \N 2019-01-15 20:52:54.671+08 2019-01-15 20:53:26.245+08 b5064da1-895c-40e3-84db-b6330326f9c8 5 t f
+3137 count 动作次数 Output \N 0 \N 2019-01-15 20:50:18.243+08 2019-01-15 21:00:11.307+08 b5064da1-895c-40e3-84db-b6330326f9c8 5 t f
+3116 jsonfileexts 物理量 Constant \N .a,.d,.dx,.dex,.txt 0 \N 2019-01-08 16:05:40.448+08 2019-01-08 16:43:28.057+08 e3ba8196-3d34-4b50-9cd5-866ad57dae8e 5 t f
+3117 stepvalue 步数 Output \N \N \N \N \N \N \N 2019-01-14 15:28:21.36+08 2019-01-14 15:28:21.36+08 e37bdd04-f3eb-47f4-b174-70d573239a00 1 t f
+3119 city 城市 Output \N \N \N \N \N \N \N 2019-01-14 15:44:06.674+08 2019-01-14 15:44:06.674+08 ae4b47fb-2d87-4fa5-84d9-72e1b5caa334 5 t f
+3120 address 地址 Output \N \N \N \N \N \N 2019-01-14 15:44:06.679+08 2019-01-14 15:44:06.679+08 ae4b47fb-2d87-4fa5-84d9-72e1b5caa334 5 t f
+3121 lon 经度 Output \N \N \N 6 \N \N ° 2019-01-14 15:44:06.684+08 2019-01-14 15:44:06.684+08 ae4b47fb-2d87-4fa5-84d9-72e1b5caa334 2 t f
+3122 lat 维度 Output \N \N \N 6 \N \N ° 2019-01-14 15:44:06.688+08 2019-01-14 15:44:06.688+08 ae4b47fb-2d87-4fa5-84d9-72e1b5caa334 2 t f
+3123 city 城市 Output \N \N \N \N \N \N \N 2019-01-14 15:47:03.728+08 2019-01-14 15:47:03.728+08 b3f37406-863d-441d-80af-d7f79747ca0f 5 t f
+3124 address 地址 Output \N \N \N \N \N \N 2019-01-14 15:47:03.734+08 2019-01-14 15:47:03.734+08 b3f37406-863d-441d-80af-d7f79747ca0f 5 t f
+3125 lon 经度 Output \N \N \N 6 \N \N ° 2019-01-14 15:47:03.739+08 2019-01-14 15:47:03.739+08 b3f37406-863d-441d-80af-d7f79747ca0f 2 t f
+3127 power 电量 Output \N \N \N \N \N \N % 2019-01-14 15:48:47.01+08 2019-01-14 15:48:47.01+08 d9a190a8-343c-43a4-8ad3-2dc5ee25e283 1 t f
+3128 city 城市 Output \N \N \N \N \N \N \N 2019-01-14 15:51:12.9+08 2019-01-14 15:51:12.9+08 eed60769-7fe4-4bca-87ea-2de74bb2cd88 5 t f
+3129 address 地址 Output \N \N \N \N \N \N 2019-01-14 15:51:12.908+08 2019-01-14 15:51:12.908+08 eed60769-7fe4-4bca-87ea-2de74bb2cd88 5 t f
+3130 lon 经度 Output \N \N \N 6 \N \N ° 2019-01-14 15:51:12.914+08 2019-01-14 15:51:12.914+08 eed60769-7fe4-4bca-87ea-2de74bb2cd88 2 t f
+3132 heartrate 心率 Output \N \N \N \N \N \N 2019-01-14 15:51:12.926+08 2019-01-14 15:51:12.926+08 eed60769-7fe4-4bca-87ea-2de74bb2cd88 1 t f
+3133 timeBegin 开始时间 Output \N \N \N \N \N \N \N 2019-01-14 16:40:25.388+08 2019-01-14 16:40:25.388+08 b5064da1-895c-40e3-84db-b6330326f9c8 5 t f
+3134 timeEnd 结束时间 Output \N \N \N \N \N \N 2019-01-14 16:41:02.405+08 2019-01-14 16:41:02.405+08 b5064da1-895c-40e3-84db-b6330326f9c8 5 t f
+3135 total 检测次数 Output \N \N \N \N \N \N 2019-01-14 16:41:26.619+08 2019-01-14 16:41:26.619+08 b5064da1-895c-40e3-84db-b6330326f9c8 1 t f
+3136 interval 间隔 Output \N \N \N \N \N \N min 2019-01-14 16:41:46.208+08 2019-01-14 16:41:46.208+08 b5064da1-895c-40e3-84db-b6330326f9c8 1 t f
+3118 heartrate 心率 Output \N 0 \N \N \N 2019-01-14 15:31:37.069+08 2019-01-16 17:35:27.411+08 20e441d3-19e4-4f48-bf5a-36448db75de0 1 t f
+3126 lat 纬度 Output \N 6 \N \N ° 2019-01-14 15:47:03.743+08 2019-01-15 20:19:32.507+08 b3f37406-863d-441d-80af-d7f79747ca0f 2 t f
+3131 lat 纬度 Output \N 6 \N \N ° 2019-01-14 15:51:12.921+08 2019-01-15 20:19:41.834+08 eed60769-7fe4-4bca-87ea-2de74bb2cd88 2 t f
+3139 lat 纬度 Output \N \N \N 6 \N \N ° 2019-01-18 16:57:11.305+08 2019-01-18 16:57:11.305+08 cf950c05-2642-444a-bda7-45be85b50ddc 2 t f
+3140 lon 经度 Output \N \N \N 6 \N \N ° 2019-01-18 16:57:11.312+08 2019-01-18 16:57:11.312+08 cf950c05-2642-444a-bda7-45be85b50ddc 2 t f
+3141 pressure 压力 Output \N \N \N 3 \N \N Kpa 2019-01-19 09:50:24.334+08 2019-01-19 09:50:24.334+08 b2d20518-3d22-4730-9121-735650110838 2 t f
+3142 pressure 压力 Output \N \N \N 3 \N \N Kpa 2019-01-19 09:53:49.356+08 2019-01-19 09:53:49.356+08 e65346cf-f6d0-41a0-a1d9-e3644ea50971 2 t f
+3143 pressure 压力 Output \N \N \N 3 \N \N Kpa 2019-01-19 09:55:47.814+08 2019-01-19 09:55:47.814+08 c7d0b1b1-3264-4661-b682-0276be62ccdc 2 t f
+3144 length 液位 Output \N \N \N 3 \N \N mm 2019-01-19 14:40:24.347+08 2019-01-19 14:40:24.347+08 d530a5b1-8f7a-49ae-b3c8-2f255589e6bf 2 t f
+3145 length 液位 Output \N \N \N 3 \N \N mm 2019-01-19 14:40:56.189+08 2019-01-19 14:40:56.189+08 6e13b5de-10cb-42f1-ac80-b2550d25a5ea 2 t f
+3150 high2 纸类垃圾容量 Output \N \N \N \N 100 0 % 2019-01-21 10:50:35.803+08 2019-01-21 10:50:35.803+08 cf950c05-2642-444a-bda7-45be85b50ddc 1 t f
+3158 high10 可回收垃圾容量 Output \N \N \N \N 100 0 % 2019-01-21 10:56:48.961+08 2019-01-21 10:56:48.961+08 cf950c05-2642-444a-bda7-45be85b50ddc 1 t f
+3151 high3 金属垃圾容量 Output \N 0 100 0 % 2019-01-21 10:53:12.388+08 2019-01-21 10:57:03.502+08 cf950c05-2642-444a-bda7-45be85b50ddc 1 t f
+3152 high4 衣服垃圾容量 Output \N 0 100 0 % 2019-01-21 10:53:41.529+08 2019-01-21 10:57:18.022+08 cf950c05-2642-444a-bda7-45be85b50ddc 1 t f
+3153 high5 玻璃垃圾容量 Output \N 0 100 0 % 2019-01-21 10:54:05.934+08 2019-01-21 10:57:24.668+08 cf950c05-2642-444a-bda7-45be85b50ddc 1 t f
+3154 high6 有害垃圾容量 Output \N 0 100 0 % 2019-01-21 10:54:34.22+08 2019-01-21 10:57:32.36+08 cf950c05-2642-444a-bda7-45be85b50ddc 1 t f
+3155 high7 电子垃圾容量 Output \N 0 100 0 % 2019-01-21 10:54:59.469+08 2019-01-21 10:57:39.677+08 cf950c05-2642-444a-bda7-45be85b50ddc 1 t f
+3156 high8 纸塑品垃圾容量 Output \N 0 100 0 % 2019-01-21 10:55:33.965+08 2019-01-21 10:57:45.096+08 cf950c05-2642-444a-bda7-45be85b50ddc 1 t f
+3160 high12 瓶罐垃圾容量 Output \N \N \N \N 100 0 % 2019-01-21 10:58:45.776+08 2019-01-21 10:58:45.776+08 cf950c05-2642-444a-bda7-45be85b50ddc 1 t f
+3414 frequency 频率 Output \N \N \N \N \N \N Hz 2019-02-25 14:24:04.309+08 2019-02-25 14:24:04.309+08 63df0f39-75da-443e-a275-59ebd94aa3ea 2 t f
+3149 high1 塑料垃圾容量 Output \N 0 100 0 % 2019-01-21 10:49:58.743+08 2019-01-21 10:56:57.49+08 cf950c05-2642-444a-bda7-45be85b50ddc 1 t f
+3157 high9 餐厨垃圾容量 Output \N 0 100 0 % 2019-01-21 10:56:03.818+08 2019-01-21 10:57:49.85+08 cf950c05-2642-444a-bda7-45be85b50ddc 1 t f
+3159 high11 其他垃圾容量 Output \N \N \N \N 100 0 % 2019-01-21 10:58:17.177+08 2019-01-21 10:58:17.177+08 cf950c05-2642-444a-bda7-45be85b50ddc 1 t f
+3161 high13 不可回收垃圾容量 Output \N \N \N \N 100 0 % 2019-01-21 10:59:23.016+08 2019-01-21 10:59:23.016+08 cf950c05-2642-444a-bda7-45be85b50ddc 1 t f
+3162 physicalvalue 应变 Output \N 3 \N \N με 2019-01-21 15:14:03.844+08 2019-01-21 15:15:46.281+08 42ff7750-3e27-4669-8018-92caf824ecd2 2 t f
+3170 level 液位 Output \N \N \N 3 \N \N mm 2019-01-22 09:31:33.17+08 2019-01-22 09:31:33.17+08 0264aff4-ba22-40ca-9ef9-866e00e00fb8 2 t f
+3172 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-01-24 10:02:30.585+08 2019-01-24 10:02:30.585+08 bb14be6f-ac60-4646-a8ce-c0e179c648d2 2 t f
+3171 pressure 压力 Output \N 3 \N \N Kpa 2019-01-24 10:02:14.211+08 2019-01-24 12:57:23.159+08 bb14be6f-ac60-4646-a8ce-c0e179c648d2 2 t f
+3173 pressure 压力 Output \N 3 \N \N Kpa 2019-01-24 11:54:00.406+08 2019-01-24 14:47:34.076+08 3ce74ad5-66e4-40b3-b5c0-52653cbbca87 2 t f
+3182 so2 SO2浓度 Output \N 3 \N μg/m3 2019-01-25 16:36:55.126+08 2019-01-25 16:37:50.174+08 62e44371-9cc5-43c5-b9b9-e5fbdc63dda3 2 t f
+3183 no2 NO2浓度 Output \N \N \N 3 \N \N μg/m3 2019-01-25 16:38:14.228+08 2019-01-25 16:38:14.228+08 62e44371-9cc5-43c5-b9b9-e5fbdc63dda3 2 t f
+3184 o3 O3 Output \N \N \N 3 \N \N μg/m3 2019-01-25 16:38:39.02+08 2019-01-25 16:38:39.02+08 62e44371-9cc5-43c5-b9b9-e5fbdc63dda3 2 t f
+3186 voc VOC浓度 Output \N \N \N 3 \N μg/m3 2019-01-25 16:39:26.498+08 2019-01-25 16:39:26.498+08 62e44371-9cc5-43c5-b9b9-e5fbdc63dda3 2 t f
+3188 temperature 温度 Output \N \N \N 3 \N \N ℃ 2019-01-28 10:03:13.862+08 2019-01-28 10:03:13.862+08 bb308c8a-f70a-4351-a6dc-aedf8612cceb 2 t f
+3190 pressure 压力 Output \N \N \N 3 \N \N Kpa 2019-01-30 11:09:55.913+08 2019-01-30 11:09:55.913+08 ed20720d-14e7-48f1-bf4e-da3ec2ac4c46 2 t f
+3191 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-01-30 11:10:16.135+08 2019-01-30 11:10:16.135+08 ed20720d-14e7-48f1-bf4e-da3ec2ac4c46 2 t f
+3189 pressure 液位 Output \N 2 \N \N mmH2O 2019-01-28 10:53:32.142+08 2019-02-18 15:52:45.037+08 6e91a917-6930-48a9-8a2e-69cd0a42dfde 2 t f
+3187 pressure 液位 Output \N 3 \N \N mmH2O 2019-01-28 10:02:28.52+08 2019-02-18 15:52:52.263+08 bb308c8a-f70a-4351-a6dc-aedf8612cceb 2 t f
+3192 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-22 11:35:12.149+08 2019-02-22 11:35:12.149+08 ec2fd932-2dbe-45f2-a15b-0815ec8ff1b2 2 t f
+3193 frequency 频率 Output \N 2 \N \N HZ 2019-02-22 11:35:12.156+08 2019-02-22 11:35:12.156+08 ec2fd932-2dbe-45f2-a15b-0815ec8ff1b2 2 t f
+3195 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-22 11:35:40.475+08 2019-02-22 11:35:40.475+08 738a6ad2-95f1-403a-94a1-8f641b2ab73f 2 t f
+3196 frequency 频率 Output \N 2 \N \N HZ 2019-02-22 11:35:40.485+08 2019-02-22 11:35:40.485+08 738a6ad2-95f1-403a-94a1-8f641b2ab73f 2 t f
+3198 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-22 13:27:41.89+08 2019-02-22 13:27:41.89+08 e956e4a1-49b3-46e3-b953-47c2c17a5098 2 t f
+3202 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-22 13:35:17.633+08 2019-02-22 13:35:17.633+08 b8f7deb8-c684-47d4-b8b0-a1d66615944c 2 t f
+3203 frequency 频率 Output \N 2 \N \N HZ 2019-02-22 13:35:17.639+08 2019-02-22 13:35:17.639+08 b8f7deb8-c684-47d4-b8b0-a1d66615944c 2 t f
+3204 physicalvalue 裂缝 Output \N 3 \N \N mm 2019-02-22 13:35:17.646+08 2019-02-22 13:36:43.763+08 b8f7deb8-c684-47d4-b8b0-a1d66615944c 2 t f
+3194 physicalvalue 应变 Output \N 3 \N \N με 2019-02-22 11:35:12.161+08 2019-02-22 13:37:38.895+08 ec2fd932-2dbe-45f2-a15b-0815ec8ff1b2 2 t f
+3207 physicalvalue X轴角度 Output \N 2 \N \N ° 2019-02-22 13:41:58.528+08 2019-02-22 14:30:32.08+08 64960998-d3e8-4ce1-857a-36e232a099c0 2 t f
+3206 physicalvalue2 Y轴角度 Output \N 2 \N \N ° 2019-02-22 13:41:58.521+08 2019-02-22 14:30:37.353+08 64960998-d3e8-4ce1-857a-36e232a099c0 2 t f
+3210 physicalvalue 沉降 Output \N 3 \N \N mm 2019-02-22 13:44:23.981+08 2019-02-22 14:42:31.427+08 b1305d43-23de-4740-a7a2-213facc63133 2 t f
+3211 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-22 15:24:53.464+08 2019-02-22 15:24:53.464+08 64960998-d3e8-4ce1-857a-36e232a099c0 2 t f
+3212 voltage 电压 Output \N \N \N 6 \N \N V 2019-02-22 16:33:55.424+08 2019-02-22 16:33:55.424+08 f1b9e898-07e9-4182-9cf1-1cb52a4c7b0d 2 t f
+3200 physicalvalue X轴角度 Output \N 2 \N \N ° 2019-02-22 13:27:41.903+08 2019-02-22 16:46:06.793+08 e956e4a1-49b3-46e3-b953-47c2c17a5098 2 t f
+3199 physicalvalue2 Y轴角度 Output \N 2 \N \N ° 2019-02-22 13:27:41.897+08 2019-02-22 16:46:14.871+08 e956e4a1-49b3-46e3-b953-47c2c17a5098 2 t f
+3213 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-22 17:20:51.921+08 2019-02-22 17:20:51.921+08 f93bd5ed-fe1a-4d44-8efb-f98f381b7aa0 2 t f
+3214 pressure 压力 Output \N 3 20 -20 Kpa 2019-02-22 17:20:51.934+08 2019-02-22 17:22:11.174+08 f93bd5ed-fe1a-4d44-8efb-f98f381b7aa0 2 t f
+3215 speed 风速 Output \N 2 \N \N m/s 2019-02-25 11:38:45.184+08 2019-02-25 11:38:45.184+08 3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09 2 t f
+3216 direction 风向 Output \N 2 \N \N ° 2019-02-25 11:38:45.196+08 2019-02-25 11:38:45.196+08 3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09 2 t f
+3217 pm10 PM10 Output \N 2 \N \N ug/m³ 2019-02-25 11:38:45.203+08 2019-02-25 11:38:45.203+08 3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09 2 t f
+3218 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 11:38:45.208+08 2019-02-25 11:38:45.208+08 3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09 2 t f
+3219 noise 噪声 Output \N 2 \N \N dB 2019-02-25 11:38:45.213+08 2019-02-25 11:38:45.213+08 3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09 2 t f
+3220 pm25 PM2.5 Output \N 3 \N \N ug/m³ 2019-02-25 11:38:45.219+08 2019-02-25 11:38:45.219+08 3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09 2 t f
+3221 humidity 湿度 Output \N 2 \N \N %RH 2019-02-25 11:38:45.226+08 2019-02-25 11:38:45.226+08 3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09 2 t f
+3222 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 11:41:29.901+08 2019-02-25 11:41:29.901+08 4b01a62e-4b72-477a-b628-3e60ab9eba3c 2 t f
+3223 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 11:41:29.909+08 2019-02-25 11:41:29.909+08 4b01a62e-4b72-477a-b628-3e60ab9eba3c 2 t f
+3224 physicalvalue 水压 Output \N 4 0.2 0 MPa 2019-02-25 11:41:29.916+08 2019-02-25 11:41:29.916+08 4b01a62e-4b72-477a-b628-3e60ab9eba3c 2 t f
+3225 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 11:41:29.922+08 2019-02-25 11:41:29.922+08 4b01a62e-4b72-477a-b628-3e60ab9eba3c 2 t f
+3226 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 11:41:29.937+08 2019-02-25 11:41:29.937+08 b0322703-c5a9-4310-a6b7-0311a4317136 2 t f
+3227 physicalvalue 水压 Output \N \N \N 4 0.2 0 MPa 2019-02-25 11:41:29.943+08 2019-02-25 11:41:29.943+08 b0322703-c5a9-4310-a6b7-0311a4317136 2 t f
+3228 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 11:41:29.948+08 2019-02-25 11:41:29.948+08 b0322703-c5a9-4310-a6b7-0311a4317136 2 t f
+3229 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 11:41:29.954+08 2019-02-25 11:41:29.954+08 b0322703-c5a9-4310-a6b7-0311a4317136 2 t f
+3230 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 11:41:29.97+08 2019-02-25 11:41:29.97+08 8ea33ec2-98a7-487c-a662-18151711a0b4 2 t f
+3185 co co浓度 Output \N 3 \N mg/m3 2019-01-25 16:39:01.473+08 2019-07-17 17:04:31.378+08 62e44371-9cc5-43c5-b9b9-e5fbdc63dda3 2 t f
+3175 temperature 温度 Output \N 1 80 -40 ℃ 2019-01-25 16:28:09.827+08 2019-06-11 11:01:54.577+08 62e44371-9cc5-43c5-b9b9-e5fbdc63dda3 2 t f
+3176 humidity 湿度 Output \N 1 100 0 %RH 2019-01-25 16:28:56.936+08 2019-06-11 11:02:00.605+08 62e44371-9cc5-43c5-b9b9-e5fbdc63dda3 2 t f
+3177 pm100 PM100 Output \N 1 \N \N μg/m3 2019-01-25 16:29:40.562+08 2019-06-11 11:02:08.734+08 62e44371-9cc5-43c5-b9b9-e5fbdc63dda3 2 t f
+3178 pm2_5 PM2.5 Output \N 1 \N \N μg/m3 2019-01-25 16:33:16.397+08 2019-06-11 11:02:18.109+08 62e44371-9cc5-43c5-b9b9-e5fbdc63dda3 2 t f
+3179 pm10 PM10 Output \N 1 \N \N μg/m3 2019-01-25 16:33:46.204+08 2019-06-11 11:02:38.535+08 62e44371-9cc5-43c5-b9b9-e5fbdc63dda3 2 t f
+3180 longitude 经度 Output \N 6 \N \N ° 2019-01-25 16:35:52.291+08 2019-06-18 11:05:56.228+08 62e44371-9cc5-43c5-b9b9-e5fbdc63dda3 2 t f
+3197 physicalvalue 压力 Output \N 2 \N \N kpa 2019-02-22 11:35:40.49+08 2019-09-18 17:15:59.189+08 738a6ad2-95f1-403a-94a1-8f641b2ab73f 2 t f
+3231 physicalvalue 水压 Output \N 4 0.2 0 MPa 2019-02-25 11:41:29.975+08 2019-02-25 11:41:29.975+08 8ea33ec2-98a7-487c-a662-18151711a0b4 2 t f
+3232 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 11:41:29.98+08 2019-02-25 11:41:29.98+08 8ea33ec2-98a7-487c-a662-18151711a0b4 2 t f
+3233 am 幅值 Output \N 3 \N \N mv 2019-02-25 11:41:29.986+08 2019-02-25 11:41:29.986+08 8ea33ec2-98a7-487c-a662-18151711a0b4 2 t f
+3234 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 11:42:07.368+08 2019-02-25 11:42:07.368+08 d9cbcff2-8304-4233-80db-b582ae78540c 2 t f
+3235 physicalvalue 水压 Output \N 4 0.4 0 MPa 2019-02-25 11:42:07.378+08 2019-02-25 11:42:07.378+08 d9cbcff2-8304-4233-80db-b582ae78540c 2 t f
+3236 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 11:42:07.385+08 2019-02-25 11:42:07.385+08 d9cbcff2-8304-4233-80db-b582ae78540c 2 t f
+3237 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 11:42:07.39+08 2019-02-25 11:42:07.39+08 d9cbcff2-8304-4233-80db-b582ae78540c 2 t f
+3238 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 11:42:07.407+08 2019-02-25 11:42:07.407+08 9d7f517c-090d-4a86-bde7-3e9b8fbfcf58 2 t f
+3239 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 11:42:07.412+08 2019-02-25 11:42:07.412+08 9d7f517c-090d-4a86-bde7-3e9b8fbfcf58 2 t f
+3240 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 11:42:07.417+08 2019-02-25 11:42:07.417+08 9d7f517c-090d-4a86-bde7-3e9b8fbfcf58 2 t f
+3241 physicalvalue 水压 Output \N \N \N 4 0.4 0 MPa 2019-02-25 11:42:07.422+08 2019-02-25 11:42:07.422+08 9d7f517c-090d-4a86-bde7-3e9b8fbfcf58 2 t f
+3242 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 11:42:07.435+08 2019-02-25 11:42:07.435+08 2c2cd567-6eef-4304-afc9-cc14b4435240 2 t f
+3243 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 11:42:07.439+08 2019-02-25 11:42:07.439+08 2c2cd567-6eef-4304-afc9-cc14b4435240 2 t f
+3244 physicalvalue 水压 Output \N 4 0.4 0 MPa 2019-02-25 11:42:07.444+08 2019-02-25 11:42:07.444+08 2c2cd567-6eef-4304-afc9-cc14b4435240 2 t f
+3245 am 幅值 Output \N 3 \N \N mv 2019-02-25 11:42:07.449+08 2019-02-25 11:42:07.449+08 2c2cd567-6eef-4304-afc9-cc14b4435240 2 t f
+3246 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 11:44:07.893+08 2019-02-25 11:44:07.893+08 7845401a-4640-4465-987b-69f630af6b8a 2 t f
+3247 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 11:44:07.9+08 2019-02-25 11:44:07.9+08 7845401a-4640-4465-987b-69f630af6b8a 2 t f
+3248 physicalvalue 水压 Output \N 4 0.6 0 MPa 2019-02-25 11:44:07.906+08 2019-02-25 11:44:07.906+08 7845401a-4640-4465-987b-69f630af6b8a 2 t f
+3249 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 11:44:07.911+08 2019-02-25 11:44:07.911+08 7845401a-4640-4465-987b-69f630af6b8a 2 t f
+3250 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 11:44:07.925+08 2019-02-25 11:44:07.925+08 67a68865-ee21-4627-b68d-98ed991689ad 2 t f
+3251 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 11:44:07.929+08 2019-02-25 11:44:07.929+08 67a68865-ee21-4627-b68d-98ed991689ad 2 t f
+3252 physicalvalue 水压 Output \N \N \N 4 0.6 0 MPa 2019-02-25 11:44:07.934+08 2019-02-25 11:44:07.934+08 67a68865-ee21-4627-b68d-98ed991689ad 2 t f
+3253 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 11:44:07.939+08 2019-02-25 11:44:07.939+08 67a68865-ee21-4627-b68d-98ed991689ad 2 t f
+3254 physicalvalue 水压 Output \N 4 0.6 0 MPa 2019-02-25 11:44:07.951+08 2019-02-25 11:44:07.951+08 720eb976-fd1d-4947-845b-15b344e808f3 2 t f
+3255 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 11:44:07.956+08 2019-02-25 11:44:07.956+08 720eb976-fd1d-4947-845b-15b344e808f3 2 t f
+3256 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-02-25 11:44:07.961+08 2019-02-25 11:44:07.961+08 720eb976-fd1d-4947-845b-15b344e808f3 2 t f
+3257 am 幅值 Output \N 3 \N \N mv 2019-02-25 11:44:07.966+08 2019-02-25 11:44:07.966+08 720eb976-fd1d-4947-845b-15b344e808f3 2 t f
+3258 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 11:46:10.801+08 2019-02-25 11:46:10.801+08 a5a87dd5-6735-4b0a-8526-b7185d9bc6f0 2 t f
+3259 physicalvalue 水压 Output \N 4 0.8 0 MPa 2019-02-25 11:46:10.808+08 2019-02-25 11:46:10.808+08 a5a87dd5-6735-4b0a-8526-b7185d9bc6f0 2 t f
+3260 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 11:46:10.814+08 2019-02-25 11:46:10.814+08 a5a87dd5-6735-4b0a-8526-b7185d9bc6f0 2 t f
+3261 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 11:46:10.819+08 2019-02-25 11:46:10.819+08 a5a87dd5-6735-4b0a-8526-b7185d9bc6f0 2 t f
+3262 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 11:46:10.831+08 2019-02-25 11:46:10.831+08 cc7e3edd-3a03-43ec-961e-ddf5db3ec4f0 2 t f
+3263 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 11:46:10.836+08 2019-02-25 11:46:10.836+08 cc7e3edd-3a03-43ec-961e-ddf5db3ec4f0 2 t f
+3264 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 11:46:10.84+08 2019-02-25 11:46:10.84+08 cc7e3edd-3a03-43ec-961e-ddf5db3ec4f0 2 t f
+3265 physicalvalue 水压 Output \N \N \N 4 0.8 0 MPa 2019-02-25 11:46:10.844+08 2019-02-25 11:46:10.844+08 cc7e3edd-3a03-43ec-961e-ddf5db3ec4f0 2 t f
+3266 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 11:46:10.859+08 2019-02-25 11:46:10.859+08 aea9a199-17e2-4db3-97f7-2f38de50fb90 2 t f
+3267 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 11:46:10.864+08 2019-02-25 11:46:10.864+08 aea9a199-17e2-4db3-97f7-2f38de50fb90 2 t f
+3268 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 11:46:10.868+08 2019-02-25 11:46:10.868+08 aea9a199-17e2-4db3-97f7-2f38de50fb90 2 t f
+3269 physicalvalue 水压 Output \N \N \N 4 0.8 0 MPa 2019-02-25 11:46:10.872+08 2019-02-25 11:46:10.872+08 aea9a199-17e2-4db3-97f7-2f38de50fb90 2 t f
+3270 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 11:52:45.929+08 2019-02-25 11:52:45.929+08 772b1b1c-b174-40d7-9d03-4e6a6ee4fa2a 2 t f
+3271 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 11:52:45.937+08 2019-02-25 11:52:45.937+08 772b1b1c-b174-40d7-9d03-4e6a6ee4fa2a 2 t f
+3272 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 11:52:45.944+08 2019-02-25 11:52:45.944+08 772b1b1c-b174-40d7-9d03-4e6a6ee4fa2a 2 t f
+3273 physicalvalue 水压 Output \N 4 1 0 MPa 2019-02-25 11:52:45.953+08 2019-02-25 11:52:45.953+08 772b1b1c-b174-40d7-9d03-4e6a6ee4fa2a 2 t f
+3274 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 11:52:45.968+08 2019-02-25 11:52:45.968+08 033a35ac-34f5-4970-871a-394dedbb920e 2 t f
+3275 physicalvalue 水压 Output \N \N \N 4 1 0 MPa 2019-02-25 11:52:45.973+08 2019-02-25 11:52:45.973+08 033a35ac-34f5-4970-871a-394dedbb920e 2 t f
+3276 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 11:52:45.979+08 2019-02-25 11:52:45.979+08 033a35ac-34f5-4970-871a-394dedbb920e 2 t f
+3277 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 11:52:45.985+08 2019-02-25 11:52:45.985+08 033a35ac-34f5-4970-871a-394dedbb920e 2 t f
+3278 physicalvalue 水压 Output \N \N \N 4 1 0 MPa 2019-02-25 11:52:45.998+08 2019-02-25 11:52:45.998+08 459695d2-69ab-4d25-8ea2-64c5b1884652 2 t f
+3279 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 11:52:46.003+08 2019-02-25 11:52:46.003+08 459695d2-69ab-4d25-8ea2-64c5b1884652 2 t f
+3280 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-02-25 11:52:46.009+08 2019-02-25 11:52:46.009+08 459695d2-69ab-4d25-8ea2-64c5b1884652 2 t f
+3281 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 11:52:46.015+08 2019-02-25 11:52:46.015+08 459695d2-69ab-4d25-8ea2-64c5b1884652 2 t f
+3282 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 11:55:32.894+08 2019-02-25 11:55:32.894+08 4af15f4e-a452-4123-8c3f-17182b707f61 2 t f
+3283 physicalvalue 水压 Output \N 4 2 0 MPa 2019-02-25 11:55:32.902+08 2019-02-25 11:55:32.902+08 4af15f4e-a452-4123-8c3f-17182b707f61 2 t f
+3284 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 11:55:32.909+08 2019-02-25 11:55:32.909+08 4af15f4e-a452-4123-8c3f-17182b707f61 2 t f
+3285 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 11:55:32.916+08 2019-02-25 11:55:32.916+08 4af15f4e-a452-4123-8c3f-17182b707f61 2 t f
+3286 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 11:55:32.931+08 2019-02-25 11:55:32.931+08 ad7457c8-1261-489f-a7d1-fba6ab6fd2cb 2 t f
+3287 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 11:55:32.939+08 2019-02-25 11:55:32.939+08 ad7457c8-1261-489f-a7d1-fba6ab6fd2cb 2 t f
+3288 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 11:55:32.944+08 2019-02-25 11:55:32.944+08 ad7457c8-1261-489f-a7d1-fba6ab6fd2cb 2 t f
+3289 physicalvalue 水压 Output \N 4 2 0 MPa 2019-02-25 11:55:32.951+08 2019-02-25 11:55:32.951+08 ad7457c8-1261-489f-a7d1-fba6ab6fd2cb 2 t f
+3290 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-02-25 11:55:32.962+08 2019-02-25 11:55:32.962+08 7c8d2cc9-631b-4ba3-81d4-30126181dc94 2 t f
+3291 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 11:55:32.966+08 2019-02-25 11:55:32.966+08 7c8d2cc9-631b-4ba3-81d4-30126181dc94 2 t f
+3292 physicalvalue 水压 Output \N \N \N 4 2 0 MPa 2019-02-25 11:55:32.971+08 2019-02-25 11:55:32.971+08 7c8d2cc9-631b-4ba3-81d4-30126181dc94 2 t f
+3293 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 11:55:32.977+08 2019-02-25 11:55:32.977+08 7c8d2cc9-631b-4ba3-81d4-30126181dc94 2 t f
+3295 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 13:30:27.006+08 2019-02-25 13:30:27.006+08 03afe194-fc01-4993-8f9a-ed4ca0ae6d90 2 t f
+3296 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 13:30:27.011+08 2019-02-25 13:30:27.011+08 03afe194-fc01-4993-8f9a-ed4ca0ae6d90 2 t f
+3298 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 13:30:27.025+08 2019-02-25 13:30:27.025+08 0dc2011e-5962-4366-82dd-6a326e0ddbf6 2 t f
+3299 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 13:30:27.029+08 2019-02-25 13:30:27.029+08 0dc2011e-5962-4366-82dd-6a326e0ddbf6 2 t f
+3418 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:25:00.062+08 2019-02-25 14:25:00.062+08 97be25b3-75df-4137-a479-22343213fe74 2 t f
+3419 physicalvalue 应变 Output \N 4 3000 -3000 με 2019-02-25 14:25:00.074+08 2019-02-25 14:25:00.074+08 97be25b3-75df-4137-a479-22343213fe74 2 t f
+3420 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 14:25:00.092+08 2019-02-25 14:25:00.092+08 97be25b3-75df-4137-a479-22343213fe74 2 t f
+3421 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 14:25:00.097+08 2019-02-25 14:25:00.097+08 97be25b3-75df-4137-a479-22343213fe74 2 t f
+3422 physicalvalue 应变 Output \N \N \N 4 3000 -3000 με 2019-02-25 14:25:00.109+08 2019-02-25 14:25:00.109+08 f2d80142-2f46-42d6-aa9e-c4e687c5690d 2 t f
+3423 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:25:00.119+08 2019-02-25 14:25:00.119+08 f2d80142-2f46-42d6-aa9e-c4e687c5690d 2 t f
+3424 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-02-25 14:25:00.13+08 2019-02-25 14:25:00.13+08 f2d80142-2f46-42d6-aa9e-c4e687c5690d 2 t f
+3425 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 14:25:00.14+08 2019-02-25 14:25:00.14+08 f2d80142-2f46-42d6-aa9e-c4e687c5690d 2 t f
+3426 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:25:00.154+08 2019-02-25 14:25:00.154+08 49ff32ed-be50-4c87-ba73-af20b848e154 2 t f
+3427 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 14:25:00.159+08 2019-02-25 14:25:00.159+08 49ff32ed-be50-4c87-ba73-af20b848e154 2 t f
+3428 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 14:25:00.162+08 2019-02-25 14:25:00.162+08 49ff32ed-be50-4c87-ba73-af20b848e154 2 t f
+3429 physicalvalue 应变 Output \N 3 3000 -3000 με 2019-02-25 14:25:00.166+08 2019-02-25 14:25:00.166+08 49ff32ed-be50-4c87-ba73-af20b848e154 2 t f
+3302 physicalvalue 荷载 Output \N 4 100 -100 t 2019-02-25 13:31:57.637+08 2019-02-25 13:31:57.637+08 b1acc286-422b-46a2-a2ea-4aa8c9b8256f 2 t f
+3303 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 13:31:57.644+08 2019-02-25 13:31:57.644+08 b1acc286-422b-46a2-a2ea-4aa8c9b8256f 2 t f
+3304 am 幅值 Output \N 3 \N \N mv 2019-02-25 13:31:57.65+08 2019-02-25 13:31:57.65+08 b1acc286-422b-46a2-a2ea-4aa8c9b8256f 2 t f
+3305 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 13:31:57.656+08 2019-02-25 13:31:57.656+08 b1acc286-422b-46a2-a2ea-4aa8c9b8256f 2 t f
+3306 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 13:31:57.672+08 2019-02-25 13:31:57.672+08 bb29ba88-ec03-44ab-ba29-00d98ccd9af1 2 t f
+3307 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 13:31:57.677+08 2019-02-25 13:31:57.677+08 bb29ba88-ec03-44ab-ba29-00d98ccd9af1 2 t f
+3308 physicalvalue 荷载 Output \N \N \N 4 100 -100 t 2019-02-25 13:31:57.682+08 2019-02-25 13:31:57.682+08 bb29ba88-ec03-44ab-ba29-00d98ccd9af1 2 t f
+3309 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 13:31:57.687+08 2019-02-25 13:31:57.687+08 bb29ba88-ec03-44ab-ba29-00d98ccd9af1 2 t f
+3310 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 13:32:42.891+08 2019-02-25 13:32:42.891+08 4a1e5bbd-ab8a-48fa-8915-98f9fad2be80 2 t f
+3311 physicalvalue 荷载 Output \N 4 200 -200 t 2019-02-25 13:32:42.898+08 2019-02-25 13:32:42.898+08 4a1e5bbd-ab8a-48fa-8915-98f9fad2be80 2 t f
+3312 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 13:32:42.905+08 2019-02-25 13:32:42.905+08 4a1e5bbd-ab8a-48fa-8915-98f9fad2be80 2 t f
+3313 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 13:32:42.911+08 2019-02-25 13:32:42.911+08 4a1e5bbd-ab8a-48fa-8915-98f9fad2be80 2 t f
+3314 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 13:32:42.929+08 2019-02-25 13:32:42.929+08 666d6810-bfe4-47ca-93bd-fa60ced4252d 2 t f
+3315 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 13:32:42.934+08 2019-02-25 13:32:42.934+08 666d6810-bfe4-47ca-93bd-fa60ced4252d 2 t f
+3316 physicalvalue 荷载 Output \N \N \N 4 200 -200 t 2019-02-25 13:32:42.939+08 2019-02-25 13:32:42.939+08 666d6810-bfe4-47ca-93bd-fa60ced4252d 2 t f
+3317 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 13:32:42.944+08 2019-02-25 13:32:42.944+08 666d6810-bfe4-47ca-93bd-fa60ced4252d 2 t f
+3318 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 13:43:02.019+08 2019-02-25 13:43:02.019+08 ba00fbe0-7fdf-49d0-81ec-84046c3c13d8 2 t f
+3319 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 13:43:02.03+08 2019-02-25 13:43:02.03+08 ba00fbe0-7fdf-49d0-81ec-84046c3c13d8 2 t f
+3320 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 13:43:02.166+08 2019-02-25 13:43:02.166+08 ba00fbe0-7fdf-49d0-81ec-84046c3c13d8 2 t f
+3321 physicalvalue 荷载 Output \N 4 300 -300 t 2019-02-25 13:43:02.172+08 2019-02-25 13:43:02.172+08 ba00fbe0-7fdf-49d0-81ec-84046c3c13d8 2 t f
+3322 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 13:43:02.781+08 2019-02-25 13:43:02.781+08 998641f1-bcc9-4b88-8155-68d0cdd22f67 2 t f
+3323 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 13:43:02.787+08 2019-02-25 13:43:02.787+08 998641f1-bcc9-4b88-8155-68d0cdd22f67 2 t f
+3324 physicalvalue 荷载 Output \N \N \N 4 300 -300 t 2019-02-25 13:43:02.792+08 2019-02-25 13:43:02.792+08 998641f1-bcc9-4b88-8155-68d0cdd22f67 2 t f
+3325 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 13:43:02.797+08 2019-02-25 13:43:02.797+08 998641f1-bcc9-4b88-8155-68d0cdd22f67 2 t f
+3326 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 14:08:36.917+08 2019-02-25 14:08:36.917+08 c4126560-43a1-4c04-a7c2-182072c07e07 2 t f
+3327 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:08:36.924+08 2019-02-25 14:08:36.924+08 c4126560-43a1-4c04-a7c2-182072c07e07 2 t f
+3328 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 14:08:36.929+08 2019-02-25 14:08:36.929+08 c4126560-43a1-4c04-a7c2-182072c07e07 2 t f
+3329 physicalvalue 荷载 Output \N 4 400 -400 t 2019-02-25 14:08:36.935+08 2019-02-25 14:08:36.935+08 c4126560-43a1-4c04-a7c2-182072c07e07 2 t f
+3330 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 14:08:36.947+08 2019-02-25 14:08:36.947+08 0cd9085e-abe2-4c04-9956-b0572ba81fa5 2 t f
+3331 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:08:36.952+08 2019-02-25 14:08:36.952+08 0cd9085e-abe2-4c04-9956-b0572ba81fa5 2 t f
+3300 physicalvalue 轴力 Output \N 4 KN 2019-02-25 13:30:27.032+08 2020-04-14 10:26:53.812+08 0dc2011e-5962-4366-82dd-6a326e0ddbf6 2 t f
+3332 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 14:08:36.957+08 2019-02-25 14:08:36.957+08 0cd9085e-abe2-4c04-9956-b0572ba81fa5 2 t f
+3333 physicalvalue 荷载 Output \N \N \N 4 400 -400 t 2019-02-25 14:08:36.961+08 2019-02-25 14:08:36.961+08 0cd9085e-abe2-4c04-9956-b0572ba81fa5 2 t f
+3334 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 14:10:58.956+08 2019-02-25 14:10:58.956+08 198c4f79-6642-4537-b774-bea491692a9e 2 t f
+3335 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 14:10:58.965+08 2019-02-25 14:10:58.965+08 198c4f79-6642-4537-b774-bea491692a9e 2 t f
+3336 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:10:58.972+08 2019-02-25 14:10:58.972+08 198c4f79-6642-4537-b774-bea491692a9e 2 t f
+3337 physicalvalue 轴力 Output \N \N \N 4 1000 -1000 KN 2019-02-25 14:10:58.978+08 2019-02-25 14:10:58.978+08 198c4f79-6642-4537-b774-bea491692a9e 2 t f
+3338 am 幅值 Output \N 3 \N \N mv 2019-02-25 14:10:58.995+08 2019-02-25 14:10:58.995+08 2a6ffd97-9937-4a41-b19d-9e8a1932c22a 2 t f
+3339 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 14:10:59.001+08 2019-02-25 14:10:59.001+08 2a6ffd97-9937-4a41-b19d-9e8a1932c22a 2 t f
+3340 physicalvalue 轴力 Output \N 4 1000 -1000 kN 2019-02-25 14:10:59.007+08 2019-02-25 14:10:59.007+08 2a6ffd97-9937-4a41-b19d-9e8a1932c22a 2 t f
+3341 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 14:10:59.012+08 2019-02-25 14:10:59.012+08 2a6ffd97-9937-4a41-b19d-9e8a1932c22a 2 t f
+3342 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 14:12:02.955+08 2019-02-25 14:12:02.955+08 12671ad8-5da9-4695-abc5-8dc116c5f034 2 t f
+3343 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 14:12:02.962+08 2019-02-25 14:12:02.962+08 12671ad8-5da9-4695-abc5-8dc116c5f034 2 t f
+3344 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:12:02.968+08 2019-02-25 14:12:02.968+08 12671ad8-5da9-4695-abc5-8dc116c5f034 2 t f
+3345 physicalvalue 轴力 Output \N \N \N 4 2000 -2000 KN 2019-02-25 14:12:02.973+08 2019-02-25 14:12:02.973+08 12671ad8-5da9-4695-abc5-8dc116c5f034 2 t f
+3346 am 幅值 Output \N 3 \N \N mv 2019-02-25 14:12:02.987+08 2019-02-25 14:12:02.987+08 f076544b-acde-440a-a44f-ff4468e3cdac 2 t f
+3347 temperature 温度 Output \N \N \N \N ℃ 2019-02-25 14:12:02.992+08 2019-02-25 14:12:02.992+08 f076544b-acde-440a-a44f-ff4468e3cdac 2 t f
+3348 frequency 频率 Output \N \N \N \N \N \N Hz 2019-02-25 14:12:02.997+08 2019-02-25 14:12:02.997+08 f076544b-acde-440a-a44f-ff4468e3cdac 2 t f
+3349 physicalvalue 轴力 Output \N 4 2000 -2000 kN 2019-02-25 14:12:03.003+08 2019-02-25 14:12:03.003+08 f076544b-acde-440a-a44f-ff4468e3cdac 2 t f
+3350 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 14:14:48.842+08 2019-02-25 14:14:48.842+08 cdf26baa-f8c9-435a-ace0-c2eff041d8c2 2 t f
+3351 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:14:48.853+08 2019-02-25 14:14:48.853+08 cdf26baa-f8c9-435a-ace0-c2eff041d8c2 2 t f
+3352 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 14:14:48.866+08 2019-02-25 14:14:48.866+08 cdf26baa-f8c9-435a-ace0-c2eff041d8c2 2 t f
+3353 physicalvalue 幅值 Output \N \N \N 4 3000 -3000 KN 2019-02-25 14:14:48.872+08 2019-02-25 14:14:48.872+08 cdf26baa-f8c9-435a-ace0-c2eff041d8c2 2 t f
+3354 physicalvalue 轴力 Output \N 4 3000 -3000 kN 2019-02-25 14:14:48.888+08 2019-02-25 14:14:48.888+08 db70825c-6666-4931-b32b-5f372af95d42 2 t f
+3355 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 14:14:48.893+08 2019-02-25 14:14:48.893+08 db70825c-6666-4931-b32b-5f372af95d42 2 t f
+3356 am 幅值 Output \N 3 \N \N mv 2019-02-25 14:14:48.9+08 2019-02-25 14:14:48.9+08 db70825c-6666-4931-b32b-5f372af95d42 2 t f
+3357 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 14:14:48.905+08 2019-02-25 14:14:48.905+08 db70825c-6666-4931-b32b-5f372af95d42 2 t f
+3358 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:16:02.468+08 2019-02-25 14:16:02.468+08 2aa6ca91-f1d3-4716-adb1-f6248d68f0fd 2 t f
+3359 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 14:16:02.472+08 2019-02-25 14:16:02.472+08 2aa6ca91-f1d3-4716-adb1-f6248d68f0fd 2 t f
+3360 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 14:16:02.476+08 2019-02-25 14:16:02.476+08 2aa6ca91-f1d3-4716-adb1-f6248d68f0fd 2 t f
+3361 physicalvalue 轴力 Output \N \N \N 4 4000 -4000 KN 2019-02-25 14:16:02.479+08 2019-02-25 14:16:02.479+08 2aa6ca91-f1d3-4716-adb1-f6248d68f0fd 2 t f
+3362 physicalvalue 轴力 Output \N 4 4000 -4000 kN 2019-02-25 14:16:02.488+08 2019-02-25 14:16:02.488+08 8c1c7ab8-d39f-4bdd-9a2c-d2d7342fce43 2 t f
+3363 temperature 温度 Output \N \N \N \N ℃ 2019-02-25 14:16:02.493+08 2019-02-25 14:16:02.493+08 8c1c7ab8-d39f-4bdd-9a2c-d2d7342fce43 2 t f
+3364 frequency 频率 Output \N \N \N \N \N \N Hz 2019-02-25 14:16:02.496+08 2019-02-25 14:16:02.496+08 8c1c7ab8-d39f-4bdd-9a2c-d2d7342fce43 2 t f
+3365 am 幅值 Output \N 3 \N \N mv 2019-02-25 14:16:02.499+08 2019-02-25 14:16:02.499+08 8c1c7ab8-d39f-4bdd-9a2c-d2d7342fce43 2 t f
+3366 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 14:17:43.264+08 2019-02-25 14:17:43.264+08 af8ad166-474f-43bd-83c2-9f6082f78eae 2 t f
+3367 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:17:43.271+08 2019-02-25 14:17:43.271+08 af8ad166-474f-43bd-83c2-9f6082f78eae 2 t f
+3368 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 14:17:43.276+08 2019-02-25 14:17:43.276+08 af8ad166-474f-43bd-83c2-9f6082f78eae 2 t f
+3369 physicalvalue 荷载力 Output \N 3 75 -75 KN 正值是张拉力,负值是承压力 2019-02-25 14:17:43.28+08 2019-02-25 14:17:43.28+08 af8ad166-474f-43bd-83c2-9f6082f78eae 2 t f
+3370 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 14:17:43.292+08 2019-02-25 14:17:43.292+08 e96dc802-721b-4cf2-acc4-f3fb360feaef 2 t f
+3371 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 14:17:43.298+08 2019-02-25 14:17:43.298+08 e96dc802-721b-4cf2-acc4-f3fb360feaef 2 t f
+3372 physicalvalue 荷载力 Output \N 4 75 -75 kN 正值是张拉力,负值是承压力 2019-02-25 14:17:43.302+08 2019-02-25 14:17:43.302+08 e96dc802-721b-4cf2-acc4-f3fb360feaef 2 t f
+3373 am 幅值 Output \N 3 \N \N mv 2019-02-25 14:17:43.306+08 2019-02-25 14:17:43.306+08 e96dc802-721b-4cf2-acc4-f3fb360feaef 2 t f
+3374 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:18:58.109+08 2019-02-25 14:18:58.109+08 f98a9365-9230-47fd-82a1-9ba1f6908c8d 2 t f
+3375 physicalvalue 荷载力 Output \N 3 105 -105 KN 正值是张拉力,负值是承压力 2019-02-25 14:18:58.116+08 2019-02-25 14:18:58.116+08 f98a9365-9230-47fd-82a1-9ba1f6908c8d 2 t f
+3376 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 14:18:58.123+08 2019-02-25 14:18:58.123+08 f98a9365-9230-47fd-82a1-9ba1f6908c8d 2 t f
+3377 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 14:18:58.127+08 2019-02-25 14:18:58.127+08 f98a9365-9230-47fd-82a1-9ba1f6908c8d 2 t f
+3378 temperature 温度 Output \N \N \N \N ℃ 2019-02-25 14:18:58.138+08 2019-02-25 14:18:58.138+08 7cad6a7a-e258-4ed6-aa59-e6b8095beaae 2 t f
+3379 frequency 频率 Output \N \N \N \N \N \N Hz 2019-02-25 14:18:58.142+08 2019-02-25 14:18:58.142+08 7cad6a7a-e258-4ed6-aa59-e6b8095beaae 2 t f
+3380 physicalvalue 荷载力 Output \N 4 105 -105 kN 正值是张拉力,负值是承压力 2019-02-25 14:18:58.146+08 2019-02-25 14:18:58.146+08 7cad6a7a-e258-4ed6-aa59-e6b8095beaae 2 t f
+3381 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:18:58.149+08 2019-02-25 14:18:58.149+08 7cad6a7a-e258-4ed6-aa59-e6b8095beaae 2 t f
+3382 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 14:20:41.329+08 2019-02-25 14:20:41.329+08 0119f42c-7e17-4f77-81ed-3e55f31b8e61 2 t f
+3383 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-02-25 14:20:41.338+08 2019-02-25 14:20:41.338+08 0119f42c-7e17-4f77-81ed-3e55f31b8e61 2 t f
+3384 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:20:41.346+08 2019-02-25 14:20:41.346+08 0119f42c-7e17-4f77-81ed-3e55f31b8e61 2 t f
+3385 physicalvalue 应变 Output \N \N \N 4 1500 -1500 με 2019-02-25 14:20:41.351+08 2019-02-25 14:20:41.351+08 0119f42c-7e17-4f77-81ed-3e55f31b8e61 2 t f
+3386 physicalvalue 应变 Output \N 4 1500 -1500 με 2019-02-25 14:20:41.366+08 2019-02-25 14:20:41.366+08 5b7ef632-3a0a-470c-848a-488e63e67023 2 t f
+3387 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 14:20:41.371+08 2019-02-25 14:20:41.371+08 5b7ef632-3a0a-470c-848a-488e63e67023 2 t f
+3388 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 14:20:41.376+08 2019-02-25 14:20:41.376+08 5b7ef632-3a0a-470c-848a-488e63e67023 2 t f
+3389 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:20:41.381+08 2019-02-25 14:20:41.381+08 5b7ef632-3a0a-470c-848a-488e63e67023 2 t f
+3390 physicalvalue 应力 Output \N 4 1500 -1500 με 2019-02-25 14:20:41.398+08 2019-02-25 14:20:41.398+08 b16d284f-8c22-4ef0-b6d1-1f0b10ead5fb 2 t f
+3391 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 14:20:41.402+08 2019-02-25 14:20:41.402+08 b16d284f-8c22-4ef0-b6d1-1f0b10ead5fb 2 t f
+3392 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 14:20:41.407+08 2019-02-25 14:20:41.407+08 b16d284f-8c22-4ef0-b6d1-1f0b10ead5fb 2 t f
+3393 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:20:41.411+08 2019-02-25 14:20:41.411+08 b16d284f-8c22-4ef0-b6d1-1f0b10ead5fb 2 t f
+3394 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 14:21:56.994+08 2019-02-25 14:21:56.994+08 bbd01f40-d430-4d85-95ec-e91a22fab396 2 t f
+3395 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 14:21:57.001+08 2019-02-25 14:21:57.001+08 bbd01f40-d430-4d85-95ec-e91a22fab396 2 t f
+3396 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:21:57.005+08 2019-02-25 14:21:57.005+08 bbd01f40-d430-4d85-95ec-e91a22fab396 2 t f
+3397 physicalvalue 应变 Output \N 3 3000 -3000 με 2019-02-25 14:21:57.01+08 2019-02-25 14:21:57.01+08 bbd01f40-d430-4d85-95ec-e91a22fab396 2 t f
+3398 physicalvalue 微应变 Output \N \N \N 3 3000 -3000 με 2019-02-25 14:21:57.023+08 2019-02-25 14:21:57.023+08 80209593-8753-4642-bc14-5537e3223d75 2 t f
+3399 temperature 温度 Output \N \N \N 3 \N \N ℃ 2019-02-25 14:21:57.029+08 2019-02-25 14:21:57.029+08 80209593-8753-4642-bc14-5537e3223d75 2 t f
+3400 am 幅值 Output \N \N \N 5 \N \N mV 2019-02-25 14:21:57.034+08 2019-02-25 14:21:57.034+08 80209593-8753-4642-bc14-5537e3223d75 2 t f
+3401 frequency 频率 Output \N \N \N 4 \N \N Hz 2019-02-25 14:21:57.038+08 2019-02-25 14:21:57.038+08 80209593-8753-4642-bc14-5537e3223d75 2 t f
+3402 temperature 温度 Output \N \N \N \N ℃ 2019-02-25 14:21:57.05+08 2019-02-25 14:21:57.05+08 7169451f-4110-4ba2-8482-b6e4a51eb459 2 t f
+3403 physicalvalue 应变 Output \N 4 3000 -3000 με 2019-02-25 14:21:57.057+08 2019-02-25 14:21:57.057+08 7169451f-4110-4ba2-8482-b6e4a51eb459 2 t f
+3404 am 幅值 Output \N 3 \N \N mv 2019-02-25 14:21:57.06+08 2019-02-25 14:21:57.06+08 7169451f-4110-4ba2-8482-b6e4a51eb459 2 t f
+3405 frequency 频率 Output \N \N \N \N \N \N Hz 2019-02-25 14:21:57.063+08 2019-02-25 14:21:57.063+08 7169451f-4110-4ba2-8482-b6e4a51eb459 2 t f
+3406 frequency 频率 Output \N \N \N 4 \N \N Hz 2019-02-25 14:24:04.256+08 2019-02-25 14:24:04.256+08 e2096ac1-6a10-4df5-9393-173d19fbbee0 2 t f
+3407 physicalvalue 微应变 Output \N \N \N 4 5000 -5000 με 2019-02-25 14:24:04.263+08 2019-02-25 14:24:04.263+08 e2096ac1-6a10-4df5-9393-173d19fbbee0 2 t f
+3408 am 幅值 Output \N \N \N 5 \N \N mV 2019-02-25 14:24:04.268+08 2019-02-25 14:24:04.268+08 e2096ac1-6a10-4df5-9393-173d19fbbee0 2 t f
+3409 temperature 温度 Output \N \N \N 3 \N \N ℃ 2019-02-25 14:24:04.272+08 2019-02-25 14:24:04.272+08 e2096ac1-6a10-4df5-9393-173d19fbbee0 2 t f
+3410 frequency 频率 Output \N \N \N 4 \N \N Hz 2019-02-25 14:24:04.282+08 2019-02-25 14:24:04.282+08 8b567669-1458-4b89-8448-257ca3ecb15c 2 t f
+3411 am 幅值 Output \N \N \N 5 \N \N mV 2019-02-25 14:24:04.286+08 2019-02-25 14:24:04.286+08 8b567669-1458-4b89-8448-257ca3ecb15c 2 t f
+3412 temperature 温度 Output \N 3 \N \N ℃ 2019-02-25 14:24:04.291+08 2019-02-25 14:24:04.291+08 8b567669-1458-4b89-8448-257ca3ecb15c 2 t f
+3413 physicalvalue 微应变 Output \N 4 5000 -5000 με 2019-02-25 14:24:04.297+08 2019-02-25 14:24:04.297+08 8b567669-1458-4b89-8448-257ca3ecb15c 2 t f
+3415 temperature 温度 Output \N \N \N \N ℃ 2019-02-25 14:24:04.313+08 2019-02-25 14:24:04.313+08 63df0f39-75da-443e-a275-59ebd94aa3ea 2 t f
+3416 physicalvalue 微应变 Output \N 4 5000 -5000 με 2019-02-25 14:24:04.317+08 2019-02-25 14:24:04.317+08 63df0f39-75da-443e-a275-59ebd94aa3ea 2 t f
+3417 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 14:24:04.321+08 2019-02-25 14:24:04.321+08 63df0f39-75da-443e-a275-59ebd94aa3ea 2 t f
+3430 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 15:39:43.193+08 2019-02-25 15:39:43.193+08 c7bcd7ca-9e17-41e1-b3e4-39641d53a443 2 t f
+3431 physicalvalue 应力 Output \N 4 0.4 0 MPa 2019-02-25 15:39:43.2+08 2019-02-25 15:39:43.2+08 c7bcd7ca-9e17-41e1-b3e4-39641d53a443 2 t f
+3432 am 幅值 Output \N 3 \N \N mv 2019-02-25 15:39:43.205+08 2019-02-25 15:39:43.205+08 c7bcd7ca-9e17-41e1-b3e4-39641d53a443 2 t f
+3433 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 15:39:43.21+08 2019-02-25 15:39:43.21+08 c7bcd7ca-9e17-41e1-b3e4-39641d53a443 2 t f
+3434 temperature 温度 Output \N \N \N 3 \N \N ℃ 2019-02-25 15:39:43.222+08 2019-02-25 15:39:43.222+08 70454576-c9f8-4b8b-82a5-2ba414369cf1 2 t f
+3435 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 15:39:43.227+08 2019-02-25 15:39:43.227+08 70454576-c9f8-4b8b-82a5-2ba414369cf1 2 t f
+3436 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:39:43.231+08 2019-02-25 15:39:43.231+08 70454576-c9f8-4b8b-82a5-2ba414369cf1 2 t f
+3437 physicalvalue 应力 Output \N \N \N 4 0.4 0 MPa 2019-02-25 15:39:43.236+08 2019-02-25 15:39:43.236+08 70454576-c9f8-4b8b-82a5-2ba414369cf1 2 t f
+3438 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-02-25 15:39:43.247+08 2019-02-25 15:39:43.247+08 fc002308-8f49-4bde-a539-028bc4a00d6d 2 t f
+3439 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 15:39:43.251+08 2019-02-25 15:39:43.251+08 fc002308-8f49-4bde-a539-028bc4a00d6d 2 t f
+3440 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:39:43.255+08 2019-02-25 15:39:43.255+08 fc002308-8f49-4bde-a539-028bc4a00d6d 2 t f
+3441 physicalvalue 应力 Output \N 4 0.4 0 MPa 2019-02-25 15:39:43.259+08 2019-02-25 15:39:43.259+08 fc002308-8f49-4bde-a539-028bc4a00d6d 2 t f
+3442 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 15:41:07.264+08 2019-02-25 15:41:07.264+08 ba9214a7-0d02-453f-ae49-912a45fd027f 2 t f
+3443 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 15:41:07.275+08 2019-02-25 15:41:07.275+08 ba9214a7-0d02-453f-ae49-912a45fd027f 2 t f
+3444 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:41:07.282+08 2019-02-25 15:41:07.282+08 ba9214a7-0d02-453f-ae49-912a45fd027f 2 t f
+3445 physicalvalue 应变 Output \N \N \N 4 5000 -5000 με 2019-02-25 15:41:07.288+08 2019-02-25 15:41:07.288+08 ba9214a7-0d02-453f-ae49-912a45fd027f 2 t f
+3446 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 15:41:07.311+08 2019-02-25 15:41:07.311+08 bdcdab4d-62d5-48d2-9a07-cd61a9cc108a 2 t f
+3447 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 15:41:07.318+08 2019-02-25 15:41:07.318+08 bdcdab4d-62d5-48d2-9a07-cd61a9cc108a 2 t f
+3448 physicalvalue 应变 Output \N 4 5000 -5000 με 2019-02-25 15:41:07.325+08 2019-02-25 15:41:07.325+08 bdcdab4d-62d5-48d2-9a07-cd61a9cc108a 2 t f
+3449 am 幅值 Output \N 3 \N \N mv 2019-02-25 15:41:07.331+08 2019-02-25 15:41:07.331+08 bdcdab4d-62d5-48d2-9a07-cd61a9cc108a 2 t f
+3450 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:41:07.344+08 2019-02-25 15:41:07.344+08 89297513-df93-40a4-bfb4-cc2393d5128a 2 t f
+3451 physicalvalue 应变 Output \N 4 5000 -5000 με 2019-02-25 15:41:07.35+08 2019-02-25 15:41:07.35+08 89297513-df93-40a4-bfb4-cc2393d5128a 2 t f
+3452 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 15:41:07.355+08 2019-02-25 15:41:07.355+08 89297513-df93-40a4-bfb4-cc2393d5128a 2 t f
+3453 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 15:41:07.36+08 2019-02-25 15:41:07.36+08 89297513-df93-40a4-bfb4-cc2393d5128a 2 t f
+3454 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 15:41:59.734+08 2019-02-25 15:41:59.734+08 45284d89-2621-47e3-b5ee-e03229611e89 2 t f
+3455 physicalvalue 应力 Output \N 4 0.8 0 MPa 2019-02-25 15:41:59.742+08 2019-02-25 15:41:59.742+08 45284d89-2621-47e3-b5ee-e03229611e89 2 t f
+3456 am 幅值 Output \N 3 \N \N mv 2019-02-25 15:41:59.749+08 2019-02-25 15:41:59.749+08 45284d89-2621-47e3-b5ee-e03229611e89 2 t f
+3457 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 15:41:59.756+08 2019-02-25 15:41:59.756+08 45284d89-2621-47e3-b5ee-e03229611e89 2 t f
+3458 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 15:41:59.779+08 2019-02-25 15:41:59.779+08 aa350be5-e923-4961-b523-fd25c5e8445f 2 t f
+3459 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:41:59.784+08 2019-02-25 15:41:59.784+08 aa350be5-e923-4961-b523-fd25c5e8445f 2 t f
+3460 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 15:41:59.79+08 2019-02-25 15:41:59.79+08 aa350be5-e923-4961-b523-fd25c5e8445f 2 t f
+3461 physicalvalue 应力 Output \N \N \N 4 0.8 0 MPa 2019-02-25 15:41:59.796+08 2019-02-25 15:41:59.796+08 aa350be5-e923-4961-b523-fd25c5e8445f 2 t f
+3462 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-02-25 15:41:59.812+08 2019-02-25 15:41:59.812+08 cdc89f99-96ab-4176-a290-0cd507439722 2 t f
+3463 am 幅值 Output \N 3 \N \N mv 2019-02-25 15:41:59.818+08 2019-02-25 15:41:59.818+08 cdc89f99-96ab-4176-a290-0cd507439722 2 t f
+3464 physicalvalue 应力 Output \N \N \N 4 0.8 0 MPa 2019-02-25 15:41:59.826+08 2019-02-25 15:41:59.826+08 cdc89f99-96ab-4176-a290-0cd507439722 2 t f
+3465 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 15:41:59.832+08 2019-02-25 15:41:59.832+08 cdc89f99-96ab-4176-a290-0cd507439722 2 t f
+3466 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 15:43:06.986+08 2019-02-25 15:43:06.986+08 2fc50d79-7cc8-477d-ad02-7c457e527084 2 t f
+3467 physicalvalue 应力 Output \N 4 1 0 MPa 2019-02-25 15:43:06.991+08 2019-02-25 15:43:06.991+08 2fc50d79-7cc8-477d-ad02-7c457e527084 2 t f
+3468 am 幅值 Output \N 3 \N \N mv 2019-02-25 15:43:06.999+08 2019-02-25 15:43:06.999+08 2fc50d79-7cc8-477d-ad02-7c457e527084 2 t f
+3469 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 15:43:07.003+08 2019-02-25 15:43:07.003+08 2fc50d79-7cc8-477d-ad02-7c457e527084 2 t f
+3470 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 15:43:07.014+08 2019-02-25 15:43:07.014+08 fe7497bd-7016-4a8c-abf8-23ec8981746c 2 t f
+3471 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 15:43:07.018+08 2019-02-25 15:43:07.018+08 fe7497bd-7016-4a8c-abf8-23ec8981746c 2 t f
+3472 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:43:07.022+08 2019-02-25 15:43:07.022+08 fe7497bd-7016-4a8c-abf8-23ec8981746c 2 t f
+3473 physicalvalue 应力 Output \N \N \N 4 1 0 MPa 2019-02-25 15:43:07.025+08 2019-02-25 15:43:07.025+08 fe7497bd-7016-4a8c-abf8-23ec8981746c 2 t f
+3474 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 15:43:07.035+08 2019-02-25 15:43:07.035+08 b62a52ce-bcd3-4156-89d7-83ab453c3121 2 t f
+3475 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:43:07.038+08 2019-02-25 15:43:07.038+08 b62a52ce-bcd3-4156-89d7-83ab453c3121 2 t f
+3477 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 15:43:07.046+08 2019-02-25 15:43:07.046+08 b62a52ce-bcd3-4156-89d7-83ab453c3121 2 t f
+3478 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 15:44:37.108+08 2019-02-25 15:44:37.108+08 6db67d93-daa9-4ef0-840f-c89dfc62abdc 2 t f
+3479 physicalvalue 应力 Output \N 4 2 0 MPa 2019-02-25 15:44:37.116+08 2019-02-25 15:44:37.116+08 6db67d93-daa9-4ef0-840f-c89dfc62abdc 2 t f
+3480 am 幅值 Output \N 3 \N \N mv 2019-02-25 15:44:37.121+08 2019-02-25 15:44:37.121+08 6db67d93-daa9-4ef0-840f-c89dfc62abdc 2 t f
+3481 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 15:44:37.126+08 2019-02-25 15:44:37.126+08 6db67d93-daa9-4ef0-840f-c89dfc62abdc 2 t f
+3482 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 15:44:37.142+08 2019-02-25 15:44:37.142+08 aab98040-a906-4f79-a6df-74df5b9849bc 2 t f
+3483 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:44:37.148+08 2019-02-25 15:44:37.148+08 aab98040-a906-4f79-a6df-74df5b9849bc 2 t f
+3484 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 15:44:37.153+08 2019-02-25 15:44:37.153+08 aab98040-a906-4f79-a6df-74df5b9849bc 2 t f
+3485 physicalvalue 应力 Output \N \N \N 4 2 0 MPa 2019-02-25 15:44:37.158+08 2019-02-25 15:44:37.158+08 aab98040-a906-4f79-a6df-74df5b9849bc 2 t f
+3486 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:44:37.175+08 2019-02-25 15:44:37.175+08 0518af3d-a054-45a0-815a-8ed6c3833d46 2 t f
+3487 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-02-25 15:44:37.182+08 2019-02-25 15:44:37.182+08 0518af3d-a054-45a0-815a-8ed6c3833d46 2 t f
+3488 physicalvalue 应力 Output \N \N \N 4 2 0 MPa 2019-02-25 15:44:37.19+08 2019-02-25 15:44:37.19+08 0518af3d-a054-45a0-815a-8ed6c3833d46 2 t f
+3489 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 15:44:37.198+08 2019-02-25 15:44:37.198+08 0518af3d-a054-45a0-815a-8ed6c3833d46 2 t f
+3490 frequency 频率 Output \N \N \N \N \N \N Hz 2019-02-25 15:46:09.579+08 2019-02-25 15:46:09.579+08 99d5cbb6-441e-4909-8ab1-f5fd36fb9f42 2 t f
+3491 temperature 温度 Output \N \N \N \N ℃ 2019-02-25 15:46:09.586+08 2019-02-25 15:46:09.586+08 99d5cbb6-441e-4909-8ab1-f5fd36fb9f42 2 t f
+3492 physicalvalue 应变 Output \N 4 1500 -1500 με 2019-02-25 15:46:09.592+08 2019-02-25 15:46:09.592+08 99d5cbb6-441e-4909-8ab1-f5fd36fb9f42 2 t f
+3493 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:46:09.597+08 2019-02-25 15:46:09.597+08 99d5cbb6-441e-4909-8ab1-f5fd36fb9f42 2 t f
+3494 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:46:09.612+08 2019-02-25 15:46:09.612+08 f832c684-9c7c-484e-b547-a4b717644f8a 2 t f
+3495 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-02-25 15:46:09.618+08 2019-02-25 15:46:09.618+08 f832c684-9c7c-484e-b547-a4b717644f8a 2 t f
+3496 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 15:46:09.627+08 2019-02-25 15:46:09.627+08 f832c684-9c7c-484e-b547-a4b717644f8a 2 t f
+3497 physicalvalue 应变 Output \N \N \N 4 1500 -1500 με 2019-02-25 15:46:09.633+08 2019-02-25 15:46:09.633+08 f832c684-9c7c-484e-b547-a4b717644f8a 2 t f
+3498 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 15:46:09.648+08 2019-02-25 15:46:09.648+08 fbaf320c-de3d-4cdb-93f1-960973d87747 2 t f
+3499 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 15:46:09.653+08 2019-02-25 15:46:09.653+08 fbaf320c-de3d-4cdb-93f1-960973d87747 2 t f
+3500 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:46:09.659+08 2019-02-25 15:46:09.659+08 fbaf320c-de3d-4cdb-93f1-960973d87747 2 t f
+3501 physicalvalue 应变 Output \N 4 1500 -1500 με 2019-02-25 15:46:09.664+08 2019-02-25 15:46:09.664+08 fbaf320c-de3d-4cdb-93f1-960973d87747 2 t f
+3502 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:46:53.778+08 2019-02-25 15:46:53.778+08 d87ea357-e29f-4926-8589-a3e8d7f38ca2 2 t f
+3503 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 15:46:53.783+08 2019-02-25 15:46:53.783+08 d87ea357-e29f-4926-8589-a3e8d7f38ca2 2 t f
+3504 physicalvalue 应力 Output \N 4 0.2 0 MPa 2019-02-25 15:46:53.787+08 2019-02-25 15:46:53.787+08 d87ea357-e29f-4926-8589-a3e8d7f38ca2 2 t f
+3505 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 15:46:53.79+08 2019-02-25 15:46:53.79+08 d87ea357-e29f-4926-8589-a3e8d7f38ca2 2 t f
+3506 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:46:53.8+08 2019-02-25 15:46:53.8+08 8b2b42d5-d6c3-4b76-ba91-d422163d96b6 2 t f
+3507 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 15:46:53.804+08 2019-02-25 15:46:53.804+08 8b2b42d5-d6c3-4b76-ba91-d422163d96b6 2 t f
+3508 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 15:46:53.807+08 2019-02-25 15:46:53.807+08 8b2b42d5-d6c3-4b76-ba91-d422163d96b6 2 t f
+3509 physicalvalue 应力 Output \N 4 0.2 0 MPa 2019-02-25 15:46:53.81+08 2019-02-25 15:46:53.81+08 8b2b42d5-d6c3-4b76-ba91-d422163d96b6 2 t f
+3510 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 15:46:53.831+08 2019-02-25 15:46:53.831+08 88b4c158-2959-46c0-950e-aa1f77962dbc 2 t f
+3511 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-02-25 15:46:53.837+08 2019-02-25 15:46:53.837+08 88b4c158-2959-46c0-950e-aa1f77962dbc 2 t f
+3512 physicalvalue 应力 Output \N \N \N 4 0.2 0 MPa 2019-02-25 15:46:53.84+08 2019-02-25 15:46:53.84+08 88b4c158-2959-46c0-950e-aa1f77962dbc 2 t f
+3513 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:46:53.843+08 2019-02-25 15:46:53.843+08 88b4c158-2959-46c0-950e-aa1f77962dbc 2 t f
+3514 am 幅值 Output \N 3 \N \N mv 2019-02-25 15:47:53.722+08 2019-02-25 15:47:53.722+08 87e561ee-2bde-476f-9d3c-193c5be9f692 2 t f
+3515 physicalvalue 荷载力 Output \N 4 160 -160 kN 正值是张拉力,负值是承压力 2019-02-25 15:47:53.729+08 2019-02-25 15:47:53.729+08 87e561ee-2bde-476f-9d3c-193c5be9f692 2 t f
+3516 frequency 频率 Output \N 3 \N \N Hz 2019-02-25 15:47:53.734+08 2019-02-25 15:47:53.734+08 87e561ee-2bde-476f-9d3c-193c5be9f692 2 t f
+3517 temperature 温度 Output \N 2 \N \N ℃ 2019-02-25 15:47:53.74+08 2019-02-25 15:47:53.74+08 87e561ee-2bde-476f-9d3c-193c5be9f692 2 t f
+3518 physicalvalue 荷载力 Output \N \N \N 4 160 -160 KN 2019-02-25 15:47:53.753+08 2019-02-25 15:47:53.753+08 f4d6d7aa-f0b7-4b93-b291-5fb8305a4318 2 t f
+3519 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 15:47:53.757+08 2019-02-25 15:47:53.757+08 f4d6d7aa-f0b7-4b93-b291-5fb8305a4318 2 t f
+3520 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:47:53.762+08 2019-02-25 15:47:53.762+08 f4d6d7aa-f0b7-4b93-b291-5fb8305a4318 2 t f
+3521 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 15:47:53.766+08 2019-02-25 15:47:53.766+08 f4d6d7aa-f0b7-4b93-b291-5fb8305a4318 2 t f
+3522 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:51:46.88+08 2019-02-25 15:51:46.88+08 1c56bfde-5866-450a-9682-65dd34bc3296 2 t f
+3523 temperature 温度 Output \N \N \N \N ℃ 2019-02-25 15:51:46.887+08 2019-02-25 15:51:46.887+08 1c56bfde-5866-450a-9682-65dd34bc3296 2 t f
+3524 physicalvalue 荷载力 Output \N 4 136 -136 kN 正值是张拉力,负值是承压力 2019-02-25 15:51:46.893+08 2019-02-25 15:51:46.893+08 1c56bfde-5866-450a-9682-65dd34bc3296 2 t f
+3525 frequency 频率 Output \N \N \N \N \N \N Hz 2019-02-25 15:51:46.9+08 2019-02-25 15:51:46.9+08 1c56bfde-5866-450a-9682-65dd34bc3296 2 t f
+3526 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-25 15:51:46.913+08 2019-02-25 15:51:46.913+08 7533c2be-930a-4296-bdea-f4093aabfeb1 2 t f
+3527 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-02-25 15:51:46.918+08 2019-02-25 15:51:46.918+08 7533c2be-930a-4296-bdea-f4093aabfeb1 2 t f
+3528 am 幅值 Output \N \N \N 3 \N \N mv 2019-02-25 15:51:46.923+08 2019-02-25 15:51:46.923+08 7533c2be-930a-4296-bdea-f4093aabfeb1 2 t f
+3529 physicalvalue 荷载力 Output \N 4 136 -136 KN 正值是张拉力,负值是承压力 2019-02-25 15:51:46.928+08 2019-02-25 15:51:46.928+08 7533c2be-930a-4296-bdea-f4093aabfeb1 2 t f
+3534 physicalvalue 速度 Output \N \N \N \N \N \N mm/s 2019-02-25 16:03:31.505+08 2019-02-25 16:03:31.505+08 9a7d0b50-af38-4c47-b314-4dbca09f5ad2 5 t f
+3535 k 转换系数 Variable \N 1 16 9999999 -9999999 \N 2019-02-25 16:03:31.514+08 2019-02-25 16:03:31.514+08 9a7d0b50-af38-4c47-b314-4dbca09f5ad2 2 t f
+3536 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2019-02-25 16:10:34.024+08 2019-02-25 16:10:34.024+08 e78b12fc-fda1-4ce1-81a7-9e63695906ec 5 t f
+3537 angley Y轴角度 Output \N 2 30 -30 ° 2019-02-25 17:37:04.25+08 2019-02-25 17:37:04.25+08 ba31efb5-9309-493e-a3b6-e161c92e9dfa 2 t f
+3538 temperature 温度 Output \N 2 70 -25 ℃ 2019-02-25 17:37:04.258+08 2019-02-25 17:37:04.258+08 ba31efb5-9309-493e-a3b6-e161c92e9dfa 2 t f
+3539 anglex X轴角度 Output \N 2 30 -30 ° 2019-02-25 17:37:04.265+08 2019-02-25 17:37:04.265+08 ba31efb5-9309-493e-a3b6-e161c92e9dfa 2 t f
+3540 temperature 温度 Output \N 2 70 -25 ℃ 2019-02-25 17:37:04.28+08 2019-02-25 17:37:04.28+08 87fb5477-8056-44e6-b0a0-5cb1e55703d8 2 t f
+3541 angley Y方向角度 Output \N 4 30 -30 ° 2019-02-25 17:37:04.285+08 2019-02-25 17:37:04.285+08 87fb5477-8056-44e6-b0a0-5cb1e55703d8 2 t f
+3542 anglex X方向角度 Output \N 4 30 -30 ° 2019-02-25 17:37:04.291+08 2019-02-25 17:37:04.291+08 87fb5477-8056-44e6-b0a0-5cb1e55703d8 2 t f
+3543 temperature 温度 Output \N \N \N 2 70 -25 ℃ 2019-02-25 17:37:04.306+08 2019-02-25 17:37:04.306+08 0593d534-af19-4662-bf37-b3393cd7d706 2 t f
+3544 angley Y方向角度 Output \N \N \N 4 30 -30 ° 2019-02-25 17:37:04.311+08 2019-02-25 17:37:04.311+08 0593d534-af19-4662-bf37-b3393cd7d706 2 t f
+3545 anglex X方向角度 Output \N \N \N 4 30 -30 ° 2019-02-25 17:37:04.316+08 2019-02-25 17:37:04.316+08 0593d534-af19-4662-bf37-b3393cd7d706 2 t f
+3546 temperature 温度 Output \N 2 70 -25 ℃ 2019-02-25 17:37:04.328+08 2019-02-25 17:37:04.328+08 7fe724a3-9e75-4cdf-94e3-bdd7451ff05c 2 t f
+3547 angley Y方向角度 Output \N 4 30 -30 ° 2019-02-25 17:37:04.334+08 2019-02-25 17:37:04.334+08 7fe724a3-9e75-4cdf-94e3-bdd7451ff05c 2 t f
+3548 anglex X方向角度 Output \N \N \N 4 30 -30 ° 2019-02-25 17:37:04.338+08 2019-02-25 17:37:04.338+08 7fe724a3-9e75-4cdf-94e3-bdd7451ff05c 2 t f
+3549 temperature 温度 Output \N 2 70 -25 ℃ 2019-02-25 17:37:56.409+08 2019-02-25 17:37:56.409+08 6ed5b377-588a-4ba0-bbd8-f528726aa520 2 t f
+3550 anglex X轴角度 Output \N 2 30 -30 ° 2019-02-25 17:37:56.417+08 2019-02-25 17:37:56.417+08 6ed5b377-588a-4ba0-bbd8-f528726aa520 2 t f
+3551 angley Y轴角度 Output \N 2 30 -30 ° 2019-02-25 17:37:56.424+08 2019-02-25 17:37:56.424+08 6ed5b377-588a-4ba0-bbd8-f528726aa520 2 t f
+3552 temperature 温度 Output \N 3 120 -30 ℃ 2019-02-25 17:37:56.44+08 2019-02-25 17:37:56.44+08 fdd035c2-82b6-4d53-b138-ddb5ff38be70 2 t f
+3553 anglex X方向角度 Output \N 4 30 -30 ° 2019-02-25 17:37:56.446+08 2019-02-25 17:37:56.446+08 fdd035c2-82b6-4d53-b138-ddb5ff38be70 2 t f
+3554 angley Y方向角度 Output \N 4 30 -30 ° 2019-02-25 17:37:56.451+08 2019-02-25 17:37:56.451+08 fdd035c2-82b6-4d53-b138-ddb5ff38be70 2 t f
+3555 angley Y方向角度 Output \N \N \N 4 30 -30 ° 2019-02-25 17:37:56.467+08 2019-02-25 17:37:56.467+08 3b999acc-dc02-4c57-ba1b-2bdd8d971f72 2 t f
+3556 temperature 温度 Output \N \N \N \N 70 -25 ℃ 2019-02-25 17:37:56.474+08 2019-02-25 17:37:56.474+08 3b999acc-dc02-4c57-ba1b-2bdd8d971f72 2 t f
+3557 anglex X方向角度 Output \N \N \N 4 30 -30 ° 2019-02-25 17:37:56.479+08 2019-02-25 17:37:56.479+08 3b999acc-dc02-4c57-ba1b-2bdd8d971f72 2 t f
+3558 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-26 16:29:15.928+08 2019-02-26 16:29:15.928+08 c38c3226-0d4b-4f1e-ada0-0ba10c51d5e1 2 t f
+3559 temperature 温度 Output \N 3 90 -30 ℃ 2019-02-26 16:29:15.935+08 2019-02-26 16:29:15.935+08 c38c3226-0d4b-4f1e-ada0-0ba10c51d5e1 2 t f
+3561 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-26 16:30:15.684+08 2019-02-26 16:30:15.684+08 6b2d0d75-954d-476d-a920-83a0439a898b 2 t f
+3562 temperature 温度 Output \N 3 90 -30 ℃ 2019-02-26 16:30:15.695+08 2019-02-26 16:30:15.695+08 6b2d0d75-954d-476d-a920-83a0439a898b 2 t f
+3560 physicalvalue 压力 Output \N 3 6.4 -6.4 MPa 2019-02-26 16:29:15.941+08 2019-02-26 16:36:43.669+08 c38c3226-0d4b-4f1e-ada0-0ba10c51d5e1 2 t f
+3563 physicalvalue 压力 Output \N 3 6.4 -6.4 MPa 2019-02-26 16:30:15.701+08 2019-02-26 16:37:05.459+08 6b2d0d75-954d-476d-a920-83a0439a898b 2 t f
+3564 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-02-26 16:39:23.43+08 2019-02-26 16:39:23.43+08 a945f27e-4486-498d-aa7b-2226787e0a8c 2 t f
+3565 temperature 温度 Output \N 3 60 -25 ℃ 2019-02-26 16:39:23.438+08 2019-02-26 16:39:23.438+08 a945f27e-4486-498d-aa7b-2226787e0a8c 2 t f
+3566 physicalvalue 位移 Output \N 3 mm 2019-02-26 16:39:23.444+08 2019-02-26 16:46:12.173+08 a945f27e-4486-498d-aa7b-2226787e0a8c 2 t f
+3568 voltage 电压 Output \N \N \N 2 \N \N V 2019-02-26 17:15:57.017+08 2019-02-26 17:15:57.017+08 cf9f22ff-a972-4050-b4be-93cd43ed5463 2 t f
+3567 physicalvalue 角度 Output \N 3 ° 2019-02-26 16:47:57.177+08 2019-02-26 17:16:17.318+08 cf9f22ff-a972-4050-b4be-93cd43ed5463 2 t f
+2373 noise 噪声 Output \N 3 \N \N dB 2018-07-02 11:22:55.416+08 2019-02-28 09:54:52.561+08 23c218cd-7c9e-4ad1-bc78-2132a932fc9c 2 t f
+3569 pressure 压强 Output \N 3 \N \N kPa 2019-03-01 14:44:43.682+08 2019-03-01 14:44:52.123+08 10e4ca9b-2ded-4704-af44-5ed38e7a8254 2 t f
+3570 temperature 温度 Output \N \N \N 2 100 -100 ℃ 2019-03-04 14:55:26.616+08 2019-03-04 14:55:26.616+08 9081728a-4ac0-47d0-bc7d-508451fd55df 2 t f
+3571 voltage 电压 Output \N \N \N 2 \N \N V 2019-03-05 11:00:12.999+08 2019-03-05 11:00:12.999+08 face6568-949b-4dcf-a799-fec9eafe6dd5 2 t f
+3572 voltage 电压 Output \N \N \N 2 \N \N V 2019-03-05 13:25:49.938+08 2019-03-05 13:25:49.938+08 d28c3b83-f55a-4a81-8513-36abc92c3b7b 2 t f
+3573 physicalvalue 湿度 Output \N \N \N 2 100 0 %RH 2019-03-05 13:26:28.558+08 2019-03-05 13:26:28.558+08 d28c3b83-f55a-4a81-8513-36abc92c3b7b 2 t f
+3574 voltage 电压 Output \N \N \N 3 \N \N V 2019-03-05 13:34:14.943+08 2019-03-05 13:34:14.943+08 403c6c8b-f94a-43a2-bbf5-5146ac46c2c0 2 t f
+3575 physicalvalue 风速 Output \N \N \N 2 100 0 m/s 2019-03-05 13:34:49.378+08 2019-03-05 13:34:49.378+08 403c6c8b-f94a-43a2-bbf5-5146ac46c2c0 2 t f
+3576 voltage 电压 Output \N \N \N 3 \N \N V 2019-03-05 13:35:58.019+08 2019-03-05 13:35:58.019+08 bbfe7c35-6457-4e4f-87d0-fec36f73c28b 2 t f
+3577 physicalvalue 风向 Output \N \N \N 2 360 0 ° 2019-03-05 13:36:45.293+08 2019-03-05 13:36:45.293+08 bbfe7c35-6457-4e4f-87d0-fec36f73c28b 2 t f
+3113 physicalvalue 位移 Output \N 3 10000 0 mm 2019-01-07 17:45:50.843+08 2019-03-07 14:01:42.31+08 98c8c785-f229-4409-b2a6-a1e57af72b26 2 t f
+3584 frequency 频率 Output \N \N \N 6 \N \N Hz 2019-03-08 17:18:28.303+08 2019-03-08 17:18:28.303+08 1d7d6e9a-1f9e-4d68-9b49-d09ac6a22064 2 t f
+3585 temp 温度 Output \N \N \N 2 \N \N ℃ 2019-03-08 17:18:53.681+08 2019-03-08 17:18:53.681+08 1d7d6e9a-1f9e-4d68-9b49-d09ac6a22064 2 t f
+3621 temp 温度 Output \N \N \N \N \N \N \N 2019-03-19 15:25:15.755+08 2019-03-19 15:25:15.755+08 43846e9c-36d2-4aad-a9ed-cc837fecec96 2 t f
+3623 Ang_X X角度 Output \N \N \N \N \N \N 2019-03-19 15:25:15.779+08 2019-03-19 15:25:15.779+08 5c3255a3-17a0-4ff5-8704-351d606c322f 2 t f
+3625 Ang_Y Y轴角度 Output \N \N \N \N \N \N 2019-03-19 15:25:15.789+08 2019-03-19 15:25:15.789+08 09b8a9bb-2979-488d-9ada-612e0e3c8104 2 t f
+3590 length 位移 Output \N \N \N 3 \N \N mm 2019-03-11 16:40:00.003+08 2019-03-11 16:40:00.003+08 9081728a-4ac0-47d0-bc7d-508451fd55df 2 t f
+3589 displacement 偏移 Output \N 3 \N \N mm 2019-03-11 16:39:39.515+08 2019-03-11 16:40:37.194+08 9081728a-4ac0-47d0-bc7d-508451fd55df 2 t f
+3594 DI1 1号输入 Output \N \N \N \N \N \N \N 2019-03-14 11:23:53.555+08 2019-03-14 11:23:53.555+08 935629d5-3f9e-4001-8694-cd11f39b6061 1 t f
+3595 DI2 2号输入 Output \N \N \N \N 2019-03-14 11:24:33.303+08 2019-03-14 11:24:33.303+08 935629d5-3f9e-4001-8694-cd11f39b6061 1 t f
+3596 DI3 3号输入 Output \N \N \N \N \N \N 2019-03-14 11:24:51.062+08 2019-03-14 11:24:51.062+08 935629d5-3f9e-4001-8694-cd11f39b6061 1 t f
+3597 DI4 4号输入 Output \N \N \N \N \N \N 2019-03-14 11:25:06.194+08 2019-03-14 11:25:06.194+08 935629d5-3f9e-4001-8694-cd11f39b6061 1 t f
+3598 DI5 5号输入 Output \N \N \N \N \N \N 2019-03-14 11:25:25.26+08 2019-03-14 11:25:25.26+08 935629d5-3f9e-4001-8694-cd11f39b6061 1 t f
+3599 DI6 6号输入 Output \N \N \N \N \N \N 2019-03-14 11:25:41.411+08 2019-03-14 11:25:41.411+08 935629d5-3f9e-4001-8694-cd11f39b6061 1 t f
+3600 DI7 7号输入 Output \N \N \N \N \N \N 2019-03-14 11:25:56.216+08 2019-03-14 11:25:56.216+08 935629d5-3f9e-4001-8694-cd11f39b6061 1 t f
+3601 DI8 8号输入 Output \N \N \N \N \N \N 2019-03-14 11:26:12.481+08 2019-03-14 11:26:12.481+08 935629d5-3f9e-4001-8694-cd11f39b6061 1 t f
+3602 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-03-15 14:35:35.873+08 2019-03-15 14:35:35.873+08 d4af9993-5dc1-4f66-bc37-fd3ab9458c18 2 t f
+3603 physicalvalue 应变 Output \N \N \N 3 \N \N με 2019-03-15 14:35:35.879+08 2019-03-15 14:35:35.879+08 d4af9993-5dc1-4f66-bc37-fd3ab9458c18 2 t f
+3627 length 液位 Output \N \N \N 4 19999 -9999 mm 2019-03-20 15:26:27.81+08 2019-03-20 15:26:27.81+08 65be7317-93f4-4ae2-b211-e72d15a8cdb7 2 t f
+3604 physicalvalue 沉降 Output \N 2 \N \N mm 2019-03-15 14:36:32.768+08 2019-03-15 14:41:26.24+08 2bf1019d-5976-4ecf-9970-773d334f184d 2 t f
+3605 humidity 湿度 Output \N \N \N 2 100 0 %RH 2019-03-15 16:36:54.593+08 2019-03-15 16:36:54.593+08 895b9731-8518-47fc-b126-37124415845f 2 t f
+3606 temperature 温度 Output \N \N \N 2 120 -40 ℃ 2019-03-15 16:37:23.683+08 2019-03-15 16:37:23.683+08 895b9731-8518-47fc-b126-37124415845f 2 t f
+3607 temperature 温度 Output \N 2 70 -25 ℃ 2019-03-15 16:40:54.151+08 2019-03-15 16:41:08.347+08 5a900cd1-fd3e-439c-b765-9829c9a61d32 2 t f
+3629 physicalvalue 应变 Output \N \N \N 3 \N \N με 2019-03-25 11:29:00.587+08 2019-03-25 11:29:00.587+08 b131fb3f-83d4-4855-9b8c-419201f620ac 2 t f
+3608 anglex X轴角度 Output \N 2 30 -30 ° 2019-03-15 16:41:49.19+08 2019-03-15 16:42:08.786+08 5a900cd1-fd3e-439c-b765-9829c9a61d32 2 t f
+3609 angley Y轴角度 Output \N \N \N 2 30 -30 ° 2019-03-15 16:42:33.741+08 2019-03-15 16:42:33.741+08 5a900cd1-fd3e-439c-b765-9829c9a61d32 2 t f
+3610 anglex X轴角度 Output \N \N \N 2 30 -30 ° 2019-03-15 16:44:29.662+08 2019-03-15 16:44:29.662+08 46d29a93-ef1e-4724-a19b-8693518dfc89 2 t f
+3611 angley Y轴角度 Output \N \N \N 2 30 -30 ° 2019-03-15 16:45:07.882+08 2019-03-15 16:45:07.882+08 46d29a93-ef1e-4724-a19b-8693518dfc89 2 t f
+3612 temperature 温度 Output \N \N \N 2 70 -25 ℃ 2019-03-15 16:45:43.507+08 2019-03-15 16:45:43.507+08 46d29a93-ef1e-4724-a19b-8693518dfc89 2 t f
+3613 physicalvalue 加速度 Output \N \N \N \N \N \N \N 2019-03-15 17:01:09.262+08 2019-03-15 17:01:09.262+08 dd73a8bf-daac-40fc-82c3-bb5caad67d03 5 t f
+3615 temp 温度 Output \N \N \N \N \N \N \N 2019-03-19 15:25:06.986+08 2019-03-19 15:25:06.986+08 f331e32f-da35-4df4-80fe-50f681800a26 2 t f
+3617 Ang_X X角度 Output \N \N \N \N \N \N 2019-03-19 15:25:07.071+08 2019-03-19 15:25:07.071+08 856b0c3e-b6db-4332-93b2-88d4bc0e019f 2 t f
+3619 Ang_Y Y轴角度 Output \N \N \N \N \N \N 2019-03-19 15:25:07.086+08 2019-03-19 15:25:07.086+08 dd63a0aa-71f9-4a32-9b10-0cce05dfc818 2 t f
+3631 physicalvalue 温度 Output \N \N \N 2 \N \N ℃ 2019-03-25 11:30:26.431+08 2019-03-25 11:30:26.431+08 293fd074-905f-4d2a-94d2-a28d4b06397c 2 t f
+3654 physicalvalue 压力 Output \N \N \N 3 \N \N Kpa 2019-03-27 09:53:54.827+08 2019-03-27 09:53:54.827+08 77edb521-5462-437e-acdb-8ca54f858468 2 t f
+3630 wavelength 波长 Output \N 3 \N \N nm 2019-03-25 11:30:03.004+08 2019-04-09 10:21:31.17+08 293fd074-905f-4d2a-94d2-a28d4b06397c 2 t f
+3591 voc 挥发有机物 Output \N 3 \N \N mg/m3 2019-03-12 09:50:21.495+08 2019-07-08 09:58:42.743+08 2e73374e-14c1-47d9-a0ce-f6d05b317930 2 t f
+3592 h2s 硫化氢 Output \N 3 \N \N mg/m3 2019-03-12 09:50:41.882+08 2019-07-08 09:58:46.711+08 2e73374e-14c1-47d9-a0ce-f6d05b317930 2 t f
+3593 nh3 氨气 Output \N 3 \N mg/m3 2019-03-12 09:51:17.895+08 2019-07-08 09:58:50.478+08 2e73374e-14c1-47d9-a0ce-f6d05b317930 2 t f
+3655 physicalvalue 温度 Output \N \N \N 2 \N \N ℃ 2019-03-27 10:17:52.138+08 2019-03-27 10:17:52.138+08 9842fe65-98a7-4396-9ced-fd75761872b7 2 t f
+3656 physicalvalue 流量 Output \N \N \N 3 \N \N m3/h 2019-03-27 10:20:22.972+08 2019-03-27 10:20:22.972+08 7d31224f-522e-4f6b-89f0-4802c150f9d7 2 t f
+3657 physicalvalue 热量 Output \N \N \N 3 \N \N KW 2019-03-27 10:22:55.383+08 2019-03-27 10:22:55.383+08 bad3bab6-cba0-402c-bcde-5fbffacfa1a8 2 t f
+3658 length 沉降 Output \N 3 \N \N mm 2019-03-27 16:24:55.306+08 2019-03-27 16:25:42.934+08 ad7876d0-0ff2-4d4c-b4be-aaeac8dbbba7 2 t f
+3659 physicalvalue 裂缝 Output \N \N \N 16 \N mm 2019-03-28 17:37:13.279+08 2019-03-28 17:37:13.279+08 1d7d6e9a-1f9e-4d68-9b49-d09ac6a22064 2 t f
+3660 temperature 温度 Output \N \N \N 3 \N \N 2019-03-28 17:50:12.248+08 2019-03-28 17:50:12.248+08 31506359-c8d3-4562-94bb-8a26912ecbdf 2 t f
+3661 temperature 温度 Output \N \N \N 3 9999999 -99999 摄氏度 2019-03-29 17:38:13.887+08 2019-03-29 17:38:13.887+08 fe876237-b07a-4583-befe-1013275d47de 2 t f
+3662 pm10 pm10 Output \N \N \N 3 \N \N ug/m3 2019-03-31 14:18:04.389+08 2019-03-31 14:18:04.389+08 b31b24f1-a018-47bb-9046-c022d26cd6c7 2 t f
+3663 speed 风速 Output \N \N \N 2 \N \N m/s 2019-03-31 14:30:31.294+08 2019-03-31 14:30:31.294+08 b31b24f1-a018-47bb-9046-c022d26cd6c7 2 t f
+3664 direction 风向 Output \N \N \N 2 \N \N ° 2019-03-31 14:31:14.669+08 2019-03-31 14:31:14.669+08 b31b24f1-a018-47bb-9046-c022d26cd6c7 2 t f
+3665 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-03-31 14:31:39.511+08 2019-03-31 14:31:39.511+08 b31b24f1-a018-47bb-9046-c022d26cd6c7 2 t f
+3666 humidity 湿度 Output \N \N \N 2 \N \N % 2019-03-31 14:31:58.367+08 2019-03-31 14:31:58.367+08 b31b24f1-a018-47bb-9046-c022d26cd6c7 2 t f
+3667 noise 噪声 Output \N \N \N 2 \N \N dB 2019-03-31 14:32:22.643+08 2019-03-31 14:32:22.643+08 b31b24f1-a018-47bb-9046-c022d26cd6c7 2 t f
+3668 rain 雨量 Output \N \N \N 2 \N \N mm/min 2019-03-31 14:33:02.917+08 2019-03-31 14:33:02.917+08 b31b24f1-a018-47bb-9046-c022d26cd6c7 2 t f
+3669 pressure 气压 Output \N \N \N 3 \N \N MPa 2019-03-31 14:33:33.248+08 2019-03-31 14:33:33.248+08 b31b24f1-a018-47bb-9046-c022d26cd6c7 2 t f
+3670 pm25 pm2.5 Output \N \N \N 2 \N \N ug/m3 2019-04-01 14:35:48.385+08 2019-04-01 14:35:48.385+08 b31b24f1-a018-47bb-9046-c022d26cd6c7 2 t f
+3671 pressure 压力 Output \N \N \N 1 \N Mpa 2019-04-01 14:38:39.928+08 2019-04-01 14:38:39.928+08 52790293-e9cb-482d-a5a4-a437cfc18b3c 2 t f
+3672 noncurrent 静力水准仪 Output \N 0 bps 2019-04-01 15:38:01.398+08 2019-04-01 15:38:46.529+08 2054c2dc-9c63-4fc3-ab32-be0da644efea 5 t f
+3674 pm25 PM2.5 Output \N \N \N 3 \N \N μg/m³ 2019-04-04 11:32:30.418+08 2019-04-04 11:32:30.418+08 6ae6a109-549d-4832-b00c-b2fdd8a5a165 2 t f
+3675 speed 风速 Output \N \N \N 2 \N \N m/s 2019-04-04 11:32:30.426+08 2019-04-04 11:32:30.426+08 6ae6a109-549d-4832-b00c-b2fdd8a5a165 2 t f
+3676 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-04-04 11:32:30.431+08 2019-04-04 11:32:30.431+08 6ae6a109-549d-4832-b00c-b2fdd8a5a165 2 t f
+3677 humidity 湿度 Output \N 2 \N \N %RH 2019-04-04 11:32:30.435+08 2019-04-04 11:32:30.435+08 6ae6a109-549d-4832-b00c-b2fdd8a5a165 2 t f
+3678 pm10 PM10 Output \N \N \N 3 \N \N pm10 2019-04-04 11:32:30.441+08 2019-04-04 11:32:30.441+08 6ae6a109-549d-4832-b00c-b2fdd8a5a165 2 t f
+3679 noise 噪音 Output \N \N \N 2 \N \N dB 2019-04-04 11:32:30.446+08 2019-04-04 11:32:30.446+08 6ae6a109-549d-4832-b00c-b2fdd8a5a165 2 t f
+3680 direction 风向 Output \N \N \N 2 \N \N ° 2019-04-04 11:32:30.45+08 2019-04-04 11:32:30.45+08 6ae6a109-549d-4832-b00c-b2fdd8a5a165 2 t f
+3681 TSP TSP Output \N 2 \N \N μg/m³ 2019-04-04 11:32:30.455+08 2019-04-04 11:32:30.455+08 6ae6a109-549d-4832-b00c-b2fdd8a5a165 2 t f
+3682 wind 风力 Output \N \N \N 1 \N \N 级 2019-04-04 11:32:30.459+08 2019-04-04 11:32:30.459+08 6ae6a109-549d-4832-b00c-b2fdd8a5a165 2 t f
+3684 northing Y坐标 Output \N 3 \N \N mm 2019-04-08 11:07:38.366+08 2019-04-24 10:10:14.223+08 836707a8-5a16-4674-9609-c13f9f0956ff 2 t f
+3692 jsonfileexts Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2019-04-08 13:57:19.237+08 2019-04-08 13:57:19.237+08 edbb1563-c4ba-4090-9180-17cec3ec3ac3 5 t f
+3628 wavelength 波长 Output \N 3 \N \N nm 2019-03-25 11:28:29.857+08 2019-04-09 10:21:03.484+08 b131fb3f-83d4-4855-9b8c-419201f620ac 2 t f
+3693 rawValue 频率 Output \N 3 \N \N HZ 2019-04-10 10:41:22.847+08 2019-04-10 15:43:42.949+08 5c6b51d6-d002-49af-9496-30fc8976c446 2 t f
+3696 rawValue 频率 Output \N 3 \N \N HZ 2019-04-10 15:48:52.51+08 2019-04-10 15:48:52.51+08 e44e3794-75ca-4e19-b989-396cabdff179 2 t f
+3698 rawValue 频率 Output \N 3 \N \N HZ 2019-04-10 15:48:53.429+08 2019-04-10 15:48:53.429+08 8103cab6-bf6c-489b-af09-1ba2a278042b 2 t f
+3695 physicalvalue 轴力 Output \N 3 \N \N KN 2019-04-10 15:48:52.504+08 2019-04-10 15:49:38.448+08 e44e3794-75ca-4e19-b989-396cabdff179 2 t f
+3697 physicalvalue 索力 Output \N 3 \N \N KN 2019-04-10 15:48:53.421+08 2019-04-10 15:49:52.158+08 8103cab6-bf6c-489b-af09-1ba2a278042b 2 t f
+3699 CX_SZ1 CX_SZ1 Variable \N \N \N \N \N \N 2019-04-10 18:28:39.22+08 2019-04-10 18:28:39.22+08 37826374-2db9-4f16-a42d-37ee9f59c3ac 5 t f
+3700 ZX_SZ1 ZX_SZ1 Variable \N \N \N 1 90000000 -900000000 2019-04-10 18:28:39.226+08 2019-04-10 18:28:39.226+08 37826374-2db9-4f16-a42d-37ee9f59c3ac 2 t f
+3685 height Z坐标 Output \N 3 \N \N mm 2019-04-08 11:08:33.815+08 2019-04-24 10:10:17.405+08 836707a8-5a16-4674-9609-c13f9f0956ff 2 t f
+3686 eastingDiff Dx Output \N 3 \N \N mm 2019-04-08 11:09:02.349+08 2019-04-24 10:10:20.373+08 836707a8-5a16-4674-9609-c13f9f0956ff 2 t f
+3687 northingDiff Dy Output \N 3 \N \N mm 2019-04-08 11:11:53.011+08 2019-04-24 10:10:26.885+08 836707a8-5a16-4674-9609-c13f9f0956ff 2 t f
+3688 heightDiff Dz Output \N 3 \N \N mm 2019-04-08 11:12:24.331+08 2019-04-24 10:10:30.389+08 836707a8-5a16-4674-9609-c13f9f0956ff 2 t f
+3683 easting X坐标 Output \N 3 \N \N mm 2019-04-08 11:06:59.469+08 2019-04-24 10:10:08.686+08 836707a8-5a16-4674-9609-c13f9f0956ff 2 t f
+3701 ZX_ZZ1 ZX_ZZ1 Variable \N \N \N 1 90000000 -9000000 2019-04-10 18:28:39.231+08 2019-04-10 18:28:39.231+08 37826374-2db9-4f16-a42d-37ee9f59c3ac 2 t f
+3702 ZX_SZ2 ZX_SZ2 Variable \N \N \N 1 9000000000 -90000000 2019-04-10 18:28:39.236+08 2019-04-10 18:28:39.236+08 37826374-2db9-4f16-a42d-37ee9f59c3ac 2 t f
+3703 ZX_ZZ2 ZX_ZZ2 Variable \N \N \N 1 90000000 -9000000 2019-04-10 18:28:39.24+08 2019-04-10 18:28:39.24+08 37826374-2db9-4f16-a42d-37ee9f59c3ac 2 t f
+3704 ZX_SZ3 ZX_SZ3 Variable \N \N \N 1 9000000000 -9000000 2019-04-10 18:28:39.244+08 2019-04-10 18:28:39.244+08 37826374-2db9-4f16-a42d-37ee9f59c3ac 2 t f
+3705 ZX_ZZ3 ZX_ZZ3 Variable \N \N \N 1 9000000000 -900000000 2019-04-10 18:28:39.249+08 2019-04-10 18:28:39.249+08 37826374-2db9-4f16-a42d-37ee9f59c3ac 2 t f
+3706 ZX_SZ4 ZX_SZ4 Variable \N \N \N 1 90000000000 -900000000 2019-04-10 18:28:39.254+08 2019-04-10 18:28:39.254+08 37826374-2db9-4f16-a42d-37ee9f59c3ac 2 t f
+3707 ZX_ZZ4 ZX_ZZ4 Variable \N \N \N 1 9000000000000 -900000000000 2019-04-10 18:28:39.258+08 2019-04-10 18:28:39.258+08 37826374-2db9-4f16-a42d-37ee9f59c3ac 2 t f
+3708 arch 仰拱安全步距 Output \N \N \N 2 99999 0 cm 2019-04-16 09:09:09.729+08 2019-04-16 09:09:09.729+08 73b4f51d-68e2-4fb4-a8a9-162f643d1983 2 t f
+3709 tunnelface 掌子面安全步距 Output \N \N \N 2 99999 0 cm 2019-04-16 09:09:09.738+08 2019-04-16 09:09:09.738+08 73b4f51d-68e2-4fb4-a8a9-162f643d1983 2 t f
+3710 length 测量距离 Output \N \N \N 2 9999 0 mm 2019-04-16 09:11:47.996+08 2019-04-16 09:11:47.996+08 7cc4cc34-60a4-4ff0-a85e-015a11eadeac 2 t f
+3711 length 测量距离 Output \N \N \N 2 99999 0 mm 2019-04-16 09:50:05.911+08 2019-04-16 09:50:05.911+08 cb1ad06a-023a-46da-a674-80b18513c1e4 2 t f
+3712 arch 仰拱安全步距 Output \N \N \N 2 99999 0 cm 2019-04-16 09:52:28.877+08 2019-04-16 09:52:28.877+08 98161e10-b23b-4448-a389-0bd8a08fec4f 2 t f
+3713 tunnelface 掌子面安全步距 Output \N \N \N 2 99999 0 cm 2019-04-16 09:52:28.885+08 2019-04-16 09:52:28.885+08 98161e10-b23b-4448-a389-0bd8a08fec4f 2 t f
+3714 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-04-16 16:01:34.222+08 2019-04-16 16:01:34.222+08 0a9589f0-6b8d-474c-b07d-8c6da527a61c 2 t f
+3716 NH3 NH3 Output \N \N \N 2 9999 0 ppm 2019-04-18 11:02:51.794+08 2019-04-18 11:02:51.794+08 7fa0305f-807a-4541-8615-4ad975b73518 2 t f
+3718 humidy 湿度 Output \N \N \N 2 100 0 % 2019-04-18 11:06:31.804+08 2019-04-18 11:06:31.804+08 d2add1b3-b21c-420b-82a4-e0c55ee3a019 2 t f
+3719 pressure 压强 Output \N \N \N 4 2 0 MPa 2019-04-18 13:57:28.317+08 2019-04-18 13:57:28.317+08 fddf24e3-0068-448a-aee2-4b35af2a7e32 2 t f
+3720 pressure 压强 Output \N \N \N 5 0.5 0 MPa 2019-04-18 13:58:15.168+08 2019-04-18 13:58:15.168+08 1e436fa9-3d57-441a-b498-4dc107684e1a 2 t f
+3721 pressure 压强 Output \N \N \N 5 5 0 MPa 2019-04-18 13:58:54.322+08 2019-04-18 13:58:54.322+08 0050e0d2-2d7d-4e7b-8871-1b0196ce7094 2 t f
+3722 pressure 压强 Output \N \N \N 4 1000 0 KPa 2019-04-18 13:59:39.954+08 2019-04-18 13:59:39.954+08 6ea6d122-5da2-41bd-a362-912f212d294b 2 t f
+3673 physicalvalue 数据 Output \N 3 \N \N KN 2019-04-03 16:54:14.599+08 2019-04-18 14:26:57.402+08 5c6b51d6-d002-49af-9496-30fc8976c446 2 t f
+3728 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2019-04-18 16:04:25.319+08 2019-04-18 16:04:25.319+08 d4965875-354b-4294-87f4-c4ba9f9260ab 5 t f
+3729 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2019-04-18 16:07:19.944+08 2019-04-18 16:07:19.944+08 51de3079-41a4-4b3b-9e3b-4d9bfb13fef8 5 t f
+3717 Temp 温度 Output \N 2 100 -40 ℃ 2019-04-18 11:06:31.797+08 2019-04-18 16:48:40.515+08 d2add1b3-b21c-420b-82a4-e0c55ee3a019 2 t f
+3730 am 幅值 Output \N \N \N 3 \N \N mv 2019-04-18 17:58:14.563+08 2019-04-18 17:58:14.563+08 c437942e-6dd8-468c-81d0-ffed012878bd 2 t f
+3731 physicalvalue 水压 Output \N \N \N 4 \N \N MPa 2019-04-18 17:58:14.574+08 2019-04-18 17:58:14.574+08 c437942e-6dd8-468c-81d0-ffed012878bd 2 t f
+3732 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-04-18 17:58:14.58+08 2019-04-18 17:58:14.58+08 c437942e-6dd8-468c-81d0-ffed012878bd 2 t f
+3733 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-04-18 17:58:14.585+08 2019-04-18 17:58:14.585+08 c437942e-6dd8-468c-81d0-ffed012878bd 2 t f
+3734 waterlevel 水位 Output \N \N \N 5 \N \N m 2019-04-18 17:58:14.589+08 2019-04-18 17:58:14.589+08 c437942e-6dd8-468c-81d0-ffed012878bd 2 t f
+3735 pressure 压强 Output \N \N \N 4 \N \N KPa 2019-04-18 18:47:42.22+08 2019-04-18 18:47:42.22+08 a4c5312d-d964-4c7e-9d81-79f265acfc59 2 t f
+3737 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-04-19 10:16:21.6+08 2019-04-19 10:16:21.6+08 d0eba673-a21f-47b7-8c47-0368788a1b62 2 t f
+3739 temperature 温度 Output \N \N \N \N \N \N 摄氏度 2019-04-19 11:24:06.476+08 2019-04-19 11:24:06.476+08 aaec2c04-55f4-4c0a-b5ba-004a8b91593a 5 t f
+3727 frequency 频率 Output \N 0 Hz 2019-04-18 15:29:50.025+08 2019-04-19 11:24:31.242+08 aaec2c04-55f4-4c0a-b5ba-004a8b91593a 5 t f
+3744 frequency 振弦 Variable \N \N 1 \N \N \N Hz 2019-04-19 16:42:52.619+08 2019-04-19 16:42:52.619+08 9ec28096-280e-4a66-b130-37a5ebc05047 5 t f
+3745 value 位移 Output \N 2 1000 0 mm 2019-04-22 13:13:08.908+08 2019-04-22 13:14:49.523+08 70909da5-46ce-4458-8129-4c34c077b2be 2 t f
+3746 hex 数据 Output \N \N \N \N \N \N \N 2019-04-22 14:09:29.044+08 2019-04-22 14:09:29.044+08 79df1a9f-c843-4cdd-806d-4492fdeac2c2 5 t f
+3747 value 沉降 Output \N 2 2500 0 mm 2019-04-23 14:22:13.667+08 2019-04-23 14:22:50.371+08 2c644dde-9a89-4c57-b9c2-07fae59e460d 2 t f
+3754 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2019-04-23 16:14:06.094+08 2019-04-23 16:14:06.094+08 897daa06-8487-49b5-b276-f688a5c99378 5 t f
+3758 physicalvalue 裂缝 Output \N \N \N 4 \N \N mm 2019-04-24 09:19:43.284+08 2019-04-24 09:19:43.284+08 dfaa0aee-75a3-4f5f-a09c-c278b9e655ad 2 t f
+3759 physicalvalue 温度 Output \N \N \N 4 \N \N ℃ 2019-04-24 09:22:29.038+08 2019-04-24 09:22:29.038+08 5bc34c90-3031-4ce7-bb12-eac34d220e11 2 t f
+3753 physicalvalue 疲劳 Output \N 4 \N \N με 2019-04-23 15:48:26.281+08 2019-04-24 10:05:43.775+08 d73e0c65-a8ab-492b-b6c1-1039f4630424 2 t f
+3748 physicalvalue 应变 Output \N 4 \N \N με 2019-04-23 15:16:39.3+08 2019-04-24 10:06:11.821+08 e3c19ece-2c10-438e-8bd1-005169fa2da8 2 t f
+3760 属性A \N Constant \N \N true \N \N \N \N 2019-04-26 13:07:35.559+08 2019-04-26 13:07:35.559+08 354393d4-5f59-436d-96a6-e7e3fb28a196 3 t f
+3762 yangle y轴 Output \N 0 ° 2019-04-26 15:57:34.696+08 2019-04-26 16:06:19.951+08 3e5c37a1-c1a6-4bd4-b3d9-e95a3236e873 5 t f
+3181 latitude 纬度 Output \N 6 \N \N ° 2019-01-25 16:36:16.164+08 2019-06-18 11:05:47.838+08 62e44371-9cc5-43c5-b9b9-e5fbdc63dda3 2 t f
+3736 ssagee 水位 Output \N 5 \N \N m 2019-04-18 18:47:42.228+08 2019-10-31 11:48:36.916+08 a4c5312d-d964-4c7e-9d81-79f265acfc59 2 t f
+3715 pressure 压力 Output \N 3 20 -20 Kpa 2019-04-16 16:01:34.23+08 2020-04-13 13:23:20.076+08 0a9589f0-6b8d-474c-b07d-8c6da527a61c 2 t f
+3761 xangle x轴 Output \N 0 ° 2019-04-26 15:57:34.689+08 2019-04-26 16:06:25.842+08 3e5c37a1-c1a6-4bd4-b3d9-e95a3236e873 5 t f
+3798 voltage \N Output \N 1 \N \N V 2019-04-28 17:36:59.015+08 2019-04-28 17:37:21.957+08 1a9ae7b1-f3ca-46f5-82eb-a774d07949cc 2 t f
+3802 energy kWh Output \N 3 \N \N kWh 2019-04-28 17:36:59.042+08 2019-04-28 19:49:04.943+08 1a9ae7b1-f3ca-46f5-82eb-a774d07949cc 2 t f
+3771 physicalvalue 应力 Output \N 2 \N \N KN 2019-04-28 11:50:35.495+08 2019-04-28 11:50:57.083+08 e5a6d57f-122f-4dac-994d-1a83a93b2440 2 t f
+3772 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-04-28 11:56:52.087+08 2019-04-28 11:56:52.087+08 e5a6d57f-122f-4dac-994d-1a83a93b2440 2 t f
+3773 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-04-28 11:57:28.878+08 2019-04-28 11:57:28.878+08 e5a6d57f-122f-4dac-994d-1a83a93b2440 2 t f
+3774 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-04-28 11:58:16.292+08 2019-04-28 11:58:16.292+08 cc7ab8cd-332e-48d6-9a20-2d44055c2e61 2 t f
+3775 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-04-28 11:58:44.965+08 2019-04-28 11:58:44.965+08 cc7ab8cd-332e-48d6-9a20-2d44055c2e61 2 t f
+3776 physicalvalue 应变 Output \N \N \N 2 \N \N με 2019-04-28 11:59:13.08+08 2019-04-28 11:59:13.08+08 cc7ab8cd-332e-48d6-9a20-2d44055c2e61 2 t f
+3777 physicalvalue 应变 Output \N \N \N 3 \N \N με 2019-04-28 12:00:16.773+08 2019-04-28 12:00:16.773+08 55d1faba-c22b-4730-a51c-1979541f342b 2 t f
+3778 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-04-28 12:00:50.125+08 2019-04-28 12:00:50.125+08 55d1faba-c22b-4730-a51c-1979541f342b 2 t f
+3779 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-04-28 12:01:13.35+08 2019-04-28 12:01:13.35+08 55d1faba-c22b-4730-a51c-1979541f342b 2 t f
+3780 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-04-28 12:01:41.779+08 2019-04-28 12:01:41.779+08 ff05da01-ca5c-4dbb-afb0-67ec5f513f40 2 t f
+3781 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-04-28 12:02:10.784+08 2019-04-28 12:02:10.784+08 ff05da01-ca5c-4dbb-afb0-67ec5f513f40 2 t f
+3782 physicalvalue 应变 Output \N \N \N 3 \N \N με 2019-04-28 13:02:59.073+08 2019-04-28 13:02:59.073+08 ff05da01-ca5c-4dbb-afb0-67ec5f513f40 2 t f
+3783 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-04-28 14:30:59.773+08 2019-04-28 14:30:59.773+08 bca45090-3023-4d55-85e0-8c5216171df5 2 t f
+3784 temperatur 温度 Output \N \N \N 3 \N \N ℃ 2019-04-28 14:31:23.126+08 2019-04-28 14:31:23.126+08 bca45090-3023-4d55-85e0-8c5216171df5 2 t f
+3785 physicalvalue 应力 Output \N \N \N 3 \N \N MPa 2019-04-28 14:32:55.959+08 2019-04-28 14:32:55.959+08 bca45090-3023-4d55-85e0-8c5216171df5 2 t f
+3801 power Output \N \N \N 1 \N \N W 2019-04-28 17:36:59.034+08 2019-04-28 17:36:59.034+08 1a9ae7b1-f3ca-46f5-82eb-a774d07949cc 2 t f
+3799 current Output \N 3 \N \N A 2019-04-28 17:36:59.023+08 2019-04-28 17:37:13.267+08 1a9ae7b1-f3ca-46f5-82eb-a774d07949cc 2 t f
+3834 rawValue 频率 Output \N 6 99999 -99999 Hz 2019-05-10 16:07:13.634+08 2019-05-29 17:47:37.271+08 0c37d684-9050-4e23-9121-2749044fb378 2 t f
+3800 frequency Tag \N 0 2019-04-28 17:36:59.029+08 2019-05-06 09:17:48.2+08 1a9ae7b1-f3ca-46f5-82eb-a774d07949cc 2 t f
+3807 outflow 出店流量 Output \N \N \N \N 99999 0 2019-04-30 09:49:47.694+08 2019-04-30 09:49:47.694+08 a18f5309-f499-412b-9cd7-b2a84c3302fa 1 t f
+3806 inflow 进店流量 Output \N 0 99999 0 \N 2019-04-30 09:49:47.684+08 2019-05-06 16:28:08.464+08 a18f5309-f499-412b-9cd7-b2a84c3302fa 1 t f
+3815 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-05-07 16:52:55.155+08 2019-05-07 16:52:55.155+08 df20f27f-9f90-4d8f-b4bb-db033628f414 2 t f
+3816 resistance 电阻 Output \N \N \N 3 \N \N Ω 2019-05-07 16:54:18.772+08 2019-05-07 16:54:18.772+08 df20f27f-9f90-4d8f-b4bb-db033628f414 2 t f
+3818 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-05-07 17:32:23.386+08 2019-05-07 17:32:23.386+08 df20f27f-9f90-4d8f-b4bb-db033628f414 2 t f
+3821 temperature Temperature Output \N 1 125 -50 ºC 2019-05-08 17:53:13.48+08 2019-05-08 22:17:35.554+08 1725bd62-6500-4740-a03e-78fd4a2f4a53 2 t f
+3822 temp_1 Temperature Output \N 1 125 -50 ºC 2019-05-08 18:17:31.603+08 2019-05-19 01:00:48.58+08 639bcad3-50f1-4b66-9f50-acbb916f7d8e 2 t f
+3803 factor Factor Output \N 0 2019-04-28 17:36:59.046+08 2019-05-22 15:23:44.252+08 1a9ae7b1-f3ca-46f5-82eb-a774d07949cc 2 t f
+3768 physicalvalue 轴力 Output \N 0 KN 2019-04-28 10:50:55.213+08 2019-07-15 09:17:10.94+08 cda9f386-6c1d-4477-91aa-61f2fcbf93ff 2 t f
+3828 length 位移 Output \N 3 \N \N mm 2019-05-09 09:58:07.898+08 2019-05-09 09:58:54.883+08 c05dd524-bff2-460c-b9b3-7fb235b2a7a8 2 t f
+3829 anglex X轴角度 Output \N \N \N 3 \N \N ° 2019-05-09 10:06:14.15+08 2019-05-09 10:06:14.15+08 0c3edb9b-16a6-4fed-b65c-3757a117a3bc 2 t f
+3830 angley Y轴角度 Output \N \N \N 3 \N \N ° 2019-05-09 10:06:14.156+08 2019-05-09 10:06:14.156+08 0c3edb9b-16a6-4fed-b65c-3757a117a3bc 2 t f
+3831 length 位移 Output \N 3 \N \N mm 2019-05-09 17:23:15.222+08 2019-05-09 17:48:57.879+08 a40f85c1-a408-408b-971c-4e1c4e88d703 2 t f
+3770 physicalvalue 土压力 Output \N 2 \N \N kpa 2019-04-28 11:47:33.283+08 2019-09-18 16:54:32.057+08 589695ad-b029-4c5e-9425-4946e80f3fb6 2 t f
+3835 physicalvalue 荷载 Output \N 6 99999 -99999 KN 2019-05-10 16:09:02.006+08 2019-05-10 16:10:24.343+08 0c37d684-9050-4e23-9121-2749044fb378 2 t f
+3836 capacity 含水率 Output \N 2 \N \N % 2019-05-13 11:18:59.502+08 2019-05-13 22:15:09.92+08 7e35a6df-64f0-483a-8582-859548ba7fc1 2 t f
+3823 status_d1 Left Door Output \N 0,1 0 Door1 Status 2019-05-08 18:18:59.531+08 2019-05-22 20:42:22.343+08 fd94be74-66bc-48ba-94d0-008b6d6d5413 4 t f
+3769 physicalvalue 温度 Output \N 2 \N \N ℃ 2019-04-28 11:45:55.218+08 2019-10-09 13:54:18.542+08 833ae7ac-9c57-4cd1-a324-4b49acee1dfe 2 t f
+3884 WeightStatus 载重状态 Output \N \N \N \N \N \N 2019-05-29 15:02:02.76+08 2019-05-29 15:02:02.76+08 aeea3098-6149-4f87-9a9a-474122886ef7 1 t f
+3869 status_d2 Right Door Output \N 0,1 0 2019-05-17 21:25:58.231+08 2019-05-22 20:44:26.63+08 fd94be74-66bc-48ba-94d0-008b6d6d5413 4 t f
+3819 anglex x轴角度 Output \N 3 \N \N ° 2019-05-08 16:28:56.835+08 2019-05-13 14:31:43.046+08 aacdb86a-92cc-47cf-a7e5-b139a96e4fbb 2 t f
+3838 axieTotalBase5 轴距五 Output \N \N \N \N 9999999 -9999999 cm 2019-05-13 16:27:13.652+08 2019-05-13 16:27:13.652+08 7fa7ac4f-f693-4287-a813-9b123e633207 1 t f
+3840 axieRoadway 车道号 Output \N \N \N \N 999999 -999999 2019-05-13 16:27:13.672+08 2019-05-13 16:27:13.672+08 7fa7ac4f-f693-4287-a813-9b123e633207 1 t f
+3842 axieTotalBase3 轴距三 Output \N \N \N \N 99999 -99999 cm 2019-05-13 16:27:13.679+08 2019-05-13 16:27:13.679+08 7fa7ac4f-f693-4287-a813-9b123e633207 1 t f
+3843 axieTotalBase1 轴距一 Output \N \N \N \N 999999 -999999 cm 2019-05-13 16:27:13.683+08 2019-05-13 16:27:13.683+08 7fa7ac4f-f693-4287-a813-9b123e633207 1 t f
+3845 axieTotalBase2 轴距二 Output \N \N \N \N 9999999 -9999999 cm 2019-05-13 16:27:13.691+08 2019-05-13 16:27:13.691+08 7fa7ac4f-f693-4287-a813-9b123e633207 1 t f
+3846 temperature 温度 Output \N \N \N \N 99999 -99999 ℃ 2019-05-13 16:27:13.694+08 2019-05-13 16:27:13.694+08 7fa7ac4f-f693-4287-a813-9b123e633207 1 t f
+3847 Weight 总重量 Output \N \N \N \N 99999999999 -99999999999 kg 2019-05-13 16:27:13.698+08 2019-05-13 16:27:13.698+08 7fa7ac4f-f693-4287-a813-9b123e633207 1 t f
+3848 Time 时间 Output \N \N \N \N \N \N 2019-05-13 16:27:13.702+08 2019-05-13 16:27:13.702+08 7fa7ac4f-f693-4287-a813-9b123e633207 5 t f
+3849 axieTotalBase4 轴距四 Output \N \N \N \N 9999999 -9999999 cm 2019-05-13 16:27:13.705+08 2019-05-13 16:27:13.705+08 7fa7ac4f-f693-4287-a813-9b123e633207 1 t f
+3850 Sequence 序列号 Output \N \N \N \N \N \N 2019-05-13 16:27:13.709+08 2019-05-13 16:27:13.709+08 7fa7ac4f-f693-4287-a813-9b123e633207 5 t f
+3851 Effective 有效值 Output \N \N \N \N \N \N 2019-05-13 16:27:13.712+08 2019-05-13 16:27:13.712+08 7fa7ac4f-f693-4287-a813-9b123e633207 5 t f
+3841 Speed 速度 Output \N 0 99999999 -99999999 km/h 2019-05-13 16:27:13.676+08 2019-05-13 16:47:01.678+08 7fa7ac4f-f693-4287-a813-9b123e633207 1 t f
+3839 shaftnum 轴数量 Output \N 0 9999999 -9999999 2019-05-13 16:27:13.666+08 2019-05-13 16:50:30.282+08 7fa7ac4f-f693-4287-a813-9b123e633207 1 t f
+3844 axieCarModle1rist 车型 Output \N 0 2019-05-13 16:27:13.687+08 2019-05-13 16:52:51.091+08 7fa7ac4f-f693-4287-a813-9b123e633207 5 t f
+3837 temperature 温度 Output \N 3 \N \N ℃ 2019-05-13 11:18:59.508+08 2019-05-13 22:15:17.391+08 7e35a6df-64f0-483a-8582-859548ba7fc1 2 t f
+3852 longitude 经度 Output \N \N \N 8 180 0 ° 2019-05-14 16:57:37.952+08 2019-05-14 16:57:37.952+08 cf8bfa0f-1e08-48ed-9041-3826fd5f5135 2 t f
+3853 latitude 纬度 Output \N \N \N 8 180 0 ° 2019-05-14 16:57:37.957+08 2019-05-14 16:57:37.957+08 cf8bfa0f-1e08-48ed-9041-3826fd5f5135 2 t f
+3854 speed 速度 Output \N \N \N 3 999 0 m/s 2019-05-14 16:57:37.961+08 2019-05-14 16:57:37.961+08 cf8bfa0f-1e08-48ed-9041-3826fd5f5135 2 t f
+3859 level 沉降 Output \N 3 mm 2019-05-15 10:32:01.148+08 2019-05-15 10:32:27.43+08 e35e7bae-3a9e-41bc-b63b-ee32399d64d0 2 t f
+3861 frequency 振弦 Output \N \N \N \N \N \N HZ 2019-05-15 10:48:06.51+08 2019-05-15 10:48:06.51+08 f21dbd7b-867d-4273-8141-7817fa5685d8 5 t f
+3863 capType \N Constant \N \N DOOR \N \N \N \N 2019-05-15 20:15:43.771+08 2019-05-15 20:15:43.771+08 fd94be74-66bc-48ba-94d0-008b6d6d5413 5 t f
+3867 capType Constant \N TEMPERATURE 0 2019-05-15 22:55:03.651+08 2019-05-15 22:59:44.908+08 639bcad3-50f1-4b66-9f50-acbb916f7d8e 5 t f
+3868 physicalvalue 压力 Output \N 0 KN 2019-05-17 15:40:37.789+08 2019-05-17 16:25:49.522+08 f21dbd7b-867d-4273-8141-7817fa5685d8 5 t f
+3885 ObliguityXStatus 倾角X状态 Output \N \N \N \N \N \N 2019-05-29 15:02:22.386+08 2019-05-29 15:02:22.386+08 aeea3098-6149-4f87-9a9a-474122886ef7 1 t f
+3870 111 \N Output \N \N \N \N \N \N \N 2019-05-22 16:00:03.727+08 2019-05-22 16:00:03.727+08 dfb70ff4-6696-4f3c-b709-dfa5ad977714 1 t f
+3871 capType CapType Constant \N ENERGY 0 2019-05-22 16:23:24.664+08 2019-05-22 16:23:31.158+08 1a9ae7b1-f3ca-46f5-82eb-a774d07949cc 5 t f
+3881 WeightPercent 载重百分比 Output \N \N \N 2 \N \N % 2019-05-29 14:57:47.222+08 2019-05-29 14:57:47.222+08 aeea3098-6149-4f87-9a9a-474122886ef7 2 t f
+3882 ObliguityX 倾角X Output \N \N \N 2 \N \N ° 2019-05-29 14:59:30.048+08 2019-05-29 14:59:30.048+08 aeea3098-6149-4f87-9a9a-474122886ef7 2 t f
+3886 ObliguityYStatus 倾角Y状态 Output \N \N \N \N \N \N 2019-05-29 15:02:40.107+08 2019-05-29 15:02:40.107+08 aeea3098-6149-4f87-9a9a-474122886ef7 1 t f
+3879 physicalvalue 温度 Output \N 2 ℃ 2019-05-28 15:02:38.787+08 2019-05-29 15:26:19.497+08 8b850929-a890-4c69-898a-0388eec64db8 2 t f
+3917 frequency 频率 Output \N \N \N 6 99999999 -99999999 Hz 2019-06-05 10:58:32.29+08 2019-06-05 10:58:32.29+08 db0bf17e-625b-4003-8b57-b2db0d5e3ecc 2 t f
+3896 anglex X轴角度 Output \N \N \N 2 \N \N ° 2019-05-30 10:25:08.498+08 2019-05-30 10:25:08.498+08 b1badcbe-62e0-4c45-85e8-8e3d712d3659 2 t f
+3897 angley Y轴角度 Output \N \N \N 2 \N \N ° 2019-05-30 10:25:27.587+08 2019-05-30 10:25:27.587+08 b1badcbe-62e0-4c45-85e8-8e3d712d3659 2 t f
+3898 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-05-30 10:25:49.673+08 2019-05-30 10:25:49.673+08 b1badcbe-62e0-4c45-85e8-8e3d712d3659 2 t f
+3900 angley Y轴角度 Output \N 3 ° 2019-05-30 14:01:24.901+08 2019-05-30 14:01:54.604+08 cb84ad58-6983-40a3-96ad-0f001cccaf96 2 t f
+3903 AlarmType 报警类型 Output \N \N \N \N \N \N \N 2019-05-31 09:39:43.054+08 2019-05-31 09:39:43.054+08 aeea3098-6149-4f87-9a9a-474122886ef7 1 t f
+3899 anglex X轴角度 Output \N 3 ° 2019-05-30 14:00:19.849+08 2019-05-30 14:02:06.78+08 cb84ad58-6983-40a3-96ad-0f001cccaf96 2 t f
+3883 ObliguityY 倾角Y Output \N 2 \N \N ° 2019-05-29 14:59:50.736+08 2019-05-30 15:32:48.656+08 aeea3098-6149-4f87-9a9a-474122886ef7 2 t f
+3901 rawValue 频率 Output \N \N \N 6 99999 -99999 Hz 2019-05-30 15:55:40.192+08 2019-05-30 15:55:40.192+08 39d7c8a8-3ab0-4d56-95b4-3cb6c06cfd9c 2 t f
+3902 physicalvalue 荷载 Output \N \N \N 6 99999 -99999 KN 2019-05-30 15:56:32.89+08 2019-05-30 15:56:32.89+08 39d7c8a8-3ab0-4d56-95b4-3cb6c06cfd9c 2 t f
+3904 AlarmValue 报警值 Output \N \N \N 2 \N \N 2019-05-31 09:40:15.386+08 2019-05-31 09:40:15.386+08 aeea3098-6149-4f87-9a9a-474122886ef7 2 t f
+3905 isOnline 上线 Output \N \N \N \N 1 0 \N 2019-05-31 09:41:44.04+08 2019-05-31 09:41:44.04+08 aeea3098-6149-4f87-9a9a-474122886ef7 1 t f
+3906 isDownline 下线 Output \N \N \N \N 1 0 2019-05-31 09:42:03.338+08 2019-05-31 09:42:03.338+08 aeea3098-6149-4f87-9a9a-474122886ef7 1 t f
+3907 Obliguity 合成倾角 Output \N \N \N 2 \N \N ° 2019-05-31 10:26:03.909+08 2019-05-31 10:26:03.909+08 aeea3098-6149-4f87-9a9a-474122886ef7 2 t f
+3909 rawValue 频率 Output \N \N \N 6 99999 -99999 Hz 2019-05-31 18:04:40.276+08 2019-05-31 18:04:40.276+08 8a945623-1db8-433f-8eb9-062caccb5b89 2 t f
+3910 physicalvalue 荷载 Output \N \N \N 6 99999 -99999 KN 2019-05-31 18:05:26.136+08 2019-05-31 18:05:26.136+08 8a945623-1db8-433f-8eb9-062caccb5b89 2 t f
+3911 temperature 温度 Output \N \N \N 2 99999 -99999 ℃ 2019-06-03 08:33:19.402+08 2019-06-03 08:33:19.402+08 8a945623-1db8-433f-8eb9-062caccb5b89 2 t f
+3887 temperature 温度 Output \N 2 99999 -99999 ℃ 2019-05-29 15:57:45.378+08 2019-06-04 17:33:31.581+08 8f2c15d1-cb4f-45fd-b217-ecbf37787ddc 2 t f
+3888 physicalvalue 应变 Output \N 2 99999 -99999 με 2019-05-29 15:57:45.384+08 2019-06-04 17:34:47.074+08 8f2c15d1-cb4f-45fd-b217-ecbf37787ddc 2 t f
+3889 rawValue 频率 Output \N 2 99999 -99999 HZ 2019-05-29 15:57:45.388+08 2019-06-04 17:35:14.856+08 8f2c15d1-cb4f-45fd-b217-ecbf37787ddc 2 t f
+3880 Weight 载重 Output \N 3 \N \N Kg 2019-05-29 14:57:09.393+08 2019-06-03 09:23:51.779+08 aeea3098-6149-4f87-9a9a-474122886ef7 2 t f
+3912 physicalvalue 液位 Output \N \N \N 3 \N \N mm 2019-06-03 11:54:20.33+08 2019-06-03 11:54:20.33+08 9cc08d17-9866-4da2-844e-be838245d9e3 2 t f
+3913 frequency 频率 Output \N \N \N 6 99999999 -999999999 Hz 2019-06-05 10:43:13.781+08 2019-06-05 10:43:13.781+08 cbcbc67f-3b4d-47e4-93db-2a85c354a213 2 t f
+3914 physicalvalue 荷载 Output \N \N \N 6 9999999 -9999999 KN 2019-06-05 10:43:13.788+08 2019-06-05 10:43:13.788+08 cbcbc67f-3b4d-47e4-93db-2a85c354a213 2 t f
+3915 temperature 温度 Output \N \N \N 2 99999 -99999 ℃ 2019-06-05 10:43:13.794+08 2019-06-05 10:43:13.794+08 cbcbc67f-3b4d-47e4-93db-2a85c354a213 2 t f
+3916 am 幅值 Output \N \N \N 2 99999 -99999 2019-06-05 10:43:13.798+08 2019-06-05 10:43:13.798+08 cbcbc67f-3b4d-47e4-93db-2a85c354a213 2 t f
+3918 physicalvalue 荷载 Output \N \N \N 6 9999999 -9999999 KN 2019-06-05 10:58:32.295+08 2019-06-05 10:58:32.295+08 db0bf17e-625b-4003-8b57-b2db0d5e3ecc 2 t f
+3919 temperature 温度 Output \N \N \N 2 99999 -99999 ℃ 2019-06-05 10:58:32.3+08 2019-06-05 10:58:32.3+08 db0bf17e-625b-4003-8b57-b2db0d5e3ecc 2 t f
+3920 am 幅值 Output \N \N \N 2 99999 -99999 2019-06-05 10:58:32.304+08 2019-06-05 10:58:32.304+08 db0bf17e-625b-4003-8b57-b2db0d5e3ecc 2 t f
+3926 temperature 温度 Output \N \N \N 6 999999 -999999 ℃ 2019-06-06 14:15:52.947+08 2019-06-06 14:15:52.947+08 e82b1781-0a86-4dd5-a38c-c66f1f0a1b0e 2 t f
+3965 physicalvalue 数据 Output \N \N \N 2 \N \N KN 2019-06-11 17:37:18.251+08 2019-06-11 17:37:18.251+08 0af3cf99-e69f-4f81-b486-9fcb5de59fd5 2 t f
+3925 frequency 频率 Output \N 6 99999 -99999 Hz 2019-06-06 14:15:52.941+08 2019-06-06 14:27:44.207+08 e82b1781-0a86-4dd5-a38c-c66f1f0a1b0e 2 t f
+3930 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-06-06 17:26:07.088+08 2019-06-06 17:26:07.088+08 28c09a41-f505-4cf5-aa80-131823bd65fb 2 t f
+3928 physicalvalue 应变 Output \N 6 99999 -99999 με 2019-06-06 14:15:52.957+08 2019-06-11 10:16:29.902+08 e82b1781-0a86-4dd5-a38c-c66f1f0a1b0e 2 t f
+3931 physicalvalue 应力 Output \N \N \N 2 \N \N KN 2019-06-11 15:43:02.17+08 2019-06-11 15:43:02.17+08 57e7e768-2d0a-44a8-93df-21edd1f6564f 2 t f
+3932 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-06-11 15:43:02.177+08 2019-06-11 15:43:02.177+08 57e7e768-2d0a-44a8-93df-21edd1f6564f 2 t f
+3933 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-06-11 15:43:02.182+08 2019-06-11 15:43:02.182+08 57e7e768-2d0a-44a8-93df-21edd1f6564f 2 t f
+3934 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-06-11 15:50:05.414+08 2019-06-11 15:50:05.414+08 35a2c8f0-a9c6-4f91-a9c5-94a0067e3095 2 t f
+3935 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-06-11 15:50:05.42+08 2019-06-11 15:50:05.42+08 35a2c8f0-a9c6-4f91-a9c5-94a0067e3095 2 t f
+3937 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-06-11 15:55:27.365+08 2019-06-11 15:55:27.365+08 bf5ac821-5299-4099-9be9-c61c8b7d085c 2 t f
+3938 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-06-11 15:55:27.371+08 2019-06-11 15:55:27.371+08 bf5ac821-5299-4099-9be9-c61c8b7d085c 2 t f
+3939 physicalvalue 裂缝 Output \N \N \N 3 \N \N mm 2019-06-11 15:55:27.376+08 2019-06-11 15:55:27.376+08 bf5ac821-5299-4099-9be9-c61c8b7d085c 2 t f
+3940 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-06-11 15:59:09.842+08 2019-06-11 15:59:09.842+08 7fbb94a7-5b6f-4dc1-8e38-872f387a2d31 2 t f
+3941 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-06-11 15:59:09.851+08 2019-06-11 15:59:09.851+08 7fbb94a7-5b6f-4dc1-8e38-872f387a2d31 2 t f
+3942 physicalvalue 裂缝 Output \N \N \N 3 \N \N mm 2019-06-11 15:59:09.856+08 2019-06-11 15:59:09.856+08 7fbb94a7-5b6f-4dc1-8e38-872f387a2d31 2 t f
+3946 physicalvalue 沉降 Output \N \N \N 3 \N \N mm 2019-06-11 16:14:17.089+08 2019-06-11 16:14:17.089+08 ed5a91cc-f6b6-4990-9c8b-bd430a7c12ef 2 t f
+3947 physicalvalue 沉降 Output \N \N \N 3 \N \N mm 2019-06-11 16:18:29.001+08 2019-06-11 16:18:29.001+08 5cec0e8b-58df-4473-b3d7-4d524e763830 2 t f
+3951 physicalvalue X轴角度 Output \N \N \N \N \N \N ° 2019-06-11 17:11:17.106+08 2019-06-11 17:11:17.106+08 7ca191c0-8240-4dec-95bc-26b13a55bcc6 2 t f
+3952 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-06-11 17:11:17.114+08 2019-06-11 17:11:17.114+08 7ca191c0-8240-4dec-95bc-26b13a55bcc6 2 t f
+3953 physicalvalue X轴角度 Output \N \N \N 2 \N \N ° 2019-06-11 17:18:00.726+08 2019-06-11 17:18:00.726+08 79193862-5667-4861-96ed-2c239a6535c2 2 t f
+3954 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-06-11 17:18:00.731+08 2019-06-11 17:18:00.731+08 79193862-5667-4861-96ed-2c239a6535c2 2 t f
+3955 physicalvalue X轴角度 Output \N \N \N 2 \N \N ° 2019-06-11 17:20:41.96+08 2019-06-11 17:20:41.96+08 c75c257f-cdab-4167-a872-c06243b27f74 2 t f
+3956 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-06-11 17:20:41.965+08 2019-06-11 17:20:41.965+08 c75c257f-cdab-4167-a872-c06243b27f74 2 t f
+3957 physicalvalue X轴角度 Output \N \N \N 2 \N \N ° 2019-06-11 17:24:10.309+08 2019-06-11 17:24:10.309+08 1515cbb4-bda7-45b0-84c9-dedf0de93039 2 t f
+3959 physicalvalue X轴角度 Output \N \N \N 2 \N \N ° 2019-06-11 17:28:58.616+08 2019-06-11 17:28:58.616+08 02962d5d-c83f-4756-bc1b-b9044c4563fa 2 t f
+3960 physicalvalue2 Y轴角度 Output \N \N \N 2 \N \N ° 2019-06-11 17:28:58.623+08 2019-06-11 17:28:58.623+08 02962d5d-c83f-4756-bc1b-b9044c4563fa 2 t f
+3961 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-06-11 17:28:58.628+08 2019-06-11 17:28:58.628+08 02962d5d-c83f-4756-bc1b-b9044c4563fa 2 t f
+3962 physicalvalue X轴角度 Output \N \N \N 2 \N \N ° 2019-06-11 17:32:28.571+08 2019-06-11 17:32:28.571+08 59d59ccb-fb26-4ac7-96f5-2b0694fc6d2e 2 t f
+3963 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-06-11 17:32:28.577+08 2019-06-11 17:32:28.577+08 59d59ccb-fb26-4ac7-96f5-2b0694fc6d2e 2 t f
+3964 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-06-11 17:36:48.042+08 2019-06-11 17:36:48.042+08 0af3cf99-e69f-4f81-b486-9fcb5de59fd5 2 t f
+3966 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-06-11 17:39:36.367+08 2019-06-11 17:39:36.367+08 faa5fb8b-d39d-4603-be6b-e70acd114c75 2 t f
+3967 physicalvalue 位移 Output \N \N \N 2 \N \N mm 2019-06-11 17:40:13.769+08 2019-06-11 17:40:13.769+08 faa5fb8b-d39d-4603-be6b-e70acd114c75 2 t f
+3968 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-06-11 17:41:15.234+08 2019-06-11 17:41:15.234+08 aabd5c05-617a-41c3-9ba6-925ec3334ff7 2 t f
+3969 physicalvalue 位移 Output \N \N \N 2 \N \N mm 2019-06-11 17:41:49.221+08 2019-06-11 17:41:49.221+08 aabd5c05-617a-41c3-9ba6-925ec3334ff7 2 t f
+3970 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-06-11 17:42:57.774+08 2019-06-11 17:42:57.774+08 b76b8c94-f6d7-43f1-9831-865a733dbeb4 2 t f
+3971 physicalvalue 水位 Output \N \N \N 2 \N \N mm 2019-06-11 17:43:32.638+08 2019-06-11 17:43:32.638+08 b76b8c94-f6d7-43f1-9831-865a733dbeb4 2 t f
+3973 length 位移 Output \N \N \N 3 \N \N mm 2019-06-18 11:02:55.446+08 2019-06-18 11:02:55.446+08 fb325f67-e901-440b-a14e-2f8e04c53e9b 2 t f
+3977 pm10 PM10 Output \N 3 \N \N ug/m3 2019-06-18 15:44:35.517+08 2019-07-08 15:50:30.755+08 43bce07c-dfec-4867-b501-00a047455ab9 2 t f
+3983 physicalvalue 位移 Output \N \N \N 3 \N \N mm 2019-06-19 17:35:23.837+08 2019-06-19 17:35:23.837+08 7b0f6923-300e-462b-8705-223febdd9b1d 2 t f
+3976 pm_25 PM2.5 Output \N 3 \N \N ug/m3 2019-06-18 15:44:35.511+08 2019-07-08 15:50:35.781+08 43bce07c-dfec-4867-b501-00a047455ab9 2 t f
+3974 so2 SO2 Output \N 3 \N \N ppm 2019-06-18 15:44:35.497+08 2019-07-08 15:50:38.518+08 43bce07c-dfec-4867-b501-00a047455ab9 2 t f
+3929 physicalvalue 压力 Output \N 3 \N \N Kpa 2019-06-06 17:25:44.449+08 2019-08-12 17:32:12.707+08 28c09a41-f505-4cf5-aa80-131823bd65fb 2 t f
+3950 physicalvalue 土压力 Output \N 2 \N \N kpa 2019-06-11 16:27:10.963+08 2019-09-18 16:53:47.988+08 370eb26a-f879-4a01-a515-1b20a92c80f6 2 t f
+3936 physicalvalue 压力 Output \N 2 \N \N kpa 2019-06-11 15:50:05.425+08 2019-09-18 16:54:06.267+08 35a2c8f0-a9c6-4f91-a9c5-94a0067e3095 2 t f
+3982 hexData 数据 Output \N \N \N \N \N \N \N 2019-06-19 13:59:20.233+08 2019-06-19 13:59:20.233+08 b97de8e9-82aa-492d-9c8f-5d7347a24d93 5 t f
+3984 physicalvalue 角度 Output \N \N \N 2 \N \N ° 2019-06-20 09:23:25.475+08 2019-06-20 09:23:25.475+08 26896cc1-415c-44cd-a3d0-36d3908ab014 2 t f
+3980 VOCS VOCs Output \N 3 \N ppm 2019-06-18 15:48:02.217+08 2019-07-08 15:50:03.49+08 7f4871f5-ec20-43b3-aba7-1814a0dd53bf 2 t f
+3979 H2S 硫化氢 Output \N 3 \N \N ppm 2019-06-18 15:48:02.212+08 2019-07-08 15:50:07.428+08 7f4871f5-ec20-43b3-aba7-1814a0dd53bf 2 t f
+3978 NH3 氨气 Output \N 3 \N \N ppm 2019-06-18 15:48:02.206+08 2019-07-08 15:50:11.432+08 7f4871f5-ec20-43b3-aba7-1814a0dd53bf 2 t f
+3981 Odor 臭气浓度 Output \N 3 \N \N 2019-06-18 15:48:02.221+08 2019-07-17 15:32:20.096+08 7f4871f5-ec20-43b3-aba7-1814a0dd53bf 2 t f
+3985 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-06-21 10:58:35.023+08 2019-06-21 10:58:35.023+08 7b0f6923-300e-462b-8705-223febdd9b1d 2 t f
+3986 temperature 温度 Output \N 4 120 -55 ℃ 2019-06-21 13:52:33.011+08 2019-06-21 13:54:37.448+08 4e27a3d5-339d-47e3-9ce7-0c90068376e5 2 t f
+3987 noise 噪声 Output \N \N \N 3 \N \N dB 2019-06-25 11:39:02.389+08 2019-06-25 11:39:02.389+08 a6a9bd4f-093d-4573-8511-3d805c7fbe9c 2 t f
+3988 humidity 湿度 Output \N \N \N 3 \N \N %RH 2019-06-25 11:39:02.396+08 2019-06-25 11:39:02.396+08 a6a9bd4f-093d-4573-8511-3d805c7fbe9c 2 t f
+3989 temperature 温度 Output \N \N \N 3 \N \N ℃ 2019-06-25 11:39:02.401+08 2019-06-25 11:39:02.401+08 a6a9bd4f-093d-4573-8511-3d805c7fbe9c 2 t f
+3990 O3 O3浓度 Output \N \N \N 3 \N \N ppb 2019-06-25 11:39:02.406+08 2019-06-25 11:39:02.406+08 a6a9bd4f-093d-4573-8511-3d805c7fbe9c 2 t f
+3991 SO2 SO2浓度 Output \N \N \N 3 \N \N ppb 2019-06-25 11:39:02.41+08 2019-06-25 11:39:02.41+08 a6a9bd4f-093d-4573-8511-3d805c7fbe9c 2 t f
+3992 CO CO浓度 Output \N \N \N 3 \N \N ppm 2019-06-25 11:39:02.415+08 2019-06-25 11:39:02.415+08 a6a9bd4f-093d-4573-8511-3d805c7fbe9c 2 t f
+3993 PM10 PM10浓度 Output \N \N \N 3 \N ug/m3 2019-06-25 11:39:02.419+08 2019-06-25 11:39:02.419+08 a6a9bd4f-093d-4573-8511-3d805c7fbe9c 2 t f
+3994 TVOC TVOC浓度 Output \N \N \N 3 \N \N mg/m3 2019-06-25 11:39:02.428+08 2019-06-25 11:39:02.428+08 a6a9bd4f-093d-4573-8511-3d805c7fbe9c 2 t f
+3995 PM25 PM2.5浓度 Output \N \N \N \N \N \N ug/m3 2019-06-25 11:39:02.433+08 2019-06-25 11:39:02.433+08 a6a9bd4f-093d-4573-8511-3d805c7fbe9c 2 t f
+3997 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2019-06-27 09:35:05.712+08 2019-06-27 09:35:05.712+08 b071ffa1-9fb5-4fac-8295-cecff8edaa95 5 t f
+3999 physicalvalue 应变 Output \N 6 \N \N με 2019-06-27 09:35:21.033+08 2019-06-27 09:35:21.033+08 f5661460-2f34-481a-b54b-31c212613ecf 2 t f
+4002 length 长度 Output \N \N \N \N \N \N m 2019-06-27 13:03:58.352+08 2019-06-27 13:03:58.352+08 e2d1416d-c8a6-43c7-ad2f-08d498e323a1 2 t f
+3996 physicalvalue 位移 Output \N 3 \N \N mm 2019-06-26 11:58:57.832+08 2019-06-27 14:17:08.995+08 b35434b2-55c1-4aab-a689-4919d9c56da0 2 t f
+4003 physicalvalue 位移 Output \N 3 \N \N mm 2019-06-27 14:07:45.238+08 2019-06-27 14:17:35.626+08 02bedcab-6954-4215-aa33-80fd484bda13 2 t f
+2410 physicalvalue 压强 Output \N 3 \N \N Pa 2018-07-09 10:14:00.846+08 2019-06-27 14:20:31.467+08 3268ff97-6ce3-4be6-a8b1-4ceeb3f8e9b1 2 t f
+2353 physicalvalue 压强 Output \N 2 \N \N Pa 2018-06-21 16:32:04.671+08 2019-06-27 14:20:49.007+08 ccf2e82b-5de5-4291-849a-390a0c957088 2 t f
+4004 physicalvalue 压强 Output \N 2 \N \N kg/cm2 2019-06-27 14:28:06.368+08 2019-06-27 14:47:54.384+08 ee3cecd5-4646-4a7d-8ade-1993d81887e4 2 t f
+4005 length 位移 Output \N 3 \N \N mm 2019-06-27 15:43:13.197+08 2019-06-27 16:33:13.454+08 c164c829-5622-47f6-8164-a992be4b9e2a 2 t f
+4006 anglex x轴角度 Output \N \N \N 3 \N \N ° 2019-06-27 17:01:33.256+08 2019-06-27 17:01:33.256+08 bf758132-c5a1-4622-a2a7-38359c9cc0c5 2 t f
+4007 angley y轴角度 Output \N \N \N 3 \N \N ° 2019-06-27 17:01:33.261+08 2019-06-27 17:01:33.261+08 bf758132-c5a1-4622-a2a7-38359c9cc0c5 2 t f
+4008 anglex x轴角度 Output \N \N \N 3 \N \N ° 2019-06-27 17:34:29.073+08 2019-06-27 17:34:29.073+08 fad3ba62-b4d5-4a90-b1ec-8ca32c7ba7ac 2 t f
+4009 angley y轴角度 Output \N \N \N 3 \N \N ° 2019-06-27 17:34:29.078+08 2019-06-27 17:34:29.078+08 fad3ba62-b4d5-4a90-b1ec-8ca32c7ba7ac 2 t f
+4001 physicalvalue 裂缝 Output \N 2 \N \N mm 2019-06-27 09:35:29.146+08 2019-06-28 09:58:10.322+08 936e35a2-2147-461d-8713-c4149317fb19 2 t f
+4011 anglex x轴角度 Output \N \N \N 3 \N \N ° 2019-06-28 14:47:16.392+08 2019-06-28 14:47:16.392+08 f52408eb-cc49-4576-ba3d-726ab9d6d9f5 2 t f
+4012 angley y轴角度 Output \N \N \N 3 \N \N ° 2019-06-28 14:47:16.401+08 2019-06-28 14:47:16.401+08 f52408eb-cc49-4576-ba3d-726ab9d6d9f5 2 t f
+4010 length 位移 Output \N 3 \N \N m 2019-06-28 09:51:38.285+08 2019-07-02 17:49:45.785+08 9a53f8b2-9b6d-4ebd-bafa-1b3e01b404b6 2 t f
+4013 temperatures 温度 Output \N 1 \N \N ℃ 2019-07-03 11:35:48.089+08 2019-07-16 11:37:08.615+08 418a4cf1-2537-4f0c-ad3d-d7752a5957a8 2 t f
+4015 clusterId Constant \N \N genOnOff \N \N \N \N 2019-07-06 16:55:42.749+08 2019-07-06 16:55:42.749+08 bef735a7-a116-4448-8c98-c27e6f83fab2 5 t f
+4023 voltage Votage Output \N 2 \N \N V 2019-07-06 18:59:18.831+08 2019-07-15 11:45:20.145+08 2d4b1549-a50d-4ec2-80a2-600f6eb2efa1 2 t f
+4018 clusterId \N Constant \N \N msTemperatureMeasurement \N \N \N \N 2019-07-06 17:23:24.597+08 2019-07-06 17:23:24.597+08 8f23910e-3c7c-4113-b420-88df899c7a25 5 t f
+4020 clusterId \N Constant \N \N genBasic \N \N \N \N 2019-07-06 18:57:45.584+08 2019-07-06 18:57:45.584+08 2d4b1549-a50d-4ec2-80a2-600f6eb2efa1 5 t f
+4026 clusterId \N Constant \N \N genAnalogInput \N \N \N \N 2019-07-06 19:02:12.986+08 2019-07-06 19:02:12.986+08 3c5cfd97-4900-4001-95e5-6d3b6790bec8 5 t f
+4149 alert \N Variable \N \N false \N \N \N \N 2019-08-01 14:21:11.71+08 2019-08-01 14:21:11.71+08 1961c932-469f-4e15-8dee-38cf1f837d35 3 f f
+4153 alert \N Variable \N \N false \N \N \N \N 2019-08-01 15:19:21.811+08 2019-08-01 15:19:21.811+08 8792ef3b-6e91-43dc-a17b-61137d8b5734 3 f f
+4155 alert \N Variable \N \N false \N \N \N \N 2019-08-01 15:20:24.145+08 2019-08-01 15:20:24.145+08 0279aa9d-29eb-47eb-80ea-8bc7e0fa5541 3 f f
+3975 nox 氮氧化物 Output \N 3 \N \N ppm 2019-06-18 15:44:35.504+08 2019-07-08 15:50:27.06+08 43bce07c-dfec-4867-b501-00a047455ab9 2 t f
+4036 runoff 流量 Output \N \N \N 3 \N \N \N 2019-07-09 15:00:57.819+08 2019-07-09 15:00:57.819+08 c61698d6-e360-4e40-a141-960ee17d0aa4 2 t f
+4038 temperature 温度 Output \N 2 \N \N ℃ 2019-07-09 15:10:12.054+08 2019-07-09 15:15:07.027+08 6ed9c2d8-4e87-43ed-b925-94a17a305bbf 2 t f
+4035 physicalvalue x轴角度 Output \N 2 \N \N ° 2019-07-09 08:53:49.476+08 2019-07-12 11:25:22.177+08 a690c2d9-43b0-4c5d-b667-5020ef18e4ec 2 t f
+4039 physicalvalue 应变 Output \N 2 \N \N με 2019-07-09 15:15:46.512+08 2019-07-12 14:27:49.246+08 6ed9c2d8-4e87-43ed-b925-94a17a305bbf 2 t f
+4027 power Power Output \N 2 \N \N W Real-time power 2019-07-06 19:02:24.481+08 2019-07-15 11:53:19.86+08 3c5cfd97-4900-4001-95e5-6d3b6790bec8 2 t f
+4019 temperature Temperature Output \N 2 ℃ 2019-07-06 17:24:41.516+08 2019-07-15 11:11:48.316+08 8f23910e-3c7c-4113-b420-88df899c7a25 2 t f
+4022 power Power Output \N 2 \N \N W Real-time power 2019-07-06 18:59:06.297+08 2019-07-15 11:47:39.924+08 2d4b1549-a50d-4ec2-80a2-600f6eb2efa1 2 t f
+4024 consumption Consumption Output \N 2 \N \N kWh Total power consumption 2019-07-06 18:59:32.204+08 2019-07-15 11:50:32.032+08 2d4b1549-a50d-4ec2-80a2-600f6eb2efa1 2 t f
+4041 factor Fator Output \N 2 \N \N Power factor 2019-07-11 18:16:10.764+08 2019-07-15 11:49:03.547+08 2d4b1549-a50d-4ec2-80a2-600f6eb2efa1 2 t f
+4025 temperature Temperature Output \N 2 \N \N °C Temperature of plug 2019-07-06 18:59:41.877+08 2019-07-15 11:49:54.396+08 2d4b1549-a50d-4ec2-80a2-600f6eb2efa1 2 t f
+4014 humiditys 湿度 Output \N 1 \N \N % 2019-07-03 11:38:52.039+08 2019-07-16 11:36:50.39+08 418a4cf1-2537-4f0c-ad3d-d7752a5957a8 2 t f
+2116 rainfall 雨量 Output \N 3 \N \N mm/min 2018-04-03 09:11:19.003+08 2019-07-18 17:06:49.809+08 dd2a1a9e-0e3e-4ed3-b133-f9f7ebd0cd91 2 t f
+4042 initCons Initial consumption Variable \N 0 2 999999999999999 -999999999999999 kWh The initial consumption 2019-07-15 11:52:24.987+08 2019-07-17 16:04:38.599+08 2d4b1549-a50d-4ec2-80a2-600f6eb2efa1 2 f t
+4016 state State Output \N 0,1 0 State of plug 2019-07-06 16:55:42.757+08 2019-07-15 11:43:06.951+08 bef735a7-a116-4448-8c98-c27e6f83fab2 4 t f
+4043 ieeeAddr Zigbee IEEE Address Variable \N \N \N \N \N \N 2019-07-15 13:31:50.1+08 2019-07-15 13:31:50.1+08 e8b16798-e46b-4d0f-a93b-c03757601b0c 5 t f
+4044 state State Output \N 0,1 \N \N \N \N State of Door#1 2019-07-15 13:32:17.032+08 2019-07-15 13:32:17.032+08 e8b16798-e46b-4d0f-a93b-c03757601b0c 4 t f
+4045 clusterId Cluster ID Constant \N genOnOff 0 2019-07-15 13:33:11.284+08 2019-07-15 13:34:12.622+08 e8b16798-e46b-4d0f-a93b-c03757601b0c 5 t f
+4046 ieeeAddr Zigbee IEEE Address Variable \N \N \N \N \N \N 2019-07-15 13:37:17.521+08 2019-07-15 13:37:17.521+08 8792ef3b-6e91-43dc-a17b-61137d8b5734 5 t f
+4047 state State Output \N 0,1 0 2019-07-15 13:37:56.035+08 2019-07-15 13:38:11.204+08 8792ef3b-6e91-43dc-a17b-61137d8b5734 4 t f
+4048 clusterId Cluster ID Constant \N genOnOff 0 2019-07-15 13:38:33.171+08 2019-07-15 13:38:40.744+08 8792ef3b-6e91-43dc-a17b-61137d8b5734 5 t f
+4049 ieeeAddr Zigbee IEEE Address Variable \N \N \N \N \N \N 2019-07-15 13:53:07.475+08 2019-07-15 13:53:07.475+08 eb07419e-1090-4ef1-87af-c365af7a63d1 5 t f
+4050 temperature Temperature Output \N \N \N \N \N \N ℃ Temperature of chill 2019-07-15 13:54:07.049+08 2019-07-15 13:54:07.049+08 eb07419e-1090-4ef1-87af-c365af7a63d1 5 t f
+4051 clusterId Cluster ID Constant \N \N msTemperatureMeasurement \N \N \N 2019-07-15 13:55:44.447+08 2019-07-15 13:55:44.447+08 eb07419e-1090-4ef1-87af-c365af7a63d1 5 t f
+4052 clusterId Cluster ID Constant \N \N msTemperatureMeasurement \N \N \N 2019-07-15 14:04:02.923+08 2019-07-15 14:04:02.923+08 1961c932-469f-4e15-8dee-38cf1f837d35 5 t f
+4053 temperature Temperature Output \N \N \N \N \N \N ℃ Temperature of chill 2019-07-15 14:04:02.928+08 2019-07-15 14:04:02.928+08 1961c932-469f-4e15-8dee-38cf1f837d35 5 t f
+4054 ieeeAddr Zigbee IEEE Address Variable \N \N \N \N \N \N 2019-07-15 14:04:02.934+08 2019-07-15 14:04:02.934+08 1961c932-469f-4e15-8dee-38cf1f837d35 5 t f
+4055 clusterId Cluster ID Constant \N genOnOff 0 2019-07-15 14:04:02.943+08 2019-07-15 14:04:02.943+08 0279aa9d-29eb-47eb-80ea-8bc7e0fa5541 5 t f
+4056 state State Output \N 0,1 0 2019-07-15 14:04:02.946+08 2019-07-15 14:04:02.946+08 0279aa9d-29eb-47eb-80ea-8bc7e0fa5541 4 t f
+4057 ieeeAddr Zigbee IEEE Address Variable \N \N \N \N \N \N 2019-07-15 14:04:02.95+08 2019-07-15 14:04:02.95+08 0279aa9d-29eb-47eb-80ea-8bc7e0fa5541 5 t f
+4058 clusterId Cluster ID Constant \N genOnOff 0 2019-07-15 14:04:02.959+08 2019-07-15 14:04:02.959+08 f3177595-13d3-468c-8451-4677a7f3a0ef 5 t f
+4059 state State Output \N 0,1 \N \N \N \N State of Door#1 2019-07-15 14:04:02.964+08 2019-07-15 14:04:02.964+08 f3177595-13d3-468c-8451-4677a7f3a0ef 4 t f
+4060 ieeeAddr Zigbee IEEE Address Variable \N \N \N \N \N \N 2019-07-15 14:04:02.967+08 2019-07-15 14:04:02.967+08 f3177595-13d3-468c-8451-4677a7f3a0ef 5 t f
+4061 ieeeAddr Zigbee IEEE Addres Variable \N \N \N \N \N \N 2019-07-15 14:06:27.149+08 2019-07-15 14:06:27.149+08 cfb789ad-d761-4e5c-9f64-b9f87161c6a0 5 t f
+4062 state State Output \N 0,1 \N \N \N \N State of door#3 2019-07-15 14:06:53.67+08 2019-07-15 14:06:53.67+08 cfb789ad-d761-4e5c-9f64-b9f87161c6a0 4 t f
+4063 clusterId Cluster ID Constant \N \N genOnOff \N \N \N 2019-07-15 14:07:15.513+08 2019-07-15 14:07:15.513+08 cfb789ad-d761-4e5c-9f64-b9f87161c6a0 5 t f
+4064 capType \N Constant \N \N DOOR \N \N \N \N 2019-07-15 14:26:53.651+08 2019-07-15 14:26:53.651+08 cfb789ad-d761-4e5c-9f64-b9f87161c6a0 5 t f
+4065 capType \N Constant \N \N DOOR \N \N \N \N 2019-07-15 14:27:19.854+08 2019-07-15 14:27:19.854+08 0279aa9d-29eb-47eb-80ea-8bc7e0fa5541 5 t f
+4067 capType \N Constant \N \N DOOR \N \N \N \N 2019-07-15 14:28:03.368+08 2019-07-15 14:28:03.368+08 f3177595-13d3-468c-8451-4677a7f3a0ef 5 t f
+4077 capType \N Constant \N TEMPERATURE 0 \N 2019-07-15 14:29:48.586+08 2019-07-15 14:30:05.88+08 eb07419e-1090-4ef1-87af-c365af7a63d1 5 t f
+4078 capType \N Constant \N \N DOOR \N \N \N \N 2019-07-15 14:30:39.744+08 2019-07-15 14:30:39.744+08 8792ef3b-6e91-43dc-a17b-61137d8b5734 5 t f
+4079 capType \N Constant \N \N DOOR \N \N \N \N 2019-07-15 14:30:57.777+08 2019-07-15 14:30:57.777+08 e8b16798-e46b-4d0f-a93b-c03757601b0c 5 t f
+4080 capType \N Constant \N \N DOOR \N \N \N \N 2019-07-15 14:31:13.676+08 2019-07-15 14:31:13.676+08 69b276a3-aa72-4720-9591-cd371e95b7de 5 t f
+4081 clusterId Cluster ID Constant \N genOnOff 0 2019-07-15 14:31:13.691+08 2019-07-15 14:31:13.691+08 69b276a3-aa72-4720-9591-cd371e95b7de 5 t f
+4082 state State Output \N 0,1 \N \N \N \N State of Door#1 2019-07-15 14:31:13.696+08 2019-07-15 14:31:13.696+08 69b276a3-aa72-4720-9591-cd371e95b7de 4 t f
+4083 ieeeAddr Zigbee IEEE Address Variable \N \N \N \N \N \N 2019-07-15 14:31:13.7+08 2019-07-15 14:31:13.7+08 69b276a3-aa72-4720-9591-cd371e95b7de 5 t f
+4084 capType \N Constant \N \N DOOR \N \N \N \N 2019-07-15 14:31:13.718+08 2019-07-15 14:31:13.718+08 578138e6-3a9c-4db2-bbf9-addfef22c072 5 t f
+4085 clusterId Cluster ID Constant \N genOnOff 0 2019-07-15 14:31:13.722+08 2019-07-15 14:31:13.722+08 578138e6-3a9c-4db2-bbf9-addfef22c072 5 t f
+4086 state State Output \N 0,1 0 2019-07-15 14:31:13.726+08 2019-07-15 14:31:13.726+08 578138e6-3a9c-4db2-bbf9-addfef22c072 4 t f
+4087 ieeeAddr Zigbee IEEE Address Variable \N \N \N \N \N \N 2019-07-15 14:31:13.729+08 2019-07-15 14:31:13.729+08 578138e6-3a9c-4db2-bbf9-addfef22c072 5 t f
+4066 capType Constant \N TEMPERATURE 0 2019-07-15 14:27:45.167+08 2019-08-13 16:53:08.036+08 1961c932-469f-4e15-8dee-38cf1f837d35 5 t f
+4088 capType \N Constant \N TEMPERATURE 0 \N 2019-07-15 14:31:13.739+08 2019-07-15 14:31:13.739+08 959bf8b8-23eb-48da-8362-90d4978c9406 5 t f
+4089 clusterId Cluster ID Constant \N \N msTemperatureMeasurement \N \N \N 2019-07-15 14:31:13.743+08 2019-07-15 14:31:13.743+08 959bf8b8-23eb-48da-8362-90d4978c9406 5 t f
+4090 temperature Temperature Output \N \N \N \N \N \N ℃ Temperature of chill 2019-07-15 14:31:13.746+08 2019-07-15 14:31:13.746+08 959bf8b8-23eb-48da-8362-90d4978c9406 5 t f
+4091 ieeeAddr Zigbee IEEE Address Variable \N \N \N \N \N \N 2019-07-15 14:31:13.75+08 2019-07-15 14:31:13.75+08 959bf8b8-23eb-48da-8362-90d4978c9406 5 t f
+3105 pressure 压强 Output \N 2 \N \N Kpa 2019-01-04 15:55:31.076+08 2019-07-16 10:36:49.369+08 becc893e-7135-41ab-8e23-10257bd06437 2 t f
+4094 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-07-18 08:51:18.629+08 2019-07-18 08:51:18.629+08 2a2fd581-a5d0-4bfd-b7ab-2c2d504bc034 2 t f
+4095 humidity 湿度 Output \N \N \N 2 \N \N % 2019-07-18 08:55:34.735+08 2019-07-18 08:55:34.735+08 2a2fd581-a5d0-4bfd-b7ab-2c2d504bc034 2 t f
+4092 physicalvalue 受力 Output \N 3 \N \N KN 2019-07-16 17:46:08.893+08 2019-07-18 08:59:19.557+08 2a2fd581-a5d0-4bfd-b7ab-2c2d504bc034 2 t f
+4101 deltaKey Constant \N consumption 0 2019-07-20 11:28:40.555+08 2019-07-20 11:28:48.468+08 2d4b1549-a50d-4ec2-80a2-600f6eb2efa1 5 t f
+4100 delta delta Variable \N \N 0 100000 0 \N 2019-07-20 11:28:16.446+08 2019-07-20 11:29:46.74+08 2d4b1549-a50d-4ec2-80a2-600f6eb2efa1 1 f f
+4099 interval 上报间隔控制 Variable \N \N 0 36000 0 s 2019-07-20 10:53:20.006+08 2019-07-20 11:30:03.224+08 2d4b1549-a50d-4ec2-80a2-600f6eb2efa1 1 f f
+4102 level 液位 Output \N \N \N 3 \N \N mm 2019-07-22 16:03:58.296+08 2019-07-22 16:03:58.296+08 c8050ea0-29fc-4675-9198-3a4c438aafff 2 t f
+4103 temperature 温度 Output \N \N \N 1 \N \N ℃ 2019-07-22 16:04:16.914+08 2019-07-22 16:04:16.914+08 c8050ea0-29fc-4675-9198-3a4c438aafff 2 t f
+4104 pressure 压力 Output \N \N \N 3 \N \N Pa 2019-07-22 16:05:41.388+08 2019-07-22 16:05:41.388+08 c8050ea0-29fc-4675-9198-3a4c438aafff 2 t f
+4144 threshold2 Variable \N \N 8 2 99 -99 2019-08-01 14:18:53.956+08 2019-08-01 14:18:53.956+08 eb07419e-1090-4ef1-87af-c365af7a63d1 2 f f
+4106 accelerationy 加速度y Output \N \N \N 2 \N \N g 2019-07-23 09:37:26.958+08 2019-07-23 09:37:26.958+08 e36b625f-b336-45f2-a421-47deb3ccff39 2 t f
+4105 accelerationx 加速度x Output \N 2 \N \N g 2019-07-23 09:35:49.175+08 2019-07-23 09:37:37.519+08 e36b625f-b336-45f2-a421-47deb3ccff39 2 t f
+4107 accelerationz 加速度z Output \N \N \N 2 \N \N g 2019-07-23 09:38:04.119+08 2019-07-23 09:38:04.119+08 e36b625f-b336-45f2-a421-47deb3ccff39 2 t f
+4108 force 压力 Output \N \N \N 1 \N \N kPa 2019-07-23 11:14:51.019+08 2019-07-23 11:14:51.019+08 7b76cdc3-1393-474a-9868-b48a35519a53 2 t f
+4109 temperature 温度 Output \N 4 70 -25 ℃ 2019-07-23 21:12:29.144+08 2019-07-23 21:13:03.548+08 97d28bd7-4126-40cd-aff4-ba6db048ae15 2 t f
+4110 anglex X方向角度 Output \N 4 30 -30 ° 2019-07-23 21:13:23.315+08 2019-07-23 21:14:22.542+08 97d28bd7-4126-40cd-aff4-ba6db048ae15 2 t f
+4111 angley Y方向角度 Output \N 4 30 -30 ° 2019-07-23 21:14:08.813+08 2019-07-23 21:14:31.229+08 97d28bd7-4126-40cd-aff4-ba6db048ae15 2 t f
+4127 currentC Current C Output \N 3 \N \N A 2019-07-26 16:37:56.926+08 2019-07-26 18:52:08.64+08 4801d3ef-12b9-41d2-bea8-f20ddeb90568 2 t f
+4112 pressure 压强 Output \N 2 \N \N Kpa 2019-07-23 21:18:41.914+08 2019-07-23 21:19:43.671+08 82905dcc-a3ca-4ecb-b0d3-d7e32ec6f958 2 t f
+4113 temperature 温度 Output \N 2 \N \N ℃ 2019-07-23 21:19:30.559+08 2019-07-23 21:19:47.81+08 82905dcc-a3ca-4ecb-b0d3-d7e32ec6f958 2 t f
+4114 length 位移 Output \N 5 \N \N mm 2019-07-23 21:24:58.572+08 2019-07-23 21:25:07.509+08 9f777c35-b431-4a11-aeac-979ad0a3f1ac 2 t f
+4115 humidity 湿度 Output \N 2 \N \N %RH 2019-07-23 21:31:04.351+08 2019-07-23 21:31:16.851+08 911e12ca-0961-481e-bebb-0201c63f0cd2 2 t f
+4116 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-07-23 21:31:33.893+08 2019-07-23 21:31:33.893+08 911e12ca-0961-481e-bebb-0201c63f0cd2 2 t f
+4117 ssagee 液位 Output \N \N \N 4 \N \N mm 2019-07-23 22:26:31.64+08 2019-07-23 22:26:31.64+08 82905dcc-a3ca-4ecb-b0d3-d7e32ec6f958 2 t f
+4139 anglex X轴角度 Output \N \N \N 2 \N \N ° 2019-07-31 16:05:01.065+08 2019-07-31 16:05:01.065+08 e7674511-d506-492f-9321-966a9efe6971 2 t f
+4140 angley Y轴角度 Output \N \N \N 2 \N \N ° 2019-07-31 16:05:31.645+08 2019-07-31 16:05:31.645+08 e7674511-d506-492f-9321-966a9efe6971 2 t f
+4118 power Power Output \N 4 \N \N 2019-07-24 18:01:23.705+08 2019-08-03 18:27:14.841+08 b781fb04-d60a-46c0-9081-e7ce553bb7e3 2 t f
+4130 powerC Phase C power Output \N 4 \N \N 2019-07-26 16:50:46.819+08 2019-08-03 18:26:57.163+08 b781fb04-d60a-46c0-9081-e7ce553bb7e3 2 t f
+4124 voltageC Voltage C Output \N 1 \N \N V 2019-07-26 16:33:59.534+08 2019-07-26 18:51:39.528+08 37b692f8-71bc-4741-928f-5eba35682efc 2 t f
+4123 voltageB Voltage B Output \N 1 \N \N V 2019-07-26 16:33:45.063+08 2019-07-26 18:51:42.433+08 37b692f8-71bc-4741-928f-5eba35682efc 2 t f
+4122 voltageA Voltage A Output \N 1 \N \N V 2019-07-26 16:33:24.999+08 2019-07-26 18:51:45.454+08 37b692f8-71bc-4741-928f-5eba35682efc 2 t f
+4129 powerB Phase B power Output \N 4 \N \N 2019-07-26 16:45:37.862+08 2019-08-03 18:27:26.978+08 b781fb04-d60a-46c0-9081-e7ce553bb7e3 2 t f
+4121 initCons Init consumption Variable \N 0 2 99999999999999 -9999999999999 kWh 2019-07-26 13:53:18.224+08 2019-07-26 18:52:01.397+08 98affd25-d0f7-47f2-abe9-5dc74bdfb02f 2 f f
+4126 currentB Current B Output \N 3 \N \N A 2019-07-26 16:37:19.51+08 2019-07-26 18:52:11.003+08 4801d3ef-12b9-41d2-bea8-f20ddeb90568 2 t f
+4125 currentA Current A Output \N 3 \N \N A 2019-07-26 16:36:58.442+08 2019-07-26 18:52:13.395+08 4801d3ef-12b9-41d2-bea8-f20ddeb90568 2 t f
+4141 anglez Z轴角度 Output \N \N \N 2 \N \N ° 2019-07-31 16:11:42.085+08 2019-07-31 16:11:42.085+08 e7674511-d506-492f-9321-966a9efe6971 2 t f
+4128 powerA Phase A power Output \N 4 \N \N 2019-07-26 16:45:08.895+08 2019-08-03 18:27:10.825+08 b781fb04-d60a-46c0-9081-e7ce553bb7e3 2 t f
+4119 physicalvalue Output \N 5 \N \N 2019-07-26 11:41:33.834+08 2019-08-01 11:35:41.939+08 55c2a1eb-5dad-4181-86f8-9145d71e8077 2 t f
+4142 alert \N Variable \N \N false \N \N \N \N 2019-08-01 14:16:09.648+08 2019-08-01 14:16:09.648+08 8f23910e-3c7c-4113-b420-88df899c7a25 3 f f
+4138 alarmCode 报警状态码 Output \N \N \N \N 1 0 \N 2019-07-31 10:17:16.715+08 2019-07-31 10:17:16.715+08 16eac313-4d5b-4b3b-960b-e3c3b7fbe450 1 t f
+4143 alert \N Variable \N \N false \N \N \N \N 2019-08-01 14:17:37.034+08 2019-08-01 14:17:37.034+08 eb07419e-1090-4ef1-87af-c365af7a63d1 3 f f
+4145 threshold1 Variable \N \N 15 2 99 -99 2019-08-01 14:19:20.311+08 2019-08-01 14:19:20.311+08 eb07419e-1090-4ef1-87af-c365af7a63d1 2 f f
+4146 alert \N Variable \N \N false \N \N \N \N 2019-08-01 14:19:55.684+08 2019-08-01 14:19:55.684+08 959bf8b8-23eb-48da-8362-90d4978c9406 3 f f
+4147 threshold2 Variable \N \N -10 2 99 -99 2019-08-01 14:20:30.014+08 2019-08-01 14:20:30.014+08 959bf8b8-23eb-48da-8362-90d4978c9406 2 f f
+4148 threshold1 Variable \N \N -5 2 99 -99 2019-08-01 14:20:47.764+08 2019-08-01 14:20:47.764+08 959bf8b8-23eb-48da-8362-90d4978c9406 2 f f
+4150 threshold2 Variable \N 8 2 99 -99 2019-08-01 14:21:32.464+08 2019-08-01 14:23:49.603+08 1961c932-469f-4e15-8dee-38cf1f837d35 2 f f
+4151 threshold1 Variable \N 15 2 99 -99 2019-08-01 14:21:56.651+08 2019-08-01 14:23:58.187+08 1961c932-469f-4e15-8dee-38cf1f837d35 2 f f
+4152 alert \N Variable \N \N false \N \N \N \N 2019-08-01 15:18:58.374+08 2019-08-01 15:18:58.374+08 e8b16798-e46b-4d0f-a93b-c03757601b0c 3 f f
+4156 alert \N Variable \N \N false \N \N \N \N 2019-08-01 15:20:49.379+08 2019-08-01 15:20:49.379+08 cfb789ad-d761-4e5c-9f64-b9f87161c6a0 3 f f
+4157 alert \N Variable \N \N false \N \N \N \N 2019-08-01 15:21:36.373+08 2019-08-01 15:21:36.373+08 578138e6-3a9c-4db2-bbf9-addfef22c072 3 f f
+4158 alert \N Variable \N \N false \N \N \N \N 2019-08-01 15:21:48.506+08 2019-08-01 15:21:48.506+08 69b276a3-aa72-4720-9591-cd371e95b7de 3 f f
+4159 id \N Constant \N \N 1 \N \N \N \N 2019-08-01 15:26:03.564+08 2019-08-01 15:26:03.564+08 e8b16798-e46b-4d0f-a93b-c03757601b0c 1 t f
+4161 id \N Constant \N \N 1 \N \N \N \N 2019-08-01 15:26:41.01+08 2019-08-01 15:26:41.01+08 f3177595-13d3-468c-8451-4677a7f3a0ef 1 t f
+4162 id \N Constant \N \N 2 \N \N \N \N 2019-08-01 15:26:57.009+08 2019-08-01 15:26:57.009+08 0279aa9d-29eb-47eb-80ea-8bc7e0fa5541 1 t f
+4194 verdirection 垂直风向 Output \N \N \N 1 \N \N ° 2019-08-08 18:04:12.686+08 2019-08-08 18:04:12.686+08 75960822-83b9-4eb4-accd-bbccb4f4d139 2 t f
+4160 id Constant \N 2 0 2019-08-01 15:26:21.239+08 2019-08-01 15:28:54.42+08 8792ef3b-6e91-43dc-a17b-61137d8b5734 1 t f
+4163 id \N Constant \N \N 3 \N \N \N \N 2019-08-01 15:30:56.985+08 2019-08-01 15:30:56.985+08 cfb789ad-d761-4e5c-9f64-b9f87161c6a0 1 t f
+4164 id \N Constant \N \N 1 \N \N \N \N 2019-08-01 15:31:14.028+08 2019-08-01 15:31:14.028+08 69b276a3-aa72-4720-9591-cd371e95b7de 1 t f
+4165 id \N Constant \N \N 2 \N \N \N \N 2019-08-01 15:31:26.417+08 2019-08-01 15:31:26.417+08 578138e6-3a9c-4db2-bbf9-addfef22c072 1 t f
+4154 alert Variable \N false 0 2019-08-01 15:20:02.242+08 2019-08-01 15:33:21.166+08 f3177595-13d3-468c-8451-4677a7f3a0ef 3 f f
+4120 energy Energy Output \N 2 \N \N kWh 2019-07-26 13:52:49.151+08 2019-08-03 13:06:18.844+08 98affd25-d0f7-47f2-abe9-5dc74bdfb02f 2 t f
+4166 capType Constant \N \N ENERGY \N \N \N \N 2019-08-03 13:09:13.998+08 2019-08-03 13:09:13.998+08 98affd25-d0f7-47f2-abe9-5dc74bdfb02f 5 t f
+4167 unit \N Constant \N \N kW \N \N \N \N 2019-08-03 18:50:14.949+08 2019-08-03 18:50:14.949+08 b781fb04-d60a-46c0-9081-e7ce553bb7e3 5 t f
+649 physicalvalue 压力 Output \N 3 6.4 0 KPa 2018-01-04 14:05:22.067+08 2019-08-05 11:36:32.824+08 cd26103f-0538-43bd-9bbd-a8b3b84e10ff 2 t f
+4169 direction 放向 Output \N \N \N \N \N \N 2019-08-05 14:38:24.443+08 2019-08-05 14:38:24.443+08 64576b12-36a8-4ca6-ac63-273401d692c6 5 t f
+4170 axisnum 轴数 Output \N \N \N \N \N \N 2019-08-05 14:38:38.951+08 2019-08-05 14:38:38.951+08 64576b12-36a8-4ca6-ac63-273401d692c6 5 t f
+4168 axieWeight 轴重 Output \N 0 kg 2019-08-05 14:37:53.129+08 2019-08-05 14:38:51.345+08 64576b12-36a8-4ca6-ac63-273401d692c6 5 t f
+4172 cmsLength 车长 Output \N \N \N \N \N \N cm 2019-08-05 14:39:22.763+08 2019-08-05 14:39:22.763+08 64576b12-36a8-4ca6-ac63-273401d692c6 5 t f
+4173 carType 车辆类型 Output \N \N \N \N \N \N 2019-08-05 14:40:01.389+08 2019-08-05 14:40:01.389+08 64576b12-36a8-4ca6-ac63-273401d692c6 5 t f
+4174 totalBase 总轴距 Output \N \N \N \N \N \N cm 2019-08-05 14:40:25.633+08 2019-08-05 14:40:25.633+08 64576b12-36a8-4ca6-ac63-273401d692c6 5 t f
+4175 axieSpeed 轴速 Output \N \N \N \N \N \N km/h 2019-08-05 14:40:54.679+08 2019-08-05 14:40:54.679+08 64576b12-36a8-4ca6-ac63-273401d692c6 5 t f
+4176 crossRoad 车道号 Output \N \N \N \N \N \N 2019-08-05 14:41:15.562+08 2019-08-05 14:41:15.562+08 64576b12-36a8-4ca6-ac63-273401d692c6 5 t f
+4178 licence 车牌 Output \N \N \N \N \N \N 2019-08-05 14:41:57.502+08 2019-08-05 14:41:57.502+08 64576b12-36a8-4ca6-ac63-273401d692c6 5 t f
+4177 overload 总重超限 Output \N 0 2019-08-05 14:41:34.746+08 2019-08-05 14:42:06.293+08 64576b12-36a8-4ca6-ac63-273401d692c6 5 t f
+4171 grossWeight 总重 Output \N 0 kg 2019-08-05 14:39:07.057+08 2019-08-05 14:44:52.925+08 64576b12-36a8-4ca6-ac63-273401d692c6 5 t f
+2386 grossWeight 总重 Output \N 0 kg 2018-07-04 16:58:46.024+08 2019-08-05 14:45:07.11+08 a3e8fc6e-6dc8-4d65-b479-4b2ee719c712 5 t f
+4180 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2019-08-05 18:12:12.142+08 2019-08-05 18:12:12.142+08 32f98475-6b76-4723-a2f5-b0b7aed04cf7 5 t f
+4181 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-08-06 11:01:21.441+08 2019-08-06 11:01:21.441+08 33bba333-0d20-43b4-a0e4-7dfaba4a9896 2 t f
+4182 humidity 湿度 Output \N \N \N 2 \N \N %RH 2019-08-06 11:02:04.907+08 2019-08-06 11:02:04.907+08 33bba333-0d20-43b4-a0e4-7dfaba4a9896 2 t f
+4183 trainXOffsets 轨道X方向偏移值 Output \N \N \N 5 \N \N \N 2019-08-07 10:36:25.747+08 2019-08-07 10:36:25.747+08 13b1b357-66cc-467f-9f25-078c46fe28b6 2 t f
+4184 trainYOffsets 轨道Y方向偏移值 Output \N \N \N 5 \N \N 2019-08-07 10:36:51.9+08 2019-08-07 10:36:51.9+08 13b1b357-66cc-467f-9f25-078c46fe28b6 2 t f
+4185 trainZOffsets 轨道Z方向偏移值 Output \N \N \N 5 \N \N 2019-08-07 10:37:28.03+08 2019-08-07 10:37:28.03+08 13b1b357-66cc-467f-9f25-078c46fe28b6 2 t f
+4198 rainfall 雨量 Output \N \N \N 2 99999999999999 -99999999999999 mm 2019-08-12 09:55:16.283+08 2019-08-12 09:55:16.283+08 f51d17c7-ad54-48ce-997c-13c1fb3ab155 2 t f
+1987 frequency 频率 Output \N 4 2000 1000 Hz 2018-03-26 14:36:53.267+08 2019-08-12 10:58:16.979+08 053f72a5-5576-48de-baa6-a2732ff863cc 2 t f
+1985 temperature 温度 Output \N 4 ℃ 2018-03-26 14:36:14.934+08 2019-08-12 11:00:23.334+08 43e14c1c-a425-4001-9886-f41df72945ea 2 t f
+4199 physicalvalue 位移 Output \N 3 \N \N mm 2019-08-13 17:52:48.309+08 2019-08-14 18:12:34.479+08 f31682e1-01ba-49e5-9639-886bee03cd1b 2 t f
+4197 zdirection z轴风速 Output \N 1 \N \N m/s 2019-08-08 18:08:11.302+08 2019-08-20 14:10:58.555+08 75960822-83b9-4eb4-accd-bbccb4f4d139 2 t f
+4196 ydirection y轴风速 Output \N 1 \N \N m/s 2019-08-08 18:07:37.684+08 2019-08-20 14:11:15.84+08 75960822-83b9-4eb4-accd-bbccb4f4d139 2 t f
+4195 xdirection x轴风速 Output \N 1 \N \N m/s 2019-08-08 18:05:53.665+08 2019-08-20 14:11:26.532+08 75960822-83b9-4eb4-accd-bbccb4f4d139 2 t f
+4192 speed 综合风速 Output \N 1 \N \N m/s 2019-08-08 18:00:49.93+08 2019-08-20 15:15:28.649+08 75960822-83b9-4eb4-accd-bbccb4f4d139 2 t f
+4193 direction 水平风向 Output \N 1 \N \N ° 2019-08-08 18:03:05.083+08 2019-08-20 15:15:40.274+08 75960822-83b9-4eb4-accd-bbccb4f4d139 2 t f
+4200 humidity 湿度 Output \N \N \N 2 100 0 %RH 2019-08-22 09:17:49.225+08 2019-08-22 09:17:49.225+08 6ddff0ae-11d3-40f2-8e9c-2ddf160489d8 2 t f
+4201 temperature 温度 Output \N 2 120 -40 ℃ 2019-08-22 09:18:29.503+08 2019-08-22 09:18:47.513+08 6ddff0ae-11d3-40f2-8e9c-2ddf160489d8 2 t f
+4202 frequency 频率 Output \N 4 2000 1000 Hz 2019-08-22 11:05:02.922+08 2019-08-22 11:05:39.45+08 de5f27da-de79-4d11-a4ca-65bc1a9f178a 2 t f
+4203 temperature 温度 Output \N \N \N 4 \N \N ℃ 2019-08-22 11:06:13.573+08 2019-08-22 11:06:13.573+08 de5f27da-de79-4d11-a4ca-65bc1a9f178a 2 t f
+4204 physicalvalue 荷载力 Output \N 4 105 -105 kN 2019-08-22 11:06:36.146+08 2019-08-22 11:06:53.633+08 de5f27da-de79-4d11-a4ca-65bc1a9f178a 2 t f
+4205 frequency 频率 Output \N 3 Hz 2019-08-22 11:28:17.466+08 2019-08-22 11:28:37.717+08 bdcb0ea7-10de-4b76-80bd-c01f036ccd33 2 t f
+4206 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-08-22 11:29:08.573+08 2019-08-22 11:29:08.573+08 bdcb0ea7-10de-4b76-80bd-c01f036ccd33 2 t f
+4207 am 幅值 Output \N 3 \N \N mv 2019-08-22 11:29:45.747+08 2019-08-22 11:32:07.921+08 bdcb0ea7-10de-4b76-80bd-c01f036ccd33 2 t f
+4208 physicalvalue 荷载 Output \N 4 300 -300 kN 2019-08-22 11:32:25.972+08 2019-08-22 11:32:43.58+08 bdcb0ea7-10de-4b76-80bd-c01f036ccd33 2 t f
+2240 am 幅值 Output \N 3 \N \N mv 2018-04-16 16:01:22.168+08 2019-08-22 11:36:38.989+08 2f72ef62-1d3b-4c4b-9308-5abb39a919d0 2 t f
+4209 pressure 压强 Output \N 3 \N \N kPa 2019-08-22 11:37:59.132+08 2019-08-22 11:38:07.93+08 6545a9cc-c2d6-4477-ba72-3db5a96d2ad8 2 t f
+4211 length 位移 Output \N 5 10 0 mm 2019-08-22 11:42:08.251+08 2019-08-22 11:42:26.586+08 8f177fbf-0fed-4306-a80b-6a2751f5fb9b 2 t f
+4212 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N 2019-08-22 11:52:30.278+08 2019-08-22 11:52:30.278+08 0f06e6d2-1ad3-4cad-92a2-c3a23e36206b 5 t f
+4213 length 位移 Output \N 5 \N \N mm 2019-08-22 14:09:52.804+08 2019-08-22 14:10:05.469+08 451d64cc-b568-44be-bace-184e24b4e827 2 t f
+4225 load Load Output \N 2 \N \N 2019-08-30 12:07:49.488+08 2019-09-20 11:20:12.698+08 2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13 2 t f
+4214 angley 角度 Output \N 2 30 -30 ° 2019-08-22 14:18:14.552+08 2019-08-22 14:18:39.205+08 616814a6-1aac-4201-b9cd-8164fd2198f0 2 t f
+4215 pressure 压力 Output \N 3 \N \N kPa 2019-08-22 14:21:13.272+08 2019-08-22 14:21:23.746+08 84e805aa-df66-43bf-9705-01e6b6c1e741 2 t f
+4216 rainfall 雨量 Output \N \N \N 1 \N \N mm/h 2019-08-22 14:29:15.796+08 2019-08-22 14:29:15.796+08 9fe86237-419a-40b2-890a-00e0bb8d4af7 2 t f
+4217 physicalvalue 加速度 Output \N \N \N \N \N \N g 2019-08-22 14:36:49.545+08 2019-08-22 14:36:49.545+08 aa7aaf91-1e54-411a-b174-22ee7c40c07e 5 t f
+4218 frequency 频率 Output \N \N \N \N \N \N HZ 2019-08-27 15:43:12.985+08 2019-08-27 15:43:12.985+08 5af22086-4fb6-4d39-b439-f1bfb44b2bcf 2 t f
+4219 temperature 温度 Output \N \N \N \N \N \N ℃ 2019-08-27 15:43:12.996+08 2019-08-27 15:43:12.996+08 5af22086-4fb6-4d39-b439-f1bfb44b2bcf 2 t f
+4220 physicalvalue 应力 Output \N \N \N \N \N \N kN 2019-08-27 15:43:13.013+08 2019-08-27 15:43:13.013+08 5af22086-4fb6-4d39-b439-f1bfb44b2bcf 2 t f
+4221 physicalvalue 雨量 Output \N \N \N 2 \N \N mm 2019-08-27 16:37:58.564+08 2019-08-27 16:37:58.564+08 7d5f863e-8fad-4de4-a417-48b29d1df1de 2 t f
+4230 rxbytes Rx Output \N 0 \N \N 2019-08-30 12:09:20.75+08 2019-09-20 11:20:43.831+08 2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13 1 t f
+4231 txbytes Tx Output \N 0 \N \N 2019-08-30 12:09:27.838+08 2019-09-20 11:20:52.642+08 2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13 1 t f
+4226 memfree Free Memory Output \N \N \N 2 \N \N 2019-08-30 12:08:20.354+08 2019-08-30 12:08:20.354+08 2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13 2 t f
+4224 board_temp Board Temperature Output \N 2 \N \N ℃ 2019-08-30 12:07:03.582+08 2019-08-30 13:59:40.962+08 2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13 2 t f
+4223 cpu_temp CPU Temperature Output \N 2 \N \N ℃ 2019-08-30 12:06:43.075+08 2019-08-30 14:00:02.969+08 2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13 2 t f
+4232 z Z位置 Output \N \N \N 4 \N \N mm 2019-09-04 13:53:37.96+08 2019-09-04 13:53:37.96+08 5664cb08-5e57-46c1-ac71-23220613639c 2 t f
+4233 y Y位置 Output \N \N \N 4 \N \N mm 2019-09-04 13:53:37.969+08 2019-09-04 13:53:37.969+08 5664cb08-5e57-46c1-ac71-23220613639c 2 t f
+4234 x X位置 Output \N \N \N 4 \N \N mm 2019-09-04 13:53:37.974+08 2019-09-04 13:53:37.974+08 5664cb08-5e57-46c1-ac71-23220613639c 2 t f
+4235 pressure 压强 Output \N 2 \N \N Kpa 2019-09-04 15:12:42.061+08 2019-09-04 15:13:03.074+08 034ff83b-34b0-48a5-9ccb-774a844901f8 2 t f
+4236 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-09-04 15:14:31.48+08 2019-09-04 15:14:31.48+08 034ff83b-34b0-48a5-9ccb-774a844901f8 2 t f
+4238 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-09-04 15:23:19.005+08 2019-09-04 15:23:19.005+08 58baaabd-502a-4f68-a62d-c0cfeddd7ec4 2 t f
+4237 length 距离 Output \N 2 \N \N m 2019-09-04 15:22:57.264+08 2019-09-20 16:46:35.837+08 58baaabd-502a-4f68-a62d-c0cfeddd7ec4 2 t f
+4240 pressure 压强 Output \N \N \N 2 \N \N Kpa 2019-09-04 15:48:38.14+08 2019-09-04 15:48:38.14+08 cf8445c6-e70a-419f-8a2f-ba7f44896604 2 t f
+4241 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-09-04 16:09:01.867+08 2019-09-04 16:09:01.867+08 a7d88dec-6a2c-4ab2-8b2c-864f8c9a5eab 2 t f
+4242 length 距离 Output \N \N \N 2 \N \N mm 2019-09-04 16:09:19.888+08 2019-09-04 16:09:19.888+08 a7d88dec-6a2c-4ab2-8b2c-864f8c9a5eab 2 t f
+4239 pressure 压强 Output \N 2 \N \N Kpa 2019-09-04 15:40:23.392+08 2019-09-04 16:15:59.85+08 e52f95e1-8fac-40af-a49a-baad70dab906 2 t f
+4243 temperature 温度 Output \N \N \N 1 \N \N ℃ 2019-09-09 14:46:43.713+08 2019-09-09 14:46:43.713+08 fad3ba62-b4d5-4a90-b1ec-8ca32c7ba7ac 2 t f
+4244 temperature 温度 Output \N \N \N 1 \N \N \N 2019-09-09 14:47:28.79+08 2019-09-09 14:47:28.79+08 bf758132-c5a1-4622-a2a7-38359c9cc0c5 2 t f
+4246 angley y轴角度 Output \N \N \N 1 \N \N ° 2019-09-10 14:47:17.493+08 2019-09-10 14:47:17.493+08 5dea6ab3-3969-4e41-804f-eff249d5d9ce 2 t f
+4247 anglex x轴角度 Output \N \N \N 1 \N \N ° 2019-09-10 14:47:17.498+08 2019-09-10 14:47:17.498+08 5dea6ab3-3969-4e41-804f-eff249d5d9ce 2 t f
+4245 temperature 温度 Output \N 1 \N \N ℃ 2019-09-10 14:47:17.485+08 2019-09-10 14:47:31.228+08 5dea6ab3-3969-4e41-804f-eff249d5d9ce 2 t f
+4257 pressure 压强 Output \N 3 \N \N kPa 2019-09-10 16:52:37.749+08 2019-09-10 16:52:37.749+08 7cb252c1-fad7-4874-bc56-417537d2d35d 2 t f
+4258 pressure 压强 Output \N 3 \N \N kPa 2019-09-10 16:52:37.76+08 2019-09-10 16:52:37.76+08 f1841b24-8182-4a14-ae68-c0bad62cec3f 2 t f
+4259 pressure 压强 Output \N 3 \N \N kPa 2019-09-10 16:52:37.769+08 2019-09-10 16:52:37.769+08 10c5b435-17c1-49f9-b45c-6a61c35f8071 2 t f
+4260 length 位移 Output \N \N \N 2 \N \N m 2019-09-11 10:15:40.129+08 2019-09-11 10:15:40.129+08 7a7c3f51-9057-44b5-b7e7-ea9b73c89a50 2 t f
+4261 humidity 土壤湿度 Output \N \N \N 2 \N \N %VOL 2019-09-11 11:36:46.278+08 2019-09-11 11:36:46.278+08 799b57ce-6f05-46b8-8d02-8b0e71997270 2 t f
+4262 temperature 土壤温度 Output \N \N \N 2 \N \N ℃ 2019-09-11 11:36:46.572+08 2019-09-11 11:36:46.572+08 799b57ce-6f05-46b8-8d02-8b0e71997270 2 t f
+4263 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-09-11 11:57:38.687+08 2019-09-11 11:57:38.687+08 1fdc974b-f062-45cb-910f-13b5a193e084 2 t f
+4264 pressure 气压 Output \N \N \N 2 \N \N kpa 2019-09-11 11:57:38.693+08 2019-09-11 11:57:38.693+08 1fdc974b-f062-45cb-910f-13b5a193e084 2 t f
+4265 humidity 湿度 Output \N \N \N 2 \N \N %RH 2019-09-11 11:57:38.698+08 2019-09-11 11:57:38.698+08 1fdc974b-f062-45cb-910f-13b5a193e084 2 t f
+4269 am 幅值 Output \N 4 \N \N mv 2019-09-16 13:50:25.129+08 2019-09-16 13:56:40.26+08 fdd4dd73-2235-45a2-98b3-c7838697717c 2 t f
+4270 am 幅值 Output \N \N \N 4 \N \N mv 2019-09-16 13:57:07.505+08 2019-09-16 13:57:07.505+08 ba74ef0e-3ec4-4203-9d65-17906c8f64d1 2 t f
+4271 am 幅值 Output \N \N \N 4 \N \N mv 2019-09-16 13:57:48.352+08 2019-09-16 13:57:48.352+08 82a15a43-5463-4d67-88ea-0a816235bd70 2 t f
+4272 am 幅值 Output \N \N \N 4 \N \N mv 2019-09-16 13:58:04.791+08 2019-09-16 13:58:04.791+08 4f92b0e6-a618-4221-8c58-169247d88bd0 2 t f
+4273 am 幅值 Output \N \N \N 4 \N \N mv 2019-09-16 13:59:54.536+08 2019-09-16 13:59:54.536+08 de5f27da-de79-4d11-a4ca-65bc1a9f178a 2 t f
+4274 am 幅值 Output \N \N \N 4 \N \N mv 2019-09-16 14:00:08.473+08 2019-09-16 14:00:08.473+08 053f72a5-5576-48de-baa6-a2732ff863cc 2 t f
+4275 am 幅值 Output \N \N \N 4 \N \N mv 2019-09-16 14:00:23.584+08 2019-09-16 14:00:23.584+08 43e14c1c-a425-4001-9886-f41df72945ea 2 t f
+4276 am 幅值 Output \N \N \N 4 \N \N mv 2019-09-16 14:01:02.259+08 2019-09-16 14:01:02.259+08 6c75e8aa-7e92-4611-8962-1c79a7ba9ef2 2 t f
+4277 am 幅值 Output \N \N \N 4 \N \N mv 2019-09-16 14:01:19.931+08 2019-09-16 14:01:19.931+08 f75af319-b305-463e-a3dc-78df902b61ef 2 t f
+4281 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-09-16 16:53:44.249+08 2019-09-16 16:53:44.249+08 b57f384f-11d7-499f-8e6f-5bcfbc054334 2 t f
+4282 humidity 湿度 Output \N \N \N 2 \N \N %RH 2019-09-16 16:54:17.248+08 2019-09-16 16:54:17.248+08 b57f384f-11d7-499f-8e6f-5bcfbc054334 2 t f
+4283 angleY 角度Y Output \N \N \N 4 \N \N \N 2019-09-17 09:37:05.908+08 2019-09-17 09:37:05.908+08 7915bd50-f8d3-4c3b-b9a6-fa1fe10f00e6 2 t f
+4284 angleX 角度X Output \N \N \N 4 \N \N 2019-09-17 09:38:01.729+08 2019-09-17 09:38:01.729+08 7915bd50-f8d3-4c3b-b9a6-fa1fe10f00e6 2 t f
+4285 power 电压 Output \N \N \N 4 \N \N 2019-09-17 09:38:28.179+08 2019-09-17 09:38:28.179+08 7915bd50-f8d3-4c3b-b9a6-fa1fe10f00e6 2 t f
+4286 voltage 电压 Output \N \N \N 2 \N \N v 2019-09-17 18:08:42.727+08 2019-09-17 18:08:42.727+08 1515cbb4-bda7-45b0-84c9-dedf0de93039 2 t f
+4287 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-09-18 11:53:33.581+08 2019-09-18 11:53:33.581+08 589695ad-b029-4c5e-9425-4946e80f3fb6 2 t f
+4288 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-09-18 11:54:13.104+08 2019-09-18 11:54:13.104+08 589695ad-b029-4c5e-9425-4946e80f3fb6 2 t f
+4289 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-09-18 11:56:41.659+08 2019-09-18 11:56:41.659+08 370eb26a-f879-4a01-a515-1b20a92c80f6 2 t f
+4290 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-09-18 11:57:09.474+08 2019-09-18 11:57:09.474+08 370eb26a-f879-4a01-a515-1b20a92c80f6 2 t f
+4291 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-09-18 15:36:40.65+08 2019-09-18 15:36:40.65+08 1515cbb4-bda7-45b0-84c9-dedf0de93039 2 t f
+4292 speed 风速 Output \N 3 \N \N m/s 2019-09-19 12:42:35.358+08 2019-09-19 12:42:41.973+08 c90e6cc1-21a1-44ce-9ab1-77c8808b3fe2 2 t f
+4293 direction 风向 Output \N 3 \N \N ° 2019-09-19 16:41:50.834+08 2019-09-19 16:42:00.656+08 ef5fc14d-bace-4e50-a536-81112feb65a8 2 t f
+2283 length 液位 Output \N 1 mm 2018-05-17 13:55:17.799+08 2019-09-23 09:08:20.841+08 5451cf1c-6aec-416c-9e9c-de8d9281110c 2 t f
+4295 physicalvalue2 应变相对值 Output \N \N \N 2 \N \N εμ 2019-09-24 11:35:40.433+08 2019-09-24 11:35:40.433+08 1155c110-625f-47ac-b8bb-f85733b50122 2 t f
+4297 physicalvalue2 应变相对值 Output \N \N \N 2 \N \N εμ 2019-09-24 11:35:42.997+08 2019-09-24 11:35:42.997+08 dd622fcd-0936-4ede-855b-50f5439f0fe1 2 t f
+4294 physicalvalue1 应变绝对值 Output \N 2 \N \N εμ 2019-09-24 11:35:40.166+08 2019-09-24 11:36:51.805+08 1155c110-625f-47ac-b8bb-f85733b50122 2 t f
+4296 physicalvalue1 应变绝对值 Output \N 2 \N \N εμ 2019-09-24 11:35:42.705+08 2019-09-24 11:38:26.118+08 dd622fcd-0936-4ede-855b-50f5439f0fe1 2 t f
+4298 physicalvalue1 应变绝对值 Output \N \N \N 2 \N \N εμ 2019-09-24 11:44:07.136+08 2019-09-24 11:44:07.136+08 35c6a683-69d3-43c9-af6e-ac9c72bab707 2 t f
+4299 physicalvalue2 应变相对值 Output \N \N \N 2 \N \N εμ 2019-09-24 11:44:07.142+08 2019-09-24 11:44:07.142+08 35c6a683-69d3-43c9-af6e-ac9c72bab707 2 t f
+4300 temperature 温度 Output \N \N \N 1 \N \N ℃ 2019-09-24 11:44:07.145+08 2019-09-24 11:44:07.145+08 35c6a683-69d3-43c9-af6e-ac9c72bab707 2 t f
+4304 temperature 温度 Output \N \N \N 1 \N \N ℃ 2019-09-24 11:49:24.13+08 2019-09-24 11:49:24.13+08 d08e3d1f-ce1b-4f62-a2b7-0acb0e48a942 2 t f
+4305 physicalvalue1 应变绝对值 Output \N \N \N 1 \N \N εμ 2019-09-24 11:49:24.135+08 2019-09-24 11:49:24.135+08 d08e3d1f-ce1b-4f62-a2b7-0acb0e48a942 2 t f
+4306 physicalvalue2 应变相对值 Output \N \N \N 1 \N \N εμ 2019-09-24 11:49:24.14+08 2019-09-24 11:49:24.14+08 d08e3d1f-ce1b-4f62-a2b7-0acb0e48a942 2 t f
+4310 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-09-25 10:49:31.385+08 2019-09-25 10:49:31.385+08 806e534e-417f-4802-a29d-23edbe5ac02d 2 t f
+4311 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-09-25 10:49:31.39+08 2019-09-25 10:49:31.39+08 806e534e-417f-4802-a29d-23edbe5ac02d 2 t f
+4313 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-09-25 11:07:08.056+08 2019-09-25 11:07:08.056+08 8dc2cfaa-524f-4b62-b655-1061f1a863ff 2 t f
+4315 physicalvalue 裂缝 Output \N 2 \N \N mm 2019-09-25 11:07:08.069+08 2019-09-25 11:07:46.627+08 8dc2cfaa-524f-4b62-b655-1061f1a863ff 2 t f
+4312 physicalvalue 压力 Output \N 2 \N \N kpa 2019-09-25 10:49:31.394+08 2019-09-25 11:11:28.174+08 806e534e-417f-4802-a29d-23edbe5ac02d 2 t f
+4316 physicalvalue 压力 Output \N \N \N 2 \N \N kpa 2019-09-25 11:19:02.079+08 2019-09-25 11:19:02.079+08 804133e0-c4a4-441e-acb9-a504734bbd62 2 t f
+4317 physicalvalue 温度 Output \N \N \N 2 \N \N ℃ 2019-09-25 11:24:05.389+08 2019-09-25 11:24:05.389+08 1bcbd000-415e-460a-a4f2-63d8f232bbf6 2 t f
+4318 physicalvalue 含水率 Output \N \N \N 2 \N \N % 2019-09-25 11:32:47.41+08 2019-09-25 11:32:47.41+08 d9ea813b-d066-472d-b08e-2436f6520e9f 2 t f
+4321 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-09-25 11:51:56.97+08 2019-09-25 11:51:56.97+08 a58243c4-2874-46f4-86b9-bc864f203eec 2 t f
+4322 physicalvalue 应变 Output \N \N \N 2 \N \N 2019-09-25 11:51:56.979+08 2019-09-25 11:51:56.979+08 a58243c4-2874-46f4-86b9-bc864f203eec 2 t f
+4323 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-09-25 11:54:59.653+08 2019-09-25 11:54:59.653+08 3d535ccc-ec09-44f8-b278-5e93d4ff79ae 2 t f
+4324 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-09-25 11:54:59.66+08 2019-09-25 11:54:59.66+08 3d535ccc-ec09-44f8-b278-5e93d4ff79ae 2 t f
+4325 physicalvalue 压力 Output \N \N \N 2 \N \N 2019-09-25 11:54:59.666+08 2019-09-25 11:54:59.666+08 3d535ccc-ec09-44f8-b278-5e93d4ff79ae 2 t f
+4347 displacement 位移 Output \N 5 \N \N mm 2019-09-29 17:58:51.061+08 2020-04-14 14:11:17.59+08 f34514f6-cca7-4baa-89e2-d57be4bd26e2 2 t f
+4326 voltage_ratio 电压比值 Output \N \N \N 2 \N \N \N 2019-09-25 17:09:56.748+08 2019-09-25 17:09:56.748+08 88ec5756-da5e-4fa0-b882-39727baf501b 2 t f
+4327 voltage_ratio 电压比值 Output \N \N \N 2 \N \N \N 2019-09-25 17:12:20.757+08 2019-09-25 17:12:20.757+08 a58243c4-2874-46f4-86b9-bc864f203eec 2 t f
+4328 voltage_ratio 电压比值 Output \N \N \N 2 \N \N \N 2019-09-25 17:13:37.234+08 2019-09-25 17:13:37.234+08 22da5422-3017-46d1-b154-701f9a128e3c 2 t f
+4329 temperature 温度 Output \N \N \N 2 \N \N 2019-09-25 17:16:37.679+08 2019-09-25 17:16:37.679+08 22da5422-3017-46d1-b154-701f9a128e3c 2 t f
+4330 physicalvalue 应变 Output \N 2 \N \N με 2019-09-25 17:17:25.754+08 2019-09-25 17:18:06.763+08 22da5422-3017-46d1-b154-701f9a128e3c 2 t f
+4331 voltage_ratio 电压比 Output \N \N \N 2 \N \N \N 2019-09-25 17:25:19.276+08 2019-09-25 17:25:19.276+08 f12659ce-b28d-4602-a33a-879eedbbbcaa 2 t f
+4332 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-09-25 17:25:19.281+08 2019-09-25 17:25:19.281+08 f12659ce-b28d-4602-a33a-879eedbbbcaa 2 t f
+4333 physicalvalue 应变 Output \N \N \N 2 \N \N με 2019-09-25 17:25:19.285+08 2019-09-25 17:25:19.285+08 f12659ce-b28d-4602-a33a-879eedbbbcaa 2 t f
+4334 anglex X轴角度 Output \N \N \N 4 \N \N ° 2019-09-29 11:29:54.098+08 2019-09-29 11:29:54.098+08 c1c93d31-aef7-48fb-bccc-f3f76ec1689a 2 t f
+4335 angley Y轴角度 Output \N \N \N 4 \N \N ° 2019-09-29 11:30:40.283+08 2019-09-29 11:30:40.283+08 c1c93d31-aef7-48fb-bccc-f3f76ec1689a 2 t f
+4337 Temp 温度 Output \N \N \N 2 \N \N ℃ 2019-09-29 13:32:55.656+08 2019-09-29 13:32:55.656+08 f3923edc-71cc-43bd-a3a5-48894181f917 2 t f
+4338 humidy 湿度 Output \N \N \N 2 \N \N % 2019-09-29 13:33:24.513+08 2019-09-29 13:33:24.513+08 f3923edc-71cc-43bd-a3a5-48894181f917 2 t f
+4339 winddirection 风向 Output \N \N \N 3 \N \N ° 2019-09-29 13:36:25.954+08 2019-09-29 13:36:25.954+08 8a578a79-fd96-4c69-8069-99e4e77dbbf9 2 t f
+4340 windspeed 风速 Output \N \N \N 3 \N \N m/s 2019-09-29 13:36:52.794+08 2019-09-29 13:36:52.794+08 8a578a79-fd96-4c69-8069-99e4e77dbbf9 2 t f
+4359 longitude 经度 Output \N \N \N \N \N \N 2019-10-09 15:37:53.901+08 2019-10-09 15:37:53.901+08 0a495f63-803f-4145-a48d-f54fa7f66d22 5 t f
+4342 use_lot 剩余车位 Output \N 0 999 0 2019-09-29 14:37:47.034+08 2019-09-29 14:38:32.493+08 b9a786ad-b6be-4aa7-9aca-43b903852ad0 1 t f
+4343 rain 雨量 Output \N \N \N 2 \N \N mm 2019-09-29 15:43:32.684+08 2019-09-29 15:43:32.684+08 b58daded-2fb1-4ea1-a68d-bdb20b492fdf 2 t f
+4346 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-09-29 17:54:50.826+08 2019-09-29 17:54:50.826+08 15e2a325-246a-4e43-8bea-784596788377 2 t f
+4348 displacement 位移 Output \N \N \N 5 \N \N \N 2019-09-29 18:00:07.583+08 2019-09-29 18:00:07.583+08 284b9b6d-6aaa-4ec4-a075-d2bb4817d6fe 2 t f
+4352 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-10-09 13:09:24.42+08 2019-10-09 13:09:24.42+08 c996ba97-9aa2-4102-9c84-4020cfe7bd30 2 t f
+4353 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-10-09 13:11:20.98+08 2019-10-09 13:11:20.98+08 6f7568b7-e717-4cf9-9eb4-2d7f91a8fed4 2 t f
+4355 frequency 频率 Output \N \N \N \N \N \N HZ 2019-10-09 14:21:17.732+08 2019-10-09 14:21:17.732+08 0a495f63-803f-4145-a48d-f54fa7f66d22 2 t f
+4358 bri 亮度(百分比) Output \N 0 100 0 % 2019-10-09 15:37:15.724+08 2019-10-09 15:37:24.989+08 0a495f63-803f-4145-a48d-f54fa7f66d22 1 t f
+4365 on 状态(1开灯,0关灯) Output \N \N \N \N 1 0 on为1是开灯为0是关灯 2019-10-09 15:43:10.205+08 2019-10-09 15:43:10.205+08 0a495f63-803f-4145-a48d-f54fa7f66d22 1 t f
+4366 gatewayName 网关名称 Output \N \N \N \N \N \N 2019-10-09 15:43:38.637+08 2019-10-09 15:43:38.637+08 0a495f63-803f-4145-a48d-f54fa7f66d22 5 t f
+4367 voltage 电压 Output \N 0 V 2019-10-09 15:43:55.324+08 2019-10-09 15:50:58.378+08 0a495f63-803f-4145-a48d-f54fa7f66d22 5 t f
+4368 online 在线状态(0不在线,1在线) Output \N 0 1 0 2019-10-09 15:44:27.428+08 2019-10-09 16:02:01.368+08 0a495f63-803f-4145-a48d-f54fa7f66d22 1 t f
+4364 pEnergy 有功电能 Output \N 0 KW 2019-10-09 15:41:43.406+08 2019-10-09 16:02:57.563+08 0a495f63-803f-4145-a48d-f54fa7f66d22 5 t f
+4362 latitude 纬度 Output \N 0 2019-10-09 15:40:01.872+08 2019-10-09 16:03:48.38+08 0a495f63-803f-4145-a48d-f54fa7f66d22 5 t f
+4363 runtime 运行时长 Output \N 0 小时 2019-10-09 15:40:59.271+08 2019-10-09 16:03:41.605+08 0a495f63-803f-4145-a48d-f54fa7f66d22 5 t f
+4357 alarm_status 告警状态 Output \N 0 10 0 2019-10-09 15:36:50.438+08 2019-10-09 16:04:02.449+08 0a495f63-803f-4145-a48d-f54fa7f66d22 1 t f
+4369 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-10-10 10:49:24.761+08 2019-10-10 10:49:24.761+08 4b89bcb9-ce24-4016-b105-5d950bd997b0 2 t f
+4372 physicalvalue 应变 Output \N \N \N 2 \N \N \N 2019-10-11 14:16:26.989+08 2019-10-11 14:16:26.989+08 46632020-7139-44de-a5e8-1fa4f067df7c 2 t f
+4373 temperature 温度 Output \N \N \N 2 \N \N 2019-10-11 14:16:26.996+08 2019-10-11 14:16:26.996+08 46632020-7139-44de-a5e8-1fa4f067df7c 2 t f
+4375 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-10-14 09:45:26.538+08 2019-10-14 09:45:26.538+08 bfcf9463-f865-4f10-9aff-33066bd6f245 2 t f
+4336 angle 角度 Output \N 4 \N \N ° 2019-09-29 11:36:11.741+08 2019-10-15 11:09:05.357+08 3f518643-909e-45c6-b816-3cabb1fd8af9 2 t f
+4371 temperature 温度 Output \N 3 \N \N ℃ 2019-10-11 13:28:39.383+08 2019-10-21 14:16:24.103+08 ec1d8582-b39b-4e28-a13d-0d8db91976b0 2 t f
+4370 physicalvalue 沉降 Output \N 5 \N \N mm 2019-10-11 13:27:56.766+08 2019-10-21 14:16:31.136+08 ec1d8582-b39b-4e28-a13d-0d8db91976b0 2 t f
+4354 lampPoleNumber 灯杆编号 Output \N 0 ” 无 2019-10-09 14:20:39.09+08 2019-10-23 09:30:41.768+08 0a495f63-803f-4145-a48d-f54fa7f66d22 5 t f
+4341 num 总车位 Output \N 0 999 0 2019-09-29 14:37:47.027+08 2019-10-29 10:32:05.928+08 b9a786ad-b6be-4aa7-9aca-43b903852ad0 1 t f
+4376 physicalvalue 裂缝 Output \N \N \N 2 \N \N mm 2019-10-14 09:47:26.069+08 2019-10-14 09:47:26.069+08 15c74504-c3c8-4739-8b58-10b0bcd0e83d 2 t f
+4377 physicalvalue 应力 Output \N \N \N 2 \N \N \N 2019-10-14 09:49:18.033+08 2019-10-14 09:49:18.033+08 d3206948-c73c-49b5-a593-473e8a6bc209 2 t f
+4378 physicalvalue 应变 Output \N \N \N 2 \N \N \N 2019-10-14 09:52:24.129+08 2019-10-14 09:52:24.129+08 0d6f1736-a3a0-4a8b-97dd-2cafc52767b4 2 t f
+4379 physicalvalue 水位 Output \N \N \N 2 \N \N mm 2019-10-14 11:39:41.258+08 2019-10-14 11:39:41.258+08 dc4ab80b-3b8a-4088-a468-06a078637a45 2 t f
+4380 cidCode 状态码 Output \N \N \N \N \N \N \N 2019-10-14 16:04:51.844+08 2019-10-14 16:04:51.844+08 e8620f1d-ab05-40a9-ba5f-197894c20a49 1 t f
+4381 cidMessage 状态信息 Output \N \N \N \N \N \N 2019-10-14 16:05:25.79+08 2019-10-14 16:05:25.79+08 e8620f1d-ab05-40a9-ba5f-197894c20a49 5 t f
+4382 voltage 电压 Output \N \N \N 2 \N \N V 2019-10-14 16:05:46.507+08 2019-10-14 16:05:46.507+08 e8620f1d-ab05-40a9-ba5f-197894c20a49 2 t f
+4383 signals 信号强度 Output \N \N \N \N \N \N dBm 2019-10-14 16:06:54.436+08 2019-10-14 16:06:54.436+08 e8620f1d-ab05-40a9-ba5f-197894c20a49 2 t f
+4384 longitude 经度 Output \N \N \N \N \N \N \N 2019-10-18 16:56:55.76+08 2019-10-18 16:56:55.76+08 ff5ffe96-ab0f-4368-af0c-52020e8d2188 5 t f
+4385 latitude 纬度 Output \N \N \N \N \N \N 2019-10-18 16:57:05.828+08 2019-10-18 16:57:05.828+08 ff5ffe96-ab0f-4368-af0c-52020e8d2188 5 t f
+4386 signal 信号强度 Output \N \N \N \N \N \N db 2019-10-18 16:57:26.732+08 2019-10-18 16:57:26.732+08 ff5ffe96-ab0f-4368-af0c-52020e8d2188 1 t f
+4388 usedelectric 日用电量 Output \N \N \N \N \N \N A 2019-10-18 16:59:38.482+08 2019-10-18 16:59:38.482+08 ff5ffe96-ab0f-4368-af0c-52020e8d2188 1 t f
+4389 temprature 温度 Output \N \N \N \N \N \N ℃ 2019-10-18 17:00:10.107+08 2019-10-18 17:00:10.107+08 ff5ffe96-ab0f-4368-af0c-52020e8d2188 2 t f
+4390 trash 垃圾量 Output \N \N \N \N \N \N % 2019-10-18 17:00:56.443+08 2019-10-18 17:00:56.443+08 ff5ffe96-ab0f-4368-af0c-52020e8d2188 1 t f
+4392 user 用户名 Output \N \N \N \N \N \N \N 2019-10-18 17:03:06.58+08 2019-10-18 17:03:06.58+08 1ff1e182-a5de-4d2f-bf40-72a40dbc29e6 5 t f
+4393 trashtype 垃圾类型 Output \N \N \N \N \N \N 2019-10-18 17:03:18.513+08 2019-10-18 17:03:18.513+08 1ff1e182-a5de-4d2f-bf40-72a40dbc29e6 5 t f
+4394 weight 投放重量 Output \N \N \N \N \N \N g 2019-10-18 17:03:37.166+08 2019-10-18 17:03:37.166+08 1ff1e182-a5de-4d2f-bf40-72a40dbc29e6 1 t f
+4425 physicalvalue 压力 Output \N 2 \N \N Mpa 2019-10-29 13:15:56.365+08 2019-10-30 16:08:09.986+08 b28c3db2-7ea7-4311-9b60-ccd4af997bcd 2 t f
+4397 value1 位移 Output \N 4 999999 -999999 mm 2019-10-20 23:37:40.754+08 2019-10-21 15:24:24.619+08 15e1b52d-2e21-410c-a442-b7c480cc07bb 2 t f
+4398 physicalvalue 应力 Output \N \N \N 2 \N \N Mpa 2019-10-22 13:47:04.727+08 2019-10-22 13:47:04.727+08 a0350e1d-e615-4e4b-ad8a-ad2a9142f6e8 2 t f
+4399 physicalvalue 位移 Output \N \N \N 2 \N \N mm 2019-10-22 13:48:51.941+08 2019-10-22 13:48:51.941+08 8d553a41-0d8b-46ae-8329-ff94e6009958 2 t f
+4402 alarmPic 异物入侵截图 Output \N 0 \N 2019-10-22 15:12:01.675+08 2019-10-22 15:13:07.265+08 592da43b-5c27-401b-9118-c0519ecbc5b3 5 t f
+4401 alarmMsg 报警信息 Output \N 0 2019-10-22 15:08:58.172+08 2019-10-22 16:04:07.634+08 592da43b-5c27-401b-9118-c0519ecbc5b3 1 t f
+4403 alarmRange 距离 Output \N 0 2019-10-22 15:12:58.574+08 2019-10-22 16:04:16.961+08 592da43b-5c27-401b-9118-c0519ecbc5b3 1 t f
+4404 physicalvalue 轴力 Output \N \N \N 2 \N \N KN 2019-10-23 10:16:21.725+08 2019-10-23 10:16:21.725+08 3da2f371-f622-4f8b-b700-52af31eaa6b1 2 t f
+4405 temperature 温度 Output \N \N \N \N \N \N ℃ 2019-10-23 10:16:21.73+08 2019-10-23 10:16:21.73+08 3da2f371-f622-4f8b-b700-52af31eaa6b1 2 t f
+4406 alarmSite 时间戳 Output \N \N \N \N \N \N \N 2019-10-23 16:10:15.21+08 2019-10-23 16:10:15.21+08 592da43b-5c27-401b-9118-c0519ecbc5b3 5 t f
+4407 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-10-24 10:08:34.333+08 2019-10-24 10:08:34.333+08 8d553a41-0d8b-46ae-8329-ff94e6009958 2 t f
+4408 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-10-24 10:09:08.619+08 2019-10-24 10:09:08.619+08 8d553a41-0d8b-46ae-8329-ff94e6009958 2 t f
+4409 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-10-24 10:09:34.094+08 2019-10-24 10:09:34.094+08 a0350e1d-e615-4e4b-ad8a-ad2a9142f6e8 2 t f
+4410 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-10-24 10:10:00.753+08 2019-10-24 10:10:00.753+08 a0350e1d-e615-4e4b-ad8a-ad2a9142f6e8 2 t f
+4411 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2019-10-24 11:23:42.802+08 2019-10-24 11:23:42.802+08 5b0c875e-50cb-493a-bb89-af4d008cc6e2 5 t f
+4412 physicalvalue 加速度 Output \N \N \N \N \N \N g 2019-10-24 11:47:52.699+08 2019-10-24 11:47:52.699+08 ee19f59c-9bf5-436f-b3e9-3298da57448f 5 t f
+4413 k 转换系数 Variable \N \N 1 16 9999999 -9999999 \N 2019-10-24 11:51:03.277+08 2019-10-24 11:51:03.277+08 c12bfa47-96c4-4d82-b508-7a8dc380df18 2 t f
+4414 physicalvalue 速度 Output \N \N \N \N \N \N mm/s 2019-10-24 11:51:03.284+08 2019-10-24 11:51:03.284+08 c12bfa47-96c4-4d82-b508-7a8dc380df18 5 t f
+192 oxy 溶解氧 Output \N 2 \N \N mg/L 2017-09-14 19:08:55.14+08 2019-10-24 14:14:44.36+08 4a08b319-23f2-4854-ad86-755792e575d4 2 t f
+2839 turbidity 浊度 Output \N 2 \N \N NTU 2018-10-31 18:21:10.59+08 2019-10-24 14:15:49.254+08 27a9d353-a3e8-4669-97b5-f467e52007c5 2 t f
+4423 length 水位 Output \N \N \N 2 \N \N m 2019-10-29 11:01:17.73+08 2019-10-29 11:01:17.73+08 d4227f5a-828a-4fe2-80c5-bb09da246b47 2 t f
+4427 source_data 温度 Output \N \N \N 4 \N \N \N 2019-10-30 09:10:10.168+08 2019-10-30 09:10:10.168+08 98d04a09-cee2-4b6f-8250-160a824e6e27 2 t f
+4424 physicalvalue 温度 Output \N 2 \N \N ℃ 2019-10-29 11:07:43.381+08 2019-10-30 16:08:21.54+08 b8b3091d-39a3-4ad0-9c49-ba4a7b85538d 2 t f
+4426 physicalvalue 应力 Output \N 2 \N \N Mpa 2019-10-29 13:17:34.726+08 2019-10-30 16:07:59.317+08 39cebd11-af5b-47ac-abfa-db8cef103a38 2 t f
+4433 str str Output \N \N \N \N \N \N \N 2019-10-31 16:02:28.078+08 2019-10-31 16:02:28.078+08 24a8c155-8275-4e27-8355-01550cda1374 5 t f
+4447 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-11-05 09:12:10.058+08 2019-11-05 09:12:10.058+08 2943a420-80a5-4d38-a6fe-68807623c20d 2 t f
+4448 easting X坐标 Output \N \N \N 2 \N \N mm 2019-11-05 14:08:54.724+08 2019-11-05 14:08:54.724+08 ee5dd742-7370-4a06-89b6-d40b3c6a0446 2 t f
+4449 northing Y坐标 Output \N \N \N 2 \N \N mm 2019-11-05 14:10:00.123+08 2019-11-05 14:10:00.123+08 ee5dd742-7370-4a06-89b6-d40b3c6a0446 2 t f
+4450 height Z坐标 Output \N \N \N 2 \N \N mm 2019-11-05 14:10:36.376+08 2019-11-05 14:10:36.376+08 ee5dd742-7370-4a06-89b6-d40b3c6a0446 2 t f
+4451 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2019-11-05 14:23:14.853+08 2019-11-05 14:23:14.853+08 e6b1563f-dafa-47e5-bb75-fa29d3388298 5 t f
+4510 msg 报警信息 Output \N \N \N \N \N \N \N 2019-11-07 11:18:26.102+08 2019-11-07 11:18:26.102+08 26634fa3-2b25-4428-8b50-8d4e899a0304 5 t f
+4436 xphysicalvalue x轴角度 Output \N 2 \N \N ° 2019-11-01 15:08:35.379+08 2019-11-08 10:58:45.823+08 0a0eef97-0c71-486a-a1ed-fc6ff48005ec 2 t f
+4434 yphysicalvalue y轴角度 Output \N 2 \N \N ° 2019-11-01 15:07:17.021+08 2019-11-08 10:59:02.404+08 0a0eef97-0c71-486a-a1ed-fc6ff48005ec 2 t f
+4513 yphysicalvalue y方向位移 Output \N \N \N 2 \N \N mm 2019-11-08 13:12:19.627+08 2019-11-08 13:12:19.627+08 7beea55a-7613-4d26-9003-485f6ae91791 2 t f
+4514 xphysicalvalue 位移 Output \N \N \N 2 \N \N mm 2019-11-08 13:43:46.061+08 2019-11-08 13:43:46.061+08 2cfd28c0-bd76-4a55-af3e-d21b921263cc 2 t f
+4512 xphysicalvalue x方向位移 Output \N 2 \N \N mm 2019-11-08 13:12:19.619+08 2019-11-08 14:33:53.212+08 7beea55a-7613-4d26-9003-485f6ae91791 2 t f
+4515 frequency 频率 Output \N 3 \N \N Hz 2019-11-09 10:08:12.295+08 2019-11-09 10:08:42.453+08 e76e23fb-b7d4-4991-8687-a3a31084ce60 2 t f
+4516 physicalvalue 水压 Output \N 4 0.2 0 MPa 2019-11-09 10:08:55.938+08 2019-11-09 10:10:11.287+08 e76e23fb-b7d4-4991-8687-a3a31084ce60 2 t f
+4517 temperature 温度 Output \N 2 \N \N ℃ 2019-11-09 10:11:04.848+08 2019-11-09 10:11:42.822+08 e76e23fb-b7d4-4991-8687-a3a31084ce60 2 t f
+4518 am 幅值 Output \N 3 \N \N mv 2019-11-09 10:11:25.415+08 2019-11-09 10:11:50.146+08 e76e23fb-b7d4-4991-8687-a3a31084ce60 2 t f
+4519 am 幅值 Output \N \N \N 3 \N \N mv 2019-11-09 10:13:50.621+08 2019-11-09 10:13:50.621+08 a556c96d-7976-48d5-9bb0-de9f1661654d 2 t f
+4521 temperature 温度 Output \N 2 \N \N ℃ 2019-11-09 10:14:57.517+08 2019-11-09 10:15:12.541+08 a556c96d-7976-48d5-9bb0-de9f1661654d 2 t f
+4523 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-11-09 10:17:53.051+08 2019-11-09 10:17:53.051+08 8ef82507-140e-4675-8de3-21d0d91759a0 2 t f
+4524 am 幅值 Output \N \N \N 3 \N \N mv 2019-11-09 10:18:23.96+08 2019-11-09 10:18:23.96+08 8ef82507-140e-4675-8de3-21d0d91759a0 2 t f
+4525 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-11-09 10:18:45.335+08 2019-11-09 10:18:45.335+08 8ef82507-140e-4675-8de3-21d0d91759a0 2 t f
+4526 physicalvalue 水压 Output \N 4 0.6 0 MPa 2019-11-09 10:19:38.173+08 2019-11-09 10:19:53.128+08 8ef82507-140e-4675-8de3-21d0d91759a0 2 t f
+4522 physicalvalue 水压 Output \N 4 0.4 0 MPa 2019-11-09 10:15:51.841+08 2019-11-09 10:21:22.48+08 a556c96d-7976-48d5-9bb0-de9f1661654d 2 t f
+4520 frequency 频率 Output \N 3 \N \N Hz 2019-11-09 10:14:23.107+08 2019-11-09 10:21:29.299+08 a556c96d-7976-48d5-9bb0-de9f1661654d 2 t f
+4527 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-11-09 10:23:45.336+08 2019-11-09 10:23:45.336+08 ae758eae-e892-4168-a8c1-4ec7ceb81e5e 2 t f
+4528 temperature 温度 Output \N 2 \N \N ℃ 2019-11-09 10:24:25.122+08 2019-11-09 10:24:38.95+08 ae758eae-e892-4168-a8c1-4ec7ceb81e5e 2 t f
+4529 am 幅值 Output \N \N \N 3 \N \N mv 2019-11-09 10:24:56.4+08 2019-11-09 10:24:56.4+08 ae758eae-e892-4168-a8c1-4ec7ceb81e5e 2 t f
+4530 physicalvalue 水压 Output \N 4 0.8 0 MPa 2019-11-09 10:25:50.065+08 2019-11-09 10:26:43.735+08 ae758eae-e892-4168-a8c1-4ec7ceb81e5e 2 t f
+4531 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-11-09 10:28:49.851+08 2019-11-09 10:28:49.851+08 fd40883e-bc42-4776-b631-e353c0761303 2 t f
+4532 physicalvalue 水压 Output \N \N \N 4 1 0 MPa 2019-11-09 10:29:40.057+08 2019-11-09 10:29:40.057+08 fd40883e-bc42-4776-b631-e353c0761303 2 t f
+4533 am 幅值 Output \N \N \N 3 \N \N mv 2019-11-09 10:30:03.663+08 2019-11-09 10:30:03.663+08 fd40883e-bc42-4776-b631-e353c0761303 2 t f
+4534 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-11-09 10:31:50.79+08 2019-11-09 10:31:50.79+08 fd40883e-bc42-4776-b631-e353c0761303 2 t f
+4535 am 幅值 Output \N \N \N 3 \N \N mv 2019-11-09 10:33:10.327+08 2019-11-09 10:33:10.327+08 1535b2bf-3149-430e-97d6-32972b838167 2 t f
+4536 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-11-09 10:33:39.446+08 2019-11-09 10:33:39.446+08 1535b2bf-3149-430e-97d6-32972b838167 2 t f
+4537 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-11-09 10:34:18.068+08 2019-11-09 10:34:18.068+08 1535b2bf-3149-430e-97d6-32972b838167 2 t f
+4538 physicalvalue 水压 Output \N \N \N 4 \N \N MPa 2019-11-09 10:35:00.117+08 2019-11-09 10:35:00.117+08 1535b2bf-3149-430e-97d6-32972b838167 2 t f
+4539 am 幅值 Output \N \N \N 3 \N \N mv 2019-11-09 10:39:04.379+08 2019-11-09 10:39:04.379+08 db875fbb-2c21-49f8-bac0-342276dec8ce 2 t f
+4540 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-11-09 10:39:26.313+08 2019-11-09 10:39:26.313+08 db875fbb-2c21-49f8-bac0-342276dec8ce 2 t f
+4541 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-11-09 10:39:52.674+08 2019-11-09 10:39:52.674+08 db875fbb-2c21-49f8-bac0-342276dec8ce 2 t f
+4542 physicalvalue 荷载力 Output \N 4 160 -160 KN 2019-11-09 10:40:55.946+08 2019-11-09 10:41:24.266+08 db875fbb-2c21-49f8-bac0-342276dec8ce 2 t f
+4543 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-11-09 10:42:46.503+08 2019-11-09 10:42:46.503+08 956b5d84-5687-4405-803b-c9d1790c6ceb 2 t f
+4544 am 幅值 Output \N \N \N 3 \N \N mv 2019-11-09 10:43:05.507+08 2019-11-09 10:43:05.507+08 956b5d84-5687-4405-803b-c9d1790c6ceb 2 t f
+4545 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-11-09 10:43:42.683+08 2019-11-09 10:43:42.683+08 956b5d84-5687-4405-803b-c9d1790c6ceb 2 t f
+4549 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-11-09 10:48:28.981+08 2019-11-09 10:48:28.981+08 3746c474-0d8e-4d5b-8ca8-eb80c3a46d87 2 t f
+4546 physicalvalue 荷载力 Output \N 4 136 -136 KN 2019-11-09 10:44:14.694+08 2019-11-09 10:44:39.928+08 956b5d84-5687-4405-803b-c9d1790c6ceb 2 t f
+4547 am 幅值 Output \N 3 \N \N mv 2019-11-09 10:47:06.014+08 2019-11-09 10:47:55.619+08 3746c474-0d8e-4d5b-8ca8-eb80c3a46d87 2 t f
+4548 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-11-09 10:47:46.284+08 2019-11-09 10:47:46.284+08 3746c474-0d8e-4d5b-8ca8-eb80c3a46d87 2 t f
+4550 physicalvalue 荷载力 Output \N 4 105 -105 KN 2019-11-09 10:49:12.577+08 2019-11-09 10:49:29.68+08 3746c474-0d8e-4d5b-8ca8-eb80c3a46d87 2 t f
+4551 am 幅值 Output \N \N \N 3 \N \N mv 2019-11-09 10:51:19.403+08 2019-11-09 10:51:19.403+08 2eca1e8b-3f1a-4272-94c5-bfa4f8e6ab9e 2 t f
+4552 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-11-09 10:51:39.677+08 2019-11-09 10:51:39.677+08 2eca1e8b-3f1a-4272-94c5-bfa4f8e6ab9e 2 t f
+4553 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-11-09 10:52:04.084+08 2019-11-09 10:52:04.084+08 2eca1e8b-3f1a-4272-94c5-bfa4f8e6ab9e 2 t f
+4554 physicalvalue 荷载力 Output \N 4 75 -75 KN 2019-11-09 10:52:25.414+08 2019-11-09 10:52:41.98+08 2eca1e8b-3f1a-4272-94c5-bfa4f8e6ab9e 2 t f
+4555 xphysicalvalue x轴角度 Output \N \N \N 2 \N \N ° 2019-11-11 11:44:40.438+08 2019-11-11 11:44:40.438+08 a1b787fe-741a-4eef-a65b-531baff33f6e 2 t f
+4556 yphysicalvalue y轴角度 Output \N \N \N 2 \N \N ° 2019-11-11 11:45:13.101+08 2019-11-11 11:45:13.101+08 a1b787fe-741a-4eef-a65b-531baff33f6e 2 t f
+4557 physicalvalue 加速度 Output \N \N \N \N \N \N g 2019-11-13 11:49:07.14+08 2019-11-13 11:49:07.14+08 f7ccec63-ff80-4c16-8c21-8a5f7c3cc971 5 t f
+4558 physicalvalue 水压 Output \N 4 \N \N MPa 2019-11-13 16:52:39.068+08 2019-11-13 16:54:59.899+08 6fac5183-d1d7-4dcd-9507-e29c2eb60419 2 t f
+4559 am 幅值 Output \N \N \N 3 \N \N mv 2019-11-13 16:55:37.147+08 2019-11-13 16:55:37.147+08 6fac5183-d1d7-4dcd-9507-e29c2eb60419 2 t f
+4560 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-11-13 16:56:07.563+08 2019-11-13 16:56:07.563+08 6fac5183-d1d7-4dcd-9507-e29c2eb60419 2 t f
+4561 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-11-13 16:56:44.215+08 2019-11-13 16:56:44.215+08 6fac5183-d1d7-4dcd-9507-e29c2eb60419 2 t f
+4562 xlength x方向位移 Output \N \N \N 2 \N \N mm 2019-11-14 14:08:05.172+08 2019-11-14 14:08:05.172+08 354d4c65-0d09-4272-8748-3e53d2c1668f 2 t f
+4563 ylength y方向位移 Output \N \N \N 2 \N \N mm 2019-11-14 14:08:45.469+08 2019-11-14 14:08:45.469+08 354d4c65-0d09-4272-8748-3e53d2c1668f 2 t f
+4564 physicalvalue 角度 Output \N 6 \N \N \N 2019-11-14 14:59:09.182+08 2019-11-14 14:59:45.655+08 553043f1-1489-49e7-8685-476b53719b37 2 t f
+4565 frequency 频率 Output \N \N \N 6 \N \N HZ 2019-11-14 15:00:20.64+08 2019-11-14 15:00:20.64+08 553043f1-1489-49e7-8685-476b53719b37 2 t f
+4566 physicalvalue 加速度 Output \N \N \N 6 \N \N \N 2019-11-14 15:04:24.31+08 2019-11-14 15:04:24.31+08 c6e9864f-e7aa-46c6-bc38-7cf89f82005b 2 t f
+4567 frequency 频率 Output \N \N \N 6 \N \N HZ 2019-11-14 15:05:03.605+08 2019-11-14 15:05:03.605+08 c6e9864f-e7aa-46c6-bc38-7cf89f82005b 2 t f
+4568 physicalvalue 位移 Output \N \N \N 6 \N \N \N 2019-11-14 15:08:21.178+08 2019-11-14 15:08:21.178+08 7e54985e-4293-452f-bd1e-27d54e8c9259 2 t f
+4569 frequency 频率 Output \N 6 \N \N HZ 2019-11-14 15:08:47.343+08 2019-11-14 15:09:06.153+08 7e54985e-4293-452f-bd1e-27d54e8c9259 2 t f
+4570 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-11-15 14:31:51.278+08 2019-11-15 14:31:51.278+08 52567547-16d9-4a75-b748-d64c0a0b01cf 2 t f
+4571 physicalvalue 应变 Output \N \N \N 3 3000 -3000 με 2019-11-15 14:32:40.462+08 2019-11-15 14:32:40.462+08 52567547-16d9-4a75-b748-d64c0a0b01cf 2 t f
+4572 am 幅值 Output \N \N \N 3 \N \N mv 2019-11-15 14:33:12.781+08 2019-11-15 14:33:12.781+08 52567547-16d9-4a75-b748-d64c0a0b01cf 2 t f
+4573 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-11-15 14:33:45.817+08 2019-11-15 14:33:45.817+08 52567547-16d9-4a75-b748-d64c0a0b01cf 2 t f
+4577 physicalvalue 角度 Output \N \N \N 2 \N \N ° 2019-11-18 09:58:17.661+08 2019-11-18 09:58:17.661+08 b4cd49a5-53df-4791-aece-50f8fe3be0e3 2 t f
+4579 totalPower 总电量 Output \N \N \N 2 \N \N kWh 当前有功总电量(码表) 2019-11-20 09:19:16.328+08 2019-11-20 09:19:16.328+08 403ed6b4-3b5f-464a-8da3-51142a22d535 2 t f
+4580 APhaseCurrent A相电流 Output \N \N \N 2 \N \N A A相电流 2019-11-20 09:21:10.571+08 2019-11-20 09:21:10.571+08 403ed6b4-3b5f-464a-8da3-51142a22d535 2 t f
+4582 instantActivePower 瞬时有功功率 Output \N \N \N 2 \N \N kW 瞬时有功功率 2019-11-20 09:26:39.389+08 2019-11-20 09:26:39.389+08 403ed6b4-3b5f-464a-8da3-51142a22d535 2 t f
+4583 purchaseTimes 购电次数 Output \N \N \N \N \N \N 次 购电次数 2019-11-20 09:29:30.07+08 2019-11-20 09:29:30.07+08 403ed6b4-3b5f-464a-8da3-51142a22d535 1 t f
+4584 purchaseAnergy 购电量 Output \N \N \N 2 \N \N kWh 购电量 2019-11-20 09:33:13.373+08 2019-11-20 09:33:13.373+08 403ed6b4-3b5f-464a-8da3-51142a22d535 2 t f
+4585 remainAnergy 剩余电量 Output \N \N \N 2 \N \N kWh 剩余电量 2019-11-20 09:38:10.095+08 2019-11-20 09:38:10.095+08 403ed6b4-3b5f-464a-8da3-51142a22d535 2 t f
+4578 length 液位 Output \N 3 \N \N m 2019-11-19 16:14:56.466+08 2019-11-20 10:44:53.751+08 84e785f0-1280-4066-ac32-66fc93019612 2 t f
+4586 physicalvalue 物理量 Output \N \N \N 6 \N \N MPa 2019-11-20 14:41:18.575+08 2019-11-20 14:41:18.575+08 7979ff13-c8b1-4bee-986a-094e12da9553 2 t f
+4587 frequency 频率 Output \N \N \N 6 \N \N Hz 2019-11-20 14:42:03.073+08 2019-11-20 14:42:03.073+08 7979ff13-c8b1-4bee-986a-094e12da9553 2 t f
+4588 frequency 频率 Output \N \N \N 6 \N \N Hz 2019-11-20 14:44:10.552+08 2019-11-20 14:44:10.552+08 5f39116e-f4a1-499e-85da-b67e0f93a044 2 t f
+4589 physicalvalue 物理量 Output \N \N \N 6 \N \N MPa 2019-11-20 14:44:53.713+08 2019-11-20 14:44:53.713+08 5f39116e-f4a1-499e-85da-b67e0f93a044 2 t f
+4590 frequency 频率 Output \N \N \N 6 \N \N Hz 2019-11-20 14:45:52.713+08 2019-11-20 14:45:52.713+08 5ffc3472-8381-4000-a185-1f3a8d4ed263 2 t f
+4591 physicalvalue 物理量 Output \N \N \N 6 \N \N mm 2019-11-20 14:46:51.91+08 2019-11-20 14:46:51.91+08 5ffc3472-8381-4000-a185-1f3a8d4ed263 2 t f
+4592 frequency 频率 Output \N \N \N 6 \N \N Hz 2019-11-20 14:47:35.464+08 2019-11-20 14:47:35.464+08 aef1a81a-27fd-4648-9208-00b719cea8b9 2 t f
+4593 physicalvalue 物理量 Output \N \N \N 6 \N \N kN 2019-11-20 14:48:52.787+08 2019-11-20 14:48:52.787+08 aef1a81a-27fd-4648-9208-00b719cea8b9 2 t f
+4594 frequency 频率 Output \N \N \N 6 \N \N Hz 2019-11-20 14:50:06.531+08 2019-11-20 14:50:06.531+08 4b24c098-2d80-49b0-89b6-9092c52053bd 2 t f
+4595 physicalvalue 物理量 Output \N \N \N 6 \N \N MPa 2019-11-20 14:51:09.375+08 2019-11-20 14:51:09.375+08 4b24c098-2d80-49b0-89b6-9092c52053bd 2 t f
+4596 frequency 频率 Output \N \N \N 6 \N \N Hz 2019-11-20 14:52:27.202+08 2019-11-20 14:52:27.202+08 ad636ee6-c6e4-4d46-a2a6-cd1e8acc8e51 2 t f
+4597 physicalvalue 物理量 Output \N \N \N 6 \N \N MPa 2019-11-20 14:53:23.159+08 2019-11-20 14:53:23.159+08 ad636ee6-c6e4-4d46-a2a6-cd1e8acc8e51 2 t f
+4598 frequency 频率 Output \N \N \N 6 \N \N Hz 2019-11-20 14:53:59.277+08 2019-11-20 14:53:59.277+08 d17ee4be-2675-4d98-aab6-4b6ec7c271a6 2 t f
+4599 physicalvalue 物理量 Output \N \N \N 6 \N \N με 2019-11-20 14:55:25.531+08 2019-11-20 14:55:25.531+08 d17ee4be-2675-4d98-aab6-4b6ec7c271a6 2 t f
+4600 frequency 频率 Output \N \N \N 6 \N \N Hz 2019-11-20 14:56:06.364+08 2019-11-20 14:56:06.364+08 0475dd0e-b02f-4a19-a933-dee73c76ef6a 2 t f
+4601 physicalvalue 物理量 Output \N \N \N 6 \N \N με 2019-11-20 14:56:51.556+08 2019-11-20 14:56:51.556+08 0475dd0e-b02f-4a19-a933-dee73c76ef6a 2 t f
+4581 APhaseVoltage A相电压 Output \N 1 \N \N V A相电压V 2019-11-20 09:22:43.497+08 2019-11-21 08:56:58.9+08 403ed6b4-3b5f-464a-8da3-51142a22d535 2 t f
+4602 statusWord 状态字 Output \N \N \N \N \N \N \N 2019-11-21 09:22:09.524+08 2019-11-21 09:22:09.524+08 403ed6b4-3b5f-464a-8da3-51142a22d535 5 t f
+4603 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-11-21 09:34:16.444+08 2019-11-21 09:34:16.444+08 42a0ae36-f70b-40f3-8883-e04b90d177b1 2 t f
+4604 humidity 湿度 Output \N \N \N 2 \N \N %RH 2019-11-21 09:34:35.265+08 2019-11-21 09:34:35.265+08 42a0ae36-f70b-40f3-8883-e04b90d177b1 2 t f
+4609 anglex X方向角度 Output \N 4 30 -30 ° 2019-11-21 11:47:17.61+08 2019-11-21 11:47:17.61+08 0666d951-058b-4519-ba87-4889fda65f5d 2 t f
+4610 temperature 温度 Output \N 2 70 -25 ℃ 2019-11-21 11:47:17.615+08 2019-11-21 11:47:17.615+08 0666d951-058b-4519-ba87-4889fda65f5d 2 t f
+4611 angley Y方向角度 Output \N 4 30 -30 ° 2019-11-21 11:47:17.619+08 2019-11-21 11:47:17.619+08 0666d951-058b-4519-ba87-4889fda65f5d 2 t f
+4612 angley Y轴角度 Output \N 2 30 -30 ° 2019-11-21 11:47:17.629+08 2019-11-21 11:47:17.629+08 3d75f1d4-c46d-443a-ba67-ea09c7642e11 2 t f
+4613 temperature 温度 Output \N 2 70 -25 ℃ 2019-11-21 11:47:17.633+08 2019-11-21 11:47:17.633+08 3d75f1d4-c46d-443a-ba67-ea09c7642e11 2 t f
+4614 anglex X轴角度 Output \N 2 30 -30 ° 2019-11-21 11:47:17.636+08 2019-11-21 11:47:17.636+08 3d75f1d4-c46d-443a-ba67-ea09c7642e11 2 t f
+4615 anglex X方向角度 Output \N \N \N 4 30 -30 ° 2019-11-21 11:47:17.644+08 2019-11-21 11:47:17.644+08 746f3ce2-5918-4156-bee1-cf4e3a0c51ca 2 t f
+4616 angley Y方向角度 Output \N 4 30 -30 ° 2019-11-21 11:47:17.647+08 2019-11-21 11:47:17.647+08 746f3ce2-5918-4156-bee1-cf4e3a0c51ca 2 t f
+4617 temperature 温度 Output \N 2 70 -25 ℃ 2019-11-21 11:47:17.651+08 2019-11-21 11:47:17.651+08 746f3ce2-5918-4156-bee1-cf4e3a0c51ca 2 t f
+4618 temperature 温度 Output \N \N \N 2 70 -25 ℃ 2019-11-21 11:47:17.66+08 2019-11-21 11:47:17.66+08 a5bf8b8f-51ec-4e4c-8ffe-9d01644f9395 2 t f
+4619 angley Y方向角度 Output \N \N \N 4 30 -30 ° 2019-11-21 11:47:17.663+08 2019-11-21 11:47:17.663+08 a5bf8b8f-51ec-4e4c-8ffe-9d01644f9395 2 t f
+4620 anglex X方向角度 Output \N \N \N 4 30 -30 ° 2019-11-21 11:47:17.666+08 2019-11-21 11:47:17.666+08 a5bf8b8f-51ec-4e4c-8ffe-9d01644f9395 2 t f
+4621 anglex X方向角度 Output \N 4 30 -30 ° 2019-11-21 11:47:19.142+08 2019-11-21 11:47:19.142+08 f745e8e9-041e-4578-8568-38fec10b69c1 2 t f
+4622 temperature 温度 Output \N 2 70 -25 ℃ 2019-11-21 11:47:19.149+08 2019-11-21 11:47:19.149+08 f745e8e9-041e-4578-8568-38fec10b69c1 2 t f
+4625 temperature 温度 Output \N 2 70 -25 ℃ 2019-11-21 11:47:19.176+08 2019-11-21 11:47:19.176+08 202ac1b5-9f83-4de2-b423-a27607b53f28 2 t f
+4626 anglex X轴角度 Output \N 2 30 -30 ° 2019-11-21 11:47:19.182+08 2019-11-21 11:47:19.182+08 202ac1b5-9f83-4de2-b423-a27607b53f28 2 t f
+4627 anglex X方向角度 Output \N \N \N 4 30 -30 ° 2019-11-21 11:47:19.196+08 2019-11-21 11:47:19.196+08 7afd8b52-1811-40be-88ec-64173b08f522 2 t f
+4629 temperature 温度 Output \N 2 70 -25 ℃ 2019-11-21 11:47:19.207+08 2019-11-21 11:47:19.207+08 7afd8b52-1811-40be-88ec-64173b08f522 2 t f
+4630 temperature 温度 Output \N \N \N 2 70 -25 ℃ 2019-11-21 11:47:19.223+08 2019-11-21 11:47:19.223+08 8b29ca1c-631b-4899-b819-7fb1a9d8cd63 2 t f
+4632 anglex X方向角度 Output \N \N \N 4 30 -30 ° 2019-11-21 11:47:19.234+08 2019-11-21 11:47:19.234+08 8b29ca1c-631b-4899-b819-7fb1a9d8cd63 2 t f
+4633 length 位移 Output \N \N \N 2 \N \N mm 2019-11-21 14:02:04.952+08 2019-11-21 14:02:04.952+08 4b017286-f61b-4777-bbdd-aa7cab984440 2 t f
+4634 length 距离 Output \N \N \N 2 \N \N m 2019-11-21 15:14:02.626+08 2019-11-21 15:14:02.626+08 c7eb65e8-262a-42fe-a9a2-3a77e07a84c9 2 t f
+4635 length 距离 Output \N \N \N 2 \N \N m 2019-11-21 15:17:49.691+08 2019-11-21 15:17:49.691+08 b3db1020-2db0-4931-ab2e-2661c6b459ff 2 t f
+4636 length 距离 Output \N \N \N 2 \N \N m 2019-11-21 15:17:51.65+08 2019-11-21 15:17:51.65+08 22a573d1-d13d-447f-9984-1335ac15e1be 2 t f
+4637 length 距离 Output \N \N \N 3 \N \N m 2019-11-21 16:07:12.566+08 2019-11-21 16:07:12.566+08 bcb2585f-9765-4795-8033-eaf0d467ab1c 2 t f
+4638 length 距离 Output \N \N \N 3 \N \N m 2019-11-21 16:15:06.52+08 2019-11-21 16:15:06.52+08 5fa7d170-eda6-4d15-a767-25fc37a090bc 2 t f
+4639 length 距离 Output \N \N \N 3 \N \N m 2019-11-21 16:15:07.784+08 2019-11-21 16:15:07.784+08 61e1f659-3d27-4958-8881-d4e6103c309b 2 t f
+4649 physicalvalue 应变 Output \N \N \N 4 1500 -1500 με 2019-11-22 15:32:53.039+08 2019-11-22 15:32:53.039+08 cfbc93ae-34de-4b5c-b78f-393d80e6be1e 2 t f
+4654 temperature 温度 Output \N \N \N 4 \N \N ℃ 2019-11-22 15:38:44.579+08 2019-11-22 15:38:44.579+08 61e2ddde-025e-4a3a-b03e-49cddfe2c09c 2 t f
+4667 frequency 频率 Output \N 3 \N \N Hz 2019-11-26 10:06:15.021+08 2019-11-26 10:06:25.084+08 169af4ea-ded9-488d-8a88-96e79e1526b0 2 t f
+4640 length 距离 Output \N \N \N 3 \N \N m 2019-11-21 16:17:19.735+08 2019-11-21 16:17:19.735+08 ab533430-50a9-42f0-be2d-3f49990cd470 2 t f
+4344 temperature 温度 Output \N 2 ℃ 2019-09-29 17:53:20.283+08 2019-11-22 10:57:49.43+08 15e2a325-246a-4e43-8bea-784596788377 2 t f
+4345 physicalvalue 位移 Output \N 3 mm 2019-09-29 17:54:17.286+08 2019-11-22 10:58:00.248+08 15e2a325-246a-4e43-8bea-784596788377 2 t f
+4643 temperature 温度 Output \N 4 80 -40 ℃ 2019-11-22 15:26:29.217+08 2019-11-22 15:26:38.492+08 00d1f8ae-26c7-4fde-93ee-415598dab3dd 2 t f
+4644 physicalvalue 应变 Output \N 4 5000 -5000 με 2019-11-22 15:27:41.929+08 2019-11-22 15:27:54.606+08 00d1f8ae-26c7-4fde-93ee-415598dab3dd 2 t f
+4645 frequency 频率 Output \N 4 \N \N Hz 2019-11-22 15:28:30.252+08 2019-11-22 15:28:38.004+08 363b62ae-2ccd-4c86-915d-03380bc9d89c 2 t f
+4646 frequency 频率 Output \N \N \N 4 \N \N Hz 2019-11-22 15:29:04.192+08 2019-11-22 15:29:04.192+08 8693e382-e7e6-4efa-8583-d0251cb0b360 2 t f
+4647 frequency 频率 Output \N \N \N 4 \N \N Hz 2019-11-22 15:30:13.075+08 2019-11-22 15:30:13.075+08 00d1f8ae-26c7-4fde-93ee-415598dab3dd 2 t f
+4648 temperature 温度 Output \N \N \N 4 \N \N ℃ 2019-11-22 15:32:18.009+08 2019-11-22 15:32:18.009+08 cfbc93ae-34de-4b5c-b78f-393d80e6be1e 2 t f
+4650 frequency 频率 Output \N \N \N 4 \N \N Hz 2019-11-22 15:33:08.887+08 2019-11-22 15:33:08.887+08 cfbc93ae-34de-4b5c-b78f-393d80e6be1e 2 t f
+4651 frequency 频率 Output \N \N \N 4 \N \N Hz 2019-11-22 15:35:47.512+08 2019-11-22 15:35:47.512+08 6dd33289-d530-4c8b-a41c-aa946291a7df 2 t f
+4652 temperature 温度 Output \N \N \N 4 \N \N ℃ 2019-11-22 15:36:17.607+08 2019-11-22 15:36:17.607+08 6dd33289-d530-4c8b-a41c-aa946291a7df 2 t f
+4653 physicalvalue 应变 Output \N \N \N 4 3000 -3000 με 2019-11-22 15:36:51.654+08 2019-11-22 15:36:51.654+08 6dd33289-d530-4c8b-a41c-aa946291a7df 2 t f
+4655 physicalvalue 应变 Output \N \N \N 4 3000 -3000 με 2019-11-22 15:39:07.182+08 2019-11-22 15:39:07.182+08 61e2ddde-025e-4a3a-b03e-49cddfe2c09c 2 t f
+4656 frequency 频率 Output \N \N \N 4 \N \N Hz 2019-11-22 15:39:24.282+08 2019-11-22 15:39:24.282+08 61e2ddde-025e-4a3a-b03e-49cddfe2c09c 2 t f
+4657 length 位移 Output \N \N \N 2 \N \N mm 2019-11-25 13:12:43.522+08 2019-11-25 13:12:43.522+08 03a86ebd-9100-429c-a1a2-edacea7380c3 2 t f
+4658 speed 风速 Output \N \N \N 2 \N \N m/s 2019-11-25 17:26:40.005+08 2019-11-25 17:26:40.005+08 e95f9ff7-5a7c-495d-87c9-993463fb3945 2 t f
+4659 humidity 湿度 Output \N \N \N 2 \N \N %RH 2019-11-25 17:26:40.01+08 2019-11-25 17:26:40.01+08 e95f9ff7-5a7c-495d-87c9-993463fb3945 2 t f
+4660 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-11-25 17:26:40.014+08 2019-11-25 17:26:40.014+08 e95f9ff7-5a7c-495d-87c9-993463fb3945 2 t f
+4661 direction 风向 Output \N \N \N 2 \N \N ° 2019-11-25 17:26:40.02+08 2019-11-25 17:26:40.02+08 e95f9ff7-5a7c-495d-87c9-993463fb3945 2 t f
+4662 pm10 PM10 Output \N \N \N 2 \N \N μg/m³ 2019-11-25 17:26:40.023+08 2019-11-25 17:26:40.023+08 e95f9ff7-5a7c-495d-87c9-993463fb3945 2 t f
+4663 noise 噪声 Output \N \N \N 2 \N \N dB 2019-11-25 17:26:40.026+08 2019-11-25 17:26:40.026+08 e95f9ff7-5a7c-495d-87c9-993463fb3945 2 t f
+4664 pm25 PM2.5 Output \N \N \N 2 \N \N μg/m³ 2019-11-25 17:26:40.029+08 2019-11-25 17:26:40.029+08 e95f9ff7-5a7c-495d-87c9-993463fb3945 2 t f
+4665 temperature 温度 Output \N 2 \N \N ℃ 2019-11-26 10:03:35.695+08 2019-11-26 10:03:46.246+08 169af4ea-ded9-488d-8a88-96e79e1526b0 2 t f
+4666 physicalvalue 轴力 Output \N 4 \N \N kN 2019-11-26 10:04:06.359+08 2019-11-26 10:06:00.122+08 169af4ea-ded9-488d-8a88-96e79e1526b0 2 t f
+4668 am 幅值 Output \N 3 \N \N mv 2019-11-26 10:06:44.574+08 2019-11-26 10:06:52.796+08 169af4ea-ded9-488d-8a88-96e79e1526b0 2 t f
+4669 frequency 频率 Output \N 3 Hz 2019-11-26 10:08:11.035+08 2019-11-26 10:10:27.308+08 3081c848-b498-42a0-9887-5fba5a8eb28f 2 t f
+4670 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-11-26 10:11:16.162+08 2019-11-26 10:11:16.162+08 3081c848-b498-42a0-9887-5fba5a8eb28f 2 t f
+4671 am 幅值 Output \N \N \N 3 \N \N mv 2019-11-26 10:11:37.873+08 2019-11-26 10:11:37.873+08 3081c848-b498-42a0-9887-5fba5a8eb28f 2 t f
+4672 physicalvalue 轴力 Output \N 4 2000 -2000 KN 2019-11-26 10:12:33.395+08 2019-11-26 10:12:45.325+08 3081c848-b498-42a0-9887-5fba5a8eb28f 2 t f
+4673 physicalvalue 轴力 Output \N 4 3000 -3000 kN 2019-11-26 10:13:53.136+08 2019-11-26 10:14:02.332+08 94787d41-6353-4a20-a84b-848d79e1e209 2 t f
+4674 frequency 频率 Output \N 3 \N \N Hz 2019-11-26 10:14:22.998+08 2019-11-26 10:14:32.652+08 94787d41-6353-4a20-a84b-848d79e1e209 2 t f
+4675 am 幅值 Output \N \N \N 3 \N \N mv 2019-11-26 10:15:00.675+08 2019-11-26 10:15:00.675+08 94787d41-6353-4a20-a84b-848d79e1e209 2 t f
+4676 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-11-26 10:15:30.375+08 2019-11-26 10:15:30.375+08 94787d41-6353-4a20-a84b-848d79e1e209 2 t f
+4677 physicalvalue 轴力 Output \N \N \N 4 4000 -4000 kN 2019-11-26 10:16:41.439+08 2019-11-26 10:16:41.439+08 c4ae4615-1bce-476b-96bb-827de9a9a3f5 2 t f
+4678 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-11-26 10:17:01.881+08 2019-11-26 10:17:01.881+08 c4ae4615-1bce-476b-96bb-827de9a9a3f5 2 t f
+1491 frequency 频率 Output \N 3 \N \N Hz 2018-01-23 14:46:19.636+08 2019-11-26 10:17:29.479+08 4f360434-b54d-41c3-8163-4df050a68350 2 t f
+4679 frequency 频率 Output \N \N \N 3 \N \N Hz 2019-11-26 10:17:47.672+08 2019-11-26 10:17:47.672+08 c4ae4615-1bce-476b-96bb-827de9a9a3f5 2 t f
+4680 am 幅值 Output \N \N \N 3 \N \N mv 2019-11-26 10:18:04.836+08 2019-11-26 10:18:04.836+08 c4ae4615-1bce-476b-96bb-827de9a9a3f5 2 t f
+4681 Ydisplacement 纵向位移 Output \N \N \N 6 \N \N mm 2019-11-26 16:27:41.028+08 2019-11-26 16:27:41.028+08 9e616b46-c079-4ea8-a379-71bc5fa74f42 2 t f
+4682 Xdisplacement 横向位移 Output \N \N \N 6 \N \N mm 2019-11-26 16:28:04.797+08 2019-11-26 16:28:04.797+08 9e616b46-c079-4ea8-a379-71bc5fa74f42 2 t f
+4683 crossRoad 车道号 Output \N 0 \N \N \N 2019-11-27 14:14:55.502+08 2019-11-27 14:14:55.502+08 047b4ec5-9aa9-44cd-8410-9484195bcc5b 5 t f
+4687 overload 总重超限 Output \N 0 \N \N 2019-11-27 14:14:55.523+08 2019-11-27 14:14:55.523+08 047b4ec5-9aa9-44cd-8410-9484195bcc5b 5 t f
+4685 axisSpeed 轴速 Output \N 0 km/h 2019-11-27 14:14:55.515+08 2019-11-27 14:19:58.13+08 047b4ec5-9aa9-44cd-8410-9484195bcc5b 5 t f
+4684 axisNum 轴数 Output \N 0 2019-11-27 14:14:55.507+08 2019-11-27 14:20:44.657+08 047b4ec5-9aa9-44cd-8410-9484195bcc5b 5 t f
+4705 speed 车速 Output \N \N \N \N \N \N km/h 2019-11-27 14:23:20.418+08 2019-11-27 14:23:20.418+08 047b4ec5-9aa9-44cd-8410-9484195bcc5b 5 t f
+4707 displacement 位移 Output \N \N \N 4 \N \N mm 2019-12-05 15:46:23.161+08 2019-12-05 15:46:23.161+08 c4a77a9d-c2ff-4de9-bbc9-36fe8bba8a5e 2 t f
+4708 physicalvalue 轴力 Output \N 2 \N \N kN 2019-12-06 10:18:48.773+08 2019-12-06 10:25:20.045+08 28802bd7-d538-4d62-8a84-87a3e3f5c9d3 2 t f
+4709 angleX x角度 Output \N \N \N 2 \N \N ° 2019-12-06 11:22:34.036+08 2019-12-06 11:22:34.036+08 6d7906b4-b1de-4c3c-b100-bcdf039094f2 2 t f
+4710 angleY Y角度 Output \N \N \N 2 \N \N ° 2019-12-06 11:22:34.044+08 2019-12-06 11:22:34.044+08 6d7906b4-b1de-4c3c-b100-bcdf039094f2 2 t f
+4711 length 位移 Output \N \N \N 3 \N \N mm 2019-12-06 15:17:20.55+08 2019-12-06 15:17:20.55+08 5fb83056-bcb5-4ed3-8b11-5d2233522941 2 t f
+4713 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-12-09 09:10:12.762+08 2019-12-09 09:10:12.762+08 28802bd7-d538-4d62-8a84-87a3e3f5c9d3 2 t f
+4714 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-12-09 09:10:52.259+08 2019-12-09 09:10:52.259+08 28802bd7-d538-4d62-8a84-87a3e3f5c9d3 2 t f
+4715 physicalvalue \N Output \N \N \N 5 \N \N \N 2019-12-09 10:16:06.62+08 2019-12-09 10:16:06.62+08 6c5eb31e-a7e6-4289-a25e-5cf08bb4ad82 2 t f
+4717 length 距离 Output \N \N \N 3 \N \N m 2019-12-10 11:42:16.763+08 2019-12-10 11:42:16.763+08 7c4993c0-3771-4ad6-a71d-2f84390f48e6 2 t f
+4718 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-12-10 11:42:39.236+08 2019-12-10 11:42:39.236+08 7c4993c0-3771-4ad6-a71d-2f84390f48e6 2 t f
+4719 direction 车辆方向 Output \N 0 . 0上桥,1下桥 2019-12-11 10:48:44.632+08 2019-12-11 10:49:53.885+08 047b4ec5-9aa9-44cd-8410-9484195bcc5b 5 t f
+4720 hourRainfall 雨量 Output \N \N \N 2 \N \N mm 2019-12-11 10:59:55.305+08 2019-12-11 10:59:55.305+08 bee3569d-fbcf-4c8e-809d-535e0e515921 2 t f
+4722 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-12-11 15:38:09.777+08 2019-12-11 15:38:09.777+08 9960853c-2f09-4f84-83dd-6ef785bd63d8 2 t f
+4724 waterTemperature 水温 Output \N \N \N 1 \N \N 摄氏度 2019-12-11 15:52:59.597+08 2019-12-11 15:52:59.597+08 53281743-bc5c-46cf-addc-706810bcd681 2 t f
+4725 waterPresure 水压 Output \N \N \N \N \N \N Pa 2019-12-11 15:53:44.709+08 2019-12-11 15:53:44.709+08 53281743-bc5c-46cf-addc-706810bcd681 1 t f
+4727 windSpeed 风速 Output \N \N \N 2 \N \N m/s 2019-12-12 15:27:14.478+08 2019-12-12 15:27:14.478+08 699f8e7d-9985-4a05-83be-7ff6a0c7188b 2 t f
+4726 windDirection 风向 Output \N 2 \N \N 度(偏离北) 2019-12-12 15:26:17.092+08 2019-12-12 15:27:37.734+08 699f8e7d-9985-4a05-83be-7ff6a0c7188b 2 t f
+4728 pressure 液位 Output \N \N \N 5 \N \N \N 2019-12-12 16:55:04.316+08 2019-12-12 16:55:04.316+08 c8ec5d4d-0d9c-4262-8ec6-3a089114fb5d 2 t f
+4729 windSpeed 风速 Output \N \N \N 2 \N \N m/s 2019-12-12 17:02:10.65+08 2019-12-12 17:02:10.65+08 89941851-3e91-426b-b842-0e31d50848f5 2 t f
+4730 windDirection 风向 Output \N \N \N 2 \N \N 度(偏北方向) 2019-12-12 17:03:32.909+08 2019-12-12 17:03:32.909+08 89941851-3e91-426b-b842-0e31d50848f5 2 t f
+4693 grossWeight 总重 Output \N 0 T 2019-11-27 14:14:55.543+08 2019-12-16 11:26:09.794+08 047b4ec5-9aa9-44cd-8410-9484195bcc5b 5 t f
+4688 axieWeight 轴重 Output \N 0 T 2019-11-27 14:14:55.526+08 2019-12-16 11:26:14.245+08 047b4ec5-9aa9-44cd-8410-9484195bcc5b 5 t f
+4732 clusterId Constant \N \N genOnOff \N \N \N 2019-12-16 11:31:00.606+08 2019-12-16 11:31:00.606+08 39ae566f-f125-4bb3-8f18-39fd4ace09dd 5 t f
+4734 state State Output \N 0,1 \N \N \N \N 2019-12-16 11:32:41.7+08 2019-12-16 11:32:41.7+08 39ae566f-f125-4bb3-8f18-39fd4ace09dd 4 t f
+4735 alert \N Variable \N \N false \N \N \N \N 2019-12-16 11:40:38.095+08 2019-12-16 11:40:38.095+08 39ae566f-f125-4bb3-8f18-39fd4ace09dd 3 t f
+4736 crackDistance 裂缝距离 Output \N \N \N 2 \N \N mm 2019-12-17 14:36:20.527+08 2019-12-17 14:36:20.527+08 da328767-f26f-4fce-967c-7dbf5af7df6f 2 t f
+4737 Temperature \N Output \N \N \N 2 80 -20 \N 2019-12-17 15:53:57.607+08 2019-12-17 15:53:57.607+08 97761a49-de35-42f5-a664-d3dd6cc82d59 2 t f
+4739 clusterId \N Constant \N \N msTemperatureMeasurement \N \N \N \N 2019-12-17 15:55:45.907+08 2019-12-17 15:55:45.907+08 97761a49-de35-42f5-a664-d3dd6cc82d59 5 t f
+4740 Hourrain 小时雨量 Output \N \N \N 2 \N \N mm 2019-12-18 09:16:48.848+08 2019-12-18 09:16:48.848+08 5733bc64-355b-495b-adf8-e8cbae48d357 2 t f
+4741 Minrian 分钟雨量 Output \N \N \N 2 \N \N mm 2019-12-18 09:17:26.555+08 2019-12-18 09:17:26.555+08 5733bc64-355b-495b-adf8-e8cbae48d357 2 t f
+4742 physicalvalue 加速度 Output \N 0 \N \N g 2019-12-20 18:07:22.546+08 2019-12-20 18:07:22.546+08 d3030bd3-a5ed-49d3-bc4e-0c774ddbdf86 5 t f
+4795 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-12-31 09:14:12.679+08 2019-12-31 09:14:12.679+08 514bb698-2903-47d6-9749-67f6ead2de82 2 t f
+4743 distance 沉降 Output \N \N \N 2 \N \N mm 2019-12-23 10:30:52.212+08 2019-12-23 10:30:52.212+08 b3db27cd-01dc-4f48-b241-ec576d75d6b2 2 t f
+4744 temperature 温度 Output \N \N \N 2 \N \N ° 2019-12-23 10:30:52.499+08 2019-12-23 10:30:52.499+08 b3db27cd-01dc-4f48-b241-ec576d75d6b2 2 t f
+4745 waveLength 波长 Output \N \N \N 3 \N \N \N 2019-12-23 14:27:38.682+08 2019-12-23 14:27:38.682+08 dfeab740-f671-4730-9a89-f5a3311f0ec8 2 t f
+4746 distance 距离 Output \N \N \N 2 \N \N mm 2019-12-23 14:42:47.829+08 2019-12-23 14:42:47.829+08 86e75c8f-77b4-4197-89e5-0960b7265076 2 t f
+4747 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-12-23 16:11:23.823+08 2019-12-23 16:11:23.823+08 f7726ca7-bc14-4987-bd59-204bb7fed3a4 2 t f
+4748 humidity 湿度 Output \N \N \N 2 \N \N % 2019-12-23 16:11:23.838+08 2019-12-23 16:11:23.838+08 f7726ca7-bc14-4987-bd59-204bb7fed3a4 2 t f
+4784 physicalvalue 物理量 Output \N \N \N 4 \N \N KN 2019-12-31 09:02:25.089+08 2019-12-31 09:02:25.089+08 d39ca936-5931-458b-ac6a-3afd59f67b53 2 t f
+4793 physicalvalue 物理量 Output \N \N \N 3 \N \N mm 2019-12-31 09:12:15.004+08 2019-12-31 09:12:15.004+08 15046a7e-2b8d-446c-963e-0f8af7fe7475 2 t f
+4749 windSpeed 风速 Output \N \N \N 2 \N \N m/s 2019-12-24 09:20:36.133+08 2019-12-24 09:20:36.133+08 48b6a900-281e-4335-841c-814b0bbc1078 2 t f
+4750 windDirection 风向 Output \N \N \N 2 \N \N ° 2019-12-24 09:20:36.158+08 2019-12-24 09:20:36.158+08 48b6a900-281e-4335-841c-814b0bbc1078 2 t f
+4751 windAngle 风仰角 Output \N \N \N 2 \N \N ° 2019-12-24 09:20:36.173+08 2019-12-24 09:20:36.173+08 48b6a900-281e-4335-841c-814b0bbc1078 2 t f
+4752 xDgree x轴加速度 Output \N \N \N 2 \N \N g 2019-12-24 10:40:55.048+08 2019-12-24 10:40:55.048+08 659208a7-903d-4473-bc1d-581dbec9e5e7 2 t f
+4753 yDgree y轴加速度 Output \N \N \N 2 \N \N g 2019-12-24 10:40:55.057+08 2019-12-24 10:40:55.057+08 659208a7-903d-4473-bc1d-581dbec9e5e7 2 t f
+4754 zDgree z轴加速度 Output \N \N \N 2 \N \N g 2019-12-24 10:40:55.063+08 2019-12-24 10:40:55.063+08 659208a7-903d-4473-bc1d-581dbec9e5e7 2 t f
+4755 pressure 压强 Output \N \N \N 2 \N \N kpa 2019-12-24 11:15:20.074+08 2019-12-24 11:15:20.074+08 70f035c8-998b-445d-8f3f-c5f840151e65 2 t f
+4756 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-12-24 11:15:20.109+08 2019-12-24 11:15:20.109+08 70f035c8-998b-445d-8f3f-c5f840151e65 2 t f
+4757 anglex x轴角度 Output \N \N \N 2 \N \N ° 2019-12-24 11:48:30.848+08 2019-12-24 11:48:30.848+08 380f8e6c-ddbe-4c2b-90ab-89abece78fd6 2 t f
+4758 angley y轴角度 Output \N \N \N 2 \N \N ° 2019-12-24 11:48:31.246+08 2019-12-24 11:48:31.246+08 380f8e6c-ddbe-4c2b-90ab-89abece78fd6 2 t f
+4759 anglez z轴角度 Output \N \N \N 2 \N \N ° 2019-12-24 11:48:31.27+08 2019-12-24 11:48:31.27+08 380f8e6c-ddbe-4c2b-90ab-89abece78fd6 2 t f
+4760 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-12-24 11:48:31.412+08 2019-12-24 11:48:31.412+08 380f8e6c-ddbe-4c2b-90ab-89abece78fd6 2 t f
+4761 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-12-25 09:37:51.087+08 2019-12-25 09:37:51.087+08 c46b60be-3353-4715-8783-561892271905 2 t f
+4762 frequency 频率 Output \N \N \N 2 \N \N HZ 2019-12-25 09:38:41.371+08 2019-12-25 09:38:41.371+08 c46b60be-3353-4715-8783-561892271905 2 t f
+4768 clusterId \N Constant \N \N genBasic \N \N \N \N 2019-12-26 13:42:36.252+08 2019-12-26 13:42:36.252+08 c91efe30-d394-454c-9fd0-8e95a43e79b2 5 t f
+4723 waterLever 水位 Output \N 0 \N \N m 默认监测因素m统一 2019-12-11 15:52:14.257+08 2019-12-25 14:13:49.994+08 53281743-bc5c-46cf-addc-706810bcd681 1 t f
+4763 length 位移 Output \N 5 50 -50 mm 2019-12-26 11:23:17.45+08 2019-12-26 11:23:26.137+08 e9412219-df4d-4a2b-bfe1-1e81e44f7a60 2 t f
+4766 clusterId \N Constant \N \N msRelativeHumidity \N \N \N \N 2019-12-26 11:49:59.125+08 2019-12-26 11:49:59.125+08 906764b6-5b7f-4cf0-a4a8-915452e6acc7 5 t f
+4769 voltage Output \N \N \N 2 \N \N V 2019-12-26 13:42:56.122+08 2019-12-26 13:42:56.122+08 c91efe30-d394-454c-9fd0-8e95a43e79b2 2 t f
+4779 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-12-31 08:44:21.467+08 2019-12-31 08:44:21.467+08 e0fd6ac0-4c4d-4683-9227-d614184aefe2 2 t f
+4816 ein 等效声级 Output \N \N \N 2 \N \N dB 2020-01-07 14:24:53.358+08 2020-01-07 14:24:53.358+08 32c69be1-0051-4e6c-8821-fe8b2a3f8215 2 t f
+4770 anglex x方向位移 Output \N 4 300 -300 mm 2019-12-26 13:50:05.507+08 2020-01-09 10:01:11.916+08 563028c4-ce25-46d9-8dc5-f32204df7ff4 2 t f
+4771 angley Y方向位移 Output \N 4 300 -300 mm 2019-12-26 13:50:05.512+08 2020-01-09 10:01:20.497+08 563028c4-ce25-46d9-8dc5-f32204df7ff4 2 t f
+4767 humidity Output \N 0 100 0 %rh 2019-12-26 11:51:53.754+08 2021-01-29 18:03:25.566+08 906764b6-5b7f-4cf0-a4a8-915452e6acc7 2 t f
+4772 Temp 温度 Output \N \N \N 2 \N \N ℃ 2019-12-30 13:32:17.402+08 2019-12-30 13:32:17.402+08 954de091-0b47-4d24-b0fe-38e707df4448 2 t f
+4773 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-12-30 16:37:46.262+08 2019-12-30 16:37:46.262+08 dcb7d951-15a5-4ee0-8b2b-9a30c1d60e52 2 t f
+4774 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-12-30 16:38:31.094+08 2019-12-30 16:38:31.094+08 dcb7d951-15a5-4ee0-8b2b-9a30c1d60e52 2 t f
+4776 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-12-31 08:41:21.254+08 2019-12-31 08:41:21.254+08 0650720c-5066-417d-99a8-936fcf6406a4 2 t f
+4777 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-12-31 08:42:02.375+08 2019-12-31 08:42:02.375+08 0650720c-5066-417d-99a8-936fcf6406a4 2 t f
+4775 physicalvalue 物理量 Output \N 3 \N \N με 2019-12-30 16:41:25.498+08 2019-12-31 08:56:44.76+08 dcb7d951-15a5-4ee0-8b2b-9a30c1d60e52 2 t f
+4778 physicalvalue 物理量 Output \N 3 \N \N με 2019-12-31 08:42:55.338+08 2019-12-31 09:00:44.19+08 0650720c-5066-417d-99a8-936fcf6406a4 2 t f
+4796 physicalvalue 物理量 Output \N 3 \N \N Kpa 2019-12-31 09:15:44.093+08 2020-11-24 09:55:20.26+08 514bb698-2903-47d6-9749-67f6ead2de82 2 t f
+4780 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-12-31 08:45:24.087+08 2019-12-31 08:45:24.087+08 e0fd6ac0-4c4d-4683-9227-d614184aefe2 2 t f
+4782 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-12-31 08:48:38.792+08 2019-12-31 08:48:38.792+08 d39ca936-5931-458b-ac6a-3afd59f67b53 2 t f
+4783 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-12-31 08:49:37.589+08 2019-12-31 08:49:37.589+08 d39ca936-5931-458b-ac6a-3afd59f67b53 2 t f
+4781 physicalvalue 物理量 Output \N 3 \N \N KN 2019-12-31 08:46:00.177+08 2019-12-31 09:01:19.794+08 e0fd6ac0-4c4d-4683-9227-d614184aefe2 2 t f
+4785 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-12-31 09:04:00.847+08 2019-12-31 09:04:00.847+08 f454e2b5-77c5-4282-aceb-bf86690270ba 2 t f
+4786 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-12-31 09:04:52.473+08 2019-12-31 09:04:52.473+08 f454e2b5-77c5-4282-aceb-bf86690270ba 2 t f
+4787 physicalvalue 物理量 Output \N \N \N 3 \N \N KN 2019-12-31 09:05:50.272+08 2019-12-31 09:05:50.272+08 f454e2b5-77c5-4282-aceb-bf86690270ba 2 t f
+4788 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-12-31 09:07:23.338+08 2019-12-31 09:07:23.338+08 f562d703-5cde-4a00-b1c8-1be54d51da9d 2 t f
+4789 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-12-31 09:08:01.357+08 2019-12-31 09:08:01.357+08 f562d703-5cde-4a00-b1c8-1be54d51da9d 2 t f
+4790 physicalvalue 物理量 Output \N \N \N 3 \N \N mm 2019-12-31 09:08:47.33+08 2019-12-31 09:08:47.33+08 f562d703-5cde-4a00-b1c8-1be54d51da9d 2 t f
+4791 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-12-31 09:10:56.79+08 2019-12-31 09:10:56.79+08 15046a7e-2b8d-446c-963e-0f8af7fe7475 2 t f
+4792 temperature 温度 Output \N \N \N 2 \N \N ℃ 2019-12-31 09:11:30.034+08 2019-12-31 09:11:30.034+08 15046a7e-2b8d-446c-963e-0f8af7fe7475 2 t f
+4794 frequency 频率 Output \N \N \N 3 \N \N HZ 2019-12-31 09:13:37.409+08 2019-12-31 09:13:37.409+08 514bb698-2903-47d6-9749-67f6ead2de82 2 t f
+4797 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-01-06 15:12:33.757+08 2020-01-06 15:12:33.757+08 c8044788-3713-45ab-a8f8-cd3b8b3db86f 2 t f
+4798 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-01-06 15:12:33.825+08 2020-01-06 15:12:33.825+08 c8044788-3713-45ab-a8f8-cd3b8b3db86f 2 t f
+4799 physicalvalue 轴力 Output \N \N \N 2 \N \N KN 2020-01-06 15:12:33.832+08 2020-01-06 15:12:33.832+08 c8044788-3713-45ab-a8f8-cd3b8b3db86f 2 t f
+4805 totalPhosphorus 总磷 Output \N 2 \N \N mg/L (以P计) 2020-01-07 10:01:41.509+08 2020-01-10 09:34:06.526+08 65968c97-efd5-4c64-9f9c-79017790f273 2 t f
+4817 maxnf 最大噪声 Output \N \N \N 2 \N \N dB 2020-01-07 14:25:51.661+08 2020-01-07 14:25:51.661+08 32c69be1-0051-4e6c-8821-fe8b2a3f8215 2 t f
+4818 minnf 最小噪声 Output \N \N \N 2 \N \N dB 2020-01-07 14:26:14.084+08 2020-01-07 14:26:14.084+08 32c69be1-0051-4e6c-8821-fe8b2a3f8215 2 t f
+4319 physicalvalue 位移 Output \N 4 \N \N mm 2019-09-25 11:38:34.949+08 2020-01-09 17:12:52.822+08 88ec5756-da5e-4fa0-b882-39727baf501b 2 t f
+4828 frequency 频率 Output \N \N \N 6 \N \N Hz 2020-01-10 10:53:33.483+08 2020-01-10 10:53:33.483+08 5d3b0ddc-308b-4ad6-93cd-7aefd34b600f 2 t f
+4829 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-01-10 10:53:53.38+08 2020-01-10 10:53:53.38+08 5d3b0ddc-308b-4ad6-93cd-7aefd34b600f 2 t f
+4830 physicalvalue 微应变 Output \N 0 5000 -5000 με 2020-01-10 10:54:06.918+08 2020-01-10 10:54:32.091+08 5d3b0ddc-308b-4ad6-93cd-7aefd34b600f 2 t f
+4831 am 幅值 Output \N 3 \N \N mv 2020-01-10 10:54:44.229+08 2020-01-10 10:54:51.162+08 5d3b0ddc-308b-4ad6-93cd-7aefd34b600f 2 t f
+4833 physicalvalue 角度 Output \N \N \N 2 \N \N ° 2020-01-13 11:31:24.441+08 2020-01-13 11:31:24.441+08 a308f5d2-2559-4f60-8323-c243f04ce8cd 2 t f
+4834 voltage_ratio 电压比 Output \N \N \N 2 \N \N 2020-01-13 11:32:08.161+08 2020-01-13 11:32:08.161+08 a308f5d2-2559-4f60-8323-c243f04ce8cd 2 t f
+4839 voltage_ratio 电压比 Output \N \N \N 2 \N \N \N 2020-01-13 15:54:33.702+08 2020-01-13 15:54:33.702+08 d9ea813b-d066-472d-b08e-2436f6520e9f 2 t f
+4840 voltage_ratio 电流值 Output \N \N \N 3 \N \N \N 2020-01-13 16:08:57.402+08 2020-01-13 16:08:57.402+08 804133e0-c4a4-441e-acb9-a504734bbd62 2 t f
+2105 physicalvalue 加速度 Output \N 0 cm/ss 2018-04-02 10:37:43.672+08 2020-01-14 10:56:30.013+08 2dd2b9c9-f307-4635-98cd-0aed7043075d 5 t f
+4843 gasConcentration 气体浓度 Output \N \N \N 2 \N \N ppm 2020-01-14 13:55:06.908+08 2020-01-14 13:55:06.908+08 b4574024-8282-445a-b3d6-068582522d6a 2 t f
+4845 gasConcentration 气体浓度 Output \N \N \N 4 \N \N %LEL 2020-01-14 13:59:03.973+08 2020-01-14 13:59:03.973+08 ce7d8a22-74e1-4ba0-b501-8f0ca23a4b27 2 t f
+4847 gasConcentration 气体浓度 Output \N \N \N 4 \N \N %LEL 2020-01-14 14:02:50.263+08 2020-01-14 14:02:50.263+08 d3d60241-e4b2-445a-bde1-5e5e83bbcace 2 t f
+4852 gasConcentration 气体浓度 Output \N \N \N 4 \N \N %LEL 2020-01-14 14:12:06.478+08 2020-01-14 14:12:06.478+08 698204ef-2e94-4c91-9c1b-f1145b054f0e 2 t f
+4853 gasConcentration 气体浓度 Output \N \N \N 5 \N \N %LEL 2020-01-14 14:13:41.896+08 2020-01-14 14:13:41.896+08 9538c3ec-e6e4-4d94-b1f6-dcd1bc2e2527 2 t f
+4854 gasConcentration 气体浓度 Output \N 4 \N \N %LEL 2020-01-14 14:15:55.65+08 2020-01-15 13:43:15.835+08 71301f1e-11cb-40ce-8550-770dc2877603 2 t f
+4851 gasConcentration 气体浓度 Output \N 2 \N \N ppm 2020-01-14 14:10:01.183+08 2020-01-15 13:43:45.561+08 11373c99-1270-4b66-9d6d-d19c6ad95118 2 t f
+4850 gasConcentration 气体浓度 Output \N 4 \N \N %LEL 2020-01-14 14:08:15.303+08 2020-01-15 13:44:14.114+08 631fe06e-045c-4b18-b9a5-a6e18d8f3511 2 t f
+4849 gasConcentration 气体浓度 Output \N 4 \N \N %LEL 2020-01-14 14:06:32.989+08 2020-01-15 13:44:40.303+08 0ae8ed9d-56c2-4b07-b81a-a23a10192d1d 2 t f
+4866 pressure 压强 Output \N \N \N 2 \N \N Kpa 2020-02-20 16:38:35.634+08 2020-02-20 16:38:35.634+08 37eaae27-d936-4e7d-8680-2d062ac5bb82 2 t f
+4872 uptime 上线时间 Output \N \N \N \N \N \N h 2020-02-27 21:03:51.308+08 2020-02-27 21:03:51.308+08 39e094af-e8c9-455b-8f47-7d5b627b56c1 1 t f
+4848 gasConcentration 气体浓度 Output \N 4 \N \N ppm 2020-01-14 14:04:32.65+08 2020-01-15 13:45:11.314+08 9a4964ae-b88b-47d8-8007-8ddcf068d4bf 2 t f
+4846 gasConcentration 气体浓度 Output \N 4 \N \N %VOL 2020-01-14 14:00:56.901+08 2020-01-15 13:46:04.151+08 74475f60-31b1-44f8-b887-60013184ef38 2 t f
+4844 gasConcentration 气体浓度 Output \N 3 \N \N ppm 2020-01-14 13:57:25.422+08 2020-01-15 13:54:40.392+08 4b26b77c-de95-45d0-b83b-ee0c410e20a0 2 t f
+4859 voltage_ratio 电压值 Output \N \N \N 2 \N \N \N 2020-01-16 10:40:11.388+08 2020-01-16 10:40:11.388+08 4918bd89-601e-4f79-b31f-0aeda6062c82 2 t f
+4861 clusterId \N Constant \N \N genBasic \N \N \N \N 2020-02-11 14:35:37.48+08 2020-02-11 14:35:37.48+08 227b30cf-bef6-488b-b9db-9eaaf4e2f2da 5 t f
+4862 ieeeAddr Variable \N \N \N \N \N 2020-02-11 14:36:08.842+08 2020-02-11 14:36:08.842+08 227b30cf-bef6-488b-b9db-9eaaf4e2f2da 5 t f
+4863 voltage Output \N \N \N 2 \N \N 2020-02-11 14:36:30.066+08 2020-02-11 14:36:30.066+08 227b30cf-bef6-488b-b9db-9eaaf4e2f2da 2 t f
+4864 pressure 压强 Output \N \N \N 2 \N \N Kpa 2020-02-19 16:36:16.95+08 2020-02-19 16:36:16.95+08 1392402b-26fe-47c7-91d6-d380095aac9f 2 t f
+4865 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-02-19 16:36:43.579+08 2020-02-19 16:36:43.579+08 1392402b-26fe-47c7-91d6-d380095aac9f 2 t f
+4867 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-02-20 16:39:00.411+08 2020-02-20 16:39:00.411+08 37eaae27-d936-4e7d-8680-2d062ac5bb82 2 t f
+4868 length 位移 Output \N \N \N 3 \N \N mm 2020-02-21 13:07:57.987+08 2020-02-21 13:07:57.987+08 d83c7fb6-a62f-4cf0-9818-3df3592a0f3b 2 t f
+4870 clusterId \N Constant \N \N genOnOff \N \N \N \N 2020-02-27 20:59:46.095+08 2020-02-27 20:59:46.095+08 458b31ce-11c3-4abc-aeee-3cdaa45215c2 5 t f
+4871 state 状态 Output \N 0,1 0 2020-02-27 21:00:53.808+08 2020-02-27 21:01:07.59+08 458b31ce-11c3-4abc-aeee-3cdaa45215c2 4 t f
+4874 ram 内存用量 Output \N \N \N \N \N \N % 2020-02-27 21:04:52.794+08 2020-02-27 21:04:52.794+08 39e094af-e8c9-455b-8f47-7d5b627b56c1 1 t f
+4873 cpu 负载 Output \N 0 \N \N % 2020-02-27 21:04:27.74+08 2020-02-27 21:58:06.734+08 39e094af-e8c9-455b-8f47-7d5b627b56c1 1 t f
+4876 state 状态 Output \N 0,1,2,3,9 0 2020-02-27 22:26:34.347+08 2020-03-01 03:03:59.803+08 d5ca53cd-12eb-4cb5-81e0-8697934670ab 4 t f
+4878 state Output \N 0,1,2,3,9 0 2020-02-27 22:27:23.49+08 2020-03-01 03:04:08.822+08 cb88ad52-fd36-4f48-8946-4e33300d3b1e 4 t f
+4879 temperature Variable \N \N \N 0 60 -10 2020-02-27 22:28:16.372+08 2020-02-27 22:28:16.372+08 cb88ad52-fd36-4f48-8946-4e33300d3b1e 2 t f
+4880 clusterId \N Constant \N \N genOnOff \N \N \N \N 2020-03-01 20:25:45.242+08 2020-03-01 20:25:45.242+08 d5ca53cd-12eb-4cb5-81e0-8697934670ab 5 t f
+4881 clusterId \N Constant \N \N genBasic \N \N \N \N 2020-03-01 20:26:12.533+08 2020-03-01 20:26:12.533+08 cb88ad52-fd36-4f48-8946-4e33300d3b1e 5 t f
+4860 noise 噪声 Output \N 2 120 30 dB 2020-01-17 15:31:03.427+08 2020-03-02 18:54:40.037+08 8481bad4-e00b-4018-bc7f-33c5c4c800ef 2 t f
+4882 clusterId \N Constant \N \N genOnOff \N \N \N \N 2020-03-07 16:35:47.288+08 2020-03-07 16:35:47.288+08 b6fbb28e-3823-4d97-8ade-baadda4ca2f2 5 t f
+4883 clusterId Constant \N \N genBasic \N \N \N 2020-03-07 16:35:47.305+08 2020-03-07 16:35:47.305+08 d8a43904-24f4-496b-acd9-bc41e483b144 5 t f
+4884 temperature 温度 Output \N \N \N 1 80 -10 2020-03-07 16:35:47.311+08 2020-03-07 16:35:47.311+08 d8a43904-24f4-496b-acd9-bc41e483b144 2 t f
+4885 consumption 用量 Output \N \N \N 3 \N \N m3 2020-03-07 16:35:47.316+08 2020-03-07 16:35:47.316+08 d8a43904-24f4-496b-acd9-bc41e483b144 2 t f
+4887 status status Output \N 0,1,2,3,9 \N \N \N \N \N 2020-03-07 16:37:04.248+08 2020-03-07 16:37:04.248+08 b6fbb28e-3823-4d97-8ade-baadda4ca2f2 4 t f
+4888 temperature 温度 Output \N \N \N 4 \N \N ° 2020-03-10 13:53:17.014+08 2020-03-10 13:53:17.014+08 83e59e62-4f0e-438c-af09-6988ceca1a91 2 t f
+4889 humidity 湿度 Output \N \N \N 4 \N \N ℃ 2020-03-10 13:53:38.365+08 2020-03-10 13:53:38.365+08 83e59e62-4f0e-438c-af09-6988ceca1a91 2 t f
+4891 x X位置 Output \N \N \N 4 \N \N mm 2020-03-12 15:40:25.56+08 2020-03-12 15:40:25.56+08 a347cbc7-41df-43d5-96a1-0424f00954d5 2 t f
+4892 y Y位置 Output \N \N \N 4 \N \N mm 2020-03-12 15:40:45.603+08 2020-03-12 15:40:45.603+08 a347cbc7-41df-43d5-96a1-0424f00954d5 2 t f
+4893 z Z位置 Output \N \N \N 4 \N \N mm 2020-03-12 15:41:00.065+08 2020-03-12 15:41:00.065+08 a347cbc7-41df-43d5-96a1-0424f00954d5 2 t f
+4894 frequency 频率 Output \N 4 \N \N Hz 2020-03-13 15:41:53.567+08 2020-03-13 15:42:13.599+08 dc8f2875-b635-4147-9a96-92b72ccadfef 2 t f
+4895 temperature 温度 Output \N \N \N 4 \N \N ℃ 2020-03-13 15:42:51.947+08 2020-03-13 15:42:51.947+08 dc8f2875-b635-4147-9a96-92b72ccadfef 2 t f
+4896 physicalvalue 压强 Output \N 4 0.6 0 MPa 2020-03-13 15:44:46.382+08 2020-03-13 15:44:59.997+08 dc8f2875-b635-4147-9a96-92b72ccadfef 2 t f
+4897 temperature 温度 Output \N \N \N 4 \N \N ℃ 2020-03-13 15:46:29.383+08 2020-03-13 15:46:29.383+08 27cc4200-3c65-481b-92b3-1d747cbef33b 2 t f
+4898 frequency 频率 Output \N \N \N 4 \N \N Hz 2020-03-13 15:47:13.409+08 2020-03-13 15:47:13.409+08 27cc4200-3c65-481b-92b3-1d747cbef33b 2 t f
+4899 physicalvalue 压力 Output \N 4 0.8 0 MPa 2020-03-13 15:47:28.305+08 2020-03-13 15:47:40.027+08 27cc4200-3c65-481b-92b3-1d747cbef33b 2 t f
+4900 temperature 温度 Output \N \N \N 4 120 -55 ℃ 2020-03-13 17:43:23.046+08 2020-03-13 17:43:23.046+08 f51d3996-cd2a-4ea0-9430-94c6f5b5268a 2 t f
+4901 pressure 压强 Output \N 3 \N \N kPa 2020-03-18 14:40:34.027+08 2020-03-18 14:40:43.683+08 974fa08a-e1e6-4e6b-b3ac-19e3863675aa 2 t f
+4902 参数1 \N Variable \N \N \N \N 100 1 \N 2020-03-20 11:18:31.247+08 2020-03-20 11:18:31.247+08 8a226009-de6a-448d-8fc8-1056e5a62c7c 1 t f
+4903 输出1 Output \N \N \N 2 \N \N 2020-03-20 11:18:45.554+08 2020-03-20 11:18:45.554+08 8a226009-de6a-448d-8fc8-1056e5a62c7c 2 t f
+4904 realTimeGasCon 粉尘浓度 Output \N \N \N 3 \N \N ppm 2020-03-23 16:31:07.865+08 2020-03-23 16:31:07.865+08 01444399-9e03-4682-bb70-3b5137cd469e 2 t f
+4905 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-03-23 17:26:57.285+08 2020-03-23 17:26:57.285+08 919db10d-5cbf-423f-ac9b-035d06ecf13b 1 t f
+4906 humidity 湿度 Output \N \N \N 2 \N \N %RH 2020-03-23 17:27:19.731+08 2020-03-23 17:27:19.731+08 919db10d-5cbf-423f-ac9b-035d06ecf13b 2 t f
+1447 value 应变 Output \N 1 με 2018-01-23 13:54:59.283+08 2020-03-25 10:35:29.194+08 613d1519-cf1a-47b5-a44a-2397b79bee2a 2 t f
+4920 alarmDeviceName 设备名称 Output \N \N \N \N \N \N \N 2020-04-01 09:57:36.398+08 2020-04-01 09:57:36.398+08 a3e674eb-3100-4cd1-907c-b545482bce0d 5 t f
+4911 zCoordinate z方向坐标 Output \N \N \N \N 2020-03-25 15:06:09.344+08 2020-03-25 15:08:47.337+08 9474176b-8d55-48c0-bd60-1bcfb6da0576 2 t f
+4910 yCoordinate y方向坐标 Output \N \N \N \N 2020-03-25 15:05:27.414+08 2020-03-25 15:08:54.555+08 9474176b-8d55-48c0-bd60-1bcfb6da0576 2 t f
+4909 xCoordinate x方向坐标 Output \N \N \N \N 2020-03-25 15:04:47.504+08 2020-03-25 15:09:04.177+08 9474176b-8d55-48c0-bd60-1bcfb6da0576 2 t f
+4908 yLength y方向位移 Output \N \N \N \N mm 2020-03-25 15:01:23.653+08 2020-03-25 15:09:11.92+08 9474176b-8d55-48c0-bd60-1bcfb6da0576 2 t f
+4907 xLength x方向位移 Output \N \N \N \N mm 2020-03-25 15:00:27.609+08 2020-03-25 15:09:22.195+08 9474176b-8d55-48c0-bd60-1bcfb6da0576 2 t f
+4915 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-03-25 15:15:35.975+08 2020-03-25 15:15:35.975+08 9474176b-8d55-48c0-bd60-1bcfb6da0576 2 t f
+4912 xAcceleration x方向加速度 Output \N \N \N \N mg 2020-03-25 15:08:37.007+08 2020-03-25 15:25:24.648+08 9474176b-8d55-48c0-bd60-1bcfb6da0576 2 t f
+4913 yAcceleration y方向加速度 Output \N \N \N \N mg 2020-03-25 15:10:12.014+08 2020-03-25 15:25:47.268+08 9474176b-8d55-48c0-bd60-1bcfb6da0576 2 t f
+4914 zAcceleration z方向加速度 Output \N \N \N \N mg 2020-03-25 15:15:02.325+08 2020-03-25 15:25:54.512+08 9474176b-8d55-48c0-bd60-1bcfb6da0576 2 t f
+4916 temperature 温度 Output \N \N \N 4 120 -55 ℃ 2020-03-25 16:58:17.739+08 2020-03-25 16:58:17.739+08 974fa08a-e1e6-4e6b-b3ac-19e3863675aa 2 t f
+4917 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-03-26 11:01:57.122+08 2020-03-26 11:01:57.122+08 f58d1284-4cba-47d9-b2ff-2bfeeff62797 2 t f
+4918 length 液位 Output \N \N \N \N \N \N mm 2020-03-26 11:02:45.571+08 2020-03-26 11:02:45.571+08 f58d1284-4cba-47d9-b2ff-2bfeeff62797 2 t f
+4919 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-03-26 15:51:12.033+08 2020-03-26 15:51:12.033+08 3ce74ad5-66e4-40b3-b5c0-52653cbbca87 2 t f
+4921 alarmType 告警类型 Output \N \N \N \N \N \N 2020-04-01 09:58:41.883+08 2020-04-01 09:58:41.883+08 a3e674eb-3100-4cd1-907c-b545482bce0d 1 t f
+4922 isChecked 是否已读 Output \N \N \N \N \N \N 0-未读,1-已读 2020-04-01 09:59:31.425+08 2020-04-01 09:59:31.425+08 a3e674eb-3100-4cd1-907c-b545482bce0d 1 t f
+4923 alarmPicUrl 告警图片地址 Output \N \N \N \N \N \N 2020-04-01 09:59:55.451+08 2020-04-01 09:59:55.451+08 a3e674eb-3100-4cd1-907c-b545482bce0d 5 t f
+4924 customerType 告警大类 Output \N \N \N \N \N \N 2020-04-01 10:01:09.579+08 2020-04-01 10:01:09.579+08 a3e674eb-3100-4cd1-907c-b545482bce0d 5 t f
+4925 customerInfo 具体信息 Output \N \N \N \N \N \N 2020-04-01 10:01:34.054+08 2020-04-01 10:01:34.054+08 a3e674eb-3100-4cd1-907c-b545482bce0d 5 t f
+4926 temperature 触发温度 Output \N \N \N 2 \N \N ℃ 2020-04-01 14:39:05.235+08 2020-04-01 14:39:05.235+08 a3e674eb-3100-4cd1-907c-b545482bce0d 2 t f
+4928 temperature 温度 Output \N \N \N 2 70 -25 ℃ 2020-04-03 17:23:08.022+08 2020-04-03 17:23:08.022+08 a6d36e90-1e77-42f2-9d03-3852f9e5a9ed 2 t f
+4929 temperature 温度 Output \N \N \N 2 70 -25 ℃ 2020-04-03 17:24:33.267+08 2020-04-03 17:24:33.267+08 69888b76-d5a8-4e6d-90a8-cfa968515267 2 t f
+4930 anglex X方向角度 Output \N \N \N 4 30 -30 ° 2020-04-03 17:25:10.202+08 2020-04-03 17:25:10.202+08 69888b76-d5a8-4e6d-90a8-cfa968515267 2 t f
+4931 anglex X轴角度 Output \N \N \N 2 30 -30 ° 2020-04-03 17:26:35.978+08 2020-04-03 17:26:35.978+08 a868b3a8-85ed-4780-a0cf-9d0206e3cd58 2 t f
+4932 temperature 温度 Output \N \N \N 2 70 -70 ℃ 2020-04-03 17:27:17.604+08 2020-04-03 17:27:17.604+08 a868b3a8-85ed-4780-a0cf-9d0206e3cd58 2 t f
+4933 anglex X方向角度 Output \N \N \N 4 30 -30 ° 2020-04-03 17:28:21.07+08 2020-04-03 17:28:21.07+08 34d873b8-b4cf-4313-ae19-a2fedae19eca 2 t f
+4934 temperature 温度 Output \N \N \N 2 70 -25 ℃ 2020-04-03 17:28:52.596+08 2020-04-03 17:28:52.596+08 34d873b8-b4cf-4313-ae19-a2fedae19eca 2 t f
+4936 angley y方向角度 Output \N \N 30 -30 ° 2020-04-05 16:39:18.208+08 2020-04-10 14:12:17.357+08 69888b76-d5a8-4e6d-90a8-cfa968515267 2 t f
+4937 angley y方向角度 Output \N \N 30 -30 ° 2020-04-05 16:40:04.395+08 2020-04-10 14:12:27.992+08 a868b3a8-85ed-4780-a0cf-9d0206e3cd58 2 t f
+5115 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-13 11:35:09.399+08 2020-04-13 11:35:09.399+08 8e6f0fd7-4b27-47b4-8e62-85c8302d8219 2 t f
+4955 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-08 15:31:03.511+08 2020-04-08 15:31:03.511+08 235e50cf-8332-4752-ad90-735b21a65636 2 t f
+5011 angley y方向角度 Output \N 2 30 -30 ° 2020-04-09 11:55:14.324+08 2020-04-10 14:13:49.164+08 f8e59d17-39f9-4805-895b-be09de939091 2 t f
+4939 solarRadiation 太阳辐射值 Output \N \N \N \N \N \N W/㎡ 2020-04-08 09:46:26.738+08 2020-04-08 09:46:26.738+08 8f9706bb-e71b-448c-b32d-4b4cfe420ddf 1 t f
+4940 temperature 温度 Output \N \N \N 1 \N \N ℃ 2020-04-08 10:44:47.025+08 2020-04-08 10:44:47.025+08 8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0 2 t f
+4942 noise 噪声 Output \N \N \N 1 \N \N dB 2020-04-08 10:47:37.732+08 2020-04-08 10:47:37.732+08 8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0 2 t f
+4943 pm25 pm2.5 Output \N \N \N \N \N \N ug/m³ 2020-04-08 10:48:33.252+08 2020-04-08 10:48:33.252+08 8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0 1 t f
+4941 humidity 湿度 Output \N 1 \N \N %RH 2020-04-08 10:47:03.046+08 2020-04-08 10:48:39.455+08 8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0 2 t f
+4944 pm10 pm10 Output \N \N \N \N \N \N ug/m³ 2020-04-08 11:03:38.363+08 2020-04-08 11:03:38.363+08 8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0 1 t f
+4945 pressure 大气压力 Output \N \N \N \N \N \N Kpa 2020-04-08 11:08:23.04+08 2020-04-08 11:08:23.04+08 8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0 1 t f
+4946 intensity 光照强度 Output \N \N \N \N \N \N Lux 2020-04-08 11:16:30.253+08 2020-04-08 11:16:30.253+08 8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0 1 t f
+4947 physicalvalue 轴力 Output \N 4 5000 -5000 KN 2020-04-08 14:14:26.19+08 2020-04-08 14:14:37.125+08 b912ee89-771c-412b-b6f1-43fd55aa3743 2 t f
+4948 frequency 频率 Output \N \N \N 3 \N \N HZ 2020-04-08 14:15:09.01+08 2020-04-08 14:15:09.01+08 b912ee89-771c-412b-b6f1-43fd55aa3743 2 t f
+4949 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-08 14:15:56.994+08 2020-04-08 14:15:56.994+08 b912ee89-771c-412b-b6f1-43fd55aa3743 2 t f
+4950 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-08 14:16:45.17+08 2020-04-08 14:16:45.17+08 b912ee89-771c-412b-b6f1-43fd55aa3743 2 t f
+4951 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-08 14:24:56.924+08 2020-04-08 14:24:56.924+08 3d4528b4-3198-487f-9a4f-60b0b142f4fa 2 t f
+4952 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-04-08 14:26:17.291+08 2020-04-08 14:26:17.291+08 3d4528b4-3198-487f-9a4f-60b0b142f4fa 2 t f
+4953 frequency 频率 Output \N \N \N \N \N \N HZ 2020-04-08 14:26:53.569+08 2020-04-08 14:26:53.569+08 3d4528b4-3198-487f-9a4f-60b0b142f4fa 2 t f
+4954 physicalvalue 轴力 Output \N \N 5000 -5000 KN 2020-04-08 14:27:42.55+08 2020-04-08 14:27:57.874+08 3d4528b4-3198-487f-9a4f-60b0b142f4fa 2 t f
+4956 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-08 15:43:36.55+08 2020-04-08 15:43:36.55+08 235e50cf-8332-4752-ad90-735b21a65636 2 t f
+4957 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-08 15:44:13.872+08 2020-04-08 15:44:13.872+08 235e50cf-8332-4752-ad90-735b21a65636 2 t f
+4958 physicalvalue 应力 Output \N 2 0.6 0 MPa 2020-04-08 15:45:02.718+08 2020-04-08 15:45:21.362+08 235e50cf-8332-4752-ad90-735b21a65636 2 t f
+4959 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-08 15:46:38.227+08 2020-04-08 15:46:38.227+08 43f54168-c6b9-4a10-af52-08fea895afd5 2 t f
+4960 frequency 频率 Output \N \N \N \N \N \N HZ 2020-04-08 15:47:07.989+08 2020-04-08 15:47:07.989+08 43f54168-c6b9-4a10-af52-08fea895afd5 2 t f
+4961 physicalvalue 应力 Output \N \N \N \N 0.6 0 MPa 2020-04-08 15:48:04.594+08 2020-04-08 15:48:04.594+08 43f54168-c6b9-4a10-af52-08fea895afd5 2 t f
+4962 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-08 15:48:43.94+08 2020-04-08 15:48:43.94+08 43f54168-c6b9-4a10-af52-08fea895afd5 2 t f
+4963 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-08 15:49:19.512+08 2020-04-08 15:49:19.512+08 ac9005d2-5ca6-44c7-a4c2-d9dc1b66738b 2 t f
+4970 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-08 16:00:19.953+08 2020-04-08 16:00:19.953+08 ec4bef46-3f33-4abc-bc5a-fdd02804546e 2 t f
+4973 physicalvalue 应力 Output \N \N \N 2 6 0 MPa 2020-04-08 16:01:46.67+08 2020-04-08 16:01:46.67+08 facb0a36-aad1-464a-9e62-5982e7f96038 2 t f
+4978 physicalvalue 应力 Output \N \N \N 2 6 0 MPa 2020-04-08 16:04:32.271+08 2020-04-08 16:04:32.271+08 2fedcbbc-d631-410f-9dbf-9868452b711e 2 t f
+4987 frequency 频率 Output \N \N \N 3 \N \N HZ 2020-04-09 09:30:38.835+08 2020-04-09 09:30:38.835+08 36882038-cdf2-4b13-ba96-4cc30aec58fd 2 t f
+4989 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-09 09:51:36.809+08 2020-04-09 09:51:36.809+08 4975a00d-a65f-4564-9e87-4d0e75b2b44a 2 t f
+4994 frequency 频率 Output \N \N \N 4 \N \N HZ 2020-04-09 09:56:27.458+08 2020-04-09 09:56:27.458+08 3b90cfc3-9011-4dac-a197-db1f1224684d 2 t f
+4997 temperature 温度 Output \N \N \N 4 \N \N ℃ 2020-04-09 10:01:27.87+08 2020-04-09 10:01:27.87+08 33cf337b-b7b3-44f0-ba1c-a4394b8b357f 2 t f
+5000 physicalvalue 水压 Output \N \N \N 2 0.6 0 MPa 2020-04-09 10:03:00.975+08 2020-04-09 10:03:00.975+08 33cf337b-b7b3-44f0-ba1c-a4394b8b357f 2 t f
+5008 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-09 10:13:16.229+08 2020-04-09 10:13:16.229+08 9fb72bd5-827f-42b1-8c3f-9cd2b7bb9f4b 2 t f
+5015 physicalvalue 应变 Output \N 2 1500 -1500 με 2020-04-09 16:45:31.981+08 2020-04-09 16:45:53.371+08 62e931ef-494f-487d-b32d-d4025cfccc5b 2 t f
+5020 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-09 16:49:56.767+08 2020-04-09 16:49:56.767+08 8e1b795f-20a4-49c1-844a-6818b46743f2 2 t f
+5023 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-09 16:54:58.793+08 2020-04-09 16:54:58.793+08 e905e3ce-b6ac-4237-9590-14ee97e867fe 2 t f
+5026 am 幅值 Output \N \N \N 4 \N \N mv 2020-04-09 17:05:46.485+08 2020-04-09 17:05:46.485+08 7938b967-3298-4052-b8c2-d0fd4b57adb2 2 t f
+5030 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-09 17:09:36.166+08 2020-04-09 17:09:36.166+08 44e109ee-d542-45f6-914e-6313d2ef5aee 2 t f
+5031 physicalvalue 荷载力 Output \N 4 160 -160 KN 2020-04-09 17:10:11.576+08 2020-04-09 17:10:39.911+08 44e109ee-d542-45f6-914e-6313d2ef5aee 2 t f
+5037 am 幅值 Output \N \N \N 4 \N \N mv 2020-04-09 17:23:02.695+08 2020-04-09 17:23:02.695+08 b51644b9-4159-40db-9599-8b080069cc65 2 t f
+5039 temperature 温度 Output \N \N \N 4 \N \N ℃ 2020-04-09 17:24:04.313+08 2020-04-09 17:24:04.313+08 b51644b9-4159-40db-9599-8b080069cc65 2 t f
+5067 frequency 频率 Output \N \N \N 4 \N \N HZ 2020-04-10 17:07:58.996+08 2020-04-10 17:07:58.996+08 ce9b72cb-67fd-4117-b485-a9443b3409e9 2 t f
+4935 angley y方向角度 Output \N 3 30 -30 ° 2020-04-05 16:38:47.898+08 2020-04-10 14:11:49.235+08 a6d36e90-1e77-42f2-9d03-3852f9e5a9ed 2 t f
+5068 temperature 温度 Output \N 4 \N \N ℃ 2020-04-10 17:08:24.736+08 2020-04-10 17:08:42.862+08 ce9b72cb-67fd-4117-b485-a9443b3409e9 2 t f
+4938 angley y方向角度 Output \N 3 30 -30 ° 2020-04-05 16:40:36.818+08 2020-04-10 14:12:54.525+08 34d873b8-b4cf-4313-ae19-a2fedae19eca 2 t f
+4980 pressure 压力 Output \N 2 10 -10 Kpa 2020-04-08 16:38:25.311+08 2020-04-13 13:23:54.437+08 93a512ff-ed6a-423c-a66b-0a9c882a1f7c 2 t f
+4964 physicalvalue 应力 Output \N \N \N 2 0.6 0 MPa 2020-04-08 15:50:04.991+08 2020-04-08 15:50:04.991+08 ac9005d2-5ca6-44c7-a4c2-d9dc1b66738b 2 t f
+4965 frequency 频率 Output \N \N \N \N \N \N HZ 2020-04-08 15:50:54.274+08 2020-04-08 15:50:54.274+08 ac9005d2-5ca6-44c7-a4c2-d9dc1b66738b 2 t f
+4966 am 幅值 Output \N \N \N \N \N \N mv 2020-04-08 15:51:33.892+08 2020-04-08 15:51:33.892+08 ac9005d2-5ca6-44c7-a4c2-d9dc1b66738b 2 t f
+4967 physicalvalue 应力 Output \N \N \N 2 6 0 MPa 2020-04-08 15:59:03.3+08 2020-04-08 15:59:03.3+08 ec4bef46-3f33-4abc-bc5a-fdd02804546e 2 t f
+4968 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-08 15:59:26.117+08 2020-04-08 15:59:26.117+08 ec4bef46-3f33-4abc-bc5a-fdd02804546e 2 t f
+4969 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-08 15:59:48.521+08 2020-04-08 15:59:48.521+08 ec4bef46-3f33-4abc-bc5a-fdd02804546e 2 t f
+4971 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-08 16:00:49.442+08 2020-04-08 16:00:49.442+08 facb0a36-aad1-464a-9e62-5982e7f96038 2 t f
+4972 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-08 16:01:20.311+08 2020-04-08 16:01:20.311+08 facb0a36-aad1-464a-9e62-5982e7f96038 2 t f
+4974 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-08 16:02:35.805+08 2020-04-08 16:02:35.805+08 facb0a36-aad1-464a-9e62-5982e7f96038 2 t f
+4975 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-08 16:03:02.032+08 2020-04-08 16:03:02.032+08 2fedcbbc-d631-410f-9dbf-9868452b711e 2 t f
+4976 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-08 16:03:33.693+08 2020-04-08 16:03:33.693+08 2fedcbbc-d631-410f-9dbf-9868452b711e 2 t f
+4977 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-08 16:04:01.837+08 2020-04-08 16:04:01.837+08 2fedcbbc-d631-410f-9dbf-9868452b711e 2 t f
+4979 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-08 16:37:35.911+08 2020-04-08 16:37:35.911+08 93a512ff-ed6a-423c-a66b-0a9c882a1f7c 2 t f
+4981 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-09 09:23:29.534+08 2020-04-09 09:23:29.534+08 47fbc1d7-872f-4e0d-b675-c7d51436f795 2 t f
+4982 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-09 09:24:02.345+08 2020-04-09 09:24:02.345+08 47fbc1d7-872f-4e0d-b675-c7d51436f795 2 t f
+5002 am 幅值 Output \N \N \N 4 \N \N mv 2020-04-09 10:08:03.431+08 2020-04-09 10:08:03.431+08 a52e2352-c27a-4d80-85fd-aaf9967cc19f 2 t f
+5033 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-09 17:19:00.682+08 2020-04-09 17:19:00.682+08 7b3502a3-1fd6-467c-b66f-221cc977bcda 2 t f
+5043 angley y方向角度 Output \N \N 30 -30 ° 2020-04-10 10:52:44.243+08 2020-04-10 14:14:00.939+08 da212a69-66d5-4870-a4f5-c49da884d914 2 t f
+4983 physicalvalue 微应变 Output \N 2 5000 -5000 με 2020-04-09 09:26:39.846+08 2020-04-09 09:26:57.579+08 47fbc1d7-872f-4e0d-b675-c7d51436f795 2 t f
+4984 am 幅值 Output \N \N \N 4 \N \N mv 2020-04-09 09:27:29.717+08 2020-04-09 09:27:29.717+08 47fbc1d7-872f-4e0d-b675-c7d51436f795 2 t f
+4985 physicalvalue 应变 Output \N 4 1500 -1500 με 2020-04-09 09:29:40.414+08 2020-04-09 09:29:49.511+08 36882038-cdf2-4b13-ba96-4cc30aec58fd 2 t f
+4986 temperature 温度 Output \N \N \N 4 \N \N ℃ 2020-04-09 09:30:12.889+08 2020-04-09 09:30:12.889+08 36882038-cdf2-4b13-ba96-4cc30aec58fd 2 t f
+5066 am 幅值 Output \N \N \N 4 \N \N mv 2020-04-10 17:07:32.199+08 2020-04-10 17:07:32.199+08 ce9b72cb-67fd-4117-b485-a9443b3409e9 2 t f
+4988 am 幅值 Output \N \N \N 4 \N \N mv 2020-04-09 09:31:12.088+08 2020-04-09 09:31:12.088+08 36882038-cdf2-4b13-ba96-4cc30aec58fd 2 t f
+4990 physicalvalue 水压 Output \N 2 1 0 MPa 2020-04-09 09:52:05.866+08 2020-04-09 09:52:27.504+08 4975a00d-a65f-4564-9e87-4d0e75b2b44a 2 t f
+4991 am 幅值 Output \N \N \N 4 \N \N mv 2020-04-09 09:52:51.095+08 2020-04-09 09:52:51.095+08 4975a00d-a65f-4564-9e87-4d0e75b2b44a 2 t f
+4992 frequency 频率 Output \N \N \N 4 \N \N HZ 2020-04-09 09:54:07.47+08 2020-04-09 09:54:07.47+08 4975a00d-a65f-4564-9e87-4d0e75b2b44a 2 t f
+5018 physicalvalue 应变 Output \N \N \N 2 5000 -5000 με 2020-04-09 16:48:49.19+08 2020-04-09 16:48:49.19+08 8e1b795f-20a4-49c1-844a-6818b46743f2 2 t f
+5054 temperature 温度 Output \N \N \N 3 \N \N ℃ 2020-04-10 15:38:42.328+08 2020-04-10 15:38:42.328+08 0c8d3e5c-4b72-4b7f-bc25-e0f20e899f0f 2 t f
+4993 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-09 09:56:00.994+08 2020-04-09 09:56:00.994+08 3b90cfc3-9011-4dac-a197-db1f1224684d 2 t f
+4995 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-09 09:56:51.272+08 2020-04-09 09:56:51.272+08 3b90cfc3-9011-4dac-a197-db1f1224684d 2 t f
+4996 physicalvalue 水压 Output \N 2 0.8 0 MPa 2020-04-09 09:57:27.142+08 2020-04-09 09:57:40.317+08 3b90cfc3-9011-4dac-a197-db1f1224684d 2 t f
+4998 am 幅值 Output \N \N \N \N \N \N mv 2020-04-09 10:01:48.913+08 2020-04-09 10:01:48.913+08 33cf337b-b7b3-44f0-ba1c-a4394b8b357f 2 t f
+4999 frequency 频率 Output \N \N \N 4 \N \N HZ 2020-04-09 10:02:19.598+08 2020-04-09 10:02:19.598+08 33cf337b-b7b3-44f0-ba1c-a4394b8b357f 2 t f
+5001 frequency 频率 Output \N \N \N 4 \N \N HZ 2020-04-09 10:07:37.366+08 2020-04-09 10:07:37.366+08 a52e2352-c27a-4d80-85fd-aaf9967cc19f 2 t f
+5056 angley y方向角度 Output \N \N \N 4 \N \N ° 2020-04-10 15:39:28.839+08 2020-04-10 15:39:28.839+08 0c8d3e5c-4b72-4b7f-bc25-e0f20e899f0f 2 t f
+5003 temperature 温度 Output \N \N \N 4 \N \N ℃ 2020-04-09 10:09:00.979+08 2020-04-09 10:09:00.979+08 a52e2352-c27a-4d80-85fd-aaf9967cc19f 2 t f
+5004 physicalvalue 水压 Output \N 2 0.4 0 MPa 2020-04-09 10:09:32.98+08 2020-04-09 10:09:47.767+08 a52e2352-c27a-4d80-85fd-aaf9967cc19f 2 t f
+5005 frequency 频率 Output \N \N \N 4 \N \N HZ 2020-04-09 10:11:45.709+08 2020-04-09 10:11:45.709+08 9fb72bd5-827f-42b1-8c3f-9cd2b7bb9f4b 2 t f
+5006 physicalvalue 水压 Output \N \N \N 4 \N \N MPa 2020-04-09 10:12:14.72+08 2020-04-09 10:12:14.72+08 9fb72bd5-827f-42b1-8c3f-9cd2b7bb9f4b 2 t f
+5007 temperature 温度 Output \N \N \N 4 \N \N ℃ 2020-04-09 10:12:40.974+08 2020-04-09 10:12:40.974+08 9fb72bd5-827f-42b1-8c3f-9cd2b7bb9f4b 2 t f
+5010 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-09 11:53:45.968+08 2020-04-09 11:53:45.968+08 719b1f89-ba16-4e07-bcb6-f3914f8e0aca 2 t f
+5012 temperature 温度 Output \N \N \N 4 \N \N ℃ 2020-04-09 11:55:42.908+08 2020-04-09 11:55:42.908+08 f8e59d17-39f9-4805-895b-be09de939091 2 t f
+5013 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-09 16:44:09.935+08 2020-04-09 16:44:09.935+08 62e931ef-494f-487d-b32d-d4025cfccc5b 2 t f
+5014 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-09 16:44:50.144+08 2020-04-09 16:44:50.144+08 62e931ef-494f-487d-b32d-d4025cfccc5b 2 t f
+5016 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-09 16:46:18.279+08 2020-04-09 16:46:18.279+08 62e931ef-494f-487d-b32d-d4025cfccc5b 2 t f
+5040 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-09 17:24:39.523+08 2020-04-09 17:24:39.523+08 b51644b9-4159-40db-9599-8b080069cc65 2 t f
+5009 angley y方向角度 Output \N 2 30 -30 ° 2020-04-09 11:53:15.379+08 2020-04-10 14:14:18.609+08 719b1f89-ba16-4e07-bcb6-f3914f8e0aca 2 t f
+5059 am 幅值 Output \N \N \N 4 \N \N mv 2020-04-10 15:42:33.566+08 2020-04-10 15:42:33.566+08 6dfd1190-97ed-46dc-aca7-921af38cdf01 2 t f
+5017 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-09 16:48:09.161+08 2020-04-09 16:48:09.161+08 8e1b795f-20a4-49c1-844a-6818b46743f2 2 t f
+5019 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-09 16:49:21.982+08 2020-04-09 16:49:21.982+08 8e1b795f-20a4-49c1-844a-6818b46743f2 2 t f
+5021 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-09 16:53:56.025+08 2020-04-09 16:53:56.025+08 e905e3ce-b6ac-4237-9590-14ee97e867fe 2 t f
+5022 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-09 16:54:21.752+08 2020-04-09 16:54:21.752+08 e905e3ce-b6ac-4237-9590-14ee97e867fe 2 t f
+5024 physicalvalue 应力 Output \N 2 3000 -3000 με 2020-04-09 16:57:33.407+08 2020-04-09 16:57:53.937+08 e905e3ce-b6ac-4237-9590-14ee97e867fe 2 t f
+5025 physicalvalue 荷载力 Output \N 4 136 -136 KN 2020-04-09 17:05:08.147+08 2020-04-09 17:05:23.82+08 7938b967-3298-4052-b8c2-d0fd4b57adb2 2 t f
+5027 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-09 17:06:31.029+08 2020-04-09 17:06:31.029+08 7938b967-3298-4052-b8c2-d0fd4b57adb2 2 t f
+5028 frequency 频率 Output \N \N \N 4 \N \N HZ 2020-04-09 17:08:30.613+08 2020-04-09 17:08:30.613+08 44e109ee-d542-45f6-914e-6313d2ef5aee 2 t f
+5029 am 幅值 Output \N \N \N 4 \N \N mv 2020-04-09 17:09:06.999+08 2020-04-09 17:09:06.999+08 44e109ee-d542-45f6-914e-6313d2ef5aee 2 t f
+5049 anglex x方向角度 Output \N 2 30 -30 ° 2020-04-10 14:09:22.218+08 2020-04-10 14:12:06.065+08 a6d36e90-1e77-42f2-9d03-3852f9e5a9ed 2 t f
+5053 angley y方向角度 Output \N \N \N 3 30 -30 ° 2020-04-10 14:40:35.911+08 2020-04-10 14:40:35.911+08 22fd06d1-3028-481b-9025-f4fa0093bb6a 2 t f
+5032 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-09 17:15:41.061+08 2020-04-09 17:15:41.061+08 7938b967-3298-4052-b8c2-d0fd4b57adb2 2 t f
+5034 physicalvalue 荷载力 Output \N 4 105 -105 KN 2020-04-09 17:19:34.877+08 2020-04-09 17:19:51.362+08 7b3502a3-1fd6-467c-b66f-221cc977bcda 2 t f
+5035 frequency 频率 Output \N \N \N 4 \N \N HZ 2020-04-09 17:20:16.115+08 2020-04-09 17:20:16.115+08 7b3502a3-1fd6-467c-b66f-221cc977bcda 2 t f
+5036 temperature 温度 Output \N \N \N 4 \N \N ℃ 2020-04-09 17:21:19.817+08 2020-04-09 17:21:19.817+08 7b3502a3-1fd6-467c-b66f-221cc977bcda 2 t f
+5038 physicalvalue 荷载力 Output \N 4 75 -75 KN 2020-04-09 17:23:31.093+08 2020-04-09 17:23:42.653+08 b51644b9-4159-40db-9599-8b080069cc65 2 t f
+5041 physicalvalue 轴力 Output \N \N \N 2 5000 -5000 KN 2020-04-10 10:45:21.409+08 2020-04-10 10:45:21.409+08 de345f11-6d4a-420b-963d-0bc26a7144f1 2 t f
+5042 frequency 频率 Output \N \N \N 4 \N \N HZ 2020-04-10 10:45:46.774+08 2020-04-10 10:45:46.774+08 de345f11-6d4a-420b-963d-0bc26a7144f1 2 t f
+5044 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-04-10 10:53:32.794+08 2020-04-10 10:53:32.794+08 da212a69-66d5-4870-a4f5-c49da884d914 2 t f
+5045 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-10 11:01:21.62+08 2020-04-10 11:01:21.62+08 de345f11-6d4a-420b-963d-0bc26a7144f1 2 t f
+5046 am 幅值 Output \N \N \N 4 \N \N mv 2020-04-10 11:01:42.116+08 2020-04-10 11:01:42.116+08 de345f11-6d4a-420b-963d-0bc26a7144f1 2 t f
+5048 temperature 温度 Output \N \N \N 3 \N \N ℃ 2020-04-10 11:05:13.368+08 2020-04-10 11:05:13.368+08 ad8e440e-0f52-4e43-95ed-97bed0575767 2 t f
+5047 angley y方向角度 Output \N 2 30 -30 ° 2020-04-10 11:04:24.156+08 2020-04-10 14:14:35.773+08 ad8e440e-0f52-4e43-95ed-97bed0575767 2 t f
+5050 angley y方向角度 Output \N \N \N \N 30 -30 ° 2020-04-10 14:36:24.651+08 2020-04-10 14:36:24.651+08 bd6fbf3d-b14f-4da0-bcfe-fec0c1afa863 2 t f
+5051 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-10 14:36:53.688+08 2020-04-10 14:36:53.688+08 bd6fbf3d-b14f-4da0-bcfe-fec0c1afa863 2 t f
+5052 temperature 温度 Output \N \N \N 3 \N \N ℃ 2020-04-10 14:39:59.384+08 2020-04-10 14:39:59.384+08 22fd06d1-3028-481b-9025-f4fa0093bb6a 2 t f
+5055 temperature 温度 Output \N \N \N 4 \N \N ℃ 2020-04-10 15:38:58.217+08 2020-04-10 15:38:58.217+08 bef72760-da7f-4b64-a389-b3040de2ded3 2 t f
+5057 angley y方向角度 Output \N \N \N 4 \N \N ° 2020-04-10 15:40:09.695+08 2020-04-10 15:40:09.695+08 bef72760-da7f-4b64-a389-b3040de2ded3 2 t f
+5058 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-10 15:42:12.901+08 2020-04-10 15:42:12.901+08 6dfd1190-97ed-46dc-aca7-921af38cdf01 2 t f
+5060 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-10 15:42:58.223+08 2020-04-10 15:42:58.223+08 6dfd1190-97ed-46dc-aca7-921af38cdf01 2 t f
+5061 physicalvalue 应力 Output \N \N \N \N \N \N 2020-04-10 15:49:56.346+08 2020-04-10 15:49:56.346+08 6dfd1190-97ed-46dc-aca7-921af38cdf01 2 t f
+5062 physicalvalue 轴力 Output \N \N 3000 -3000 KN 2020-04-10 17:05:20.881+08 2020-04-10 17:05:34.151+08 9aaf71fd-cc26-4738-86f0-f27fb8983581 2 t f
+5063 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-04-10 17:06:03.87+08 2020-04-10 17:06:03.87+08 9aaf71fd-cc26-4738-86f0-f27fb8983581 2 t f
+5064 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-10 17:06:35.69+08 2020-04-10 17:06:35.69+08 9aaf71fd-cc26-4738-86f0-f27fb8983581 2 t f
+5065 am 幅值 Output \N \N \N 4 \N \N mv 2020-04-10 17:06:54.694+08 2020-04-10 17:06:54.694+08 9aaf71fd-cc26-4738-86f0-f27fb8983581 2 t f
+5069 physicalvalue 轴力 Output \N \N \N 2 4000 -4000 KN 2020-04-10 17:09:19.556+08 2020-04-10 17:09:19.556+08 ce9b72cb-67fd-4117-b485-a9443b3409e9 2 t f
+5070 physicalvalue 轴力 Output \N \N \N 3 2000 -2000 KN 2020-04-10 17:10:47.127+08 2020-04-10 17:10:47.127+08 e8d508fb-9ad6-4f72-bab4-552351765b49 2 t f
+5071 frequency 频率 Output \N \N \N 4 \N \N HZ 2020-04-10 17:11:08.148+08 2020-04-10 17:11:08.148+08 e8d508fb-9ad6-4f72-bab4-552351765b49 2 t f
+5072 temperature 温度 Output \N \N \N 3 \N \N ℃ 2020-04-10 17:11:31.374+08 2020-04-10 17:11:31.374+08 e8d508fb-9ad6-4f72-bab4-552351765b49 2 t f
+5073 am 幅值 Output \N \N \N 3 \N \N mv 2020-04-10 17:12:03.358+08 2020-04-10 17:12:03.358+08 e8d508fb-9ad6-4f72-bab4-552351765b49 2 t f
+5074 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-10 17:13:30.647+08 2020-04-10 17:13:30.647+08 f018487f-55ee-4fc2-b204-738cde478d4b 2 t f
+5075 temperature 温度 Output \N \N \N 3 \N \N ℃ 2020-04-10 17:13:54.356+08 2020-04-10 17:13:54.356+08 f018487f-55ee-4fc2-b204-738cde478d4b 2 t f
+5076 physicalvalue 轴力 Output \N \N \N 3 1000 -1000 KN 2020-04-10 17:14:25.988+08 2020-04-10 17:14:25.988+08 f018487f-55ee-4fc2-b204-738cde478d4b 2 t f
+5077 frequency 频率 Output \N \N \N 3 \N \N HZ 2020-04-10 17:14:58.121+08 2020-04-10 17:14:58.121+08 f018487f-55ee-4fc2-b204-738cde478d4b 2 t f
+5078 am 幅值 Output \N \N \N \N mv 2020-04-13 08:47:38.602+08 2020-04-13 08:47:49.555+08 09173a38-657c-4584-97f6-d5fd984c6cef 2 t f
+5079 frequency 频率 Output \N \N \N \N \N \N HZ 2020-04-13 08:48:15.896+08 2020-04-13 08:48:15.896+08 09173a38-657c-4584-97f6-d5fd984c6cef 2 t f
+5080 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-13 08:49:54.532+08 2020-04-13 08:49:54.532+08 09173a38-657c-4584-97f6-d5fd984c6cef 2 t f
+5081 physicalvalue 应力 Output \N 3 6 0 MPa 2020-04-13 08:50:26.425+08 2020-04-13 08:50:46.214+08 09173a38-657c-4584-97f6-d5fd984c6cef 2 t f
+5082 am 幅值 Output \N \N \N 4 \N \N mv 2020-04-13 08:52:23.332+08 2020-04-13 08:52:23.332+08 be4087dd-e776-49f6-a2a0-6ad64e530ac9 2 t f
+5083 frequency 频率 Output \N \N \N 3 \N \N HZ 2020-04-13 08:52:45.323+08 2020-04-13 08:52:45.323+08 be4087dd-e776-49f6-a2a0-6ad64e530ac9 2 t f
+5084 temperature 温度 Output \N \N \N 3 \N \N ℃ 2020-04-13 08:53:14.097+08 2020-04-13 08:53:14.097+08 be4087dd-e776-49f6-a2a0-6ad64e530ac9 2 t f
+5085 physicalvalue 应力 Output \N \N \N 2 0.6 0 MPa 2020-04-13 08:53:45.977+08 2020-04-13 08:53:45.977+08 be4087dd-e776-49f6-a2a0-6ad64e530ac9 2 t f
+5086 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-13 08:58:41.749+08 2020-04-13 08:58:41.749+08 600fa9e0-1e6c-4c0f-b9df-2445d771d54f 2 t f
+5087 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-13 08:59:15.132+08 2020-04-13 08:59:15.132+08 600fa9e0-1e6c-4c0f-b9df-2445d771d54f 2 t f
+5088 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-13 08:59:43.567+08 2020-04-13 08:59:43.567+08 600fa9e0-1e6c-4c0f-b9df-2445d771d54f 2 t f
+5089 physicalvalue 应力 Output \N 2 0.2 0 MPa 2020-04-13 09:00:27.184+08 2020-04-13 09:00:38.837+08 600fa9e0-1e6c-4c0f-b9df-2445d771d54f 2 t f
+5090 am 幅值 Output \N \N \N \N \N \N mv 2020-04-13 09:02:29.65+08 2020-04-13 09:02:29.65+08 c3cf2a99-570b-480e-bd03-d4218a84382d 2 t f
+5091 physicalvalue 应力 Output \N 2 2 0 MPa 2020-04-13 09:02:56.399+08 2020-04-13 09:03:09.98+08 c3cf2a99-570b-480e-bd03-d4218a84382d 2 t f
+5092 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-13 09:03:34.337+08 2020-04-13 09:03:34.337+08 c3cf2a99-570b-480e-bd03-d4218a84382d 2 t f
+5093 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-13 09:04:23.936+08 2020-04-13 09:04:23.936+08 c3cf2a99-570b-480e-bd03-d4218a84382d 2 t f
+5094 temperature 温度 Output \N \N \N 3 \N \N ℃ 2020-04-13 11:01:30.78+08 2020-04-13 11:01:30.78+08 bf5542b0-0eaf-48a7-acf5-359e608b19d0 2 t f
+5095 angley y方向角度 Output \N \N \N 3 \N \N ° 2020-04-13 11:01:59.948+08 2020-04-13 11:01:59.948+08 bf5542b0-0eaf-48a7-acf5-359e608b19d0 2 t f
+5097 angley y方向角度 Output \N \N \N 3 \N \N ° 2020-04-13 11:03:03.955+08 2020-04-13 11:03:03.955+08 0bf1ab3a-44c3-44d5-bcec-83c1507080c9 2 t f
+5096 anglex x方向角度 Output \N 3 \N \N ° 2020-04-13 11:02:35.958+08 2020-04-13 11:03:12.883+08 bf5542b0-0eaf-48a7-acf5-359e608b19d0 2 t f
+5099 temperature 温度 Output \N \N \N 3 \N \N ℃ 2020-04-13 11:04:13.626+08 2020-04-13 11:04:13.626+08 0bf1ab3a-44c3-44d5-bcec-83c1507080c9 2 t f
+5100 temperature 温度 Output \N 2 \N \N ℃ 2020-04-13 11:04:41.178+08 2020-04-13 11:04:48.279+08 ed4d092d-260f-49cc-a985-176fd50d18c9 2 t f
+5101 anglex x方向角度 Output \N \N \N 2 \N \N ° 2020-04-13 11:05:16.337+08 2020-04-13 11:05:16.337+08 ed4d092d-260f-49cc-a985-176fd50d18c9 2 t f
+5102 angley y方向角度 Output \N \N \N 3 \N \N ° 2020-04-13 11:05:44.316+08 2020-04-13 11:05:44.316+08 ed4d092d-260f-49cc-a985-176fd50d18c9 2 t f
+5103 angley y方向角度 Output \N \N \N 2 \N \N ° 2020-04-13 11:06:27.24+08 2020-04-13 11:06:27.24+08 74d8243e-c93f-4694-b627-27150be13541 2 t f
+5104 anglex x方向角度 Output \N \N \N 2 \N \N ° 2020-04-13 11:06:56.064+08 2020-04-13 11:06:56.064+08 74d8243e-c93f-4694-b627-27150be13541 2 t f
+5105 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-13 11:07:17.79+08 2020-04-13 11:07:17.79+08 74d8243e-c93f-4694-b627-27150be13541 2 t f
+5098 anglex x方向角度 Output \N 2 \N \N ° 2020-04-13 11:03:49.952+08 2020-04-13 11:07:49.502+08 0bf1ab3a-44c3-44d5-bcec-83c1507080c9 2 t f
+5110 physicalvalue 应力 Output \N \N \N 2 0.8 0 MPa 2020-04-13 11:31:15.044+08 2020-04-13 11:31:15.044+08 475ef4a4-f7ad-47ca-bf47-6c02061d73f8 2 t f
+5107 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-13 11:28:11.525+08 2020-04-13 11:28:11.525+08 ab916260-ed75-4e0b-8109-d9b164ac1f2c 2 t f
+5108 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-13 11:28:34.368+08 2020-04-13 11:28:34.368+08 ab916260-ed75-4e0b-8109-d9b164ac1f2c 2 t f
+5109 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-13 11:29:01.963+08 2020-04-13 11:29:01.963+08 ab916260-ed75-4e0b-8109-d9b164ac1f2c 2 t f
+3476 physicalvalue 应力 Output \N 4 1 0 MPa 2019-02-25 15:43:07.042+08 2020-04-13 11:29:22.91+08 b62a52ce-bcd3-4156-89d7-83ab453c3121 2 t f
+5106 physicalvalue 应力 Output \N 2 1 0 MPa 2020-04-13 11:27:21.351+08 2020-04-13 11:29:34.041+08 ab916260-ed75-4e0b-8109-d9b164ac1f2c 2 t f
+5111 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-13 11:31:35.316+08 2020-04-13 11:31:35.316+08 475ef4a4-f7ad-47ca-bf47-6c02061d73f8 2 t f
+5112 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-13 11:32:04.385+08 2020-04-13 11:32:04.385+08 475ef4a4-f7ad-47ca-bf47-6c02061d73f8 2 t f
+5113 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-13 11:32:26.551+08 2020-04-13 11:32:26.551+08 475ef4a4-f7ad-47ca-bf47-6c02061d73f8 2 t f
+5114 physicalvalue 应力 Output \N \N \N 2 0.4 0 MPa 2020-04-13 11:34:48.945+08 2020-04-13 11:34:48.945+08 8e6f0fd7-4b27-47b4-8e62-85c8302d8219 2 t f
+5116 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-13 11:35:32.718+08 2020-04-13 11:35:32.718+08 8e6f0fd7-4b27-47b4-8e62-85c8302d8219 2 t f
+5117 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-13 11:36:02.816+08 2020-04-13 11:36:02.816+08 8e6f0fd7-4b27-47b4-8e62-85c8302d8219 2 t f
+5118 temperature 温度 Output \N 2 120 -30 ℃ 2020-04-13 11:50:13.607+08 2020-04-13 11:53:26.383+08 a31c164d-a581-4bda-8e94-7c41ab12cfa1 2 t f
+5149 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-14 09:47:55.611+08 2020-04-14 09:47:55.611+08 cb22fb01-45b8-4e12-83cd-75fb5dcf585e 2 t f
+5168 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-14 10:41:32.141+08 2020-04-14 10:41:32.141+08 17324dd0-1385-4d70-92fc-49d595c88ed8 2 t f
+5121 temperature 温度 Output \N 2 120 -30 ℃ 2020-04-13 11:51:24.244+08 2020-04-13 11:52:55.984+08 4b648fd9-37fe-4060-b04f-70c5e351b0a4 2 t f
+5120 angley Y方向角度 Output \N 2 30 -30 ° 2020-04-13 11:51:02.092+08 2020-04-13 11:53:06.092+08 4b648fd9-37fe-4060-b04f-70c5e351b0a4 2 t f
+5119 angley Y方向角度 Output \N 2 30 -30 ° 2020-04-13 11:50:36.017+08 2020-04-13 11:53:16.039+08 a31c164d-a581-4bda-8e94-7c41ab12cfa1 2 t f
+5134 pressure 压力 Output \N 2 20 -20 Kpa 2020-04-13 13:30:24.437+08 2020-04-13 13:30:38.583+08 82b95b39-2e60-4eae-9c51-1977fc3b73e9 2 t f
+5174 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-14 10:46:42.106+08 2020-04-14 10:46:42.106+08 b350cfa3-4960-4e96-ae63-0e0ab3319c29 2 t f
+5123 angley Y方向角度 Output \N \N \N 2 30 -30 ° 2020-04-13 11:52:25.198+08 2020-04-13 11:52:25.198+08 ff32ae55-d999-4f10-b4fa-53ef0c69d6be 2 t f
+5122 temperature 温度 Output \N 2 120 -30 ℃ 2020-04-13 11:51:47.637+08 2020-04-13 11:52:43.468+08 ff32ae55-d999-4f10-b4fa-53ef0c69d6be 2 t f
+5124 temperature 温度 Output \N \N \N \N 70 -25 ℃ 2020-04-13 13:08:19.958+08 2020-04-13 13:08:19.958+08 d7755dfe-3b58-4cd9-a3b1-1cce2f6cb34d 2 t f
+5159 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-14 10:19:00.853+08 2020-04-14 10:19:00.853+08 fbafe139-6003-4dff-a59a-bf51b0d5ce75 2 t f
+5125 angley Y方向角度 Output \N \N \N 2 30 -30 ° 2020-04-13 13:08:50.605+08 2020-04-13 13:08:50.605+08 d7755dfe-3b58-4cd9-a3b1-1cce2f6cb34d 2 t f
+5126 angley Y方向角度 Output \N \N \N 2 30 -30 ° 2020-04-13 13:09:20.544+08 2020-04-13 13:09:20.544+08 1afc6939-be77-4cb0-b7a1-59ed529b9ee1 2 t f
+5127 temperature 温度 Output \N \N \N 2 70 -25 ℃ 2020-04-13 13:09:50.336+08 2020-04-13 13:09:50.336+08 1afc6939-be77-4cb0-b7a1-59ed529b9ee1 2 t f
+5128 temperature 温度 Output \N \N \N 2 70 -25 ℃ 2020-04-13 13:10:16.095+08 2020-04-13 13:10:16.095+08 48c0716a-ffe7-4de2-b5d6-295ebd1bef98 2 t f
+5129 angley Y方向角度 Output \N \N \N 2 30 -30 ° 2020-04-13 13:10:52.176+08 2020-04-13 13:10:52.176+08 48c0716a-ffe7-4de2-b5d6-295ebd1bef98 2 t f
+5130 angley Y方向角度 Output \N \N \N 2 30 -30 ° 2020-04-13 13:11:24.556+08 2020-04-13 13:11:24.556+08 002dd588-51a7-417d-9986-71cdcdc4b0b4 2 t f
+5131 temperature 温度 Output \N \N \N 2 70 -25 ℃ 2020-04-13 13:11:53.472+08 2020-04-13 13:11:53.472+08 002dd588-51a7-417d-9986-71cdcdc4b0b4 2 t f
+5132 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-13 13:27:28.095+08 2020-04-13 13:27:28.095+08 933454ed-df7e-4ca3-950b-6faf23a1a5dc 2 t f
+5133 pressure 压力 Output \N 2 10 -10 Kpa 2020-04-13 13:27:55.156+08 2020-04-13 13:28:07.742+08 933454ed-df7e-4ca3-950b-6faf23a1a5dc 2 t f
+5135 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-13 13:31:01.089+08 2020-04-13 13:31:01.089+08 82b95b39-2e60-4eae-9c51-1977fc3b73e9 2 t f
+5137 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-13 16:42:59.126+08 2020-04-13 16:42:59.126+08 29b24211-38a9-4c77-9218-11d0c3939a5b 2 t f
+5138 length 距离 Output \N \N \N 2 \N \N m 2020-04-13 16:42:59.133+08 2020-04-13 16:42:59.133+08 29b24211-38a9-4c77-9218-11d0c3939a5b 2 t f
+5139 length 距离 Output \N \N \N 2 \N \N m 2020-04-13 16:42:59.147+08 2020-04-13 16:42:59.147+08 8aef8520-904e-46b6-9223-952b50c16f52 2 t f
+5140 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-13 16:42:59.152+08 2020-04-13 16:42:59.152+08 8aef8520-904e-46b6-9223-952b50c16f52 2 t f
+5141 length 距离 Output \N \N \N 2 \N \N m 2020-04-13 16:42:59.163+08 2020-04-13 16:42:59.163+08 b9a9f40b-2946-4b0f-abe7-10611a02fe1d 2 t f
+5142 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-13 16:42:59.168+08 2020-04-13 16:42:59.168+08 b9a9f40b-2946-4b0f-abe7-10611a02fe1d 2 t f
+5143 physicalvalue 加速度 Output \N \N \N \N \N \N cm/ss 2020-04-13 17:27:14.176+08 2020-04-13 17:27:14.176+08 05c7bb43-2fc0-4f0f-8be5-af5d4da3c75a 5 t f
+5144 physicalvalue 荷载 Output \N 2 400 -400 t 2020-04-14 09:41:50.997+08 2020-04-14 09:42:21.99+08 6084f264-aec5-4a6c-be5e-028c5139dfb8 2 t f
+5145 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-14 09:42:48.308+08 2020-04-14 09:42:48.308+08 6084f264-aec5-4a6c-be5e-028c5139dfb8 2 t f
+5146 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-14 09:43:21.252+08 2020-04-14 09:43:21.252+08 6084f264-aec5-4a6c-be5e-028c5139dfb8 2 t f
+5147 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-14 09:43:49.476+08 2020-04-14 09:43:49.476+08 6084f264-aec5-4a6c-be5e-028c5139dfb8 2 t f
+5148 physicalvalue 荷载 Output \N \N \N 3 300 -300 t 2020-04-14 09:47:28.142+08 2020-04-14 09:47:28.142+08 cb22fb01-45b8-4e12-83cd-75fb5dcf585e 2 t f
+5150 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-14 09:48:18.099+08 2020-04-14 09:48:18.099+08 cb22fb01-45b8-4e12-83cd-75fb5dcf585e 2 t f
+5152 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-14 10:13:25.196+08 2020-04-14 10:13:25.196+08 0928966d-ed3a-4cab-9e1b-32af22f5f89b 2 t f
+5162 physicalvalue 轴力 Output \N \N \N 2 \N \N KN 2020-04-14 10:34:58.708+08 2020-04-14 10:34:58.708+08 886912b7-fff8-4aff-84f4-04c043946eb0 2 t f
+5164 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-14 10:36:09.818+08 2020-04-14 10:36:09.818+08 abffe5ee-8ad1-41b8-95f2-70a6d52220db 2 t f
+5165 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-14 10:36:47.465+08 2020-04-14 10:36:47.465+08 abffe5ee-8ad1-41b8-95f2-70a6d52220db 2 t f
+5175 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-14 10:47:02.321+08 2020-04-14 10:47:02.321+08 53e381f9-db33-430e-8304-c344985c37f6 2 t f
+5136 temperature 温度 Output \N 2 120 -40 ℃ 2020-04-13 16:32:13.39+08 2020-04-14 10:59:30.662+08 6cf95499-c1da-478c-918c-bc809d89feb6 2 t f
+5182 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-21 13:41:45.899+08 2020-04-21 13:41:45.899+08 f605cba3-4024-46ad-b288-3c83568c5609 2 t f
+5151 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-14 09:48:39.333+08 2020-04-14 09:48:39.333+08 cb22fb01-45b8-4e12-83cd-75fb5dcf585e 2 t f
+5153 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-14 10:13:52.408+08 2020-04-14 10:13:52.408+08 0928966d-ed3a-4cab-9e1b-32af22f5f89b 2 t f
+5154 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-14 10:14:22.312+08 2020-04-14 10:14:22.312+08 0928966d-ed3a-4cab-9e1b-32af22f5f89b 2 t f
+5155 physicalvalue 荷载 Output \N \N \N 2 \N \N t 2020-04-14 10:14:42.014+08 2020-04-14 10:14:42.014+08 0928966d-ed3a-4cab-9e1b-32af22f5f89b 2 t f
+5156 am 幅值 Output \N \N \N 2 \N \N mv 2020-04-14 10:17:37.955+08 2020-04-14 10:17:37.955+08 fbafe139-6003-4dff-a59a-bf51b0d5ce75 2 t f
+5157 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-14 10:18:00.273+08 2020-04-14 10:18:00.273+08 fbafe139-6003-4dff-a59a-bf51b0d5ce75 2 t f
+5158 physicalvalue 荷载 Output \N \N \N 2 600 -600 t 2020-04-14 10:18:33.457+08 2020-04-14 10:18:33.457+08 fbafe139-6003-4dff-a59a-bf51b0d5ce75 2 t f
+3297 physicalvalue 轴力 Output \N 4 KN 2019-02-25 13:30:27.015+08 2020-04-14 10:26:14.058+08 03afe194-fc01-4993-8f9a-ed4ca0ae6d90 2 t f
+5160 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-14 10:34:12.854+08 2020-04-14 10:34:12.854+08 886912b7-fff8-4aff-84f4-04c043946eb0 2 t f
+5161 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-14 10:34:33.622+08 2020-04-14 10:34:33.622+08 886912b7-fff8-4aff-84f4-04c043946eb0 2 t f
+5166 physicalvalue 轴力 Output \N \N \N 2 \N \N KN 2020-04-14 10:40:37.006+08 2020-04-14 10:40:37.006+08 17324dd0-1385-4d70-92fc-49d595c88ed8 2 t f
+5177 physicalvalue 轴力 Output \N \N \N 2 \N \N KN 2020-04-14 10:47:45.323+08 2020-04-14 10:47:45.323+08 53e381f9-db33-430e-8304-c344985c37f6 2 t f
+5163 physicalvalue 轴力 Output \N \N \N 2 \N \N KN 2020-04-14 10:35:19.937+08 2020-04-14 10:35:19.937+08 abffe5ee-8ad1-41b8-95f2-70a6d52220db 2 t f
+5167 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-14 10:41:06.095+08 2020-04-14 10:41:06.095+08 17324dd0-1385-4d70-92fc-49d595c88ed8 2 t f
+5169 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-04-14 10:41:48.341+08 2020-04-14 10:41:48.341+08 9c9a0091-2f1b-4c1d-8b7c-ff60c41fca6f 2 t f
+5170 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-14 10:42:12.161+08 2020-04-14 10:42:12.161+08 9c9a0091-2f1b-4c1d-8b7c-ff60c41fca6f 2 t f
+5171 physicalvalue 轴力 Output \N \N \N 2 \N \N KN 2020-04-14 10:42:34.426+08 2020-04-14 10:42:34.426+08 9c9a0091-2f1b-4c1d-8b7c-ff60c41fca6f 2 t f
+5173 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-14 10:46:04.756+08 2020-04-14 10:46:04.756+08 b350cfa3-4960-4e96-ae63-0e0ab3319c29 2 t f
+5172 physicalvalue 轴力 Output \N 2 \N \N KN 2020-04-14 10:45:37.654+08 2020-04-14 10:46:12.407+08 b350cfa3-4960-4e96-ae63-0e0ab3319c29 2 t f
+5176 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-04-14 10:47:22.509+08 2020-04-14 10:47:22.509+08 53e381f9-db33-430e-8304-c344985c37f6 2 t f
+5179 temperature 温度 Output \N 2 120 -40 ℃ 2020-04-14 10:58:21.252+08 2020-04-14 10:58:33.887+08 9cb1bdb2-4235-4ca7-bdd2-7b7719325a45 2 t f
+5180 humidity 湿度 Output \N 2 100 0 %RH 2020-04-14 10:58:52.905+08 2020-04-14 10:59:10.137+08 9cb1bdb2-4235-4ca7-bdd2-7b7719325a45 2 t f
+5178 temperature 温度 Output \N 2 120 -40 ℃ 2020-04-14 10:55:09.45+08 2020-04-14 10:59:46.22+08 2de26052-b602-4ad3-9690-aa841c9c3a97 2 t f
+5183 length 液位 Output \N \N \N 3 \N \N mm 2020-04-21 13:42:25.831+08 2020-04-21 13:42:25.831+08 f605cba3-4024-46ad-b288-3c83568c5609 2 t f
+5186 corrosionRate 腐蚀速率 Output \N \N \N \N \N \N mm/a 2020-05-12 11:48:49.323+08 2020-05-12 11:48:49.323+08 d54486ff-766c-4275-bf4e-b13e58574dd7 2 t f
+5187 corrosionCurrent 腐蚀电流 Output \N \N \N \N \N \N mA/cm² 2020-05-12 11:50:38.311+08 2020-05-12 11:50:38.311+08 d54486ff-766c-4275-bf4e-b13e58574dd7 2 t f
+5188 ocp 开路电位 Output \N \N \N \N \N mv 2020-05-12 11:52:34.899+08 2020-05-12 11:52:34.899+08 d54486ff-766c-4275-bf4e-b13e58574dd7 2 t f
+5192 ph PH值 Output \N \N \N \N \N \N 2020-05-12 11:57:09.196+08 2020-05-12 11:57:09.196+08 d54486ff-766c-4275-bf4e-b13e58574dd7 2 t f
+5213 C2H5OH 乙醇 Output \N 2 \N \N mg/m³ 2020-05-28 10:56:30.366+08 2020-07-17 15:23:18.477+08 5e890b4e-e5c4-406b-a48b-96ecf4963921 2 t f
+5195 resistance 电阻 Output \N 2 \N \N Ω 2020-05-13 11:43:13.378+08 2020-05-14 09:53:00.679+08 428d318f-f610-4b34-8068-7a928691a7d9 2 t f
+5196 physicalvalue 微应变 Output \N \N \N \N ε 2020-05-13 11:43:46.403+08 2020-05-14 10:54:42.133+08 428d318f-f610-4b34-8068-7a928691a7d9 2 t f
+5197 physicalvalue 应力 Output \N \N \N 2 \N \N kN 2020-05-14 11:33:21.826+08 2020-05-14 11:33:21.826+08 aebaf729-ad98-42f3-a375-2c40c11065cb 2 t f
+5199 length 位移 Output \N \N \N \N \N \N mm 2020-05-14 15:38:38.62+08 2020-05-14 15:38:38.62+08 11936f12-8bb7-42ec-8d27-5e01eb5c4ba1 2 t f
+5200 wavelength 波长 Output \N \N \N \N \N \N \N 2020-05-20 09:26:32.53+08 2020-05-20 09:26:32.53+08 dac5aa29-4b9b-4dd0-9200-afc564bb32c5 2 t f
+5201 physicalvalue 应变 Output \N \N \N 6 \N \N με 2020-05-20 09:26:32.538+08 2020-05-20 09:26:32.538+08 dac5aa29-4b9b-4dd0-9200-afc564bb32c5 2 t f
+5202 jsonfileexts Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2020-05-20 11:50:17.618+08 2020-05-20 11:50:17.618+08 bc9ee149-cefe-4978-99b6-9c1cec2f6b4c 5 t f
+5212 NH3 氨气 Output \N 2 \N \N mg/m³ 2020-05-28 10:54:58.027+08 2020-07-17 15:23:15.128+08 5e890b4e-e5c4-406b-a48b-96ecf4963921 2 t f
+5204 northing Y坐标 Output \N \N \N 2 \N \N mm 2020-05-21 15:24:54.399+08 2020-05-21 15:24:54.399+08 68b2ac58-25ea-408d-a955-797ded16d57e 2 t f
+5205 height Z坐标 Output \N \N \N 2 \N \N mm 2020-05-21 15:25:12.609+08 2020-05-21 15:25:12.609+08 68b2ac58-25ea-408d-a955-797ded16d57e 2 t f
+5203 easting X坐标 Output \N 2 \N \N mm 2020-05-21 15:23:07.808+08 2020-05-21 15:25:20.121+08 68b2ac58-25ea-408d-a955-797ded16d57e 2 t f
+5184 polarResistance 极化电阻 Output \N \N \N \N Ω.cm² 2020-05-12 11:45:53.926+08 2020-05-22 10:28:00.329+08 d54486ff-766c-4275-bf4e-b13e58574dd7 2 t f
+5185 insulance 介质电阻 Output \N \N \N \N Ω.cm 2020-05-12 11:47:14.776+08 2020-05-22 10:28:33.799+08 d54486ff-766c-4275-bf4e-b13e58574dd7 2 t f
+5189 cer 混凝土电阻 Output \N \N \N \N Ω 2020-05-12 11:54:22.677+08 2020-05-22 10:29:21.009+08 d54486ff-766c-4275-bf4e-b13e58574dd7 2 t f
+5190 resistivity 电阻率 Output \N \N \N \N Ω.cm 2020-05-12 11:55:40.861+08 2020-05-22 10:30:15.285+08 d54486ff-766c-4275-bf4e-b13e58574dd7 2 t f
+5191 ph_ocp PH开路电位 Output \N \N \N \N mv 2020-05-12 11:56:39.96+08 2020-05-22 10:30:32.099+08 d54486ff-766c-4275-bf4e-b13e58574dd7 2 t f
+5193 cl_ocp Cl-开路电位 Output \N \N \N \N mv 2020-05-12 11:59:29.833+08 2020-05-22 10:30:47.361+08 d54486ff-766c-4275-bf4e-b13e58574dd7 2 t f
+5194 cl_potency Cl-浓度 Output \N \N \N \N mol/L 2020-05-12 12:00:35.82+08 2020-05-22 10:31:12.432+08 d54486ff-766c-4275-bf4e-b13e58574dd7 2 t f
+5206 zero_length 零点位移 Output \N \N \N 2 \N \N mm 2020-05-25 16:36:36.789+08 2020-05-25 16:36:36.789+08 582512d5-3343-4f9a-bab0-0312f0f83dea 2 t f
+5209 voltage 电压 Output \N \N \N 2 \N \N V 2020-05-25 16:37:58.575+08 2020-05-25 16:37:58.575+08 582512d5-3343-4f9a-bab0-0312f0f83dea 2 t f
+5207 length 相对位移 Output \N 2 \N \N mm 2020-05-25 16:37:03.348+08 2020-05-25 16:52:41.494+08 582512d5-3343-4f9a-bab0-0312f0f83dea 2 t f
+5208 temperature 环境温度 Output \N 2 \N \N ℃ 2020-05-25 16:37:26.732+08 2020-05-25 16:52:52.892+08 582512d5-3343-4f9a-bab0-0312f0f83dea 2 t f
+5210 humidity 环境湿度 Output \N \N \N \N \N \N %RH 2020-05-25 16:53:33.491+08 2020-05-25 16:53:33.491+08 582512d5-3343-4f9a-bab0-0312f0f83dea 2 t f
+5211 caitime 上传时间间隔 Output \N \N \N \N \N \N min 2020-05-26 15:14:45.276+08 2020-05-26 15:14:45.276+08 582512d5-3343-4f9a-bab0-0312f0f83dea 2 t f
+5215 OU 臭气 Output \N 2 \N \N ppm 2020-05-28 10:57:19.349+08 2020-05-28 13:47:53.185+08 5e890b4e-e5c4-406b-a48b-96ecf4963921 2 t f
+5221 OU 臭气 Output \N \N \N 2 \N \N ppm 2020-05-28 15:07:27.863+08 2020-05-28 15:07:27.863+08 5e62be71-2e05-4eb7-b50b-233e6ad91069 2 t f
+5222 frequency 频率 Output \N \N \N 2 \N \N HZ 2020-06-08 11:23:02.849+08 2020-06-08 11:23:02.849+08 11006daf-ca33-466e-970d-48c4889b56e3 2 t f
+5223 physicalvalue 压强 Output \N \N \N 2 \N \N Mpa 2020-06-08 11:41:41.715+08 2020-06-08 11:41:41.715+08 11006daf-ca33-466e-970d-48c4889b56e3 2 t f
+5225 frequency 频率 Output \N \N \N \N \N \N HZ 2020-06-08 11:45:05.626+08 2020-06-08 11:45:05.626+08 865a418e-8597-4f29-954b-6953bf8a8390 2 t f
+5226 frequency 频率 Output \N \N \N \N \N \N HZ 2020-06-08 11:46:22.86+08 2020-06-08 11:46:22.86+08 5cd21446-c4fc-45a2-b2d3-a2fb1ae08135 2 t f
+5227 physicalvalue 轴力 Output \N \N \N \N \N \N KN 2020-06-08 11:47:00.14+08 2020-06-08 11:47:00.14+08 5cd21446-c4fc-45a2-b2d3-a2fb1ae08135 2 t f
+5228 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-06-10 13:43:24.209+08 2020-06-10 13:43:24.209+08 1ab8db7c-e725-4119-9c09-6555bb04ce5d 2 t f
+5229 humidity 湿度 Output \N \N \N 2 \N \N % 2020-06-10 13:44:05.913+08 2020-06-10 13:44:05.913+08 1ab8db7c-e725-4119-9c09-6555bb04ce5d 2 t f
+5230 physicalvalue 距离 Output \N \N \N 2 \N \N m 2020-06-10 14:02:11.598+08 2020-06-10 14:02:11.598+08 4a707f5b-4a1a-4c21-8c3a-01cc99f0d25b 2 t f
+5231 physicalvalue 距离 Output \N \N \N \N \N \N m 2020-06-10 14:05:06.794+08 2020-06-10 14:05:06.794+08 33ad2409-682f-4b09-918b-9f6f9396a1c3 2 t f
+5232 physicalvalue 距离 Output \N \N \N \N \N \N m 2020-06-10 14:06:51.141+08 2020-06-10 14:06:51.141+08 64351b5c-4b45-42d1-a60b-81f410c1d0b3 2 t f
+5233 physicalvalue 距离 Output \N \N \N \N \N \N m 2020-06-10 17:07:04.281+08 2020-06-10 17:07:04.281+08 fb469083-0a30-4a41-a31d-b1bc0c0ed098 2 t f
+5234 physicalvalue 角度 Output \N \N \N \N \N \N ° 2020-06-10 17:08:53.394+08 2020-06-10 17:08:53.394+08 71d81eb7-504a-4f9f-ad7a-1a7479fe82b3 2 t f
+5235 physicalvalue 角度 Output \N \N \N \N \N \N ° 2020-06-10 17:12:06.746+08 2020-06-10 17:12:06.746+08 ad2045e5-d052-4689-b49f-fa1c42ccca5b 2 t f
+5236 frequency 频率 Output \N \N \N \N \N \N HZ 2020-06-10 17:41:17.164+08 2020-06-10 17:41:17.164+08 d7404d08-da09-4d5c-9443-0abdf60d1a13 2 t f
+5237 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-06-10 17:41:46.343+08 2020-06-10 17:41:46.343+08 d7404d08-da09-4d5c-9443-0abdf60d1a13 2 t f
+5238 physicalvalue 物理量 Output \N \N \N \N \N \N \N 2020-06-11 14:46:54.984+08 2020-06-11 14:46:54.984+08 d7404d08-da09-4d5c-9443-0abdf60d1a13 2 t f
+5239 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-06-11 17:08:14.291+08 2020-06-11 17:08:14.291+08 38ab5b80-b75c-42f6-b9a8-cb1e96603099 2 t f
+5240 humidity 湿度 Output \N \N \N \N \N \N %RH 2020-06-11 17:08:14.297+08 2020-06-11 17:08:14.297+08 38ab5b80-b75c-42f6-b9a8-cb1e96603099 2 t f
+5218 NH3 氨气 Output \N 2 \N \N mg/m³ 2020-05-28 15:04:34.946+08 2020-07-17 15:22:28.723+08 5e62be71-2e05-4eb7-b50b-233e6ad91069 2 t f
+5219 H2S 硫化氢 Output \N 2 \N \N mg/m³ 2020-05-28 15:05:06.063+08 2020-07-17 15:22:31.823+08 5e62be71-2e05-4eb7-b50b-233e6ad91069 2 t f
+5220 CH4 甲烷 Output \N \N \N \N mg/m³ 2020-05-28 15:06:42.585+08 2020-07-17 15:22:35.274+08 5e62be71-2e05-4eb7-b50b-233e6ad91069 2 t f
+5216 PM10 PM10 Output \N 2 \N \N mg/m³ 2020-05-28 10:57:33.479+08 2020-07-17 15:22:59.122+08 5e890b4e-e5c4-406b-a48b-96ecf4963921 2 t f
+5214 VOC VOC Output \N 2 \N \N mg/m³ 2020-05-28 10:56:57.134+08 2020-07-17 15:23:02.978+08 5e890b4e-e5c4-406b-a48b-96ecf4963921 2 t f
+5217 PM25 PM2.5 Output \N 2 \N \N mg/m³ 2020-05-28 10:57:50.42+08 2020-07-17 15:23:11.148+08 5e890b4e-e5c4-406b-a48b-96ecf4963921 2 t f
+5241 pressure 气压 Output \N \N \N \N \N \N hpa 2020-06-11 17:08:14.302+08 2020-06-11 17:08:14.302+08 38ab5b80-b75c-42f6-b9a8-cb1e96603099 2 t f
+5242 speed 风速 Output \N \N \N \N \N \N m/s 2020-06-11 17:32:44.108+08 2020-06-11 17:32:44.108+08 ef2a2a56-6abd-459f-8899-2756698bd997 2 t f
+5243 direction 风向 Output \N \N \N \N \N \N ° 2020-06-11 17:32:44.116+08 2020-06-11 17:32:44.116+08 ef2a2a56-6abd-459f-8899-2756698bd997 2 t f
+5244 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-06-11 17:32:44.123+08 2020-06-11 17:32:44.123+08 ef2a2a56-6abd-459f-8899-2756698bd997 2 t f
+5245 humidity 湿度 Output \N \N \N \N \N \N %RH 2020-06-11 17:32:44.136+08 2020-06-11 17:32:44.136+08 ef2a2a56-6abd-459f-8899-2756698bd997 2 t f
+5246 pressure 气压 Output \N \N \N \N \N \N hPa 2020-06-11 17:32:44.146+08 2020-06-11 17:32:44.146+08 ef2a2a56-6abd-459f-8899-2756698bd997 2 t f
+5247 length 距离 Output \N \N \N \N \N \N \N 2020-06-11 17:41:16.032+08 2020-06-11 17:41:16.032+08 60d83c64-9bad-43d3-9920-7dad96154fd7 2 t f
+5248 length 水位 Output \N \N \N 2 \N \N mm 2020-06-15 10:48:34.995+08 2020-06-15 10:48:34.995+08 1f3783bc-bfe9-4abe-b7da-539a0ec57e34 2 t f
+5249 physicalvalue 水位 Output \N 5 \N \N m 2020-06-16 14:29:15.943+08 2020-06-16 15:49:48.102+08 ca3175c2-be00-4fd5-8738-d149df98fb25 2 t f
+5250 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-06-24 09:50:38.209+08 2020-06-24 09:50:38.209+08 a8cf8420-9ce0-464d-8af7-1940466015bd 2 t f
+5251 anglex x方向角度 Output \N \N \N \N \N \N ° 2020-06-29 16:08:40.612+08 2020-06-29 16:08:40.612+08 0a837b07-531e-4fea-861a-ff73f35fb9ba 2 t f
+5252 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-06-29 16:09:04.376+08 2020-06-29 16:09:04.376+08 0a837b07-531e-4fea-861a-ff73f35fb9ba 2 t f
+5253 angley y方向角度 Output \N \N \N \N \N \N ° 2020-06-29 16:09:42.176+08 2020-06-29 16:09:42.176+08 0a837b07-531e-4fea-861a-ff73f35fb9ba 2 t f
+5254 length 水位 Output \N \N \N \N \N m 2020-06-29 16:12:12.861+08 2020-06-29 16:12:12.861+08 adc0b723-3ef2-4cb4-af3d-c74d6fd9cafb 2 t f
+5255 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-06-29 16:12:12.868+08 2020-06-29 16:12:12.868+08 adc0b723-3ef2-4cb4-af3d-c74d6fd9cafb 2 t f
+5256 length 位移 Output \N \N \N \N \N \N mm 2020-07-02 10:42:23.251+08 2020-07-02 10:42:23.251+08 e372ec30-5000-4a22-90ce-923829b2d608 2 t f
+5258 voltage 电压 Output \N \N \N \N \N \N V 2020-07-03 15:31:14.291+08 2020-07-03 15:31:14.291+08 3d72c148-2e62-41d7-b0f2-528fd13952dd 2 t f
+5259 sensorStatus 传感器状态 Output \N \N \N \N \N \N 2020-07-03 15:32:03.802+08 2020-07-03 15:32:03.802+08 3d72c148-2e62-41d7-b0f2-528fd13952dd 2 t f
+5260 anglex x轴角度 Output \N \N \N \N \N \N ° 2020-07-03 15:35:11.535+08 2020-07-03 15:35:11.535+08 3d72c148-2e62-41d7-b0f2-528fd13952dd 2 t f
+5261 angley y轴角度 Output \N \N \N \N \N \N ° 2020-07-03 15:35:38.281+08 2020-07-03 15:35:38.281+08 3d72c148-2e62-41d7-b0f2-528fd13952dd 2 t f
+5262 anglez z轴角度 Output \N \N \N \N \N \N ° 2020-07-03 15:36:02.541+08 2020-07-03 15:36:02.541+08 3d72c148-2e62-41d7-b0f2-528fd13952dd 2 t f
+5263 accelerationx x轴加速度 Output \N \N \N \N \N \N mg 2020-07-03 15:42:57.825+08 2020-07-03 15:42:57.825+08 3d72c148-2e62-41d7-b0f2-528fd13952dd 2 t f
+5264 accelerationy y轴加速度 Output \N \N \N \N \N \N mg 2020-07-03 15:43:29.333+08 2020-07-03 15:43:29.333+08 3d72c148-2e62-41d7-b0f2-528fd13952dd 2 t f
+5265 accelerationz z轴加速度 Output \N \N \N \N \N \N mg 2020-07-03 15:44:22.375+08 2020-07-03 15:44:22.375+08 3d72c148-2e62-41d7-b0f2-528fd13952dd 2 t f
+5224 physicalvalue 应力 Output \N 2 \N \N KN/mm² 2020-06-08 11:44:35.573+08 2020-07-06 14:50:07.407+08 865a418e-8597-4f29-954b-6953bf8a8390 2 t f
+5282 yAcceleration 加速度y Output \N \N \N \N g 2020-07-31 11:14:13.464+08 2020-07-31 11:26:36.724+08 8afcb657-9391-4be2-9527-fbc2142bdf64 2 t f
+5281 xAcceleration 加速度x Output \N \N \N \N g 2020-07-31 11:13:08.612+08 2020-07-31 11:26:44.024+08 8afcb657-9391-4be2-9527-fbc2142bdf64 2 t f
+5267 x X位置 Output \N \N \N 4 \N \N mm 2020-07-20 09:52:40.301+08 2020-07-20 09:52:40.301+08 a15cd089-6db0-463f-a927-c36d1dca96a4 2 t f
+5268 y Y位置 Output \N \N \N 4 \N \N mm 2020-07-20 09:53:09.046+08 2020-07-20 09:53:09.046+08 a15cd089-6db0-463f-a927-c36d1dca96a4 2 t f
+5269 z Z位置 Output \N \N \N 4 \N \N mm 2020-07-20 09:53:30.331+08 2020-07-20 09:53:30.331+08 a15cd089-6db0-463f-a927-c36d1dca96a4 2 t f
+5288 length 距离 Output \N \N \N \N \N \N mm 2020-08-04 11:14:39.073+08 2020-08-04 11:14:39.073+08 c1159812-0b0e-4d84-bd67-8328afd12dc6 2 t f
+5266 signal 信号 Output \N 0 / 2020-07-07 13:36:58.591+08 2020-07-22 08:47:41.575+08 3d72c148-2e62-41d7-b0f2-528fd13952dd 2 t f
+5272 x X位置 Output \N \N \N 3 \N \N mm 2020-07-23 13:39:24.364+08 2020-07-23 13:39:24.364+08 601d3b7b-0a17-4c81-9200-b0be68df23c4 2 t f
+5273 y Y位置 Output \N \N \N 3 \N \N mm 2020-07-23 13:39:43.213+08 2020-07-23 13:39:43.213+08 601d3b7b-0a17-4c81-9200-b0be68df23c4 2 t f
+5274 z Z位置 Output \N \N \N 3 \N \N mm 2020-07-23 13:40:04.234+08 2020-07-23 13:40:04.234+08 601d3b7b-0a17-4c81-9200-b0be68df23c4 2 t f
+5275 dx dx累积形变量 Output \N \N \N 3 \N \N mm 2020-07-23 13:41:34.252+08 2020-07-23 13:41:34.252+08 601d3b7b-0a17-4c81-9200-b0be68df23c4 2 t f
+5276 dy dy累积形变量 Output \N \N \N 3 \N \N mm 2020-07-23 13:41:56.626+08 2020-07-23 13:41:56.626+08 601d3b7b-0a17-4c81-9200-b0be68df23c4 2 t f
+5277 dz dz累积形变量 Output \N \N \N 3 \N \N mm 2020-07-23 13:42:15.087+08 2020-07-23 13:42:15.087+08 601d3b7b-0a17-4c81-9200-b0be68df23c4 2 t f
+5278 length 降雨量 Output \N \N \N \N \N \N mm 2020-07-27 11:41:04.284+08 2020-07-27 11:41:04.284+08 47e859b1-fd7c-4d91-b482-25d7a9547047 2 t f
+5279 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-07-31 11:10:04.101+08 2020-07-31 11:10:04.101+08 8afcb657-9391-4be2-9527-fbc2142bdf64 2 t f
+5280 voltage 电压 Output \N \N \N \N \N \N V 2020-07-31 11:10:43.543+08 2020-07-31 11:10:43.543+08 8afcb657-9391-4be2-9527-fbc2142bdf64 2 t f
+5284 xCoordinate 坐标x Output \N \N \N \N 2020-07-31 11:20:32.114+08 2020-07-31 11:20:58.966+08 8afcb657-9391-4be2-9527-fbc2142bdf64 2 t f
+5285 yCoordinate 坐标y Output \N \N \N \N \N \N 2020-07-31 11:23:54.573+08 2020-07-31 11:23:54.573+08 8afcb657-9391-4be2-9527-fbc2142bdf64 2 t f
+5286 zCoordinate 坐标z Output \N \N \N \N \N \N 2020-07-31 11:25:17.642+08 2020-07-31 11:25:17.642+08 8afcb657-9391-4be2-9527-fbc2142bdf64 2 t f
+5287 rotateAngle 旋转角 Output \N \N \N \N \N \N ° 2020-07-31 11:26:11.771+08 2020-07-31 11:26:11.771+08 8afcb657-9391-4be2-9527-fbc2142bdf64 2 t f
+5283 zAcceleration 加速度z Output \N \N \N \N g 2020-07-31 11:16:00.165+08 2020-07-31 11:26:26.313+08 8afcb657-9391-4be2-9527-fbc2142bdf64 2 t f
+5289 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-08-04 11:14:39.079+08 2020-08-04 11:14:39.079+08 c1159812-0b0e-4d84-bd67-8328afd12dc6 2 t f
+5290 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-08-05 16:56:38.248+08 2020-08-05 16:56:38.248+08 dd71ac62-451e-4f14-a231-1209612ec59d 2 t f
+5291 turbidity 浊度 Output \N \N \N 2 \N \N NTU 2020-08-05 16:59:27.434+08 2020-08-05 16:59:27.434+08 dd71ac62-451e-4f14-a231-1209612ec59d 2 t f
+5293 PH PH Output \N \N \N 2 \N \N 2020-08-05 17:01:51.884+08 2020-08-05 17:01:51.884+08 dd71ac62-451e-4f14-a231-1209612ec59d 2 t f
+5294 oxy 溶解氧 Output \N \N \N 2 \N \N mg/L 2020-08-05 17:02:24.036+08 2020-08-05 17:02:24.036+08 dd71ac62-451e-4f14-a231-1209612ec59d 2 t f
+5292 conductivity 导电率 Output \N 2 \N \N μs/cm 2020-08-05 17:00:06.956+08 2020-08-05 17:02:37.836+08 dd71ac62-451e-4f14-a231-1209612ec59d 2 t f
+5295 readingNumber 电表示数 Output \N \N \N 3 \N \N kWh 2020-08-13 09:49:10.433+08 2020-08-13 09:49:10.433+08 4dce787d-0acb-41d1-a959-a043d0546736 2 t f
+5296 rainfall 降雨量 Output \N \N \N \N \N \N mm 2020-08-14 11:53:53.188+08 2020-08-14 11:53:53.188+08 06350cde-bd6e-495d-8ef5-c318d3694381 2 t f
+5297 humidity 土壤湿度 Output \N \N \N \N \N \N %VO 2020-08-14 15:29:01.622+08 2020-08-14 15:29:01.622+08 dba91da4-00da-4cef-a91c-f39c97f9b45a 2 t f
+5298 temperature 土壤温度 Output \N \N \N \N ℃ 2020-08-14 15:30:03.548+08 2020-08-14 15:36:04.769+08 dba91da4-00da-4cef-a91c-f39c97f9b45a 2 t f
+5299 northing Y坐标 Output \N \N \N 3 \N \N mm 2020-08-14 16:28:38.782+08 2020-08-14 16:28:38.782+08 a53c2dac-206d-44da-b18f-584b9ad1deab 2 t f
+5300 height Z坐标 Output \N \N \N 3 \N \N mm 2020-08-14 16:28:57.381+08 2020-08-14 16:28:57.381+08 a53c2dac-206d-44da-b18f-584b9ad1deab 2 t f
+5301 easting X坐标 Output \N \N \N 3 \N \N mm 2020-08-14 16:29:14.937+08 2020-08-14 16:29:14.937+08 a53c2dac-206d-44da-b18f-584b9ad1deab 2 t f
+5302 eastingDiff Dx Output \N \N \N 3 \N \N mm 2020-08-14 16:29:34.841+08 2020-08-14 16:29:34.841+08 a53c2dac-206d-44da-b18f-584b9ad1deab 2 t f
+5303 northingDiff Dy Output \N \N \N 3 \N \N mm 2020-08-14 16:30:00.591+08 2020-08-14 16:30:00.591+08 a53c2dac-206d-44da-b18f-584b9ad1deab 2 t f
+5304 heightDiff Dz Output \N \N \N 3 \N \N mm 2020-08-14 16:30:21.753+08 2020-08-14 16:30:21.753+08 a53c2dac-206d-44da-b18f-584b9ad1deab 2 t f
+5305 length 位移 Output \N \N \N \N \N \N mm 2020-08-18 08:53:48.603+08 2020-08-18 08:53:48.603+08 6e72e2fc-da68-46a6-8a68-3022057b0937 2 t f
+5307 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-08-21 10:28:49.018+08 2020-08-21 10:28:49.018+08 9a584682-5906-4fd4-ad79-245e90061e02 2 t f
+5308 pressure 液位 Output \N \N \N \N \N \N mm 2020-08-21 10:29:24.479+08 2020-08-21 10:29:24.479+08 9a584682-5906-4fd4-ad79-245e90061e02 2 t f
+5323 X X轴 Output \N \N \N 1 90 -90 ° 2020-09-03 14:52:10.941+08 2020-09-03 14:52:10.941+08 88cb50e8-fbcc-4dd1-a18d-915017dbee86 2 t f
+5309 physicalvalue 雨量 Output \N \N \N 2 \N \N mm 2020-08-27 16:22:16.988+08 2020-08-27 16:22:16.988+08 1caff493-5e1b-472f-a65f-502a9d9865bd 2 t f
+5310 anglex x方向角度 Output \N \N \N \N \N \N ° 2020-08-27 17:24:53.567+08 2020-08-27 17:24:53.567+08 b387422f-44fa-4d9e-a701-d6c9c57d630d 2 t f
+5311 angley y方向角度 Output \N \N \N \N \N \N ° 2020-08-27 17:25:27.171+08 2020-08-27 17:25:27.171+08 b387422f-44fa-4d9e-a701-d6c9c57d630d 2 t f
+5312 temperature 温度 Output \N \N \N 1 \N \N ℃ 2020-09-01 10:32:27.495+08 2020-09-01 10:32:27.495+08 f2ad29ab-0075-41c4-9972-59da62b556f4 2 t f
+5346 pm1 PM1 Output \N 2 \N \N ug/m³ 2020-09-07 10:17:16.332+08 2020-09-07 10:25:06.224+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 2 t f
+5313 temperature 温度 Output \N 2 \N \N ℃ 2020-09-01 11:32:06.69+08 2020-09-01 14:39:46.052+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 2 t f
+5314 humidity 湿度 Output \N 2 \N \N % 2020-09-01 14:38:27.894+08 2020-09-01 14:39:52.308+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 2 t f
+5347 ch2o 甲醛 Output \N 2 \N \N mg/m³ 2020-09-07 10:17:48.149+08 2020-09-07 10:25:44.469+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 2 t f
+5321 X X轴 Output \N 2 90 -90 ° 2020-09-02 17:55:17.167+08 2020-09-03 10:09:13.029+08 d59b49b6-2470-4652-aac0-5760f9cce697 2 t f
+5322 Y Y轴 Output \N 2 90 -90 ° 2020-09-02 17:55:52.18+08 2020-09-03 10:09:16.505+08 d59b49b6-2470-4652-aac0-5760f9cce697 2 t f
+5324 Y Y轴 Output \N 1 90 -90 ° 2020-09-03 14:52:27.956+08 2020-09-03 16:19:01.252+08 88cb50e8-fbcc-4dd1-a18d-915017dbee86 2 t f
+5325 acc_x_cur 加速度x轴当前值 Output \N \N \N \N mg 2020-09-04 13:14:43.535+08 2020-09-04 13:16:57.074+08 036f8003-a82c-40bc-a175-7cb81f4da7c9 2 t f
+5326 acc_z_cur 加速度z轴当前值 Output \N \N \N \N mg 2020-09-04 13:15:40.952+08 2020-09-04 13:17:05.252+08 036f8003-a82c-40bc-a175-7cb81f4da7c9 2 t f
+5327 acc_y_cur 加速度y轴当前值 Output \N \N \N \N mg 2020-09-04 13:16:08.09+08 2020-09-04 13:17:13.498+08 036f8003-a82c-40bc-a175-7cb81f4da7c9 2 t f
+5328 tilt_x_init 倾角x轴初值 Output \N \N \N \N \N \N ° 2020-09-04 13:17:55.282+08 2020-09-04 13:17:55.282+08 036f8003-a82c-40bc-a175-7cb81f4da7c9 2 t f
+5329 tilt_y_init 倾角y轴初值 Output \N \N \N \N \N \N ° 2020-09-04 13:18:43.676+08 2020-09-04 13:18:43.676+08 036f8003-a82c-40bc-a175-7cb81f4da7c9 2 t f
+5330 tilt_z_init 倾角z轴初值 Output \N \N \N \N \N \N ° 2020-09-04 13:19:14.913+08 2020-09-04 13:19:14.913+08 036f8003-a82c-40bc-a175-7cb81f4da7c9 2 t f
+5331 tilt_z_cur 倾角z轴当前值 Output \N \N \N \N \N \N ° 2020-09-04 13:19:50.275+08 2020-09-04 13:19:50.275+08 036f8003-a82c-40bc-a175-7cb81f4da7c9 2 t f
+5332 tilt_x_cur 倾角x轴当前值 Output \N \N \N \N \N \N ° 2020-09-04 13:20:15.714+08 2020-09-04 13:20:15.714+08 036f8003-a82c-40bc-a175-7cb81f4da7c9 2 t f
+5333 tilt_y_cur 倾角y轴当前值 Output \N \N \N \N \N \N ° 2020-09-04 13:20:56.884+08 2020-09-04 13:20:56.884+08 036f8003-a82c-40bc-a175-7cb81f4da7c9 2 t f
+5334 wire_cur 拉线当前值 Output \N \N \N \N \N \N mm 2020-09-04 13:57:26.61+08 2020-09-04 13:57:26.61+08 036f8003-a82c-40bc-a175-7cb81f4da7c9 2 t f
+5335 wire_init 拉线初值 Output \N \N \N \N \N \N mm 2020-09-04 13:58:10.75+08 2020-09-04 13:58:10.75+08 036f8003-a82c-40bc-a175-7cb81f4da7c9 2 t f
+5336 acc_x_cur 加速度x轴当前值 Output \N \N \N \N \N \N mg 2020-09-04 14:55:26.525+08 2020-09-04 14:55:26.525+08 ed73bd4c-f957-425b-bc61-b1a49b812aba 2 t f
+5337 acc_z_cur 加速度z轴当前值 Output \N \N \N \N \N \N mg 2020-09-04 14:58:11.399+08 2020-09-04 14:58:11.399+08 ed73bd4c-f957-425b-bc61-b1a49b812aba 2 t f
+5338 acc_y_cur 加速度y轴当前值 Output \N \N \N \N \N \N mg 2020-09-04 15:06:49.457+08 2020-09-04 15:06:49.457+08 ed73bd4c-f957-425b-bc61-b1a49b812aba 2 t f
+5339 tilt_z_init 倾角z轴初值 Output \N \N \N \N \N \N ° 2020-09-04 15:14:21.31+08 2020-09-04 15:14:21.31+08 ed73bd4c-f957-425b-bc61-b1a49b812aba 2 t f
+5340 tilt_y_init 倾角y轴初值 Output \N \N \N \N \N \N ° 2020-09-04 15:14:50.949+08 2020-09-04 15:14:50.949+08 ed73bd4c-f957-425b-bc61-b1a49b812aba 2 t f
+5341 tilt_x_init 倾角x轴初值 Output \N \N \N \N \N \N ° 2020-09-04 15:15:14.584+08 2020-09-04 15:15:14.584+08 ed73bd4c-f957-425b-bc61-b1a49b812aba 2 t f
+5342 tilt_x_cur 倾角x轴当前值 Output \N \N \N \N \N \N ° 2020-09-04 15:15:44.101+08 2020-09-04 15:15:44.101+08 ed73bd4c-f957-425b-bc61-b1a49b812aba 2 t f
+5343 tilt_z_cur 倾角z轴当前值 Output \N \N \N \N \N \N ° 2020-09-04 15:17:03.588+08 2020-09-04 15:17:03.588+08 ed73bd4c-f957-425b-bc61-b1a49b812aba 2 t f
+5344 tilt_y_cur 倾角y轴当前值 Output \N \N \N \N \N \N ° 2020-09-04 15:17:34.791+08 2020-09-04 15:17:34.791+08 ed73bd4c-f957-425b-bc61-b1a49b812aba 2 t f
+5315 pm25 PM2.5 Output \N 2 \N \N ug/m³ 2020-09-01 14:43:55.975+08 2020-09-07 10:24:55.521+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 2 t f
+5345 pm10 PM10 Output \N 2 \N \N ug/m³ 2020-09-07 10:16:47.97+08 2020-09-07 10:25:02.186+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 2 t f
+5316 tvoc 有机气态物质 Output \N 2 \N \N mg/m³ 2020-09-01 14:47:14.313+08 2020-09-07 10:58:35.834+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 2 t f
+5348 timcnt 定时个数 Output \N \N \N \N \N \N \N 2020-09-07 10:52:55.361+08 2020-09-07 10:52:55.361+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 1 t f
+5351 humigear 加湿器挡位 Output \N \N \N \N \N \N 2020-09-07 11:00:55.594+08 2020-09-07 11:00:55.594+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 1 t f
+5352 wchargelock 无线充电开关 Output \N \N \N \N \N \N 2020-09-07 11:01:23.643+08 2020-09-07 11:01:23.643+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 1 t f
+5319 NegativeO2lock 负氧离子开关 Output \N 0 2020-09-01 14:55:37.033+08 2020-09-07 10:54:31.097+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 1 t f
+5349 uvlock UV杀菌灯开关 Output \N \N \N \N \N \N 2020-09-07 10:55:24.525+08 2020-09-07 10:55:24.525+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 1 t f
+5350 humilock 加湿器开关 Output \N \N \N \N \N \N 2020-09-07 10:56:30.882+08 2020-09-07 10:56:30.882+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 1 t f
+5318 childlock 儿童锁开关 Output \N 0 \N \N 2020-09-01 14:49:13.464+08 2020-09-07 10:56:58.05+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 1 t f
+5320 powerlock 电源开关 Output \N 0 \N \N 2020-09-01 14:58:32.92+08 2020-09-07 10:57:25.931+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 1 t f
+5317 windgear 风速挡位 Output \N 0 10 0 2020-09-01 14:47:43.662+08 2020-09-07 10:58:03.672+08 d9afb1b0-b05b-4c6e-8805-c4eeedd19014 1 t f
+5354 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-09-07 16:13:13.353+08 2020-09-07 16:13:13.353+08 d04cc631-3bc1-496c-af61-fd0ff0ff3e85 2 t f
+5355 humidity 湿度 Output \N \N \N 2 \N \N % 2020-09-07 16:14:40.722+08 2020-09-07 16:14:40.722+08 d04cc631-3bc1-496c-af61-fd0ff0ff3e85 2 t f
+5356 ch2o 甲醛 Output \N \N \N 2 \N \N mg/m³ 2020-09-07 16:15:06.036+08 2020-09-07 16:15:06.036+08 d04cc631-3bc1-496c-af61-fd0ff0ff3e85 2 t f
+5359 tvoc 有机气态物质 Output \N \N \N 2 \N \N mg/m³ 2020-09-07 16:16:26.763+08 2020-09-07 16:16:26.763+08 d04cc631-3bc1-496c-af61-fd0ff0ff3e85 2 t f
+5364 uvlock UV杀菌灯开关 Output \N \N \N \N \N \N 2020-09-07 16:18:48.838+08 2020-09-07 16:18:48.838+08 d04cc631-3bc1-496c-af61-fd0ff0ff3e85 1 t f
+5358 soft 软件版本号 Output \N 0 \N \N 2020-09-07 16:15:58.093+08 2020-09-22 14:19:38.096+08 d04cc631-3bc1-496c-af61-fd0ff0ff3e85 1 t f
+5362 water 水位感应开关 Output \N 0 \N \N 0:正常 1:缺水 2020-09-07 16:18:08.798+08 2020-09-22 14:37:51.147+08 d04cc631-3bc1-496c-af61-fd0ff0ff3e85 1 t f
+5361 mode 工作模式 Output \N 0 \N \N 0自动,1手动,2睡眠,3恒湿 2020-09-07 16:17:12.039+08 2020-09-22 19:46:04.604+08 d04cc631-3bc1-496c-af61-fd0ff0ff3e85 1 t f
+5532 stayCount 滞留人数 Output \N 0 \N \N . 无 2020-11-04 10:43:43.023+08 2020-11-04 10:46:34.488+08 dd00727c-90ae-49ec-b8a5-9a89497b7d8c 1 t f
+5590 angley y角度 Output \N \N \N \N \N \N ° 2020-11-27 10:03:48.408+08 2020-11-27 10:03:48.408+08 830b53c4-b4d6-4d85-9776-3b448ee62c5e 2 t f
+5366 childlock 儿童锁开关 Output \N \N \N \N \N \N 2020-09-07 16:19:26.116+08 2020-09-07 16:19:26.116+08 d04cc631-3bc1-496c-af61-fd0ff0ff3e85 1 t f
+5367 powerlock 电源开关 Output \N \N \N \N \N \N 2020-09-07 16:19:48.359+08 2020-09-07 16:19:48.359+08 d04cc631-3bc1-496c-af61-fd0ff0ff3e85 1 t f
+5369 alarmPic 图片 Output \N \N \N \N \N \N \N 2020-09-10 11:15:15.546+08 2020-09-10 11:15:15.546+08 2862c1ac-f3a8-45b9-88e8-abd2591928d4 5 t f
+5370 angle 角度 Output \N \N \N \N \N \N ° 2020-09-11 13:29:23.101+08 2020-09-11 13:29:23.101+08 d140758d-3441-4156-9b00-7de4589d7f9c 2 t f
+5372 z z Output \N 9 99999999 -99999999 mm 2020-09-11 14:36:39.59+08 2020-09-11 15:05:14.513+08 f928b4a7-3c4f-42bc-aa12-32d1b835c3e6 2 t f
+5373 x x Output \N 9 99999999999 -999999999999 mm 2020-09-11 14:36:39.596+08 2020-09-11 15:05:17.876+08 f928b4a7-3c4f-42bc-aa12-32d1b835c3e6 2 t f
+5374 y y Output \N 9 99999999 -99999999 mm 2020-09-11 14:36:39.6+08 2020-09-11 15:05:20.985+08 f928b4a7-3c4f-42bc-aa12-32d1b835c3e6 2 t f
+5375 capacity 水分 Output \N \N \N \N \N \N % 2020-09-15 08:50:25.373+08 2020-09-15 08:50:25.373+08 c438d8c1-8b99-41e6-9cc0-5339b773c3bb 2 t f
+5376 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-09-15 08:51:15.467+08 2020-09-15 08:51:15.467+08 c438d8c1-8b99-41e6-9cc0-5339b773c3bb 2 t f
+5377 physicalvalue 位移 Output \N \N \N \N mm 2020-09-15 08:59:09.158+08 2020-09-15 09:20:23.197+08 40df1f23-955c-462f-b233-785df1759d7f 2 t f
+5378 yCoordinate y坐标 Output \N \N \N \N \N \N mm 2020-09-17 16:42:41.369+08 2020-09-17 16:42:41.369+08 0ca15a19-3a6b-42c0-8336-096b8ebcc01d 2 t f
+5379 zCoordinate z坐标 Output \N \N \N \N \N \N mm 2020-09-17 16:42:41.376+08 2020-09-17 16:42:41.376+08 0ca15a19-3a6b-42c0-8336-096b8ebcc01d 2 t f
+5380 xCoordinate x坐标 Output \N \N \N \N \N \N mm 2020-09-17 16:42:41.381+08 2020-09-17 16:42:41.381+08 0ca15a19-3a6b-42c0-8336-096b8ebcc01d 2 t f
+5381 northing Y坐标 Output \N 3 \N \N m 2020-09-18 11:09:34.623+08 2020-09-18 11:11:47.464+08 2b1cc86c-c2cf-4037-8280-b5ae28fcab8e 2 t f
+5382 heightDiff Dz Output \N 3 \N \N m 2020-09-18 11:09:34.892+08 2020-09-18 11:11:51.162+08 2b1cc86c-c2cf-4037-8280-b5ae28fcab8e 2 t f
+5383 northingDiff Dy Output \N 3 \N \N m 2020-09-18 11:09:35.098+08 2020-09-18 11:11:55.525+08 2b1cc86c-c2cf-4037-8280-b5ae28fcab8e 2 t f
+5384 eastingDiff Dx Output \N 3 \N \N m 2020-09-18 11:09:35.364+08 2020-09-18 11:12:00.871+08 2b1cc86c-c2cf-4037-8280-b5ae28fcab8e 2 t f
+5385 easting X坐标 Output \N 3 \N \N m 2020-09-18 11:09:35.638+08 2020-09-18 11:12:05.143+08 2b1cc86c-c2cf-4037-8280-b5ae28fcab8e 2 t f
+5386 height Z坐标 Output \N 3 \N \N m 2020-09-18 11:09:36.917+08 2020-09-18 11:12:09.044+08 2b1cc86c-c2cf-4037-8280-b5ae28fcab8e 2 t f
+5387 timcnt 定时个数 Output \N \N \N \N \N \N 2020-09-21 09:55:14.224+08 2020-09-21 09:55:14.224+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 1 t f
+5388 humigear 加湿器挡位 Output \N \N \N \N \N \N 2020-09-21 09:55:14.229+08 2020-09-21 09:55:14.229+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 1 t f
+5389 pm1 PM1 Output \N \N \N 2 \N \N ug/m³ 2020-09-21 09:55:14.234+08 2020-09-21 09:55:14.234+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 2 t f
+5390 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-09-21 09:55:14.238+08 2020-09-21 09:55:14.238+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 2 t f
+5391 humidity 湿度 Output \N \N \N 2 \N \N % 2020-09-21 09:55:14.242+08 2020-09-21 09:55:14.242+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 2 t f
+5392 ch2o 甲醛 Output \N \N \N 2 \N \N mg/m³ 2020-09-21 09:55:14.246+08 2020-09-21 09:55:14.246+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 2 t f
+5393 pm25 PM2.5 Output \N \N \N 2 \N \N ug/m³ 2020-09-21 09:55:14.25+08 2020-09-21 09:55:14.25+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 2 t f
+5394 pm10 PM10 Output \N \N \N 2 \N \N ug/m³ 2020-09-21 09:55:14.253+08 2020-09-21 09:55:14.253+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 2 t f
+5395 tvoc 有机气态物质 Output \N \N \N 2 \N \N mg/m³ 2020-09-21 09:55:14.257+08 2020-09-21 09:55:14.257+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 2 t f
+5396 wchargelock 无线充电开关 Output \N \N \N \N \N \N 2020-09-21 09:55:14.261+08 2020-09-21 09:55:14.261+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 1 t f
+5397 NegativeO2lock 负氧离子开关 Output \N \N \N \N \N \N 2020-09-21 09:55:14.265+08 2020-09-21 09:55:14.265+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 1 t f
+5398 uvlock UV杀菌灯开关 Output \N \N \N \N \N \N 2020-09-21 09:55:14.271+08 2020-09-21 09:55:14.271+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 1 t f
+5399 humilock 加湿器开关 Output \N \N \N \N \N \N 2020-09-21 09:55:14.275+08 2020-09-21 09:55:14.275+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 1 t f
+5400 childlock 儿童锁开关 Output \N \N \N \N \N \N 2020-09-21 09:55:14.279+08 2020-09-21 09:55:14.279+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 1 t f
+5401 powerlock 电源开关 Output \N \N \N \N \N \N 2020-09-21 09:55:14.283+08 2020-09-21 09:55:14.283+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 1 t f
+5402 windgear 风速挡位 Output \N \N \N \N 10 0 2020-09-21 09:55:14.287+08 2020-09-21 09:55:14.287+08 1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc 1 t f
+5404 humigear 加湿器挡位 Output \N \N \N \N \N \N 2020-09-21 09:55:16.293+08 2020-09-21 09:55:16.293+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 1 t f
+5406 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-09-21 09:55:16.301+08 2020-09-21 09:55:16.301+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 2 t f
+5407 humidity 湿度 Output \N \N \N 2 \N \N % 2020-09-21 09:55:16.309+08 2020-09-21 09:55:16.309+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 2 t f
+5408 ch2o 甲醛 Output \N \N \N 2 \N \N mg/m³ 2020-09-21 09:55:16.315+08 2020-09-21 09:55:16.315+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 2 t f
+5409 pm25 PM2.5 Output \N \N \N 2 \N \N ug/m³ 2020-09-21 09:55:16.319+08 2020-09-21 09:55:16.319+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 2 t f
+5411 tvoc 有机气态物质 Output \N \N \N 2 \N \N mg/m³ 2020-09-21 09:55:16.326+08 2020-09-21 09:55:16.326+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 2 t f
+5403 qtimer 定时关小时 Output \N 0 \N \N 设备端的定时关小时数,最大12H 2020-09-21 09:55:16.288+08 2020-11-09 18:01:45.712+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 1 t f
+5368 humigear 加湿器档位 Output \N 0 0自动 其他1-5 挡位 2020-09-07 16:20:09.121+08 2020-09-22 14:42:34.609+08 d04cc631-3bc1-496c-af61-fd0ff0ff3e85 1 t f
+5405 soft 软件版本号 Output \N 0 \N \N 2020-09-21 09:55:16.297+08 2020-11-09 14:12:09.104+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 1 t f
+5410 hard 硬件版本号 Output \N 0 \N \N 2020-09-21 09:55:16.323+08 2020-11-09 14:12:50.06+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 1 t f
+5412 clean 净化开关 Output \N 0 \N \N 代表在净化,用于后端聚集 统计净化时长 2020-09-21 09:55:16.33+08 2020-11-09 17:12:53.291+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 1 t f
+5413 NegativeO2lock 负氧离子开关 Output \N \N \N \N \N \N 2020-09-21 09:55:16.334+08 2020-09-21 09:55:16.334+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 1 t f
+5414 uvlock UV杀菌灯开关 Output \N \N \N \N \N \N 2020-09-21 09:55:16.337+08 2020-09-21 09:55:16.337+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 1 t f
+5415 humilock 加湿器开关 Output \N \N \N \N \N \N 2020-09-21 09:55:16.341+08 2020-09-21 09:55:16.341+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 1 t f
+5416 childlock 儿童锁开关 Output \N \N \N \N \N \N 2020-09-21 09:55:16.345+08 2020-09-21 09:55:16.345+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 1 t f
+5417 powerlock 电源开关 Output \N \N \N \N \N \N 2020-09-21 09:55:16.348+08 2020-09-21 09:55:16.348+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 1 t f
+5418 windgear 风速挡位 Output \N \N \N \N 10 0 2020-09-21 09:55:16.352+08 2020-09-21 09:55:16.352+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 1 t f
+5357 hard 硬件版本号 Output \N 0 \N \N 2020-09-07 16:15:38.028+08 2020-09-22 14:19:09.498+08 d04cc631-3bc1-496c-af61-fd0ff0ff3e85 1 t f
+5419 fixhumi 恒湿开关状态 Output \N \N \N \N \N \N \N 1:打开 0:关闭 2020-09-22 14:37:01.836+08 2020-09-22 14:37:01.836+08 d04cc631-3bc1-496c-af61-fd0ff0ff3e85 1 t f
+5420 fogs 总雾化量 Output \N \N \N 2 \N \N L 2020-09-27 23:45:51.62+08 2020-09-27 23:45:51.62+08 d04cc631-3bc1-496c-af61-fd0ff0ff3e85 2 t f
+5421 speed 风速 Output \N \N \N 3 \N \N m/s 2020-09-28 10:33:27.931+08 2020-09-28 10:33:27.931+08 7332ce81-93c4-4c1c-b659-caa2fc92a94a 2 t f
+5422 speed 速度 Output \N \N \N 3 \N \N m/s 2020-09-28 10:33:27.944+08 2020-09-28 10:33:27.944+08 3817ac1f-6e39-4157-b1af-99d143da6fbf 2 t f
+5423 direction 风向 Output \N \N \N 3 \N \N ° 2020-09-28 10:45:02.897+08 2020-09-28 10:45:02.897+08 7a6e0cbd-c0db-4dd6-92e7-94092fc071dc 2 t f
+5424 direction 风向 Output \N \N \N 3 \N \N ° 2020-09-28 10:45:02.91+08 2020-09-28 10:45:02.91+08 e94da122-530a-4e1b-af6f-da5b6dfb2a29 2 t f
+5426 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-09-29 09:29:32.825+08 2020-09-29 09:29:32.825+08 59e10250-dfd7-4381-8c22-cca2e7a51ccc 2 t f
+5463 timcnt 定时个数 Output \N \N \N \N \N \N 2020-10-10 10:46:03.633+08 2020-10-10 10:46:03.633+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 1 t f
+5425 physicalvalue 压强 Output \N 4 5 0 kPa 2020-09-29 09:29:06.587+08 2020-09-29 10:18:12.164+08 59e10250-dfd7-4381-8c22-cca2e7a51ccc 2 t f
+5427 physicalvalue 压强 Output \N 3 \N \N kPa 2020-09-29 10:17:03.032+08 2020-09-29 10:18:18.611+08 c76bd374-4160-4615-8ba7-63a2f19f790b 2 t f
+5428 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-09-29 10:18:44.02+08 2020-09-29 10:18:44.02+08 c76bd374-4160-4615-8ba7-63a2f19f790b 2 t f
+5429 rotation 回转角度 Output \N 0 \N \N ° 2020-09-29 11:19:58.829+08 2020-09-29 11:19:58.829+08 fe84d4c4-d79f-4a80-bd65-950c4c044636 1 t f
+5430 obliquity 塔机倾角 Output \N 2 \N \N ° 2020-09-29 11:19:58.837+08 2020-09-29 11:19:58.837+08 fe84d4c4-d79f-4a80-bd65-950c4c044636 2 t f
+5431 height 高度 Output \N 2 \N \N m 2020-09-29 11:19:58.842+08 2020-09-29 11:19:58.842+08 fe84d4c4-d79f-4a80-bd65-950c4c044636 2 t f
+5432 Heightdeg 超载高度比 Output \N \N \N \N % 2020-09-29 11:19:58.846+08 2020-09-29 11:19:58.846+08 fe84d4c4-d79f-4a80-bd65-950c4c044636 2 t f
+5433 moment 力矩 Output \N 2 100 0 % 2020-09-29 11:19:58.85+08 2020-09-29 11:19:58.85+08 fe84d4c4-d79f-4a80-bd65-950c4c044636 2 t f
+5434 speed 风速 Output \N 2 \N \N m/s 2020-09-29 11:19:58.854+08 2020-09-29 11:19:58.854+08 fe84d4c4-d79f-4a80-bd65-950c4c044636 2 t f
+5435 Rotationdeg 回转角度比 Output \N \N \N \N % 2020-09-29 11:19:58.858+08 2020-09-29 11:19:58.858+08 fe84d4c4-d79f-4a80-bd65-950c4c044636 2 t f
+5436 Speeddeg 超载风速比 Output \N \N \N \N \N \N % 2020-09-29 11:19:58.861+08 2020-09-29 11:19:58.861+08 fe84d4c4-d79f-4a80-bd65-950c4c044636 1 t f
+5437 Obliquitydeg 超载倾角比 Output \N \N \N \N \N \N % 2020-09-29 11:19:58.865+08 2020-09-29 11:19:58.865+08 fe84d4c4-d79f-4a80-bd65-950c4c044636 1 t f
+5438 weight 额定重量 Output \N 0 \N \N T 2020-09-29 11:19:58.868+08 2020-09-29 11:19:58.868+08 fe84d4c4-d79f-4a80-bd65-950c4c044636 1 t f
+5439 Weightdeg 超载重量比 Output \N 0 \N \N % 2020-09-29 11:19:58.872+08 2020-09-29 11:19:58.872+08 fe84d4c4-d79f-4a80-bd65-950c4c044636 2 t f
+5440 Radiusdeg 超载幅度比 Output \N 0 \N \N % 2020-09-29 11:19:59.046+08 2020-09-29 11:19:59.046+08 fe84d4c4-d79f-4a80-bd65-950c4c044636 1 t f
+5441 curweight 当前重量 Output \N 0 \N \N T 2020-09-29 11:19:59.053+08 2020-09-29 11:19:59.053+08 fe84d4c4-d79f-4a80-bd65-950c4c044636 1 t f
+5442 radius 幅度 Output \N 2 \N \N m 2020-09-29 11:19:59.057+08 2020-09-29 11:19:59.057+08 fe84d4c4-d79f-4a80-bd65-950c4c044636 2 t f
+5443 anglex x轴角度 Output \N \N \N \N \N \N ° 2020-10-09 14:21:36.084+08 2020-10-09 14:21:36.084+08 d7c62295-864c-44de-81e0-2cb9a03bf532 2 t f
+5444 angley y轴角度 Output \N \N \N \N \N \N ° 2020-10-09 14:21:59.873+08 2020-10-09 14:21:59.873+08 d7c62295-864c-44de-81e0-2cb9a03bf532 2 t f
+5445 anglez z轴角度 Output \N \N \N \N \N \N ° 2020-10-09 14:22:30.082+08 2020-10-09 14:22:30.082+08 d7c62295-864c-44de-81e0-2cb9a03bf532 2 t f
+5446 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-10-09 14:22:52.255+08 2020-10-09 14:22:52.255+08 d7c62295-864c-44de-81e0-2cb9a03bf532 2 t f
+5464 humigear 加湿器挡位 Output \N \N \N \N \N \N 2020-10-10 10:46:03.639+08 2020-10-10 10:46:03.639+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 1 t f
+5465 pm1 PM1 Output \N \N \N 2 \N \N ug/m³ 2020-10-10 10:46:03.643+08 2020-10-10 10:46:03.643+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 2 t f
+5466 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-10-10 10:46:03.647+08 2020-10-10 10:46:03.647+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 2 t f
+5467 humidity 湿度 Output \N \N \N 2 \N \N % 2020-10-10 10:46:03.652+08 2020-10-10 10:46:03.652+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 2 t f
+5468 ch2o 甲醛 Output \N \N \N 2 \N \N mg/m³ 2020-10-10 10:46:03.655+08 2020-10-10 10:46:03.655+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 2 t f
+5469 pm25 PM2.5 Output \N \N \N 2 \N \N ug/m³ 2020-10-10 10:46:03.659+08 2020-10-10 10:46:03.659+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 2 t f
+5470 pm10 PM10 Output \N \N \N 2 \N \N ug/m³ 2020-10-10 10:46:03.663+08 2020-10-10 10:46:03.663+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 2 t f
+5471 tvoc 有机气态物质 Output \N \N \N 2 \N \N mg/m³ 2020-10-10 10:46:03.667+08 2020-10-10 10:46:03.667+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 2 t f
+5472 wchargelock 无线充电开关 Output \N \N \N \N \N \N 2020-10-10 10:46:03.67+08 2020-10-10 10:46:03.67+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 1 t f
+5473 NegativeO2lock 负氧离子开关 Output \N \N \N \N \N \N 2020-10-10 10:46:03.674+08 2020-10-10 10:46:03.674+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 1 t f
+5474 uvlock UV杀菌灯开关 Output \N \N \N \N \N \N 2020-10-10 10:46:03.678+08 2020-10-10 10:46:03.678+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 1 t f
+5475 humilock 加湿器开关 Output \N \N \N \N \N \N 2020-10-10 10:46:03.682+08 2020-10-10 10:46:03.682+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 1 t f
+5476 childlock 儿童锁开关 Output \N \N \N \N \N \N 2020-10-10 10:46:03.685+08 2020-10-10 10:46:03.685+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 1 t f
+5477 powerlock 电源开关 Output \N \N \N \N \N \N 2020-10-10 10:46:03.69+08 2020-10-10 10:46:03.69+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 1 t f
+5478 windgear 风速挡位 Output \N \N \N \N 10 0 2020-10-10 10:46:03.693+08 2020-10-10 10:46:03.693+08 2a244b5c-9f1b-4432-8302-2fc036a91a14 1 t f
+5479 powerlock 电源开关 Output \N \N \N \N \N \N 2020-10-10 10:46:11.471+08 2020-10-10 10:46:11.471+08 185c3316-9ed2-4a9c-b365-0691b303600f 1 t f
+5480 childlock 儿童锁开关 Output \N \N \N \N \N \N 2020-10-10 10:46:11.477+08 2020-10-10 10:46:11.477+08 185c3316-9ed2-4a9c-b365-0691b303600f 1 t f
+5481 mode 工作模式 Output \N 0 \N \N 0自动,1手动,2睡眠,3恒湿 2020-10-10 10:46:11.481+08 2020-10-10 10:46:11.481+08 185c3316-9ed2-4a9c-b365-0691b303600f 1 t f
+5482 humigear 加湿器档位 Output \N 0 \N \N 0自动 其他1-5 挡位 2020-10-10 10:46:11.485+08 2020-10-10 10:46:11.485+08 185c3316-9ed2-4a9c-b365-0691b303600f 1 t f
+5483 water 水位感应开关 Output \N 0 \N \N 0:正常 1:缺水 2020-10-10 10:46:11.488+08 2020-10-10 10:46:11.488+08 185c3316-9ed2-4a9c-b365-0691b303600f 1 t f
+5484 soft 软件版本号 Output \N 0 \N \N 2020-10-10 10:46:11.491+08 2020-10-10 10:46:11.491+08 185c3316-9ed2-4a9c-b365-0691b303600f 1 t f
+5485 uvlock UV杀菌灯开关 Output \N \N \N \N \N \N 2020-10-10 10:46:11.494+08 2020-10-10 10:46:11.494+08 185c3316-9ed2-4a9c-b365-0691b303600f 1 t f
+5486 tvoc 有机气态物质 Output \N \N \N 2 \N \N mg/m³ 2020-10-10 10:46:11.497+08 2020-10-10 10:46:11.497+08 185c3316-9ed2-4a9c-b365-0691b303600f 2 t f
+5487 ch2o 甲醛 Output \N \N \N 2 \N \N mg/m³ 2020-10-10 10:46:11.5+08 2020-10-10 10:46:11.5+08 185c3316-9ed2-4a9c-b365-0691b303600f 2 t f
+5488 humidity 湿度 Output \N \N \N 2 \N \N % 2020-10-10 10:46:11.504+08 2020-10-10 10:46:11.504+08 185c3316-9ed2-4a9c-b365-0691b303600f 2 t f
+5489 hard 硬件版本号 Output \N 0 \N \N 2020-10-10 10:46:11.509+08 2020-10-10 10:46:11.509+08 185c3316-9ed2-4a9c-b365-0691b303600f 1 t f
+5490 fixhumi 恒湿开关状态 Output \N \N \N \N \N \N \N 1:打开 0:关闭 2020-10-10 10:46:11.513+08 2020-10-10 10:46:11.513+08 185c3316-9ed2-4a9c-b365-0691b303600f 1 t f
+5491 fogs 总雾化量 Output \N \N \N 2 \N \N L 2020-10-10 10:46:11.517+08 2020-10-10 10:46:11.517+08 185c3316-9ed2-4a9c-b365-0691b303600f 2 t f
+5492 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-10-10 10:46:11.522+08 2020-10-10 10:46:11.522+08 185c3316-9ed2-4a9c-b365-0691b303600f 2 t f
+5493 anglex x轴角度 Output \N \N \N \N \N \N ° 2020-10-10 14:25:24.929+08 2020-10-10 14:25:24.929+08 9ceb3806-c599-431c-b278-80ea9d6db7ba 2 t f
+5494 angley y轴角度 Output \N \N \N \N \N \N ° 2020-10-10 14:25:49.078+08 2020-10-10 14:25:49.078+08 9ceb3806-c599-431c-b278-80ea9d6db7ba 2 t f
+5495 anglez z轴角度 Output \N \N \N \N \N \N ° 2020-10-10 14:26:15.408+08 2020-10-10 14:26:15.408+08 9ceb3806-c599-431c-b278-80ea9d6db7ba 2 t f
+5496 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-10-10 14:26:39.355+08 2020-10-10 14:26:39.355+08 9ceb3806-c599-431c-b278-80ea9d6db7ba 2 t f
+5497 frequency 频率 Output \N \N \N \N \N \N HZ 2020-10-13 10:09:58.011+08 2020-10-13 10:09:58.011+08 42d7c213-aa9e-4263-9e97-e57ed97f4342 2 t f
+5499 physicalvalue 应力 Output \N \N \N \N Mpa 2020-10-13 10:10:48.967+08 2020-10-13 10:14:19.125+08 42d7c213-aa9e-4263-9e97-e57ed97f4342 2 t f
+5500 length 距离 Output \N \N \N 2 \N \N m 2020-10-16 13:43:46.463+08 2020-10-16 13:43:46.463+08 8006946a-43de-49dc-b665-3603da448dec 2 t f
+5502 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-10-16 13:53:55.52+08 2020-10-16 13:53:55.52+08 2997a6da-3093-40f9-b0e3-00b1f8c383b1 2 t f
+5503 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-10-16 13:57:31.984+08 2020-10-16 13:57:31.984+08 8006946a-43de-49dc-b665-3603da448dec 2 t f
+5505 length 沉降 Output \N \N \N \N \N \N mm 2020-10-19 14:20:08.557+08 2020-10-19 14:20:08.557+08 7aee0c4c-edb0-43e3-a3bc-9fbff9871499 2 t f
+5504 physicalvalue 应变 Output \N \N \N \N με 2020-10-19 14:17:50.552+08 2020-10-19 15:42:19.611+08 7a954891-860b-4321-ab9b-290a023d288f 2 t f
+5506 offset 拉绳偏移量 Output \N \N \N \N mm 2020-10-21 09:52:05.304+08 2020-10-21 09:53:39.778+08 036f8003-a82c-40bc-a175-7cb81f4da7c9 2 t f
+5507 xDataint X轴原始值 Output \N \N \N \N \N \N ° 2020-10-21 11:42:45.483+08 2020-10-21 11:42:45.483+08 d7c62295-864c-44de-81e0-2cb9a03bf532 2 t f
+5508 yDataint Y轴原始值 Output \N \N \N \N \N \N ° 2020-10-21 11:43:18.264+08 2020-10-21 11:43:18.264+08 d7c62295-864c-44de-81e0-2cb9a03bf532 2 t f
+5509 zDataint Z轴原始值 Output \N \N \N \N \N \N ° 2020-10-21 11:43:51.332+08 2020-10-21 11:43:51.332+08 d7c62295-864c-44de-81e0-2cb9a03bf532 2 t f
+5510 tempint 原始温度 Output \N \N \N \N \N \N ° 2020-10-21 11:44:26.932+08 2020-10-21 11:44:26.932+08 d7c62295-864c-44de-81e0-2cb9a03bf532 2 t f
+5511 type 在线状态 Output \N \N \N \N \N \N \N 2020-10-21 16:17:58.444+08 2020-10-21 16:17:58.444+08 7257f8df-a9ef-4358-9754-228732a8953b 1 t f
+5512 physicalvalue 湿度 Output \N 2 \N \N % 2020-10-23 17:03:59.958+08 2020-10-23 17:05:01.443+08 95a38af8-bdb9-4f10-ad6a-f3cccec12f59 2 t f
+5515 temperature 温度 Output \N 2 \N \N ℃ 2020-10-26 13:25:34.118+08 2020-10-29 13:07:06.462+08 4200d327-7520-40f5-a476-fdb18a6c0e3e 2 t f
+5516 pressure 液位 Output \N 3 \N \N mm 2020-10-26 13:25:34.217+08 2020-10-29 13:06:55.775+08 4200d327-7520-40f5-a476-fdb18a6c0e3e 2 t f
+5518 physicalvalue 位移 Output \N \N \N 2 \N \N mm 2020-10-29 16:45:09.131+08 2020-10-29 16:45:09.131+08 e7114e7a-a8cd-4265-93bd-3d86a0ab5864 2 t f
+5519 physicalvalue 裂缝 Output \N \N \N \N \N \N mm 2020-10-30 14:37:16.615+08 2020-10-30 14:37:16.615+08 77f66a9f-48f4-4970-b406-a8abc2aa39f9 2 t f
+5520 frequency 频率 Output \N \N \N \N \N \N HZ 2020-10-30 14:38:32.078+08 2020-10-30 14:38:32.078+08 77f66a9f-48f4-4970-b406-a8abc2aa39f9 2 t f
+5521 speed 风速 Output \N \N \N \N \N \N m/s 2020-11-02 10:05:36.145+08 2020-11-02 10:05:36.145+08 f2b6d5a0-114e-4c45-9066-5a938d4f620a 2 t f
+5522 direction 风向 Output \N \N \N \N \N \N ° 2020-11-02 10:05:36.152+08 2020-11-02 10:05:36.152+08 f2b6d5a0-114e-4c45-9066-5a938d4f620a 2 t f
+5525 alarmState 报警类型 Output \N \N \N \N \N \N \N 2020-11-02 14:14:05.358+08 2020-11-02 14:14:05.358+08 5bffec18-538b-4422-8cfa-c602ce69cb7e 1 t f
+5527 outCount 出流量 Output \N \N \N \N \N \N 2020-11-04 09:49:56.709+08 2020-11-04 09:49:56.709+08 dd00727c-90ae-49ec-b8a5-9a89497b7d8c 1 t f
+5528 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-11-04 09:57:18.252+08 2020-11-04 09:57:18.252+08 f4d0c081-5014-42df-8154-c7c3b4657cfb 2 t f
+5517 physicalvalue 轴力 Output \N \N \N \N KN 2020-10-28 11:47:56.378+08 2020-11-11 16:51:23.111+08 ba00d9a2-f064-49eb-918c-0924558607bc 2 t f
+5529 humidity 湿度 Output \N 2 \N \N %RH 2020-11-04 09:57:40.026+08 2020-11-04 09:58:37.958+08 f4d0c081-5014-42df-8154-c7c3b4657cfb 2 t f
+5530 length 位移 Output \N \N \N 2 \N \N mm 2020-11-04 10:06:19.414+08 2020-11-04 10:06:19.414+08 e6bcf4a3-0d98-48a5-8a7d-401f96e01bfa 2 t f
+5531 physicalvalue 雨量 Output \N \N \N 2 \N \N mm 2020-11-04 10:10:46.538+08 2020-11-04 10:10:46.538+08 257470bc-2299-4185-a68b-b194c1b926ad 2 t f
+5526 inCount 进流量 Output \N 0 \N \N . 无 2020-11-04 09:49:40.407+08 2020-11-04 10:48:49.703+08 dd00727c-90ae-49ec-b8a5-9a89497b7d8c 1 t f
+5533 PM2_5H pm2.5上限 Output \N 1 \N \N ug/m³ 2020-11-09 15:10:56.207+08 2020-11-09 15:11:36.533+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 2 t f
+5534 PM2_5L pm2.5下限 Output \N 1 \N \N ug/m³ 2020-11-09 15:11:23.888+08 2020-11-09 15:11:40.827+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 2 t f
+5536 CLEAN_M 净化量 Output \N \N \N 1 \N \N m³ 2020-11-09 15:13:58.005+08 2020-11-09 15:13:58.005+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 2 t f
+5535 USE_M 滤芯使用(分钟) Output \N 0 \N \N min 2020-11-09 15:12:47.612+08 2020-11-09 15:23:34.579+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 1 t f
+5538 water 水位感应 Output \N \N \N \N \N \N \N 0:正常 1:缺水 2020-11-09 17:40:59.979+08 2020-11-09 17:40:59.979+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 1 t f
+5539 mode 工作模式 Output \N \N \N \N \N \N 设备工作模式 0自动 1手动 2睡眠 2020-11-09 17:45:30.317+08 2020-11-09 17:45:30.317+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 1 t f
+5541 airs 本次净化量 Output \N \N \N 1 \N \N m³ 2020-11-09 17:53:11.53+08 2020-11-09 17:53:11.53+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 2 t f
+5540 fogs 本次开机加湿量 Output \N 1 \N \N L 2020-11-09 17:52:36.298+08 2020-11-09 17:53:29.201+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 2 t f
+5542 length 水位 Output \N \N \N 2 \N \N mm 2020-11-10 09:01:05.491+08 2020-11-10 09:01:05.491+08 ce6a00e6-475a-4ecd-8890-b523c3c65e53 2 t f
+5543 length 水位 Output \N \N \N \N \N \N mm 2020-11-10 15:56:53.586+08 2020-11-10 15:56:53.586+08 fc0dc028-86e5-4a74-a75b-15c2d9b30d63 2 t f
+5544 smartlock 智能开关 Output \N \N \N \N \N \N \N 1:打开 0:关闭 2020-11-10 16:20:04.14+08 2020-11-10 16:20:04.14+08 9fbfcc1f-f555-4602-a9c4-d92dbd99bd94 1 t f
+5550 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-11-11 09:55:32.342+08 2020-11-11 09:55:32.342+08 5fd6dff1-680f-410f-9631-e645a33bddda 2 t f
+5585 physicalvalue 位移 Output \N \N \N \N \N \N mm 2020-11-19 09:22:03.293+08 2020-11-19 09:22:03.293+08 cfcac206-4e6f-41f2-b40c-a9294cb606d7 2 t f
+5551 humigear 加湿器挡位 Output \N \N \N \N \N \N 2020-11-11 17:46:31.999+08 2020-11-11 17:46:31.999+08 468aada9-eeb5-4174-a21f-73f4ac420d78 1 t f
+5552 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-11-11 17:46:32.006+08 2020-11-11 17:46:32.006+08 468aada9-eeb5-4174-a21f-73f4ac420d78 2 t f
+5553 humidity 湿度 Output \N \N \N 2 \N \N % 2020-11-11 17:46:32.011+08 2020-11-11 17:46:32.011+08 468aada9-eeb5-4174-a21f-73f4ac420d78 2 t f
+5554 ch2o 甲醛 Output \N \N \N 2 \N \N mg/m³ 2020-11-11 17:46:32.015+08 2020-11-11 17:46:32.015+08 468aada9-eeb5-4174-a21f-73f4ac420d78 2 t f
+5555 pm25 PM2.5 Output \N \N \N 2 \N \N ug/m³ 2020-11-11 17:46:32.019+08 2020-11-11 17:46:32.019+08 468aada9-eeb5-4174-a21f-73f4ac420d78 2 t f
+5556 tvoc 有机气态物质 Output \N \N \N 2 \N \N mg/m³ 2020-11-11 17:46:32.024+08 2020-11-11 17:46:32.024+08 468aada9-eeb5-4174-a21f-73f4ac420d78 2 t f
+5557 qtimer 定时关小时 Output \N 0 \N \N 设备端的定时关小时数,最大12H 2020-11-11 17:46:32.028+08 2020-11-11 17:46:32.028+08 468aada9-eeb5-4174-a21f-73f4ac420d78 1 t f
+5558 PM2_5H pm2.5上限 Output \N 1 \N \N ug/m³ 2020-11-11 17:46:32.032+08 2020-11-11 17:46:32.032+08 468aada9-eeb5-4174-a21f-73f4ac420d78 2 t f
+5559 windgear 风速挡位 Output \N \N \N \N 10 0 2020-11-11 17:46:32.036+08 2020-11-11 17:46:32.036+08 468aada9-eeb5-4174-a21f-73f4ac420d78 1 t f
+5560 soft 软件版本号 Output \N 0 \N \N 2020-11-11 17:46:32.04+08 2020-11-11 17:46:32.04+08 468aada9-eeb5-4174-a21f-73f4ac420d78 1 t f
+5561 hard 硬件版本号 Output \N 0 \N \N 2020-11-11 17:46:32.044+08 2020-11-11 17:46:32.044+08 468aada9-eeb5-4174-a21f-73f4ac420d78 1 t f
+5562 clean 净化开关 Output \N 0 \N \N 代表在净化,用于后端聚集 统计净化时长 2020-11-11 17:46:32.047+08 2020-11-11 17:46:32.047+08 468aada9-eeb5-4174-a21f-73f4ac420d78 1 t f
+5563 NegativeO2lock 负氧离子开关 Output \N \N \N \N \N \N 2020-11-11 17:46:32.05+08 2020-11-11 17:46:32.05+08 468aada9-eeb5-4174-a21f-73f4ac420d78 1 t f
+5564 uvlock UV杀菌灯开关 Output \N \N \N \N \N \N 2020-11-11 17:46:32.054+08 2020-11-11 17:46:32.054+08 468aada9-eeb5-4174-a21f-73f4ac420d78 1 t f
+5565 humilock 加湿器开关 Output \N \N \N \N \N \N 2020-11-11 17:46:32.057+08 2020-11-11 17:46:32.057+08 468aada9-eeb5-4174-a21f-73f4ac420d78 1 t f
+5566 childlock 儿童锁开关 Output \N \N \N \N \N \N 2020-11-11 17:46:32.061+08 2020-11-11 17:46:32.061+08 468aada9-eeb5-4174-a21f-73f4ac420d78 1 t f
+5567 powerlock 电源开关 Output \N \N \N \N \N \N 2020-11-11 17:46:32.065+08 2020-11-11 17:46:32.065+08 468aada9-eeb5-4174-a21f-73f4ac420d78 1 t f
+5568 USE_M 滤芯使用(分钟) Output \N 0 \N \N min 2020-11-11 17:46:32.069+08 2020-11-11 17:46:32.069+08 468aada9-eeb5-4174-a21f-73f4ac420d78 1 t f
+5569 CLEAN_M 净化量 Output \N \N \N 1 \N \N m³ 2020-11-11 17:46:32.073+08 2020-11-11 17:46:32.073+08 468aada9-eeb5-4174-a21f-73f4ac420d78 2 t f
+5570 PM2_5L pm2.5下限 Output \N 1 \N \N ug/m³ 2020-11-11 17:46:32.078+08 2020-11-11 17:46:32.078+08 468aada9-eeb5-4174-a21f-73f4ac420d78 2 t f
+5571 smartlock 智能开关 Output \N \N \N \N \N \N \N 1:打开 0:关闭 2020-11-11 17:46:32.082+08 2020-11-11 17:46:32.082+08 468aada9-eeb5-4174-a21f-73f4ac420d78 1 t f
+5572 fogs 本次开机加湿量 Output \N 1 \N \N L 2020-11-11 17:46:32.086+08 2020-11-11 17:46:32.086+08 468aada9-eeb5-4174-a21f-73f4ac420d78 2 t f
+5573 airs 本次净化量 Output \N \N \N 1 \N \N m³ 2020-11-11 17:46:32.09+08 2020-11-11 17:46:32.09+08 468aada9-eeb5-4174-a21f-73f4ac420d78 2 t f
+5574 mode 工作模式 Output \N \N \N \N \N \N 设备工作模式 0自动 1手动 2睡眠 2020-11-11 17:46:32.093+08 2020-11-11 17:46:32.093+08 468aada9-eeb5-4174-a21f-73f4ac420d78 1 t f
+5575 water 水位感应 Output \N \N \N \N \N \N \N 0:正常 1:缺水 2020-11-11 17:46:32.097+08 2020-11-11 17:46:32.097+08 468aada9-eeb5-4174-a21f-73f4ac420d78 1 t f
+5576 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-11-16 09:26:32.45+08 2020-11-16 09:26:32.45+08 eaa7d913-e972-4a8b-9bb6-870673b450a2 2 t f
+5577 frequency 频率 Output \N \N \N 3 \N \N Hz 2020-11-16 09:26:32.455+08 2020-11-16 09:26:32.455+08 eaa7d913-e972-4a8b-9bb6-870673b450a2 2 t f
+5578 am 幅值 Output \N \N \N 3 \N \N mv 2020-11-16 09:26:32.46+08 2020-11-16 09:26:32.46+08 eaa7d913-e972-4a8b-9bb6-870673b450a2 2 t f
+5579 physicalvalue 应力 Output \N \N \N 4 \N \N kN 2020-11-16 09:26:32.463+08 2020-11-16 09:26:32.463+08 eaa7d913-e972-4a8b-9bb6-870673b450a2 2 t f
+5580 waterlevel 水位 Output \N \N \N 4 \N \N m 2020-11-16 10:21:24.8+08 2020-11-16 10:21:24.8+08 2997a6da-3093-40f9-b0e3-00b1f8c383b1 2 t f
+5581 frequency 频率 Output \N 3 \N \N Hz 2020-11-16 13:58:24.278+08 2020-11-16 13:58:45.333+08 3a1eee94-6d31-4cfe-a9cf-c2522302fa16 2 t f
+5583 temperature 温度 Output \N \N \N 2 \N \N ℃ 2020-11-16 13:59:55.049+08 2020-11-16 13:59:55.049+08 3a1eee94-6d31-4cfe-a9cf-c2522302fa16 2 t f
+5584 am 幅值 Output \N \N \N 4 \N \N mv 2020-11-16 14:00:15.858+08 2020-11-16 14:00:15.858+08 3a1eee94-6d31-4cfe-a9cf-c2522302fa16 2 t f
+5586 frequency 频率 Output \N \N \N \N \N \N HZ 2020-11-19 09:30:53.095+08 2020-11-19 09:30:53.095+08 cfcac206-4e6f-41f2-b40c-a9294cb606d7 2 t f
+5548 anglex X轴角度 Output \N 2 \N \N ° 2020-11-11 09:55:32.318+08 2021-01-18 17:20:53.943+08 5fd6dff1-680f-410f-9631-e645a33bddda 2 t f
+5587 physicalvalue 位移 Output \N \N \N \N \N \N mm 2020-11-26 10:49:59.115+08 2020-11-26 10:49:59.115+08 ec43a63c-84a3-4a0a-964e-79fa8af558e7 2 t f
+5588 physicalvalue 水位 Output \N \N \N \N \N \N m 2020-11-26 13:54:13.843+08 2020-11-26 13:54:13.843+08 6c6317e7-c5c4-4ef8-ab38-3da0e4824f91 2 t f
+5589 anglex x角度 Output \N \N \N \N \N \N ° 2020-11-27 10:03:26.934+08 2020-11-27 10:03:26.934+08 830b53c4-b4d6-4d85-9776-3b448ee62c5e 2 t f
+5592 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-11-27 10:04:38.266+08 2020-11-27 10:04:38.266+08 830b53c4-b4d6-4d85-9776-3b448ee62c5e 2 t f
+5593 data_in 进的人数 Output \N \N \N \N \N \N 人次 2020-12-03 17:40:46.31+08 2020-12-03 17:40:46.31+08 aa8f7231-23cf-47e0-a8cb-f045759a3304 1 t f
+5594 data_out 出的人数 Output \N 0 \N \N 人次 2020-12-03 17:40:46.589+08 2020-12-03 17:40:56.54+08 aa8f7231-23cf-47e0-a8cb-f045759a3304 1 t f
+5595 co 一氧化碳 Output \N \N \N 2 \N \N ppm 2020-12-08 17:09:25.387+08 2020-12-08 17:09:25.387+08 82830f9f-f318-4308-babc-79341cb03954 2 t f
+5596 ch4 甲烷 Output \N \N \N 2 \N \N ppm 2020-12-08 17:10:03.597+08 2020-12-08 17:10:03.597+08 82830f9f-f318-4308-babc-79341cb03954 2 t f
+5597 h2s 硫化氢 Output \N \N \N 2 \N \N ppm 2020-12-08 17:10:28.324+08 2020-12-08 17:10:28.324+08 82830f9f-f318-4308-babc-79341cb03954 2 t f
+5598 o3 臭氧 Output \N \N \N 3 \N \N ppm 2020-12-08 17:10:49.8+08 2020-12-08 17:10:49.8+08 82830f9f-f318-4308-babc-79341cb03954 2 t f
+5599 temperature 湿度 Output \N \N \N 2 \N \N ℃ 2020-12-08 17:11:39.799+08 2020-12-08 17:11:39.799+08 82830f9f-f318-4308-babc-79341cb03954 2 t f
+5600 humidity 湿度 Output \N \N \N 2 \N \N % 2020-12-08 17:11:55.868+08 2020-12-08 17:11:55.868+08 82830f9f-f318-4308-babc-79341cb03954 2 t f
+5601 distance 标签与基站距离 Output \N \N \N 3 \N \N m 2020-12-09 14:16:34.845+08 2020-12-09 14:16:34.845+08 47875511-0ac0-4938-a38b-277669f302e9 2 t f
+5602 state 标签状态 Output \N \N \N \N \N \N 0正常 1电压低 2紧急报警 2020-12-09 14:17:23.637+08 2020-12-09 14:17:23.637+08 47875511-0ac0-4938-a38b-277669f302e9 1 t f
+5603 station_id 基站ID Output \N \N \N \N \N \N 2020-12-09 14:18:09.02+08 2020-12-09 14:18:09.02+08 47875511-0ac0-4938-a38b-277669f302e9 5 t f
+5605 angley y轴角度 Output \N \N \N \N \N \N ° 2020-12-11 09:12:02.824+08 2020-12-11 09:12:02.824+08 dbbe4022-fbd5-42cc-9e58-233046723571 2 t f
+5604 anglex x轴角度 Output \N \N \N \N ° 2020-12-11 09:11:28.358+08 2020-12-11 09:56:58.575+08 dbbe4022-fbd5-42cc-9e58-233046723571 2 t f
+5606 physicalvalue 位移 Output \N \N \N \N \N \N mm 2020-12-11 10:18:23.532+08 2020-12-11 10:18:23.532+08 cfb7053c-3698-4308-9245-c7fdfb84a202 2 t f
+5607 physicalvalue 位移 Output \N \N \N \N \N \N mm 2020-12-11 10:19:17.142+08 2020-12-11 10:19:17.142+08 5bf561bf-7398-4a8f-aaaf-4f7b695d0020 2 t f
+5608 physicalvalue 温度 Output \N \N \N \N \N \N ℃ 2020-12-11 10:21:02.83+08 2020-12-11 10:21:02.83+08 bf13586b-7b53-4c49-8131-f81bb6128330 2 t f
+5610 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-12-16 15:30:06.056+08 2020-12-16 15:30:06.056+08 4b302156-72de-4f74-a828-06b1e47938a3 2 t f
+5611 frequency 频率 Output \N \N \N \N \N \N HZ 2020-12-16 15:30:46.778+08 2020-12-16 15:30:46.778+08 4b302156-72de-4f74-a828-06b1e47938a3 2 t f
+5612 physicalvalue 应变 Output \N \N \N \N \N \N με 2020-12-16 15:32:57.646+08 2020-12-16 15:32:57.646+08 4b302156-72de-4f74-a828-06b1e47938a3 2 t f
+5613 physicalvalue 受力 Output \N \N \N \N \N \N KN 2020-12-16 15:35:33.678+08 2020-12-16 15:35:33.678+08 9acc6ecb-52ee-4070-8fe5-6e893642d30e 2 t f
+5614 frequency 频率 Output \N \N \N \N \N \N HZ 2020-12-16 15:35:33.721+08 2020-12-16 15:35:33.721+08 9acc6ecb-52ee-4070-8fe5-6e893642d30e 2 t f
+5615 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-12-16 15:35:33.76+08 2020-12-16 15:35:33.76+08 9acc6ecb-52ee-4070-8fe5-6e893642d30e 2 t f
+5616 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-12-16 15:38:50.397+08 2020-12-16 15:38:50.397+08 bd26c9fd-802a-4cca-8f55-3a27e7bfb026 2 t f
+5617 frequency 频率 Output \N \N \N \N \N \N HZ 2020-12-16 15:38:50.589+08 2020-12-16 15:38:50.589+08 bd26c9fd-802a-4cca-8f55-3a27e7bfb026 2 t f
+5618 physicalvalue 受力 Output \N \N \N \N \N \N KN 2020-12-16 15:38:50.611+08 2020-12-16 15:38:50.611+08 bd26c9fd-802a-4cca-8f55-3a27e7bfb026 2 t f
+5619 anglex x轴角度 Output \N \N \N \N \N \N ° 2020-12-21 17:00:24.193+08 2020-12-21 17:00:24.193+08 09252fcf-2e4d-42ea-b1a0-04b8fd99c5dc 2 t f
+5620 angley y轴角度 Output \N \N \N \N \N \N ° 2020-12-21 17:00:24.208+08 2020-12-21 17:00:24.208+08 09252fcf-2e4d-42ea-b1a0-04b8fd99c5dc 2 t f
+5621 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-12-22 08:41:29.422+08 2020-12-22 08:41:29.422+08 31ecb271-8866-4680-add6-52e257911749 2 t f
+5623 accelerationy 加速度y Output \N \N \N \N \N \N mg 2020-12-22 08:43:46.851+08 2020-12-22 08:43:46.851+08 31ecb271-8866-4680-add6-52e257911749 2 t f
+5622 accelerationx 加速度x Output \N \N \N \N mg 2020-12-22 08:42:20.743+08 2020-12-22 08:43:56.716+08 31ecb271-8866-4680-add6-52e257911749 2 t f
+5624 accelerationz 加速度z Output \N \N \N \N \N \N mg 2020-12-22 08:44:31.287+08 2020-12-22 08:44:31.287+08 31ecb271-8866-4680-add6-52e257911749 2 t f
+5625 anglex x轴角度 Output \N \N \N \N \N \N ° 2020-12-24 15:08:13.973+08 2020-12-24 15:08:13.973+08 b7a0ef5f-adce-4d74-808d-e8cb24d7955b 2 t f
+5626 angley y轴角度 Output \N \N \N \N \N \N ° 2020-12-24 15:08:48.6+08 2020-12-24 15:08:48.6+08 b7a0ef5f-adce-4d74-808d-e8cb24d7955b 2 t f
+5627 anglez z轴角度 Output \N \N \N \N \N \N ° 2020-12-24 15:09:22.21+08 2020-12-24 15:09:22.21+08 b7a0ef5f-adce-4d74-808d-e8cb24d7955b 2 t f
+5628 temperature 温度 Output \N \N \N \N \N \N ℃ 2020-12-24 15:09:52.059+08 2020-12-24 15:09:52.059+08 b7a0ef5f-adce-4d74-808d-e8cb24d7955b 2 t f
+5629 voltage 电压 Output \N \N \N \N V 2020-12-24 15:13:12.777+08 2020-12-25 14:47:53.737+08 b7a0ef5f-adce-4d74-808d-e8cb24d7955b 2 t f
+5630 anglex X轴角度 Output \N \N \N 4 \N \N ° 2020-12-29 14:11:13.141+08 2020-12-29 14:11:13.141+08 6680d7d5-905b-4311-8a63-a8c11b0c765a 2 t f
+5631 angley Y轴角度 Output \N \N \N 4 \N \N ° 2020-12-29 14:11:13.765+08 2020-12-29 14:11:13.765+08 6680d7d5-905b-4311-8a63-a8c11b0c765a 2 t f
+5637 physicalvalue 温度 Output \N \N \N \N \N \N ℃ 2020-12-31 14:26:55.477+08 2020-12-31 14:26:55.477+08 3cd111a3-296e-4cfe-af80-2d206f3a2b36 2 t f
+5638 physicalvalue 位移 Output \N \N \N \N \N \N mm 2020-12-31 14:28:18.777+08 2020-12-31 14:28:18.777+08 e673c024-edd4-495c-a9a9-c5c6306ed6d0 2 t f
+5636 physicalvalue 微应变 Output \N \N \N \N με 2020-12-31 14:25:20.913+08 2021-01-05 14:01:56.339+08 8cb0c7e1-fe83-4b63-9f7f-7598487ef57a 2 t f
+5640 northing Y坐标 Output \N 3 \N \N m 2021-01-07 10:07:18.761+08 2021-01-18 10:59:25.908+08 a68a5258-d2d1-40df-beb0-710a190c1175 2 t f
+5648 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2021-01-07 16:03:22.682+08 2021-01-07 16:03:22.682+08 68049b31-8deb-465e-a468-2cbafc9b8023 5 t f
+5653 northingDiff Dy Output \N 3 \N \N m 2021-01-08 17:52:36.899+08 2021-01-18 10:58:47.009+08 9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22 2 t f
+5654 heightDiff Dz Output \N 3 \N \N m 2021-01-08 17:53:00.123+08 2021-01-18 10:58:52.67+08 9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22 2 t f
+5657 lengthDiff Ds Output \N \N \N \N m 2021-01-18 10:44:25.965+08 2021-01-18 10:59:00.325+08 9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22 2 t f
+5644 heightDiff Dz Output \N 3 \N \N m 2021-01-07 10:11:42.053+08 2021-01-18 10:59:20.25+08 a68a5258-d2d1-40df-beb0-710a190c1175 2 t f
+5639 easting X坐标 Output \N 3 \N \N m 2021-01-07 10:06:48.804+08 2021-01-18 10:59:31.332+08 a68a5258-d2d1-40df-beb0-710a190c1175 2 t f
+5641 height Z坐标 Output \N 3 \N \N m 2021-01-07 10:08:36.833+08 2021-01-18 10:59:36.919+08 a68a5258-d2d1-40df-beb0-710a190c1175 2 t f
+5642 eastingDiff Dx Output \N 3 \N \N m 2021-01-07 10:09:45.113+08 2021-01-18 10:59:42.465+08 a68a5258-d2d1-40df-beb0-710a190c1175 2 t f
+5643 northingDiff Dy Output \N 3 \N \N m 2021-01-07 10:10:12.354+08 2021-01-18 10:59:47.748+08 a68a5258-d2d1-40df-beb0-710a190c1175 2 t f
+5645 addeastingDiff sDx Output \N 3 \N \N m 2021-01-07 10:16:03.86+08 2021-01-18 10:59:57.467+08 a68a5258-d2d1-40df-beb0-710a190c1175 2 t f
+5646 addnorthingDiff sDy Output \N 3 \N \N m 2021-01-07 10:17:42.08+08 2021-01-18 11:00:03.815+08 a68a5258-d2d1-40df-beb0-710a190c1175 2 t f
+5647 addheightDiff sDz Output \N 3 \N \N m 2021-01-07 10:18:41.934+08 2021-01-18 11:00:09.743+08 a68a5258-d2d1-40df-beb0-710a190c1175 2 t f
+5649 easting x坐标 Output \N 3 \N \N m 2021-01-08 17:49:56.385+08 2021-01-18 10:58:07.821+08 9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22 2 t f
+5655 windSpeed 风速分类 Output \N 2 1000 0 m/s 2021-01-14 14:38:10.135+08 2021-01-14 16:59:22.024+08 a9e161b5-80ac-44f8-b7e3-eab4baaab9d8 2 t f
+5650 northing y坐标 Output \N 3 \N \N m 2021-01-08 17:50:51.498+08 2021-01-18 10:58:12.481+08 9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22 2 t f
+5651 height z坐标 Output \N 3 \N \N m 2021-01-08 17:51:15.238+08 2021-01-18 10:58:17.56+08 9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22 2 t f
+5652 eastingDiff Dx Output \N 3 \N \N m 2021-01-08 17:52:17.544+08 2021-01-18 10:58:25.456+08 9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22 2 t f
+5659 gy Y轴加速度 Output \N \N \N \N \N \N mg 2021-01-18 12:37:46.535+08 2021-01-18 12:37:46.535+08 b0ddaaab-3ad2-4674-a102-dc2459657a7d 2 t f
+5660 gz Z轴加速度 Output \N \N \N \N \N \N 2021-01-18 12:37:46.54+08 2021-01-18 12:37:46.54+08 b0ddaaab-3ad2-4674-a102-dc2459657a7d 2 t f
+5658 gx X轴加速度 Output \N \N \N \N mg 2021-01-18 12:37:46.529+08 2021-01-18 12:38:25.505+08 b0ddaaab-3ad2-4674-a102-dc2459657a7d 2 t f
+5661 x X轴倾斜角度 Output \N \N \N \N \N \N ° 2021-01-18 14:02:07.855+08 2021-01-18 14:02:07.855+08 d1124662-5294-40cf-a8cb-6cac92776c40 2 t f
+5662 y Y轴倾斜角度 Output \N \N \N \N \N \N ° 2021-01-18 14:02:07.883+08 2021-01-18 14:02:07.883+08 d1124662-5294-40cf-a8cb-6cac92776c40 2 t f
+5663 z Z轴倾斜角度 Output \N \N \N \N \N \N ° 2021-01-18 14:02:08.166+08 2021-01-18 14:02:08.166+08 d1124662-5294-40cf-a8cb-6cac92776c40 2 t f
+5656 windDirection 风向 Output \N 2 ° 2021-01-14 14:38:46.893+08 2021-01-19 11:44:44.92+08 a9e161b5-80ac-44f8-b7e3-eab4baaab9d8 2 t f
+5664 angle 倾斜角度 Output \N \N \N \N \N \N ° 2021-01-18 14:02:08.19+08 2021-01-18 14:02:08.19+08 d1124662-5294-40cf-a8cb-6cac92776c40 2 t f
+5665 trend 方向角度 Output \N \N \N \N \N \N ° 2021-01-18 14:02:08.254+08 2021-01-18 14:02:08.254+08 d1124662-5294-40cf-a8cb-6cac92776c40 2 t f
+5666 temperature 温度 Output \N \N \N \N \N \N ℃ 2021-01-18 14:04:59.394+08 2021-01-18 14:04:59.394+08 1de99810-efe3-468a-a89b-0d42d5933634 2 t f
+5667 waterrate 含水率 Output \N \N \N \N \N \N % 2021-01-18 14:09:49.697+08 2021-01-18 14:09:49.697+08 cd504e3c-bb6a-472e-bf23-eac4d2c0ca1a 2 t f
+5668 waterlevel 泥水位 Output \N \N \N \N \N \N m 2021-01-18 14:14:29.651+08 2021-01-18 14:14:29.651+08 cff46266-6321-44f0-a893-0a66249826b1 2 t f
+5549 angley Y轴角度 Output \N 2 \N \N ° 2020-11-11 09:55:32.334+08 2021-01-18 17:21:01.042+08 5fd6dff1-680f-410f-9631-e645a33bddda 2 t f
+5703 x x轴角度 Output \N \N \N \N \N \N ° 2021-02-04 15:51:27.639+08 2021-02-04 15:51:27.639+08 074a59c4-fb97-4bb9-9835-8c6463a9dd8a 2 t f
+5704 y y轴角度 Output \N \N \N \N \N \N ° 2021-02-04 15:51:52.693+08 2021-02-04 15:51:52.693+08 074a59c4-fb97-4bb9-9835-8c6463a9dd8a 2 t f
+5705 z z轴角度 Output \N \N \N \N \N \N ° 2021-02-04 15:52:20.944+08 2021-02-04 15:52:20.944+08 074a59c4-fb97-4bb9-9835-8c6463a9dd8a 2 t f
+5677 jsonfileexts \N Constant \N \N .a,.d,.dx,.dex,.m \N \N \N \N 2021-01-22 17:17:12.065+08 2021-01-22 17:17:12.065+08 cd020968-8d12-4951-a6bb-0658b8ea6799 5 t f
+5721 angley Y轴位移 Output \N 4 \N mm 2021-02-05 15:29:31.06+08 2021-02-05 15:30:23.295+08 99112554-2cb9-43fc-adef-6068fdb897a7 2 t f
+5706 angle 倾斜 Output \N \N \N \N \N \N ° 2021-02-04 15:52:38.784+08 2021-02-04 15:52:38.784+08 074a59c4-fb97-4bb9-9835-8c6463a9dd8a 2 t f
+5684 length 距离 Output \N \N \N 3 \N \N m 2021-01-26 15:42:40.697+08 2021-01-26 15:42:40.697+08 2df0457d-dcdc-43a8-b9be-cde18d3e3f6f 2 t f
+5685 length 距离 Output \N 2 \N \N m 2021-01-26 15:59:08.537+08 2021-01-26 15:59:22.394+08 b781e844-b4da-4a6b-9420-bd6796c7188b 2 t f
+5707 trend 方向角度 Output \N \N \N \N \N \N ° 2021-02-04 15:52:54.992+08 2021-02-04 15:52:54.992+08 074a59c4-fb97-4bb9-9835-8c6463a9dd8a 2 t f
+5708 displacement 位移 Output \N 4 \N \N mm 2021-02-04 16:08:03.935+08 2021-02-04 16:08:10.47+08 5cecb8ee-3d0b-41dd-8293-4108719a7e08 2 t f
+5689 xlength X Output \N \N \N \N mm 2021-01-27 14:24:00.992+08 2021-01-28 08:46:45.309+08 4f43df6e-9984-45bb-9ec3-62e789fb6b72 2 t f
+5690 ylength Y Output \N \N \N \N mm 2021-01-27 14:24:55.012+08 2021-01-28 08:46:53.738+08 4f43df6e-9984-45bb-9ec3-62e789fb6b72 2 t f
+5691 zlength Z Output \N \N \N \N mm 2021-01-27 14:25:33.899+08 2021-01-28 08:47:00.866+08 4f43df6e-9984-45bb-9ec3-62e789fb6b72 2 t f
+5692 xacceleration x加速度 Output \N \N \N \N \N \N mg 2021-01-28 08:54:46.233+08 2021-01-28 08:54:46.233+08 c9b1921e-62db-4dc5-b15b-663afe09388e 2 t f
+5693 yacceleration y加速度 Output \N \N \N \N \N \N mg 2021-01-28 08:55:29.871+08 2021-01-28 08:55:29.871+08 c9b1921e-62db-4dc5-b15b-663afe09388e 2 t f
+5694 zacceleration z加速度 Output \N \N \N \N \N \N mg 2021-01-28 08:55:53.591+08 2021-01-28 08:55:53.591+08 c9b1921e-62db-4dc5-b15b-663afe09388e 2 t f
+5686 x x方向位移 Output \N \N \N \N mm 2021-01-27 14:12:22.051+08 2021-01-28 08:59:16.485+08 ad519e49-e9a4-46e1-8166-c56e97bac6d5 2 t f
+5687 y y方向位移 Output \N \N \N \N mm 2021-01-27 14:12:51.624+08 2021-01-28 08:59:23.28+08 ad519e49-e9a4-46e1-8166-c56e97bac6d5 2 t f
+5688 z z方向位移 Output \N \N \N \N mm 2021-01-27 14:13:25.332+08 2021-01-28 08:59:31.284+08 ad519e49-e9a4-46e1-8166-c56e97bac6d5 2 t f
+5695 rainfall 降雨量 Output \N \N \N \N \N \N mm 2021-01-28 09:38:19.247+08 2021-01-28 09:38:19.247+08 7dbd6789-715f-43ad-94d2-ca3ede2c52e2 2 t f
+5696 daily_rainfall 日降雨量 Output \N \N \N \N \N \N mm 2021-01-28 09:38:53.486+08 2021-01-28 09:38:53.486+08 7dbd6789-715f-43ad-94d2-ca3ede2c52e2 2 t f
+5697 length 水位 Output \N \N \N \N \N \N m 2021-01-28 09:49:29.27+08 2021-01-28 09:49:29.27+08 d0e4aa6d-cc64-4e1d-9ce4-a91c1fd76e87 2 t f
+5698 length 裂缝 Output \N \N \N \N \N \N mm 2021-01-28 09:50:22.31+08 2021-01-28 09:50:22.31+08 40e24053-00bb-4c0d-9d0d-6b44178ab0f2 2 t f
+5699 soil_moisture 土壤含水率 Output \N \N \N \N \N \N % 2021-01-28 10:03:29.741+08 2021-01-28 10:03:29.741+08 532e0ecd-69b7-4dc4-945e-e4503cb4f4de 2 t f
+5700 physicalvalue Z轴加速度 Output \N \N \N \N g 2021-01-29 10:42:07.717+08 2021-01-29 10:42:14.668+08 e983c3bb-0606-43f3-ad7a-0a1c80bf1df4 2 t f
+5701 physicalvalue Y轴加速度 Output \N \N \N \N g 2021-01-29 11:01:03.918+08 2021-01-29 11:01:12.771+08 fc3a3026-9e74-4e31-9927-3936778248b5 2 t f
+5702 physicalvalue X轴加速度 Output \N \N \N \N \N g 2021-01-29 11:02:09.323+08 2021-01-29 11:02:09.323+08 2364818e-4cde-4614-a15d-7a127ceabf7d 2 t f
+5709 temperature 温度 Output \N \N \N \N ℃ 2021-02-04 16:17:08.471+08 2021-02-04 16:17:20.233+08 2940ee26-449d-4390-8707-b8e0b150faad 2 t f
+5710 waterlevel 泥水位 Output \N \N \N \N \N \N m 2021-02-05 15:01:40.068+08 2021-02-05 15:01:40.068+08 bf24a684-40ba-4a05-9745-dfad12c4a4a2 2 t f
+5711 waterrate 含水率 Output \N \N \N \N % 2021-02-05 15:03:42.661+08 2021-02-05 15:03:50.029+08 8ebf5c23-cb3c-4f9f-a506-a3d125575921 2 t f
+5712 gx X轴加速度 Output \N \N \N \N mg 2021-02-05 15:04:47.094+08 2021-02-05 15:04:53.537+08 68beb8e6-51d2-40db-8cae-5ba79d4cf5c6 2 t f
+5713 gy Y轴加速度 Output \N \N \N \N \N \N mg 2021-02-05 15:05:17.38+08 2021-02-05 15:05:17.38+08 68beb8e6-51d2-40db-8cae-5ba79d4cf5c6 2 t f
+5714 gz Z轴加速度 Output \N \N \N \N \N \N mg 2021-02-05 15:05:32.343+08 2021-02-05 15:05:32.343+08 68beb8e6-51d2-40db-8cae-5ba79d4cf5c6 2 t f
+5715 temperature 温度 Output \N 2 \N \N ℃ 2021-02-05 15:13:34.157+08 2021-02-05 15:13:39.661+08 915fe37c-0682-4390-8b9c-06edc2294532 2 t f
+5716 frequency 频率 Output \N \N \N 3 \N \N Hz 2021-02-05 15:15:17.682+08 2021-02-05 15:15:17.682+08 915fe37c-0682-4390-8b9c-06edc2294532 2 t f
+5717 am 幅值 Output \N \N \N 2 \N \N mv 2021-02-05 15:15:40.259+08 2021-02-05 15:15:40.259+08 915fe37c-0682-4390-8b9c-06edc2294532 2 t f
+5718 physicalvalue 应力 Output \N 4 \N \N Kn 2021-02-05 15:16:06.181+08 2021-02-05 15:16:13.089+08 915fe37c-0682-4390-8b9c-06edc2294532 2 t f
+5719 physicalvalue 雨量 Output \N 2 \N \N mm 2021-02-05 15:20:00.866+08 2021-02-05 15:20:04.195+08 d9456b27-5a08-40b3-bac7-967d99928997 2 t f
+5720 anglex X轴位移 Output \N 4 \N \N mm 2021-02-05 15:21:21.056+08 2021-02-05 15:21:37.222+08 99112554-2cb9-43fc-adef-6068fdb897a7 2 t f
+5730 outCount 出 Output \N \N \N \N \N \N 人 2021-02-23 13:13:14.933+08 2021-02-23 13:13:14.933+08 3d7d32da-438a-4e22-8879-eb3b7b2f98d2 1 t f
+5723 temperature 温度 Output \N \N \N 2 \N \N ℃ 2021-02-09 14:17:54.338+08 2021-02-09 14:17:54.338+08 05a8211d-6e5e-4a0a-98d2-f84900bba1a5 2 t f
+5722 waterlevel 水位 Output \N 4 \N \N m 2021-02-09 14:17:35.005+08 2021-02-09 14:17:59.51+08 05a8211d-6e5e-4a0a-98d2-f84900bba1a5 2 t f
+5724 x X位置 Output \N 4 \N \N mm 2021-02-09 17:31:30.435+08 2021-02-09 17:31:35.225+08 5fdff23a-1bda-42fc-bde0-fc7f6fe1b4cb 2 t f
+5725 y Y位置 Output \N \N \N 4 \N \N mm 2021-02-09 17:31:50.835+08 2021-02-09 17:31:50.835+08 5fdff23a-1bda-42fc-bde0-fc7f6fe1b4cb 2 t f
+5726 z Z位置 Output \N \N \N 4 \N \N mm 2021-02-09 17:32:03.557+08 2021-02-09 17:32:03.557+08 5fdff23a-1bda-42fc-bde0-fc7f6fe1b4cb 2 t f
+5727 length 距离 Output \N \N \N 2 \N \N m 2021-02-20 15:02:27.358+08 2021-02-20 15:02:27.358+08 5b2e7aad-4a66-4797-8897-7eefc972e1f9 2 t f
+5728 temperature 温度 Output \N 2 \N \N ℃ 2021-02-20 15:02:43.609+08 2021-02-20 15:02:49.104+08 5b2e7aad-4a66-4797-8897-7eefc972e1f9 2 t f
+5729 inCount 进 Output \N \N \N \N \N \N 人 2021-02-23 13:12:58.508+08 2021-02-23 13:12:58.508+08 3d7d32da-438a-4e22-8879-eb3b7b2f98d2 1 t f
+5731 stayCount 滞 Output \N \N \N \N \N \N 人 2021-02-23 13:13:33.741+08 2021-02-23 13:13:33.741+08 3d7d32da-438a-4e22-8879-eb3b7b2f98d2 1 t f
+5732 A_phase_volt A项电压 Output \N 1 \N \N V 2021-02-24 09:26:08.44+08 2021-02-24 10:28:08.403+08 e9332808-1b40-44af-9aeb-7c21643b1e80 2 t f
+5751 B_power_factor B相功率因数 Output \N \N \N 1 \N \N 2021-02-24 10:44:54.187+08 2021-02-24 10:44:54.187+08 e9332808-1b40-44af-9aeb-7c21643b1e80 2 t f
+5733 B_phase_volt B相电压 Output \N 1 \N \N V 2021-02-24 09:27:38.927+08 2021-02-24 10:28:17.867+08 e9332808-1b40-44af-9aeb-7c21643b1e80 2 t f
+5734 C_phase_volt C相电压 Output \N 1 \N \N V 2021-02-24 09:29:07.753+08 2021-02-24 10:28:26.551+08 e9332808-1b40-44af-9aeb-7c21643b1e80 2 t f
+5738 A_phase_current A相电流 Output \N \N \N 2 \N \N A 2021-02-24 10:29:52.576+08 2021-02-24 10:29:52.576+08 e9332808-1b40-44af-9aeb-7c21643b1e80 2 t f
+5739 B_phase_current B项电流 Output \N \N \N 2 \N \N A 2021-02-24 10:30:41.778+08 2021-02-24 10:30:41.778+08 e9332808-1b40-44af-9aeb-7c21643b1e80 2 t f
+5740 C_phase_current C相电流 Output \N \N \N 2 \N \N A 2021-02-24 10:31:10.916+08 2021-02-24 10:31:10.916+08 e9332808-1b40-44af-9aeb-7c21643b1e80 2 t f
+5741 total_phase_current 三项电流矢量和 Output \N \N \N 2 \N \N A 2021-02-24 10:32:03.167+08 2021-02-24 10:32:03.167+08 e9332808-1b40-44af-9aeb-7c21643b1e80 2 t f
+5742 A_active_power A相有功功率 Output \N 3 \N \N KW 2021-02-24 10:35:07.803+08 2021-02-24 10:35:21.549+08 e9332808-1b40-44af-9aeb-7c21643b1e80 2 t f
+5743 B_active_power B相有功功率 Output \N 3 \N \N KW 2021-02-24 10:36:09.688+08 2021-02-24 10:37:56.365+08 e9332808-1b40-44af-9aeb-7c21643b1e80 2 t f
+5744 C_active_power C相有功功率 Output \N \N \N 3 \N \N KW 2021-02-24 10:38:30.079+08 2021-02-24 10:38:30.079+08 e9332808-1b40-44af-9aeb-7c21643b1e80 2 t f
+5745 total_active_power 总有功功率 Output \N \N \N 3 \N \N KW 2021-02-24 10:39:14.911+08 2021-02-24 10:39:14.911+08 e9332808-1b40-44af-9aeb-7c21643b1e80 2 t f
+5750 A_power_factor A相功率因数 Output \N \N \N 1 \N \N 2021-02-24 10:44:24.262+08 2021-02-24 10:44:24.262+08 e9332808-1b40-44af-9aeb-7c21643b1e80 2 t f
+5752 C_power_factor C相功率因数 Output \N \N \N 1 \N \N 2021-02-24 10:45:19.64+08 2021-02-24 10:45:19.64+08 e9332808-1b40-44af-9aeb-7c21643b1e80 2 t f
+5753 total_power_factor 总功率因数 Output \N \N \N 1 \N \N 2021-02-24 10:45:45.054+08 2021-02-24 10:45:45.054+08 e9332808-1b40-44af-9aeb-7c21643b1e80 2 t f
+5754 frequency 频率 Output \N \N \N \N \N \N HZ 2021-02-24 10:46:19.581+08 2021-02-24 10:46:19.581+08 e9332808-1b40-44af-9aeb-7c21643b1e80 1 t f
+5755 total_energy 总有功电能 Output \N \N \N 2 \N \N KW 2021-02-24 10:49:12.821+08 2021-02-24 10:49:12.821+08 e9332808-1b40-44af-9aeb-7c21643b1e80 2 t f
+5756 anglex x轴角度 Output \N \N \N \N \N \N ° 2021-02-24 13:50:07.995+08 2021-02-24 13:50:07.995+08 487f64fc-b23f-4c0e-ac96-c610a0ff7a08 2 t f
+5757 angley y轴角度 Output \N \N \N \N \N \N ° 2021-02-24 13:50:35.251+08 2021-02-24 13:50:35.251+08 487f64fc-b23f-4c0e-ac96-c610a0ff7a08 2 t f
+5758 anglez z轴角度 Output \N \N \N \N \N \N ° 2021-02-24 13:51:05.733+08 2021-02-24 13:51:05.733+08 487f64fc-b23f-4c0e-ac96-c610a0ff7a08 2 t f
+5759 temperature 温度 Output \N \N \N \N \N \N ℃ 2021-02-24 14:29:19.624+08 2021-02-24 14:29:19.624+08 487f64fc-b23f-4c0e-ac96-c610a0ff7a08 2 t f
+5760 xDataint x角度原始值 Output \N \N \N \N \N \N ° 2021-02-24 14:30:30.623+08 2021-02-24 14:30:30.623+08 487f64fc-b23f-4c0e-ac96-c610a0ff7a08 2 t f
+5761 yDataint y角度原始值 Output \N \N \N \N \N \N ° 2021-02-24 14:31:02.598+08 2021-02-24 14:31:02.598+08 487f64fc-b23f-4c0e-ac96-c610a0ff7a08 2 t f
+5762 zDataint z角度原始值 Output \N \N \N \N \N \N ° 2021-02-24 14:33:03.491+08 2021-02-24 14:33:03.491+08 487f64fc-b23f-4c0e-ac96-c610a0ff7a08 2 t f
+5763 tempint 温度原始值 Output \N \N \N \N \N \N ℃ 2021-02-24 14:34:18.693+08 2021-02-24 14:34:18.693+08 487f64fc-b23f-4c0e-ac96-c610a0ff7a08 2 t f
+1515 physicalvalue 荷载 Output \N 4 kN 2018-01-23 14:53:15.414+08 2021-03-02 13:54:31.99+08 fd91ebd4-1201-4b5b-a5a0-e4636fb4ecbd 2 t f
+5582 physicalvalue 荷载 Output \N 4 \N \N kN 2020-11-16 13:59:17.627+08 2021-03-02 13:55:01.104+08 3a1eee94-6d31-4cfe-a9cf-c2522302fa16 2 t f
+1531 physicalvalue 荷载 Output \N 4 kN 2018-01-23 14:53:16+08 2021-03-02 13:58:47.888+08 1933583a-00cd-4d11-99f5-76e7dbeaa81c 2 t f
+2032 physicalvalue 荷载 Output \N 4 kN 2018-03-26 15:38:00.781+08 2021-03-02 13:58:59.116+08 5c6f4070-1acc-4ac2-91d6-b7420f02a37b 2 t f
+\.
+
+
+--
+-- Name: CapabilityProperty_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public."CapabilityProperty_id_seq"', 5763, true);
+
+
+--
+-- Data for Name: CompanyCertification; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."CompanyCertification" (id, type, name, "licenseId", "licenseImg", status, "adminName", "cardId", "frontImg", "reverseImg", reason, contacts, address, mobile, email, "desc", "createdAt", "updatedAt", "userId") FROM stdin;
+99c62079-61a2-43dd-8f21-56f2e5ee93c1 company 北京瑞芬星通科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.055+08 2017-08-18 16:06:34.055+08 \N
+64b7da01-1590-4463-a876-dc5361a44ea3 company 南京葛南实业有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.207+08 2017-08-18 16:06:34.207+08 \N
+75550b31-94ff-4cdb-8edf-58be82f14825 company 成都中科测控有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.228+08 2017-08-18 16:06:34.228+08 \N
+dbb9f902-6164-48d4-9267-87212c2623b8 company 西安精准测控有限责任公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.261+08 2017-08-18 16:06:34.261+08 \N
+456816c0-fc8b-4628-85f6-07462e341a55 company 邯郸市清胜电子科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.284+08 2017-08-18 16:06:34.284+08 \N
+800df2a1-c8a1-4504-a23d-31e144a8eafb company 北京长英新业数码科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.31+08 2017-08-18 16:06:34.31+08 \N
+fcac06b9-62b0-46bd-95c2-d253fbed9ee2 company 上海蒙朗物联网科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.336+08 2017-08-18 16:06:34.336+08 \N
+83c1b532-3aaa-4ea5-aee6-7568ee471625 company 北京岩信科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.359+08 2017-08-18 16:06:34.359+08 \N
+8a54c4d8-97a1-441a-ab18-748cf8c39fe4 company 浙江苍南仪表集团有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.381+08 2017-08-18 16:06:34.381+08 \N
+91555045-65a7-43d9-b4a0-a9c3dfafba4e company 广州乐享电子有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.405+08 2017-08-18 16:06:34.405+08 \N
+b7ee52a4-a271-47f3-9841-d18e30bdea8c company 深圳市科润美科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.439+08 2017-08-18 16:06:34.439+08 \N
+0bebcb27-2c41-494a-81dd-39f393253d51 company 北京精波仪表有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.459+08 2017-08-18 16:06:34.459+08 \N
+3271fc87-bfce-4c92-891a-009ab472d9b6 company 北京东方中恒科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.479+08 2017-08-18 16:06:34.479+08 \N
+2d1ef0ee-bd03-457f-832c-d67f15969760 company 深圳市中天智能系统有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.499+08 2017-08-18 16:06:34.499+08 \N
+49040276-7c98-4926-a147-101d2f94d10f company 河北先河环保科技股份有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.521+08 2017-08-18 16:06:34.521+08 \N
+bbdd3430-f35d-433c-aa6a-125e3f7c6a96 company 无锡北微传感科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.542+08 2017-08-18 16:06:34.542+08 \N
+ae3bcb8b-9c57-4128-924f-9a275a36cd2c company 无锡慧联信息科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.561+08 2017-08-18 16:06:34.561+08 \N
+a173ddc0-1e88-4dee-9db5-64f1a56d3d7e company 福州创思万维信息技术有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.58+08 2017-08-18 16:06:34.58+08 \N
+a19971cb-11f5-4f93-b19b-31b415328e8d company 北京纳微时代科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.598+08 2017-08-18 16:06:34.598+08 \N
+b8f113f9-c8ac-4e2b-840b-5ccec1c619f8 company 江西飞尚科技有限公司 authenticated \N \N 江西南昌 \N \N \N 2017-08-18 16:06:33.479+08 2017-08-18 16:06:33.479+08 \N
+51fecf4f-f97b-442b-b93d-548f6779d778 company 上海直川电子科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.065+08 2017-08-18 16:06:34.065+08 \N
+4e10d71a-e70a-4706-a390-dd655d6de5d7 company 厦门才茂通信科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.36+08 2017-08-18 16:06:33.36+08 \N
+c201dec9-ee9f-43e3-8a6d-fac13848903a company 厦门四信通信科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.393+08 2017-08-18 16:06:33.393+08 \N
+18b5b1ad-a0bf-4cdc-b7d0-6fbffbe8ee10 company 深圳市宏电技术股份有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.43+08 2017-08-18 16:06:33.43+08 \N
+2508c024-0274-4bcb-9724-307454d86f15 company 上海牧坤电子科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.458+08 2017-08-18 16:06:33.458+08 \N
+44cd7a8a-4b58-46aa-99b0-b2a8c4cbc155 company 工讯科技(深圳)有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.504+08 2017-08-18 16:06:33.504+08 \N
+5bec08df-d7c4-446a-b553-f86f5fefad0c company 北京亚飞安智科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.529+08 2017-08-18 16:06:33.529+08 \N
+e934c3dd-e1dc-4780-8537-af7418b0191b company 基康仪器股份有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.551+08 2017-08-18 16:06:33.551+08 \N
+0651a900-2b10-4df3-baf2-819a42b03318 company 麦克传感器股份有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.583+08 2017-08-18 16:06:33.583+08 \N
+e1b6ea8c-209a-41ee-8004-cfe22f48b457 company 北京九纯健科技发展有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.597+08 2017-08-18 16:06:33.597+08 \N
+5924784c-765f-447b-9c9e-92ae33cd1913 company 长沙金码高科技实业有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.612+08 2017-08-18 16:06:33.612+08 \N
+a878573a-9380-4d40-90bd-dbdeb97ad11c company 温州市华云仪器设备有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.626+08 2017-08-18 16:06:33.626+08 \N
+f6c6ddf5-52d1-4cdf-bdd0-2e58d8fcfc92 company 上海云扬智能控制科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.639+08 2017-08-18 16:06:33.639+08 \N
+16b55bb7-a58d-411e-80e9-38c8d785954a company 上海盖勒克国际贸易有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.65+08 2017-08-18 16:06:33.65+08 \N
+597603cf-2fd1-4e5d-b535-8e8f6bc242f7 company 北京飞拓信达激光技术有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.671+08 2017-08-18 16:06:33.671+08 \N
+9bd7d189-dacc-4ba3-8445-5fa87f2873e0 company 济南博林自动化设备有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.682+08 2017-08-18 16:06:33.682+08 \N
+40dcc623-c0b2-4823-81bd-8f7fdec905d4 company 深圳市信为科技发展有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.692+08 2017-08-18 16:06:33.692+08 \N
+bc67a9df-a427-4051-95d7-b54efea7766c company 深圳市欧赛龙科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.704+08 2017-08-18 16:06:33.704+08 \N
+d6a0231c-f055-4bf5-bc49-7c4773e5f61c company 北京替帝西交通科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.715+08 2017-08-18 16:06:33.715+08 \N
+61f38983-bdda-4437-985a-02394d20641d company 上海江晶翔电子有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.727+08 2017-08-18 16:06:33.727+08 \N
+57b4c545-7976-4681-968d-e0453edd5bf4 company 武汉中科能慧科技发展有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.739+08 2017-08-18 16:06:33.739+08 \N
+5f162854-ac8a-485e-b133-7898778767ab company 承德热河克罗尼仪表有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.755+08 2017-08-18 16:06:33.755+08 \N
+66fbe8a1-4978-41c4-af06-1c29a36bbb60 company 深圳市华利奥电子有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.771+08 2017-08-18 16:06:33.771+08 \N
+5dedacd5-4765-4533-ab53-e2eac621c1bd company 上海清淼光电科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.782+08 2017-08-18 16:06:33.782+08 \N
+d809418f-b16f-4758-b06d-0b21958adabd company 重庆唐天科技有限责任公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.795+08 2017-08-18 16:06:33.795+08 \N
+a7d7f0b9-8951-4bed-861a-93cef592a5aa company 长沙亿拓土木工程监测仪器有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:33.81+08 2017-08-18 16:06:33.81+08 \N
+d0004fed-dd3d-4acb-876b-c02ebbec2acf company 盐城恒嘉物联网科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.042+08 2017-08-18 16:06:34.042+08 \N
+d2df94ff-b34f-4293-9e42-2aa3c4778165 company 南京基泰土木仪器有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.076+08 2017-08-18 16:06:34.076+08 \N
+662edc70-ff87-42d3-a0cc-98454dd2f4a4 company 上海司南卫星导航技术有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.085+08 2017-08-18 16:06:34.085+08 \N
+f11d3b57-8208-4ef8-a621-9b9d616c5d3f company 上海华测导航技术股份有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.096+08 2017-08-18 16:06:34.096+08 \N
+0835a353-d5ec-4c0c-a7e1-8ac61ab4d6e1 company 上海天贺自动化仪表有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.145+08 2017-08-18 16:06:34.145+08 \N
+8f2ff4e4-f7df-4a7a-b09f-e7ec668c18e5 company 西安北瑞三元仪表有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.164+08 2017-08-18 16:06:34.164+08 \N
+ea8005eb-cc8f-41c9-a3a7-803163ca7ccf company 上海辉格科技发展有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.187+08 2017-08-18 16:06:34.187+08 \N
+ff64ccf7-eb3c-4ba1-b2d3-4d5a223ab36a company 西安中铭电气有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.617+08 2017-08-18 16:06:34.617+08 \N
+91ef2ab5-a5b5-4bd6-87a5-aeef97c9afe7 company 上海结成实业有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.638+08 2017-08-18 16:06:34.638+08 \N
+a9a2299b-675b-41f1-82aa-9147ffac9622 company 北京华鉴科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.662+08 2017-08-18 16:06:34.662+08 \N
+4406e759-2502-4571-9177-01db4a2e1f5a company 深圳市日业电气有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.68+08 2017-08-18 16:06:34.68+08 \N
+23142dd5-3edf-4339-8607-8a96e009aa0c company 烟台凯米斯仪器有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.71+08 2017-08-18 16:06:34.71+08 \N
+ea7a17ff-a805-45a2-bcfe-e0e98c2119b0 company 深圳简测科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.728+08 2017-08-18 16:06:34.728+08 \N
+42c89a2a-4dc9-4720-a345-69c86a26ec6f company 上海誉煊电子技术有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.753+08 2017-08-18 16:06:34.753+08 \N
+6026a87e-0107-4ba0-80f5-e32562ec9400 company 上海科旗仪表有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.777+08 2017-08-18 16:06:34.777+08 \N
+b555b986-881c-437f-b081-5a7bc4d6ecde company 上海物联网有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.799+08 2017-08-18 16:06:34.799+08 \N
+2c8a71a2-958c-49f9-9c59-623939771197 company 北京迪辉科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.112+08 2017-08-18 16:06:34.112+08 \N
+90f4ac6e-870e-4869-a61b-d285fa63ec47 company 上海华测创时测控科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.155+08 2017-08-18 16:06:34.155+08 \N
+e4ad4af0-594b-4780-9633-7d4af9960778 company 中铁大桥科学研究院有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.176+08 2017-08-18 16:06:34.176+08 \N
+67cd2ae1-aae0-4518-8af3-1b37fee1dd02 company 北京通联四方科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.198+08 2017-08-18 16:06:34.198+08 \N
+7b34295c-0a97-4d1f-a594-526a19f0dd4f company 上海拜安传感技术有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.218+08 2017-08-18 16:06:34.218+08 \N
+97370f6e-e6f1-4942-a31e-3dd91efb0328 company 杭州迈煌科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.245+08 2017-08-18 16:06:34.245+08 \N
+19f6eb6b-28e5-432d-816e-cb049d4a2ca4 company 武汉承拓电子科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.273+08 2017-08-18 16:06:34.273+08 \N
+aab4a420-d895-4f4f-ab7e-8c68dc31062c company 邯郸开发区清易电子科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.295+08 2017-08-18 16:06:34.295+08 \N
+eea220f4-553b-43c2-97af-2aa64208defd company 上海域信测控技术有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.324+08 2017-08-18 16:06:34.324+08 \N
+3cd17789-bbb4-438f-b522-cf15bf7c19db company 石家庄和嘉科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.348+08 2017-08-18 16:06:34.348+08 \N
+61fdbcf6-b829-431e-844d-6e4d083c43ff company 河南库瑞克电子科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.371+08 2017-08-18 16:06:34.371+08 \N
+ff3552f7-ef00-476c-8005-ce560577c50d company 上海萨法尔信息工程有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.393+08 2017-08-18 16:06:34.393+08 \N
+7fcc4e1c-9279-4bea-88c8-b83462d7df18 company 北京欧柏泰克测控系统有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.416+08 2017-08-18 16:06:34.416+08 \N
+14220722-dbfb-4db3-a0dc-a9c695401532 company 上海麦伦仪表有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.449+08 2017-08-18 16:06:34.449+08 \N
+c7fceb96-46a2-4a1f-8a54-a12c63b1537e company 北京慧博新锐科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.469+08 2017-08-18 16:06:34.469+08 \N
+677dc4e9-9428-45de-adac-46dbd0750922 company 郑州易度传感技术有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.49+08 2017-08-18 16:06:34.49+08 \N
+b7338b55-ea09-4b84-8059-d6c89d7c3f14 company 广州起重机械有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.509+08 2017-08-18 16:06:34.509+08 \N
+fdbf6c14-95c7-4621-a23a-f07c52417c0a company 深圳市七七星宇科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.532+08 2017-08-18 16:06:34.532+08 \N
+40cd1440-bf75-4b45-ab28-12fe07358090 company 无锡迈科传感科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.551+08 2017-08-18 16:06:34.551+08 \N
+582de198-f984-4ab4-a766-a303f78f4da9 company 上海集睿信息科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.57+08 2017-08-18 16:06:34.57+08 \N
+73261520-9aa8-4309-b9c2-db6715f13937 company 南通中天精密仪器有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.589+08 2017-08-18 16:06:34.589+08 \N
+5c47345b-e0e6-46f6-84d1-32c86a7e9231 company 天津北斗星创科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.607+08 2017-08-18 16:06:34.607+08 \N
+3c15bf43-e5b6-4cef-80ec-4e1e420af1a0 company 武汉富源飞科电子科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.627+08 2017-08-18 16:06:34.627+08 \N
+36f3c479-2166-4dda-8ab0-c4b93aec0736 company 天津拓安科技发展有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.653+08 2017-08-18 16:06:34.653+08 \N
+688d030e-ccfa-4014-b7d1-8490867789a3 company 上海沃陆电气有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.671+08 2017-08-18 16:06:34.671+08 \N
+caf66f13-f035-4cb2-a701-92e7ff358715 company 北京智如泉科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.7+08 2017-08-18 16:06:34.7+08 \N
+23700276-659e-42cc-8c79-f50823e1b13f company 湖南湘银河传感科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.719+08 2017-08-18 16:06:34.719+08 \N
+9daaab37-8e1a-4efa-8ac7-3c93da295a90 company 锐研智华电子科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.739+08 2017-08-18 16:06:34.739+08 \N
+ac66a802-e2ee-48cc-8a9e-b3e35ca07d67 company 北京星仪传感器技术有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.765+08 2017-08-18 16:06:34.765+08 \N
+f9ea1efe-1070-47ef-b688-d31113d2c511 company 北京阿尔泰科技发展有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.787+08 2017-08-18 16:06:34.787+08 \N
+abbf041d-172c-4086-93b4-31bb0e2e83a5 company 徕卡测量系统有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:06:34.811+08 2017-08-18 16:06:34.811+08 \N
+74c38e2c-4971-46b3-bee6-8a51f116213a company 厦门才茂通信科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.143+08 2017-08-18 16:25:24.143+08 \N
+005e2048-b7e8-4f7c-847f-e9918a66414d company 工讯科技(深圳)有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.374+08 2017-08-18 16:25:24.374+08 \N
+68250dfb-d57f-4895-9658-245ee80b2495 company 上海辉格科技发展有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.169+08 2017-08-18 16:25:25.169+08 \N
+e3ca47a2-cd34-4d73-8fd7-18ce41c58460 company 北京九纯健科技发展有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.471+08 2017-08-18 16:25:24.471+08 \N
+941c9c57-031c-4e4c-9a2b-5e544e387274 company 长沙金码高科技实业有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.484+08 2017-08-18 16:25:24.484+08 \N
+8764ca24-be3e-4633-8dae-a8a100346a7c company 温州市华云仪器设备有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.497+08 2017-08-18 16:25:24.497+08 \N
+7ee73cad-16da-4534-8e6b-c7d587c2597f company 上海盖勒克国际贸易有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.524+08 2017-08-18 16:25:24.524+08 \N
+11834ff5-6bb0-446f-91d0-1e2e48153c90 company 北京飞拓信达激光技术有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.538+08 2017-08-18 16:25:24.538+08 \N
+82be60e4-7d72-48fd-91ab-c8616819b103 company 济南博林自动化设备有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.663+08 2017-08-18 16:25:24.663+08 \N
+3a8d9a71-ba47-4661-add4-fef01940e609 company 北京聚道合盛科技有限公司 ******** http://images.theiota.cn/upload/companycert/upload_162216c2f3c1d37035e9440da5ca454c.png authenticated iota 130243196710242345 http://images.theiota.cn/upload/companycert/upload_36a30b5acf2c5b56024325d95355cc62.png http://images.theiota.cn/upload/companycert/upload_4c7d24f5daa22391c9ddba5f51bd17c5.png \N \N \N \N \N \N 2017-10-30 18:17:53.222+08 2017-10-30 18:30:00.974+08 \N
+db67f5e1-713c-48f9-82f3-c2e24093b97f company 浙江富马仪表有限公司 4234324 http://images.theiota.cn/upload/companycert/10f6acf8-d569-4bb6-8f23-f97b1664d309/c1ce7c48-81c6-493f-816c-07e9d1248ced/companyCertification.png authenticated 周周 321123233433434535 http://images.theiota.cn/upload/companycert/10f6acf8-d569-4bb6-8f23-f97b1664d309/896c0661-3ec5-4080-a702-8b3173900b34/companyCertification.png http://images.theiota.cn/upload/companycert/10f6acf8-d569-4bb6-8f23-f97b1664d309/56f9ef4a-9edb-4704-99d4-ddc71cdd2d6a/companyCertification.png \N \N \N \N \N 2017-12-11 16:20:17.803+08 2017-12-11 16:24:36.638+08 \N
+25d5aac3-c08f-4378-9244-570cf8a1cb3e company 千寻位置网络有限公司 43423423434 http://images.theiota.cn/upload/companycert/a971c084-cc83-4e41-80f6-c8de9df9b9d6/000f724d-3af7-4359-9288-f723683c5fb9/companyCertification.png authenticated 阿兰 321123233433434535 http://images.theiota.cn/upload/companycert/a971c084-cc83-4e41-80f6-c8de9df9b9d6/1f9b3312-13d6-47e9-92c0-896d00192768/companyCertification.png http://images.theiota.cn/upload/companycert/a971c084-cc83-4e41-80f6-c8de9df9b9d6/8b5b7dd2-d6c9-4709-ae0b-c518d2373640/companyCertification.png \N \N \N \N \N 2017-12-15 10:08:41.914+08 2017-12-15 11:20:55.391+08 \N
+c19672de-3563-44f5-9189-5ac688227e4c company 北京昆仑海岸传感技术有限公司 123 http://images.theiota.cn/upload/companycert/352a31c7-1e5e-4c52-85f6-2fa692d0fda9/ca0c7e80-a462-4936-87be-f4166e90a3b1/companyCertification.png authenticated 小小 320882199702021212 http://images.theiota.cn/upload/companycert/352a31c7-1e5e-4c52-85f6-2fa692d0fda9/02264413-4731-4cd1-bbd5-03507d3bf7b8/companyCertification.png http://images.theiota.cn/upload/companycert/352a31c7-1e5e-4c52-85f6-2fa692d0fda9/32cb124d-569e-4991-940c-e9630f0058e5/companyCertification.png \N \N \N \N \N \N 2017-12-20 16:24:23.296+08 2017-12-20 16:27:59.173+08 \N
+05ef6403-9f87-4092-8b09-be1cfc2f9369 company 锦州阳光气象科技有限公司 1234 http://images.theiota.cn/upload/companycert/e54b85b0-151e-4b74-b360-a8ae65addd46/fc93f80e-1aff-4452-9b7d-5894f2527674/companyCertification.png authenticated 武庚 320882199205051212 http://images.theiota.cn/upload/companycert/e54b85b0-151e-4b74-b360-a8ae65addd46/d1437fd8-f6bd-4624-9328-79b78b98d145/companyCertification.png http://images.theiota.cn/upload/companycert/e54b85b0-151e-4b74-b360-a8ae65addd46/c09fe854-16d8-409d-908b-1002e2907f0e/companyCertification.png \N \N \N \N \N \N 2018-03-30 09:34:24.331+08 2018-03-30 09:52:16.718+08 \N
+87ffcc1e-399b-4921-b6c6-068de960a5ed company 北京天海科科技发展有限公司 123 http://images.theiota.cn/upload/companycert/upload_326d578ec8d4167537eaecf620806ae8.png authenticated 阿兰 321123233433434535 http://images.theiota.cn/upload/companycert/upload_d3dc8375346e9538cea7f6b7001752ad.png http://images.theiota.cn/upload/companycert/upload_2a47d3455da122ec76dbd93f2fd38ecf.png \N \N \N \N \N \N 2017-11-07 09:40:28.432+08 2017-11-07 09:40:52.318+08 \N
+2978b1a9-8de8-4566-838d-04f7916573c1 company 深圳市智翔宇仪器设备有限公司 1234 http://images.theiota.cn/upload/companycert/d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe/39be084d-1c43-4d6b-b2ae-debb3e9e195a/companyCertification.png authenticated 吴先生 320885156312120212 http://images.theiota.cn/upload/companycert/d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe/8dc386b9-9acf-45d1-ad8f-21f5e4de1e5f/companyCertification.png http://images.theiota.cn/upload/companycert/d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe/1b22cd6b-c0a7-443f-8c48-84faebea261d/companyCertification.png \N \N \N \N \N \N 2018-03-30 10:39:47.967+08 2018-03-30 10:45:50.112+08 \N
+6069ac3a-b89b-49a3-9472-d2a4a093a479 company 北京赛斯尔自控工程有限公司 123 http://images.theiota.cn/upload/companycert/42ed9887-912b-4ce0-b062-3f3e0c22fa74/3ce0855d-f131-4251-8ee3-49a38b603f19/companyCertification.png authenticated 小红 320882199912341234 http://images.theiota.cn/upload/companycert/42ed9887-912b-4ce0-b062-3f3e0c22fa74/9bbb239b-4c20-4d9b-ae6b-d861a1f2f3be/companyCertification.png http://images.theiota.cn/upload/companycert/42ed9887-912b-4ce0-b062-3f3e0c22fa74/fa15717c-3310-4516-a869-4b5969295af9/companyCertification.png \N \N \N \N \N \N 2017-12-20 16:26:22.364+08 2017-12-20 16:28:09.788+08 \N
+e65ebdf0-aaff-4a5f-97a6-c69a5cafea9d company 杭州美仪自动化有限公司 123 http://images.theiota.cn/upload/companycert/7e6cf67e-f12a-4d9f-addf-b551148dc2b4/b9ccddb1-dff9-40b8-b34b-b3af8c145ac7/companyCertification.png authenticated 阿兰 321123233433434535 http://images.theiota.cn/upload/companycert/7e6cf67e-f12a-4d9f-addf-b551148dc2b4/2976ea4b-0f56-4962-80ef-17b44c83674e/companyCertification.png http://images.theiota.cn/upload/companycert/7e6cf67e-f12a-4d9f-addf-b551148dc2b4/f96f79ef-916c-4280-b186-8a8707f1ce59/companyCertification.png \N \N \N \N \N \N 2018-01-17 11:40:21.415+08 2018-01-17 11:41:14.714+08 \N
+13492746-695e-43ee-955f-56eda5ce677c company 杭州美仪自动化有限公司 3423423 http://images.theiota.cn/upload/companycert/095856ee-a9d4-4d58-9ecc-8e832e82ab8b/61b273fa-fc5d-45b8-bcee-d2d53374d3c3/companyCertification.png authenticated 阿兰 321123233433434535 http://images.theiota.cn/upload/companycert/095856ee-a9d4-4d58-9ecc-8e832e82ab8b/685bbed8-a02b-44b0-948d-c1aed3053d9f/companyCertification.png http://images.theiota.cn/upload/companycert/095856ee-a9d4-4d58-9ecc-8e832e82ab8b/ca2b854f-28bb-486e-81a8-d9aeb0fed633/companyCertification.png \N \N \N \N \N \N 2018-01-05 16:01:19.073+08 2018-01-05 16:02:16.25+08 \N
+07d25988-cf05-433e-bcb0-eba6042997f1 company 济南仁硕电子科技有限公司 1234 http://images.theiota.cn/upload/companycert/943913b0-23c7-43a9-a1d6-a7e59ed719d0/dc257aa2-3526-4f5e-8a7e-2ead9144b0bb/companyCertification.png authenticated 阿毛 123456789876543 http://images.theiota.cn/upload/companycert/943913b0-23c7-43a9-a1d6-a7e59ed719d0/4edd1e2b-a9b1-4aad-bb53-276e3fb71b0e/companyCertification.png http://images.theiota.cn/upload/companycert/943913b0-23c7-43a9-a1d6-a7e59ed719d0/3412796c-a7b0-4907-8387-cd208101d397/companyCertification.png \N \N \N \N \N \N 2018-01-09 11:03:50.638+08 2018-01-23 17:36:28.453+08 \N
+e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5 company 武汉华岩电子有限责任公司 123456 http://images.theiota.cn/upload/companycert/06551138-8f00-4269-9a6d-4e5fa26c71cc/1ca95e50-3aa4-4290-a093-1db85a57096f/companyCertification.png authenticated 雷横 320882199504061218 http://images.theiota.cn/upload/companycert/06551138-8f00-4269-9a6d-4e5fa26c71cc/9cfca89a-42bc-49e9-9ec6-07b54173ea04/companyCertification.png http://images.theiota.cn/upload/companycert/06551138-8f00-4269-9a6d-4e5fa26c71cc/4f61c5e0-ac21-49c3-82c6-dd8e2ce0154b/companyCertification.png \N \N \N \N \N \N 2018-11-26 16:10:20.288+08 2018-11-26 16:10:28.378+08 \N
+12f8ac3d-c8bf-4da6-aebd-cacf92e0a702 company 深圳市赛昂斯科技有限公司 1234 http://images.theiota.cn/upload/companycert/86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307/cc3b0855-2328-4295-b90c-7efdd28a57ee/companyCertification.png authenticated 李晨 320882198605281212 http://images.theiota.cn/upload/companycert/86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307/22a06076-f2b1-4322-a02a-aed51a87f226/companyCertification.png http://images.theiota.cn/upload/companycert/86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307/efc7b3ba-95c9-4813-8a42-cce187f34488/companyCertification.png \N \N \N \N \N \N 2018-01-08 15:03:23.626+08 2018-01-08 15:04:32.064+08 \N
+0a638ade-14a7-4e31-b102-953f910425a8 company 上海隼星传感技术有限公司 3423423 http://images.theiota.cn/upload/companycert/8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12/0c4500a5-d922-47d6-8c1b-23053b26ea39/companyCertification.png authenticated alan 321123233433434535 http://images.theiota.cn/upload/companycert/8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12/6cf6e953-45be-4957-b099-5b16c27d8050/companyCertification.png http://images.theiota.cn/upload/companycert/8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12/d0186c9e-9bce-4f16-903d-ae35409dbab8/companyCertification.png \N \N \N \N \N \N 2018-02-11 17:11:36.732+08 2018-02-12 09:15:22.308+08 \N
+f26ae825-10ca-4d2d-a941-201f9f663eea company 西安兴航测控科技有限公司 123 http://images.theiota.cn/upload/companycert/upload_3ec47a4f1e54468a63071014908694f2.png authenticated 阿兰 123321199876665555 http://images.theiota.cn/upload/companycert/upload_403e7ac67245fda4a930695acd6d111f.png http://images.theiota.cn/upload/companycert/upload_32b57ae88a4226edf187beab27f86711.png \N \N \N \N \N \N 2017-11-22 10:50:32.098+08 2017-11-22 10:52:55.603+08 \N
+ef596a09-07a9-4dad-b937-090093da864b company 北京光电所 345367564 http://images.theiota.cn/upload/companycert/upload_e13146657977af60596fffc42c87c493.png authenticated 周良飞 321123233433434535 http://images.theiota.cn/upload/companycert/upload_fd979129d8e0c5c913a906d474cfd2d4.png http://images.theiota.cn/upload/companycert/upload_4d7677cdca7c34dceca558979b53c9c5.png \N \N \N \N \N \N 2017-12-05 13:32:30.497+08 2017-12-05 13:33:01.855+08 \N
+60ac81b6-ad47-402a-8527-9d9e815b886a company 绵阳市湘蜀电子科技有限公司 1234 http://images.theiota.cn/upload/companycert/dbfb6012-f2a3-4e35-b214-d014eba687e4/708f1c1c-ccc9-44ab-8ca0-cd9b8895c025/companyCertification.png authenticated 阿郎 320882199905281214 http://images.theiota.cn/upload/companycert/dbfb6012-f2a3-4e35-b214-d014eba687e4/30b6d12a-a1a4-43ab-96e3-d29d5eccf86d/companyCertification.png http://images.theiota.cn/upload/companycert/dbfb6012-f2a3-4e35-b214-d014eba687e4/b687270d-42e0-46e4-87a2-b243ea84eec4/companyCertification.png \N \N \N \N \N \N 2017-12-21 10:14:16.847+08 2017-12-21 10:19:00.993+08 \N
+327eb1d2-7493-4c0b-b277-338edd768927 company 北京宝力马传感技术有限公司 123 http://images.theiota.cn/upload/companycert/59924975-bf9a-49ef-8bb4-239e5eb716f4/62226c82-20cc-40f2-a4eb-039ac6b16627/companyCertification.png authenticated 孙小红 320882199905271234 http://images.theiota.cn/upload/companycert/59924975-bf9a-49ef-8bb4-239e5eb716f4/563c205b-51ca-44fc-8e8f-82738e03c67c/companyCertification.png http://images.theiota.cn/upload/companycert/59924975-bf9a-49ef-8bb4-239e5eb716f4/932adc0b-b1fe-42fa-b65f-af5237a4abc7/companyCertification.png \N \N \N \N \N \N 2017-12-20 16:17:43.397+08 2017-12-20 16:27:48.329+08 \N
+e4ffaaab-d158-4e82-8c50-074c731d0f8d company 北京杰成物联科技有限公司 3423423 http://images.theiota.cn/upload/companycert/299decdb-5902-4e11-afcb-9e08926723fc/329eb249-b0c8-4572-9df3-8e00e8e60539/companyCertification.png authenticated alan 321123233433434535 http://images.theiota.cn/upload/companycert/299decdb-5902-4e11-afcb-9e08926723fc/83359851-73de-45bc-a68d-859b9637079f/companyCertification.png http://images.theiota.cn/upload/companycert/299decdb-5902-4e11-afcb-9e08926723fc/e190c33b-7afc-41f6-9533-e065d21e81bc/companyCertification.png \N \N \N \N \N \N 2017-12-25 10:57:13.144+08 2017-12-25 11:08:17.194+08 \N
+c787fe3f-81b1-443e-bcc2-f95da51465cd company 深圳市永阳新能源科技有限公司 1234 http://images.theiota.cn/upload/companycert/414bf334-23bf-4e6d-aa00-230325261d81/8bfdef01-46e5-4600-9fbf-7b9de46ecf9b/companyCertification.png authenticated 阿毛 320882155512141214 http://images.theiota.cn/upload/companycert/414bf334-23bf-4e6d-aa00-230325261d81/7fbbd7fb-85cd-4df2-9a26-7fd53e693c6b/companyCertification.png http://images.theiota.cn/upload/companycert/414bf334-23bf-4e6d-aa00-230325261d81/4b32eea9-27b7-4d6b-8bf3-cf9c6d761737/companyCertification.png \N \N \N \N \N \N 2017-12-21 16:46:31.416+08 2017-12-21 16:48:10.405+08 \N
+28384069-379b-427a-8293-4558a6fdff7c company 厦门四信通信科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.183+08 2017-08-18 16:25:24.183+08 \N
+bb73aebb-0d8d-49b2-80d9-b2d909e304a1 company 深圳市宏电技术股份有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.227+08 2017-08-18 16:25:24.227+08 \N
+2f5601db-b76e-4770-9af3-4f1825703d4d company 上海牧坤电子科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.296+08 2017-08-18 16:25:24.296+08 \N
+4f26e7d9-d058-4d09-86dd-8264282fa0b0 company 北京亚飞安智科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.424+08 2017-08-18 16:25:24.424+08 \N
+b28ef84f-ad39-4657-8465-7968e542bdcd company 基康仪器股份有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.443+08 2017-08-18 16:25:24.443+08 \N
+06a180f1-88d0-4ef8-800f-c9175f55215d company 麦克传感器股份有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.457+08 2017-08-18 16:25:24.457+08 \N
+6ef6a382-2a9c-46f8-8c9a-4660c726bfdd company 深圳市信为科技发展有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.776+08 2017-08-18 16:25:24.776+08 \N
+d07843e8-b696-4b7d-87ad-502f03b59ec0 company 深圳市欧赛龙科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.799+08 2017-08-18 16:25:24.799+08 \N
+de8b006d-85f7-4436-9c98-4d3e741fcc91 company 北京替帝西交通科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.817+08 2017-08-18 16:25:24.817+08 \N
+6c43ca35-bfee-404e-afa5-8cc4ca7fb92f company 上海江晶翔电子有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.842+08 2017-08-18 16:25:24.842+08 \N
+66a47769-cf2c-4708-bde1-48eae1617ade company 武汉中科能慧科技发展有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.86+08 2017-08-18 16:25:24.86+08 \N
+901a8f49-757a-40c6-9c1a-81c0ee8dc70b company 承德热河克罗尼仪表有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.879+08 2017-08-18 16:25:24.879+08 \N
+047fe32b-391b-4e00-85df-440d3b30a0e0 company 深圳市华利奥电子有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.896+08 2017-08-18 16:25:24.896+08 \N
+945dc90b-2494-4242-ac50-3068ac34de42 company 上海清淼光电科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.916+08 2017-08-18 16:25:24.916+08 \N
+b1288075-7ee2-4ec7-a49f-efe9848eb49a company 重庆唐天科技有限责任公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.935+08 2017-08-18 16:25:24.935+08 \N
+f212e468-a42c-4a63-bdc8-93e5e9540fde company 长沙亿拓土木工程监测仪器有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.966+08 2017-08-18 16:25:24.966+08 \N
+17f054b5-a0bc-417d-98cc-cd33881d5f86 company 盐城恒嘉物联网科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.984+08 2017-08-18 16:25:24.984+08 \N
+19a42196-a096-4d6a-84d1-67d7c3030605 company 北京瑞芬星通科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.002+08 2017-08-18 16:25:25.002+08 \N
+bdebe97d-391f-4db6-bc26-a7f3fd6ac130 company 上海直川电子科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.017+08 2017-08-18 16:25:25.017+08 \N
+a4ea8d4c-a663-48d2-a163-47085a402235 company 南京基泰土木仪器有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.033+08 2017-08-18 16:25:25.033+08 \N
+a53ff2c9-fe4b-40b2-9384-d238618466ce company 上海司南卫星导航技术有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.045+08 2017-08-18 16:25:25.045+08 \N
+b7991d25-58bc-44e2-a4aa-ba40bd21e595 company 上海华测导航技术股份有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.059+08 2017-08-18 16:25:25.059+08 \N
+0c9fca00-5fd3-43ef-8264-09333066ff13 company 北京迪辉科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.085+08 2017-08-18 16:25:25.085+08 \N
+abe1595a-5e65-4b76-9b3b-b77ea9626c16 company 上海天贺自动化仪表有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.106+08 2017-08-18 16:25:25.106+08 \N
+7c4ecd66-e051-42e2-87c7-2df59811c9e3 company 上海华测创时测控科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.12+08 2017-08-18 16:25:25.12+08 \N
+4c1e5bf3-2258-4e8b-b1ed-49f91b4d2907 company 西安北瑞三元仪表有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.13+08 2017-08-18 16:25:25.13+08 \N
+7f8a3e61-0645-4b79-b376-92677a049f62 company 中铁大桥科学研究院有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.158+08 2017-08-18 16:25:25.158+08 \N
+4f3d93c3-5322-4bef-b358-e98b1589874d company 南京葛南实业有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.193+08 2017-08-18 16:25:25.193+08 \N
+3b5bd980-85d1-47f2-a11f-ddb81a776f3c company 成都中科测控有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.213+08 2017-08-18 16:25:25.213+08 \N
+3b9938e0-6bf0-47c9-b7af-c61b5a7bdea4 company 西安精准测控有限责任公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.242+08 2017-08-18 16:25:25.242+08 \N
+ddff4e34-2418-447f-b236-f346fd2beffe company 邯郸市清胜电子科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.264+08 2017-08-18 16:25:25.264+08 \N
+a1132fa4-352a-4b5e-b0e9-d2d4d0df290e company 北京长英新业数码科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.284+08 2017-08-18 16:25:25.284+08 \N
+a74b3366-a96b-4ac5-90c6-e07851706a72 company 上海蒙朗物联网科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.306+08 2017-08-18 16:25:25.306+08 \N
+3f3e4806-08db-428f-9b63-a18f64c64081 company 北京岩信科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.326+08 2017-08-18 16:25:25.326+08 \N
+90ff2cb3-6e2f-4da8-a666-8c59808d2b1b company 浙江苍南仪表集团有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.345+08 2017-08-18 16:25:25.345+08 \N
+f2991a3d-1f9e-4b1b-a5c5-0b1996702fd8 company 广州乐享电子有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.368+08 2017-08-18 16:25:25.368+08 \N
+2bbaee41-1980-459c-8053-311857717ee9 company 深圳市科润美科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.392+08 2017-08-18 16:25:25.392+08 \N
+45db210e-6095-414d-8ba7-4cf87583d293 company 北京精波仪表有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.42+08 2017-08-18 16:25:25.42+08 \N
+d333c854-fe3b-4c2a-80d1-6ad0360dcbd6 company 北京东方中恒科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.443+08 2017-08-18 16:25:25.443+08 \N
+1ca185e6-113a-46a4-94d2-e3e967323ae9 company 深圳市中天智能系统有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.464+08 2017-08-18 16:25:25.464+08 \N
+6fa763bc-933a-4b3d-a15f-a9cb6dba7d3d company 河北先河环保科技股份有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.487+08 2017-08-18 16:25:25.487+08 \N
+4cd4dbf8-c29d-429f-8128-50313b373292 company 无锡慧联信息科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.531+08 2017-08-18 16:25:25.531+08 \N
+a788cc98-2cdf-451a-ad80-d370c161e448 company 福州创思万维信息技术有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.558+08 2017-08-18 16:25:25.558+08 \N
+485c9ff0-3616-4b61-a3a0-eab1e99472dd company 北京纳微时代科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.577+08 2017-08-18 16:25:25.577+08 \N
+db1d3a8b-3193-4d57-a9c2-eda69102115c company 西安中铭电气有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.6+08 2017-08-18 16:25:25.6+08 \N
+d16cdfd2-9b57-4e88-9c4d-462a066f8642 company 上海结成实业有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.623+08 2017-08-18 16:25:25.623+08 \N
+6960c889-9031-47f4-98f7-e80cfe3ecdb4 company 北京华鉴科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.648+08 2017-08-18 16:25:25.648+08 \N
+17b1bddd-ba2c-4741-bc3e-47dabe99edfa company 深圳市日业电气有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.668+08 2017-08-18 16:25:25.668+08 \N
+857d131f-a356-42fe-b772-25f1efbc8f56 company 烟台凯米斯仪器有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.685+08 2017-08-18 16:25:25.685+08 \N
+b9950ec7-4c09-467c-a9dd-092f2a6d2b28 company 深圳简测科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.704+08 2017-08-18 16:25:25.704+08 \N
+7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc company 上海誉煊电子技术有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.728+08 2017-08-18 16:25:25.728+08 \N
+2709d56e-f4c3-49c5-8dc4-ad41a2c31275 company 上海科旗仪表有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.751+08 2017-08-18 16:25:25.751+08 \N
+bbfeac1a-1c70-45d1-9180-d63be822d7f2 company 上海物联网有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.769+08 2017-08-18 16:25:25.769+08 \N
+ff833378-60d7-444b-84a6-b01df07bd336 company 北京通联四方科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.18+08 2017-08-18 16:25:25.18+08 \N
+2169a008-9684-4625-b3ba-389b70c17ad1 company 上海拜安传感技术有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.203+08 2017-08-18 16:25:25.203+08 \N
+03230a76-0bdd-4049-bbfc-e3dee78c4b6e company 杭州迈煌科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.227+08 2017-08-18 16:25:25.227+08 \N
+5f2040a8-8da6-4f79-bcb6-9b2480beea45 company 武汉承拓电子科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.253+08 2017-08-18 16:25:25.253+08 \N
+7d219f94-2da6-4390-9a2f-828bdaf2519e company 邯郸开发区清易电子科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.274+08 2017-08-18 16:25:25.274+08 \N
+f7eb4ae6-ce4d-4013-ab1e-5a49e96718eb company 上海域信测控技术有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.296+08 2017-08-18 16:25:25.296+08 \N
+c51f8de0-c442-4529-bbae-fe7df077f84e company 石家庄和嘉科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.316+08 2017-08-18 16:25:25.316+08 \N
+ff2281cb-1d19-4ad7-a65d-f9f7f8ffe664 company 河南库瑞克电子科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.336+08 2017-08-18 16:25:25.336+08 \N
+ffc05365-a153-47ec-a7d9-d13bd3cf93d1 company 上海萨法尔信息工程有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.355+08 2017-08-18 16:25:25.355+08 \N
+f755e725-5da2-4b87-b08d-d65d8baf825c company 北京欧柏泰克测控系统有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.38+08 2017-08-18 16:25:25.38+08 \N
+27a4762a-7072-4c30-b8a6-0a95b580755c company 上海麦伦仪表有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.406+08 2017-08-18 16:25:25.406+08 \N
+99a06fa1-997b-4272-ab56-540c76cebfb4 company 北京慧博新锐科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.431+08 2017-08-18 16:25:25.431+08 \N
+d49373e3-515f-40be-b462-0eba8793f89c company 郑州易度传感技术有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.454+08 2017-08-18 16:25:25.454+08 \N
+52b36a13-6a6b-47f0-83db-afdc362967ff company 广州起重机械有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.475+08 2017-08-18 16:25:25.475+08 \N
+5937e415-c322-42e4-bddb-3c509b8ac82e company 深圳市七七星宇科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.496+08 2017-08-18 16:25:25.496+08 \N
+80c18b02-bea5-4076-b124-30d8f067dc78 company 无锡迈科传感科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.52+08 2017-08-18 16:25:25.52+08 \N
+17f1fbd7-aae7-4114-8811-c4d078b171b3 company 上海集睿信息科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.544+08 2017-08-18 16:25:25.544+08 \N
+dd99d0cd-27ad-42ff-869e-e00c51c5c62a company 南通中天精密仪器有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.568+08 2017-08-18 16:25:25.568+08 \N
+a5f361c3-c76c-40ff-9912-28ab7f6721e2 company 天津北斗星创科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.588+08 2017-08-18 16:25:25.588+08 \N
+43808b4c-bc54-40c6-91ad-520570c3c0da company 武汉富源飞科电子科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.611+08 2017-08-18 16:25:25.611+08 \N
+7807e21f-ca6b-4288-bd9e-55308d129f30 company 天津拓安科技发展有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.639+08 2017-08-18 16:25:25.639+08 \N
+f37c3e11-9862-4da5-b127-35b5efe162dd company 上海沃陆电气有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.658+08 2017-08-18 16:25:25.658+08 \N
+6327bc29-4615-4eda-aa87-f534d179265f company 北京智如泉科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.677+08 2017-08-18 16:25:25.677+08 \N
+1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa company 湖南湘银河传感科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.695+08 2017-08-18 16:25:25.695+08 \N
+82af10d4-f6f0-4e09-84ce-7053d4b42940 company 锐研智华电子科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.716+08 2017-08-18 16:25:25.716+08 \N
+4e512f12-08de-4514-8da9-73b4b6c587f3 company 北京星仪传感器技术有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.74+08 2017-08-18 16:25:25.74+08 \N
+f6f7a405-3c13-4d2b-b6e4-0f071c43ba84 company 北京阿尔泰科技发展有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.76+08 2017-08-18 16:25:25.76+08 \N
+cde1d1ef-6811-4c85-b365-c8dc7be87675 company 徕卡测量系统有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.781+08 2017-08-18 16:25:25.781+08 \N
+509f878b-22a0-470a-81c5-b802c4b1e5b5 company 天津佳建科技有限公司 1234512345 http://images.theiota.cn/upload/companycert/abc9e573-4426-4eee-b858-7d309e181f99/dccc9941-ad73-4d39-a115-d0a7340a0c1c/companyCertification.png authenticated 阿兰 123412341234123412 http://images.theiota.cn/upload/companycert/abc9e573-4426-4eee-b858-7d309e181f99/962b36fe-559a-4ee1-8703-2a13a2b13a6b/companyCertification.png http://images.theiota.cn/upload/companycert/abc9e573-4426-4eee-b858-7d309e181f99/fa0648e8-cac0-4431-9b00-ef2386936a24/companyCertification.png 公司名称\n \N \N \N \N \N 2018-03-13 23:56:56.5+08 2018-03-29 17:58:04.975+08 \N
+2249ba53-148c-4f52-a223-5baccdb2b356 company 武汉宇佳科技有限公司 1234 http://images.theiota.cn/upload/companycert/83c80841-82ec-434a-835a-9907f3b225a5/5857fa1c-41c2-4de9-8bc7-d6dd7c2b38ad/companyCertification.png authenticated 刘邦 123456789123456 http://images.theiota.cn/upload/companycert/83c80841-82ec-434a-835a-9907f3b225a5/16d1bb8b-8920-4e77-a3d3-c7b5680985a7/companyCertification.png http://images.theiota.cn/upload/companycert/83c80841-82ec-434a-835a-9907f3b225a5/f3e54040-5e11-4ff1-88cf-cb08af11da87/companyCertification.png \N \N \N \N \N \N 2018-01-09 14:03:01.061+08 2018-03-29 17:58:32.475+08 \N
+a7daadbf-4efe-4bfd-a3a7-d162263502dd company 江苏哲勤科技有限公司 1234 http://images.theiota.cn/upload/companycert/ca665fe1-0d75-4314-9b41-9eb59507d940/0c4be8af-76d5-4e2e-ba2e-ee3eae746291/companyCertification.png authenticated 阿考 123456789789456 http://images.theiota.cn/upload/companycert/ca665fe1-0d75-4314-9b41-9eb59507d940/d2b97154-debb-410e-b89f-a56dcf15db6a/companyCertification.png http://images.theiota.cn/upload/companycert/ca665fe1-0d75-4314-9b41-9eb59507d940/94f77500-626e-4aeb-a071-9088de0e5270/companyCertification.png \N \N \N \N \N \N 2018-01-09 11:28:10.643+08 2018-03-29 17:58:17.561+08 \N
+82e912a1-10ca-41af-ad56-79cc088ef375 company 山东仁科测控技术有限公司 3423423 http://images.theiota.cn/upload/companycert/4a675a7d-e35c-478e-b8f1-ae01437c8281/6331f5f9-6fc1-4226-aea3-8cdf18fc1c5b/companyCertification.png authenticated 阿兰 321123233433434535 http://images.theiota.cn/upload/companycert/4a675a7d-e35c-478e-b8f1-ae01437c8281/010a4e65-3eba-4dfa-86e3-7bd163017a53/companyCertification.png http://images.theiota.cn/upload/companycert/4a675a7d-e35c-478e-b8f1-ae01437c8281/a5d6b547-2467-4cea-bf29-55ee6a29f634/companyCertification.png \N \N \N \N \N \N 2018-01-18 17:30:18.216+08 2018-01-18 17:31:02.466+08 \N
+eea84701-c78b-4752-96fa-75ea7dd649d4 company 河北路凯铁路有限公司 1234 http://images.theiota.cn/upload/companycert/eb23c67c-17aa-4909-8bba-8119130ed7f8/06f75941-2d0a-43ce-a0be-620bf9669207/companyCertification.png authenticated 戴立忍 320882199209091 http://images.theiota.cn/upload/companycert/eb23c67c-17aa-4909-8bba-8119130ed7f8/3df33417-2c3e-4f73-8c82-84dd3435dd1d/companyCertification.png http://images.theiota.cn/upload/companycert/eb23c67c-17aa-4909-8bba-8119130ed7f8/80d84d37-ca1c-4626-9efc-e221dadc86ad/companyCertification.png \N \N \N \N \N \N 2018-03-09 19:05:05.822+08 2018-03-11 16:01:16.308+08 \N
+bf8bba7f-0800-4785-ae97-c4698b720c38 company 山东仁科测控技术有限公司 123 http://images.theiota.cn/upload/companycert/c526123b-28bf-4a01-9c10-c630b8d0dec4/2c968f02-874a-4c6a-ba1d-dfce3aead59e/companyCertification.png authenticated 阿兰 321123233433434535 http://images.theiota.cn/upload/companycert/c526123b-28bf-4a01-9c10-c630b8d0dec4/c7d92b85-958c-4584-87c9-fe54fb3ed64e/companyCertification.png http://images.theiota.cn/upload/companycert/c526123b-28bf-4a01-9c10-c630b8d0dec4/ff32755e-340f-486d-a368-ad48068094ff/companyCertification.png \N \N \N \N \N \N 2018-01-23 09:33:43.215+08 2018-01-23 17:33:51.179+08 \N
+dec876d4-09b0-4aa0-b12b-bcb3ba8f295a company 上海搜博实业有限公司 3423423 http://images.theiota.cn/upload/companycert/76ba35a6-d733-40eb-b290-6538f9e9c77f/d0b4b950-fae1-4e07-8054-34c931f25b25/companyCertification.png authenticated alan 321123233433434535 http://images.theiota.cn/upload/companycert/76ba35a6-d733-40eb-b290-6538f9e9c77f/e3f83078-2d5f-4915-952b-0c8a04d8bb4a/companyCertification.png http://images.theiota.cn/upload/companycert/76ba35a6-d733-40eb-b290-6538f9e9c77f/3c841999-9743-494b-b869-dc66c6def236/companyCertification.png \N \N \N \N \N \N 2018-01-30 17:39:41.548+08 2018-01-30 17:40:17.979+08 \N
+c016deb0-edb2-4cb3-93ad-3150c8db04ac company 杭州房安网络科技有限公司 3423423 http://images.theiota.cn/upload/companycert/0be11993-6e55-415e-b770-792f29f98f9f/650917c7-52f7-4b7a-8913-c1441002e6bc/companyCertification.png authenticated alan 321123233433434535 http://images.theiota.cn/upload/companycert/0be11993-6e55-415e-b770-792f29f98f9f/a2c8faf1-f24c-4e5b-8342-d080f08872d4/companyCertification.png http://images.theiota.cn/upload/companycert/0be11993-6e55-415e-b770-792f29f98f9f/96e28651-c1ad-4234-a731-741373893539/companyCertification.png \N \N \N \N \N \N 2018-05-29 16:19:02.278+08 2018-05-29 16:29:18.134+08 \N
+db1e176b-c3c8-47b1-808b-7e33570add81 company 上海融频电子科技有限公司 3423423 http://images.theiota.cn/upload/companycert/ef70d798-67c0-4772-9639-3d9b805f5941/97a38b08-6085-4d36-af1a-87b953daf6a3/companyCertification.png authenticated alan 321123233433434535 http://images.theiota.cn/upload/companycert/ef70d798-67c0-4772-9639-3d9b805f5941/7296fc34-89d9-4303-a4b6-7ecdf8426cc4/companyCertification.png http://images.theiota.cn/upload/companycert/ef70d798-67c0-4772-9639-3d9b805f5941/71a2a527-ea87-412d-95c2-cc5a0f3e99ee/companyCertification.png \N \N \N \N \N \N 2018-02-05 14:52:12.138+08 2018-02-05 14:55:30.902+08 \N
+6e220b49-d187-44a7-b1bb-6e494763021d company 武汉云传通测科技有限公司 1234 http://images.theiota.cn/upload/companycert/b8127c53-f372-4ef5-bad6-8520cde9e94f/80cbd0b9-c850-4a11-abff-02883e720f3c/companyCertification.png authenticated 云传通 320882199505051212 http://images.theiota.cn/upload/companycert/b8127c53-f372-4ef5-bad6-8520cde9e94f/bfb240b6-575b-4d00-92f7-f4987078241d/companyCertification.png http://images.theiota.cn/upload/companycert/b8127c53-f372-4ef5-bad6-8520cde9e94f/70519581-dc77-40a4-b53a-3922c3bd59d2/companyCertification.png \N \N \N \N \N \N 2018-02-09 13:56:41.749+08 2018-03-29 17:58:23.261+08 \N
+003a11c4-85db-4f09-a55a-02b1144840ad company 溧阳市超源仪器厂 3423423 http://images.theiota.cn/upload/companycert/5b0d5739-36a1-4e88-a838-7ac252171dc6/3ad5d1fb-b570-4a68-b475-1c3504c6e6fa/companyCertification.png authenticated alan 321123233433434535 http://images.theiota.cn/upload/companycert/5b0d5739-36a1-4e88-a838-7ac252171dc6/c44a43b9-8ced-4a64-be1c-099beb8a298d/companyCertification.png http://images.theiota.cn/upload/companycert/5b0d5739-36a1-4e88-a838-7ac252171dc6/3d5e9db1-1823-447f-9e94-673a8b575015/companyCertification.png \N \N \N \N \N \N 2018-02-11 17:17:25.981+08 2018-02-12 09:15:32.196+08 \N
+cfe75451-de08-456e-a858-16ed82f63574 company 深圳市米朗科技有限公司 3423423 http://images.theiota.cn/upload/companycert/e39ef519-bfb9-4a75-9cd1-fb18e5e29559/fbd15f32-e257-4d67-bc13-bd796f439969/companyCertification.png authenticated alan 321123233433434535 http://images.theiota.cn/upload/companycert/e39ef519-bfb9-4a75-9cd1-fb18e5e29559/6e21a3ac-67c8-4b31-930b-dfee790f11a3/companyCertification.png http://images.theiota.cn/upload/companycert/e39ef519-bfb9-4a75-9cd1-fb18e5e29559/8ffd9454-ded7-4c42-a72b-89298107a1ef/companyCertification.png \N \N \N \N \N \N 2018-02-28 16:03:31.764+08 2018-02-28 16:11:36.198+08 \N
+71110a7c-82f3-4a69-ba1f-179018d3fc1b company 国电南京自动化股份有限公司 1234 http://images.theiota.cn/upload/companycert/6d7887f9-566b-4a52-a1d6-cba8c439173a/214cbc42-27a4-4135-81c0-4f462032db94/companyCertification.png authenticated 武庚 320882199802141218 http://images.theiota.cn/upload/companycert/6d7887f9-566b-4a52-a1d6-cba8c439173a/17a17efc-291f-42ab-bef3-44fe84154dae/companyCertification.png http://images.theiota.cn/upload/companycert/6d7887f9-566b-4a52-a1d6-cba8c439173a/e617e412-45b5-43db-a4cb-1521c4c84641/companyCertification.png \N \N \N \N \N \N 2018-03-14 14:46:59.807+08 2018-03-14 16:26:24.84+08 \N
+69ff6b39-2d8c-443e-939d-f6c087588d22 company 常州金土木工程仪器有限公司 1234 http://images.theiota.cn/upload/companycert/d5fa5193-b237-4a60-b82a-165c033e2596/d381fb1e-f0d5-4bab-8997-009522477110/companyCertification.png authenticated 李雷 320882199505051213 http://images.theiota.cn/upload/companycert/d5fa5193-b237-4a60-b82a-165c033e2596/2e77a3fc-b82b-4146-8ab3-664b66291388/companyCertification.png http://images.theiota.cn/upload/companycert/d5fa5193-b237-4a60-b82a-165c033e2596/9fab7b97-bbeb-4da4-954c-a9c9cf86ed7e/companyCertification.png \N \N \N \N \N \N 2018-03-14 14:53:56.313+08 2018-03-14 16:26:17.335+08 \N
+cfd55b15-fe53-4c95-87a6-daddbc4fb638 company 北京安信卓越信息科技有限公司 00 http://images.theiota.cn/upload/companycert/upload_8f051e6e3a41032e158a915b21a8663f.png authenticated 00 000000000000000 http://images.theiota.cn/upload/companycert/upload_f70d32ba7bd3d9d8eb65d65a81eb73ad.png http://images.theiota.cn/upload/companycert/upload_1130bfc838b88d4980241a30aba0775c.png \N \N \N \N \N 2017-08-16 22:24:26.461+08 2018-01-08 14:53:51.804+08 \N
+48556475-af79-4323-bab2-38274bcb8563 company 深圳市莫尼特仪器设备有限公司 1234 http://images.theiota.cn/upload/companycert/ddbc4ad1-b448-4bed-82b8-f33fb5264f35/412ceb38-1019-4395-b49a-3efb9edcba42/companyCertification.png authenticated 刘平 320882012312341215 http://images.theiota.cn/upload/companycert/ddbc4ad1-b448-4bed-82b8-f33fb5264f35/869828fb-8997-42d5-a1b2-44cf9199cb21/companyCertification.png http://images.theiota.cn/upload/companycert/ddbc4ad1-b448-4bed-82b8-f33fb5264f35/d52873eb-04c2-49aa-b224-1a8449825ff4/companyCertification.png \N \N \N \N \N \N 2018-04-04 16:42:36.103+08 2018-04-04 16:51:02.232+08 \N
+78f556c0-d435-40e7-aece-08b652e146f0 company 常州比天智能科技有限公司 1.0 http://images.theiota.cn/upload/companycert/cb9f2b84-b356-4721-b75e-da2a575068f4/0a2589a9-299c-4def-b1d2-d5e4db844115/companyCertification.png authenticated 徐宁 320882199504061218 http://images.theiota.cn/upload/companycert/cb9f2b84-b356-4721-b75e-da2a575068f4/eb37d273-a98b-4b74-addb-d66defc085e0/companyCertification.png http://images.theiota.cn/upload/companycert/cb9f2b84-b356-4721-b75e-da2a575068f4/306b1133-f9cb-4d91-ae83-3d288f567377/companyCertification.png \N \N \N \N \N \N 2018-09-20 17:27:49.235+08 2018-09-20 17:31:08.57+08 \N
+753cecef-e0f0-47e7-8336-915f8d09bc74 company 北京中电华劳科技有限公司 123 http://images.theiota.cn/upload/companycert/d3ab1979-3439-47ba-aa98-82b61a9d6260/96cec3c1-8bfe-4985-96fd-f8bb4b77a0bd/companyCertification.png authenticated 阿兰 321123233433434535 http://images.theiota.cn/upload/companycert/d3ab1979-3439-47ba-aa98-82b61a9d6260/7ffdc81c-150a-4330-926a-78844880d6ff/companyCertification.png http://images.theiota.cn/upload/companycert/d3ab1979-3439-47ba-aa98-82b61a9d6260/fe019e55-2a0c-4964-bc11-7544c1035692/companyCertification.png \N \N \N \N \N \N 2018-05-07 11:26:59.831+08 2018-05-07 11:30:40.801+08 \N
+090ff792-d47f-4b12-b31e-71402175f9b0 company 北京飞超风速控制仪器有限责任公司 1234 http://images.theiota.cn/upload/companycert/1a285b38-8605-48ec-ba06-16f5942bee81/91373917-9bf6-4118-8ffe-1be6a05a7e9b/companyCertification.png authenticated 范冰冰 123456789123456789 http://images.theiota.cn/upload/companycert/1a285b38-8605-48ec-ba06-16f5942bee81/14f6dd25-319e-4bac-bd17-b045852f5ca5/companyCertification.png http://images.theiota.cn/upload/companycert/1a285b38-8605-48ec-ba06-16f5942bee81/c3e1bb8d-49fb-4b86-87b1-1eb4b9b72e03/companyCertification.png \N \N \N \N \N \N 2018-05-28 11:49:14.974+08 2018-05-28 15:04:37.176+08 \N
+461483be-7de4-49d4-86a6-fa6ac432d4fd company tester 1234 http://images.theiota.cn/upload/companycert/1b2d8739-627e-4b7d-9480-3eee6e9396fe/9edacf5f-3af4-4e9a-a19b-6bb5aa79e402/companyCertification.png authenticated 阿兰 320882012312341215 http://images.theiota.cn/upload/companycert/1b2d8739-627e-4b7d-9480-3eee6e9396fe/349eb3a6-4cf0-4954-aa6b-84e97e3baad4/companyCertification.png http://images.theiota.cn/upload/companycert/1b2d8739-627e-4b7d-9480-3eee6e9396fe/90e03791-0e28-4a6a-8c2e-07dfe6db30b4/companyCertification.png \N \N \N \N \N \N 2018-07-26 15:12:33.519+08 2018-07-26 15:12:52.045+08 \N
+8dbfb926-2572-4bb5-bab4-96aba1ea8589 company iota 111111 http://images.theiota.cn/upload/companycert/f16833ab-a4a4-45f5-9b39-ad2c66e488f6/37f11dca-6aa0-49b9-9ee0-26b17b45b4dc/companyCertification.png authenticated w 111111111111111 http://images.theiota.cn/upload/companycert/f16833ab-a4a4-45f5-9b39-ad2c66e488f6/fb6037e4-935b-473c-80fe-3a0ec09fe1c6/companyCertification.png http://images.theiota.cn/upload/companycert/f16833ab-a4a4-45f5-9b39-ad2c66e488f6/61f61431-4712-4dbc-b83f-7741af8ecf54/companyCertification.png \N 王 南京 13813084239 wang.liang@theiota.cn 测试 2017-12-06 18:54:44.567+08 2019-04-26 16:23:57.821+08 \N
+b2cdf84b-2f7e-4c47-9132-a579b62a3926 company 新会康宇测控仪器仪表工程有限公司 1234 http://images.theiota.cn/upload/companycert/ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c/a61460bc-ce5e-45a3-84a3-e86b8eedf977/companyCertification.png authenticated 宋江 320882012312341215 http://images.theiota.cn/upload/companycert/ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c/177f6c88-e64d-4912-9a10-04a032e4bc2a/companyCertification.png http://images.theiota.cn/upload/companycert/ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c/09fd6c23-de1e-443e-bf41-18cc57b88b84/companyCertification.png \N \N \N \N \N \N 2018-05-29 11:33:40.443+08 2018-05-29 11:34:00.256+08 \N
+e4d74414-07db-4754-a1fd-efb51f257864 company 长沙市三智电子科技有限公司 1234 http://images.theiota.cn/upload/companycert/abe57a42-14ab-448b-b96f-14875e86ca40/06519fab-30b2-405d-86d5-771a5908d8c1/companyCertification.png authenticated 卢俊义 320882012312341215 http://images.theiota.cn/upload/companycert/abe57a42-14ab-448b-b96f-14875e86ca40/dd16020e-fdb3-40c0-bc7f-02707251ce70/companyCertification.png http://images.theiota.cn/upload/companycert/abe57a42-14ab-448b-b96f-14875e86ca40/84347de2-99e8-4a7f-9918-1a0460976ec6/companyCertification.png \N \N \N \N \N \N 2018-05-30 11:12:50.624+08 2018-05-30 11:39:45.64+08 \N
+631adf16-ff91-4949-8e6f-e13680319751 company 湖南三智盈科传感器技术有限公司 123456 http://images.theiota.cn/upload/companycert/fa5611e2-d726-4e8f-a22c-632ef7ab7148/ad21bcad-c870-4987-997c-2c6692e8c10b/companyCertification.png authenticated 阮小二 320882199504061218 http://images.theiota.cn/upload/companycert/fa5611e2-d726-4e8f-a22c-632ef7ab7148/67dbd942-ae2f-4db9-96c6-0cb53c8bcea3/companyCertification.png http://images.theiota.cn/upload/companycert/fa5611e2-d726-4e8f-a22c-632ef7ab7148/18e09046-5901-4339-96d7-0d600ef1b53c/companyCertification.png \N \N \N \N \N \N 2018-12-18 10:06:21.57+08 2018-12-18 10:06:29.727+08 \N
+9f0e639f-37d3-4661-bf82-808a6291df48 company 上海协堡电子有限公司 1234 http://images.theiota.cn/upload/companycert/9ea59fd2-e55b-4853-a447-0911d3b8b8dd/725990fe-cea5-47a3-8040-e72372416046/companyCertification.png authenticated 吴用 320882012312341215 http://images.theiota.cn/upload/companycert/9ea59fd2-e55b-4853-a447-0911d3b8b8dd/56ec3331-a8bd-41b9-a8ae-7bab0467ac3d/companyCertification.png http://images.theiota.cn/upload/companycert/9ea59fd2-e55b-4853-a447-0911d3b8b8dd/d9d15834-b3aa-455c-ba28-31a44ef94555/companyCertification.png \N \N \N \N \N \N 2018-06-07 14:02:24.669+08 2018-06-07 14:02:33.96+08 \N
+6a7e732d-908a-424d-a55c-6fe5b860e266 company 北京齐开科技有限公司 1234 http://images.theiota.cn/upload/companycert/36b70d6d-c974-4742-9257-b555027d36cd/c82b03a2-07ad-4a76-88c3-9b18352ef1d3/companyCertification.png authenticated 林冲 320882199502141218 http://images.theiota.cn/upload/companycert/36b70d6d-c974-4742-9257-b555027d36cd/958b6e30-1581-4cdd-876e-0e68f61eec5e/companyCertification.png http://images.theiota.cn/upload/companycert/36b70d6d-c974-4742-9257-b555027d36cd/a5e75b59-80ce-4fcc-a73e-54b18a686624/companyCertification.png \N \N \N \N \N \N 2018-06-11 14:57:48.815+08 2018-06-11 14:57:58.139+08 \N
+ef17730e-9732-4152-9aae-d996160e4d7e company 建岩(上海)信息科技有限公司 12345 http://images.theiota.cn/upload/companycert/49441bc3-dbb9-4880-b691-70b9c5644a9d/8b03f4a8-d6fc-41d4-a6b9-2aa7af193bad/companyCertification.png authenticated 公孙胜 320882199605061215 http://images.theiota.cn/upload/companycert/49441bc3-dbb9-4880-b691-70b9c5644a9d/35b141b6-2657-4f79-bcd6-0a845e568220/companyCertification.png http://images.theiota.cn/upload/companycert/49441bc3-dbb9-4880-b691-70b9c5644a9d/f23a41da-4a3f-4dea-a5ee-e595bd295007/companyCertification.png \N \N \N \N \N \N 2018-06-21 09:36:49.815+08 2018-06-21 09:37:20.612+08 \N
+40f627af-dfd1-4cd2-9921-110d47d4461c company 湖南聚创路桥科技有限公司 12345 http://images.theiota.cn/upload/companycert/a8df2f4a-3e2f-49f5-b1e2-b866493ade49/33b8cb78-a81b-4542-8d61-e6797cba4713/companyCertification.png authenticated 秦明 320882012312341215 http://images.theiota.cn/upload/companycert/a8df2f4a-3e2f-49f5-b1e2-b866493ade49/aa6198b8-c3df-4690-8a25-1b55ef7f8df4/companyCertification.png http://images.theiota.cn/upload/companycert/a8df2f4a-3e2f-49f5-b1e2-b866493ade49/6bc9d356-ae8a-4556-b6c8-9a7cc06afb88/companyCertification.png \N \N \N \N \N \N 2018-06-19 09:31:11.721+08 2018-06-19 09:31:22.006+08 \N
+b2f45a02-4a2f-49df-87e8-8e9b68269ebd company 无锡北微传感科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:25.509+08 2017-08-18 16:25:25.509+08 \N
+c97bb430-7074-4413-a0d1-020b7af60aa7 company 湖南国瑞仪器有限公司 2212 http://images.theiota.cn/upload/companycert/8e1adf17-9018-4c44-bc9b-ff70bcca029a/bfe31f7f-8224-41ca-a798-abb97107aa58/companyCertification.png authenticated 国瑞 320882199502141218 http://images.theiota.cn/upload/companycert/8e1adf17-9018-4c44-bc9b-ff70bcca029a/d6d96d8b-25ba-47bf-9778-1fdd584253ca/companyCertification.png http://images.theiota.cn/upload/companycert/8e1adf17-9018-4c44-bc9b-ff70bcca029a/3eb2a409-ac6c-432b-a225-6645776a0b43/companyCertification.png \N \N 湖南 \N \N \N 2017-12-20 14:14:40.855+08 2017-12-20 14:17:29.636+08 \N
+c41ab05c-aa3d-4d60-9dc3-217323b6e9c7 company 上海云扬智能控制科技有限公司 authenticated \N \N \N \N \N \N 2017-08-18 16:25:24.51+08 2017-08-18 16:25:24.51+08 \N
+97778045-09eb-4db5-8ee0-8f2607e6248f company 深圳迪振恩科技有限公司 1234 http://images.theiota.cn/upload/companycert/594398cf-af7f-421b-9b42-1cca38c79620/bf4793d2-44ba-4654-8eb0-fe95b4d3b826/companyCertification.png authenticated 呼延灼 320882012312341215 http://images.theiota.cn/upload/companycert/594398cf-af7f-421b-9b42-1cca38c79620/b6778772-f866-4fed-a90e-f2a9188bb8a5/companyCertification.png http://images.theiota.cn/upload/companycert/594398cf-af7f-421b-9b42-1cca38c79620/7708f724-28aa-4d37-896e-cf79b51f2d3f/companyCertification.png \N \N \N \N \N \N 2018-06-20 10:14:02.556+08 2018-06-20 10:15:18.13+08 \N
+d63e78b1-32cf-4aca-a896-5c83ebce7b8d company 北京华康科技有限公司 1234 http://images.theiota.cn/upload/companycert/7e13f613-ffd9-4865-800a-0ca768ab2a28/0337d7a4-84c8-49c0-acbf-cb711d53a58a/companyCertification.png authenticated 花荣 320882012312341215 http://images.theiota.cn/upload/companycert/7e13f613-ffd9-4865-800a-0ca768ab2a28/b212e584-e1ff-438c-acd1-0a4eb5c13ae2/companyCertification.png http://images.theiota.cn/upload/companycert/7e13f613-ffd9-4865-800a-0ca768ab2a28/d2d332d6-8051-4fbb-8360-d407140cb770/companyCertification.png \N \N \N \N \N \N 2018-06-22 16:21:26.589+08 2018-06-22 16:24:24.476+08 \N
+a4159319-ff56-456e-9cd0-1b2bc9ec6ede company 上海盛迪传感技术有限公司 1234 http://images.theiota.cn/upload/companycert/6708aba6-65f9-4ec3-bfc2-227628154ff3/3f347a59-746f-4b30-8b6d-e355bf8a04f7/companyCertification.png authenticated 关胜 320882012312341215 http://images.theiota.cn/upload/companycert/6708aba6-65f9-4ec3-bfc2-227628154ff3/a724abbd-8035-4657-8d40-60af37f07bd1/companyCertification.png http://images.theiota.cn/upload/companycert/6708aba6-65f9-4ec3-bfc2-227628154ff3/6067e8dc-866f-4bcb-8835-0ead0683c585/companyCertification.png \N \N \N \N \N \N 2018-06-25 15:16:38.678+08 2018-06-25 15:16:47.899+08 \N
+05617d93-ff63-40e6-8d83-86ec25e6728c company 溧阳市伟涵仪器厂 1234 http://images.theiota.cn/upload/companycert/dd7cacfc-a0f8-4d19-86b1-db4c80849dd5/4923c34e-7eba-4812-b495-7a2a493c55b6/companyCertification.png authenticated 柴进 320882012312341215 http://images.theiota.cn/upload/companycert/dd7cacfc-a0f8-4d19-86b1-db4c80849dd5/ae4bddc5-db2e-4331-beea-52715d619cfd/companyCertification.png http://images.theiota.cn/upload/companycert/dd7cacfc-a0f8-4d19-86b1-db4c80849dd5/117c514c-d5a3-42fa-ac10-2dc7af887512/companyCertification.png \N \N \N \N \N \N 2018-06-27 13:54:17.144+08 2018-06-27 13:54:24.158+08 \N
+7d8a96cd-b3b1-43a6-8ad4-69466c74da0b company 南京铭奥仪器设备有限公司 3423423 http://images.theiota.cn/upload/companycert/e09d681f-e39b-4915-8e87-af54bdd0e815/836b3ec4-620d-4fd9-850d-8cacf9e80392/companyCertification.png authenticated alan 321123233433434535 http://images.theiota.cn/upload/companycert/e09d681f-e39b-4915-8e87-af54bdd0e815/eae14e61-9a32-4ef8-a75d-679a264f01d0/companyCertification.png http://images.theiota.cn/upload/companycert/e09d681f-e39b-4915-8e87-af54bdd0e815/327708e2-aee9-4828-9e89-ed9e223fca59/companyCertification.png \N \N \N \N \N \N 2018-07-13 16:29:06.193+08 2018-07-13 16:29:42.817+08 \N
+1c4462b3-04af-43ab-8050-febf9bbc0438 company 北京中胜仪表科技有限公司 1234 http://images.theiota.cn/upload/companycert/78592d42-1fcc-45bb-8a00-8e246186e702/44f014dd-8766-4da2-baaa-a7def79420db/companyCertification.png authenticated 李应 320882012312341215 http://images.theiota.cn/upload/companycert/78592d42-1fcc-45bb-8a00-8e246186e702/f6da1342-55fa-41a9-8648-ef15b41eff96/companyCertification.png http://images.theiota.cn/upload/companycert/78592d42-1fcc-45bb-8a00-8e246186e702/bb70a156-fac0-49d2-b751-b06bf66864c1/companyCertification.png \N \N \N \N \N \N 2018-07-13 16:21:43.218+08 2018-07-13 16:22:18.543+08 \N
+10c8af19-c2ad-4e25-be28-63f5a359a41c company 佛山市昊胜传感物联科技有限公司 1234 http://images.theiota.cn/upload/companycert/01fdd48b-2211-42be-9e66-b2a76c84567d/ece8746c-5c52-486f-8857-e2db399897cf/companyCertification.png authenticated 朱仝 320882199502141218 http://images.theiota.cn/upload/companycert/01fdd48b-2211-42be-9e66-b2a76c84567d/407813ef-acea-41fa-9549-33484d64e666/companyCertification.png http://images.theiota.cn/upload/companycert/01fdd48b-2211-42be-9e66-b2a76c84567d/98a65083-2f47-49b8-bc64-09f0c40e2753/companyCertification.png \N \N \N \N \N \N 2018-07-25 16:45:21.028+08 2018-07-25 16:45:30.508+08 \N
+8c9b2c27-6501-4173-8be0-3d4b34466fe4 company 北京数泰科技有限公司 1234 http://images.theiota.cn/upload/companycert/0fdb9c51-6450-4966-9f8f-4a0af9a70f00/36505ef8-dcba-431a-aa67-9ab52f1ded76/companyCertification.png authenticated 鲁智深 320882199502141218 http://images.theiota.cn/upload/companycert/0fdb9c51-6450-4966-9f8f-4a0af9a70f00/84b0c380-db21-446b-9324-b02b84389222/companyCertification.png http://images.theiota.cn/upload/companycert/0fdb9c51-6450-4966-9f8f-4a0af9a70f00/624c478b-ffa1-4569-bf6b-a63e2010898f/companyCertification.png \N \N \N \N \N \N 2018-08-02 17:09:21.928+08 2018-08-02 17:11:42.417+08 \N
+77ef3aea-fa21-4060-b06d-7dbca886f953 company 陕西恒瑞测控系统有限公司 3423423 http://images.theiota.cn/upload/companycert/df6e436e-e4a6-4b25-b1c7-175209753c0f/7228e9f5-5825-40a3-90a5-56e247746995/companyCertification.png authenticated alan 321123233433434535 http://images.theiota.cn/upload/companycert/df6e436e-e4a6-4b25-b1c7-175209753c0f/12f8ef8a-4e03-422d-9c0d-bb65812d53a4/companyCertification.png http://images.theiota.cn/upload/companycert/df6e436e-e4a6-4b25-b1c7-175209753c0f/66915856-5d41-47c5-bf85-a2694b3ef472/companyCertification.png \N \N \N \N \N \N 2018-08-10 17:16:35.643+08 2018-08-10 17:16:53.047+08 \N
+08c10c0f-5ba8-4cc6-851f-4eec44349187 company 深圳市建恒测控股份有限公司 1234 http://images.theiota.cn/upload/companycert/762b9963-18af-4789-afed-88df57b2a556/6b5e21ca-8ea5-4e95-bfd1-ada79a911b2f/companyCertification.png authenticated 武松 320882012312341215 http://images.theiota.cn/upload/companycert/762b9963-18af-4789-afed-88df57b2a556/c97499a0-c460-448e-b021-a04b9e70e4ac/companyCertification.png http://images.theiota.cn/upload/companycert/762b9963-18af-4789-afed-88df57b2a556/e20a8c6e-2d5f-4b69-a9f2-838ab44cc882/companyCertification.png \N \N \N \N \N \N 2018-08-13 14:26:16.784+08 2018-08-13 14:26:35.749+08 \N
+ffca7b99-078d-433f-b30f-26ca16279162 company 湖南长宜物联科技有限公司 1234 http://images.theiota.cn/upload/companycert/0235a43b-3369-4639-a955-05e9962ecc4c/b865cd93-9918-41b3-bed2-48fd1fe24e65/companyCertification.png authenticated 董平 320882199504061218 http://images.theiota.cn/upload/companycert/0235a43b-3369-4639-a955-05e9962ecc4c/1d74964c-a16f-4db0-b3eb-d3ce1880530d/companyCertification.png http://images.theiota.cn/upload/companycert/0235a43b-3369-4639-a955-05e9962ecc4c/4faa9576-94dd-49b5-96d6-cb4cacc4b5ce/companyCertification.png \N \N \N \N \N \N 2018-08-17 10:53:35.401+08 2018-08-17 16:25:43.478+08 \N
+61c4abf0-191f-4d2c-a609-8aef64771259 company 北京首瑞大同测控技术有限公司 123456 http://images.theiota.cn/upload/companycert/958dfd18-eea0-480e-98bc-edc9da0e0ae3/eaafb7e6-d498-4369-beeb-dcacf5aac49d/companyCertification.png authenticated 张清 320882199504061218 http://images.theiota.cn/upload/companycert/958dfd18-eea0-480e-98bc-edc9da0e0ae3/c94c012f-082d-43f8-b9e9-0d7e6c23ba13/companyCertification.png http://images.theiota.cn/upload/companycert/958dfd18-eea0-480e-98bc-edc9da0e0ae3/1d68a541-4cbe-4250-9eaf-b8c62876b841/companyCertification.png \N \N \N \N \N \N 2018-09-05 09:54:00.533+08 2018-09-05 09:54:39.842+08 \N
+980b9cf9-1073-4a81-b777-0d29ac8237d2 company 厦门忻德信息技术有限公司 123456 http://images.theiota.cn/upload/companycert/2cdb8012-dd24-4570-b6c0-be0c8ca414f5/95a2de70-84d2-4e5a-8401-cf98e02472c5/companyCertification.png authenticated 杨志 320882199504061218 http://images.theiota.cn/upload/companycert/2cdb8012-dd24-4570-b6c0-be0c8ca414f5/f1f03e5b-40fe-4167-8b03-a01f7f470f5a/companyCertification.png http://images.theiota.cn/upload/companycert/2cdb8012-dd24-4570-b6c0-be0c8ca414f5/67e42fb7-9284-4082-b32d-aa1c22b0d193/companyCertification.png \N \N \N \N \N \N 2018-09-10 09:30:26.752+08 2018-09-10 09:31:09.891+08 \N
+0958879e-b6da-457a-80ba-b12d983a9214 company 南京盛亿科技有限公司 123456 http://images.theiota.cn/upload/companycert/d8e712e8-731c-45ed-8c90-23504d4e7daf/2574abb2-8188-441a-a8c1-21c05b630887/companyCertification.png authenticated 杨志 320882199504061218 http://images.theiota.cn/upload/companycert/d8e712e8-731c-45ed-8c90-23504d4e7daf/52d8f861-2d6b-4494-ab7d-30ea068893c0/companyCertification.png http://images.theiota.cn/upload/companycert/d8e712e8-731c-45ed-8c90-23504d4e7daf/2ac49965-a6aa-441a-8f81-22982c0c5210/companyCertification.png \N \N \N \N \N \N 2018-09-13 16:57:11.546+08 2018-09-13 16:58:11.938+08 \N
+a7dfdb07-3943-4248-bb47-f4c2678c660a company 南京丹陌电子科技有限公司 123456 http://images.theiota.cn/upload/companycert/e39dc160-cb1a-4c7d-b432-ecfe08799164/c3875d8a-4598-4ea0-937c-381335bbd738/companyCertification.png authenticated 索超 320882199504061218 http://images.theiota.cn/upload/companycert/e39dc160-cb1a-4c7d-b432-ecfe08799164/240eb803-71ec-402c-b6d6-2848877c6151/companyCertification.png http://images.theiota.cn/upload/companycert/e39dc160-cb1a-4c7d-b432-ecfe08799164/46b03568-340e-4f2f-a517-2e5b7c273971/companyCertification.png \N \N \N \N \N \N 2018-09-26 17:01:51.02+08 2018-09-26 17:01:58.136+08 \N
+dd0e7237-b29b-4138-9db6-536278036161 company 长沙弘汇电子科技有限公司 123456 http://images.theiota.cn/upload/companycert/b62a05b7-00f6-49f0-a9d4-c3ffa17b7340/ce5302d2-412a-469c-b105-aa61fd810173/companyCertification.png authenticated 戴宗 320882199504061218 http://images.theiota.cn/upload/companycert/b62a05b7-00f6-49f0-a9d4-c3ffa17b7340/c52d23b7-38df-491e-9c5d-0740f17ed4f2/companyCertification.png http://images.theiota.cn/upload/companycert/b62a05b7-00f6-49f0-a9d4-c3ffa17b7340/18980ca4-0a10-4dd6-b525-63ee3bc5ad2f/companyCertification.png \N \N \N \N \N \N 2018-09-29 15:33:12.142+08 2018-09-29 15:33:20.074+08 \N
+a32c47a2-7dc4-458d-8169-e88a5b0e82de company 杭州美控自动化技术有限公司 3232141414124 http://images.theiota.cn/upload/companycert/849e9b08-1181-436a-a106-cc6b0d3ffdc5/69edf7ee-fe56-474a-8252-c48bf089d5a5/companyCertification.png authenticated 俞晓雷 321102199207181019 http://images.theiota.cn/upload/companycert/849e9b08-1181-436a-a106-cc6b0d3ffdc5/ffc6c3dd-2230-4aeb-bb3d-8eb42bd465be/companyCertification.png http://images.theiota.cn/upload/companycert/849e9b08-1181-436a-a106-cc6b0d3ffdc5/bfba7127-2495-4c75-8870-d1eb2030d962/companyCertification.png \N \N \N \N \N \N 2018-10-09 10:53:52.184+08 2018-10-09 10:54:00.962+08 \N
+21da3935-62c3-4b0d-bd28-16921600432a company 桂林市光明科技实业有限公司 123456 http://images.theiota.cn/upload/companycert/7d1ecbc8-319d-43ec-9a0b-67d1f713fb36/4e162eca-73a9-4409-a051-3df060e546f7/companyCertification.png authenticated 刘唐 320882199504061218 http://images.theiota.cn/upload/companycert/7d1ecbc8-319d-43ec-9a0b-67d1f713fb36/4919218a-f2c8-4410-b86d-b723fc78010a/companyCertification.png http://images.theiota.cn/upload/companycert/7d1ecbc8-319d-43ec-9a0b-67d1f713fb36/8df5fe28-e1f8-4547-85fa-5bf6464c07c0/companyCertification.png \N \N \N \N \N \N 2018-10-10 09:28:08.564+08 2018-10-10 09:28:20.479+08 \N
+ed558307-bbb9-422b-8705-205ffb6d95f6 company 北京剑灵科技有限公司 JLxaw123345 http://images.theiota.cn/upload/companycert/19d97e00-b313-443e-b2cd-40bce48c0f05/0c763071-b259-4905-a3dd-6cd5f647d85c/companyCertification.png authenticated 谌月岑 321102199207181019 http://images.theiota.cn/upload/companycert/19d97e00-b313-443e-b2cd-40bce48c0f05/2c0db241-da27-480f-9e61-56813eb20a16/companyCertification.png http://images.theiota.cn/upload/companycert/19d97e00-b313-443e-b2cd-40bce48c0f05/374b8c47-ad84-4c75-8b15-b370a43e6085/companyCertification.png \N \N \N \N \N \N 2018-10-12 10:30:18.033+08 2018-10-12 10:33:24.687+08 \N
+ee936773-3935-4a6f-a962-2b0fd1a5c77e company 上海蓝居智能科技有限公司 shlanjuznkj http://images.theiota.cn/upload/companycert/d7992dd9-6356-40b2-ae7d-78cb5508b40c/66c4be53-c0ee-4c4a-9c2a-fc239af4cc06/companyCertification.png authenticated 王长宝 321102199823412 http://images.theiota.cn/upload/companycert/d7992dd9-6356-40b2-ae7d-78cb5508b40c/8bd8b6db-a4e6-4a4f-9b3d-fd4ae7da86cf/companyCertification.png http://images.theiota.cn/upload/companycert/d7992dd9-6356-40b2-ae7d-78cb5508b40c/5de6dd1a-11c1-4403-a972-3858908498d9/companyCertification.png \N \N \N \N \N \N 2018-10-15 16:48:24.484+08 2018-10-15 16:48:33.291+08 \N
+c1ba779a-7a7c-482c-9d5f-4ee4dcb1fc11 company 北京九旭阳光节能设备有限公司 xxxxxxxxxxxx http://images.theiota.cn/upload/companycert/a5ba2211-a3c8-43b2-a4e8-2e87ccc03805/33b012e5-7351-430a-9675-6dc0ddc7d5b8/companyCertification.png authenticated 者成天 321102199207091023 http://images.theiota.cn/upload/companycert/a5ba2211-a3c8-43b2-a4e8-2e87ccc03805/a2b94dbc-14cc-4c53-a784-23a2aa64cd35/companyCertification.png http://images.theiota.cn/upload/companycert/a5ba2211-a3c8-43b2-a4e8-2e87ccc03805/b1fa86b6-751c-4798-ab39-17357e44a66e/companyCertification.png \N \N \N \N \N \N 2018-10-17 15:12:26.026+08 2018-10-17 15:12:46.369+08 \N
+db5fa7ec-7e67-493b-9ca5-75958f27ba5e company 天津市丽景微电子设备有限公司 123456 http://images.theiota.cn/upload/companycert/564b6c70-39c1-423b-9eed-89d2dcdbc2a4/9bae7ce8-0659-4e59-aee5-e1b535d86a72/companyCertification.png authenticated 李逵 320882199504061218 http://images.theiota.cn/upload/companycert/564b6c70-39c1-423b-9eed-89d2dcdbc2a4/afbaf1fc-cf3d-4e0b-b7c0-a93fca1fd0bc/companyCertification.png http://images.theiota.cn/upload/companycert/564b6c70-39c1-423b-9eed-89d2dcdbc2a4/423bd70b-50f7-40aa-8f43-e05bee6e7e25/companyCertification.png \N \N \N \N \N \N 2018-10-18 15:00:12.315+08 2018-10-18 15:00:20.208+08 \N
+255aa9dd-04f8-4987-8634-ed802143a025 company 宁波智哲信息科技有限公司 12343265657 http://images.theiota.cn/upload/companycert/750185f8-2901-4e59-a173-708c3f84f270/d1a437aa-fb4f-4efc-8790-8e2761a213c2/companyCertification.png authenticated 金庸 321125413512352 http://images.theiota.cn/upload/companycert/750185f8-2901-4e59-a173-708c3f84f270/9d505968-d745-4516-9e42-3fa3fc6382ff/companyCertification.png http://images.theiota.cn/upload/companycert/750185f8-2901-4e59-a173-708c3f84f270/cb375d1d-356f-4b03-b448-3505913b81bf/companyCertification.png \N \N \N \N \N \N 2018-10-31 10:46:56.9+08 2018-10-31 10:47:07.478+08 \N
+4ef87106-170b-4ad8-96bf-051cc45e7da1 company 石家庄铁道大学 2156141 http://images.theiota.cn/upload/companycert/6b927c2a-ce23-4bf8-9f83-7307d2856c61/16e2f9f6-bc23-46c8-9c87-7b64792cb282/companyCertification.png authenticated five 321154353462223 http://images.theiota.cn/upload/companycert/6b927c2a-ce23-4bf8-9f83-7307d2856c61/4ce223cb-6e0b-41ae-af8d-188d4ad6f522/companyCertification.png http://images.theiota.cn/upload/companycert/6b927c2a-ce23-4bf8-9f83-7307d2856c61/9e3a7da8-9883-4ec7-8bdd-34663fc64d7c/companyCertification.png \N \N \N \N \N \N 2018-11-09 11:24:39.721+08 2018-11-09 11:25:36.455+08 \N
+c10a7b15-97f0-451e-a15c-537f9ba147ff company 深圳心谱智能系统工程公司 3212547673 http://images.theiota.cn/upload/companycert/ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c/edfebcfb-a5df-452c-ace1-648f6dddb0ec/companyCertification.png authenticated five 321254357468435 http://images.theiota.cn/upload/companycert/ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c/c40128a2-c2dc-4b44-b4d6-a7ef9e0309ae/companyCertification.png http://images.theiota.cn/upload/companycert/ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c/5af8d7a2-f820-4908-a928-9f0285b1e96d/companyCertification.png \N \N \N \N \N \N 2018-11-10 15:48:01.32+08 2018-11-10 15:48:35.86+08 \N
+58e23a26-8332-454f-b122-3e18a3125b26 company 长沙煊隆电子科技有限公司 123456 http://images.theiota.cn/upload/companycert/5619f241-827a-4e15-b2af-f2666e57ce48/12d69011-f594-45dd-9bc4-82cecf89eac5/companyCertification.png authenticated 史进 320882199504061218 http://images.theiota.cn/upload/companycert/5619f241-827a-4e15-b2af-f2666e57ce48/65192584-e02f-41df-bb27-e65e638e7d14/companyCertification.png http://images.theiota.cn/upload/companycert/5619f241-827a-4e15-b2af-f2666e57ce48/e4a6d46e-2c4b-4479-923e-900f72057a4b/companyCertification.png \N \N \N \N \N \N 2018-11-23 14:58:22.903+08 2018-11-23 14:58:35.211+08 \N
+f4ba6f51-e553-4525-a4a8-742e041949bd company 成都众山科技有限公司 123456 http://images.theiota.cn/upload/companycert/cde952f9-77ff-4bbe-9a36-cdc05fe8212a/20ed4015-e8c7-4b38-b826-de9ae6e34ccb/companyCertification.png authenticated 穆弘 320882199504061218 http://images.theiota.cn/upload/companycert/cde952f9-77ff-4bbe-9a36-cdc05fe8212a/f414ab3b-ca7a-415a-8f49-70268a1d02ed/companyCertification.png http://images.theiota.cn/upload/companycert/cde952f9-77ff-4bbe-9a36-cdc05fe8212a/b9a078cf-4856-42a8-85e9-1067eca95e63/companyCertification.png \N \N \N \N \N \N 2018-11-23 16:15:35.999+08 2018-11-23 16:15:43.137+08 \N
+c4138de9-d2c3-4774-88dc-fd597cf6e8f9 company 永正传感(杭州)有限公司 123456 http://images.theiota.cn/upload/companycert/b1797f0b-c735-409e-89f5-ab695859f076/eb6bbd6c-aba0-47af-b880-6990fd12e615/companyCertification.png authenticated 李俊 320882199504061218 http://images.theiota.cn/upload/companycert/b1797f0b-c735-409e-89f5-ab695859f076/55c8587b-a452-4cce-b30e-1d94625d5dd8/companyCertification.png http://images.theiota.cn/upload/companycert/b1797f0b-c735-409e-89f5-ab695859f076/36cfe4a9-1cb5-4208-9822-e0c8e79a552b/companyCertification.png \N \N \N \N \N \N 2018-12-08 16:33:03.64+08 2018-12-08 16:33:20.613+08 \N
+19d2071b-8a31-4f00-a984-a02a81fd50f7 company 北京为韵科技有限公司 343435453252 http://images.theiota.cn/upload/companycert/650f75b2-4e3f-4393-8edb-0308c73e15b6/2bc9ac9f-f20d-45e3-b38c-8b31291fd421/companyCertification.png authenticated 黄金国 140233198005247789 http://images.theiota.cn/upload/companycert/650f75b2-4e3f-4393-8edb-0308c73e15b6/553c0567-ae3e-4c7c-bc48-dd639d5788d8/companyCertification.png http://images.theiota.cn/upload/companycert/650f75b2-4e3f-4393-8edb-0308c73e15b6/e667dff7-78fe-4b1c-bcfb-2aaaf66f85c9/companyCertification.png \N \N \N \N \N \N 2020-06-18 16:32:11.415+08 2020-06-18 16:32:38.907+08 \N
+b90d5ecb-ddfc-42fb-bb9f-0492f4b2a4f9 company 辽宁东仪自控技术股份有限公司 123456 http://images.theiota.cn/upload/companycert/632bb218-8da7-4d91-b83d-70879c562d74/667923f4-15b0-4642-8905-2a4788491c50/companyCertification.png authenticated 张横 320882199504061218 http://images.theiota.cn/upload/companycert/632bb218-8da7-4d91-b83d-70879c562d74/cb58ba3b-4498-4f65-abcd-890faaffed0a/companyCertification.png http://images.theiota.cn/upload/companycert/632bb218-8da7-4d91-b83d-70879c562d74/9bc21a0e-b689-4c8e-b6ba-4e978973d5c2/companyCertification.png \N \N \N \N \N \N 2018-12-25 11:46:18.613+08 2018-12-25 11:46:27.94+08 \N
+509162c9-010c-490b-be14-d9d43e191e1c company 广东江威传感科技有限公司 123456 http://images.theiota.cn/upload/companycert/dade7e83-25b6-4932-993c-6d886fec9843/41db81f9-790d-48fe-997f-99928872ebaa/companyCertification.png authenticated 阮小五 320882199504061218 http://images.theiota.cn/upload/companycert/dade7e83-25b6-4932-993c-6d886fec9843/8c986eea-a71c-4a7d-8bcc-04dc2e5599cf/companyCertification.png http://images.theiota.cn/upload/companycert/dade7e83-25b6-4932-993c-6d886fec9843/44d665ca-a5e4-4b16-b17f-b313079ef521/companyCertification.png \N \N \N \N \N \N 2019-01-19 09:18:24.455+08 2019-01-19 09:18:31.734+08 \N
+873b0693-0abd-4a9b-979e-7553ac29821d company abc abc http://images.theiota.cn/upload/companycert/upload_6b975392b7744e8cb5f14948c3fb3433.png failed abc 111111111111111111 http://images.theiota.cn/upload/companycert/upload_35a0e1ce2112928e038b95db9e00c0d0.png http://images.theiota.cn/upload/companycert/upload_c5c90c0c61749f8d88fc7c53402acff7.png \N \N \N \N \N 2017-09-23 16:24:28.453+08 2018-01-08 14:53:02.483+08 \N
+db593efc-030f-4b47-b7e1-b49795714439 company 湖南北斗星空自动化科技有限公司 123456 http://images.theiota.cn/upload/companycert/3bc407e4-dd38-4be8-9659-2f9aac78956a/deba4787-9e8d-47c8-a72b-2c525a7c7936/companyCertification.png authenticated 解珍 320882199504061218 http://images.theiota.cn/upload/companycert/3bc407e4-dd38-4be8-9659-2f9aac78956a/d8383cdd-509d-425e-8821-5a6d0171b914/companyCertification.png http://images.theiota.cn/upload/companycert/3bc407e4-dd38-4be8-9659-2f9aac78956a/9712191e-b90c-4e81-a392-717cdd2d905d/companyCertification.png \N \N \N \N \N \N 2019-03-04 16:18:07.232+08 2019-03-04 16:18:27.956+08 \N
+4f8482c3-8bc4-4b8c-af3c-c935faed0aef company 北京SOIL仪器有限公司 123456 http://images.theiota.cn/upload/companycert/679f43f2-ff7d-440f-9e36-6ad3beb8d574/4bea30a0-a1fd-4bdd-804d-cd7776d74d69/companyCertification.png authenticated 阮小七 320882199504061218 http://images.theiota.cn/upload/companycert/679f43f2-ff7d-440f-9e36-6ad3beb8d574/408f0fe2-f8ee-4ec9-9d0d-f66779228911/companyCertification.png http://images.theiota.cn/upload/companycert/679f43f2-ff7d-440f-9e36-6ad3beb8d574/c8353be2-b462-4bf1-93a3-bf5b9e849838/companyCertification.png \N \N \N \N \N \N 2019-02-22 11:30:40.453+08 2019-02-22 11:30:51.91+08 \N
+6953cb17-93d1-43e9-b65a-2b0990bc0049 company 常州惠和工程科技有限公司 123456 http://images.theiota.cn/upload/companycert/8bb8c871-dd83-4665-8378-1ae66927181a/600dd9c8-1902-408f-92ac-48ad70e933bc/companyCertification.png authenticated 杨雄 320882199504061218 http://images.theiota.cn/upload/companycert/8bb8c871-dd83-4665-8378-1ae66927181a/0776d000-dc38-4d72-864c-ba4a6a491fd0/companyCertification.png http://images.theiota.cn/upload/companycert/8bb8c871-dd83-4665-8378-1ae66927181a/8f5de13b-325e-49c8-b824-b969fc970f4e/companyCertification.png \N \N \N \N \N \N 2019-02-22 17:11:49.946+08 2019-02-22 17:12:14.735+08 \N
+d9e142bf-ebb7-4b0a-851e-439ccdfd92bb company 江西一芯科技有限公司 123456 http://images.theiota.cn/upload/companycert/67c8b9e9-38d6-4c9a-8772-9c96d78121ed/14bb5ecf-3cb5-4255-8275-2c800d3931fe/companyCertification.png authenticated 石秀 320882199604061218 http://images.theiota.cn/upload/companycert/67c8b9e9-38d6-4c9a-8772-9c96d78121ed/16135678-8ae2-4f33-93fb-1b7ede7b638c/companyCertification.png http://images.theiota.cn/upload/companycert/67c8b9e9-38d6-4c9a-8772-9c96d78121ed/af215144-eb42-4ede-a7e8-579650c6b1f2/companyCertification.png \N \N \N \N \N \N 2019-02-25 11:29:53.706+08 2019-02-25 11:30:04.424+08 \N
+e78edb7a-da87-4973-8c4b-ab7b13833072 company 智性科技南通有限公司 123456 http://images.theiota.cn/upload/companycert/f6ce26a9-3ae2-4845-9e60-cbeae08428e4/b1048106-5737-4f31-ad1a-506016efc112/companyCertification.png authenticated 解宝 320882199504061218 http://images.theiota.cn/upload/companycert/f6ce26a9-3ae2-4845-9e60-cbeae08428e4/8ff8d94d-6f45-4610-a4ef-74beafff25bd/companyCertification.png http://images.theiota.cn/upload/companycert/f6ce26a9-3ae2-4845-9e60-cbeae08428e4/eeb6c497-9460-42e7-bae0-2bd4563412b3/companyCertification.png \N \N \N \N \N \N 2019-03-25 15:42:00.43+08 2019-03-25 15:42:09.602+08 \N
+a78c9ea6-7625-4604-8b4c-15c694154389 company 济南长汇自动化设备有限公司 123456 http://images.theiota.cn/upload/companycert/30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e/41bb232e-ce50-422f-b2b0-820d67df005d/companyCertification.png authenticated 燕青 320882199504061218 http://images.theiota.cn/upload/companycert/30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e/3f997ddd-a985-4dd2-b707-0d2de8a994ff/companyCertification.png http://images.theiota.cn/upload/companycert/30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e/36b995db-2056-4aff-98f6-95537e0497e7/companyCertification.png \N \N \N \N \N \N 2019-03-27 10:27:01.222+08 2019-03-27 10:27:23.523+08 \N
+2aa3d1c2-45fe-4f61-96a4-654d13cc4b34 company 武汉承拓 112312312312 http://images.theiota.cn/upload/companycert/aed14e79-005c-4916-afac-c1b60faeca1b/03b099f1-f82a-4405-b443-658c95d97acd/companyCertification.png authenticated 王华阿 321231233322122 http://images.theiota.cn/upload/companycert/aed14e79-005c-4916-afac-c1b60faeca1b/f8621dc7-a66e-4fdf-9747-5370def69b4b/companyCertification.png http://images.theiota.cn/upload/companycert/aed14e79-005c-4916-afac-c1b60faeca1b/7bd631f5-f22b-4b8e-b409-09cd3fab13b7/companyCertification.png \N \N \N \N \N \N 2019-04-16 09:13:46.395+08 2019-04-16 09:14:03.12+08 \N
+77c8175d-d8bb-466e-a914-20957a0c6c49 company 山东高速工程检测有限公司 123456 http://images.theiota.cn/upload/companycert/9b82d18b-98eb-4042-bb16-f05b923a0688/dfade675-2f36-4c3f-8b8f-cc9b76bd9327/companyCertification.png authenticated 于文文 320882198906101218 http://images.theiota.cn/upload/companycert/9b82d18b-98eb-4042-bb16-f05b923a0688/1f3fc82c-7f58-44a3-8669-4e95490e3f4c/companyCertification.png http://images.theiota.cn/upload/companycert/9b82d18b-98eb-4042-bb16-f05b923a0688/ca00e781-7861-4c96-91ee-a26b8de4f94a/companyCertification.png \N \N \N \N \N \N 2019-04-23 17:29:45.636+08 2019-04-23 17:29:52.205+08 \N
+05074f6f-1e7f-4d0d-a2dd-9548f9799fdf company 苏州瑞茨柏工程监测技术有限公司 123456 http://images.theiota.cn/upload/companycert/a002a7f5-f9ea-42a5-83d0-5f63f88e3b87/9e015402-719e-4645-b7af-a56c94078fc9/companyCertification.png authenticated 白百合 320882199504061218 http://images.theiota.cn/upload/companycert/a002a7f5-f9ea-42a5-83d0-5f63f88e3b87/bab20fcd-1fd1-40e5-aa66-c2733f6909fc/companyCertification.png http://images.theiota.cn/upload/companycert/a002a7f5-f9ea-42a5-83d0-5f63f88e3b87/9e63390b-73d9-41f6-beb9-03dfd072fa4d/companyCertification.png \N \N \N \N \N \N 2019-04-29 15:12:32.164+08 2019-04-29 15:20:05.024+08 \N
+23ddab0a-3351-496e-a544-4e988d67b576 company 上海建工集团 123456 http://images.theiota.cn/upload/companycert/19fa25f4-9ba9-4e93-9025-e67b34db9cf7/150c5133-86a4-4b72-b6c2-1597bda9d17a/companyCertification.png authenticated 丁弈 320882199504061218 http://images.theiota.cn/upload/companycert/19fa25f4-9ba9-4e93-9025-e67b34db9cf7/ff6c90ea-767d-485d-b18b-cce07fa7a48c/companyCertification.png http://images.theiota.cn/upload/companycert/19fa25f4-9ba9-4e93-9025-e67b34db9cf7/ecbfd92a-30a6-457b-8186-97d538ab27dc/companyCertification.png \N \N \N \N \N \N 2019-05-13 16:34:02.33+08 2019-05-13 16:34:18.778+08 \N
+d4d2115f-fe6e-410d-9b82-2b21fa4fade1 company 浙江乐孚信息科技有限公司 232343454太 http://images.theiota.cn/upload/companycert/9842b3d6-0a7d-4d67-84be-d0132d1b3e30/973d72bc-b098-48e9-8e78-17f6b60c2cc5/companyCertification.png authenticated 李爽 130632198705246427 http://images.theiota.cn/upload/companycert/9842b3d6-0a7d-4d67-84be-d0132d1b3e30/14a2292f-bdbb-4ac1-8961-7dd7498a65ad/companyCertification.png http://images.theiota.cn/upload/companycert/9842b3d6-0a7d-4d67-84be-d0132d1b3e30/9e187b67-76d7-44e0-bf33-003b823d2d64/companyCertification.png \N \N \N \N \N \N 2019-05-09 09:33:22.636+08 2019-05-09 11:06:09.365+08 \N
+fe723f98-2007-4786-8a13-7b8cf97e9fb0 company 北京中交众成科技有限公司 4124324354343244324 http://images.theiota.cn/upload/companycert/bda7431e-46ed-40b2-bf13-b511219a8fcb/71a4fb06-74fd-4a9c-89bf-bae00a76cee3/companyCertification.png authenticated 周小 130401199603182882 http://images.theiota.cn/upload/companycert/bda7431e-46ed-40b2-bf13-b511219a8fcb/dcd6dfd0-4484-48be-9f59-63389a84402c/companyCertification.png http://images.theiota.cn/upload/companycert/bda7431e-46ed-40b2-bf13-b511219a8fcb/a6b7003c-a47e-4c86-b6f1-1a11e581ae88/companyCertification.png \N \N \N \N \N \N 2019-05-14 09:43:25.763+08 2019-05-14 09:45:01.201+08 \N
+4151ce66-cea2-470e-b9d6-1a9915f98dc4 company 稳控科技 132444555 http://images.theiota.cn/upload/companycert/e3714b5a-b240-4f8f-a8c3-9067a3fffb04/8fde7403-60dc-486e-aedb-7ab95fd6d843/companyCertification.png authenticated 林小杰 130404188024425 http://images.theiota.cn/upload/companycert/e3714b5a-b240-4f8f-a8c3-9067a3fffb04/40fd1282-151a-4c34-a9b7-28ce4c005bf6/companyCertification.png http://images.theiota.cn/upload/companycert/e3714b5a-b240-4f8f-a8c3-9067a3fffb04/5f4df2e5-76b8-4425-a725-dc481ab4aaa0/companyCertification.png \N \N \N \N \N \N 2019-05-15 10:42:05.858+08 2019-05-15 10:43:11.701+08 \N
+1b8a807b-0029-4862-b3e8-f0e60c713a62 company 上海如应仪器有限公司 123456 http://images.theiota.cn/upload/companycert/8d2f03c7-32a2-42e4-befc-7dde5c965472/b8dffb8c-14e1-4e55-8c45-157e97bc1610/companyCertification.png authenticated 肖文艳 320882199504061218 http://images.theiota.cn/upload/companycert/8d2f03c7-32a2-42e4-befc-7dde5c965472/e1e09407-aed6-4ae7-8a7b-87f499f712e6/companyCertification.png http://images.theiota.cn/upload/companycert/8d2f03c7-32a2-42e4-befc-7dde5c965472/836bd440-e0c9-49b5-af86-3f29e8dce2f8/companyCertification.png \N \N \N \N \N \N 2019-06-21 16:28:11.372+08 2019-06-21 16:29:01.375+08 \N
+3f71a23d-2762-47d5-8d94-12f9671d4b53 company 深圳奕帆科技有限公司 2323434343 http://images.theiota.cn/upload/companycert/6879ee09-86fe-48d2-a3ff-bd5395d66a27/211061ac-7fe4-42cb-8091-e9216e7f1643/companyCertification.png authenticated 林森 130633178903216574 http://images.theiota.cn/upload/companycert/6879ee09-86fe-48d2-a3ff-bd5395d66a27/32edf568-0593-47eb-aadd-e752ef831183/companyCertification.png http://images.theiota.cn/upload/companycert/6879ee09-86fe-48d2-a3ff-bd5395d66a27/bf3aa1d9-b912-4fbe-b67e-c5ca1e7ba6a7/companyCertification.png \N \N \N \N \N \N 2019-06-25 11:55:00.085+08 2019-06-25 11:57:34.384+08 \N
+4f42d31f-9c35-41b4-a21a-96b2e2e24619 company 华南理工 12344 http://images.theiota.cn/upload/companycert/736d5c22-d6ac-4577-9782-0f95345ea1d5/4a5945de-8fa4-4731-9ee2-8fdc7676895c/companyCertification.png authenticated 王五 140602199808251200 http://images.theiota.cn/upload/companycert/736d5c22-d6ac-4577-9782-0f95345ea1d5/0992274a-6236-41aa-9921-1fd7b96fe092/companyCertification.png http://images.theiota.cn/upload/companycert/736d5c22-d6ac-4577-9782-0f95345ea1d5/63255d2a-e429-489e-b16e-0c4de05a1f90/companyCertification.png \N \N \N \N \N \N 2019-07-16 15:39:40.739+08 2019-07-16 15:42:30.403+08 \N
+01f46e8d-4d8a-4474-8860-b7f71abb616f company 陕西恒瑞测控系统有限公司 123456 http://images.theiota.cn/upload/companycert/802a6ad5-5ee7-4234-8c91-32aa074a0685/45f3f6f7-6103-457f-b26d-3599a756d057/companyCertification.png authenticated 韩非 320882199504061218 http://images.theiota.cn/upload/companycert/802a6ad5-5ee7-4234-8c91-32aa074a0685/4fb96d61-1b91-4a53-b51d-0ed4692778bc/companyCertification.png http://images.theiota.cn/upload/companycert/802a6ad5-5ee7-4234-8c91-32aa074a0685/5792a8b2-eab5-4f03-9a49-2a7e4c0e6a14/companyCertification.png \N \N \N \N \N \N 2019-07-22 16:13:10.697+08 2019-07-22 16:13:50.089+08 \N
+396c7a87-c01f-4fc0-84bb-813f5525e16a company 泰斯特仪器有限公司 23123232133233213 http://images.theiota.cn/upload/companycert/6c3cbbd8-b774-4955-897d-3333586385c6/b65e2c49-ade4-4968-9cf5-0b38797547b0/companyCertification.png authenticated 大师赛 130633178908217689 http://images.theiota.cn/upload/companycert/6c3cbbd8-b774-4955-897d-3333586385c6/f96659b0-638b-4cfc-a059-88f0d41b01a2/companyCertification.png http://images.theiota.cn/upload/companycert/6c3cbbd8-b774-4955-897d-3333586385c6/da28525b-c30f-4a33-860e-a2ded9276a80/companyCertification.png \N \N \N \N \N \N 2019-08-05 15:38:35.496+08 2019-08-05 15:39:45.724+08 \N
+dc3110a0-e9c9-41ee-aa3e-417b06a4a8d8 company 杭州国翌科技有限公司 1213141234214 http://images.theiota.cn/upload/companycert/3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c/05b67ee7-80c0-418b-bdd8-25704afa7543/companyCertification.png authenticated 李天 140602199008162389 http://images.theiota.cn/upload/companycert/3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c/619488e2-4dbb-4d28-bd6d-b04e624b9bc5/companyCertification.png http://images.theiota.cn/upload/companycert/3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c/d2a8c492-570a-486a-9cfc-e6c72b5d24a2/companyCertification.png \N \N \N \N \N \N 2019-08-13 10:34:15.813+08 2019-08-13 10:34:32.798+08 \N
+18e3930c-9d6c-4d92-b0f0-e781fb407078 company 江苏华通工程检测有限公司 34343543524242 http://images.theiota.cn/upload/companycert/d30f8980-fb5a-4dfa-a706-1dd2eb2e0e44/d85d879f-e8dd-471b-b36d-e0f74a0c6835/companyCertification.png authenticated 朱骄健 140544199705106789 http://images.theiota.cn/upload/companycert/d30f8980-fb5a-4dfa-a706-1dd2eb2e0e44/55215368-bb6e-476a-b80d-2387a5ed2cfa/companyCertification.png http://images.theiota.cn/upload/companycert/d30f8980-fb5a-4dfa-a706-1dd2eb2e0e44/79651ab0-e125-4b76-a7ce-d69bd685ec67/companyCertification.png \N \N \N \N \N \N 2019-08-13 17:46:23.979+08 2019-08-13 17:47:01.466+08 \N
+ced3128b-5650-474d-99ae-4496d3d0ea97 company 南京巡天科技有限公司 281798239873921792 http://images.theiota.cn/upload/companycert/a59371d0-7a5c-473a-83f2-41b31b9096e1/49b06880-bc22-47fc-9409-b9aa4b98c789/companyCertification.png authenticated 邓世昌 128371027308217012 http://images.theiota.cn/upload/companycert/a59371d0-7a5c-473a-83f2-41b31b9096e1/f8e874a2-cfb3-409d-99bf-600e96e8467d/companyCertification.png http://images.theiota.cn/upload/companycert/a59371d0-7a5c-473a-83f2-41b31b9096e1/d0550c56-94d6-4685-86b1-038b4e3af694/companyCertification.png \N \N \N \N \N \N 2019-08-27 10:10:55.798+08 2019-08-27 10:11:18.405+08 \N
+c6b69110-10f2-4697-afcf-eb74f9e4a777 company 浙江博远电子科技有限公司 1212341234124 http://images.theiota.cn/upload/companycert/17ecfb0a-03a3-45eb-8d52-4794676c3a0a/8b0a6a0a-d5a2-40bf-be5e-628b5497639a/companyCertification.png authenticated 宝源 140602199012124356 http://images.theiota.cn/upload/companycert/17ecfb0a-03a3-45eb-8d52-4794676c3a0a/6779188f-e6ef-435d-a9c8-05f6cda07ffd/companyCertification.png http://images.theiota.cn/upload/companycert/17ecfb0a-03a3-45eb-8d52-4794676c3a0a/e4b4136b-af3a-4a92-8c56-d492f8dd5d43/companyCertification.png \N \N \N \N \N \N 2019-08-23 14:12:44.85+08 2019-08-23 14:13:10.329+08 \N
+905fa2c7-2244-487a-8dad-605e4d58e3d1 company 成都泰测科技有限公司 2324234343432432 http://images.theiota.cn/upload/companycert/4da26159-9a73-4068-a2b4-227aaac64a94/74d234cb-870e-4c28-8fcf-d29e2762f1f6/companyCertification.png authenticated 张飞 142345189009272345 http://images.theiota.cn/upload/companycert/4da26159-9a73-4068-a2b4-227aaac64a94/33d8f371-586c-42b4-b988-d3ad07e32d46/companyCertification.png http://images.theiota.cn/upload/companycert/4da26159-9a73-4068-a2b4-227aaac64a94/e802e207-152e-49b4-a81d-32452c940fa0/companyCertification.png \N \N \N \N \N \N 2019-09-05 11:16:30.708+08 2019-09-05 11:17:03.853+08 \N
+06a9522a-1277-41df-a73c-54910c8bddd8 company 深圳市大豪电子有限公司 34343432424234 http://images.theiota.cn/upload/companycert/56c7bc15-9ef6-4a82-984f-27e061f13a51/dcf25823-c325-4345-967e-704d00f459d4/companyCertification.png authenticated 王大锤 140566178909235678 http://images.theiota.cn/upload/companycert/56c7bc15-9ef6-4a82-984f-27e061f13a51/714ebabb-f5d5-49df-b780-bc06b96117ed/companyCertification.png http://images.theiota.cn/upload/companycert/56c7bc15-9ef6-4a82-984f-27e061f13a51/40409a31-d35b-42a4-8818-ff498aa8b464/companyCertification.png \N \N \N \N \N \N 2019-09-30 09:52:25.689+08 2019-09-30 09:53:58.768+08 \N
+3a3342dd-c0d1-4814-b0d4-99c105d0f91c company 徐州市伟思水务科技有限公司 343435453252 http://images.theiota.cn/upload/companycert/f088bb87-39b0-458f-931f-e752ffa5cb07/cc728cbf-92b9-4caa-814b-92fd7f8fcc7b/companyCertification.png authenticated 徐飞 134265187709234527 http://images.theiota.cn/upload/companycert/f088bb87-39b0-458f-931f-e752ffa5cb07/c4fea4a7-5b50-4bf7-bc50-c42c84a94978/companyCertification.png http://images.theiota.cn/upload/companycert/f088bb87-39b0-458f-931f-e752ffa5cb07/e962e3c8-12cb-414b-b5e5-d61700989994/companyCertification.png \N \N \N \N \N \N 2019-10-14 11:35:32.764+08 2019-10-14 11:37:06.727+08 \N
+b5a689a1-1523-47c7-ab4b-96b2d01cc461 company 任丘市新北仪器厂 343435453252 http://images.theiota.cn/upload/companycert/c8fac2b3-4360-47e4-91ab-2d6f3b3973e6/5165c56f-13be-48ec-bc4d-b08d68cccca2/companyCertification.png authenticated 石飞 120345189003216423 http://images.theiota.cn/upload/companycert/c8fac2b3-4360-47e4-91ab-2d6f3b3973e6/79261e3c-d660-4de9-baef-d150df47d665/companyCertification.png http://images.theiota.cn/upload/companycert/c8fac2b3-4360-47e4-91ab-2d6f3b3973e6/58ee030a-b87b-4e57-a57f-3444d6ba0bde/companyCertification.png \N \N \N \N \N \N 2019-10-29 09:04:27.849+08 2019-10-29 09:05:21.947+08 \N
+3825bcfe-887b-4c7e-825d-9e824d753aaf company 上海航鼎电子科技发展有限公司 343435453252 http://images.theiota.cn/upload/companycert/fff3496c-71e7-4ca5-abe5-9de748ac5a63/4d6f4387-1033-4063-863e-bb472a7f19bc/companyCertification.png authenticated 萨驰 140456175609145432 http://images.theiota.cn/upload/companycert/fff3496c-71e7-4ca5-abe5-9de748ac5a63/bfa02f9e-2376-4641-b338-34fe8a86a660/companyCertification.png http://images.theiota.cn/upload/companycert/fff3496c-71e7-4ca5-abe5-9de748ac5a63/52bcd77a-1996-4878-81dd-f6e35de21b5a/companyCertification.png \N \N \N \N \N \N 2019-11-01 14:06:43.126+08 2019-11-01 14:08:59.481+08 \N
+b44a2f42-face-4c8f-a783-1cfb1757c880 company 丹东金帆土木工程仪器有限公司 123124123412341234 http://images.theiota.cn/upload/companycert/123d97a2-af89-4fcd-87be-bf4e587c1495/cecf4bea-d0af-460a-8b90-fb0461b35cbd/companyCertification.png authenticated 李丹 140602197809123214 http://images.theiota.cn/upload/companycert/123d97a2-af89-4fcd-87be-bf4e587c1495/c2ba5135-db2f-4051-9486-60f3e0597cd1/companyCertification.png http://images.theiota.cn/upload/companycert/123d97a2-af89-4fcd-87be-bf4e587c1495/3d6d3720-5301-4119-bb2b-1f99cc69c5c1/companyCertification.png \N \N \N \N \N \N 2019-11-18 11:18:57.795+08 2019-11-18 11:19:36.608+08 \N
+3ddc40b2-b032-43be-ae73-a64ab2cf1827 company 上海市政工程设计研究总院 343435453252 http://images.theiota.cn/upload/companycert/e2534302-c06d-4ddf-8857-7011bfdde945/43789c56-d67c-4e0f-845f-8869ca56c4f4/companyCertification.png authenticated 杨洋 137322189008074523 http://images.theiota.cn/upload/companycert/e2534302-c06d-4ddf-8857-7011bfdde945/4d62cf75-81ad-4fce-99a9-2f56aacd1c75/companyCertification.png http://images.theiota.cn/upload/companycert/e2534302-c06d-4ddf-8857-7011bfdde945/60bcf1be-4d3c-4a44-9a81-d7d7ee601443/companyCertification.png \N \N \N \N \N \N 2019-11-05 09:08:23.233+08 2019-11-05 09:10:13.312+08 \N
+f3f08d8d-1644-4a97-b5ab-a94039b1907c company 成都安阶监测科技有限公司 12131231234123 http://images.theiota.cn/upload/companycert/8d49238d-6e0e-421c-adaf-f7472ec0b50e/78717016-0b71-44e5-b9f0-c201220059b3/companyCertification.png authenticated 李福 140609198509181231 http://images.theiota.cn/upload/companycert/8d49238d-6e0e-421c-adaf-f7472ec0b50e/c0bcb7da-f063-4b59-98b2-720d65e41939/companyCertification.png http://images.theiota.cn/upload/companycert/8d49238d-6e0e-421c-adaf-f7472ec0b50e/3694cee4-4dc4-4b76-8b9a-e4350365d4bb/companyCertification.png \N \N \N \N \N \N 2019-09-29 10:28:51.448+08 2019-09-29 10:30:49.297+08 \N
+230cf38f-fd43-4b78-93b2-05620d4eab9f company 北京联睿科科技有限公司 343435453252 http://images.theiota.cn/upload/companycert/bfe504c8-b84a-43ec-831a-5ce698db9950/a57bd1b0-75a1-4d4f-80c4-89039077fbd6/companyCertification.png authenticated 李雷雷 120344198709082345 http://images.theiota.cn/upload/companycert/bfe504c8-b84a-43ec-831a-5ce698db9950/416068f9-c48d-4c0c-8d17-aac4cf1eee48/companyCertification.png http://images.theiota.cn/upload/companycert/bfe504c8-b84a-43ec-831a-5ce698db9950/0ed4a275-ba46-42df-8d74-12565270a45e/companyCertification.png \N \N \N \N \N \N 2019-11-27 08:59:59.667+08 2019-11-27 09:01:41.804+08 \N
+752f5c02-d042-481d-ba52-83c0a4d969ae company 北京腾晟桥康科技有限公司 1212 http://images.theiota.cn/upload/companycert/158a00b4-7170-4f1e-acd7-81e38c57b8da/c575db66-e0b2-443f-8fe0-43f2cb1cb93d/companyCertification.png authenticated 王天和 140602197509231203 http://images.theiota.cn/upload/companycert/158a00b4-7170-4f1e-acd7-81e38c57b8da/dcdb65cd-957b-46e3-9b9b-4a902af77bb6/companyCertification.png http://images.theiota.cn/upload/companycert/158a00b4-7170-4f1e-acd7-81e38c57b8da/a1b33b19-6767-4b74-97b3-baa8fded4746/companyCertification.png \N \N \N \N \N \N 2019-11-14 13:13:39.766+08 2019-11-14 13:16:10.515+08 \N
+3ced2ad4-50ab-4f5d-b3ca-fc19063f1879 company 北京思莫特科技有限公司 2341234123412 http://images.theiota.cn/upload/companycert/ccef8df0-e1f5-46be-a5b7-040285b1b6e8/aa2714f8-820e-4801-b823-e5e46a11b165/companyCertification.png authenticated 斯模特 140601198609192367 http://images.theiota.cn/upload/companycert/ccef8df0-e1f5-46be-a5b7-040285b1b6e8/b62578e4-4d62-48e1-afc4-b614ee464ae2/companyCertification.png http://images.theiota.cn/upload/companycert/ccef8df0-e1f5-46be-a5b7-040285b1b6e8/4980f7bc-dd8e-457e-9f24-ac5539d92346/companyCertification.png \N \N \N \N \N \N 2019-11-22 09:35:37.599+08 2019-11-22 09:39:44.261+08 \N
+415309d1-0dfa-4a51-9446-c5d96a8357c2 company 江西飞尚科技有限公司 authenticated \N \N 飞尚 \N \N \N 2017-08-18 16:25:24.324+08 2017-08-18 16:25:24.324+08 \N
+cb22fffc-27b3-479c-94ca-4117bb9483f3 company 湖南五岳监控测量技术有限公司 343435453252 http://images.theiota.cn/upload/companycert/7883c07e-5754-4740-b90b-836def9cb38e/d6fd7769-5a24-41e4-8e7f-99a1bf456904/companyCertification.png authenticated 王和平 124355178909128899 http://images.theiota.cn/upload/companycert/7883c07e-5754-4740-b90b-836def9cb38e/cbf7f4f7-0293-490c-b440-c7d76496fe43/companyCertification.png http://images.theiota.cn/upload/companycert/7883c07e-5754-4740-b90b-836def9cb38e/891db26a-77d6-4b0e-b01c-beb80f0ec2af/companyCertification.png \N \N \N \N \N \N 2019-12-06 10:29:18.413+08 2019-12-06 10:30:56.722+08 \N
+1b270ac5-34e5-47e7-8d67-926c4783bf6d company 宜兴市中岩土木工程仪器厂 343435453252 http://images.theiota.cn/upload/companycert/4fd9bf53-3722-4a0e-9145-178e3be83216/3c1b41c4-b52b-4dc4-b641-7ab964eca6eb/companyCertification.png authenticated 刘芳 189234197809231234 http://images.theiota.cn/upload/companycert/4fd9bf53-3722-4a0e-9145-178e3be83216/5d115731-71ed-4b53-8c74-ffa8ec537680/companyCertification.png http://images.theiota.cn/upload/companycert/4fd9bf53-3722-4a0e-9145-178e3be83216/6d75586f-0e5d-4921-9d50-bb10d0893677/companyCertification.png \N \N \N \N \N \N 2020-04-09 16:34:07.857+08 2020-04-09 16:34:18.431+08 \N
+334b593d-da3a-4d6b-a756-36e82b6e882e company 厦门乐钢材料科技有限公司 343435453252 http://images.theiota.cn/upload/companycert/4ed578c6-f98d-4d94-b1b3-472e1ced51bd/f4bf055e-3535-4db5-9e09-96eebe5524c6/companyCertification.png authenticated 林晨 130233198009082311 http://images.theiota.cn/upload/companycert/4ed578c6-f98d-4d94-b1b3-472e1ced51bd/9975f7f2-18a6-4e47-8e28-120dcbee99fa/companyCertification.png http://images.theiota.cn/upload/companycert/4ed578c6-f98d-4d94-b1b3-472e1ced51bd/099c11a4-cf7c-4f4e-90bc-96ec13278f02/companyCertification.png \N \N \N \N \N \N 2020-05-09 17:21:36.396+08 2020-05-09 17:22:23.652+08 \N
+004b1a1d-6d36-45c7-9e9d-2e3a3ecdc5c1 company 上海奔信信息科技有限公司 343435453252 http://images.theiota.cn/upload/companycert/28bc5952-cfc7-4d3a-a922-92c82d003b20/b93c9b99-795e-409d-97d1-131b9222141a/companyCertification.png authenticated 李飞 132366187609183245 http://images.theiota.cn/upload/companycert/28bc5952-cfc7-4d3a-a922-92c82d003b20/8a829a37-6b14-41fc-9260-b3599b69e8a5/companyCertification.png http://images.theiota.cn/upload/companycert/28bc5952-cfc7-4d3a-a922-92c82d003b20/061df515-5810-4936-ac6b-88ce25be6924/companyCertification.png \N \N \N \N \N \N 2020-05-14 15:00:53.289+08 2020-05-22 08:44:22.77+08 \N
+92d41b9e-5436-4c25-b181-973fa389f185 company 长沙岩康电子科技有限公司 343435453252 http://images.theiota.cn/upload/companycert/90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0/b8c1db71-8b90-4eff-8a4c-731e1d443683/companyCertification.png authenticated 易小飞 134233187905278900 http://images.theiota.cn/upload/companycert/90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0/cb93529f-2eb0-4a13-9ab7-9e94b2e64776/companyCertification.png http://images.theiota.cn/upload/companycert/90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0/897942de-377e-4964-89ff-bf389b78c57e/companyCertification.png \N \N \N \N \N \N 2020-06-05 14:29:43.341+08 2020-06-05 14:42:17.63+08 \N
+73386ae5-ef81-46d7-97d1-617a84709958 company 深圳市问源工程科技有限公司 343435453252 http://images.theiota.cn/upload/companycert/38913139-1273-4b5a-9155-e4aff0fc89ee/26e4babb-5a96-4884-8ebf-ebcbf104c093/companyCertification.png authenticated 王鹏 123233179008096789 http://images.theiota.cn/upload/companycert/38913139-1273-4b5a-9155-e4aff0fc89ee/8ce864c0-67f4-4ff2-b5d7-d60f168a9cb6/companyCertification.png http://images.theiota.cn/upload/companycert/38913139-1273-4b5a-9155-e4aff0fc89ee/0f1fb6b5-9a71-444c-9957-467ae8da056d/companyCertification.png \N \N \N \N \N \N 2020-06-12 13:45:26.15+08 2020-06-12 13:45:38.763+08 \N
+de2f4d46-1d32-4109-b909-a013dabfa58a company 广州市晟探测控技术有限公司 343435453252 http://images.theiota.cn/upload/companycert/4f529033-1917-4df3-80db-81efffdf28bf/880f17a7-7843-467d-99a5-7b340091305d/companyCertification.png authenticated 老臣 148344197806216543 http://images.theiota.cn/upload/companycert/4f529033-1917-4df3-80db-81efffdf28bf/c8f404eb-dff7-4db0-b5d9-17324d29593b/companyCertification.png http://images.theiota.cn/upload/companycert/4f529033-1917-4df3-80db-81efffdf28bf/d1f2364f-17eb-4335-8e65-3ea2fc456c26/companyCertification.png \N \N \N \N \N \N 2020-07-01 10:57:05.746+08 2020-07-01 10:57:42.717+08 \N
+8b21d12e-9bf9-4c00-8380-74aec0c58771 company 美国Campbell 343435453252 http://images.theiota.cn/upload/companycert/f38c8678-6245-4d4c-b6c2-b753ffe51a91/6900a536-cef2-470f-886a-e31f92598026/companyCertification.png authenticated 吴全满 132455190809127890 http://images.theiota.cn/upload/companycert/f38c8678-6245-4d4c-b6c2-b753ffe51a91/15b935f3-c7bc-4052-be0a-20ff19556e11/companyCertification.png http://images.theiota.cn/upload/companycert/f38c8678-6245-4d4c-b6c2-b753ffe51a91/e3676d35-2d87-4c05-9312-669d26d647e7/companyCertification.png \N \N \N \N \N \N 2020-07-07 09:20:38.199+08 2020-07-07 09:21:19.227+08 \N
+1d34edcf-e610-4987-980e-dbf2fa6a803a company 北京中弘泰科科技有限公司 343435453252 http://images.theiota.cn/upload/companycert/10b1641f-9368-4783-ab0f-85301fbe0b57/4749a577-a52e-4c57-8e7e-f2bdb904f7f1/companyCertification.png authenticated 张大大 134566178907218900 http://images.theiota.cn/upload/companycert/10b1641f-9368-4783-ab0f-85301fbe0b57/da3bbf75-4b5b-439f-bb73-0d61b66a57ba/companyCertification.png http://images.theiota.cn/upload/companycert/10b1641f-9368-4783-ab0f-85301fbe0b57/e0e70510-2d26-4126-a8ae-401d2e9f55cf/companyCertification.png \N \N \N \N \N \N 2020-07-20 08:44:19.049+08 2020-07-20 08:44:40.513+08 \N
+9cfcaef5-1af4-4e58-a074-4321b6cc7379 company 北京道冲泰科科技有限公司 343435453252 http://images.theiota.cn/upload/companycert/9fb7fa83-8261-4c7b-bc2f-d21a24bc7105/104a3f3f-e0de-4881-a142-d04475d66807/companyCertification.png authenticated 张太可 132677198007214567 http://images.theiota.cn/upload/companycert/9fb7fa83-8261-4c7b-bc2f-d21a24bc7105/d0e3c18b-a7ca-4dfc-8815-dfe2c92bed14/companyCertification.png http://images.theiota.cn/upload/companycert/9fb7fa83-8261-4c7b-bc2f-d21a24bc7105/e446834f-3344-4735-b2e0-dcfd5ef473a9/companyCertification.png \N \N \N \N \N \N 2020-07-20 13:48:53.956+08 2020-07-20 13:49:07.899+08 \N
+57a0b61a-7418-4200-9df8-2389ceabf0ab company 杭州予渔物联网技术有限公司 343435453252 http://images.theiota.cn/upload/companycert/1c2a6d1f-3ebd-47dd-80b6-db55d55982d8/c9dad8f0-e96f-4914-82cd-6f6bc53b1b12/companyCertification.png authenticated 施洁 120344198708012345 http://images.theiota.cn/upload/companycert/1c2a6d1f-3ebd-47dd-80b6-db55d55982d8/4b91bfe3-cd4a-4c14-b403-61bcc22e4e32/companyCertification.png http://images.theiota.cn/upload/companycert/1c2a6d1f-3ebd-47dd-80b6-db55d55982d8/b8eaa4f6-2b2d-4aba-b68f-80002884df50/companyCertification.png \N \N \N \N \N \N 2020-09-02 11:05:09.335+08 2020-09-02 11:05:33.362+08 \N
+68cc623e-fd96-49f5-990a-55796a248cf2 company Test-LYL Test-LYL http://images.theiota.cn/upload/companycert/0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273/b0c74d79-98b5-499d-b488-137804006fb6/companyCertification.png authenticated LYL 32110219890615631X http://images.theiota.cn/upload/companycert/0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273/a94ef5ca-36cc-4211-84fb-7a49e91f85ed/companyCertification.png http://images.theiota.cn/upload/companycert/0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273/7366b2e2-d536-4294-b0e9-862383009a56/companyCertification.png \N \N \N \N \N \N 2020-09-01 14:36:48.371+08 2020-09-01 14:37:41.586+08 \N
+555ecb6e-3561-4461-b2f9-f9fbeb6e5a48 company 江西飞尚科技有限公司智能家居集团 123456789 http://images.theiota.cn/upload/companycert/f2b3bb46-fba2-4a7a-a1f9-b88d86826cce/e36f96e5-914b-4308-8ff3-6beefb75f8cf/companyCertification.png authenticated 东皇太一 320882000000001314 http://images.theiota.cn/upload/companycert/f2b3bb46-fba2-4a7a-a1f9-b88d86826cce/e6508dbe-31d0-425c-a741-56f6f81596f5/companyCertification.png http://images.theiota.cn/upload/companycert/f2b3bb46-fba2-4a7a-a1f9-b88d86826cce/ac7bee0a-d7b7-4de3-9943-04c546786ced/companyCertification.png \N \N \N \N \N \N 2020-09-07 16:00:07.952+08 2020-09-07 16:00:30.735+08 \N
+ade25a08-2f33-44ac-8a49-a4fe690e3a57 company 杭州予渔物联网技术有限公司 1234 http://images.theiota.cn/upload/companycert/19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2/52799fbf-aff4-44c3-a2f8-50555d2d29b1/companyCertification.png authenticated 予渔 320882151546461212 http://images.theiota.cn/upload/companycert/19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2/792dde2b-0819-4d4b-be7c-b398bfea5aa1/companyCertification.png http://images.theiota.cn/upload/companycert/19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2/9f8ee23b-9604-4775-ba9b-89179ad9d4cc/companyCertification.png \N \N \N \N \N \N 2020-09-11 14:32:56.667+08 2020-09-11 14:33:23.096+08 \N
+b5ea9716-5d8c-450c-971e-33e25652dea1 company 云享空间测试 1234 http://images.theiota.cn/upload/companycert/f9927e7e-69c2-439e-916f-4981e6821dfa/9dd4fa8d-6257-4fca-8259-36f048cb539d/companyCertification.png authenticated 东皇太一 320882000000001314 http://images.theiota.cn/upload/companycert/f9927e7e-69c2-439e-916f-4981e6821dfa/f64e4b20-003f-4c91-9dcb-2af681a30d46/companyCertification.png http://images.theiota.cn/upload/companycert/f9927e7e-69c2-439e-916f-4981e6821dfa/a85446fe-c31e-41d2-abb8-229c61d77d49/companyCertification.png \N \N \N \N \N \N 2020-10-10 10:45:21.527+08 2020-10-10 10:45:41.897+08 \N
+5646c79d-1071-4fa1-ba75-ffc8abf95e65 company 南京工业大学 343435453252 http://images.theiota.cn/upload/companycert/55ecba2d-f3da-4ebb-b58d-7cc16522faad/187119fb-1bda-4802-98cf-5bc596f06fe9/companyCertification.png authenticated 申志福 120344198708012345 http://images.theiota.cn/upload/companycert/55ecba2d-f3da-4ebb-b58d-7cc16522faad/7708e325-6d00-4afd-9f8d-0643b811bc27/companyCertification.png http://images.theiota.cn/upload/companycert/55ecba2d-f3da-4ebb-b58d-7cc16522faad/56269167-805a-40d9-8c1a-3c9189bef589/companyCertification.png \N \N \N \N \N \N 2020-10-30 16:38:40.952+08 2020-10-30 16:38:51.889+08 \N
+b368dca7-d851-4853-bf37-d16c775a9d9e company 有数(深圳)智能科技有限公司 343435453252 http://images.theiota.cn/upload/companycert/eb348dfa-0075-47b5-b190-4e10b6c5c6be/551335c0-9173-47d1-91f8-cd4ce7de955e/companyCertification.png authenticated 杜总 120344198708012345 http://images.theiota.cn/upload/companycert/eb348dfa-0075-47b5-b190-4e10b6c5c6be/3b78b679-6fa8-42a1-9dde-eadb654b0131/companyCertification.png http://images.theiota.cn/upload/companycert/eb348dfa-0075-47b5-b190-4e10b6c5c6be/3f75f573-9990-4ab0-8a47-c5579ddd2219/companyCertification.png \N \N \N \N \N \N 2020-12-11 16:46:03.399+08 2020-12-11 16:46:38.615+08 \N
+ce4fbec7-4440-489a-be8b-fd328339df21 company 同济大学 343435453252 http://images.theiota.cn/upload/companycert/5dfa1ffb-543a-43a7-9de1-30f0303e05d1/6a8b1102-b542-4ac4-9190-024f276ce2d5/companyCertification.png authenticated 洪工 120344198708012345 http://images.theiota.cn/upload/companycert/5dfa1ffb-543a-43a7-9de1-30f0303e05d1/a8e9c51b-40be-4c14-adf9-921bd1a89c3b/companyCertification.png http://images.theiota.cn/upload/companycert/5dfa1ffb-543a-43a7-9de1-30f0303e05d1/11b11bc9-ab30-4944-baa7-deed8503bc00/companyCertification.png \N \N \N \N \N \N 2020-12-11 15:40:09.446+08 2020-12-11 15:40:46.613+08 \N
+995100fe-ae10-4774-a39f-817f580c578c company 安测仪器设备有限公司 343435453252 http://images.theiota.cn/upload/companycert/7471567c-43bd-422d-9d05-9742a9a517c5/775d5f37-7c59-4efe-b47d-449d4208ebe2/companyCertification.png authenticated 柳总 120344198708012345 http://images.theiota.cn/upload/companycert/7471567c-43bd-422d-9d05-9742a9a517c5/02c87770-e416-4d5d-a375-8216f882055f/companyCertification.png http://images.theiota.cn/upload/companycert/7471567c-43bd-422d-9d05-9742a9a517c5/94ebba6d-3340-4dfa-8bca-4253b34b8983/companyCertification.png \N \N \N \N \N \N 2020-12-17 09:57:09.645+08 2020-12-17 09:59:33.433+08 \N
+d1c2b73f-7215-4523-bb92-43041584ab1a company 湖北三思科技股份有限公司 343435453252 http://images.theiota.cn/upload/companycert/9f26c140-684e-41f5-80a9-b0c1f660b9f7/c6b37b48-67e8-48b2-a1a9-c036ae429c98/companyCertification.png authenticated 皮卡丘 120344198708012345 http://images.theiota.cn/upload/companycert/9f26c140-684e-41f5-80a9-b0c1f660b9f7/d2f35106-cc68-45ac-b2e8-603f7f0ae139/companyCertification.png http://images.theiota.cn/upload/companycert/9f26c140-684e-41f5-80a9-b0c1f660b9f7/0bda2c40-a2b6-4c19-9ac0-6fe98bb5eca0/companyCertification.png \N \N \N \N \N \N 2020-12-22 09:47:20.746+08 2020-12-22 09:48:27.909+08 \N
+3b23d906-05d9-484e-9f08-7a68831770e8 company 北京城安在线科技有限公司 343435453252 http://images.theiota.cn/upload/companycert/17e2c509-1128-42d6-89b5-5058d7a2a5cd/ac040d59-0b15-4e41-b221-91de5865086d/companyCertification.png authenticated 杨柯 120344198708012345 http://images.theiota.cn/upload/companycert/17e2c509-1128-42d6-89b5-5058d7a2a5cd/b8e66a0c-baae-4fd1-933b-630ff0a6944e/companyCertification.png http://images.theiota.cn/upload/companycert/17e2c509-1128-42d6-89b5-5058d7a2a5cd/82f37bc2-ce63-45b5-a5af-60a0062379ca/companyCertification.png \N \N \N \N \N \N 2020-12-24 17:32:30.801+08 2020-12-24 17:32:53.635+08 \N
+9d5e90d5-269a-4683-9010-34bd32ed70f6 company 天津大学 343435453252 http://images.theiota.cn/upload/companycert/256d53e2-0a91-4903-9753-736649588b98/685bfca6-900c-4663-bb42-4d202c048c53/companyCertification.png authenticated 徐杰 120344198708012345 http://images.theiota.cn/upload/companycert/256d53e2-0a91-4903-9753-736649588b98/30bd15b2-c89e-4adf-bd55-d415eb51f070/companyCertification.png http://images.theiota.cn/upload/companycert/256d53e2-0a91-4903-9753-736649588b98/39a046af-4e66-4ed1-ac8b-aee462f89a1a/companyCertification.png \N \N \N \N \N \N 2021-01-04 09:56:09.502+08 2021-01-04 09:57:48.808+08 \N
+897e5bb1-9d4c-484c-b565-397bd37d5c55 company 华东勘测设计研究院有限公司 343435453252 http://images.theiota.cn/upload/companycert/611a5d96-e77e-4ca6-925d-30609b1f57df/59496fb6-87da-4591-8d9a-80cf3578cde9/companyCertification.png authenticated 冯磊 120344198708012345 http://images.theiota.cn/upload/companycert/611a5d96-e77e-4ca6-925d-30609b1f57df/dfead645-b692-4fc2-8864-c1af4d223a6c/companyCertification.png http://images.theiota.cn/upload/companycert/611a5d96-e77e-4ca6-925d-30609b1f57df/5a2160c6-3c1d-4a9e-8f6e-eb9410addc8d/companyCertification.png \N \N \N \N \N \N 2021-01-08 14:03:01.676+08 2021-01-08 14:03:35.462+08 \N
+\.
+
+
+--
+-- Data for Name: Dashboard; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Dashboard" (id, colspan, height, type, source, option, "createdAt", "updatedAt", "userId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: Device; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Device" (id, name, properties, "createdAt", "updatedAt", "thingId", "deviceMetaId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: DeviceCapability; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."DeviceCapability" (id, properties, "createdAt", "updatedAt", "deviceId", "capabilityMetaId", "deviceInterfaceId", "protocolMetaId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: DeviceCertification; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."DeviceCertification" (id, status, reason, "createdAt", "updatedAt", "userId", "deviceMetaId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: DeviceInterface; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."DeviceInterface" (id, properties, "createdAt", "updatedAt", "deviceId", "deviceMetaInterfaceId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: DeviceMeta; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."DeviceMeta" (id, name, "createBy", "belongTo", investor, public, image, model, "desc", "createdAt", "updatedAt", "vendorId", category) FROM stdin;
+98a8fd6f-cab9-47d3-88aa-8832962c931c 测试设备 c5fbd9dd-297a-43f9-8d5d-343ec75239dc c5fbd9dd-297a-43f9-8d5d-343ec75239dc c5fbd9dd-297a-43f9-8d5d-343ec75239dc f 1 测试设备 2017-09-19 16:23:55.22+08 2017-09-19 16:23:55.22+08 \N 0
+cff552ac-d565-4a44-8400-e0f4382ce853 光照传感器 e3655afc-a2a8-4bc3-801a-9c3019705a27 e3655afc-a2a8-4bc3-801a-9c3019705a27 e3655afc-a2a8-4bc3-801a-9c3019705a27 t RY-G/W 锐研智华 2017-11-16 13:50:55.914+08 2017-11-30 11:43:13.97+08 82af10d4-f6f0-4e09-84ce-7053d4b42940 0
+345d6324-7330-4d26-a786-a6823849f483 Kafka fc6bae74-2409-47c4-8374-d3673978188a fc6bae74-2409-47c4-8374-d3673978188a fc6bae74-2409-47c4-8374-d3673978188a f 1 测试Kafka 2017-11-30 15:01:46.296+08 2017-11-30 15:01:46.296+08 \N 0
+0357e07d-3afb-4d4b-b196-766688a5b2b2 拉杆式位移计 a5f54e1b-45e0-47fd-a9f4-92ee009430ab a5f54e1b-45e0-47fd-a9f4-92ee009430ab a5f54e1b-45e0-47fd-a9f4-92ee009430ab t LWF-150-R5* 上海江晶翔拉杆式位移计 2017-09-16 12:22:16.684+08 2017-10-10 11:48:01.032+08 6c43ca35-bfee-404e-afa5-8cc4ca7fb92f 0
+6888837c-236d-4a0a-871e-ea506429a386 振弦采集仪 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f FS32 2017-08-12 17:28:55.296+08 2017-10-23 10:40:32.96+08 \N 0
+26ceb3f3-78b3-4b0a-910b-a5bc39218370 abc工业级 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f 1 2017-11-09 11:07:51.823+08 2017-11-09 11:07:51.823+08 \N 0
+8015ec05-fd08-4afb-b018-3bc916702f96 DTU fe6555a4-48c2-4354-b5b3-ab13f7ff2b16 fe6555a4-48c2-4354-b5b3-ab13f7ff2b16 fe6555a4-48c2-4354-b5b3-ab13f7ff2b16 t CM6550P/CM6560P 2017-11-13 17:17:59.765+08 2017-11-13 17:34:05.113+08 74c38e2c-4971-46b3-bee6-8a51f116213a 0
+9e56c900-b85f-4abd-b53f-3162016875ad 表面智能数码弦式应变计 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c t JMZX-212HAT 搭配金码新型总线采集仪 无公式 采集仪上来就是数据 2018-01-05 18:09:59.81+08 2018-03-29 09:31:36.405+08 941c9c57-031c-4e4c-9a2b-5e544e387274 4
+04cb319d-9e45-4534-8be6-5f1f4aef7740 气体浓度监测仪 0d656fb5-b8d8-4066-8dd1-d2e46cf1707b 0d656fb5-b8d8-4066-8dd1-d2e46cf1707b 0d656fb5-b8d8-4066-8dd1-d2e46cf1707b f EX-14 2017-11-29 09:23:59.543+08 2017-11-29 09:23:59.543+08 \N 0
+831ab1f7-fe76-4152-b7a0-3359bdf7c3bd 静力水准仪 619160fc-a159-4566-9781-9e2c2f217324 619160fc-a159-4566-9781-9e2c2f217324 619160fc-a159-4566-9781-9e2c2f217324 t jct2100 2017-09-16 14:12:58.163+08 2017-10-10 11:47:12.712+08 6327bc29-4615-4eda-aa87-f534d179265f 0
+f86c7d29-f504-474d-8665-d484e5c41e8a CO2传感器 e3655afc-a2a8-4bc3-801a-9c3019705a27 e3655afc-a2a8-4bc3-801a-9c3019705a27 e3655afc-a2a8-4bc3-801a-9c3019705a27 t RY-VS09 锐研智华 2017-11-16 17:03:23.898+08 2017-11-21 17:25:47.85+08 82af10d4-f6f0-4e09-84ce-7053d4b42940 0
+be246ea1-fd75-4151-92c6-54b278d11287 温湿度变送器 ed254182-aeaf-4f3c-9ee6-480154f64cae ed254182-aeaf-4f3c-9ee6-480154f64cae ed254182-aeaf-4f3c-9ee6-480154f64cae t JCJ107XT 北京九纯健科技发展有限公司温湿度变送器 2017-09-29 15:08:42.922+08 2017-10-10 11:48:11.155+08 e3ca47a2-cd34-4d73-8fd7-18ce41c58460 0
+bd742efe-04d8-4e90-9799-dd3830baf3ca 光照度传感器 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 f DZD-T8W1 2017-11-29 18:00:44.737+08 2018-01-11 10:10:36.62+08 \N 4
+a300435b-3982-4694-aab4-48ba853d838e 裂缝计 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc t HY-65B5000 华岩裂缝计 2017-11-17 09:33:02.95+08 2018-12-28 11:16:20.902+08 e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5 4
+1fbfe6ef-ffff-4bd9-936a-67d9665006be DTU fe6555a4-48c2-4354-b5b3-ab13f7ff2b16 fe6555a4-48c2-4354-b5b3-ab13f7ff2b16 fe6555a4-48c2-4354-b5b3-ab13f7ff2b16 t CM3150P/CM3160P 2017-08-24 15:25:01.49+08 2017-11-13 17:33:49.086+08 74c38e2c-4971-46b3-bee6-8a51f116213a 0
+f8ec9655-408b-46e4-96f3-a8fcc382230a DTU fe6555a4-48c2-4354-b5b3-ab13f7ff2b16 fe6555a4-48c2-4354-b5b3-ab13f7ff2b16 fe6555a4-48c2-4354-b5b3-ab13f7ff2b16 t CM510-21H/T/F 2017-11-13 17:20:33.764+08 2017-11-13 17:34:08.823+08 74c38e2c-4971-46b3-bee6-8a51f116213a 0
+abb38d23-09f3-48fc-b9ee-4dfaf1db995b PM2.5检测仪 ff0414b7-505b-4d85-bb09-f99bac5262a1 ff0414b7-505b-4d85-bb09-f99bac5262a1 ff0414b7-505b-4d85-bb09-f99bac5262a1 t HCT-300 气体探测器 2017-10-31 15:05:36.875+08 2017-12-12 11:39:23.267+08 3a8d9a71-ba47-4661-add4-fef01940e609 0
+e08c86d5-195d-4cf6-a1a5-1cfd113ddd52 静力水准仪 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 t YH02-E10 2017-12-04 13:47:01.121+08 2017-12-21 10:55:49.325+08 1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa 4
+131c98fc-2216-4f0f-9cd3-581d88f9affd 温湿度传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-WSD-01M 江西飞尚科技有限公司温湿度传感器 2017-08-26 15:51:32.525+08 2019-07-23 21:31:53.71+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+7e6111e8-0a68-4af8-92ae-6238b7f3c631 单轴倾角仪 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 t RF-LCA316T 固定测斜仪 2017-09-19 20:20:53.697+08 2018-03-29 14:24:32.214+08 19a42196-a096-4d6a-84d1-67d7c3030605 4
+584a210b-20f2-49cf-906a-9d6b4883af09 压力变送器 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 t MPM47xx[0~2000kpa] 麦克传感器股份有限公司数字液压变送器 2017-09-06 18:47:18.536+08 2019-01-02 10:51:46.239+08 06a180f1-88d0-4ef8-800f-c9175f55215d 4
+0cbe0018-ac32-4dfd-ba20-7c6e9658a553 智能孔隙水压计 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c t JMZX-5510HAT 2018-01-05 17:57:19.717+08 2018-03-29 09:31:31.511+08 941c9c57-031c-4e4c-9a2b-5e544e387274 4
+e2d93988-c0e0-4581-b406-e43e455f7864 风速仪 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M11 2017-11-29 00:32:41.319+08 2018-01-09 11:30:28.642+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+d08c2f42-3528-4b5f-9f34-04deac7051c1 111 00cf911c-3531-4665-a358-3d31d36f0bdd 00cf911c-3531-4665-a358-3d31d36f0bdd 00cf911c-3531-4665-a358-3d31d36f0bdd f 111 2018-01-09 21:37:46.419+08 2018-01-09 21:37:46.419+08 \N 1
+666e753c-f0b0-478d-b5f5-839117db13f9 激光位移传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t T16 2018-01-08 16:27:56.724+08 2018-01-09 11:30:18.91+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+823921c0-40e3-46c6-809c-804adcf828ce 温湿度变送器 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 f DWS-T5 2017-11-29 17:55:29.398+08 2018-01-11 09:35:13.78+08 \N 4
+fd3ad887-4a33-4d80-b3bb-d5d48ced0e7b 双轴倾角仪 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 t RF-ACA826T 北京瑞芬星通科技双轴倾角仪协议 2017-09-22 17:34:24.729+08 2018-03-29 14:24:34.529+08 19a42196-a096-4d6a-84d1-67d7c3030605 0
+2420aadc-c220-4ce6-bfe9-c21d79ce827f 雨量计 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 f DYL-T*W1/3 2017-11-29 17:57:56.239+08 2018-01-11 17:51:46.383+08 \N 4
+31ec0204-1cc6-475a-bd8b-39ad4cda3a25 DTU_11011301 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f CM1306EP 2017-08-28 11:19:40.966+08 2017-08-28 11:19:40.966+08 \N 0
+99e46759-26c1-4aa3-8e57-9818fc111906 abc采集 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f 1 2017-10-31 17:57:38.19+08 2017-10-31 17:57:38.19+08 \N 0
+eb1c1781-cea9-411f-8c15-39aafc8ee62c 压力传感器 2b45f147-f84e-43e1-9a5c-39ffe5f7c52c 2b45f147-f84e-43e1-9a5c-39ffe5f7c52c 2b45f147-f84e-43e1-9a5c-39ffe5f7c52c t OPINE-2088 2017-09-16 15:21:21.412+08 2017-10-10 11:47:24.75+08 f755e725-5da2-4b87-b08d-d65d8baf825c 0
+d3245ff1-0781-49bd-b37c-e245a350a709 单轴倾角仪 5c2a5b34-3127-4921-bf54-49378012c0b0 5c2a5b34-3127-4921-bf54-49378012c0b0 5c2a5b34-3127-4921-bf54-49378012c0b0 t EAC-TCQ-2 北京东方中恒科技单轴倾角仪 2017-09-25 10:44:21.658+08 2017-10-10 11:47:43.324+08 d333c854-fe3b-4c2a-80d1-6ad0360dcbd6 0
+409f2510-dd44-4990-b530-096bf2bcb592 位移传感器 a8a291bf-9873-4ca2-b876-bf54a06f38dd a8a291bf-9873-4ca2-b876-bf54a06f38dd a8a291bf-9873-4ca2-b876-bf54a06f38dd t SDMS 北京光电所 2017-12-04 14:33:34.372+08 2017-12-05 13:33:45.661+08 ef596a09-07a9-4dad-b937-090093da864b 0
+8ae3c80d-72ae-4e4f-b6e7-fd2dda6cc125 温湿压传感器 e3655afc-a2a8-4bc3-801a-9c3019705a27 e3655afc-a2a8-4bc3-801a-9c3019705a27 e3655afc-a2a8-4bc3-801a-9c3019705a27 t RY-WSY 锐研华测 2017-10-31 16:29:27.897+08 2017-11-13 16:34:27.013+08 82af10d4-f6f0-4e09-84ce-7053d4b42940 0
+c8b20fe8-531f-47aa-96cd-3d48ea0bc238 压力式水位计 df6e436e-e4a6-4b25-b1c7-175209753c0f df6e436e-e4a6-4b25-b1c7-175209753c0f df6e436e-e4a6-4b25-b1c7-175209753c0f t HR8003 2018-08-07 15:28:19.786+08 2018-08-10 17:17:13.813+08 77ef3aea-fa21-4060-b06d-7dbca886f953 4
+2e0d00cd-a321-4504-b716-41813848cbdb 内埋式应变计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-NM30 内埋式应变计 2018-03-26 11:16:13.086+08 2019-11-22 15:39:56.645+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+1d4b6c8a-8a37-4ba0-9612-ad63ea6f1f3a 风速风向采集仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-FLYINGWIS-CFF2D3H 江西飞尚风速风向仪 2017-09-04 14:12:42.458+08 2018-07-09 15:31:17.394+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+3bf186e9-5049-40e4-ba57-b40d90cd1543 温度传感器 111647f0-416f-4e83-83fa-846fa9806308 111647f0-416f-4e83-83fa-846fa9806308 111647f0-416f-4e83-83fa-846fa9806308 t DS18B20-TO-92 福州创思万维信息技术有限公司温度传感器 2017-09-25 10:54:34.157+08 2017-10-10 11:47:33.324+08 a788cc98-2cdf-451a-ad80-d370c161e448 0
+990ac51b-201f-4818-8ac0-06e9997719ed 测斜仪 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f FS1503 2017-08-12 17:30:28.129+08 2017-08-28 11:20:33.311+08 \N 0
+40b8c657-2644-4ce2-b490-cf61523a4012 激光测距仪 6414b423-5567-4672-ae65-db92b076e8e8 6414b423-5567-4672-ae65-db92b076e8e8 6414b423-5567-4672-ae65-db92b076e8e8 t YF-YJA03 2017-11-30 15:14:59.436+08 2017-12-20 14:26:52.461+08 4f26e7d9-d058-4d09-86dd-8264282fa0b0 4
+6c19e60e-0ed7-4e22-abb4-ddc9caf20d91 固定式测斜仪 91d43dcc-b4ec-4aba-91d9-2b1509cff4db 91d43dcc-b4ec-4aba-91d9-2b1509cff4db 91d43dcc-b4ec-4aba-91d9-2b1509cff4db t SST2200 量程(-30,30) 2017-12-06 10:37:27.461+08 2017-12-21 09:37:08.11+08 68250dfb-d57f-4895-9658-245ee80b2495 4
+bfc79caf-826f-4f9d-a709-241529e118b5 风速仪 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M12 2018-01-08 16:54:49.738+08 2018-01-09 11:29:54.691+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+f5d141ad-ea96-4398-8712-2a802af988f8 双轴倾角仪 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 t YH01-A30 2017-12-04 12:57:26.158+08 2017-12-21 10:54:41.606+08 1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa 4
+93f84dd4-087b-46ef-bdda-9db4adfdb16b 静力水准仪 3e663c2d-1b5c-4742-aef3-a0c1368cc4b3 3e663c2d-1b5c-4742-aef3-a0c1368cc4b3 3e663c2d-1b5c-4742-aef3-a0c1368cc4b3 t CYW11-L5 2017-11-30 13:55:54.566+08 2017-12-20 14:26:05.498+08 4e512f12-08de-4514-8da9-73b4b6c587f3 4
+d87be87a-12ba-4e65-97ba-816bcb3e2e62 数字式沉降仪 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T-510 上海隼星传感技术有限公司 2017-11-17 09:45:45.961+08 2018-02-12 10:17:17.004+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+b0a937d5-432e-4a49-b044-e4b66d649f52 自动化气象站 dbfb6012-f2a3-4e35-b214-d014eba687e4 dbfb6012-f2a3-4e35-b214-d014eba687e4 dbfb6012-f2a3-4e35-b214-d014eba687e4 t AWS013 2017-12-05 10:50:36.363+08 2017-12-21 10:38:46.847+08 60ac81b6-ad47-402a-8527-9d9e815b886a 4
+ed599be6-4811-4a09-a065-4b29586a4c00 CO探测器 26239c31-9c6a-4328-a8e8-625102c55e2d 26239c31-9c6a-4328-a8e8-625102c55e2d 26239c31-9c6a-4328-a8e8-625102c55e2d t CRGD-D01 2017-09-04 20:41:19.193+08 2018-01-05 10:26:55.16+08 ff2281cb-1d19-4ad7-a65d-f9f7f8ffe664 4
+fbc83633-74fd-494b-b1b7-75d289358b27 三轴加速度传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M65 2018-01-08 16:50:48.886+08 2018-01-09 11:29:37.054+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+2f8c4ab2-42a9-44d8-bd3d-cfa9d1f55252 PM2.5监测仪 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a f GRI-IAT_PM2.5 2017-12-01 15:00:04.212+08 2018-03-30 14:38:51.904+08 \N 4
+7c42d86a-5801-4ef2-94df-2b5c702ff7f5 变频器 28e14628-e071-41c6-a2b7-dca0773f996f 28e14628-e071-41c6-a2b7-dca0773f996f 28e14628-e071-41c6-a2b7-dca0773f996f f vL1000T0015g 2017-12-06 16:09:36.023+08 2018-11-19 17:00:58.36+08 \N 4
+80e5052f-477a-4e27-a3bc-0ec95ab3d4a2 三轴加速度传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M66 2018-01-08 16:50:48.383+08 2018-01-09 11:29:34.237+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+e8d9a100-9650-4afc-a260-9c7bcdea9263 压力变送器 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 t MPM47xx[-100~0kpa] MPM47xx[-100~0kpa] 2017-11-29 11:09:17.117+08 2019-01-02 10:51:56.268+08 06a180f1-88d0-4ef8-800f-c9175f55215d 4
+6629f27c-b28d-400b-9355-71e81a910b2b 法兰式温度一体化变送器 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 f DWB 迪辉旗下其他品牌 2017-11-29 17:46:58.789+08 2018-01-10 17:00:45.909+08 \N 4
+92d06569-3e06-4ceb-91e5-d28589632145 轴力计 fc6696f3-32e6-42c8-b8de-8409f5bfe865 fc6696f3-32e6-42c8-b8de-8409f5bfe865 fc6696f3-32e6-42c8-b8de-8409f5bfe865 t TL-FLJ 2018-01-08 11:44:22.147+08 2018-07-09 17:55:53.697+08 ff833378-60d7-444b-84a6-b01df07bd336 4
+a0bf9003-9dbd-4cc7-8bea-7da81ce69f32 LVDT裂缝计 e73ab0fd-f5f4-483f-be99-b076b25341d1 e73ab0fd-f5f4-483f-be99-b076b25341d1 e73ab0fd-f5f4-483f-be99-b076b25341d1 t SDVG12B 深圳市信为LVDT裂缝计 2017-09-04 19:04:13.324+08 2018-01-17 17:36:58.02+08 6ef6a382-2a9c-46f8-8c9a-4660c726bfdd 4
+16ca7eed-6c64-4c4b-a495-6c5f785b86cd 压力变送器 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 t MPM47xx[0~100kpa] 2017-11-29 15:24:41.533+08 2019-01-02 10:52:04.586+08 06a180f1-88d0-4ef8-800f-c9175f55215d 4
+a1a0ce1a-3883-4148-8bd7-a94ce938e39b DTU 064081fe-2c2c-40ca-9d46-c654a2adb949 064081fe-2c2c-40ca-9d46-c654a2adb949 064081fe-2c2c-40ca-9d46-c654a2adb949 t F2114 移动2G 2017-08-24 15:48:10.409+08 2019-07-11 16:48:33.03+08 28384069-379b-427a-8293-4558a6fdff7c 0
+5e052852-cf91-4092-8497-41556a0c10b8 采集仪 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f 111 2019-11-25 13:10:42.685+08 2019-11-25 13:10:42.685+08 \N 1
+aa9f0751-4576-42b2-b09b-a6c3959955df 十五要素自动气象站 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b t NHQXZ603 十五要素自动气象站 2017-09-16 16:10:09.698+08 2017-10-10 11:47:55.828+08 66a47769-cf2c-4708-bde1-48eae1617ade 0
+3f80f427-4615-44ae-b2e8-e783733d0ea5 激光粉尘仪 ff0414b7-505b-4d85-bb09-f99bac5262a1 ff0414b7-505b-4d85-bb09-f99bac5262a1 ff0414b7-505b-4d85-bb09-f99bac5262a1 t LD-5 2017-11-20 16:42:59.945+08 2017-11-21 09:25:35.605+08 3a8d9a71-ba47-4661-add4-fef01940e609 0
+cbc19e42-a8ba-4a12-83f9-6ef1469df546 123213213 a6791a14-ab8e-477e-aee9-4f340e7cf7bb a6791a14-ab8e-477e-aee9-4f340e7cf7bb a6791a14-ab8e-477e-aee9-4f340e7cf7bb f 12312312321 啊好的卡刷道具卡撒可见度撒扩大就开始大家ask好的卡视角的卡手机导航季卡圣诞节贺卡设计活动空间啊实打实接口和大师客户端就喀什的健康撒谎的空间撒谎的卡仕达卡仕达凯撒会打瞌睡的卡是大神带我i啊大家啊是 2017-09-30 11:42:38.202+08 2017-09-30 11:43:14.878+08 \N 0
+ec223bfa-7244-4458-8180-4205fd31ac24 多通道磁通量采集仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-CTL 2018-03-02 16:15:39.575+08 2019-11-25 15:27:06.066+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+ab34de76-f758-4311-8bfc-dc7054a58ecf 气体罗茨流量计 b4b3a303-1848-4507-bec8-d33983641e32 b4b3a303-1848-4507-bec8-d33983641e32 b4b3a303-1848-4507-bec8-d33983641e32 t LLQ-××(Z) 浙江苍南仪表集团有限公司气体流量计 2017-09-12 17:57:39.225+08 2017-09-12 17:57:39.225+08 90ff2cb3-6e2f-4da8-a666-8c59808d2b1b 0
+57bf451a-e6f5-4df5-a4a7-c2c42a46546f PM2.5PM10传感器 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b t NH179-PM 能慧科技 2017-11-23 10:44:00.873+08 2017-11-23 11:41:54.599+08 66a47769-cf2c-4708-bde1-48eae1617ade 0
+f1fc4840-f3c9-4752-a703-b0bef637f3ee 风向传感器 b8127c53-f372-4ef5-bad6-8520cde9e94f b8127c53-f372-4ef5-bad6-8520cde9e94f b8127c53-f372-4ef5-bad6-8520cde9e94f f YCT-FX 2018-03-05 10:59:51.135+08 2018-03-05 10:59:51.135+08 \N 4
+c094bbbe-bc2a-4223-bba7-539edb03d3b0 双轴倾角仪 24e71772-7488-412d-9acd-26a89f47937c 24e71772-7488-412d-9acd-26a89f47937c 24e71772-7488-412d-9acd-26a89f47937c t LVT426-90 无锡迈科传感科技有限公司双轴倾角仪 2017-09-20 16:26:18.669+08 2017-10-10 11:47:19.696+08 80c18b02-bea5-4076-b124-30d8f067dc78 0
+6f16c6fa-6d60-481b-95ec-e450227fe268 温湿度传感器 bf10bcff-4fbf-4292-a58d-eb368da87223 bf10bcff-4fbf-4292-a58d-eb368da87223 bf10bcff-4fbf-4292-a58d-eb368da87223 t HJ-TH802 2017-09-18 20:53:58.366+08 2017-10-10 11:47:29.651+08 c51f8de0-c442-4529-bbae-fe7df077f84e 0
+193a9dcf-959d-4cd5-a186-637c11ae97a0 温度传感器 ed254182-aeaf-4f3c-9ee6-480154f64cae ed254182-aeaf-4f3c-9ee6-480154f64cae ed254182-aeaf-4f3c-9ee6-480154f64cae t JCJ100R 九纯健温度传感器 2017-08-28 20:41:57.355+08 2017-10-10 11:48:08.029+08 e3ca47a2-cd34-4d73-8fd7-18ce41c58460 0
+f5e0fd8e-6d70-4dd7-830f-42efadf389f5 abc-测斜 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f 1 2017-10-31 18:02:48.563+08 2017-10-31 18:02:48.563+08 \N 0
+6d1f494d-6e60-4181-85ee-115ea3586c6d 测试 2f7acedd-a1ed-4f90-9cf5-fef0898cff9b 2f7acedd-a1ed-4f90-9cf5-fef0898cff9b 2f7acedd-a1ed-4f90-9cf5-fef0898cff9b f 测试 2017-10-07 20:50:21.222+08 2017-10-07 20:50:21.222+08 \N 0
+0c5d070d-fb83-4f78-acc0-a0bd12be6cc2 压力变送器 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 t MPM47xx[0~20kpa] 2017-11-29 11:10:16.84+08 2019-01-02 10:52:00.247+08 06a180f1-88d0-4ef8-800f-c9175f55215d 4
+5ce1bb8e-5512-48aa-9842-c5ea7754f340 风速传感器 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 f DFS-T 2017-11-29 17:32:42.13+08 2018-01-10 09:10:20.413+08 \N 4
+e889420f-f8d0-4e0d-aab2-1f2f965e75bb 激光测距仪 6414b423-5567-4672-ae65-db92b076e8e8 6414b423-5567-4672-ae65-db92b076e8e8 6414b423-5567-4672-ae65-db92b076e8e8 t YF-YJA10 2017-11-30 15:18:38.801+08 2017-12-20 14:26:47.032+08 4f26e7d9-d058-4d09-86dd-8264282fa0b0 4
+aa86893b-e991-4c57-94a7-b29e7349fe50 高精度数字称重变送器 e7d33a6c-15b9-405b-bf65-a6c054704291 e7d33a6c-15b9-405b-bf65-a6c054704291 e7d33a6c-15b9-405b-bf65-a6c054704291 t RW-PT01D 接模拟量设备 测力传感器柱式 LCS-C7(2-2000KN) 2017-12-06 15:17:54.523+08 2017-12-21 17:00:49.064+08 abe1595a-5e65-4b76-9b3b-b77ea9626c16 4
+7c4c667b-dbf0-4c9b-9d7d-7ad9b61b200e 双轴倾角仪 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M25 2017-11-29 00:29:38.334+08 2018-01-09 11:30:05.238+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+5bc92012-60a1-48ac-840f-575cb4e94c48 激光测距仪 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 t RLM-S02 2017-09-12 20:28:25.939+08 2018-01-05 16:40:18.396+08 7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc 4
+c7528fab-94f4-4110-9aaf-8964afa09c20 温湿度变送器 78cc8a41-1d48-4575-81ea-c08479cb15d4 78cc8a41-1d48-4575-81ea-c08479cb15d4 78cc8a41-1d48-4575-81ea-c08479cb15d4 t YT-DY-0102 长沙亿拓传感科技 2017-09-12 17:44:24.644+08 2018-01-05 10:31:24.713+08 f212e468-a42c-4a63-bdc8-93e5e9540fde 4
+42b1e83a-cc6f-4051-8187-75dab10af0b1 设备1 e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d f ttt ttt 2018-01-05 18:21:38.304+08 2018-01-05 18:21:38.304+08 \N 2
+6e9cc5a0-a0ab-49f5-bf77-13164ed09055 湿度变送器 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 f DHB-T*W1/3 2017-11-29 17:37:50.895+08 2018-01-10 16:17:56.254+08 \N 4
+55be82a9-bf1f-4e1d-bca3-d76fc60beca3 土壤温湿度传感器 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 f DSW-T2W 2017-11-29 17:43:55.651+08 2018-01-10 16:45:02.785+08 \N 4
+6f1f679a-d9b7-4fe3-945d-8b83105284a8 称重仪 9782b3cb-2975-4a3a-ab17-630d68c144dc 9782b3cb-2975-4a3a-ab17-630d68c144dc 9782b3cb-2975-4a3a-ab17-630d68c144dc t FS-TDXV 北京替帝西交通科技有限公司 2017-09-25 19:45:57.193+08 2018-05-09 17:03:54.182+08 de8b006d-85f7-4436-9c98-4d3e741fcc91 0
+13126536-b6af-48d0-b43e-25144b65dd8d 压力变送器 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 t MPM47xx[0~50kpa] 2017-11-29 11:11:42.614+08 2019-01-02 10:52:02.361+08 06a180f1-88d0-4ef8-800f-c9175f55215d 4
+65bd339b-0469-4019-8c96-55a6dbc6b697 激光测距仪 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 t CHT-GHLMXXC 武汉承拓电子科技有限公司激光测距仪 2017-09-12 18:08:25.075+08 2019-04-16 09:52:43.457+08 5f2040a8-8da6-4f79-bcb6-9b2480beea45 0
+f3ad3df8-e1ad-4e05-b479-185ac5ae8602 压力变送器 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 t MPM47xx[0~10kpa] 2017-11-29 11:09:49.4+08 2019-01-02 10:51:58.205+08 06a180f1-88d0-4ef8-800f-c9175f55215d 4
+af95a9b9-46f4-4714-b286-3b7a92ef7c43 d 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f f 1 2018-08-09 08:30:07.955+08 2018-08-09 08:30:07.955+08 \N 0
+337651d1-80e3-4b07-9e87-79d5e20547aa DTU c2df3138-3fc0-4bba-ad0d-80e892055123 c2df3138-3fc0-4bba-ad0d-80e892055123 c2df3138-3fc0-4bba-ad0d-80e892055123 t H7210 2017-08-24 15:39:23.246+08 2017-11-13 17:46:25.919+08 bb73aebb-0d8d-49b2-80d9-b2d909e304a1 0
+b1b251a9-2555-415d-996f-88df44f4df3c xx e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d f ddd 2018-01-08 12:02:17.327+08 2018-01-08 12:02:17.327+08 \N 1
+6bd546bc-55b0-4ee4-8b58-34feec8cdb6c 液位变送器 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 t MPM47xx[0~5mH2O] 2017-11-29 15:40:18.338+08 2019-01-02 10:52:09.109+08 06a180f1-88d0-4ef8-800f-c9175f55215d 4
+5fc4a5d5-9307-4ab0-9fb1-7f017c432911 风速传感器 b8127c53-f372-4ef5-bad6-8520cde9e94f b8127c53-f372-4ef5-bad6-8520cde9e94f b8127c53-f372-4ef5-bad6-8520cde9e94f f YCT-FS 2018-03-05 09:35:14.826+08 2018-03-05 10:26:08.011+08 \N 4
+65f4e736-8261-40cc-b3b8-948ab0e4252e 液位变送器 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 t MPM47xx[0~50mH2O] 2017-11-29 15:47:20.462+08 2019-01-02 10:52:11.585+08 06a180f1-88d0-4ef8-800f-c9175f55215d 4
+3b4d2618-c6ec-4efc-a159-501ad68fd36e 测微计 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f 111 2019-11-25 13:12:43.513+08 2019-11-25 13:12:43.513+08 \N 4
+c52cea56-d5aa-4b14-ad9f-05fb6974e528 双轴倾角仪 2a9970fa-f04b-4c68-b35f-0b4ce65eecac 2a9970fa-f04b-4c68-b35f-0b4ce65eecac 2a9970fa-f04b-4c68-b35f-0b4ce65eecac t QXJH1 天海科 2017-11-06 11:16:45.182+08 2017-11-07 09:41:36.267+08 87ffcc1e-399b-4921-b6c6-068de960a5ed 0
+43e2a07a-c33e-4e54-ba5e-0a948ae4ba61 双轴倾角仪 2a9970fa-f04b-4c68-b35f-0b4ce65eecac 2a9970fa-f04b-4c68-b35f-0b4ce65eecac 2a9970fa-f04b-4c68-b35f-0b4ce65eecac t QXJH2 天海科 2017-11-06 15:04:16.8+08 2017-11-07 09:41:46.004+08 87ffcc1e-399b-4921-b6c6-068de960a5ed 0
+b6d1b7db-4a04-40af-a1e9-ed944a65b0b8 高温熔体压力传感器 49c6faf4-6972-4d51-9e7c-c6df38c9686c 49c6faf4-6972-4d51-9e7c-c6df38c9686c 49c6faf4-6972-4d51-9e7c-c6df38c9686c t GYC-1_MIK-RX6000C 2017-12-06 12:00:43.61+08 2018-03-29 09:29:48.917+08 d16cdfd2-9b57-4e88-9c4d-462a066f8642 4
+684a2261-481c-4504-9f4b-665baf97aae6 智能固定式测斜仪 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c t JMQJ-7430 搭配金码新型总线采集仪 2018-01-08 08:03:31.83+08 2018-03-29 09:31:28.732+08 941c9c57-031c-4e4c-9a2b-5e544e387274 4
+22d007b2-5200-4bf6-85dc-c755a7a75bcf 温度传感器 5f62fd39-0b72-492e-99be-308c935c1b64 5f62fd39-0b72-492e-99be-308c935c1b64 5f62fd39-0b72-492e-99be-308c935c1b64 t LTM8662 2017-12-01 09:59:04.581+08 2018-06-05 14:54:20.492+08 a1132fa4-352a-4b5e-b0e9-d2d4d0df290e 4
+d51cfe97-0f8a-4f38-95fb-34208b171056 气体涡轮流量计 5343c9e2-a32e-4c69-97bb-6e526464cb93 5343c9e2-a32e-4c69-97bb-6e526464cb93 5343c9e2-a32e-4c69-97bb-6e526464cb93 t KRN-KGT 承德热河克罗尼仪表气体涡轮流量计 2017-08-26 15:45:06.802+08 2017-08-26 15:45:06.802+08 901a8f49-757a-40c6-9c1a-81c0ee8dc70b 0
+b3014b29-7547-4c85-a147-7ab37d6c328f 高浓度CO2变送器 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 f DCO2-T3 原DCO2-T*W1/3 2017-11-29 16:58:58.182+08 2018-01-09 17:43:03.053+08 \N 4
+e015d9d3-542e-4d54-80c6-39db4ba20877 液位变送器 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 t MPM47xx[0~20mH2O] 2017-11-29 15:51:55.313+08 2019-01-02 10:52:14.174+08 06a180f1-88d0-4ef8-800f-c9175f55215d 4
+24b365fd-4e6e-4800-ad48-d3f082c9b2b8 液位变送器 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 t MPM47xx[0~100mH2O] 2017-11-29 15:56:44.935+08 2019-01-02 10:52:16.518+08 06a180f1-88d0-4ef8-800f-c9175f55215d 4
+f5c42818-e09f-4cb7-b7cb-63b18e8829a9 激光测距仪 6414b423-5567-4672-ae65-db92b076e8e8 6414b423-5567-4672-ae65-db92b076e8e8 6414b423-5567-4672-ae65-db92b076e8e8 t YF-YJA30 2017-11-30 15:25:27.882+08 2017-12-20 14:26:44.318+08 4f26e7d9-d058-4d09-86dd-8264282fa0b0 4
+8d1d1382-984f-4aa9-8e57-c2a2c21e0c06 无线温度传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M34 2017-11-29 00:28:40.923+08 2018-01-09 11:34:49.472+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+21d99b83-6a52-4465-90c4-125d8330e1c1 分体超声波液位计 f319cb97-0bfb-4e76-a02d-89c4ce98f5b4 f319cb97-0bfb-4e76-a02d-89c4ce98f5b4 f319cb97-0bfb-4e76-a02d-89c4ce98f5b4 t ML-F21 2017-12-06 14:12:59.635+08 2017-12-21 17:01:49.904+08 27a4762a-7072-4c30-b8a6-0a95b580755c 4
+5cb8cbd8-060a-431e-836d-22a0b745dc9f 设备一 3de70932-58e5-4e57-ae58-3d1fca145b71 3de70932-58e5-4e57-ae58-3d1fca145b71 3de70932-58e5-4e57-ae58-3d1fca145b71 f A01 2019-09-18 13:22:10.836+08 2019-09-18 13:22:10.836+08 \N 0
+0cffe018-1007-40ed-ac19-a399517129af A设备 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 f YEEJOIN 2018-01-22 10:20:44.454+08 2018-01-22 10:20:44.454+08 \N 2
+3462227d-e989-421c-9f48-c0ae7a573b78 液位变送器 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 t MPM47xx[0~3.5mH2O] 2017-11-29 15:35:17.588+08 2019-01-02 10:52:06.858+08 06a180f1-88d0-4ef8-800f-c9175f55215d 4
+e7a84149-53b0-4ba3-88e7-fe7e0e0f21d4 激光位移传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t T11 2017-11-29 00:26:45.981+08 2018-01-09 11:34:52.568+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+dfbedf15-8cef-4760-9cad-efaab883db3d 无线倾角反馈器 c418cbf6-8903-45be-a0da-bcccfeda9ac0 c418cbf6-8903-45be-a0da-bcccfeda9ac0 c418cbf6-8903-45be-a0da-bcccfeda9ac0 t XH600ML 西安兴航测控科技有限公司 2017-11-21 15:57:22.465+08 2018-07-23 11:37:52.546+08 f26ae825-10ca-4d2d-a941-201f9f663eea 4
+8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812 tomcat-172.16.10.152 e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d f apache-tomcat-7.0.75 apache-tomcat-7.0.75 2018-01-09 10:35:25.626+08 2018-01-09 10:35:25.626+08 \N 1
+cb339f74-5895-4180-a0dc-a3cf12151b0b 无线温度传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M35 2018-01-08 17:03:46.464+08 2018-01-09 11:29:25.726+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+217607ad-e8e6-4940-91ff-dc4d831cccbc 三轴加速度传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M61 2017-11-29 00:31:39.117+08 2018-01-09 11:30:31.719+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+97463615-eb6e-4836-86a1-a282e935ed5d 温湿度CO2光照变送器 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 f DWSCZ-T8 2017-11-29 17:49:21.388+08 2018-01-10 17:07:28.611+08 \N 4
+cb9d01e5-2af8-48b2-b522-4f7ae3a9dc6e 温湿度大气压变送器 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 f DWSP-T5 无公式 2017-11-29 17:52:19.002+08 2018-01-11 09:34:08.746+08 \N 4
+0df6f7cc-b408-4936-8fee-d5344c2d8ae9 思维2323 33cfce70-2dc8-4d0a-9ed1-8cd6e737117a 33cfce70-2dc8-4d0a-9ed1-8cd6e737117a 33cfce70-2dc8-4d0a-9ed1-8cd6e737117a f 3434 2018-01-17 13:45:21.829+08 2018-01-17 13:45:21.829+08 \N 0
+e833a38c-2409-474d-8d23-86ff4d45b199 激光测距仪 756e574c-b410-4312-99d3-13d78e3cde5a 756e574c-b410-4312-99d3-13d78e3cde5a 756e574c-b410-4312-99d3-13d78e3cde5a t SY-L01 深圳市七七星宇激光测距仪 2017-09-13 10:00:10.846+08 2017-09-13 10:00:10.846+08 5937e415-c322-42e4-bddb-3c509b8ac82e 0
+84747787-27a7-463d-bd03-9ee55d84fea0 雨量计 b8127c53-f372-4ef5-bad6-8520cde9e94f b8127c53-f372-4ef5-bad6-8520cde9e94f b8127c53-f372-4ef5-bad6-8520cde9e94f f YCT-YL 2018-03-05 10:52:42.552+08 2018-03-05 10:52:42.552+08 \N 4
+9604d366-28f8-4291-a5bd-5d049b1e90eb 气体浓度监测传感设备 352bd9cd-bfc9-433a-be60-afa9421c71bf 352bd9cd-bfc9-433a-be60-afa9421c71bf 352bd9cd-bfc9-433a-be60-afa9421c71bf t HJ-100 盐城恒嘉物气体浓度监测仪 2017-09-05 10:54:48.222+08 2017-09-05 10:54:48.222+08 17f054b5-a0bc-417d-98cc-cd33881d5f86 0
+7697d048-c21e-4b28-8c88-a59de01bae96 PC 475d6577-d638-4b9c-a4de-35f6ddd51240 475d6577-d638-4b9c-a4de-35f6ddd51240 475d6577-d638-4b9c-a4de-35f6ddd51240 f WIN7 gg 2018-01-26 09:39:05.299+08 2018-01-26 09:39:05.299+08 \N 1
+05d70310-6689-4174-b4ae-274ab5e8f287 光照传感器 cd7e9785-f93e-4d49-acf8-7ce7fe77c734 cd7e9785-f93e-4d49-acf8-7ce7fe77c734 cd7e9785-f93e-4d49-acf8-7ce7fe77c734 t QY-150A 光照度传感器 2017-09-06 20:01:37.332+08 2017-09-06 20:01:37.332+08 ddff4e34-2418-447f-b236-f346fd2beffe 0
+a8add874-7ace-4c3b-a044-8d6da02a9257 测试设备02 e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d f Test-002 测试设备02 2018-01-08 13:36:45.735+08 2018-01-08 13:36:45.735+08 \N 1
+39dc1e20-9e5e-4776-8459-5354261926fd 静力水准仪 5c2a5b34-3127-4921-bf54-49378012c0b0 5c2a5b34-3127-4921-bf54-49378012c0b0 5c2a5b34-3127-4921-bf54-49378012c0b0 t TCJ100 2017-08-31 16:57:12.36+08 2017-10-10 11:47:40+08 d333c854-fe3b-4c2a-80d1-6ad0360dcbd6 0
+fe65a1cd-2040-403c-bb6f-529d4063bc45 LVDT裂缝计 e73ab0fd-f5f4-483f-be99-b076b25341d1 e73ab0fd-f5f4-483f-be99-b076b25341d1 e73ab0fd-f5f4-483f-be99-b076b25341d1 t SDVH20 2017-11-28 16:54:43.321+08 2018-01-17 17:36:55.182+08 6ef6a382-2a9c-46f8-8c9a-4660c726bfdd 4
+34e17d2c-cfa7-42a7-88d0-fc64f13f68c2 温湿度传感器 5f62fd39-0b72-492e-99be-308c935c1b64 5f62fd39-0b72-492e-99be-308c935c1b64 5f62fd39-0b72-492e-99be-308c935c1b64 t LTM8901 2017-09-18 21:05:58.998+08 2017-10-10 11:47:46.327+08 a1132fa4-352a-4b5e-b0e9-d2d4d0df290e 0
+393862fc-cfec-404b-873d-c42f5e22bc61 高速动态称重采集仪 1b5ae589-18e9-4263-96b2-dd30c0357ae1 1b5ae589-18e9-4263-96b2-dd30c0357ae1 1b5ae589-18e9-4263-96b2-dd30c0357ae1 f QSY7718B 2017-11-10 14:03:39.822+08 2017-11-10 14:03:39.822+08 \N 0
+1c210656-dc67-470f-b8c3-d653c82e3bb0 固定盒式倾角仪 63e00acb-9caf-4e8b-9460-a5d7507278b7 63e00acb-9caf-4e8b-9460-a5d7507278b7 63e00acb-9caf-4e8b-9460-a5d7507278b7 f JR-D900 上海集睿信息科技有限公司固定盒式倾角仪 2017-09-21 10:57:18.417+08 2017-10-10 11:47:15.654+08 17f1fbd7-aae7-4114-8811-c4d078b171b3 0
+0c5bca0d-95b8-416e-865b-1f09bb49285f 倾斜计 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-8300 北京华鉴倾角传感器 2017-09-07 14:40:21.281+08 2018-06-14 15:01:20.214+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+8e782506-4bab-4798-9e24-315107e3cc15 液位计 53eab53b-1a19-4820-b536-c5c56fda6e6f 53eab53b-1a19-4820-b536-c5c56fda6e6f 53eab53b-1a19-4820-b536-c5c56fda6e6f t MP3530 上海蒙朗液位计 2017-09-06 19:30:23.422+08 2017-12-21 17:01:42.588+08 a74b3366-a96b-4ac5-90c6-e07851706a72 4
+38d818a3-1e2d-42bd-af74-e6ed5fe0c8fd 激光测距仪 6414b423-5567-4672-ae65-db92b076e8e8 6414b423-5567-4672-ae65-db92b076e8e8 6414b423-5567-4672-ae65-db92b076e8e8 t YF-YJA80 北京亚飞激光测距仪 2017-08-24 20:03:54.267+08 2017-12-20 14:26:55.818+08 4f26e7d9-d058-4d09-86dd-8264282fa0b0 4
+870242c3-963d-417d-85fa-21add06c9e0a 闭环磁通量传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-CCTB018 江西飞尚 2017-08-26 16:17:23.284+08 2019-06-14 09:57:20.662+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+a3b4fd36-dd87-463c-84af-254647a24cc5 双轴倾角仪 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M27 2018-01-08 17:10:40.66+08 2018-01-09 11:29:00.953+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+b3f251c1-ab5e-4427-8b38-9180d6544783 温湿度传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-WSD-01T 2017-08-28 21:20:45.552+08 2018-07-31 17:16:15.235+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+c9946e27-bce7-41eb-b341-d6b03a7f115f 固定杆式测斜仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GGC01 江西飞尚导轮式固定测斜仪 2017-09-04 09:36:21.614+08 2019-07-22 08:48:34.775+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+9110f259-e269-446d-afa3-798069f4534d 内埋式应变计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-NM15 振弦 采集仪 2017-08-26 15:59:26.836+08 2018-07-31 15:21:22.761+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+9e8050a9-f38a-45c3-a02b-40670bdf19b7 盒式固定测斜仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-HGC01 Modbus 盒式固定测斜仪 2017-08-28 20:27:04.091+08 2019-07-23 21:17:25.531+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+f9cf9002-bdbd-458c-8534-37db6183e217 激光测距仪 4544878d-c203-4924-a38f-5486d69d7613 4544878d-c203-4924-a38f-5486d69d7613 4544878d-c203-4924-a38f-5486d69d7613 t GLS-B40 激光测距仪 2017-09-08 09:20:57.922+08 2017-12-21 11:29:22.002+08 7ee73cad-16da-4534-8e6b-c7d587c2597f 4
+112843b4-e834-4892-9ef3-260fe3d90c24 静力水准仪 ff67841c-7b79-4928-90b3-6782e69c14e9 ff67841c-7b79-4928-90b3-6782e69c14e9 ff67841c-7b79-4928-90b3-6782e69c14e9 t CJ-40-SMS-P800 北京岩信静力水准仪 2017-09-02 14:31:47.759+08 2018-11-17 16:00:47.944+08 3f3e4806-08db-428f-9b63-a18f64c64081 4
+28abcb7f-eb40-406b-a798-fc280b30638e 双轴倾角仪 684052b5-3f7b-4e98-a4bd-2982f7d94203 684052b5-3f7b-4e98-a4bd-2982f7d94203 684052b5-3f7b-4e98-a4bd-2982f7d94203 t BWM426 无锡北微双轴倾角仪 2017-09-02 14:47:06.912+08 2018-01-09 11:40:11.496+08 b2f45a02-4a2f-49df-87e8-8e9b68269ebd 0
+8e812d09-7b95-4c07-ad74-d4c66104e7a7 振弦式拉伸式伸缩仪 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-9450 2018-01-08 08:30:38.752+08 2018-03-29 09:31:03.923+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+223ac440-c7b0-4005-8144-f33ce926d9bf 千斤顶式土压计 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-9820 2018-01-08 08:17:08.552+08 2018-03-29 09:31:26.139+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+0a25e0b7-784b-46fb-8fa3-d1a99593f343 激光测距仪 4f9eb22c-4ad8-4b77-a5a2-dc6eca00dd82 4f9eb22c-4ad8-4b77-a5a2-dc6eca00dd82 4f9eb22c-4ad8-4b77-a5a2-dc6eca00dd82 t FTM-50S 北京飞拓信达激光测距仪 2017-09-02 14:59:34.552+08 2018-03-16 11:28:53.479+08 11834ff5-6bb0-446f-91d0-1e2e48153c90 4
+ca7ff65b-b5a0-49f3-ad0b-6821012604ce 称重仪(含视频) ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-DLQ 江西飞尚大连称重仪(含视频) 2017-09-25 20:40:46.363+08 2018-05-09 17:27:22.03+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 0
+a8a32974-fa53-4e18-a264-58c885d3c409 声级计 f37cd019-7796-443e-9467-97aec7656620 f37cd019-7796-443e-9467-97aec7656620 f37cd019-7796-443e-9467-97aec7656620 t QY-ZS 邯郸开发区清易电子科技有限公司噪声传感器 2017-09-12 19:48:22.274+08 2017-09-12 19:48:22.274+08 7d219f94-2da6-4390-9a2f-828bdaf2519e 0
+d523046b-7e32-486b-a1ab-cac779eb6209 风速仪 f37cd019-7796-443e-9467-97aec7656620 f37cd019-7796-443e-9467-97aec7656620 f37cd019-7796-443e-9467-97aec7656620 t QY-FS 邯郸开发区清易电子科技有限公司风速仪 2017-09-13 09:13:35.734+08 2017-09-13 09:13:35.734+08 7d219f94-2da6-4390-9a2f-828bdaf2519e 0
+6850f742-c5b7-4984-b1ef-d01b16015eb9 电子水尺 467605c5-28cc-4c6b-ab24-05578bcf5197 467605c5-28cc-4c6b-ab24-05578bcf5197 467605c5-28cc-4c6b-ab24-05578bcf5197 t BRL700 西安北瑞三元仪表静力水准仪 2017-09-14 14:41:42.352+08 2017-09-14 14:41:42.352+08 4c1e5bf3-2258-4e8b-b1ed-49f91b4d2907 0
+ac3a0caf-7018-44d2-9337-32c7194ec412 氨气检测仪 d36cd0a0-873c-4592-9ab4-6712ff3d87cc d36cd0a0-873c-4592-9ab4-6712ff3d87cc d36cd0a0-873c-4592-9ab4-6712ff3d87cc t DTN660-NH3 深圳市华利奥电子氨气检测仪 2017-09-14 14:47:52.13+08 2017-09-14 14:47:52.13+08 047fe32b-391b-4e00-85df-440d3b30a0e0 0
+c1738ab8-25cd-4216-823d-0159c2d9fc82 温度计 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t HQWD 2018-08-15 17:13:27.441+08 2019-03-05 14:26:04.385+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+a96f169e-56b9-49c8-a5cd-caade25fbf14 甲烷检测仪 d36cd0a0-873c-4592-9ab4-6712ff3d87cc d36cd0a0-873c-4592-9ab4-6712ff3d87cc d36cd0a0-873c-4592-9ab4-6712ff3d87cc t DTN660-CH4 深圳市华利奥电子甲烷检测仪 2017-09-14 14:50:50.759+08 2017-09-14 14:50:50.759+08 047fe32b-391b-4e00-85df-440d3b30a0e0 0
+3415a2e9-2c44-402f-872c-f0187cef058f 硫化氢检测仪 d36cd0a0-873c-4592-9ab4-6712ff3d87cc d36cd0a0-873c-4592-9ab4-6712ff3d87cc d36cd0a0-873c-4592-9ab4-6712ff3d87cc t DTN660-H2S 深圳市华利奥电子硫化氢检测仪 2017-09-14 14:53:06.067+08 2017-09-14 14:53:06.067+08 047fe32b-391b-4e00-85df-440d3b30a0e0 0
+cdf69820-94cb-45a3-acfe-21aa83737595 磁致伸缩液位传感器 e4e8b9b9-ebc0-4555-a2d7-493f14ea8b07 e4e8b9b9-ebc0-4555-a2d7-493f14ea8b07 e4e8b9b9-ebc0-4555-a2d7-493f14ea8b07 t SPH-LS100-GM-1-005-M 上海萨法尔信息工程有限公司电感式变形测量传感器\t 2017-09-14 17:27:01.174+08 2017-09-14 17:27:01.174+08 ffc05365-a153-47ec-a7d9-d13bd3cf93d1 0
+2078f06f-be3c-4d10-90b1-200f3bdb00ae PCL/485变送器 33ff4c6f-7e37-416c-b813-7c2ec986afdf 33ff4c6f-7e37-416c-b813-7c2ec986afdf 33ff4c6f-7e37-416c-b813-7c2ec986afdf t PCL/485 广州起重机械有限公司 2017-09-14 19:37:28.661+08 2017-09-14 19:37:28.661+08 52b36a13-6a6b-47f0-83db-afdc362967ff 0
+92597060-2385-438d-8a9e-25fee05e4e31 盐分浓度传感器 bfb251a3-a9ca-40cd-bc85-9671b0d102f1 bfb251a3-a9ca-40cd-bc85-9671b0d102f1 bfb251a3-a9ca-40cd-bc85-9671b0d102f1 t MH-TYS 杭州迈煌科盐分浓度检测仪 2017-09-14 20:24:31.979+08 2017-09-14 20:24:31.979+08 03230a76-0bdd-4049-bbfc-e3dee78c4b6e 0
+80dbb37c-0408-4a0b-8ef5-dc1acd7c303b 大气负氧离子监测仪 67fa3de9-4f6e-4df8-9f2e-9a87d122aa68 67fa3de9-4f6e-4df8-9f2e-9a87d122aa68 67fa3de9-4f6e-4df8-9f2e-9a87d122aa68 t lon-BEST 重庆唐天大气负氧离子监测仪 2017-09-14 20:36:40.059+08 2017-09-14 20:36:40.059+08 b1288075-7ee2-4ec7-a49f-efe9848eb49a 0
+b00292b1-f8e5-46c1-808a-dff46e9557ff DTU fe6555a4-48c2-4354-b5b3-ab13f7ff2b16 fe6555a4-48c2-4354-b5b3-ab13f7ff2b16 fe6555a4-48c2-4354-b5b3-ab13f7ff2b16 t CM8150P/CM8250P/CM83 2017-11-13 17:20:19.311+08 2017-11-13 17:34:01.546+08 74c38e2c-4971-46b3-bee6-8a51f116213a 0
+a7c51497-66e3-4e63-aa6f-7b243fb8ea77 静力水准仪 d30f8980-fb5a-4dfa-a706-1dd2eb2e0e44 d30f8980-fb5a-4dfa-a706-1dd2eb2e0e44 d30f8980-fb5a-4dfa-a706-1dd2eb2e0e44 t HT-001 2019-08-13 17:52:48.297+08 2019-08-14 18:12:56.339+08 18e3930c-9d6c-4d92-b0f0-e781fb407078 4
+1c909cc1-bb51-4e83-824c-31fb278ce026 噪声仪 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f http://images.theiota.cn/upload/meta_devices/upload_2f0abccc70252e1c3d7ef9eb7cb5101c.png 111 2017-09-26 10:30:13.26+08 2017-11-23 17:25:52.849+08 \N 0
+180c854a-5ace-4044-babd-b270f98fde6b CLAA噪声 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 \N http://images.theiota.cn/upload/meta_devices/f16833ab-a4a4-45f5-9b39-ad2c66e488f6/69d0ee8e-d752-4520-bfea-8f9716613d77/device.png CLAA_Lora 中兴展厅, CLAA Lora协议 2017-08-28 19:10:01.737+08 2017-12-06 18:59:24.828+08 \N 0
+183c2cd5-5a53-4985-80aa-33a6ce2f82d4 倾角传感器 3da5d630-ee41-4e97-8ca6-0c3cc6c9c486 3da5d630-ee41-4e97-8ca6-0c3cc6c9c486 3da5d630-ee41-4e97-8ca6-0c3cc6c9c486 t PM-TSI/II-D 2017-12-07 11:43:58.681+08 2017-12-21 16:24:59.835+08 3b9938e0-6bf0-47c9-b7af-c61b5a7bdea4 4
+96870c78-2ed9-4141-9438-e9415cd6eeb8 倾角仪 52e1e749-befb-43b5-82a2-cc176deaef5b 52e1e749-befb-43b5-82a2-cc176deaef5b 52e1e749-befb-43b5-82a2-cc176deaef5b t ZCT260K-LBS-BUS-B1-3 2017-09-08 17:28:38.365+08 2017-12-11 11:10:47.95+08 bdebe97d-391f-4db6-bc26-a7f3fd6ac130 4
+497ca51c-dd0a-46cb-8651-ac4bb7bd45c0 智能温湿度变送器 345ebe97-ed2b-44ca-b5a3-8d0597ca4db1 345ebe97-ed2b-44ca-b5a3-8d0597ca4db1 345ebe97-ed2b-44ca-b5a3-8d0597ca4db1 t PKTH300A 2017-09-11 20:33:20.817+08 2017-12-21 16:55:19.24+08 f7eb4ae6-ce4d-4013-ab1e-5a49e96718eb 4
+cf03d97a-0c99-494f-821d-da2dc02126dc 基泰4通道振弦采集仪 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MCU-4D-ZX 2017-09-09 15:51:25.978+08 2018-05-10 17:50:25.147+08 a4ea8d4c-a663-48d2-a163-47085a402235 1
+ac32d002-0463-4bc7-a307-86236e6307a7 压力变送器 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 t MPM47xx[0~1000kpa] 2017-11-29 10:55:39.895+08 2019-01-02 10:51:48.214+08 06a180f1-88d0-4ef8-800f-c9175f55215d 4
+3c8c9002-2d60-43f0-9a2c-52daa53cab54 振弦式裂缝计 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-9420 2018-01-08 08:30:39.67+08 2018-03-29 09:31:01.912+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+5dcdefa3-da3c-4745-828c-d97fae30d82d 大气压传感器 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 f DQY-T5 原型号DQY-T*W1/3 2017-11-29 17:40:19.246+08 2018-01-10 16:38:57.228+08 \N 4
+b75d2a21-d798-498b-966f-75375c6967ff simulator 8938a232-4fc1-469a-8f34-6baad819d6d7 8938a232-4fc1-469a-8f34-6baad819d6d7 8938a232-4fc1-469a-8f34-6baad819d6d7 f 1 2018-11-28 15:02:30.522+08 2018-11-28 15:02:30.522+08 \N 4
+eccb6310-f340-4668-9469-3df210aa471d 水位计 467605c5-28cc-4c6b-ab24-05578bcf5197 467605c5-28cc-4c6b-ab24-05578bcf5197 467605c5-28cc-4c6b-ab24-05578bcf5197 t BRL500 西安北瑞三元仪表静力水准仪 2017-09-14 14:34:58.897+08 2019-07-11 16:58:01.249+08 4c1e5bf3-2258-4e8b-b1ed-49f91b4d2907 0
+b56e401a-75e7-47ea-84db-6638fd421792 静力水准仪 a8f32e64-9094-49d3-9da0-9a5abd4dd33d a8f32e64-9094-49d3-9da0-9a5abd4dd33d a8f32e64-9094-49d3-9da0-9a5abd4dd33d t NW-102 电感式变形测量传感器 2017-09-09 11:32:45.89+08 2018-07-04 12:35:21.114+08 485c9ff0-3616-4b61-a3a0-eab1e99472dd 4
+ae93a369-2ef8-4e20-83d6-d2f89076b115 固定测斜仪 fc6696f3-32e6-42c8-b8de-8409f5bfe865 fc6696f3-32e6-42c8-b8de-8409f5bfe865 fc6696f3-32e6-42c8-b8de-8409f5bfe865 t TL_GS230 非采集仪 2017-09-09 14:39:09.774+08 2018-07-10 10:48:33.42+08 ff833378-60d7-444b-84a6-b01df07bd336 4
+fd8e5a82-2b93-4d83-9132-4666b974079d 超声波风速风向仪 9f1dab8d-8776-4895-af81-ece24218042c 9f1dab8d-8776-4895-af81-ece24218042c 9f1dab8d-8776-4895-af81-ece24218042c t A60F-2D2 深圳市欧赛龙科技有限公司 2017-09-14 20:56:17.128+08 2017-12-21 16:52:25.594+08 d07843e8-b696-4b7d-87ad-502f03b59ec0 4
+5fcd559a-c3dc-4c38-acde-b4b1749b4ab3 PH变送器 ba38de11-b347-4100-a317-9c4c4a362f91 ba38de11-b347-4100-a317-9c4c4a362f91 ba38de11-b347-4100-a317-9c4c4a362f91 t PHG-202 2017-12-07 15:20:39.521+08 2017-12-21 15:52:13.124+08 857d131f-a356-42fe-b772-25f1efbc8f56 4
+8583cb29-4726-4532-9530-a5b338d3483c 激光测距仪 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 t RLM-S250 2017-12-08 15:30:34.563+08 2018-01-05 16:40:08.17+08 7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc 4
+4255e295-7830-45af-ab7c-44fee1668641 激光测距仪 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 t RLM-S70 2017-12-08 15:02:49.605+08 2018-01-09 11:38:25.505+08 7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc 4
+d32b2513-a8bb-465c-aabf-0832f355ef6b 双轴倾角仪(陀螺仪) 72b27c58-7a56-421c-ab86-abc0a0842cc7 72b27c58-7a56-421c-ab86-abc0a0842cc7 72b27c58-7a56-421c-ab86-abc0a0842cc7 f VG100 2017-09-19 20:40:00.04+08 2017-12-08 10:00:16.76+08 4cd4dbf8-c29d-429f-8128-50313b373292 4
+89ac2618-0c0c-45b5-a8a1-401e2c16189c 挠度沉降传感器 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t DEFRC65J 2018-08-09 14:40:14.947+08 2018-08-10 17:40:27.802+08 40f627af-dfd1-4cd2-9921-110d47d4461c 4
+24064f03-7c7e-493b-99f2-c926717d28fc 拉线式位移传感器 4d2bdba7-f602-4d5b-b066-82902bbc7472 4d2bdba7-f602-4d5b-b066-82902bbc7472 4d2bdba7-f602-4d5b-b066-82902bbc7472 t BL40 济南博林自动化设备有限公司 2017-12-12 10:23:59.537+08 2020-07-14 17:02:15.596+08 82be60e4-7d72-48fd-91ab-c8616819b103 4
+a30d283e-1af2-4531-ab6b-be1186799eea 固定杆式测斜仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GGC01O 老版本 2017-12-14 16:55:58.263+08 2018-07-23 17:15:59.682+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+efcb4c3e-fc6f-447b-8f73-3fdff1d77fc6 激光测距仪 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 t RLM-S60 2017-12-08 14:57:53.997+08 2018-01-09 11:38:27.966+08 7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc 4
+41da65aa-dd1b-4a8f-8758-13f624e45dad 温湿度变送器 59924975-bf9a-49ef-8bb4-239e5eb716f4 59924975-bf9a-49ef-8bb4-239e5eb716f4 59924975-bf9a-49ef-8bb4-239e5eb716f4 t WS302M2A-T4 T4 2017-12-13 13:40:01.317+08 2017-12-21 10:17:54.154+08 327eb1d2-7493-4c0b-b277-338edd768927 4
+b475bf8f-00a0-457f-ad96-95b187dba62f 温湿度变送器 59924975-bf9a-49ef-8bb4-239e5eb716f4 59924975-bf9a-49ef-8bb4-239e5eb716f4 59924975-bf9a-49ef-8bb4-239e5eb716f4 t WS302M2A-T2 T2 2017-12-13 13:21:56.906+08 2017-12-21 10:17:35.717+08 327eb1d2-7493-4c0b-b277-338edd768927 4
+14bab7df-524d-4a64-a618-23d4ebcc9b5e 激光测距仪 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 t RLM-S30 2017-12-08 14:54:02.525+08 2018-01-09 11:38:30.333+08 7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc 4
+8cf5725f-9e2d-447c-b261-cc810a1ed07b 1132 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f 11 2017-12-13 17:36:48.215+08 2017-12-13 17:36:48.215+08 \N 0
+ea797ffb-87b5-4e0a-8da4-7f627c347b2f 激光测距仪 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 t RLM-S200 2017-12-08 15:23:44.895+08 2018-01-09 11:38:37.023+08 7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc 4
+34424e2a-ca3d-47c4-8275-532ca1986c8c 千寻传输 a971c084-cc83-4e41-80f6-c8de9df9b9d6 a971c084-cc83-4e41-80f6-c8de9df9b9d6 a971c084-cc83-4e41-80f6-c8de9df9b9d6 f HTTP 2017-12-13 14:13:06.331+08 2017-12-14 16:54:22.228+08 \N 2
+10018134-99f1-486e-8071-dc652f44d152 温湿度变送器(温湿度传感器) 352a31c7-1e5e-4c52-85f6-2fa692d0fda9 352a31c7-1e5e-4c52-85f6-2fa692d0fda9 352a31c7-1e5e-4c52-85f6-2fa692d0fda9 t JWSK-6 2017-12-12 14:41:03.865+08 2017-12-21 10:13:18.193+08 c19672de-3563-44f5-9189-5ac688227e4c 4
+5cd62211-11dd-4deb-83bf-2873ae7dd42f 温湿度变送器 59924975-bf9a-49ef-8bb4-239e5eb716f4 59924975-bf9a-49ef-8bb4-239e5eb716f4 59924975-bf9a-49ef-8bb4-239e5eb716f4 t WS302M2A-T1 T1 2017-12-13 13:09:16.224+08 2017-12-21 10:17:01.181+08 327eb1d2-7493-4c0b-b277-338edd768927 4
+16f7e5ff-fb7a-4aa6-a701-9776f7638689 温湿度变送器 59924975-bf9a-49ef-8bb4-239e5eb716f4 59924975-bf9a-49ef-8bb4-239e5eb716f4 59924975-bf9a-49ef-8bb4-239e5eb716f4 t WS302M2A-T5 T5 2017-12-13 13:46:22.542+08 2017-12-21 10:18:00.185+08 327eb1d2-7493-4c0b-b277-338edd768927 4
+77d3bafd-4986-4848-b3c9-dfe847c6750e 双轴倾角仪 684052b5-3f7b-4e98-a4bd-2982f7d94203 684052b5-3f7b-4e98-a4bd-2982f7d94203 684052b5-3f7b-4e98-a4bd-2982f7d94203 t BWK226 2017-09-07 20:31:18.854+08 2017-12-21 16:44:37.087+08 b2f45a02-4a2f-49df-87e8-8e9b68269ebd 4
+405df805-9088-45a7-b4b2-763299e0c57b 超声波风速风向仪 d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe t CFF2D3H 深圳市智翔宇仪器设备有限公司 2017-12-12 11:55:07.928+08 2018-03-30 14:38:54.611+08 2978b1a9-8de8-4566-838d-04f7916573c1 4
+ef629030-d691-43fa-b6b4-b1465e60dace 流量计 10f6acf8-d569-4bb6-8f23-f97b1664d309 10f6acf8-d569-4bb6-8f23-f97b1664d309 10f6acf8-d569-4bb6-8f23-f97b1664d309 t FLTD-100C 富马 2017-12-11 15:27:02.991+08 2018-07-23 11:36:34+08 db67f5e1-713c-48f9-82f3-c2e24093b97f 4
+4d5a3f58-0eda-4443-9dcc-c64bb1785d88 气象传感器 39e9bd74-7ff5-4608-8f5a-6ec1fbfbf74c 39e9bd74-7ff5-4608-8f5a-6ec1fbfbf74c 39e9bd74-7ff5-4608-8f5a-6ec1fbfbf74c t WXA100-06M 2017-12-07 14:20:25.142+08 2017-12-21 15:57:12.947+08 db1d3a8b-3193-4d57-a9c2-eda69102115c 4
+7118fecd-555d-4d6c-9b3a-63b6ed0d2a45 超高精度双轴倾角传感器 684052b5-3f7b-4e98-a4bd-2982f7d94203 684052b5-3f7b-4e98-a4bd-2982f7d94203 684052b5-3f7b-4e98-a4bd-2982f7d94203 t BWS2000 2017-12-07 10:18:13.486+08 2017-12-21 16:44:40.397+08 b2f45a02-4a2f-49df-87e8-8e9b68269ebd 4
+dc5bdee9-14f3-4040-ad1c-faf008358890 激光测距仪 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 t RLM-S1000 2017-12-08 15:40:02.598+08 2018-01-05 16:40:11.794+08 7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc 4
+ceed540f-d7a3-48bc-b8d0-e861e21499a4 激光测距仪 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 t RLM-S100 2017-12-08 15:09:50.768+08 2018-01-05 16:40:14.467+08 7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc 4
+d2e5e59c-47f9-4eb9-98ce-c6dc6f2f0d66 激光测距仪 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 t RLM-S12 2017-12-08 14:40:29.003+08 2018-01-05 16:40:20.934+08 7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc 4
+0fc23377-9f3d-4511-ab1b-8b8df0259d2f 激光测距仪 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 t RLM-S12P 2017-12-08 14:49:12.879+08 2018-01-05 16:40:23.296+08 7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc 4
+ae356f39-ab83-4ac9-b847-31391780a6c5 sadfsdaf 06ca49bb-db4a-4d41-8b3d-ae74c93d9425 06ca49bb-db4a-4d41-8b3d-ae74c93d9425 06ca49bb-db4a-4d41-8b3d-ae74c93d9425 f asdfsda asdf 2018-03-12 17:55:34.54+08 2018-03-12 17:55:34.54+08 \N 4
+61db6668-b790-47e8-9429-55bfa4f98b90 粉尘检测仪 ff0414b7-505b-4d85-bb09-f99bac5262a1 ff0414b7-505b-4d85-bb09-f99bac5262a1 ff0414b7-505b-4d85-bb09-f99bac5262a1 t HCT-300-1 监测PM2.5、PM10.0和TSP 2017-12-14 14:22:34.574+08 2017-12-14 15:07:33.131+08 3a8d9a71-ba47-4661-add4-fef01940e609 4
+4d48086d-804a-426d-9867-0e87efdc74fe 静力水准仪 5c2a5b34-3127-4921-bf54-49378012c0b0 5c2a5b34-3127-4921-bf54-49378012c0b0 5c2a5b34-3127-4921-bf54-49378012c0b0 t TCCJ07-1 东方中恒 2017-12-18 10:57:40.195+08 2017-12-18 14:31:08.183+08 d333c854-fe3b-4c2a-80d1-6ad0360dcbd6 4
+7776a9dc-8e14-417c-a5fe-4b1dd1c869d7 千寻见微 a971c084-cc83-4e41-80f6-c8de9df9b9d6 a971c084-cc83-4e41-80f6-c8de9df9b9d6 a971c084-cc83-4e41-80f6-c8de9df9b9d6 t FindMM 2017-12-13 13:59:30.892+08 2017-12-18 17:15:45.518+08 25d5aac3-c08f-4378-9244-570cf8a1cb3e 4
+6af0f3be-6cb5-43c8-a588-490e10fdf4b7 温湿度传感器 414bf334-23bf-4e6d-aa00-230325261d81 414bf334-23bf-4e6d-aa00-230325261d81 414bf334-23bf-4e6d-aa00-230325261d81 t YY-TF100 2017-12-21 16:37:36.666+08 2017-12-21 16:51:40.725+08 c787fe3f-81b1-443e-bcc2-f95da51465cd 4
+7e5507c8-b21b-47c0-b9de-f79f09875fc7 扬尘设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t HC-500 合肥汇宸智能控制有限公司 2019-11-25 17:26:39.995+08 2019-11-25 17:28:50.279+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+1ac45c30-affc-479b-8ad6-3d63d1fa33f3 气象站 e54b85b0-151e-4b74-b360-a8ae65addd46 e54b85b0-151e-4b74-b360-a8ae65addd46 e54b85b0-151e-4b74-b360-a8ae65addd46 f NL-GPS-26 锦州阳光气象科技有限公司 2017-12-20 10:35:00.76+08 2017-12-20 10:35:00.76+08 \N 4
+cd5e889f-775b-446c-9ffe-e2d8eeceaaa0 温湿传感器 6aecaca4-ae30-42e7-9963-28713a74a311 6aecaca4-ae30-42e7-9963-28713a74a311 6aecaca4-ae30-42e7-9963-28713a74a311 f X001 2017-12-20 15:39:26.987+08 2017-12-20 15:39:26.987+08 \N 4
+5e7775c1-0766-436e-b701-b1102833b98d 轴力计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ZL30 配套 飞尚 多通道振弦采集仪 2018-01-23 14:46:19.404+08 2019-11-26 10:18:43.468+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+701ab719-e85b-4428-ad59-1b7adff31c56 静力水准仪 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 t HCCS-HC 上海华测创时测控科技有限公司 2017-12-18 17:23:33.713+08 2018-03-08 17:28:43.503+08 7c4ecd66-e051-42e2-87c7-2df59811c9e3 4
+ac8a15b2-1daa-48ce-b77f-52e2429c66bd CO大气监测仪 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a f GRI-IAT_CO 2017-12-20 13:59:41.238+08 2018-03-30 14:38:46.707+08 \N 4
+5e96e066-3520-443f-80a4-9a3a1a7badd6 PM10监测仪 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a f GRI-IAT_PM10 2017-12-20 13:51:02.564+08 2018-03-30 14:38:44.125+08 \N 4
+676795c3-0d71-441d-aa0e-62b82dff8193 SO2监测仪 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a f GRI-IAT_SO2 2017-12-20 14:03:22.667+08 2018-03-30 14:38:49.178+08 \N 4
+1cdf6eb6-fcd9-4346-992d-6ddc41b956cf 温度监测仪 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a f GRI-IAT_WD 2017-12-01 15:05:58.342+08 2018-03-30 14:38:40.388+08 \N 4
+6bf32a53-c1d4-4014-b0b9-da1af43bda76 NO2监测仪 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a f GRI-IAT_NO2 2017-12-20 15:25:01.207+08 2018-03-30 14:38:37.839+08 \N 4
+2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b 网络型温湿度传感器 42ed9887-912b-4ce0-b062-3f3e0c22fa74 42ed9887-912b-4ce0-b062-3f3e0c22fa74 42ed9887-912b-4ce0-b062-3f3e0c22fa74 t TH-802 2017-12-12 14:08:56.82+08 2017-12-21 10:05:14.545+08 6069ac3a-b89b-49a3-9472-d2a4a093a479 4
+63b7958b-9b1b-49ca-b01c-62ebe4df6376 温湿度变送器 59924975-bf9a-49ef-8bb4-239e5eb716f4 59924975-bf9a-49ef-8bb4-239e5eb716f4 59924975-bf9a-49ef-8bb4-239e5eb716f4 t WS302M2A-T3 T3 2017-12-13 13:27:21.356+08 2017-12-21 10:17:47.044+08 327eb1d2-7493-4c0b-b277-338edd768927 4
+2975be5f-7c2a-41d3-9157-e723ecfa9120 位移计 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t MSS050F 2018-08-09 14:40:18.299+08 2018-08-10 17:40:30.229+08 40f627af-dfd1-4cd2-9921-110d47d4461c 4
+3da31fde-9ea8-406f-9a1b-4a9932dbc2df 湿度监测仪 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a f GRI-IAT_humi 2017-12-20 15:44:31.13+08 2018-03-30 14:38:32.738+08 \N 4
+ad41eeec-8dff-4cbb-9a3a-8d42db92bca8 O3监测仪 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a f GRI-IAT_O3 2017-12-20 15:39:19.334+08 2018-03-30 14:38:35.193+08 \N 4
+0eb7e920-0359-4b8b-b604-14bc1136e8f5 浊度数字式传感器 ba38de11-b347-4100-a317-9c4c4a362f91 ba38de11-b347-4100-a317-9c4c4a362f91 ba38de11-b347-4100-a317-9c4c4a362f91 t ZS-710 2017-12-19 14:21:58.71+08 2017-12-21 15:51:25.872+08 857d131f-a356-42fe-b772-25f1efbc8f56 4
+ef2cc4b4-23d3-4ff0-981b-84a8c98113ab 双轴倾角仪 72b27c58-7a56-421c-ab86-abc0a0842cc7 72b27c58-7a56-421c-ab86-abc0a0842cc7 72b27c58-7a56-421c-ab86-abc0a0842cc7 t LIS326H 无锡慧联信息科技有限公司 2017-12-08 09:55:09.523+08 2017-12-21 16:28:37.806+08 4cd4dbf8-c29d-429f-8128-50313b373292 4
+f90de97b-b6e8-417a-b628-7b8e4bb9e335 振弦式钢筋应力计 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-9011 2018-01-08 08:30:41.358+08 2018-03-29 09:30:55.888+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+4a0f1cd5-1e52-4ec3-8976-0b1f82031d28 固定杆式测斜仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-GGC01O 2018-03-15 14:28:52.089+08 2018-06-25 11:33:54.129+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+7c1b8df9-4088-4cc7-b07b-3299d827d7d0 结冰监测传感器 299decdb-5902-4e11-afcb-9e08926723fc 299decdb-5902-4e11-afcb-9e08926723fc 299decdb-5902-4e11-afcb-9e08926723fc t JCI-1600 北京杰成物联科技有限公司 2017-12-21 11:15:16.26+08 2018-01-30 17:41:32.836+08 e4ffaaab-d158-4e82-8c50-074c731d0f8d 4
+466241f9-ceea-4552-b9c6-114413124018 VOC监测仪 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a f GRI-IAT_VOC 2017-12-20 15:48:48.764+08 2018-03-30 14:38:30.414+08 \N 4
+44c42c98-a486-411a-8813-c6ba48aab00c 振弦式支撑应变计 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-9000 2018-01-08 08:30:41.926+08 2018-03-29 09:30:52.764+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+1f342dfc-9de3-4d9e-b772-416fa0bfe58a LoRa室内网关C8100 0235a43b-3369-4639-a955-05e9962ecc4c 0235a43b-3369-4639-a955-05e9962ecc4c 0235a43b-3369-4639-a955-05e9962ecc4c t C8100 2018-08-14 16:36:12.208+08 2018-08-17 16:26:35.879+08 ffca7b99-078d-433f-b30f-26ca16279162 1
+bbcd2556-3714-4360-80d1-af1f8be94404 盒式测斜仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-HGC01-BW 2018-08-24 09:09:28.299+08 2018-08-24 09:55:27.563+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+3f564278-8edf-4fe7-a35e-21b91e6d4129 tcp f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f 1 2018-06-15 17:08:39.581+08 2018-06-15 17:08:39.581+08 \N 0
+099c6283-519f-4946-aa9d-f0059a76b832 轴力计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ZL40 配套 飞尚 多通道振弦采集仪 2018-01-23 14:46:19.61+08 2019-11-26 10:18:47.672+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+eb9a3ca2-0c98-4af1-9e73-2a17cbe81af6 奥术大师多 eb5a59f3-6098-4024-a27a-0b795cf9834f eb5a59f3-6098-4024-a27a-0b795cf9834f eb5a59f3-6098-4024-a27a-0b795cf9834f f 123 奥术大师多 2018-01-22 11:12:08.459+08 2018-01-22 11:12:08.459+08 \N 1
+5c1ff344-5845-4376-8ea0-1ac8d45d9f3c 空气湿度计 943913b0-23c7-43a9-a1d6-a7e59ed719d0 943913b0-23c7-43a9-a1d6-a7e59ed719d0 943913b0-23c7-43a9-a1d6-a7e59ed719d0 f RSWSI2026_ 2018-01-09 11:10:39.23+08 2018-01-09 11:12:25.09+08 \N 4
+c7f01571-7f09-4bef-99d3-fdc2da5fcaa2 双轴倾角仪 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M26 2018-01-08 17:10:41.65+08 2018-01-09 11:28:54.288+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+c36c08c3-4f22-474e-b748-c6c32288c802 空气温湿度传感器 ca9092a8-c707-4783-9d79-f50f05048927 ca9092a8-c707-4783-9d79-f50f05048927 ca9092a8-c707-4783-9d79-f50f05048927 t THA-01 无公式 2018-01-08 14:10:26.876+08 2018-12-14 11:38:39.466+08 dd99d0cd-27ad-42ff-869e-e00c51c5c62a 4
+cc6193d5-14b6-4231-a6f6-905db9c4a33c 倾角传感器 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t INCHY5 2018-08-09 14:55:00.86+08 2018-08-10 17:40:32.858+08 40f627af-dfd1-4cd2-9921-110d47d4461c 4
+f65db984-9da0-4cef-a9ea-7de5e02ef42f 基泰单通道采集仪 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MCU-1R 485信号 2018-01-10 15:59:36.186+08 2018-05-11 14:30:41.116+08 a4ea8d4c-a663-48d2-a163-47085a402235 1
+abefa36d-6587-4818-bb39-e14a51c26b4e 双轴数字型垂直安装倾角传感器 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 t SCA126V-30 北京瑞芬 2018-01-18 15:22:34.685+08 2018-03-29 14:25:08.525+08 19a42196-a096-4d6a-84d1-67d7c3030605 4
+79ef29a0-9796-43ce-957d-952d3b16d70a 双轴数字型垂直安装倾角传感器 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 t SCA126V-60 北京瑞芬 2018-01-18 15:22:34.864+08 2018-03-29 14:25:06.17+08 19a42196-a096-4d6a-84d1-67d7c3030605 4
+c0cde67c-9734-4a3c-bb52-0caba0ae8724 锚索计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-MS05 配套飞尚 多通道振弦采集仪 2018-01-23 14:49:59.702+08 2021-03-02 14:01:12.709+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+09e8eef6-6b70-4cda-84c2-a7680f7a535f 风速传感器 ca9092a8-c707-4783-9d79-f50f05048927 ca9092a8-c707-4783-9d79-f50f05048927 ca9092a8-c707-4783-9d79-f50f05048927 t ZFS-M 无公式 2018-01-08 13:55:43.513+08 2018-12-14 11:38:35.185+08 dd99d0cd-27ad-42ff-869e-e00c51c5c62a 4
+e3713c95-6aa3-4a2e-ad89-579a16cb1a03 振弦式土压力计 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-9800 2018-01-08 08:30:38.137+08 2018-03-29 09:31:06.929+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+e47f8159-ee4b-45c0-b827-30b69d0328d8 全温补高精度数字输出型双轴倾角传感器 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 t ACA626T-30 北京瑞芬 2018-01-16 10:33:58.375+08 2018-03-29 14:24:41.022+08 19a42196-a096-4d6a-84d1-67d7c3030605 4
+6a6797bd-fdda-4b37-bbab-ce377a01521b 风向传感器 ca9092a8-c707-4783-9d79-f50f05048927 ca9092a8-c707-4783-9d79-f50f05048927 ca9092a8-c707-4783-9d79-f50f05048927 t ZFX-M 无公式 2018-01-08 14:03:13.644+08 2018-12-14 11:38:32.978+08 dd99d0cd-27ad-42ff-869e-e00c51c5c62a 4
+eee64353-8241-4a69-a2ed-5e42bbf4450c 无应力计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f FS-WYL-15 无应力计 2018-01-23 15:06:34.91+08 2018-03-02 10:06:38.319+08 \N 4
+ddf17ba9-fcef-4ef4-97f0-c09e0503dfa3 温湿度传感器 943913b0-23c7-43a9-a1d6-a7e59ed719d0 943913b0-23c7-43a9-a1d6-a7e59ed719d0 943913b0-23c7-43a9-a1d6-a7e59ed719d0 t RS-WS-N01-8 2018-01-23 17:19:51.356+08 2018-04-16 17:33:22.427+08 07d25988-cf05-433e-bcb0-eba6042997f1 4
+c0b0b779-cafb-4d7f-b4ff-64534e422738 双轴数字型垂直安装倾角传感器 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 t SCA126V-10 北京瑞芬 2018-01-18 15:22:34.501+08 2018-03-29 14:24:58.237+08 19a42196-a096-4d6a-84d1-67d7c3030605 4
+098ca922-fd35-4605-abc8-f65640f8f879 静力水准仪 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 f WH-SZ01-500R 2018-09-11 14:37:10.387+08 2018-09-11 14:37:10.387+08 \N 4
+ef4d9187-0ca8-44c7-b7f5-42e6c0904fd5 双轴数字型垂直安装倾角传感器 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 t SCA126V-90 北京瑞芬 2018-01-18 15:22:35.024+08 2018-03-29 14:25:03.788+08 19a42196-a096-4d6a-84d1-67d7c3030605 4
+c02185df-1224-4e63-aab4-3d284c8bb526 高精度数字输出型双轴倾角传感器 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 t HCA526T-10 北京瑞芬 2018-01-16 09:44:42.405+08 2018-03-29 14:24:36.536+08 19a42196-a096-4d6a-84d1-67d7c3030605 4
+e60e191c-767a-479d-a33e-589622634060 基泰集成箱 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MCU16H 华测 协议 2018-03-13 17:32:48.253+08 2018-04-11 15:58:18.936+08 a4ea8d4c-a663-48d2-a163-47085a402235 1
+6a257a93-25ef-48f8-bdd7-0a4674c83a7c 噪声 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f 1 2018-06-06 18:05:16.194+08 2018-06-06 18:05:16.194+08 \N 0
+078b521f-572a-48bb-b327-09f918ef1e92 路由器yeejoin-haha e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d f h3c-901 h3c路由器 2018-01-08 09:46:41.133+08 2018-01-08 09:46:41.133+08 \N 2
+90a2bc12-2214-43ff-9154-9b9212de2c10 轴力计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ZL10 配套 飞尚 多通道振弦采集仪 2018-01-23 14:46:18.981+08 2019-11-26 10:18:33.856+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+3a8c62b6-14dc-497e-90e8-68c2160e7d08 振弦式锚索计 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 t HC-Z1600-1204 (振弦式)和采集仪一起使用 2018-03-07 17:18:03.898+08 2018-03-29 09:31:49.435+08 7c4ecd66-e051-42e2-87c7-2df59811c9e3 4
+70c53b9c-f7ec-48ce-b790-bd96754d2d3b 无线倾角计 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f RN635 2019-09-10 14:47:17.454+08 2019-09-10 14:47:17.454+08 \N 4
+384f80e3-ad51-400e-b0aa-8a3885961cec 振弦式应变计 abc9e573-4426-4eee-b858-7d309e181f99 abc9e573-4426-4eee-b858-7d309e181f99 abc9e573-4426-4eee-b858-7d309e181f99 t GBB-110 2018-03-13 23:09:59.892+08 2018-03-30 09:52:47.382+08 509f878b-22a0-470a-81c5-b802c4b1e5b5 4
+aa64719f-ac6f-463c-83c5-dcdbd25be81e 智能弦式数码应变计 d5b4f900-6aac-40dc-8c6d-d38bc27004d1 d5b4f900-6aac-40dc-8c6d-d38bc27004d1 d5b4f900-6aac-40dc-8c6d-d38bc27004d1 f JMZX-212HAT 长沙金码测控科技股份有限公司 2017-12-28 20:13:20.322+08 2017-12-28 20:13:20.322+08 \N 4
+45aee45b-bc26-4ac7-a8ed-3dcbe187b2de 光纤光栅解调仪 72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53 72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53 72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53 f JEME-iFBG-S 2018-01-08 16:15:24.164+08 2018-03-12 17:01:20.427+08 \N 1
+4866de4e-56ad-435f-a21b-0f2b00011e12 弦式传感器采集仪 86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307 86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307 86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307 t SCI-VW1008 2018-01-08 15:25:13.464+08 2018-03-30 09:53:02.923+08 12f8ac3d-c8bf-4da6-aebd-cacf92e0a702 1
+46ad9444-1665-48d6-bb9a-37cee37d1604 TCXC振弦式数据采集模块 5c2a5b34-3127-4921-bf54-49378012c0b0 5c2a5b34-3127-4921-bf54-49378012c0b0 5c2a5b34-3127-4921-bf54-49378012c0b0 f TCZX1008 东方中恒 2018-01-03 13:53:36.23+08 2018-01-03 13:53:36.23+08 \N 1
+92bad770-f845-4bd8-8e2b-55e5343a2201 土壤水分计 ca665fe1-0d75-4314-9b41-9eb59507d940 ca665fe1-0d75-4314-9b41-9eb59507d940 ca665fe1-0d75-4314-9b41-9eb59507d940 t MS-10 2018-01-09 11:31:58.803+08 2018-03-30 09:53:20.633+08 a7daadbf-4efe-4bfd-a3a7-d162263502dd 4
+6bd84b2f-3226-42ea-94b6-f740a5b60878 应变计 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t VWSGK40 2018-08-09 16:19:28.502+08 2018-08-10 17:40:44.7+08 40f627af-dfd1-4cd2-9921-110d47d4461c 4
+30519425-7bd8-440f-83ea-f9da4767faf9 控制设备 c1741e71-3a53-4591-9d4e-e0d626ccd022 c1741e71-3a53-4591-9d4e-e0d626ccd022 c1741e71-3a53-4591-9d4e-e0d626ccd022 f v1.2 2018-01-03 23:06:41.706+08 2018-01-03 23:06:41.706+08 \N 1
+34eeec21-d4e0-4716-a88e-42267e349980 传输设备 c1741e71-3a53-4591-9d4e-e0d626ccd022 c1741e71-3a53-4591-9d4e-e0d626ccd022 c1741e71-3a53-4591-9d4e-e0d626ccd022 f v1.2 2018-01-03 23:08:28.575+08 2018-01-03 23:08:28.575+08 \N 2
+e2d104b1-9c57-4a16-8d05-07817bc8b785 振弦式钢筋应力计 86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307 86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307 86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307 t SCI-GJJ 2018-01-08 15:14:58.242+08 2018-03-30 09:53:07.392+08 12f8ac3d-c8bf-4da6-aebd-cacf92e0a702 4
+1f00228f-9138-4060-9b9b-1ae22f803af7 智能数码静力水准仪 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c t JMDL-6220AD 业务侧压强转换公式Δh=(Pi-P0)/(ρ*g) 2018-01-05 17:40:36.038+08 2018-01-11 14:37:56.298+08 941c9c57-031c-4e4c-9a2b-5e544e387274 4
+6a8343f7-8c07-4851-8924-f8d4f1f5ab78 压力式窨井液位计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f FS-XIHU-SEWER-WATER YF-17 2018-01-04 11:56:59.87+08 2018-01-04 11:56:59.87+08 \N 4
+e718c1a2-1c56-4da0-8cb3-36445c6b4f26 双轴倾角仪 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M26A 2018-01-08 17:10:41.144+08 2018-01-09 11:28:57.068+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+2dfa1f51-0e5a-4e11-a86d-f8487d602ebf 模拟量转485模块 4a675a7d-e35c-478e-b8f1-ae01437c8281 4a675a7d-e35c-478e-b8f1-ae01437c8281 4a675a7d-e35c-478e-b8f1-ae01437c8281 t RS-*-485-* 建大仁科 2018-01-16 16:49:43.474+08 2018-07-23 11:31:40.963+08 82e912a1-10ca-41af-ad56-79cc088ef375 1
+e58ee78a-e499-483c-acc8-a42683d62149 磁致伸缩式静力水准仪 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MCU4-MSL570 只接采集仪,不单独接DTU 2017-12-29 17:39:54.956+08 2018-06-07 13:41:49.815+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+4d523084-bf91-421f-bafc-f278a63c5541 压力变送器 7e6cf67e-f12a-4d9f-addf-b551148dc2b4 7e6cf67e-f12a-4d9f-addf-b551148dc2b4 7e6cf67e-f12a-4d9f-addf-b551148dc2b4 t SUP-P300 杭州美仪自动化有限公司 2018-01-03 16:19:19.136+08 2018-03-27 11:06:32.835+08 e65ebdf0-aaff-4a5f-97a6-c69a5cafea9d 4
+279c47e7-04c2-4841-8fdd-263a5f4af93a tcp 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f 1 2018-06-15 17:09:27.638+08 2018-07-24 17:59:03.227+08 \N 0
+9bdf8d5c-e571-4dd4-9614-0099745b0a73 内埋式应变计 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-9200 2018-01-08 08:30:40.825+08 2018-03-29 09:30:58.029+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+f2c96428-649e-47e9-9b6f-e5749195cb33 LVDT裂缝计 e73ab0fd-f5f4-483f-be99-b076b25341d1 e73ab0fd-f5f4-483f-be99-b076b25341d1 e73ab0fd-f5f4-483f-be99-b076b25341d1 t SDVG20 2017-11-28 16:58:15.923+08 2018-01-17 17:37:01.65+08 6ef6a382-2a9c-46f8-8c9a-4660c726bfdd 4
+0d7661f6-5ce5-490a-9520-ad56ba769d79 便携式多路测量仪 ca9092a8-c707-4783-9d79-f50f05048927 ca9092a8-c707-4783-9d79-f50f05048927 ca9092a8-c707-4783-9d79-f50f05048927 t MP-406logo 2018-01-08 14:19:21.202+08 2018-12-14 11:38:41.67+08 dd99d0cd-27ad-42ff-869e-e00c51c5c62a 1
+85ba72e3-3754-4b11-a144-757d7a01f1dc 温湿度计 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 t YH06-E01 湖南湘银河传感科技有限公司 2018-01-23 14:02:27.1+08 2018-01-23 15:04:19.33+08 1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa 4
+4e3f8da9-5108-45ea-a042-dfab49718c5b 水位计 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T-650 2018-08-15 09:48:18.548+08 2018-09-21 16:39:41.456+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+1c332609-ad1d-4066-b0fa-67df29181432 高精度激光测距传感器 4544878d-c203-4924-a38f-5486d69d7613 4544878d-c203-4924-a38f-5486d69d7613 4544878d-c203-4924-a38f-5486d69d7613 t GLS-B80 2018-01-23 15:32:11.04+08 2018-04-16 17:35:29.18+08 7ee73cad-16da-4534-8e6b-c7d587c2597f 4
+6c0d843c-169e-49b8-8dde-188699cc3077 振弦式钢筋应力计 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-VR200 2018-01-04 12:11:30.163+08 2018-12-28 15:38:34.649+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+f5f27d3f-b8fd-44ee-97e2-8a78748a424f 振弦式表面应变计 86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307 86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307 86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307 t SCI-YBJ-BM 2018-01-08 15:10:26.494+08 2018-03-30 09:52:53.374+08 12f8ac3d-c8bf-4da6-aebd-cacf92e0a702 4
+2fd2ebfb-7858-40db-91a8-d933269ccf64 弦式仪器采集仪 fc6696f3-32e6-42c8-b8de-8409f5bfe865 fc6696f3-32e6-42c8-b8de-8409f5bfe865 fc6696f3-32e6-42c8-b8de-8409f5bfe865 t CWM80x 2018-01-08 15:32:40.748+08 2018-07-09 17:55:51.021+08 ff833378-60d7-444b-84a6-b01df07bd336 1
+aa0e3416-fabe-4415-a848-d6cd84a500dd 声光报警器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t YX-02K 2019-08-19 10:39:47.463+08 2019-08-20 09:32:05.41+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+31cb6c0b-e369-46b0-9be4-1de3737503fc 激光测距仪 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 t RLM-S150 2017-12-08 15:16:37.871+08 2018-01-09 11:38:34.295+08 7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc 4
+5c18688a-731b-40d0-b4dd-4ba002026bb3 振弦式表面应变计 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-9250 2018-01-08 08:30:40.244+08 2018-03-29 09:30:59.959+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+68cb03f4-a381-4eaa-9068-d375ae3500e8 振弦式钢筋计 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 t HC-Z1600-1203 (振弦式)和采集仪一起使用 2018-03-07 17:15:48.169+08 2018-03-29 09:31:47.2+08 7c4ecd66-e051-42e2-87c7-2df59811c9e3 4
+448efd11-ceec-4f64-93a0-ad7133e38b8d 沉降仪 37315d9c-8e25-4ec7-901b-851fdcb94068 37315d9c-8e25-4ec7-901b-851fdcb94068 37315d9c-8e25-4ec7-901b-851fdcb94068 f BP0-CJ (搭配采集仪) 2018-01-08 17:33:37.615+08 2018-03-19 15:50:14.106+08 \N 4
+607fa5aa-d8d7-48be-bf60-b8a6d0de2e8e 振弦式渗压计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-4500SV 配套 基康 (振弦)自动化数据采集仪 原公式水位可直接用振弦公式 2018-01-05 14:53:22.507+08 2018-03-23 11:37:04.901+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+0530f690-1f3c-430e-97c7-6dc82f96fd47 振弦式渗压计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-4500AL 配套 基康 (振弦)自动化数据采集仪 原公式水位可直接用振弦公式 2018-01-05 11:07:01.119+08 2018-03-23 14:13:29.826+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+35d1f34b-ccac-4110-9bb6-7e0a3327ef18 振弦式位移传感器 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-4450 配套 基康 (振弦)自动化数据采集仪 2018-01-05 11:07:00.262+08 2018-03-23 14:13:33.027+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+27f99320-b0dc-4b93-bc24-f5ccf9337356 振弦式喷射混凝土压力盒 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-4850NATM 配套 基康 (振弦)自动化数据采集仪 2018-01-05 11:07:03.185+08 2018-03-23 14:13:26.857+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+fb1119c8-c430-4066-9f02-60a558d92a68 双轴倾角计 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MCU4-MI600T 南京基泰 2018-01-04 15:33:35.004+08 2018-06-07 10:23:17.938+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+2dead818-122a-42d9-8f52-3aa8d92ab0c3 闭环磁通量传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-BCT18J-250J 江西飞尚 2018-01-08 19:28:51.331+08 2019-06-14 09:57:31.191+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+d14c6b02-4298-4713-b970-eba0aafee88b 振弦式钢索计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-4410 配套 基康 (振弦)自动化数据采集仪 2018-01-05 11:07:00.02+08 2018-03-23 14:13:39.944+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+7789641b-3a02-4369-b80e-894bacaa5cec 位移计 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t MSS150 2018-08-10 09:48:55.477+08 2018-08-10 17:41:01.721+08 40f627af-dfd1-4cd2-9921-110d47d4461c 4
+17c35362-c638-46de-bea3-840893daf864 振弦式埋入式应变计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-4210RCC 配套 基康 (振弦)自动化数据采集仪 2018-01-05 11:06:58.797+08 2018-03-23 11:36:58.721+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+feb1fe0d-208d-41cf-9533-596f78fa835c 振弦式表面裂缝计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-4420 配套 基康 (振弦)自动化数据采集仪 2018-01-05 11:07:00.137+08 2018-03-23 14:13:37.616+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+87bf38c3-0b08-4bcf-98b4-12060fd9a345 直线位移传感器 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 t FS-ZWY-100 深圳市米朗科技有限公司 2018-02-28 16:21:13.683+08 2018-03-06 14:58:00.343+08 cfe75451-de08-456e-a858-16ed82f63574 4
+e8ccf6dc-5626-4bb7-9f88-9bf8972619b4 振弦式应变计 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-VS100B 2018-01-04 13:43:26.988+08 2018-03-22 14:51:36.611+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+0e1586ef-cbec-4dc3-8ff4-af3e4c7c8d2e 单轴加速度传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M62 2018-01-08 15:12:21.591+08 2018-01-09 11:30:25.545+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+157090bc-b53c-4ae3-94fc-4b3804ed6433 液位计 37315d9c-8e25-4ec7-901b-851fdcb94068 37315d9c-8e25-4ec7-901b-851fdcb94068 37315d9c-8e25-4ec7-901b-851fdcb94068 f BP0-YW (搭配采集仪) 2018-01-08 17:35:44.845+08 2018-03-19 15:50:20.138+08 \N 4
+30da8546-87f0-4a5c-bd4f-f9919c954c82 振弦式埋入式应变计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-4210 配套 基康 (振弦)自动化数据采集仪 2018-01-05 11:06:58.388+08 2018-03-23 11:36:56.616+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+660c0ba2-d714-4ad3-8166-a1fa25a9d7d1 振弦式土压力盒 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-VSP520S 2018-01-04 13:57:54.926+08 2019-08-05 11:37:01.354+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+addad535-5578-4010-9d74-dbeab2b9e9eb 全温补高精度数字输出型双轴倾角传感器 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 t ACA626T-90 北京瑞芬 2018-01-16 10:34:00.716+08 2018-03-29 14:24:45.646+08 19a42196-a096-4d6a-84d1-67d7c3030605 4
+d8860bee-374c-497a-a33a-258af59e3690 振弦式孔隙水压力计 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-VP500 2018-01-04 11:48:49.698+08 2018-03-23 14:13:04.342+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+ba349741-3d03-49c6-a2cf-9e2156fd36c4 振弦式固定式测斜仪(MEMS) 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-6150D-2 双轴 2018-01-05 11:06:57.93+08 2018-03-29 15:34:59.593+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+ff38a597-0318-47bb-a647-5ad78dd2dca8 全温补高精度数字输出型双轴倾角传感器 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 t ACA626T-60 北京瑞芬 2018-01-16 10:33:59.639+08 2018-03-29 14:24:43.308+08 19a42196-a096-4d6a-84d1-67d7c3030605 4
+1fff247a-6494-4752-91b7-74565fa1f314 传感器 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f 123 2019-10-11 14:16:26.972+08 2019-10-11 14:16:26.972+08 \N 0
+5dced7e6-e4c2-4e43-82a2-6b994fb790b4 称重传感器 5355fb27-5945-43ae-bc43-697b572a7363 5355fb27-5945-43ae-bc43-697b572a7363 5355fb27-5945-43ae-bc43-697b572a7363 f DL101 上海尚衡电子有限公司 2018-03-06 16:50:09.43+08 2018-03-06 16:50:09.43+08 \N 4
+d53887ba-c67a-4b45-a1ed-1a61fbde6c4c 综合采集模块 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c t JMZX-16A 目前只有 孔隙水压传感器搭配 2018-01-11 11:13:31.319+08 2018-03-29 09:31:20.223+08 941c9c57-031c-4e4c-9a2b-5e544e387274 1
+85f5b6fd-92cc-4d22-9dff-952c59003e3f 风速传感器 83c80841-82ec-434a-835a-9907f3b225a5 83c80841-82ec-434a-835a-9907f3b225a5 83c80841-82ec-434a-835a-9907f3b225a5 t YJ-FS100 模拟量输出 风速0-70 2018-01-09 14:14:58.417+08 2018-03-30 09:53:16.461+08 2249ba53-148c-4f52-a223-5baccdb2b356 4
+6aa982a5-d7a3-48ee-b1dc-afe4686ce796 孔隙水压力计 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-9500 2017-11-25 11:53:42.317+08 2018-03-29 09:31:23.937+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+0dcb57e3-244f-44d3-8f9c-a50fc74481a8 四路模拟量采集模块 275e6287-8ef6-4bc1-8e57-72f3d6404d8f 275e6287-8ef6-4bc1-8e57-72f3d6404d8f 275e6287-8ef6-4bc1-8e57-72f3d6404d8f t ZL-524 2018-01-08 18:26:58.101+08 2018-07-23 09:10:48.013+08 c41ab05c-aa3d-4d60-9dc3-217323b6e9c7 1
+cad4657b-dba7-4ad9-990c-bf0ce3ee1e6f 北斗星创采集仪 37315d9c-8e25-4ec7-901b-851fdcb94068 37315d9c-8e25-4ec7-901b-851fdcb94068 37315d9c-8e25-4ec7-901b-851fdcb94068 f BP-Collector 占位 型号未知 2018-01-08 17:44:21.334+08 2018-03-19 15:50:22.39+08 \N 1
+8bab3e11-dc23-4082-97ec-a04e78fa19c3 锚索计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-MS40 配套飞尚 多通道振弦采集仪 2018-01-23 14:53:15.962+08 2021-03-02 14:00:51.693+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+bbfa13d3-fd42-4230-97e6-792463dbaf85 锚索计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-MS10 配套飞尚 多通道振弦采集仪 2018-01-23 14:53:15.164+08 2021-03-02 14:01:07.952+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+58647986-2640-4318-902a-5ee7d04150ef 新总线型采集模块 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c f JMJK-II 2018-01-11 10:36:37.36+08 2018-03-08 17:28:53.883+08 \N 1
+608c11f3-91d9-4d92-9459-a4f7eb20bf1d 光纤光栅温度传感器 72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53 72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53 72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53 f JEME-iFBG-JFSS-01T 无公式 2018-01-02 17:33:10.069+08 2018-03-12 17:01:16.293+08 \N 4
+1bcd78b8-bd96-4c95-8e19-27a1ac7356c9 锚索计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-MS30 配套飞尚 多通道振弦采集仪 2018-01-23 14:53:15.764+08 2021-03-02 14:00:56.507+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+64d50498-d37a-4f4a-99f8-2268e82a035e 三轴加速度传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M63 2018-01-08 16:50:49.799+08 2018-01-09 11:29:40.045+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+f9331a24-582f-45b8-bea8-b919ffd48516 激光位移传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t T15 2018-01-08 16:27:57.438+08 2018-01-09 11:30:00.134+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+e5b27a73-2d4c-4b53-8bcd-86583097a730 温湿度传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M33 牧坤 2017-11-01 15:38:54.164+08 2018-01-09 11:35:04.901+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+0beb606c-f306-4476-8526-31646c8107e5 风向传感器 83c80841-82ec-434a-835a-9907f3b225a5 83c80841-82ec-434a-835a-9907f3b225a5 83c80841-82ec-434a-835a-9907f3b225a5 t YJ-FX100 模拟量输出 2018-01-09 14:07:31.153+08 2018-03-30 09:53:12.3+08 2249ba53-148c-4f52-a223-5baccdb2b356 4
+537cf41f-69a4-47de-81ee-63485ab8df1d 开环磁通量传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-CCTK018 江西飞尚 2018-01-08 19:23:48.674+08 2019-06-14 09:57:26.826+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+145b9864-56d6-41e0-9a6c-3c68394e65e7 裂缝计 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t CRA4420 2018-08-10 09:21:02.376+08 2018-08-10 17:40:47.566+08 40f627af-dfd1-4cd2-9921-110d47d4461c 4
+b914a394-bbd8-4ff4-857e-02a2d8eb6d25 11 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 f 212 2018-01-22 17:01:19.494+08 2018-01-22 17:21:22.238+08 \N 1
+5f908b85-0f3a-48c0-bc83-8e191731a754 温湿度传感器 7208e2c1-ccf7-46f5-b073-bbab61904cf2 7208e2c1-ccf7-46f5-b073-bbab61904cf2 7208e2c1-ccf7-46f5-b073-bbab61904cf2 t KM-XD300D-HT 深圳市科润美科技有限公司 2018-01-08 17:34:18.69+08 2018-01-17 18:00:00.506+08 2bbaee41-1980-459c-8053-311857717ee9 4
+f6b98e0f-0bfe-4a95-808c-d6d10b4c803b 锚索计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-MS20 锚索计 2018-01-23 14:53:15.373+08 2021-03-02 14:01:01.621+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+ecfacbbe-037c-42cb-89ce-68a2e6170758 振弦式钢筋计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-4911-210 配套 基康 (振弦)自动化数据采集仪 2018-01-05 11:07:03.685+08 2018-03-23 11:37:00.639+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+3eb1b2e4-ba3a-4329-a821-33a7f5bec873 测缝计 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 t YH02-I10 湖南湘银河传感科技有限公司 2018-01-23 14:05:00.636+08 2018-01-23 15:04:16.386+08 1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa 4
+b750e865-af38-40e9-a478-16fefb4cb618 振弦式单点位移计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-A3 配套 基康 (振弦)自动化数据采集仪 2018-01-05 11:07:04.188+08 2018-03-23 11:37:02.792+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+bc476c11-0887-40fb-ae9e-06ab514a44c0 温湿度传感器 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-WSD-01T 2018-01-05 16:29:05.814+08 2018-04-09 16:07:46.575+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+abfa6634-cca0-4696-b67e-1c2eb2e57c9b 振弦式钢筋计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-4911-300 配套 基康 (振弦)自动化数据采集仪 2018-01-05 15:11:20.7+08 2018-03-23 11:37:14.172+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+d2a5375c-0240-4435-9b8f-a62372fafaca 振弦式土压力计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-TY04 配套飞尚多通道振弦采集仪 2018-01-05 15:36:58.408+08 2018-12-06 11:55:48.797+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+ccb72dc5-f9bc-424d-a3ec-e6e9121bc534 振弦式土压力计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-TY08 配套飞尚多通道振弦采集仪 2018-01-05 15:36:59.027+08 2018-12-06 11:55:52.379+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+780ffe7d-7369-4d2f-9184-32790466f2ba 振弦式土压力计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-TY10 配套飞尚多通道振弦采集仪 2018-01-05 15:36:59.844+08 2018-12-06 11:26:19.127+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8 轴力计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ZL20 配套 飞尚 多通道振弦采集仪 2018-01-23 14:46:19.178+08 2019-11-26 10:18:38.435+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+f63309ff-a714-4bd7-9052-30c217fa982e 挠度传感器 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t DEF110E 2018-08-10 09:43:03.956+08 2018-08-10 17:40:58.295+08 40f627af-dfd1-4cd2-9921-110d47d4461c 4
+175e2759-ae38-4ac5-a62c-6ed4877f3863 多通道振弦采集仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-F32 modbus 多通道振弦采集仪 2018-01-05 11:16:01.978+08 2019-12-13 11:30:45.217+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+abaf6bf4-288f-4d21-9fab-515213e6dcac 振弦式土压力计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-TY02 配套飞尚多通道振弦采集仪 2018-01-05 15:33:22.322+08 2018-12-06 11:55:46.686+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+05d80c4b-4b8f-428a-bcb0-55fb2f8b5edb 电压电流类采集仪 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t JC-4108 8通道 2018-08-10 09:23:32.703+08 2018-08-10 17:40:49.88+08 40f627af-dfd1-4cd2-9921-110d47d4461c 1
+b6095ab3-88ff-4a71-8f42-f0656b301e1e 内埋式应变计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-NM50 配套 飞尚 多通道采集仪 2018-01-05 11:50:25.104+08 2018-07-31 15:21:27.245+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+85e88d3a-7c29-4c8d-a2a2-89ffcaffd72b 6通道无线数据采集单元 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 f T420 2018-08-24 15:26:31.7+08 2018-08-24 15:27:16.328+08 \N 1
+9a9aa01c-948e-49a2-964f-cee49def906c 湿度传感器 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t THD7202-H 2018-08-10 09:35:53.04+08 2018-08-10 17:40:55.882+08 40f627af-dfd1-4cd2-9921-110d47d4461c 4
+c50b3ecc-a416-4991-b64f-f2c79d8d1848 振弦式钢筋计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-4911-400 配套 基康 (振弦)自动化数据采集仪 2018-01-05 15:11:19.824+08 2018-03-23 11:37:11.951+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3 表面式应变计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-BM15 表面式应变计 2018-01-05 12:01:35.785+08 2018-07-31 15:21:29.471+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+24ff3733-db3f-4d37-b90a-edd44a77e054 3 f58d1dc4-346b-44b0-8151-837508852c77 f58d1dc4-346b-44b0-8151-837508852c77 f58d1dc4-346b-44b0-8151-837508852c77 f 3 2018-03-07 16:15:57.23+08 2018-03-07 16:15:57.23+08 \N 2
+11f0a3dc-13ad-4c40-ae16-1b2f1d139564 表面式应变计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-BM30 表面式应变计 2018-01-05 14:02:09.782+08 2018-07-31 15:21:31.786+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+5f4e4e99-20b3-4bf7-95cb-a2f507595b2d 内埋式应变计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-NM30 配套 飞尚 多通道采集仪 2018-01-05 11:50:22.281+08 2018-07-31 15:21:25.105+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+2574b00e-2491-471c-925a-5b713afa9561 (振弦)自动化数据采集仪 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-Micro-40N 基康采集仪 2018-01-05 11:47:57.113+08 2018-05-28 18:08:13.879+08 b28ef84f-ad39-4657-8465-7968e542bdcd 1
+a5da9800-2b00-4701-8793-3aaad3e140f6 固定倾斜仪 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T-830 2018-08-15 10:53:47.742+08 2018-09-21 16:39:38.137+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+a5766cb2-27a1-4d0a-939b-ac6aa0871a81 振弦式地锚荷重计 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-9900-50T 2018-08-24 15:55:16.944+08 2018-08-24 16:46:27.622+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+424f45f6-916c-4383-bce4-c71153f82e63 振弦式土压力计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-TY20 配套飞尚多通道振弦采集仪 2018-01-05 15:48:51.349+08 2018-12-06 11:26:21.356+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+307cf077-4fd9-4e6c-a60b-33fddf42a0e4 温度传感器 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t THD7202-T 2018-08-10 09:33:09.084+08 2018-08-10 17:40:53.384+08 40f627af-dfd1-4cd2-9921-110d47d4461c 4
+db974c14-3d61-403d-b847-e0523ad53964 翻斗式雨量计 7370f07e-1811-46e8-a775-d25a9ccd4a52 7370f07e-1811-46e8-a775-d25a9ccd4a52 7370f07e-1811-46e8-a775-d25a9ccd4a52 t TY-R4 上海物联网有限公司 2018-01-09 15:01:35.175+08 2018-01-12 11:31:59.855+08 bbfeac1a-1c70-45d1-9180-d63be822d7f2 4
+5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed 温湿度传感器 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-WSD-01M 江西飞尚科技有限公司温湿度传感器 2018-01-05 16:29:20.57+08 2019-03-15 16:43:27.397+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+771be2fa-a2f9-4ba8-8c08-76b091627b87 固定杆式测斜仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-GGC01M 江西飞尚导轮式固定测斜仪 2018-01-05 16:27:59.061+08 2019-03-15 16:43:06.316+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+2663fcb4-832b-4bd9-ac6e-4a58835355cb 节点传感器 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 t SMTN-MJ 2019-11-26 16:13:30.977+08 2019-11-27 09:23:01.936+08 3ced2ad4-50ab-4f5d-b3ca-fc19063f1879 4
+f0b38ea6-f88e-4e79-b7bb-02d09ef2cf03 锚索测力计 fc6696f3-32e6-42c8-b8de-8409f5bfe865 fc6696f3-32e6-42c8-b8de-8409f5bfe865 fc6696f3-32e6-42c8-b8de-8409f5bfe865 t TL-XHL 2018-01-08 11:40:11.751+08 2018-07-09 17:55:46.305+08 ff833378-60d7-444b-84a6-b01df07bd336 4
+2d9520e9-143b-48c2-960f-5c9dca7a21b4 内埋式应变计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-NM15 内埋式应变计 2018-01-05 16:26:30.075+08 2018-06-26 10:46:05.806+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+72b0bf25-78ae-4ab5-995b-c83cfbf52484 高精度数字输出型双轴倾角传感器 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 t HCA526T-60 北京瑞芬 2018-01-16 10:34:03.974+08 2018-03-29 14:24:53.144+08 19a42196-a096-4d6a-84d1-67d7c3030605 4
+4253e350-b64f-4b81-b19b-bcd45c6181ad LVDT裂缝计 e73ab0fd-f5f4-483f-be99-b076b25341d1 e73ab0fd-f5f4-483f-be99-b076b25341d1 e73ab0fd-f5f4-483f-be99-b076b25341d1 t SDVG36-40C 深圳市信为LVDT裂缝计 2018-01-08 10:24:01.997+08 2018-01-17 17:37:16.988+08 6ef6a382-2a9c-46f8-8c9a-4660c726bfdd 4
+0bae88b4-e518-4869-96ea-c833160a9914 高精度数字输出型双轴倾角传感器 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 t HCA526T-90 北京瑞芬 2018-01-16 10:34:04.384+08 2018-03-29 14:24:50.774+08 19a42196-a096-4d6a-84d1-67d7c3030605 4
+c53d6302-b66b-40f4-b190-4d5447180ba7 单轴加速度传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M68 2018-01-08 16:22:25.011+08 2018-01-09 11:30:07.943+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+03db4d1f-c0bf-47b0-9f10-0a0a5d6cfca3 激光位移传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t T13 2018-01-08 16:27:58.774+08 2018-01-09 11:30:10.793+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+b1c85f0b-c610-4243-83a4-3a1e87b411ad 钢筋计 fc6696f3-32e6-42c8-b8de-8409f5bfe865 fc6696f3-32e6-42c8-b8de-8409f5bfe865 fc6696f3-32e6-42c8-b8de-8409f5bfe865 t TL-XJG 2018-01-08 10:43:07.551+08 2018-07-09 17:55:48.988+08 ff833378-60d7-444b-84a6-b01df07bd336 4
+f446b0ec-ee0f-40bb-a6fc-9767fbd78a2b 风速仪 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M14 2018-01-08 16:54:47.924+08 2018-01-09 11:29:43.749+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+de0bfd26-fb8e-4f9d-8e0a-0119650952c6 风速仪 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M13 2018-01-08 16:54:48.904+08 2018-01-09 11:29:46.264+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+8ea772de-0c69-4a35-bbbb-7e0fb97d7c2f 激光位移传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t T14 2018-01-08 16:27:58.078+08 2018-01-09 11:30:16.047+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+22dc1e96-f05a-4752-bebf-9d3c1285dace 单轴加速度传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M67 2018-01-08 16:22:24.845+08 2018-01-09 11:30:22.093+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+29aa5799-e271-4913-8e21-04edddaa5be1 空气温度计 943913b0-23c7-43a9-a1d6-a7e59ed719d0 943913b0-23c7-43a9-a1d6-a7e59ed719d0 943913b0-23c7-43a9-a1d6-a7e59ed719d0 f RSWSI2026 搭配采集仪 2018-01-08 18:24:45.253+08 2018-03-29 11:39:19.144+08 \N 4
+f55d7414-2db9-4c07-ad9b-34637318171e 土壤湿度传感器 e3655afc-a2a8-4bc3-801a-9c3019705a27 e3655afc-a2a8-4bc3-801a-9c3019705a27 e3655afc-a2a8-4bc3-801a-9c3019705a27 t MP-508B 锐研智华电子科技有限公司 2018-01-08 19:23:06.689+08 2018-12-15 09:31:31.478+08 82af10d4-f6f0-4e09-84ce-7053d4b42940 4
+0d123bba-3d2e-4252-a27e-af567da8aca1 高精度数字输出型双轴倾角传感器 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 t HCA526T-5 北京瑞芬 2018-01-16 11:50:37.224+08 2018-03-29 14:24:48.494+08 19a42196-a096-4d6a-84d1-67d7c3030605 4
+931fef11-654a-4f36-bf37-dbc168c46e84 渗压计 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 t YH04-C03 2018-01-23 14:10:45.5+08 2020-11-11 17:23:45.956+08 1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa 4
+e55e2ee6-c58a-481c-9bd3-9df2b38dfa3f LVDT裂缝计 e73ab0fd-f5f4-483f-be99-b076b25341d1 e73ab0fd-f5f4-483f-be99-b076b25341d1 e73ab0fd-f5f4-483f-be99-b076b25341d1 t SDVG36-8C 深圳市信为LVDT裂缝计 2018-01-08 10:24:01.139+08 2018-01-17 17:37:03.983+08 6ef6a382-2a9c-46f8-8c9a-4660c726bfdd 4
+0b9ab6dc-b8e5-4f20-a507-567be8892e4f 振弦采集仪 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T440 南京基泰32通道采集仪 2018-08-15 13:45:10.773+08 2018-09-21 16:39:34.425+08 0a638ade-14a7-4e31-b102-953f910425a8 1
+0eab3179-48cc-4e55-8ec9-b7516415aa75 LVDT裂缝计 e73ab0fd-f5f4-483f-be99-b076b25341d1 e73ab0fd-f5f4-483f-be99-b076b25341d1 e73ab0fd-f5f4-483f-be99-b076b25341d1 t SDVB20M-5A 深圳市信为LVDT裂缝计 2018-01-08 10:24:02.571+08 2018-01-17 17:37:14.197+08 6ef6a382-2a9c-46f8-8c9a-4660c726bfdd 4
+7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4 融合终端 f58d1dc4-346b-44b0-8151-837508852c77 f58d1dc4-346b-44b0-8151-837508852c77 f58d1dc4-346b-44b0-8151-837508852c77 f v1.1 2018-01-24 22:05:34.223+08 2018-01-24 22:49:58.63+08 \N 2
+342fde79-43b6-4d56-b5bc-37de3056e9fd 倾角传感器 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t INC628T 2018-08-10 09:50:00.665+08 2018-08-10 17:41:06.76+08 40f627af-dfd1-4cd2-9921-110d47d4461c 4
+b0a93683-5c88-4f1d-81de-5e41fed44566 振弦采集仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-F32M modbus 32通道振弦采集仪 2018-01-05 16:27:38.091+08 2018-07-23 11:17:06.941+08 005e2048-b7e8-4f7c-847f-e9918a66414d 1
+1e0d3ad9-26a9-427e-be48-685ffe3e84b7 多通道振弦采集仪 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 t HC-Z1600 上海华测创时测控科技有限公司 2018-01-05 16:48:16.693+08 2018-03-29 09:31:15.703+08 7c4ecd66-e051-42e2-87c7-2df59811c9e3 1
+7802bcc3-5fdb-441d-a57a-a89ca2ec158b 振弦式土压力计 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 t HC-Z1600-1204 (振弦式)和采集仪一起使用 2018-01-05 16:34:09.762+08 2018-03-29 09:31:42.936+08 7c4ecd66-e051-42e2-87c7-2df59811c9e3 4
+930f1b29-d056-40a8-9b86-62829634874c 无线数据采集仪 abc9e573-4426-4eee-b858-7d309e181f99 abc9e573-4426-4eee-b858-7d309e181f99 abc9e573-4426-4eee-b858-7d309e181f99 t DL-ES2108 2018-01-08 18:00:05.687+08 2018-07-24 18:05:18.94+08 509f878b-22a0-470a-81c5-b802c4b1e5b5 1
+d55af283-4d11-4eb7-8099-890d98bfcc0c 振弦式轴力计 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 t HC-Z1600-ZL110 (振弦式)和采集仪一起使用 2018-01-05 16:50:29.977+08 2018-03-29 09:31:45.074+08 7c4ecd66-e051-42e2-87c7-2df59811c9e3 4
+9abfc35c-6cff-489a-8257-b868954725f4 振弦式内埋式应变计 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 t HC-Z1600-1201 (振弦式)和采集仪一起使用 2018-01-05 16:18:59.231+08 2018-03-29 09:31:51.491+08 7c4ecd66-e051-42e2-87c7-2df59811c9e3 4
+5eb050b5-8b57-4528-adce-b3633e613b6c 振弦式表面式应变计 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 t HC-Z1600-1202 (振弦式)和采集仪一起使用 2018-01-05 16:34:08.785+08 2018-03-29 09:31:53.887+08 7c4ecd66-e051-42e2-87c7-2df59811c9e3 4
+70177dd0-b5ab-45c0-8338-a6f69138f85f 高精度数字输出型双轴倾角传感器 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 t HCA526T-30 北京瑞芬 2018-01-16 10:34:03.643+08 2018-03-29 14:24:55.664+08 19a42196-a096-4d6a-84d1-67d7c3030605 4
+3553eba2-db23-4cb8-b96d-e0d443644324 光栅光纤解调仪 1510d330-86c7-4950-ac34-695109bc07a8 1510d330-86c7-4950-ac34-695109bc07a8 1510d330-86c7-4950-ac34-695109bc07a8 t FT810-8 2018-08-16 15:26:39.98+08 2018-11-22 16:21:22.471+08 2169a008-9684-4625-b3ba-389b70c17ad1 1
+49b0b2b7-b6e7-4ec8-adf8-4c94dcfb2eae 振弦式渗压计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-4500S 配套 基康 (振弦)自动化数据采集仪 原公式水位可直接用振弦公式 2018-01-05 14:53:24.803+08 2018-03-23 11:37:07.437+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+7bd233a3-8bb9-45d7-8298-278d0288de46 测试拜安裂缝计 1510d330-86c7-4950-ac34-695109bc07a8 1510d330-86c7-4950-ac34-695109bc07a8 1510d330-86c7-4950-ac34-695109bc07a8 f baian-lf 2018-08-16 16:25:36.764+08 2018-08-16 16:30:25.379+08 \N 4
+ada233fb-1f59-4f50-991c-049331716bbf 振弦式钢筋应力计 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T-950 2018-08-15 14:40:50.438+08 2018-09-21 16:39:14.773+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+e6a3a1f5-2a8f-48a0-9758-407065bae1e9 振弦式量水堰计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-4675LV 配套 基康 (振弦)自动化数据采集仪 原公式水位可直接用振弦公式 2018-01-05 14:57:25.89+08 2018-03-23 11:37:09.71+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+a54c400e-8b31-47ec-9820-550d04916f47 无线温度传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M37 2018-01-08 17:03:45.936+08 2018-01-09 11:29:31.498+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+d3ae39b6-419c-4d57-a353-69768f82908a 激光位移传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t T12 2018-01-08 16:27:59.724+08 2018-01-09 11:30:13.425+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+947fdddf-6d80-4972-88cc-601559ca3458 光纤光栅应变传感器 72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53 72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53 72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53 f JEME-iFBG-JFSS-04 无公式 2018-01-08 16:40:09.748+08 2018-03-12 17:01:24.298+08 \N 4
+56e2d696-3384-449a-9072-46e2a18adbc8 多通道应变采集仪 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 t YBY-6010 2018-09-19 17:31:06.039+08 2018-09-26 17:13:14.055+08 05617d93-ff63-40e6-8d83-86ec25e6728c 1
+7d457a8b-5537-4186-bd68-df0c5868ef7e host 65f478f1-f37a-4b2d-9652-45e1a06ae0f0 65f478f1-f37a-4b2d-9652-45e1a06ae0f0 65f478f1-f37a-4b2d-9652-45e1a06ae0f0 f 1.0.0 主机 2018-01-09 17:00:52.097+08 2018-03-15 11:44:04.544+08 \N 2
+933a027b-e620-4a6e-8340-d10c7aa29009 无线温度传感器 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M36 2018-01-08 17:03:46.148+08 2018-01-09 11:29:28.351+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+209249f3-7316-4e7d-a3bf-df78afc260eb 振弦式地锚荷重计 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-9900-200T 2018-08-24 16:11:23.697+08 2018-08-24 16:46:31.466+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+301f43b2-e055-4169-8a27-c3d69b246a19 表面式应变计 5c2a5b34-3127-4921-bf54-49378012c0b0 5c2a5b34-3127-4921-bf54-49378012c0b0 5c2a5b34-3127-4921-bf54-49378012c0b0 f TCBM-150 搭配采集仪 2018-01-12 10:08:09.306+08 2018-01-12 10:10:16.962+08 \N 4
+962c0a4a-535e-4f86-a25c-f38e3aa6f144 位移计 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-7300 2018-01-08 11:06:18.378+08 2018-03-29 09:30:50.706+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+9f845f40-f7bf-4fe7-828e-8f488aff934e 振弦式埋入式应变计 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T-920 2018-08-15 14:38:59.631+08 2018-09-21 16:39:22.767+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+d6fe2897-a3e2-4aa8-9ba2-459831131cfa 静力水准仪 df6e436e-e4a6-4b25-b1c7-175209753c0f df6e436e-e4a6-4b25-b1c7-175209753c0f df6e436e-e4a6-4b25-b1c7-175209753c0f t HR8066 2018-08-07 15:28:53.892+08 2018-08-10 17:17:16.873+08 77ef3aea-fa21-4060-b06d-7dbca886f953 4
+0a341896-3c5d-4e60-af19-fe5f645c6967 水位计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-YWJ-JW 2019-01-19 17:15:44.532+08 2019-08-22 11:38:20.446+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+1489127c-8f48-448b-a86e-1604f08894ce 能见度传感器 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t AX-EXT-NJD 提取 2018-04-02 15:54:14.31+08 2018-04-02 17:05:50.473+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 4
+19bb2b93-6e2e-4861-95df-67a68bc71fc4 直线位移传感器 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-ZWY-50 2018-09-25 10:58:50.727+08 2019-08-22 14:10:52.902+08 005e2048-b7e8-4f7c-847f-e9918a66414d 0
+4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66 锚索计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-MS30 2018-04-16 16:01:22.128+08 2019-09-10 15:45:49.278+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+9297adfa-1972-45e3-a5c4-0f31a0acbe84 表面式应变计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-BM50 内埋式应变计 2018-03-26 11:27:35.43+08 2019-11-22 15:37:13.501+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+b0c20a76-7e51-479c-9837-1516be5a1567 振弦式土压力计 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T-660 2018-08-15 14:40:39.257+08 2018-09-21 16:39:11.41+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+77d8ba09-082d-405d-aeca-9a0d66f902c3 DAM-3055 406df859-191e-4c39-9faf-18b70e060d97 406df859-191e-4c39-9faf-18b70e060d97 406df859-191e-4c39-9faf-18b70e060d97 t 16路模拟量输入模块采集仪 2018-03-14 08:03:41.071+08 2018-03-30 09:53:24.487+08 f6f7a405-3c13-4d2b-b6e4-0f071c43ba84 1
+362018b7-e626-4eab-a6ad-214d85cfcc03 多点位移计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-DWY-20 配套 飞尚 多通道采集仪 2018-01-24 11:34:50.373+08 2018-03-27 11:06:23.397+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+d52af3c0-c4b0-4091-96c6-ac3e97535f92 盒式固定测斜仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-HGC01O Modbus 盒式固定测斜仪 2018-03-15 14:36:49.744+08 2018-06-25 11:33:51.795+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+3454606f-226a-4f3a-95d1-8aa7f602bfec 测试 c5e9fae9-aa0f-461b-a663-cb9fc8ff6d10 c5e9fae9-aa0f-461b-a663-cb9fc8ff6d10 c5e9fae9-aa0f-461b-a663-cb9fc8ff6d10 f 测试 测试 2018-03-20 16:00:18.48+08 2018-03-20 18:35:46.153+08 \N 2
+e5f12d4b-bb3c-4158-b98e-8af3579bd2cc 多点位移计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-DWY-05 配套 飞尚 多通道采集仪 2018-01-24 11:34:49.455+08 2018-03-27 11:06:25.926+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+1e20c41f-4f52-4d61-94e4-ae8496163aed 九轴全姿态电子罗盘 684052b5-3f7b-4e98-a4bd-2982f7d94203 684052b5-3f7b-4e98-a4bd-2982f7d94203 684052b5-3f7b-4e98-a4bd-2982f7d94203 t SEC295 2018-04-03 12:41:11.887+08 2018-05-07 21:06:01.546+08 b2f45a02-4a2f-49df-87e8-8e9b68269ebd 4
+fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45 振弦式土压力计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-TY02 振弦式土压力计 2018-03-26 11:41:39.42+08 2018-06-25 10:48:19.281+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+b3b4f0f1-7cdc-4892-9e6a-f4936931472c 温湿度计 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-TS485 2018-03-20 17:29:17.039+08 2018-04-11 15:44:02.384+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+10f69514-4a4b-4ecd-a318-f8bf0c81a965 振弦式测缝(位移)计 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-VJ400 频率温度 2018-01-04 11:19:16.703+08 2018-03-22 14:51:33.958+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+4e281788-df68-4193-bbe0-9159eee1f24e MCU32分布式自动测量单元 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MCU-32 南京基泰32通道采集仪 2017-12-29 17:15:38.753+08 2018-03-23 11:11:20.332+08 a4ea8d4c-a663-48d2-a163-47085a402235 1
+83d8bf62-35f8-48c5-afa2-0d454cb19f70 裂缝计 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t AX-EXT-LF 2018-03-26 17:36:26.27+08 2018-03-27 11:10:30.869+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 4
+0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83 振弦式土压力计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-TY10 振弦式土压力计 2018-03-26 11:43:23.154+08 2018-06-25 10:48:24.43+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+f30482b9-b518-4048-8217-bd64158911e6 振弦式土压力计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-TY20 振弦式土压力计 2018-03-26 11:43:24.163+08 2018-06-25 10:48:32.887+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+61f09dd0-ba56-40e4-a2d1-45dab1143900 光栅光纤温度传感器 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t AX-EXT-GX-WD 2018-03-16 11:37:21.285+08 2018-04-02 09:34:53.831+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 4
+a9d42f6d-8409-415c-937e-aea8bebf7a50 振弦式土压力计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-TY04 振弦式土压力计 2018-03-26 11:43:22.682+08 2018-06-25 10:48:21.522+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+5efb0ea9-ca31-4a41-9389-be6c24b3ad2c O2气体探测器 d3ab1979-3439-47ba-aa98-82b61a9d6260 d3ab1979-3439-47ba-aa98-82b61a9d6260 d3ab1979-3439-47ba-aa98-82b61a9d6260 t O2 2018-05-03 10:35:59.167+08 2018-05-07 11:38:50.234+08 753cecef-e0f0-47e7-8336-915f8d09bc74 4
+ae8d62c1-09f0-4fcd-bc62-add087919ff0 Ex气体探测器 d3ab1979-3439-47ba-aa98-82b61a9d6260 d3ab1979-3439-47ba-aa98-82b61a9d6260 d3ab1979-3439-47ba-aa98-82b61a9d6260 t Ex 2018-05-03 10:37:15.469+08 2018-05-07 11:38:54.177+08 753cecef-e0f0-47e7-8336-915f8d09bc74 4
+fdef19ae-68f1-4ad5-937b-3cb60e20d8ce 应变计 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe f FS-NM03 2018-05-10 17:53:00.775+08 2018-05-10 17:53:00.775+08 \N 4
+b3da87da-9dc0-443c-960e-ccea1c35f87e 液位传感器(测试) 406df859-191e-4c39-9faf-18b70e060d97 406df859-191e-4c39-9faf-18b70e060d97 406df859-191e-4c39-9faf-18b70e060d97 f ZL-YW 测试用 2018-03-14 08:24:49.328+08 2018-03-14 09:21:05.771+08 \N 4
+4af8678b-8f9b-48e6-b8f0-ea7ec7ed53ee 振弦式二次感应土压力计 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 t JTM-V2000A(C) 配套 基泰MCU32采集仪 2018-03-14 15:32:53.585+08 2018-03-29 15:34:53.551+08 69ff6b39-2d8c-443e-939d-f6c087588d22 4
+12a0ae21-df74-42b4-94ce-492125b941bd 光栅光纤应变传感器 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t AX-EXT-GX-YB 2018-03-21 09:54:46.393+08 2018-04-02 09:35:01.775+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 4
+4696ff30-0685-4f87-bc16-25d640a014a6 VS型振弦式应变计 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-VS100 2018-01-17 17:52:43.799+08 2018-03-23 14:12:57.463+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+6c650368-cf3e-4a75-a30d-01b2a37356fb 锚索计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-MS05 2018-04-16 14:07:58.001+08 2018-04-16 17:55:39.626+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+780de52c-47eb-46cb-b77b-3d919bae5ffb 温度传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-WD120T 2018-01-24 11:26:28.337+08 2018-03-26 16:50:30.763+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+d32eacce-7db0-4c15-b17c-f1d870389c14 盒式固定测斜仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-HGC01M Modbus 盒式固定测斜仪 2018-01-05 16:28:13.389+08 2019-08-22 11:41:16.33+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+290b9462-1958-4dce-a86f-a0f1c503c660 压力式水位计 df6e436e-e4a6-4b25-b1c7-175209753c0f df6e436e-e4a6-4b25-b1c7-175209753c0f df6e436e-e4a6-4b25-b1c7-175209753c0f t HR8006 2018-08-10 13:58:44.431+08 2018-08-10 17:17:20.041+08 77ef3aea-fa21-4060-b06d-7dbca886f953 4
+fbe11da9-a717-4a5e-bd90-93f394b46ccc CO气体探测器 d3ab1979-3439-47ba-aa98-82b61a9d6260 d3ab1979-3439-47ba-aa98-82b61a9d6260 d3ab1979-3439-47ba-aa98-82b61a9d6260 t CO 2018-05-03 10:34:23.741+08 2018-05-07 13:54:25.585+08 753cecef-e0f0-47e7-8336-915f8d09bc74 4
+c841ad96-ea6e-4050-b317-a0d79fecbead 迪辉采集仪 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 t C1W1Z 2018-03-16 09:57:17.059+08 2018-03-19 15:49:56.873+08 0c9fca00-5fd3-43ef-8264-09333066ff13 1
+1e7003bf-2cd1-4dcb-9ad9-116151f49ae6 空气质量监测仪 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t AX-EXT-AQI 提取\n 2018-04-02 16:51:42.723+08 2018-04-02 17:12:07.764+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 4
+003540d0-616c-4611-92c1-1cd31005eabf 雨量计 680b589c-4603-4011-a8df-f37373ad8930 680b589c-4603-4011-a8df-f37373ad8930 680b589c-4603-4011-a8df-f37373ad8930 t FS-YL 温州市华云仪器设备有限公司雨量计 2017-09-12 17:44:48.552+08 2018-04-04 09:31:21.312+08 8764ca24-be3e-4633-8dae-a8a100346a7c 4
+67b821eb-caf8-4352-a59b-360e7c9a3ad9 cexie 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe f FS-GH 2018-05-10 17:55:50.397+08 2018-05-10 17:55:50.397+08 \N 4
+27930598-2f6e-4932-a816-9685f17969b5 多点位移计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-DWY-10 配套 飞尚 多通道采集仪 2018-01-24 11:33:34.499+08 2018-03-26 17:24:51.051+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+1bda935e-56de-4365-b60e-f02d19299795 表面式应变计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-BM15 江西飞尚内埋式应变计 2018-03-26 11:24:13.103+08 2019-11-22 15:37:07.917+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+fb7bb438-ec7d-41fa-b7f5-737c395901bc 激光测距仪 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd t SLDS-A30 2018-06-07 15:37:44.381+08 2020-06-10 13:51:13.233+08 9f0e639f-37d3-4661-bf82-808a6291df48 4
+c8fd3080-b416-4381-8bcc-e84c12471281 振动传感器 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t DRHT-EXT-ZD 虚拟 2018-03-16 11:58:51.494+08 2018-06-11 10:44:55.738+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 4
+0d00f0b6-190e-430c-a626-c3e5efd2828c 钢筋应力计 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 t SZZX-C 2018-06-01 16:26:56.729+08 2018-12-29 17:12:26.574+08 631adf16-ff91-4949-8e6f-e13680319751 4
+38b81b7d-bb3e-4885-aaea-6035faf20d1b 激光测距仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-JGCJY-80-Z 2018-01-24 11:05:24.798+08 2019-06-14 15:43:20.22+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+4c79d9ed-386d-4540-bff3-82caf4d9d329 应变采集仪 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 t SZDQ-ZX 应变采集仪 2018-06-01 16:02:25.951+08 2018-12-29 17:12:23.305+08 631adf16-ff91-4949-8e6f-e13680319751 1
+e458516d-60cf-4395-8ec5-df491ae97d3e 激光测距仪 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd t SLDS-C30 2018-06-07 14:25:03.217+08 2018-12-20 09:24:53.306+08 9f0e639f-37d3-4661-bf82-808a6291df48 4
+5ac91988-c93a-4176-9f33-7c6ba110590f 磁致伸缩水位计 ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c t KYDM-FP1M-600 2018-05-29 11:41:59.932+08 2018-05-29 13:36:59.675+08 b2cdf84b-2f7e-4c47-9132-a579b62a3926 4
+077f4241-fe27-4cbc-9918-cf5b8d1c8283 单轴倾角仪 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MCU1R-MI600E 接单通道485采集仪 2018-05-11 10:41:15.488+08 2018-05-18 09:49:53.367+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+c9a11ba9-fb0d-4a82-b480-7539948c9b56 双轴倾角仪 36b70d6d-c974-4742-9257-b555027d36cd 36b70d6d-c974-4742-9257-b555027d36cd 36b70d6d-c974-4742-9257-b555027d36cd t QKQH2-485 协议同无锡北微BWK426 2018-06-11 14:59:44.579+08 2018-06-12 14:11:51.712+08 6a7e732d-908a-424d-a55c-6fe5b860e266 4
+9aff4ead-342b-40e8-b365-6a53212df7dd 云盒 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t JC-T2 2018-06-19 09:45:35.591+08 2018-06-19 10:11:46.09+08 40f627af-dfd1-4cd2-9921-110d47d4461c 1
+1991c0ef-7dd2-4290-ad34-c8bc82161d2f 激光测距仪 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t MSSLD5 2018-06-19 09:50:26.157+08 2018-06-19 10:11:50.733+08 40f627af-dfd1-4cd2-9921-110d47d4461c 4
+5838090c-ced5-4fb2-9320-53c516ee9b33 test01 7a616e3e-fa02-4954-983f-947f27c4ffd5 7a616e3e-fa02-4954-983f-947f27c4ffd5 7a616e3e-fa02-4954-983f-947f27c4ffd5 f test01 2018-07-03 19:14:02.247+08 2018-07-03 19:14:02.247+08 \N 4
+2bd37bef-1f44-47e9-8086-b0343328eb0c testshebi 352a31c7-1e5e-4c52-85f6-2fa692d0fda9 352a31c7-1e5e-4c52-85f6-2fa692d0fda9 352a31c7-1e5e-4c52-85f6-2fa692d0fda9 f 1.0 2018-07-10 11:55:47.357+08 2018-07-10 11:55:47.357+08 \N 4
+717279c9-81b5-4bfe-8dd3-906297d70e41 称重传感器 4d2bdba7-f602-4d5b-b066-82902bbc7472 4d2bdba7-f602-4d5b-b066-82902bbc7472 4d2bdba7-f602-4d5b-b066-82902bbc7472 t BHL-5T 济南博林自动化设备有限公司 2018-03-19 14:57:03.359+08 2018-04-02 11:07:17.213+08 82be60e4-7d72-48fd-91ab-c8616819b103 4
+1d48c633-6d83-4b96-a572-6f59a0100c9b 振弦式单点沉降计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-B-LG-100 配套 飞尚 多通道采集仪 2018-01-24 11:30:26.753+08 2018-03-26 16:50:19.742+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+d31031ab-0237-41a5-adc0-867c1e9952f7 表面式应变计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-BM30 内埋式应变计 2018-03-26 11:27:33.44+08 2019-11-22 15:37:11.341+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+efdb6604-3283-41b2-9a30-aa532a49d897 温度传感器 420dc3f1-45b2-42e3-a021-6eb9fa3f5769 420dc3f1-45b2-42e3-a021-6eb9fa3f5769 420dc3f1-45b2-42e3-a021-6eb9fa3f5769 f 111111 2018-05-11 15:45:31.12+08 2018-05-11 15:45:31.12+08 \N 2
+6ac55754-f252-4ba5-ba9c-72a158734b97 导轮固定测斜仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-GGC01-CL 单轴传感器 2018-10-05 09:56:54.394+08 2020-04-05 12:10:19.699+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+b55b3b15-5db9-4946-a5a9-b0d352de6a24 风速风向传感器传感器 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b t NHFSX48 配套 BGK-Micro-40D 2018-03-15 16:51:58.425+08 2018-03-16 11:28:56.922+08 66a47769-cf2c-4708-bde1-48eae1617ade 4
+9d6f5e3b-2821-48f0-b5c5-997baf346f39 倾角传感器 0be11993-6e55-415e-b770-792f29f98f9f 0be11993-6e55-415e-b770-792f29f98f9f 0be11993-6e55-415e-b770-792f29f98f9f t LFQJ01 设备主动上传 2018-05-29 14:51:48.717+08 2018-05-29 16:30:43.625+08 c016deb0-edb2-4cb3-93ad-3150c8db04ac 4
+7c2ff6f1-5bb6-4736-91cd-1bd068e760aa 风速风向传感器 1a285b38-8605-48ec-ba06-16f5942bee81 1a285b38-8605-48ec-ba06-16f5942bee81 1a285b38-8605-48ec-ba06-16f5942bee81 t FC-5SX 模拟量传感器 2018-05-28 14:03:33.949+08 2018-05-28 15:43:34.788+08 090ff792-d47f-4b12-b31e-71402175f9b0 4
+874e1ee5-94fe-49aa-94b0-6d6bfef680bc 单轴倾角仪 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MI600E 单独使用 不接采集仪 2018-03-15 17:10:39.884+08 2018-04-17 16:13:22.836+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+c15c6be6-83b0-47ea-ac05-38d625eb8ac8 单轴倾角仪 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MCU4-MI600E 单独使用 不接采集仪 2018-04-02 17:17:24.074+08 2018-05-18 09:49:51.045+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+8185c197-338c-42e3-acfc-acba2bb1b180 静力水准仪 ddbc4ad1-b448-4bed-82b8-f33fb5264f35 ddbc4ad1-b448-4bed-82b8-f33fb5264f35 ddbc4ad1-b448-4bed-82b8-f33fb5264f35 t MIC-TD-SM 2018-04-04 16:47:18.027+08 2018-04-08 16:22:03.805+08 48556475-af79-4323-bab2-38274bcb8563 4
+219cbb09-9c49-4167-846d-00a8bdfadb9a 绳索张力传感器 eb23c67c-17aa-4909-8bba-8119130ed7f8 eb23c67c-17aa-4909-8bba-8119130ed7f8 eb23c67c-17aa-4909-8bba-8119130ed7f8 t LKCG-Z-1T-485 实际型号 未知 一个变送器对应一个传感器 2018-01-23 10:22:18.296+08 2018-05-21 15:39:30.242+08 eea84701-c78b-4752-96fa-75ea7dd649d4 4
+bbf47be7-1d85-4e1b-b356-70be269a0d32 多通道振动采集仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-iZD08 云振动采集仪 2018-03-28 14:52:06.903+08 2018-09-10 17:11:43.42+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+78540227-fdf9-47ed-841e-7b76fed0f788 测斜仪 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f AX_Inclinometer 设备主动上传 2018-05-28 10:45:28.317+08 2018-05-28 10:45:28.317+08 \N 4
+9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec 压差式变形测量传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LTG-Y200-Z 压差式变形测量传感器 2018-01-24 11:19:06.355+08 2019-06-14 15:31:21.625+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+4a84b11e-7f79-47ff-b530-6cbc5615b491 超高精度数字双轴倾角传感器 af8080e1-5282-4133-81ad-97ba568cf313 af8080e1-5282-4133-81ad-97ba568cf313 af8080e1-5282-4133-81ad-97ba568cf313 f CY-QJ02-15R 溧阳市超源仪器厂 2018-04-24 09:41:01.38+08 2018-04-24 09:41:01.38+08 \N 4
+ed5ede03-616b-4df7-b741-eea396939ecf 倾角仪 d5b4f900-6aac-40dc-8c6d-d38bc27004d1 d5b4f900-6aac-40dc-8c6d-d38bc27004d1 d5b4f900-6aac-40dc-8c6d-d38bc27004d1 f jmqj-7330adx 2018-05-09 10:42:20.025+08 2018-05-09 10:42:20.025+08 \N 4
+51654fb3-cd61-405e-890f-ade3931c8b7e 振动传感器 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t AX-EXT-ZD 通用 2018-06-04 18:00:22.394+08 2018-06-04 18:02:38.895+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 4
+66717a8f-3c59-41e0-ab21-bf6bcdde55ea 激光测距仪 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-A30 2018-06-07 15:54:22.257+08 2018-06-07 15:59:42.259+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+2d547109-73ea-48f5-99b8-48dd9236e19b http传感器 36b70d6d-c974-4742-9257-b555027d36cd 36b70d6d-c974-4742-9257-b555027d36cd 36b70d6d-c974-4742-9257-b555027d36cd f testhttpmodel 2018-06-13 16:57:27.849+08 2018-06-13 16:57:40.211+08 \N 4
+727fa9b6-b621-41cb-b084-ef3f74f7c496 裂缝传感器 cb9f2b84-b356-4721-b75e-da2a575068f4 cb9f2b84-b356-4721-b75e-da2a575068f4 cb9f2b84-b356-4721-b75e-da2a575068f4 t BT-LF01-01R 2018-04-10 09:58:21.444+08 2018-09-20 17:33:08.533+08 78f556c0-d435-40e7-aece-08b652e146f0 4
+b15a4ae0-8100-4809-978d-50914fdc2f32 裂缝计 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t CRAB5KB 2018-06-19 09:48:17.006+08 2018-06-19 10:11:48.597+08 40f627af-dfd1-4cd2-9921-110d47d4461c 4
+af1cd7e8-52e1-4411-9c9a-20bc82a2786d 盒式固定测斜仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-HGC01O 老版本 2017-12-14 16:49:47.934+08 2018-07-23 17:16:02.432+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+bbedec49-a055-4238-9e60-98ad22b84379 风压传感器 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-FYL 2018-08-10 14:52:45.116+08 2018-08-10 15:28:49.609+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d 孔隙水压计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-KY01C 工讯科技(深圳)有限公司 2018-04-08 14:00:40.978+08 2018-08-07 19:04:31.379+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+8b83567e-d874-40f2-a7e4-f78d6cb5415c 基泰四通道RS485采集仪 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MCU-4R-SZ 2018-04-02 17:21:29.441+08 2018-06-07 13:17:06.1+08 a4ea8d4c-a663-48d2-a163-47085a402235 1
+cf54dd7a-2c8a-4f16-9f92-7484af585f13 孔隙水压计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-KY02C 工讯科技(深圳)有限公司 2018-04-08 14:06:24.491+08 2018-08-07 19:04:29.103+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+50600703-5c4c-4ceb-a44d-d0b79882b1dc 振弦式单点沉降计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-B-LG-200 配套 飞尚 多通道采集仪 2018-01-24 11:32:24.979+08 2018-03-26 16:56:46.441+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+28d8942e-d1ab-40ee-878a-c3b2f60da896 差阻式应变计 6d7887f9-566b-4a52-a1d6-cba8c439173a 6d7887f9-566b-4a52-a1d6-cba8c439173a 6d7887f9-566b-4a52-a1d6-cba8c439173a t DI-10 配套 基泰MCU32采集仪 2018-03-14 15:54:05.894+08 2018-03-23 15:00:14.835+08 71110a7c-82f3-4a69-ba1f-179018d3fc1b 4
+324eb312-14cd-4931-a6e0-f84880fb8ac5 fdds cb3f6958-fdbf-441d-8009-1fb1ecc61589 cb3f6958-fdbf-441d-8009-1fb1ecc61589 cb3f6958-fdbf-441d-8009-1fb1ecc61589 f gff 2018-04-24 15:29:24.93+08 2018-04-24 15:29:24.93+08 \N 4
+ee21c9a6-d51b-4f10-83cc-8c9611003cfa 分布式智能云采集系统 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-iFWL-JD 节点 2018-03-15 13:49:32.756+08 2018-04-09 16:13:00.735+08 005e2048-b7e8-4f7c-847f-e9918a66414d 1
+63429c67-5b55-4b88-998c-65d4464623c8 百叶外壳气温气湿气压传感器 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b t NHF121 配套 BGK-Micro-40D 2018-03-15 16:52:12.15+08 2018-03-16 11:29:00.059+08 66a47769-cf2c-4708-bde1-48eae1617ade 4
+e8b04a28-9fe8-4fd4-b5e9-7c8990e19e2d 地灾 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f disaster 2019-12-04 17:52:07.964+08 2019-12-04 17:52:07.964+08 \N 4
+09252236-560b-47e1-bf81-f774d303ba26 压电式振动传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ZD-S10 2018-03-28 14:54:49.031+08 2019-10-30 09:40:28.846+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+5d399cb2-7e5a-4a27-bff0-e1769f43499d 振弦式应变计 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 t JTM-V5000B 配套 基泰MCU32采集仪 2018-03-14 15:32:30.948+08 2018-03-29 15:34:45.855+08 69ff6b39-2d8c-443e-939d-f6c087588d22 4
+aa6f3b0e-9bd2-41e8-801d-730aca3e32fb 振弦式孔隙水压力计 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 t JTM-V3000 配套 基泰MCU32采集仪 2018-03-14 15:32:44.472+08 2018-03-29 15:34:49.399+08 69ff6b39-2d8c-443e-939d-f6c087588d22 4
+35046949-3e59-43c1-8898-bfc7995c3da9 固定式倾斜计 abe57a42-14ab-448b-b96f-14875e86ca40 abe57a42-14ab-448b-b96f-14875e86ca40 abe57a42-14ab-448b-b96f-14875e86ca40 f SZZX-DGXXAD 2018-05-30 20:45:30.276+08 2018-05-30 20:45:30.276+08 \N 4
+d75d2473-6ed4-437c-8509-682f55d0d407 内埋式应变计 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 t YH03-A30 湖南湘银河传感科技有限公司 2018-04-11 09:27:08.912+08 2018-04-26 00:01:41.03+08 1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa 4
+08ca737d-d94b-46f2-bb48-33327b7fc0eb 张力变送器 eb23c67c-17aa-4909-8bba-8119130ed7f8 eb23c67c-17aa-4909-8bba-8119130ed7f8 eb23c67c-17aa-4909-8bba-8119130ed7f8 t LKBSY-Z-485 原 河北荣欧电子有限公司 SX-TJ40 2018-01-23 10:17:42.558+08 2018-04-27 14:42:34.401+08 eea84701-c78b-4752-96fa-75ea7dd649d4 1
+3b03e747-cc81-4f6e-9ccf-f828a5534096 119 81751935-b378-45c5-b60a-eeff63ea4460 81751935-b378-45c5-b60a-eeff63ea4460 81751935-b378-45c5-b60a-eeff63ea4460 f 119 2018-05-09 11:11:01.647+08 2018-05-09 11:11:01.647+08 \N 4
+34e0efb7-3081-4432-acb3-1f21d62ace7a 采集卡 5f62fd39-0b72-492e-99be-308c935c1b64 5f62fd39-0b72-492e-99be-308c935c1b64 5f62fd39-0b72-492e-99be-308c935c1b64 t K8662 2018-06-05 14:51:24.803+08 2018-06-05 14:54:01.667+08 a1132fa4-352a-4b5e-b0e9-d2d4d0df290e 1
+7674c64d-e09e-4257-8726-c64a26ed309a 锚索计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-MS10 2018-04-16 16:00:53.258+08 2018-04-16 17:55:42.135+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+aee112f2-97fd-415e-b3b8-7009ea712ab1 分布式智能云采集系统 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-iFWL-V2.10 节点 2018-03-08 18:55:40.778+08 2019-11-21 10:09:31.817+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+40a69ace-03f8-4acf-8cf7-6acf43ac2de8 振弦式压力计 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 t JTM-Y1800 配套 基康 振弦采集仪 2018-05-28 10:50:00.15+08 2018-05-28 15:41:49.299+08 69ff6b39-2d8c-443e-939d-f6c087588d22 4
+235b7fe6-cf6f-4cf4-8d40-a3103cc0fba7 温度传感器 275e6287-8ef6-4bc1-8e57-72f3d6404d8f 275e6287-8ef6-4bc1-8e57-72f3d6404d8f 275e6287-8ef6-4bc1-8e57-72f3d6404d8f t ZL-WD 2017-12-19 17:47:35.432+08 2018-05-21 15:22:10.01+08 c41ab05c-aa3d-4d60-9dc3-217323b6e9c7 4
+260e307b-9a7c-4f75-90cd-79710a7d0221 激光测距仪 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-C30 2018-06-07 15:54:34.22+08 2018-06-07 15:59:44.453+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+4efc7878-409b-4195-b3e6-ed93b829fed9 虚拟DTU网关 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t AX-EXT 通过dtu上报的文件解析 2018-06-14 10:34:18.647+08 2018-06-14 14:17:04.359+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 1
+aee912ea-c6a4-4a83-9869-2506e911841f asd eb5a59f3-6098-4024-a27a-0b795cf9834f eb5a59f3-6098-4024-a27a-0b795cf9834f eb5a59f3-6098-4024-a27a-0b795cf9834f f asd 2018-01-26 10:53:57.362+08 2018-01-26 10:53:57.362+08 \N 0
+28e16f07-c183-4d20-a706-d507fadf1469 11 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 f 111 2018-01-30 14:12:41.414+08 2018-01-30 14:12:41.414+08 \N 1
+745e1f26-ee66-45dd-9606-052a34a944fc 风速传感器 76ba35a6-d733-40eb-b290-6538f9e9c77f 76ba35a6-d733-40eb-b290-6538f9e9c77f 76ba35a6-d733-40eb-b290-6538f9e9c77f t SM5386B 2018-01-30 17:38:49.91+08 2018-01-30 17:41:25.128+08 dec876d4-09b0-4aa0-b12b-bcb3ba8f295a 4
+67becf68-18c7-4ab3-83b2-d306f89bd25d 烟雾传感器 76ba35a6-d733-40eb-b290-6538f9e9c77f 76ba35a6-d733-40eb-b290-6538f9e9c77f 76ba35a6-d733-40eb-b290-6538f9e9c77f t SM3571B 上海搜博实业有限公司 2018-01-30 17:26:52.463+08 2018-01-30 17:41:28.959+08 dec876d4-09b0-4aa0-b12b-bcb3ba8f295a 4
+bcc5cadb-0395-464b-8ead-ac3917b49e30 直线位移传感器 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 t FS-ZWY-200 深圳市米朗科技有限公司 2018-02-28 16:21:12.162+08 2018-03-06 14:57:47.568+08 cfe75451-de08-456e-a858-16ed82f63574 4
+12adcb99-432b-46f5-9240-dad30ec75ea6 直线位移传感器 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 t FS-ZWY-250 深圳市米朗科技有限公司 2018-02-28 16:01:53.158+08 2018-03-06 14:57:52.104+08 cfe75451-de08-456e-a858-16ed82f63574 4
+22827d64-06e1-4752-a0b6-3cf6fb36cd21 trgdg e803485f-247f-4792-8d98-37b9a2a70d2e e803485f-247f-4792-8d98-37b9a2a70d2e e803485f-247f-4792-8d98-37b9a2a70d2e f 4 2018-02-02 16:19:55.404+08 2018-02-02 16:19:55.404+08 \N 2
+8e752366-9256-4bab-a79b-276a89aea484 直线位移传感器 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 t FS-ZWY-150 深圳市米朗科技有限公司 2018-02-28 16:21:13.112+08 2018-03-06 14:57:56.127+08 cfe75451-de08-456e-a858-16ed82f63574 4
+edcdb4a2-9f82-46d7-bba1-3ebb4f69483e test2 cc8dde53-d482-45d2-8216-78628899396a cc8dde53-d482-45d2-8216-78628899396a cc8dde53-d482-45d2-8216-78628899396a f 123 2018-02-06 17:44:49.256+08 2018-02-06 17:44:49.256+08 \N 2
+0f4f59de-cde7-4aec-a402-703e5426bb76 压差式变形测量传感器 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-YC-200 压差式变形测量传感器 2018-02-05 11:21:49.783+08 2019-01-02 10:09:55.433+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+7faf119d-7804-470c-a448-516d681cce6b 111 a6791a14-ab8e-477e-aee9-4f340e7cf7bb a6791a14-ab8e-477e-aee9-4f340e7cf7bb a6791a14-ab8e-477e-aee9-4f340e7cf7bb f 2 1 2018-03-28 15:40:02.837+08 2018-03-28 15:40:02.837+08 \N 4
+d148ae2e-c0dd-4e57-a0e8-833d32107f31 液压式静力水准仪 ef70d798-67c0-4772-9639-3d9b805f5941 ef70d798-67c0-4772-9639-3d9b805f5941 ef70d798-67c0-4772-9639-3d9b805f5941 t RP-1101 上海融频电子科技有限公司 2018-02-05 14:54:12.658+08 2018-03-29 17:27:27.346+08 db1e176b-c3c8-47b1-808b-7e33570add81 4
+9497edfc-bee0-4aac-b65d-2f1af60cc760 test cc8dde53-d482-45d2-8216-78628899396a cc8dde53-d482-45d2-8216-78628899396a cc8dde53-d482-45d2-8216-78628899396a f test 123 2018-02-06 16:34:19.384+08 2018-02-06 16:34:19.384+08 \N 1
+167d20c6-d128-4532-9974-d4a55788823e 直线位移传感器 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 t FS-ZWY-50 深圳市米朗科技有限公司 2018-02-28 16:21:14.316+08 2018-03-06 14:58:04.439+08 cfe75451-de08-456e-a858-16ed82f63574 4
+1a6ea847-974c-49f4-b1e6-452665775d49 融入 7a168bfe-18ce-463d-87c0-bb4f221d7942 7a168bfe-18ce-463d-87c0-bb4f221d7942 7a168bfe-18ce-463d-87c0-bb4f221d7942 f 11123221 2018-02-27 16:28:09.403+08 2018-02-27 16:28:09.403+08 \N 0
+5ecfc751-afb0-4596-a6f7-85a31eca40c3 智能数码静力水准仪 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c t JMDL-6220ADT 带温度 业务侧压强转换公式Δh=(Pi-P0)/(ρ*g) 2018-02-07 09:45:44.205+08 2018-02-07 11:27:18.704+08 941c9c57-031c-4e4c-9a2b-5e544e387274 4
+aaa7d270-43dc-4864-bb0a-967c33658698 位移计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 f T-700-25MM 2018-02-07 16:40:02.698+08 2018-02-07 16:40:02.698+08 \N 4
+ee8205dc-c9b0-4c29-b85f-9a54216ab198 数据采集仪 b8127c53-f372-4ef5-bad6-8520cde9e94f b8127c53-f372-4ef5-bad6-8520cde9e94f b8127c53-f372-4ef5-bad6-8520cde9e94f f YC-M800 2018-02-09 14:00:32.667+08 2018-02-09 14:00:32.667+08 \N 1
+c98659b5-30ec-471f-9654-41f5f8df47b0 表面应变计 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T-900 2018-02-11 16:58:21.729+08 2018-02-12 10:17:31.996+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+fdf34922-d64e-4616-9313-96d7d94b8412 数字式倾角仪 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T-800-Y 2018-02-11 17:07:24.764+08 2018-02-12 10:17:38.284+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+699b9288-1402-48ab-ae80-31eacc42652e 1 2d6cc626-0499-4724-8803-602deb42bcb4 2d6cc626-0499-4724-8803-602deb42bcb4 2d6cc626-0499-4724-8803-602deb42bcb4 f 1 2018-04-27 16:05:28.259+08 2018-04-27 16:05:28.259+08 \N 4
+b53146b9-7737-46cd-a305-e2c9cb286d3d 倾角仪 5b0d5739-36a1-4e88-a838-7ac252171dc6 5b0d5739-36a1-4e88-a838-7ac252171dc6 5b0d5739-36a1-4e88-a838-7ac252171dc6 t YHQ1000-15 溧阳市超源仪器厂 2018-02-11 17:16:18.657+08 2018-02-12 10:17:47.449+08 003a11c4-85db-4f09-a55a-02b1144840ad 4
+7fefd73e-8fd9-48a6-8d7a-76f5796a8197 数字式倾角仪 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T-800-X 2018-02-06 17:17:32.179+08 2018-02-12 10:26:49.834+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+9137c92c-6de6-4b00-bafc-a995288280f7 位移计 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T-700-25MM 2018-02-06 17:32:56.511+08 2018-02-12 10:26:54.672+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+a8e0db23-0d35-4eb1-a5b8-deadd9c3d80d 智能静力水准仪 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 t JL-1 2018-02-27 09:46:30.751+08 2018-04-17 11:52:08.323+08 4f3d93c3-5322-4bef-b358-e98b1589874d 4
+0f069d0a-8f7e-4480-b864-201a86725331 http设备 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f 1 2018-08-17 11:17:05.429+08 2018-08-17 11:17:05.429+08 \N 0
+0ca9c27a-7633-4d1b-b46b-aadf7ce9bf3b mqtt设备 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f q 2018-08-17 11:27:21.513+08 2018-08-17 11:27:21.513+08 \N 0
+2e2456a6-9738-456c-abf1-94d5ebad124a 压差式变形测量传感器 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-YC-500 压差式变形测量传感器 2018-02-05 11:22:03.782+08 2019-01-02 10:09:57.588+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+36918a6c-395e-4f8c-93b1-7ca400374cf8 6通道无线数据采集单元 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 f T-420 2018-02-07 16:37:15.373+08 2018-03-19 15:54:18.243+08 \N 1
+388cca81-7338-40d3-ba1f-89ec9d5aa2f7 振弦式应变传感器 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t AX-EXT-YB 2018-03-25 19:20:49.922+08 2018-03-26 17:28:24.319+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 4
+1f16c362-1f8e-4cbc-8b2c-8f43dd306390 直线位移传感器 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 t FS-ZWY-350 深圳市米朗科技有限公司 2018-02-28 16:48:44.493+08 2018-03-06 14:58:22.914+08 cfe75451-de08-456e-a858-16ed82f63574 4
+d54f6d25-04dc-4847-8dda-9c54d54b2d8f 直线位移传感器 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 t FS-ZWY-500 深圳市米朗科技有限公司 2018-02-28 16:48:46.676+08 2018-03-06 14:58:32.565+08 cfe75451-de08-456e-a858-16ed82f63574 4
+a570a2de-ca66-488a-a078-6c6b14b71f2a 直线位移传感器 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 t FS-ZWY-450 深圳市米朗科技有限公司 2018-02-28 16:48:46.005+08 2018-03-06 14:58:36.183+08 cfe75451-de08-456e-a858-16ed82f63574 4
+8571c1b0-8472-45b5-955f-5a7614a2f08c 直线位移传感器 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 t FS-ZWY-400 深圳市米朗科技有限公司 2018-02-28 16:48:45.373+08 2018-03-06 14:58:40.164+08 cfe75451-de08-456e-a858-16ed82f63574 4
+00b58795-1a49-4171-b60f-a0e32a25f6f6 倾角补偿三维电子罗盘 684052b5-3f7b-4e98-a4bd-2982f7d94203 684052b5-3f7b-4e98-a4bd-2982f7d94203 684052b5-3f7b-4e98-a4bd-2982f7d94203 t SEC345 2018-04-03 11:53:08.683+08 2018-04-04 09:31:10.893+08 b2f45a02-4a2f-49df-87e8-8e9b68269ebd 4
+1f6ae927-989f-48b3-9fa4-18518326953b 振弦式埋入式应变计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-4200 配套 基态MCU32 采集仪 基康也通用 2018-03-14 16:17:20.804+08 2018-03-23 11:36:50.814+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+fa0123d0-7db7-4412-9670-53175d0c2c40 分布式智能云采集系统 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-iFWL-WG 云网关 2018-03-15 13:45:07.079+08 2019-09-24 11:53:47.581+08 005e2048-b7e8-4f7c-847f-e9918a66414d 1
+da7a3b52-f9fb-4e4c-bf41-dda355ec5585 testpost a971c084-cc83-4e41-80f6-c8de9df9b9d6 a971c084-cc83-4e41-80f6-c8de9df9b9d6 a971c084-cc83-4e41-80f6-c8de9df9b9d6 f testpost 2018-05-31 07:52:27.744+08 2018-05-31 07:52:27.744+08 \N 4
+22fee831-1acb-498b-a4f4-c73ca9e48eac (RS485)自动化数据采集仪 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-Micro-40D (无公式) D系列只接基康485 2018-03-09 16:27:20.874+08 2018-03-28 11:23:57.763+08 b28ef84f-ad39-4657-8465-7968e542bdcd 1
+86cc781e-642b-40ee-b49f-1e94aec669ae 工作站 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t AX_GZZ 2018-03-16 13:57:33.019+08 2018-05-23 10:56:41.017+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 1
+1f3f14a2-a6d4-44a5-859b-3406794e7b37 孔隙水压计 37315d9c-8e25-4ec7-901b-851fdcb94068 37315d9c-8e25-4ec7-901b-851fdcb94068 37315d9c-8e25-4ec7-901b-851fdcb94068 f BP0-KY 振弦公式转水压(搭配采集仪) 2018-01-08 17:19:40.364+08 2018-03-19 15:50:16.542+08 \N 4
+4142b1cc-3576-456b-b0e4-31e68cc16b32 LVDT裂缝计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-LF10 LVDT裂缝计 2018-04-08 14:40:13.988+08 2019-08-22 11:42:55.111+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+65b984f5-c294-49fa-8433-510d38416095 温湿度传感器 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t AX-EXT-WSD 2018-03-26 13:57:13.714+08 2018-03-26 17:26:42.873+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 4
+110a38a6-8cb9-43c5-9682-4b1ba0e9d01f 锚索计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-MS40 2018-04-16 16:14:50.346+08 2018-04-16 17:55:34.355+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+4a7b8b8f-6ba0-4731-af44-8f3f6d30a928 锚索计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-MS20 2018-04-16 16:00:54.771+08 2018-04-16 17:55:45.012+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+0363c038-6fa5-4290-adaf-c9afa18f1171 气体采集仪 d3ab1979-3439-47ba-aa98-82b61a9d6260 d3ab1979-3439-47ba-aa98-82b61a9d6260 d3ab1979-3439-47ba-aa98-82b61a9d6260 t SY-01 2018-05-03 08:54:32.771+08 2018-05-07 11:38:41.004+08 753cecef-e0f0-47e7-8336-915f8d09bc74 1
+1cfa35c8-129a-45eb-9304-2b105bc22380 风速风向仪 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b t NHFS47 2018-05-09 13:55:22.679+08 2018-05-09 16:35:25.183+08 66a47769-cf2c-4708-bde1-48eae1617ade 4
+8fb33fdb-3378-44a4-8e48-ec79ff29a37e PM2.5监测仪 f7d6caec-f4d1-4641-92bf-5f918ea8d13c f7d6caec-f4d1-4641-92bf-5f918ea8d13c f7d6caec-f4d1-4641-92bf-5f918ea8d13c t XHPM2000E 2018-04-03 11:52:10.931+08 2018-05-17 09:38:57.376+08 6fa763bc-933a-4b3d-a15f-a9cb6dba7d3d 4
+21c691a7-7a5a-4262-a3fe-cedb0c37e5fe 称重传感器 eb23c67c-17aa-4909-8bba-8119130ed7f8 eb23c67c-17aa-4909-8bba-8119130ed7f8 eb23c67c-17aa-4909-8bba-8119130ed7f8 t LKCG-C-1T-485 2018-03-09 14:51:58.789+08 2018-05-21 15:39:33.822+08 eea84701-c78b-4752-96fa-75ea7dd649d4 4
+e5c11c48-0e03-4229-b879-a487b7cda972 test af7e2920-f377-444d-be96-71bc0c02c747 af7e2920-f377-444d-be96-71bc0c02c747 af7e2920-f377-444d-be96-71bc0c02c747 f sssss 2018-05-17 10:26:47.524+08 2018-05-17 10:26:47.524+08 \N 2
+200655be-879b-4a82-8a17-1ff1ccb9f961 电流输出型双轴倾角传感器 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 t SCA-128T 双轴接不同通道 类似单轴 2018-05-28 11:45:20.145+08 2018-06-01 10:39:02.789+08 19a42196-a096-4d6a-84d1-67d7c3030605 4
+f4976287-96c1-42a2-aedf-0d8e8ab739c5 双轴倾角仪 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MI600E-D 单独使用 不接采集仪 2018-03-29 13:37:27.97+08 2018-11-06 19:45:27.964+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+df1112e3-a161-4260-850f-8f6644389623 静力水准仪 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MCU32-MSL570 2018-08-17 11:33:00.257+08 2018-08-17 11:38:46.917+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+c7cd0af4-425e-42e5-a5ad-cc2b9369c84b 锚索测力计 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 t SZZX-T 2018-06-01 16:29:14.98+08 2018-12-29 17:12:29.092+08 631adf16-ff91-4949-8e6f-e13680319751 4
+3f493145-8216-487c-b145-d58dacf9c570 孔隙水压计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-KY10C 工讯科技(深圳)有限公司 2018-04-08 14:06:27.652+08 2018-08-07 19:04:38.533+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+83881bee-4e8c-4ad6-a11f-45810d035b3d 液压式静力水准仪 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-9410 同 融频电子 2018-05-17 13:55:17.784+08 2019-09-23 09:08:45.785+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 钢筋计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GJ28 配套飞尚多通道振弦采集仪 2018-01-05 14:53:53.022+08 2019-11-09 10:53:15.031+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+c69575ab-795c-45ec-8901-f370255beff1 传感器挂公式 3e663c2d-1b5c-4742-aef3-a0c1368cc4b3 3e663c2d-1b5c-4742-aef3-a0c1368cc4b3 3e663c2d-1b5c-4742-aef3-a0c1368cc4b3 t restModel 2018-03-01 14:29:42.722+08 2018-03-01 14:37:59.999+08 4e512f12-08de-4514-8da9-73b4b6c587f3 4
+4d3ecec5-32b4-4d9b-aa02-a08275dd10c7 振弦式应变计 6d7887f9-566b-4a52-a1d6-cba8c439173a 6d7887f9-566b-4a52-a1d6-cba8c439173a 6d7887f9-566b-4a52-a1d6-cba8c439173a t NZVS 配套 基泰MCU32采集仪 2018-03-14 15:53:53.99+08 2018-03-23 15:00:09.564+08 71110a7c-82f3-4a69-ba1f-179018d3fc1b 4
+ea2cc9e5-072a-4994-a232-f79655536c64 孔隙水压计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-KY04C 工讯科技(深圳)有限公司 2018-04-08 14:06:26.067+08 2018-08-07 19:04:33.392+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+10ac4010-ff56-4d05-9e45-55f84f4292aa 直线位移传感器 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 t FS-ZWY-300 深圳市米朗科技有限公司 2018-02-28 16:48:43.038+08 2018-03-06 14:58:18.085+08 cfe75451-de08-456e-a858-16ed82f63574 4
+6de7929d-736b-4c4e-a1c3-e7550a7b6d31 振弦式地锚荷重计 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-9900-100T 2018-08-24 16:11:22.973+08 2018-08-24 16:46:29.545+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+46272932-067d-4fa2-87ac-85a866b4f691 单轴倾角仪 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MCU32-MI600E 接单通道485采集仪 2018-08-17 11:39:56.595+08 2018-08-17 11:40:28.203+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+b0493f78-0950-47ac-bf5f-27797da84f44 振弦式地锚荷重计 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-9900-300T 2018-08-24 16:11:25.501+08 2018-08-24 16:46:33.581+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+526c42ea-d9a9-48d1-9862-b3118a7ef211 模拟GNSS c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t AX-EXT-GNSS 虚拟的GNNS设备,非直接接入使用 2018-03-20 09:46:35.546+08 2018-03-26 17:03:01.876+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 4
+901073b9-b411-427c-9eb6-43a935ec8c27 倾角仪 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c t jmqj-7330adx 2018-05-10 09:13:20.638+08 2018-05-10 14:30:57.188+08 941c9c57-031c-4e4c-9a2b-5e544e387274 4
+8c2579cd-6aca-4902-a9d6-61e916a4541e 测斜仪 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t AX-EXT-CX 2018-03-26 16:47:53.755+08 2018-03-26 17:25:40.963+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 4
+82db02f1-7f86-44cf-b9a4-d32e28672a84 弦式传感器采集仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-VW1008 同SCI 2018-05-17 14:43:39.92+08 2018-07-23 11:17:04.727+08 005e2048-b7e8-4f7c-847f-e9918a66414d 1
+02513eed-ba94-456b-86e0-89ea996b879d 内埋式应变计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-NM50 内埋式应变计 2018-03-26 11:16:11.479+08 2018-06-25 10:48:43.306+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+563221c8-bdb4-4511-b781-25cab72585a7 磁致伸缩式静力水准仪 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MSL570-485 485单独使用 不接采集仪 2018-05-31 14:37:08.554+08 2018-05-31 14:50:15.258+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+3f7793d6-8f50-4dc7-b5e5-5e6cf74f77a6 多通道采集仪 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 t gn-NGN 2018-04-12 09:54:19.717+08 2018-04-18 11:28:51.092+08 4f3d93c3-5322-4bef-b358-e98b1589874d 1
+cda0b115-60d6-4169-8f45-4a92d6801fb3 PM10监测仪 f7d6caec-f4d1-4641-92bf-5f918ea8d13c f7d6caec-f4d1-4641-92bf-5f918ea8d13c f7d6caec-f4d1-4641-92bf-5f918ea8d13c t XHPM2000E_PM10 2018-04-03 11:39:47.177+08 2018-05-17 09:38:59.775+08 6fa763bc-933a-4b3d-a15f-a9cb6dba7d3d 4
+88155a32-3321-4f89-86ba-c204d101cce7 多通道振弦采集仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-F16 modbus 多通道振弦采集仪 2018-06-15 09:39:55.588+08 2018-07-23 11:17:00.705+08 005e2048-b7e8-4f7c-847f-e9918a66414d 1
+899dde06-bd1d-4215-963e-23596c3fda7f 123456 5080baff-a15e-42e5-ae75-58f9b31c4576 5080baff-a15e-42e5-ae75-58f9b31c4576 5080baff-a15e-42e5-ae75-58f9b31c4576 f http://images.theiota.cn/upload/meta_devices/5080baff-a15e-42e5-ae75-58f9b31c4576/8a7fdd49-ceba-42de-9a6d-0d0b82601fdb/device.png 12 12 2018-05-28 17:34:00.439+08 2018-05-28 17:36:01.665+08 \N 1
+e442b9a5-066f-4cde-b5f3-9709a193c328 123123 e8f15908-b10c-4602-a99d-08d8e689d90b e8f15908-b10c-4602-a99d-08d8e689d90b e8f15908-b10c-4602-a99d-08d8e689d90b f 123123 2018-07-06 17:14:37.665+08 2018-07-06 17:14:37.665+08 \N 1
+94540a5f-cb58-4a32-a605-05002a4391ed 11 7875d87e-9ef3-4446-a656-f77742d708a8 7875d87e-9ef3-4446-a656-f77742d708a8 7875d87e-9ef3-4446-a656-f77742d708a8 f 1 2018-07-10 14:47:24.847+08 2018-07-10 14:47:24.847+08 \N 1
+7475ac58-b627-442e-b8fc-259c0c1561e7 静力水准仪 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-J02A 2018-09-26 14:38:16.178+08 2018-09-26 15:23:11.917+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+db345382-4b53-424d-b563-909bfe0a36cd DT振弦式应力计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DT-yingli 2018-09-07 11:22:10.515+08 2018-10-19 10:02:14.994+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+8cb3528e-cadf-463e-9db2-003bb899ebb6 光电光栅温度传感器 1510d330-86c7-4950-ac34-695109bc07a8 1510d330-86c7-4950-ac34-695109bc07a8 1510d330-86c7-4950-ac34-695109bc07a8 t BA-OFT200 2018-08-10 17:03:20.984+08 2018-08-16 16:30:56.069+08 2169a008-9684-4625-b3ba-389b70c17ad1 4
+e4192bd0-7b4b-48fd-8274-4f4ed24a1cd2 SO2传感器 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 f SO2-C0/1 2018-06-20 10:35:52.471+08 2018-06-21 18:06:15.954+08 \N 4
+e2b308df-8629-49a6-ab1d-397df5ab4e45 NO2传感器 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 f NO2-C/1 2018-06-20 10:35:53.27+08 2018-06-21 18:06:24.285+08 \N 4
+030c456b-e97a-42a6-93b7-a6f48fcce4a6 光电光栅埋入式应变计 1510d330-86c7-4950-ac34-695109bc07a8 1510d330-86c7-4950-ac34-695109bc07a8 1510d330-86c7-4950-ac34-695109bc07a8 t BA-OFS50E 2018-08-10 16:23:43.215+08 2018-08-16 16:30:58.259+08 2169a008-9684-4625-b3ba-389b70c17ad1 4
+6c5b2840-b01d-4bb3-8ab1-a831b3880184 DT倾角传感器 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DT-QJ 2018-09-07 11:18:27.951+08 2019-09-25 10:32:05.802+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+8b635501-4320-49f5-b573-e4193d4e31b6 表面应变计 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 t WHYB 2018-09-19 17:32:06.989+08 2018-09-26 17:13:16.686+08 05617d93-ff63-40e6-8d83-86ec25e6728c 4
+d5df12f1-ea7f-45d0-81a9-79a1fb4e0c90 振弦式应变计 b62a05b7-00f6-49f0-a9d4-c3ffa17b7340 b62a05b7-00f6-49f0-a9d4-c3ffa17b7340 b62a05b7-00f6-49f0-a9d4-c3ffa17b7340 f HHDZ-VS100B 2018-09-29 15:46:46.72+08 2018-09-30 16:23:39.295+08 \N 4
+99c61d5d-4b9d-4fca-9d8c-e6d530b15871 多通道振弦采集仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-F32O 统一协议 老版本 2018-08-27 14:20:09.984+08 2018-08-27 16:01:46.926+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+a03158bb-03f2-4da6-9ef0-10b837caab9e 水质采集仪 750185f8-2901-4e59-a173-708c3f84f270 750185f8-2901-4e59-a173-708c3f84f270 750185f8-2901-4e59-a173-708c3f84f270 f SMARTIT-SOIP 2018-11-05 09:08:45.106+08 2018-11-05 10:00:07.148+08 \N 1
+00e107aa-a84e-4014-98e7-f0aa931b22ae 固定倾斜仪 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MCU32-MI600 2018-09-11 15:57:59.799+08 2018-09-11 16:20:40.256+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+a99d7cc9-7afe-4415-93dd-bcdc193c5121 振弦式测缝(位移)计 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T-700 频率温度 2018-08-15 14:39:57.298+08 2018-09-21 16:39:07.361+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+c1831563-faaf-4e2a-9d49-6b483abbd040 水质传感器 750185f8-2901-4e59-a173-708c3f84f270 750185f8-2901-4e59-a173-708c3f84f270 750185f8-2901-4e59-a173-708c3f84f270 t SMARTIT 2018-10-31 18:04:59.727+08 2019-10-24 14:16:04.275+08 255aa9dd-04f8-4987-8634-ed802143a025 4
+4a91ace7-e5da-44c8-843d-43fb6a130847 电表 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t DDZY9898-Q 2018-10-26 17:54:01.943+08 2018-11-02 13:58:45.899+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+cce8a8e4-cd65-4f13-a554-eb06fa2b7caa 温度传感器 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GTT-1 2018-10-11 09:06:27.298+08 2018-10-11 09:08:33.852+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+a5dda81c-6a85-4e7b-97f3-be45b980646e 坑位 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-toilet-pit 2018-10-26 16:15:49.368+08 2018-11-02 14:56:36.007+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+e5ed186c-f248-4b06-ae1c-8ada54d1c67d 液位计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MPM4700 2018-10-09 17:02:23.452+08 2018-10-11 15:18:56.586+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+b91bca75-6908-439e-9860-f0debec0bf10 虚拟DTU 1510d330-86c7-4950-ac34-695109bc07a8 1510d330-86c7-4950-ac34-695109bc07a8 1510d330-86c7-4950-ac34-695109bc07a8 t BA-V-WG 2018-11-22 16:01:39.284+08 2018-11-22 16:21:24.497+08 2169a008-9684-4625-b3ba-389b70c17ad1 1
+830b9ca6-451c-480a-8013-67108cd4173f 温湿度传感器 ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c t XP-WSD 2018-11-13 15:36:10.361+08 2018-11-14 10:13:38.416+08 c10a7b15-97f0-451e-a15c-537f9ba147ff 4
+f125a65b-639e-46f7-8b52-6d2f4f2a064a 空气质量传感器 ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c t XP-KQZL 2018-11-13 16:37:13.334+08 2018-11-14 10:13:41.016+08 c10a7b15-97f0-451e-a15c-537f9ba147ff 4
+5e44f909-0d21-4d00-82f5-d3502e192e18 塔机 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-DYL 2018-11-09 17:35:43.397+08 2018-11-27 13:57:19.928+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+f12a248f-faab-43f2-bfbe-088da7f471dc 倾角式静力水准仪 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c t JMQJ-6210AD 2018-11-16 14:10:42.785+08 2018-11-20 16:55:42.453+08 941c9c57-031c-4e4c-9a2b-5e544e387274 4
+87a47520-e1a3-474c-b8b2-b1fd5dd521a9 多点位移计 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-9420-5 2018-11-23 10:32:50.884+08 2018-11-23 10:35:47.232+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+acd2fd97-bd2a-4cad-9c11-1e4267d0b9fb dtu 8938a232-4fc1-469a-8f34-6baad819d6d7 8938a232-4fc1-469a-8f34-6baad819d6d7 8938a232-4fc1-469a-8f34-6baad819d6d7 f 2 2018-11-28 15:04:48.326+08 2018-11-28 15:04:48.326+08 \N 0
+c6a59efb-40c2-4104-9b26-7895bb8e072d 高频雷达液位计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-Y01 2018-12-03 10:28:58.181+08 2018-12-03 10:45:29.812+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+0209176c-7c91-4fe0-9a00-e751fe24c8f8 土壤PH传感器 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b t NHPH49 2018-11-20 15:19:51.004+08 2018-12-13 09:14:20.791+08 66a47769-cf2c-4708-bde1-48eae1617ade 4
+d116c1db-0a8e-4cd7-a021-6dedf5987ec4 O3传感器 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 f O3-C/5 2018-06-20 10:35:54.627+08 2018-06-20 10:45:39.698+08 \N 4
+bfa4cd6a-f4fc-4087-8322-c0dd793cfd39 温度传感器 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 f SHT11_T 2018-06-20 11:04:00.661+08 2018-06-20 11:07:23.528+08 \N 4
+f88c2cc7-2f89-40e1-ab48-28a17b001737 湿度传感器 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 f SHT11_H 2018-06-20 11:04:01.385+08 2018-06-20 11:09:55.906+08 \N 4
+4c874d9f-456e-420e-9057-3a8c7de8368c PM2.5传感器 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 f DZ5003_PM25 2018-06-20 11:04:02.537+08 2018-06-20 11:12:46.313+08 \N 4
+b58bb3be-9cea-460b-b91b-0281432cc158 PM10传感器 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 f DZ5003_PM10 2018-06-20 11:13:47.038+08 2018-06-20 11:14:06.61+08 \N 4
+0f6fd3af-59cc-4fa8-8ff5-f42f173ac9fa 倾角传感器 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-Q01 2018-06-27 13:44:52.475+08 2018-12-24 16:07:38.893+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+624610fd-38ca-4e72-92c8-0492eb66412a 孔隙水压计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-KY03C 工讯科技(深圳)有限公司 2018-04-08 14:06:25.43+08 2018-08-07 19:04:25.841+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+a045d540-6405-495e-af5f-ea705c094472 倾角仪 7e13f613-ffd9-4865-800a-0ca768ab2a28 7e13f613-ffd9-4865-800a-0ca768ab2a28 7e13f613-ffd9-4865-800a-0ca768ab2a28 t HK-LRQJ 2018-06-25 09:05:33.095+08 2018-08-17 16:41:33.303+08 d63e78b1-32cf-4aca-a896-5c83ebce7b8d 4
+b2d406aa-3d16-4f6a-a0cf-201673678a8f 位移计 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-WY02 2018-06-21 13:39:44.91+08 2019-05-07 16:25:45.636+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+9fbee940-6591-45b4-a3a9-83abc9c76e85 位移传感器 0be11993-6e55-415e-b770-792f29f98f9f 0be11993-6e55-415e-b770-792f29f98f9f 0be11993-6e55-415e-b770-792f29f98f9f t LFWY01 2018-06-21 10:55:46.955+08 2018-06-21 16:54:42.511+08 c016deb0-edb2-4cb3-93ad-3150c8db04ac 4
+cf379e04-548b-4a35-bafd-4ce52ae84b07 CO传感器 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 f CO-C/200 2018-06-20 10:32:24.747+08 2018-06-21 18:06:18.72+08 \N 4
+6e1d3878-3ea2-4c73-9137-0ef98781be0c 雨量计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-YL 2018-04-11 16:24:01.242+08 2019-08-22 14:29:59.432+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+9c410206-a22f-4b1c-b86f-32fda9f61ca2 无线数传电台 7e13f613-ffd9-4865-800a-0ca768ab2a28 7e13f613-ffd9-4865-800a-0ca768ab2a28 7e13f613-ffd9-4865-800a-0ca768ab2a28 t HK_LoRa_Hub 2018-06-22 17:30:28.384+08 2018-06-26 10:17:45.589+08 d63e78b1-32cf-4aca-a896-5c83ebce7b8d 1
+aa4c3887-4040-4ac1-a908-4ae45f754c3b 压差式静力水准仪 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-J03B 2018-06-21 13:53:07.624+08 2019-06-28 14:58:52.87+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+0f179575-cae8-4888-a644-1b66be3f8de2 大气质量监测仪 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 t DZ-IGASQ 2018-06-20 10:26:27.042+08 2019-02-28 09:55:03.369+08 97778045-09eb-4db5-8ee0-8f2607e6248f 4
+a42dc0a2-1190-4f91-bf27-a5db9a2ed7ca 网关 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f 9000A 2018-06-26 10:32:46.554+08 2018-06-26 10:32:46.554+08 \N 4
+793d9a65-784f-4f17-840d-51ac6a2f2ddd 应变计 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t VWSDJ3KB 2018-08-09 15:00:04.564+08 2018-08-10 17:40:35.751+08 40f627af-dfd1-4cd2-9921-110d47d4461c 4
+847fb856-ef0a-493b-9a30-d2876243481a 温度数据采集分析系统 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 t ZY-311/T-8 2018-06-27 14:02:16.346+08 2018-06-28 16:37:23.514+08 05617d93-ff63-40e6-8d83-86ec25e6728c 1
+9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8 压差式变形测量传感器 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-YC-1000 压差式变形测量传感器 2018-02-05 11:21:19.464+08 2019-01-02 10:09:50.497+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+ad463dbb-84bc-45ec-9a0e-98de9aaf5fb8 电磁流量计 8877092c-862c-4569-a8b7-b125dea3214f 8877092c-862c-4569-a8b7-b125dea3214f 8877092c-862c-4569-a8b7-b125dea3214f f FK-LDG-MK 2018-06-28 15:28:03.034+08 2018-06-28 15:28:03.034+08 \N 4
+d56a9be3-7a4a-4c75-91ec-f524bb273574 投入式液位变送器 6708aba6-65f9-4ec3-bfc2-227628154ff3 6708aba6-65f9-4ec3-bfc2-227628154ff3 6708aba6-65f9-4ec3-bfc2-227628154ff3 t SDG-220 2018-06-25 15:29:28.067+08 2018-06-28 15:36:08.353+08 a4159319-ff56-456e-9cd0-1b2bc9ec6ede 4
+948c741a-f999-4abe-ae1f-64c23e27462c 温度传感器 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 t WH-PT100 2018-06-27 14:04:58.273+08 2018-06-28 16:19:37.98+08 05617d93-ff63-40e6-8d83-86ec25e6728c 4
+f698a0a5-7e2b-4c2e-a66f-c33ff5f05689 振弦采集仪 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t JC-4238 8通道 2018-08-09 16:17:22.291+08 2018-08-10 17:40:41.482+08 40f627af-dfd1-4cd2-9921-110d47d4461c 1
+20e28988-ea9b-4757-9f79-22dce525207a 温度传感器 a8f32e64-9094-49d3-9da0-9a5abd4dd33d a8f32e64-9094-49d3-9da0-9a5abd4dd33d a8f32e64-9094-49d3-9da0-9a5abd4dd33d t NEWD-100 纳微 2018-07-02 10:37:28.255+08 2018-07-03 11:06:29.506+08 485c9ff0-3616-4b61-a3a0-eab1e99472dd 4
+c631f2ea-9e5c-415a-b56e-9d96c600e527 分布式智能索具云采集系统 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-iFWL-SJJD-V1.10 索具节点 2018-08-28 17:55:20.377+08 2019-06-14 09:36:40.764+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+681c7dfc-f592-4339-a323-7a0ef757fd22 ff 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f f http://images.theiota.cn/upload/meta_devices/8ec5f3e2-2dbe-41bd-bdb4-034203f0964f/45e06240-5385-4963-a792-b9854372075d/device.png ff 2018-09-10 15:27:55.542+08 2018-09-10 15:27:55.542+08 \N 0
+51c68d6c-029d-4a88-8802-335e6e6ddf6c 采集仪 d8e712e8-731c-45ed-8c90-23504d4e7daf d8e712e8-731c-45ed-8c90-23504d4e7daf d8e712e8-731c-45ed-8c90-23504d4e7daf f NJSY_ 2018-09-13 17:12:19.003+08 2018-09-13 17:12:19.003+08 \N 1
+2e84b34b-d5cd-4b0a-b118-8b6835bab0ff test 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f f http://images.theiota.cn/upload/meta_devices/8ec5f3e2-2dbe-41bd-bdb4-034203f0964f/ac1100ad-d49f-4ea7-b775-ac24c43cea50/device.png 2 2018-09-10 15:41:24.752+08 2018-09-10 15:41:24.752+08 \N 0
+6dab819c-b584-4aea-bf13-c12a6a595abb 云盒 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t JC-T3 2018-08-09 16:03:13.754+08 2018-08-10 17:40:38.704+08 40f627af-dfd1-4cd2-9921-110d47d4461c 1
+515030fd-3993-442a-89f7-ca844c5671c0 静立水准仪 a8f32e64-9094-49d3-9da0-9a5abd4dd33d a8f32e64-9094-49d3-9da0-9a5abd4dd33d a8f32e64-9094-49d3-9da0-9a5abd4dd33d t NWJL-B-102 2018-07-04 12:31:15.214+08 2018-07-04 12:32:10.337+08 485c9ff0-3616-4b61-a3a0-eab1e99472dd 4
+ebd999bc-a789-48f2-ac00-a15049b09e50 包芯温度无线传感器 0235a43b-3369-4639-a955-05e9962ecc4c 0235a43b-3369-4639-a955-05e9962ecc4c 0235a43b-3369-4639-a955-05e9962ecc4c t C6000-4T 2018-08-14 16:18:30.081+08 2018-08-17 16:26:22.046+08 ffca7b99-078d-433f-b30f-26ca16279162 4
+e405d9f6-8b46-4089-94e2-1437036d040b 烟包水分测试仪无线传感器 0235a43b-3369-4639-a955-05e9962ecc4c 0235a43b-3369-4639-a955-05e9962ecc4c 0235a43b-3369-4639-a955-05e9962ecc4c t C6000-MTH 2018-08-14 16:31:33.427+08 2018-08-17 16:26:32.443+08 ffca7b99-078d-433f-b30f-26ca16279162 4
+2425cf54-e1bc-4c75-ac7b-62b039f29548 数字水位计 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MCU32-GT560 2018-08-30 16:11:13.757+08 2018-08-30 16:14:21.742+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+427e8976-edd3-4467-8900-587c12fbf6cf 固定测斜仪 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-X15 2018-07-09 11:43:50.71+08 2018-07-09 14:25:49.595+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+72fb9e20-7c7b-4ccb-9da1-d8600223beca 振弦式数据采集仪 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-5000 2018-01-08 15:50:34.791+08 2018-09-10 14:41:35.665+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 1
+d4255121-8115-4412-9778-4e29402a1720 倾角传感器 3da5d630-ee41-4e97-8ca6-0c3cc6c9c486 3da5d630-ee41-4e97-8ca6-0c3cc6c9c486 3da5d630-ee41-4e97-8ca6-0c3cc6c9c486 t PM-TS I/II-DL 2019-12-06 11:22:34.027+08 2019-12-06 11:50:30.159+08 3b9938e0-6bf0-47c9-b7af-c61b5a7bdea4 4
+8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea 风速仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-FY-FS 武汉富源飞科电子科技有限公司 2018-07-11 10:25:55.115+08 2019-09-19 16:42:29.539+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+e689bb3a-b7ce-4502-9042-c07f89958809 采集仪 ff67841c-7b79-4928-90b3-6782e69c14e9 ff67841c-7b79-4928-90b3-6782e69c14e9 ff67841c-7b79-4928-90b3-6782e69c14e9 t SMS-CJ40 2018-11-17 14:04:21.023+08 2018-11-17 16:00:50.708+08 3f3e4806-08db-428f-9b63-a18f64c64081 1
+a1d2070f-926a-42a1-8bf8-a39b89eb4c92 温湿度传感器 d8e712e8-731c-45ed-8c90-23504d4e7daf d8e712e8-731c-45ed-8c90-23504d4e7daf d8e712e8-731c-45ed-8c90-23504d4e7daf f NJSY_Seneor 2018-09-13 17:17:20.634+08 2018-09-13 17:17:20.634+08 \N 4
+b9829d8a-9088-455a-ad16-9a814303b909 数据采集仪 cb9f2b84-b356-4721-b75e-da2a575068f4 cb9f2b84-b356-4721-b75e-da2a575068f4 cb9f2b84-b356-4721-b75e-da2a575068f4 t BT-A01-016 2018-04-09 08:03:04.733+08 2018-09-20 17:32:56.368+08 78f556c0-d435-40e7-aece-08b652e146f0 1
+32349c76-d117-4331-8a10-9b7ea057c2ab 飞尚称重仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-CZ 2018-07-04 16:49:20.242+08 2019-08-05 14:45:19.059+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+b15e4068-3a0b-43cf-898a-151d9a211756 振弦式孔隙水压力计 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 f GT-VP500 2018-08-15 14:41:47.939+08 2018-09-21 16:41:33.575+08 \N 4
+7737cd79-82ca-472e-ba8c-5ed79fde2e70 表面应变计 e39dc160-cb1a-4c7d-b432-ecfe08799164 e39dc160-cb1a-4c7d-b432-ecfe08799164 e39dc160-cb1a-4c7d-b432-ecfe08799164 t DMYB 2018-09-26 17:10:21.444+08 2018-09-26 17:15:37.703+08 a7dfdb07-3943-4248-bb47-f4c2678c660a 4
+ba3d723e-88ac-4e9a-976f-43d43081e621 塔机监测传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-TDJC05-V1.00 2018-08-17 15:55:31.627+08 2020-09-29 11:17:05.074+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+b440e042-3173-43c6-887c-3cf4ce8a49e4 水表 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t LSX-DN20 2018-11-02 11:05:43.301+08 2018-12-15 15:10:49.748+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+5e639171-0ad1-4fcb-aa69-d2f1d4af1f51 微功耗扬尘 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t MicroPower-Weather 2018-10-24 10:46:54.966+08 2019-03-04 09:18:54.66+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+706988da-65c8-4388-a4ab-47e553cd1085 sourceld f58d1dc4-346b-44b0-8151-837508852c77 f58d1dc4-346b-44b0-8151-837508852c77 f58d1dc4-346b-44b0-8151-837508852c77 f 2 2018-11-05 11:05:43.232+08 2018-11-05 11:05:43.232+08 \N 0
+7734e171-78b3-4a47-bccf-b812a1cf30f3 扬尘设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-YCJC-V1.00 2018-11-10 11:08:27.792+08 2018-11-12 08:32:51.301+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+177e7e33-3dae-4163-8d7d-1778e70b4a8b 液位水位计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-93420-HT 2018-10-11 14:47:31.895+08 2018-10-29 15:41:43.367+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+9fab42c0-0c95-4fd2-a470-08437473a2f4 气象监测站 e09d681f-e39b-4915-8e87-af54bdd0e815 e09d681f-e39b-4915-8e87-af54bdd0e815 e09d681f-e39b-4915-8e87-af54bdd0e815 t WatchDog2475 2018-07-05 14:21:10.229+08 2018-11-12 11:05:15.51+08 7d8a96cd-b3b1-43a6-8ad4-69466c74da0b 4
+b349f69a-d7bb-4bee-aa65-6d250e1a7ae8 数字采集器 db720076-c60b-454c-9066-38f2b9c84634 db720076-c60b-454c-9066-38f2b9c84634 db720076-c60b-454c-9066-38f2b9c84634 f WOLUCAIJIQI2 2018-11-20 15:38:42.523+08 2018-11-20 15:45:38.419+08 \N 1
+27503c42-1dec-4321-ad45-eab67190afb5 空气质量传感器 d7992dd9-6356-40b2-ae7d-78cb5508b40c d7992dd9-6356-40b2-ae7d-78cb5508b40c d7992dd9-6356-40b2-ae7d-78cb5508b40c t U-SKY100 2018-10-16 11:55:50.845+08 2018-11-28 15:40:50.494+08 ee936773-3935-4a6f-a962-2b0fd1a5c77e 4
+09ebfc15-19c9-4e5f-bacb-5e81ec5ef026 simulator ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t 1 2018-11-23 20:45:12.794+08 2018-11-24 16:00:45.728+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 2
+a1120cb3-3d96-45cc-81df-36f6c64d505c test f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f dd 2018-11-28 10:41:03.631+08 2018-11-28 10:41:03.631+08 \N 0
+70dd7ed7-45de-4c9c-a299-7c0686775dc3 压差式静力水准仪 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-J03A 建岩(上海)信息科技有限公司 2018-07-09 10:14:00.831+08 2019-06-28 14:59:01.304+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+dc4b89d8-51e0-4b94-91d7-92d61a59a696 光纤光栅采集仪 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 t GM8050 2018-10-10 11:24:53.682+08 2019-01-23 17:14:27.03+08 21da3935-62c3-4b0d-bd28-16921600432a 1
+d8b7d673-b192-4f7a-84d9-0946b8d30f41 智能流量积算仪 30733da7-f918-41cd-85ed-8b5b0b55b0e6 30733da7-f918-41cd-85ed-8b5b0b55b0e6 30733da7-f918-41cd-85ed-8b5b0b55b0e6 f TMCS-90I3-B1 2018-07-10 17:19:28.445+08 2018-07-10 17:19:28.445+08 \N 4
+6b2b2d8d-a99b-4052-9a48-2c12125e2f41 超声波流量计 762b9963-18af-4789-afed-88df57b2a556 762b9963-18af-4789-afed-88df57b2a556 762b9963-18af-4789-afed-88df57b2a556 t DCT1158 2018-08-13 10:56:46.605+08 2018-08-13 14:26:48.952+08 08c10c0f-5ba8-4cc6-851f-4eec44349187 4
+3746abdd-af23-4d98-bca0-f29909e0d0c3 氧气、二氧化碳、温湿度四合一无线传感器 0235a43b-3369-4639-a955-05e9962ecc4c 0235a43b-3369-4639-a955-05e9962ecc4c 0235a43b-3369-4639-a955-05e9962ecc4c t C6000-YC 2018-08-14 16:26:33.73+08 2018-08-17 16:26:30.025+08 ffca7b99-078d-433f-b30f-26ca16279162 4
+1c431af0-8407-422f-8823-82fe58af024f 集中采集器 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 f TIA01 2018-09-10 17:10:05.044+08 2018-09-10 17:10:05.044+08 \N 1
+5c6b67cd-fe7a-472e-8907-63baa655cb42 温度计 958dfd18-eea0-480e-98bc-edc9da0e0ae3 958dfd18-eea0-480e-98bc-edc9da0e0ae3 958dfd18-eea0-480e-98bc-edc9da0e0ae3 t SRDT-PT1000 2018-09-05 09:55:00.341+08 2018-09-12 16:52:02.57+08 61c4abf0-191f-4d2c-a609-8aef64771259 4
+5f1f2736-2744-4339-b456-50c5626ea641 升降机 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-DYZ-A 2018-11-15 15:46:09.069+08 2018-11-27 13:57:22.822+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+fbc0de18-03f7-421b-b7d4-4440a7c96791 双轴倾角仪带温度 cb9f2b84-b356-4721-b75e-da2a575068f4 cb9f2b84-b356-4721-b75e-da2a575068f4 cb9f2b84-b356-4721-b75e-da2a575068f4 t BT-QJ02-15R-T 2018-04-09 08:05:14.703+08 2018-09-20 17:32:59.777+08 78f556c0-d435-40e7-aece-08b652e146f0 4
+7ce5e1fb-e335-4fa0-928d-9b1032350ab8 锚索计 56c7bc15-9ef6-4a82-984f-27e061f13a51 56c7bc15-9ef6-4a82-984f-27e061f13a51 56c7bc15-9ef6-4a82-984f-27e061f13a51 t DH101 2019-10-09 13:11:20.965+08 2019-10-09 13:12:30.592+08 06a9522a-1277-41df-a73c-54910c8bddd8 4
+97c2157a-e4ee-41aa-b2ca-c8745fdda755 多通道应变采集仪 e39dc160-cb1a-4c7d-b432-ecfe08799164 e39dc160-cb1a-4c7d-b432-ecfe08799164 e39dc160-cb1a-4c7d-b432-ecfe08799164 t DM-YB1860 2018-09-26 17:10:27.028+08 2018-09-26 17:15:39.982+08 a7dfdb07-3943-4248-bb47-f4c2678c660a 1
+ae5aa015-b2d1-41a8-8b49-9a3d28565e8d 溶解氧在线分析仪 849e9b08-1181-436a-a106-cc6b0d3ffdc5 849e9b08-1181-436a-a106-cc6b0d3ffdc5 849e9b08-1181-436a-a106-cc6b0d3ffdc5 t DM2800 2018-10-08 14:13:14.271+08 2018-10-09 10:54:17.654+08 a32c47a2-7dc4-458d-8169-e88a5b0e82de 4
+9c5aaf1f-48c2-4293-8338-f549c223993d 激光测缝计 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c t JMCD-8105AD 2018-11-20 16:26:17.229+08 2018-11-22 15:52:54.625+08 941c9c57-031c-4e4c-9a2b-5e544e387274 4
+3805bf98-24dc-453c-a62b-a5a97633ca8b 智慧厕所 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GC 2018-10-26 14:52:49.968+08 2019-04-19 14:56:08.177+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+6b90f580-9b05-42a8-ba6a-113143823d44 采集仪 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 t MCU32 2019-10-14 09:24:23.042+08 2019-10-14 11:41:21.344+08 4f3d93c3-5322-4bef-b358-e98b1589874d 1
+5de488a0-c8c4-4e3d-b0c7-82150f4bd79b 联网行智能压力传感器 564b6c70-39c1-423b-9eed-89d2dcdbc2a4 564b6c70-39c1-423b-9eed-89d2dcdbc2a4 564b6c70-39c1-423b-9eed-89d2dcdbc2a4 t ly1810-25 2018-10-18 15:18:14.021+08 2018-10-26 14:44:50.198+08 db5fa7ec-7e67-493b-9ca5-75958f27ba5e 4
+5fc20b7c-ce0f-4584-aee1-c8e7dbb32e8a Spectrum气象站 19d97e00-b313-443e-b2cd-40bce48c0f05 19d97e00-b313-443e-b2cd-40bce48c0f05 19d97e00-b313-443e-b2cd-40bce48c0f05 t 2900ET 2018-10-12 10:19:30.536+08 2018-11-06 15:39:24.163+08 ed558307-bbb9-422b-8705-205ffb6d95f6 4
+2fb5ab76-2e1f-4791-a38a-edcad8b3ab4e http_server f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f 1 2018-10-29 16:18:27.047+08 2018-10-29 16:18:27.047+08 \N 2
+24946992-8d23-4862-ab23-0844e246fb46 扬尘设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t SG-YC 郑州尚格电子科技有限公司 2018-11-02 17:11:56.241+08 2018-11-03 10:23:59.395+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+1a456dbb-f7f0-493c-969d-2a0c1f1698ef 数字采集器 28e14628-e071-41c6-a2b7-dca0773f996f 28e14628-e071-41c6-a2b7-dca0773f996f 28e14628-e071-41c6-a2b7-dca0773f996f f WOLUCAIJIQI 2018-11-19 16:52:15.435+08 2018-11-19 17:15:02.618+08 \N 1
+6757358d-f79f-4a71-a721-6a882b92b350 温度采集仪 6b927c2a-ce23-4bf8-9f83-7307d2856c61 6b927c2a-ce23-4bf8-9f83-7307d2856c61 6b927c2a-ce23-4bf8-9f83-7307d2856c61 t 18B20 2018-11-09 14:39:36.867+08 2018-11-09 20:30:56.163+08 4ef87106-170b-4ad8-96bf-051cc45e7da1 1
+ed1a6677-30c5-4215-a128-96bbd4b46c9f 土压力盒 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t JC-TYLH-4 2018-11-07 10:56:08.257+08 2018-11-07 14:53:41.25+08 40f627af-dfd1-4cd2-9921-110d47d4461c 4
+ffa967e5-e1cd-4c0d-9aff-643c16430446 风速风向传感器 ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c t XP-FSFX 2018-11-12 16:40:05.515+08 2018-11-14 10:13:30.267+08 c10a7b15-97f0-451e-a15c-537f9ba147ff 4
+e32efbee-3c36-4be6-a4d3-d5058acf1fda 振动传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-EXT-ZD 振动传感器 2018-07-18 09:51:58.253+08 2018-11-17 14:10:15.526+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+1db3d346-d4ae-41e3-9a98-d22760482541 DTU cde952f9-77ff-4bbe-9a36-cdc05fe8212a cde952f9-77ff-4bbe-9a36-cdc05fe8212a cde952f9-77ff-4bbe-9a36-cdc05fe8212a t ZSE310 2018-11-23 16:18:45.318+08 2018-11-23 16:19:35.17+08 f4ba6f51-e553-4525-a4a8-742e041949bd 2
+d199daf3-83a4-4bcc-b23b-b6ca37fba927 土壤盐分电导率一体化传感器 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b t NH51YF 2018-11-19 11:02:17.767+08 2018-12-13 14:36:46.388+08 66a47769-cf2c-4708-bde1-48eae1617ade 4
+59f09a3b-57f2-46ee-a2c7-8bba3e704794 华岩标准协议采集仪 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc t HY-CJY 2018-11-26 11:43:09.677+08 2018-11-26 16:10:54.534+08 e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5 1
+f0c41435-ecaf-4e42-b592-b53aaa72f721 sensor f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f 1 2018-11-28 10:42:00.883+08 2018-11-28 10:42:00.883+08 \N 0
+dff02ef2-0438-415d-9327-cdd883c38c81 能慧照度传感器 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b t NHZD10 2018-11-22 17:30:26.326+08 2018-12-13 09:14:26.213+08 66a47769-cf2c-4708-bde1-48eae1617ade 4
+a6d30b7e-a718-4cbf-80be-2ddefa2445ab 风向仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-FY-FX 武汉富源飞科电子科技有限公司 2018-07-11 10:25:15.528+08 2019-09-19 16:42:39.512+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+915fc949-c75f-47a9-8ba5-f516f0eb6228 振弦埋入式应变计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-01-VK4200 2018-08-01 16:25:49.732+08 2018-08-06 10:01:12.827+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+82edfa3d-c080-4212-ad83-32be43b48841 LS数据采集节点(振弦) 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t LS-G6-VW 2018-08-01 16:20:24.301+08 2018-08-06 10:01:17.551+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 1
+9f4bea7e-e18f-431e-af3b-9bac229c98c6 LS数据采集网关 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t LS-GW 2018-08-01 16:02:48.203+08 2018-08-06 10:01:20.027+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 1
+75bcea50-3625-4248-9181-b8f541953270 温度数据采集分析系统 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 t ZY-311/T-8B 2018-07-27 16:11:26.052+08 2018-07-27 17:30:56.333+08 05617d93-ff63-40e6-8d83-86ec25e6728c 1
+d0e4432b-aeb4-4004-b728-9ef120f0e1db 塔机监测站 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-TJ-S 2018-07-28 17:20:27.357+08 2018-07-30 14:23:54.639+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+a812ef4d-0c77-49e6-bad2-c74c79c50e49 多通道磁通量采集仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-CTL-O 老版磁通量采集仪 2018-03-02 17:16:41.27+08 2018-07-19 17:13:44.921+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+76288807-186e-4444-a1ce-6be599aacfd2 压差式变形测量传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LTG-Y500-Z 压差式变形测量传感器 2018-01-24 11:19:10.104+08 2019-06-14 15:31:26.253+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+99978bc0-b3c7-4ba1-9064-723c2c13b95f 振弦应变采集仪 f88cbfa3-0609-45d9-92aa-5108b5a4ac6f f88cbfa3-0609-45d9-92aa-5108b5a4ac6f f88cbfa3-0609-45d9-92aa-5108b5a4ac6f t ACT4283 武汉大桥局自己研发 搭配基康传感器 2018-01-12 11:27:20.199+08 2018-07-23 09:24:24.407+08 7f8a3e61-0645-4b79-b376-92677a049f62 1
+c3455ece-210c-4203-af82-88b61e4b2584 微功耗采集仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t MicroPower 微功耗 2018-07-11 14:03:02.088+08 2018-08-17 10:35:44.817+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+aa8612e5-096f-4695-a505-2fd4f84d2390 aa 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 f aaaa 2018-08-21 14:23:58.328+08 2018-08-21 14:23:58.328+08 \N 1
+6d00ebcb-1976-40ff-8c6d-99e9df45035a PTH物联网传感器 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d t PTH503 2018-07-25 09:50:10.771+08 2018-07-25 16:45:49.968+08 10c8af19-c2ad-4e25-be28-63f5a359a41c 4
+7da8e64c-b909-4802-9639-84077cefa569 塔吊设备 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe t FS-TD 2018-07-23 15:18:06.164+08 2018-07-26 15:13:18.662+08 461483be-7de4-49d4-86a6-fa6ac432d4fd 4
+edfaccd5-edfd-4895-a519-541faa623db3 高支模采集仪 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe f FS-GZMCJY-test 2018-07-23 15:37:15.29+08 2018-08-02 10:39:28.067+08 \N 1
+1f235ab7-7bbb-4c4a-b106-7a0a435448bf 高支模水平节点 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe f FS-GZM-SP-test 2018-07-23 15:31:50.019+08 2018-08-02 10:39:48.677+08 \N 4
+3c312b4a-0bd1-4ee4-acf1-5a51f99ed087 高支模沉降节点 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe f FS-GZM-CJ-test 2018-07-23 15:34:09.525+08 2018-08-02 10:39:38.65+08 \N 4
+ab820c4a-1397-4605-b9d5-68aea01ab2b5 http f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f q 2018-07-27 17:05:36.509+08 2018-07-27 17:05:36.509+08 \N 0
+0bf78d42-85ee-486c-bf43-c62c3168ee33 LVDT裂缝计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LF10-X LVDT裂缝计 2018-04-09 16:11:41.538+08 2018-07-31 16:21:41.155+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+8d37a4fb-8add-44a4-ad5e-a8d190e87209 测试设备 36b70d6d-c974-4742-9257-b555027d36cd 36b70d6d-c974-4742-9257-b555027d36cd 36b70d6d-c974-4742-9257-b555027d36cd f GZMtest 测试最多接收多少字节,后续删除 2018-07-31 09:18:28.798+08 2018-07-31 09:18:28.798+08 \N 4
+039664c3-5d24-4edb-b251-7540c98dc2ce 塔机监测传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-TJ-LF 接口 V1.3.3 2018-07-26 16:31:10.375+08 2018-07-31 10:24:07.219+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+cb6fd3f6-2591-4242-b0a8-dbb037543831 雷达液位计 78592d42-1fcc-45bb-8a00-8e246186e702 78592d42-1fcc-45bb-8a00-8e246186e702 78592d42-1fcc-45bb-8a00-8e246186e702 t ZSRD918 2018-07-13 16:15:51.082+08 2018-07-31 14:16:27.076+08 1c4462b3-04af-43ab-8050-febf9bbc0438 4
+4a1c835d-1f99-4d95-8d21-ceab11c714d3 扬尘设备 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe t FS-YC-test 2018-07-23 15:21:40.134+08 2018-08-02 14:06:39.592+08 461483be-7de4-49d4-86a6-fa6ac432d4fd 4
+2cbbf402-789b-4c54-b408-7e61934ebd4d 高支模采集仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GZMCJY 2018-08-02 10:31:04.085+08 2018-08-02 10:48:46.225+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+705738a1-f330-4875-a2a0-23c30ec9f5d4 高支模沉降节点 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GZM-CJ 2018-08-02 10:31:54.561+08 2018-08-02 10:48:48.34+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+7a741fa4-a643-495d-bb49-443ec2df29b9 静力水准仪 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 t TUH02 2018-09-10 10:22:20.289+08 2018-10-25 15:10:49.621+08 980b9cf9-1073-4a81-b777-0d29ac8237d2 4
+3bd37805-2e49-4fdb-8bab-d54c72112de8 高支模轴力节点 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe f FS-GZM-ZL-test 2018-07-23 15:29:31.256+08 2018-08-02 10:39:53.176+08 \N 4
+6b4905df-caae-4bcc-a8a7-c99cb7866e06 高支模水平节点 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GZM-SP 2018-08-02 10:33:18.522+08 2018-08-02 10:48:50.334+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+8e67e334-231e-467c-8868-c41461d9463e 高支模轴力节点 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GZM-ZL 2018-08-02 10:35:48.063+08 2018-08-02 10:48:52.302+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+77a4b2d1-adf0-4cab-be7e-5f4635e4063f 高支模倾斜节点 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GZM-QX 2018-08-02 10:41:04.596+08 2018-08-02 10:48:54.93+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+cd27d23f-a55d-4ce0-8c59-33675bb5ad62 温度计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-PT100 2018-08-03 07:13:57.944+08 2018-08-06 10:01:10.537+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+777c9799-3abe-4eee-a583-f5e6fac01946 倾角计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-01-S541MA 2018-08-03 10:29:52.678+08 2018-08-06 10:01:30.631+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+5f65c5dc-c32f-4e64-b40e-97f907d7c0fd 风速计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-FS01-01 2018-08-03 10:36:00.505+08 2018-08-06 10:01:36.375+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+bc1228dd-0195-4fba-b21f-178b91e4cf60 风向计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-FS01-02 2018-08-03 10:41:17.469+08 2018-08-06 10:01:38.742+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+f556a96a-5649-49c8-beae-aa08f2faa752 LS数据采集节点(模拟量) 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t LS-G6-VOLT 2018-08-03 07:28:29.449+08 2019-05-29 15:53:22.592+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 1
+c1b890f6-babe-41df-b3b4-0a277ad7e1b2 双轴倾角仪 cb9f2b84-b356-4721-b75e-da2a575068f4 cb9f2b84-b356-4721-b75e-da2a575068f4 cb9f2b84-b356-4721-b75e-da2a575068f4 t BT-QJ02-15R 2018-09-20 13:52:41.736+08 2018-09-20 17:33:04.102+08 78f556c0-d435-40e7-aece-08b652e146f0 4
+0f37be2c-4009-4079-81f8-e9c598773ea2 kafka设备 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f 1 2018-09-21 17:53:12.712+08 2018-09-21 18:23:56.917+08 \N 0
+be5be8af-c339-4f15-b2b7-0f16e1e51792 DT铂电阻温度 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DT-PT100-RTD-AL-0 2018-09-07 09:46:01.461+08 2018-10-19 10:14:27.943+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+e1f36777-486a-4527-a30f-61d17b7a8796 扬尘设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-YC 2018-08-02 10:37:02.577+08 2018-12-29 10:17:27.978+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+2729651f-9ad2-44f0-b9cf-bfc33669f9c7 振弦式渗压计 b62a05b7-00f6-49f0-a9d4-c3ffa17b7340 b62a05b7-00f6-49f0-a9d4-c3ffa17b7340 b62a05b7-00f6-49f0-a9d4-c3ffa17b7340 f HY-S 2018-11-03 15:41:07.721+08 2018-11-03 15:41:07.721+08 \N 4
+3ad4be85-c6f9-46b8-97dd-39d01e4ef858 扬尘采集仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-YC-MP 2018-10-24 15:16:44.634+08 2019-02-27 10:00:38.276+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+470fe434-e3f4-40b1-a823-12f5b6122b0a 数据采集仪 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 f GPRS-A32 2018-09-11 14:34:02.857+08 2018-09-11 14:34:02.857+08 \N 1
+d5bfb91e-3d09-4068-ac33-5974e8b7f039 厕所人流量传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-toilet-visitors 2018-10-26 16:26:05.536+08 2019-02-21 09:45:00.847+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+477ce1aa-aaae-40d3-a55e-2d3ef3a38e23 采集仪 b62a05b7-00f6-49f0-a9d4-c3ffa17b7340 b62a05b7-00f6-49f0-a9d4-c3ffa17b7340 b62a05b7-00f6-49f0-a9d4-c3ffa17b7340 f HZM200-F 2018-09-29 15:42:42.21+08 2018-09-29 15:48:19.601+08 \N 1
+357c45b8-b190-4369-862c-e28530e13aa2 酸碱度氧化还原在线分析仪 849e9b08-1181-436a-a106-cc6b0d3ffdc5 849e9b08-1181-436a-a106-cc6b0d3ffdc5 849e9b08-1181-436a-a106-cc6b0d3ffdc5 t MIK_PH6.0 2018-10-08 16:48:22.297+08 2018-10-09 10:54:22.203+08 a32c47a2-7dc4-458d-8169-e88a5b0e82de 4
+afb69a31-61c2-417c-b62e-c41730b3e6a1 DT振弦式土压力计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DT-tuyali 2018-09-07 11:09:31.026+08 2018-10-19 10:02:08.06+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+b03b1516-7e4a-41a4-9765-a1a485bb998a 厕所环境传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-toilet-Weather 2018-10-30 22:17:59.313+08 2018-11-05 15:30:38.876+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+57e52f6f-9cfd-4060-bbf4-506058f6206d test c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f testhttp 2018-10-29 18:06:17.119+08 2018-10-29 18:06:17.119+08 \N 1
+9d5905bc-0969-4032-ad57-69d6490fbc47 LORA节点 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-lora-JD 2018-11-22 14:43:45.876+08 2019-02-16 12:14:55.725+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+296a97ca-fbd1-4876-83b2-f40a7fa7d5c5 温度传感器 6b927c2a-ce23-4bf8-9f83-7307d2856c61 6b927c2a-ce23-4bf8-9f83-7307d2856c61 6b927c2a-ce23-4bf8-9f83-7307d2856c61 t 18B20-S 2018-11-09 14:49:07.684+08 2018-11-13 14:22:02.178+08 4ef87106-170b-4ad8-96bf-051cc45e7da1 4
+540e29ab-87bd-4d64-9f6c-c9af1db5bbf4 云盒 ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c t XP-YH 2018-11-12 16:41:13.983+08 2018-11-14 10:13:32.876+08 c10a7b15-97f0-451e-a15c-537f9ba147ff 1
+800e5478-374c-4de8-ab05-d9aa4be45cdb 二氧化碳传感器 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b t NH162 2018-11-20 14:58:30.322+08 2018-12-13 09:14:18.422+08 66a47769-cf2c-4708-bde1-48eae1617ade 4
+7575abc3-ef50-40ce-90c4-66fb308cf20c 锚索计 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 t YH03-D08 2018-12-03 13:54:10.234+08 2018-12-03 14:14:31.169+08 1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa 4
+f0229321-e654-43b1-a172-a660b74367cd 钢筋计 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 t YH60-E08 2018-12-03 14:06:15.002+08 2018-12-03 14:14:33.779+08 1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa 4
+14f67669-6cec-42c0-a7ca-4b60950ec7b5 静力水准仪 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 t YH02-E20 2017-12-20 14:30:07.19+08 2018-12-07 16:51:30.142+08 1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa 4
+2bbdef47-01cb-401b-ae49-c4b7bad46d36 微型压力盒(应变片式) 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 t XL-WTY 2018-12-07 17:22:02.559+08 2018-12-07 17:26:37.739+08 58e23a26-8332-454f-b122-3e18a3125b26 4
+1152aa27-3899-4f0f-9954-9d83cedd5aab 数字称重变送器 b1797f0b-c735-409e-89f5-ab695859f076 b1797f0b-c735-409e-89f5-ab695859f076 b1797f0b-c735-409e-89f5-ab695859f076 f A1P-D2 2018-12-10 10:00:18.969+08 2018-12-10 10:00:18.969+08 \N 4
+326d5283-7066-4e0f-9e27-380773523f19 岩石应力计 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 t XL-YSL 2018-12-07 17:22:03.971+08 2018-12-07 17:26:41.748+08 58e23a26-8332-454f-b122-3e18a3125b26 4
+d4582a57-2984-4d20-94de-598f5b28a188 振弦式轴力计 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 t HJ-9910 2018-12-10 11:36:18.824+08 2018-12-10 11:39:47.51+08 6960c889-9031-47f4-98f7-e80cfe3ecdb4 4
+fac96717-3818-4839-aedc-5dbb6c1c62f2 水平压力盒(应力铲) 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 t XL-TYH 2018-12-07 17:22:03.063+08 2018-12-07 17:26:45.833+08 58e23a26-8332-454f-b122-3e18a3125b26 4
+a4cf524d-8114-4b70-b13a-a931429c4bbf 数字称重显示器 b1797f0b-c735-409e-89f5-ab695859f076 b1797f0b-c735-409e-89f5-ab695859f076 b1797f0b-c735-409e-89f5-ab695859f076 t 805TS-B-17 2018-12-08 17:37:32.875+08 2018-12-11 13:44:29.757+08 c4138de9-d2c3-4774-88dc-fd597cf6e8f9 4
+7328323d-9f8b-435e-9d4f-f963f502dc31 表贴式应变计 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 t XL-BM150 2018-12-07 17:12:17.896+08 2018-12-07 17:26:23.559+08 58e23a26-8332-454f-b122-3e18a3125b26 4
+65e60374-6bdf-42f8-801d-00fc50085215 双膜土压力计 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 t XL-TY 2018-12-07 17:22:01.982+08 2018-12-07 17:26:27.402+08 58e23a26-8332-454f-b122-3e18a3125b26 4
+8c73b29c-6146-4170-9cb7-d8ead8990d60 振弦式钢筋计(锚杆计) 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 t XL-GJ 2018-11-23 17:09:41.559+08 2018-12-07 17:26:31.919+08 58e23a26-8332-454f-b122-3e18a3125b26 4
+e8357fe4-05bb-4159-8a27-a46212d14544 锚索测力计 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 t XL-MS 2018-12-07 17:12:17.175+08 2018-12-07 17:26:35.009+08 58e23a26-8332-454f-b122-3e18a3125b26 4
+9dac79b5-8173-4081-abff-37f65c42b0c6 轴力计(反力计) 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 t XL-ZL 2018-12-07 17:22:04.448+08 2018-12-07 17:26:49.414+08 58e23a26-8332-454f-b122-3e18a3125b26 4
+01f1ac79-6cbb-4f77-b73f-cf8d602f11a6 埋入式应变计 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 t XL-MR150 2018-12-07 17:12:17.318+08 2018-12-07 17:26:52.586+08 58e23a26-8332-454f-b122-3e18a3125b26 4
+3b796285-ef41-4963-9304-f0909623f5c7 煊隆采集仪 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 t XL–CJX–ZX36 2018-11-23 16:45:17.049+08 2018-12-07 17:51:31.664+08 58e23a26-8332-454f-b122-3e18a3125b26 1
+0b4f75d6-d921-4913-a9de-cfff3b99d56e 静力水准仪 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 t YCSJLSZY 2018-12-11 14:09:09.379+08 2018-12-11 14:23:08.845+08 1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa 4
+d8de8739-f146-41e0-877e-747f30ac59a7 空气节点 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-KQJC-V1.00 2018-12-11 10:31:53.256+08 2019-03-27 20:48:48.147+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+12253047-b588-4225-9f55-e6282003788a 压电式振动传感器 17ecfb0a-03a3-45eb-8d52-4794676c3a0a 17ecfb0a-03a3-45eb-8d52-4794676c3a0a 17ecfb0a-03a3-45eb-8d52-4794676c3a0a t BY-S02 2019-08-22 12:00:24.988+08 2019-08-29 09:16:08.232+08 c6b69110-10f2-4697-afcf-eb74f9e4a777 4
+37c046eb-9a0e-49b0-95fb-f0128338f381 孔隙水压计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-KY20 配套 飞尚 多条道振弦采集仪 2018-01-23 14:57:48.734+08 2019-11-09 10:35:28.287+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+a820a6a6-2302-4291-bf8a-e6beb3e7f663 扬尘采集设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t RK-YC 2018-12-03 15:03:56.948+08 2019-04-08 14:49:24.805+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+15eadcdc-9a05-4580-946b-2b722d95ba5b 物联网传感器 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-HS-100 2019-12-09 10:15:11.886+08 2019-12-09 17:13:32.603+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+5e2812d0-7cbc-4f79-9723-87bec81bb0ea 采集仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-IOT102 2019-12-09 10:11:18.879+08 2019-12-09 17:13:35.099+08 005e2048-b7e8-4f7c-847f-e9918a66414d 1
+0747dcbe-0a49-4db1-ac06-d9a460babdd3 GNSS 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS—GNSS—SD 2018-12-08 15:12:26.594+08 2020-04-22 14:59:10.3+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+5b40bb69-7692-4cee-b6df-bd7871764131 温湿度传感器 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-WSD-01MM 2019-08-21 17:57:36.693+08 2020-04-14 11:00:31.273+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+3b867352-5d0b-4016-a55f-4d68d0dcbaa4 土壤水分温度变送器 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b t NHSF48 2018-11-22 17:12:56.406+08 2018-12-13 09:14:22.913+08 66a47769-cf2c-4708-bde1-48eae1617ade 4
+50d3cb43-638b-4833-a401-f526d1cbbc9e 解调仪 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 f MWY-DS1600 2018-12-13 15:31:50.763+08 2018-12-13 15:44:20.429+08 \N 1
+6d4fda56-b81c-4873-9c75-10257aaf7254 光电传感器 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 f MWY-FBG-400 2018-12-13 15:33:20.394+08 2018-12-13 15:44:38.437+08 \N 4
+d5ce913e-4a89-473e-b69b-bdfbc0fa6753 安全帽 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-KLT-GPS 杭州科利特安全帽设备 2018-12-13 13:58:23.773+08 2018-12-13 15:53:27.737+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+2b6f224d-770e-41bc-b28b-5afbe3b213c4 土壤水分温度传感器 ca9092a8-c707-4783-9d79-f50f05048927 ca9092a8-c707-4783-9d79-f50f05048927 ca9092a8-c707-4783-9d79-f50f05048927 t MP-406T 无公式 2018-01-08 13:46:38.336+08 2018-12-14 11:38:37.406+08 dd99d0cd-27ad-42ff-869e-e00c51c5c62a 4
+164528dd-81d3-435b-a4cd-dc328abbe3ba 数字采集器 e3655afc-a2a8-4bc3-801a-9c3019705a27 e3655afc-a2a8-4bc3-801a-9c3019705a27 e3655afc-a2a8-4bc3-801a-9c3019705a27 t RYQ-4ZD-6 2018-12-14 15:48:01.086+08 2018-12-15 09:31:34.525+08 82af10d4-f6f0-4e09-84ce-7053d4b42940 1
+74ca6540-3a33-4157-8629-f00d8750aa78 雷达测速仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f FS_laser_speed 2018-12-15 11:42:30.088+08 2018-12-15 11:42:30.088+08 \N 4
+bfd93522-374e-4c12-b203-e02ff040a821 综合采集模块 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c t JMZX-32A 2018-12-18 13:51:36.28+08 2018-12-18 13:52:23.571+08 941c9c57-031c-4e4c-9a2b-5e544e387274 1
+00824420-b248-4f1e-9e56-57e8573c9e35 渗压计 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 t SZZX-F 2018-12-18 16:53:42.364+08 2018-12-29 17:12:34.973+08 631adf16-ff91-4949-8e6f-e13680319751 4
+99685e46-230b-43e6-a98c-f7f472af999f 双膜土压力盒 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 t SZZX-Eb 2018-12-18 16:53:42.843+08 2018-12-29 17:12:53.283+08 631adf16-ff91-4949-8e6f-e13680319751 4
+cbdb48d6-afd7-4322-884a-d37d56f96176 静力水准仪 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-JLSZ-20-V1.00 2019-04-16 16:01:34.198+08 2020-04-13 13:31:39.557+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+6b180341-15c7-4148-89e3-b6fc10b0f7b5 测温采集系统 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 t SZDQ-WT 2018-12-18 18:03:29.495+08 2018-12-29 17:12:59.423+08 631adf16-ff91-4949-8e6f-e13680319751 1
+66ccfb40-3e33-4b5b-a47b-be50c83473e9 单膜土压力盒 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 t SZZX-Ea 2018-12-18 16:53:43.55+08 2018-12-29 17:12:56.122+08 631adf16-ff91-4949-8e6f-e13680319751 4
+b0726a2c-5c69-481f-8d2d-d8f8e17a248d 轴力计 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 t SZZX-U 2018-12-18 16:53:41.84+08 2018-12-29 17:12:37.99+08 631adf16-ff91-4949-8e6f-e13680319751 4
+b640a9ef-9a1c-4973-ada5-0cdab7877f55 荷载计 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 t SZZX-Z 2018-12-18 16:53:41.301+08 2018-12-29 17:12:40.974+08 631adf16-ff91-4949-8e6f-e13680319751 4
+8580899d-741c-4cc7-a479-ccd6c0c6e22c 多向应变计 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 t SZZX-D 2018-12-18 16:53:40.784+08 2018-12-29 17:12:43.895+08 631adf16-ff91-4949-8e6f-e13680319751 4
+ae5c1f57-7ae4-4515-b6ba-51319d4599ce 表面应变计 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 t SZZX-B 2018-12-18 16:35:55.136+08 2018-12-29 17:12:50.353+08 631adf16-ff91-4949-8e6f-e13680319751 4
+9e3cc14a-915c-4fd2-bb82-35360798cb23 总线型综合采集系统 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 t SZDQ-485 2018-12-20 14:56:36.682+08 2018-12-29 17:13:04.342+08 631adf16-ff91-4949-8e6f-e13680319751 1
+e376bde0-8e4f-493d-a03e-98b4b27acec0 埋入式应变计 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 t SZZX-A 2018-12-18 16:35:54.018+08 2018-12-29 17:12:31.931+08 631adf16-ff91-4949-8e6f-e13680319751 4
+11c61b7f-9d36-4273-b679-898a09fe21e9 气象站 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t BYS710-ZX 2018-12-15 16:52:13.967+08 2018-12-28 16:41:56.425+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+495526a7-7701-4e9c-8dfd-bbfd7e0b163b 风速风向仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t HSTL-FSX03 2018-12-15 11:36:54.184+08 2018-12-21 17:25:11.782+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+2aec4a46-de9a-40e0-ac97-bdb0d149e82d 液位计 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca t M91-D 2018-12-22 09:15:30.073+08 2018-12-24 13:47:06.969+08 2f5601db-b76e-4770-9af3-4f1825703d4d 4
+f09bd97d-d0b3-4fbc-ae36-8de97f4c64e2 超声波水表 632bb218-8da7-4d91-b83d-70879c562d74 632bb218-8da7-4d91-b83d-70879c562d74 632bb218-8da7-4d91-b83d-70879c562d74 t DS-CSW 2018-12-21 15:20:51.743+08 2018-12-25 11:46:45.057+08 b90d5ecb-ddfc-42fb-bb9f-0492f4b2a4f9 4
+3f9ded10-1974-46c6-b577-74ef70477cc1 虚拟DTU ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-virtual-DTU 2018-12-21 16:55:45.96+08 2018-12-27 17:06:18.169+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+f09a8627-9e84-489e-86f5-72522b126e74 静力水准仪 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 t SZDG-S 2018-12-20 14:58:02.425+08 2018-12-29 17:13:07.704+08 631adf16-ff91-4949-8e6f-e13680319751 4
+b2e31dbc-1560-4ab9-8b57-a57a012d5022 温度传感器 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 t SZWT-18 2018-12-20 15:04:51.3+08 2018-12-29 17:13:12.763+08 631adf16-ff91-4949-8e6f-e13680319751 4
+a81c3314-06e2-428a-bede-88adf880bdd7 多点位移计 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 t JTM-V7000 2019-01-07 17:45:50.781+08 2019-03-07 14:31:39.505+08 69ff6b39-2d8c-443e-939d-f6c087588d22 4
+0c6ecc38-15dc-4580-a580-aa3c39eb9064 裂缝计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f MAS-KTR3 2018-12-24 14:39:01.228+08 2018-12-24 14:39:01.228+08 \N 4
+092ae1af-65d0-45dd-a621-17fd26682e7c 位移传感器 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc t HY-65050F 2018-12-28 11:07:29.288+08 2018-12-29 15:09:42.341+08 e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5 4
+d52114b2-8ad0-42a3-989f-0650203b54c8 倾角传感器 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc t HY-65QJ 2018-12-28 11:17:19.419+08 2018-12-29 15:09:45.859+08 e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5 4
+fc561f5f-92c8-4549-8e02-dd01dd276aef 倾角传感器 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-Q01A-[-180,180] 测量范围[-180,180] 2018-12-24 11:48:02.113+08 2018-12-24 16:08:07.754+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+6f051a40-1c14-47c6-8124-3077f27facc5 倾角传感器 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-Q01A-[-60,60] 测量范围[-60,60] 2018-12-24 11:53:24.862+08 2018-12-24 16:08:10.015+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+b92bc45a-bf9b-425f-9747-7caedf0c2784 倾角传感器 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-Q01A-[-45,45] 测量范围[-45,45] 2018-12-24 11:53:26.494+08 2018-12-24 16:08:12.281+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+52ae2b25-56b5-4a29-9f0b-33454ac99ff6 倾角传感器 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-Q01A-[-15,15] 测量范围[-15,15] 2018-12-24 11:53:35.03+08 2018-12-24 16:08:15.124+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+2202dd15-500f-45e8-a555-e90ddf24df13 倾角传感器 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-Q01A-[-30,30] 测量范围[-30,30] 2018-12-24 15:31:37.889+08 2018-12-24 16:08:17.364+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+bc87beae-9433-42de-875d-6981e7975f21 拉绳式位移传感器 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc t HY-65L1000 2018-12-28 11:30:29.885+08 2018-12-29 15:09:51.536+08 e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5 4
+21387f8b-b7bb-48c8-9972-7ff32e01f2fa 挠度沉降测试仪 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc t RS-RC65J 2018-12-28 11:30:32.406+08 2018-12-29 15:09:55.211+08 e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5 4
+966cf4b9-f411-4764-bad3-2372cd867458 温度传感器 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc t HY-65W 2018-12-28 11:30:33.797+08 2018-12-29 15:09:59.051+08 e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5 4
+10d33bab-421f-428f-b450-b5ee4b1c3465 湿度传感器 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc t HY-65S 2018-12-28 11:30:35.241+08 2018-12-29 15:10:02.615+08 e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5 4
+e5b96801-9448-44f2-a175-40cc7e8466b4 无应力计 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 t SZZX-W 2018-12-18 16:53:40.213+08 2018-12-29 17:12:47.795+08 631adf16-ff91-4949-8e6f-e13680319751 4
+cef1d2a2-c44e-4143-84bd-2a65140e33d0 压差式变形测量传感器 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-YC-2000 压差式变形测量传感器 2018-02-05 11:21:34.544+08 2019-01-02 10:09:52.593+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+0aae766a-5d82-479a-bd71-7eb1e0e4e20f 压力变送器 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 t MPM47xx[0~200kpa] 2017-11-29 11:01:36.207+08 2019-01-02 10:51:50.001+08 06a180f1-88d0-4ef8-800f-c9175f55215d 4
+91372b00-3bf7-4eb0-9495-ad544dfb04ca 压力变送器 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 t MPM47xx[0~500kpa] 2017-11-29 11:02:53.565+08 2019-01-02 10:51:51.809+08 06a180f1-88d0-4ef8-800f-c9175f55215d 4
+d7912272-424d-4546-a3c1-43a24365dde0 液位变送器 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 t MPM47xx[0~10mH2O] 2017-11-29 11:06:12.61+08 2019-01-02 10:51:54.452+08 06a180f1-88d0-4ef8-800f-c9175f55215d 4
+e6c538b8-f82a-4e8f-9d47-529a835fc779 应变传感器 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc t HY-65B3000B 2018-12-28 11:02:10.353+08 2019-01-07 16:46:33.761+08 e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5 4
+f90616c7-29f8-4aa3-863b-c67c6ef4ec61 Led屏幕 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t LED_Pusher 2019-01-04 18:36:21.555+08 2019-01-05 10:13:43.512+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+1824bec3-15cd-498d-b2c1-b3cc804a1021 振弦式锚杆测力计 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 t JTM-V1000B 2019-01-07 17:23:55.772+08 2019-03-07 14:31:33.381+08 69ff6b39-2d8c-443e-939d-f6c087588d22 4
+36f70703-df53-42ae-a8da-e001d8215fd8 txt设备 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 f txtDevice 2019-01-08 16:04:57.708+08 2019-01-08 16:09:20.955+08 \N 1
+f7257ee9-fbb6-4cd9-a622-3f3a5c3cff2e 液压式静力水准仪 6708aba6-65f9-4ec3-bfc2-227628154ff3 6708aba6-65f9-4ec3-bfc2-227628154ff3 6708aba6-65f9-4ec3-bfc2-227628154ff3 t SD-226 2019-01-07 11:08:30.134+08 2019-01-09 14:04:33.878+08 a4159319-ff56-456e-9cd0-1b2bc9ec6ede 4
+a9f13e6b-82bb-4a59-82b7-cf52b91642a5 静力水准仪 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c t JMYC-6210A 2019-01-08 15:12:49.573+08 2019-02-13 09:53:31.835+08 941c9c57-031c-4e4c-9a2b-5e544e387274 4
+ccfcd1c0-1cf5-4123-9be8-ca521b1e79d3 运动数据模块 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-AQG-Step 2019-01-14 15:28:21.342+08 2019-01-15 16:40:01.918+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+969043a0-c1f9-49c2-9f36-c029a03a9c87 智能手环 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-AQG-Bracelet 2019-01-14 11:53:46.23+08 2019-01-15 16:40:06.457+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+b7bea944-ae59-4ec4-85cc-345e98006e52 水位计 f088bb87-39b0-458f-931f-e752ffa5cb07 f088bb87-39b0-458f-931f-e752ffa5cb07 f088bb87-39b0-458f-931f-e752ffa5cb07 t IF-05 2019-10-14 11:39:40.706+08 2019-10-14 11:40:06.791+08 3a3342dd-c0d1-4814-b0d4-99c105d0f91c 4
+fb91aca2-dc9a-4cbb-8ece-54a5e04d6566 应变计 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 t VWS-10 2019-10-14 09:52:23.854+08 2019-10-14 11:41:34.923+08 4f3d93c3-5322-4bef-b358-e98b1589874d 4
+f5cf2b42-6efc-474b-aad5-f5614e5ec0d8 高精度静力水准仪 dade7e83-25b6-4932-993c-6d886fec9843 dade7e83-25b6-4932-993c-6d886fec9843 dade7e83-25b6-4932-993c-6d886fec9843 f RZ371 2019-01-19 14:35:13.508+08 2019-01-19 14:35:13.508+08 \N 4
+9db37a62-7896-4477-a3c4-7d317d28f26e 电量模块 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-AQG-Power 2019-01-14 15:48:46.997+08 2019-01-15 16:39:44.833+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+e1d537c6-2a5b-4b97-91ea-a2bd94093494 LED大屏 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-BigScreen 2019-01-19 15:00:28.906+08 2019-02-15 17:22:53.276+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 0
+a91dd10c-af61-4fcf-8294-1d200a035664 定位模块 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-AQG-Location 2019-01-14 15:44:06.664+08 2019-01-15 16:39:53.758+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+7febae4c-c706-48a8-9f99-e546f48e338b 通道 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 t GM8050-TD 2018-10-10 11:26:00.987+08 2019-08-21 15:17:59.824+08 21da3935-62c3-4b0d-bd28-16921600432a 1
+4eb4d7ed-2199-4514-9411-9c12d59f72e3 跌倒定位模块 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-AQG-Fall 2019-01-14 15:47:03.718+08 2019-01-15 20:26:15.141+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+3d8fcd19-8b2a-4d02-8dd3-de8e2c082dcc 求救模块 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-AQG-SOS 2019-01-14 15:51:12.887+08 2019-01-15 20:26:20.933+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+17b4a482-830c-44e4-be09-1a9cac67c1e7 静力水准仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-JLSZ-10-V1.00 2019-01-24 09:47:37.021+08 2019-01-24 12:57:38.02+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+274929f9-024a-40b8-8856-eb145c334b9a 温度计 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 t RT-1Q 2019-10-14 09:45:26.419+08 2019-10-14 11:41:25.106+08 4f3d93c3-5322-4bef-b358-e98b1589874d 4
+613e22b3-00d5-4036-b4de-8988e8a25b02 测试 736d5c22-d6ac-4577-9782-0f95345ea1d5 736d5c22-d6ac-4577-9782-0f95345ea1d5 736d5c22-d6ac-4577-9782-0f95345ea1d5 f 1.0 2019-10-30 09:05:24.059+08 2019-10-30 09:05:24.059+08 \N 1
+e996ef32-944e-448f-9370-862fd5ed719d 睡眠模块 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-AQG-Sleep 2019-01-14 16:35:28.378+08 2019-01-15 21:00:20.714+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+a9f88745-32d0-4068-bcd3-6735e90b15a0 硅式静力水准仪 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d t PTH-SZY100 2019-01-28 10:00:29.626+08 2019-02-18 15:54:16.843+08 10c8af19-c2ad-4e25-be28-63f5a359a41c 4
+53ff80a4-bf85-47bd-9351-ad8cbd0121e3 压力变送器 dade7e83-25b6-4932-993c-6d886fec9843 dade7e83-25b6-4932-993c-6d886fec9843 dade7e83-25b6-4932-993c-6d886fec9843 f RZ25 2019-01-19 09:49:48.902+08 2019-01-19 09:49:48.902+08 \N 4
+2b4affd1-2151-4632-b11a-e0176fee0a84 液位变送器 dade7e83-25b6-4932-993c-6d886fec9843 dade7e83-25b6-4932-993c-6d886fec9843 dade7e83-25b6-4932-993c-6d886fec9843 f RZ26W 2019-01-19 09:53:06.263+08 2019-01-19 09:53:06.263+08 \N 4
+75ff49e4-22d3-4777-a5a5-71f3a5fc4436 微差压变送器 dade7e83-25b6-4932-993c-6d886fec9843 dade7e83-25b6-4932-993c-6d886fec9843 dade7e83-25b6-4932-993c-6d886fec9843 f RZ23D 2019-01-19 09:54:40.583+08 2019-01-19 09:54:40.583+08 \N 4
+9eef0ea4-1634-4d46-a9fb-6613a37b9431 静力水准仪 dade7e83-25b6-4932-993c-6d886fec9843 dade7e83-25b6-4932-993c-6d886fec9843 dade7e83-25b6-4932-993c-6d886fec9843 f RZ370 2019-01-19 14:34:12.826+08 2019-01-19 14:34:12.826+08 \N 4
+20b14a3c-9532-42df-b60c-baf4ba16865c 静力水准仪 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-J02 2019-01-22 09:31:07.186+08 2019-01-22 09:37:09.126+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+0794ccbd-2a6e-49b6-9b42-abf93957b33c 垃圾箱采集仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-Trash-Bin 2019-01-18 16:57:11.292+08 2019-01-22 17:19:01.811+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+a23e3c37-7ab4-4ed4-b73b-a791c96d596c 心率模块 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-AQG-Heartrate 2019-01-14 15:31:37.055+08 2019-01-23 16:38:12.134+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+d94bb4f7-d5a8-4bb0-b866-c8008e5123ab 光栅类应变计 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 t GM8050-ybj 2018-10-10 11:27:19.854+08 2019-01-25 11:18:08.715+08 21da3935-62c3-4b0d-bd28-16921600432a 4
+04425c48-b89c-498d-8372-b3a64d1abf1e 光栅类温度计 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 t GM8050-wdj 2018-10-24 13:30:32.27+08 2019-01-25 11:18:11.29+08 21da3935-62c3-4b0d-bd28-16921600432a 4
+6020197b-abd9-4ef2-b674-0451a754fe68 测试采集仪 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 f testACQUnit 2019-01-29 10:56:26.772+08 2019-01-29 10:56:26.772+08 \N 1
+ff9746d5-839e-46dc-aae9-ec714680e041 LORA节点2.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LORA2-JD 2019-01-22 15:15:43.184+08 2019-01-28 09:57:04.841+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+0f3aa84f-d64b-4135-8ce1-f3a704751a4c 空气采集仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-oxy-agent 2019-01-25 16:07:25.608+08 2019-07-18 14:34:01.841+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+9d3d4083-57c0-4067-b3e6-f9ebc2a7a6d5 无线压力变送器 41258e4c-3278-4ea9-bbd8-9d0a83c4ad92 41258e4c-3278-4ea9-bbd8-9d0a83c4ad92 41258e4c-3278-4ea9-bbd8-9d0a83c4ad92 f DPI10S 2019-01-30 11:05:38.181+08 2019-01-30 11:05:38.181+08 \N 4
+61e3c33e-85cf-4894-9fc6-70fc3fd7a522 动态电阻应变仪 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c t JMYD-1008 2019-01-18 14:06:05.47+08 2019-04-20 19:23:41.271+08 941c9c57-031c-4e4c-9a2b-5e544e387274 1
+c9459443-e9d6-48eb-b37d-d25dfb8faaac 采集单元 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T-410 2019-01-31 11:35:16.827+08 2019-02-26 17:17:06.803+08 0a638ade-14a7-4e31-b102-953f910425a8 1
+d0fcad31-8656-4b67-9530-1519960defec 磁式静力水准仪 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d t PTH-SZY200 2019-01-28 10:50:57.656+08 2019-02-18 15:54:24.368+08 10c8af19-c2ad-4e25-be28-63f5a359a41c 4
+35088e4d-f42e-4324-8237-bedb617ee489 轴力计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-ZL20 配套 飞尚 多通道振弦采集仪 2019-02-25 14:12:02.935+08 2020-04-10 17:16:21.951+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+b52fa83f-d3fd-4a8e-b9d5-76ea840aca15 分布式网关MOP下发 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f FS-iFWL-VWGVV 2019-02-21 17:19:51.465+08 2019-02-21 17:19:51.465+08 \N 1
+6e79c080-ecb3-4222-927e-f2dfcd85683a 锚索计(三索) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-T30 2019-02-25 13:30:26.982+08 2020-04-14 10:50:59.989+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+9768653f-3bb0-4f60-9842-ed5df2685dc4 轴力计(三弦) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-ZL60-03 配套飞尚 多通道振弦采集仪 2019-02-25 13:31:57.619+08 2020-04-14 10:51:04.77+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+ec8018e2-1de6-4384-ac85-01405362dc83 四通道振弦采集仪 a59371d0-7a5c-473a-83f2-41b31b9096e1 a59371d0-7a5c-473a-83f2-41b31b9096e1 a59371d0-7a5c-473a-83f2-41b31b9096e1 t XT-242B 同基泰四通道采集仪 2019-08-27 09:48:38.217+08 2019-08-28 10:43:15.587+08 ced3128b-5650-474d-99ae-4496d3d0ea97 1
+ac1d92e7-4587-48e7-84ce-c4cd8db40687 轴力计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-ZL10 配套 飞尚 多通道振弦采集仪 2019-02-25 14:10:58.931+08 2020-04-10 17:16:16.242+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+bf5a92b7-59ab-429b-bce7-da858650205e 孔隙水压计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-KY04 配套 多通道振弦采集仪 2019-02-25 11:42:07.342+08 2020-04-09 16:27:51.145+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+6c6b5c79-b408-447c-b2b1-3ff7bf122a19 MEMS倾角计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-C12G-2 电压输出 2019-02-22 13:41:58.502+08 2019-06-11 17:46:53.14+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+2b835f19-8eba-46b3-b3aa-affc9b36dcd1 轴力计(三弦) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-ZL40-03 配套飞尚 多通道振弦采集仪 2019-02-25 14:08:36.878+08 2020-04-14 10:51:10.565+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+2b04a6d8-4af7-428f-95c9-325800c4b59d 智能数据采集器 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t DT80G-WS 2019-02-22 15:14:23.566+08 2019-12-05 09:45:44.813+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 1
+ff97f842-4bf0-4384-b4b6-05a9783aa809 孔隙水压计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-KY20 配套 飞尚 多条道振弦采集仪 2019-02-25 11:55:32.869+08 2019-11-13 16:58:28.337+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+8b4d38be-2454-4d9b-a586-d894c5197362 测试 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d f 1.0 2019-12-12 16:53:57.526+08 2019-12-12 16:53:57.526+08 \N 4
+b8904c0e-1294-49f9-b0e9-dadd79c4efe4 孔隙水压计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-KY06 配套 多通道振弦采集仪 2019-02-25 11:44:07.87+08 2020-04-09 16:28:02.252+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+d1b35088-9410-4203-924c-75b60634c7c6 应变计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-ST2 2019-02-22 11:35:12.138+08 2019-06-11 15:27:03.95+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62 孔隙水压计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-KY08 配套 多通道振弦采集仪 2019-02-25 11:46:10.781+08 2020-04-09 16:28:07.741+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+369b29f9-7664-42c3-8510-7ad4c7b5bc06 孔隙水压计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-KY10 配套 多通道振弦采集仪 2019-02-25 11:52:45.905+08 2020-04-09 16:28:12.707+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+dcac1d14-912a-4868-8be8-08d1e86d2fa5 静力水准仪 8bb8c871-dd83-4665-8378-1ae66927181a 8bb8c871-dd83-4665-8378-1ae66927181a 8bb8c871-dd83-4665-8378-1ae66927181a t HKJ-JLSZ 2019-02-22 17:20:51.889+08 2019-02-22 17:22:27.045+08 6953cb17-93d1-43e9-b65a-2b0990bc0049 4
+b21b534c-d8f1-4caf-a405-1682a99dc1a9 压力传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t F10G-95T 2019-02-22 16:33:55.41+08 2019-02-26 14:50:02.461+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+c70bf363-fc19-41f9-80df-27a231a1a2bd 静力水准仪 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-W10-A 2019-02-22 13:44:23.958+08 2019-06-18 19:03:59.732+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+c952a71d-a917-40a7-aecc-cf2dc40c238a 轴力计(三弦) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-ZL50-03 2019-02-25 13:32:42.87+08 2020-04-14 10:50:55.309+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+ef68a37c-37fa-40d7-8537-dcbc64eaf1e1 扬尘设备 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-YC 2019-02-25 11:38:44.882+08 2019-02-25 17:45:40.676+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+1ecb51e2-e759-45ef-9792-89f34bb715d0 表面式应变计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-BM15 表面式应变计 2019-02-25 14:20:41.303+08 2020-05-09 09:30:14.977+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+43060aae-0e85-4ec6-9fc9-b05216b11e13 拉线位移传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LXWY-Z 济南 博林 协议 2019-11-21 14:01:06.922+08 2020-11-20 10:06:49.656+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+80342a8c-db6f-40e6-b331-0ae1eca53138 轴力计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-ZL40 配套 飞尚 多通道振弦采集仪 2019-02-25 14:16:02.454+08 2020-04-10 17:16:31.253+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+d26842d0-7685-4eec-869d-160b023932b9 表面式应变计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-BM30 表面式应变计 2019-02-25 14:21:56.971+08 2020-05-09 09:27:17.938+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+1d7e6445-a676-42b9-9314-837415832451 超声波风速风向传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-FSFXY-B 2019-12-12 17:00:31.595+08 2019-12-19 09:03:37.817+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+573fb497-e583-41c4-ba6b-ecf548921eaf 振弦采集仪 19fa25f4-9ba9-4e93-9025-e67b34db9cf7 19fa25f4-9ba9-4e93-9025-e67b34db9cf7 19fa25f4-9ba9-4e93-9025-e67b34db9cf7 t FCN-4 2019-05-07 15:57:23.324+08 2021-01-15 13:16:33.025+08 23ddab0a-3351-496e-a544-4e988d67b576 1
+3bf54b2d-1623-4920-80c2-4e1f7407b318 锚索测力计 a59371d0-7a5c-473a-83f2-41b31b9096e1 a59371d0-7a5c-473a-83f2-41b31b9096e1 a59371d0-7a5c-473a-83f2-41b31b9096e1 t SDM 2019-08-27 15:43:12.793+08 2019-10-22 14:09:09.352+08 ced3128b-5650-474d-99ae-4496d3d0ea97 4
+dfffdb75-6ad1-4092-95d2-ac6596b3c4ce 压力传感器 275e6287-8ef6-4bc1-8e57-72f3d6404d8f 275e6287-8ef6-4bc1-8e57-72f3d6404d8f 275e6287-8ef6-4bc1-8e57-72f3d6404d8f t ZL-YL 2017-12-19 17:58:52.262+08 2019-08-27 17:41:14.218+08 c41ab05c-aa3d-4d60-9dc3-217323b6e9c7 4
+6039a6d8-af54-411e-a520-451b20b6d089 液位传感器 275e6287-8ef6-4bc1-8e57-72f3d6404d8f 275e6287-8ef6-4bc1-8e57-72f3d6404d8f 275e6287-8ef6-4bc1-8e57-72f3d6404d8f t ZL-YW 2017-12-20 09:11:42.428+08 2019-08-27 17:41:18.745+08 c41ab05c-aa3d-4d60-9dc3-217323b6e9c7 4
+f0443cf8-a24d-46f9-a894-7c731798736d 表面式应变计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-BM50 表面式应变计 2019-02-25 14:24:04.241+08 2020-05-09 09:30:10.092+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+23ecb98e-e536-4313-9234-07622fea082f 固定式甲烷检测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ES10B10-CH4 2020-01-14 14:06:32.978+08 2020-01-15 13:50:50.207+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+c82a7f0e-848f-4659-9555-8b275c33036e Zigbee气表 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f V1.0 2020-03-07 16:35:47.27+08 2020-03-07 16:35:47.27+08 \N 0
+421933bd-e149-4d7c-ad95-ef8aa2a2692c DTU c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t F2A16-U 端口固定40003,不转义 2019-08-30 14:28:31.123+08 2019-08-30 14:31:10.71+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 0
+b345cafa-8d58-454f-a01e-e42859545b18 钢筋计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-GJ22 配套飞尚多通道振弦采集仪 2019-02-25 14:17:43.249+08 2020-08-17 15:08:08.623+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+536c5d54-6c47-4800-aecb-47219ee56fc2 钢筋计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-GJ25 配套飞尚多通道振弦采集仪 2019-02-25 14:18:58.092+08 2020-08-17 15:08:13.474+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+18b82e73-7501-445f-a72c-a8e20cf9da40 钢筋计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-GJ28 配套飞尚多通道振弦采集仪 2019-02-25 15:51:46.857+08 2020-08-17 15:08:22.675+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+3d19a0b1-da48-466d-88d1-dc7c1f73bc68 内埋式应变计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-NM30 配套 飞尚 多通道采集仪 2019-02-25 14:25:00.041+08 2020-08-17 12:42:57.373+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+6fb1b711-d8c0-489d-9751-524410c27bcc 图像传感器 3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c 3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c 3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c t tuxiang 2019-08-07 10:32:47.272+08 2019-09-02 16:50:54.907+08 dc3110a0-e9c9-41ee-aa3e-417b06a4a8d8 4
+f34762e6-6532-434e-93a0-74c119cfc58a 水位计 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-SW01A 2019-09-11 10:15:40.117+08 2019-09-11 16:31:57.957+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+798b891d-6c34-4219-bde6-a8d957643010 土壤温湿度计 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-FDR-5 2019-09-11 11:36:45.297+08 2019-09-11 16:32:01.95+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+36ddd8af-d58c-4496-ae9a-ce9cb9786cd5 温湿压传感器 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-WSQ01A 2019-09-11 11:57:38.672+08 2019-09-11 16:32:04.664+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+aab61193-270e-4d06-9bdf-9da5194c744a 钢筋计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-GJ28 正值是张拉力,负值是承压力 2018-03-26 11:35:23.201+08 2019-09-16 14:01:51.23+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+c89d02cd-f052-4004-aa3e-93906248a62b 土壤温湿度计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-TRWSD 2019-09-16 16:50:20.691+08 2019-09-16 16:57:52.682+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+d3763c4f-94ba-4ae4-b35e-ccff2340c16a 钢筋计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-GJ32 正值是张拉力,负值是承压力 2018-03-26 11:35:24.351+08 2020-04-09 09:43:01.859+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+7d9b7e21-42e2-4040-86d7-4bdbba095e43 温度传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-WD120 2019-12-11 15:37:46.764+08 2019-12-13 11:13:40.496+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+69f9043f-2ce4-4d39-97fe-94f6c2f6185c 倾角传感器n 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN635 nb访问电信 2019-09-17 09:22:11.093+08 2019-09-19 13:39:18.483+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+96e0e6a4-fb0a-4e01-ba5b-1ab1feff3aee MEMS倾角计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-C12-B 2019-06-11 17:24:10.297+08 2019-09-18 15:36:58.781+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+fbb11421-cbb6-435e-b9f0-4bf1e056016c Door f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f Zigbee 2019-12-16 11:28:19.773+08 2019-12-16 11:28:35.04+08 \N 4
+3d182049-68c9-440d-adde-b62b71abee38 土压力计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-P6 2019-04-28 11:28:04.769+08 2019-09-18 16:55:35.846+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+888fb650-543d-4141-a70e-7dff25dfffe7 渗压计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-W9 2019-06-11 15:50:05.398+08 2019-09-18 16:55:41.739+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+f70240a0-3384-4984-a854-65fe5b16dc0a 土压力计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-P10 2019-06-11 16:27:10.938+08 2019-09-18 16:55:47.124+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+283a3cd5-8593-4b92-a528-bbd35a07b288 渗压计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t W9 2019-02-22 11:35:40.167+08 2019-09-18 17:16:23.058+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+ba311e19-eea2-4eff-8674-1a146dab66c3 称重采集仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-WIM-V1.00 北京欧乐 2019-11-27 14:14:55.482+08 2019-12-16 11:37:09.389+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+0fbc8f32-4f32-4e21-bbba-34023ac70ff4 Zigbee温湿度计 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f Zigbee 2019-12-17 15:53:57.591+08 2019-12-17 16:36:45.525+08 \N 4
+d4476f92-5675-4de7-982e-fd914541136a 裂缝计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-FYLF 2019-12-17 14:09:15.081+08 2019-12-18 10:29:08.041+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+ff8195ce-78e0-4668-81bb-8f26e83411a9 裂缝计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LFXX-Z-RTU 2019-12-05 15:44:56.852+08 2021-02-20 17:45:51.119+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+04f55cdb-e98a-4dc9-b3fc-480a9a241a02 振弦式土压力计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-TY04 配套飞尚多通道振弦采集仪 2019-02-25 15:39:43.173+08 2020-04-13 11:38:03.613+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+998a52d3-f5ee-4d52-997f-1865b390e26b 振弦式土压力计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-TY20 配套飞尚多通道振弦采集仪 2019-02-25 15:44:37.089+08 2020-04-13 11:38:09.184+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+c3ed0f20-828b-46bd-b8ef-b7821cd0fcce GNSS ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GNSS-File 2019-09-04 13:53:37.946+08 2019-09-04 13:54:22.322+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+7efbc3e8-ff6b-433b-9041-c76b9df89644 静力水准仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-JLSZ-V1.00 2019-01-04 15:34:26.862+08 2019-09-04 15:15:51.578+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3 振弦式土压力计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-TY02 配套飞尚多通道振弦采集仪 2019-02-25 15:46:53.761+08 2020-04-13 11:38:14.404+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+e7ed3509-511e-4c5d-8aec-3f331ec8defa 钢筋计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-GJ32 配套飞尚多通道振弦采集仪 2019-02-25 15:47:53.704+08 2020-08-17 15:08:17.917+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+a62aba76-29bb-43b8-a1fe-2dff7c77ecb8 内埋式应变计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-NM15 振弦 采集仪 2019-02-25 15:46:09.555+08 2020-08-17 14:14:09.671+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+c169f72a-deae-4135-84ee-62d771722507 内埋式应变计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-NM50 配套 飞尚 多通道采集仪 2019-02-25 15:41:07.227+08 2020-08-17 14:14:14.295+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+1c9756ed-dcf4-4156-9a43-09ce478d2038 激光测距仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LRF 2018-08-14 15:32:39.117+08 2021-01-26 15:43:06.124+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+0e7784d1-0cbf-46aa-b156-e3361a3251e4 激光测距仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-LRF 2018-08-14 14:13:28.642+08 2019-09-04 16:09:31.789+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+aa630d67-b466-4f6a-9a04-fe5744954d20 水位计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-YWJ-JW 2019-09-04 15:40:23.381+08 2019-09-04 16:16:09.902+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+e61d9a9e-3d7f-4488-a60e-252b429dcb7b 振弦测量模块 4da26159-9a73-4068-a2b4-227aaac64a94 4da26159-9a73-4068-a2b4-227aaac64a94 4da26159-9a73-4068-a2b4-227aaac64a94 f ST-01ATN 2019-09-05 11:41:01.271+08 2019-09-05 11:41:01.271+08 \N 1
+dae07648-1adf-44d5-8a90-0519a5106a76 雨量计 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f AX-YL 安信标准协议 2019-12-17 14:54:12.808+08 2019-12-17 14:55:47.098+08 \N 4
+a0d7ec2d-24f8-4039-b175-8921c00c1f4f GPRS节点 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-GPRS-JD 2019-08-22 14:36:10.867+08 2020-04-05 12:08:10.599+08 005e2048-b7e8-4f7c-847f-e9918a66414d 1
+a8dd8956-f9ae-40d0-b207-8f5cf9669545 超声波风速风向传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-FSFXY-Z 2019-12-12 11:29:56.727+08 2019-12-18 16:30:25.604+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+9bd34a2c-73d9-4615-af4b-1d61a6fc81bd 振弦式土压力计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-TY10 配套飞尚多通道振弦采集仪 2019-02-25 15:43:06.969+08 2020-04-13 11:37:51.68+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+9bcce139-4a57-4c96-ba1f-914569011b77 振弦式土压力计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-TY08 配套飞尚多通道振弦采集仪 2019-02-25 15:41:59.706+08 2020-04-13 11:37:57.923+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+7f8fac16-3dbd-4d0a-bf38-322c5818e096 空气质量传感器(恶臭) d7992dd9-6356-40b2-ae7d-78cb5508b40c d7992dd9-6356-40b2-ae7d-78cb5508b40c d7992dd9-6356-40b2-ae7d-78cb5508b40c t U-SKY100(3) 2019-03-12 09:49:51.407+08 2019-07-08 09:59:01.565+08 ee936773-3935-4a6f-a962-2b0fd1a5c77e 4
+c809f621-a9ff-4922-aa0e-1bcadbfcb7e1 电压式倾角仪 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T-800 2019-02-26 16:47:57.156+08 2019-02-26 17:16:45.12+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+88bd8ad3-6ffd-4b0f-8768-085e0e59d92e 振弦式土压力计 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T-660 2019-02-26 16:30:15.669+08 2019-02-26 17:16:49.826+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+a504d969-ffb0-42c6-9edd-529d1d61a77c 振弦式钢索计 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T-960 2019-02-26 16:39:23.413+08 2019-02-26 17:16:54.383+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+7ac67279-f72c-4296-ba27-9b03b8c07c05 振弦式渗压计 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t T-610 2019-02-26 16:29:15.91+08 2019-02-26 17:16:59.705+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+848b15cb-6357-48eb-979d-a6398d05bd8c 一体化采集仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MicroPower 2019-03-15 16:27:38.689+08 2019-09-06 11:17:38.563+08 005e2048-b7e8-4f7c-847f-e9918a66414d 1
+1b0b94f1-5fde-428d-aa1c-242e8e024809 轴力计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-ZL30 配套 飞尚 多通道振弦采集仪 2019-02-25 14:14:48.82+08 2020-04-10 17:16:26.784+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+145c9d4f-4fc0-4441-a8c4-0f32b15f5018 固定杆式测斜仪(双轴) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-GGC01M 江西飞尚导轮式固定测斜仪 2019-02-25 17:37:03.955+08 2020-04-13 13:12:44.391+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+f7cf6cc3-3067-42c4-8d9d-85df26882451 压电式振动传感器 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-ZD-S10 2019-02-25 16:03:31.487+08 2019-02-25 17:48:30.705+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+934104cb-a134-4796-9c3d-52f0e8266fa3 多通道振动采集仪 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-iZD08 云振动采集仪 2019-02-25 16:10:34.001+08 2019-02-25 17:48:39.216+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 1
+f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4 盒式固定测斜仪(双轴) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-HGC01M Modbus 盒式固定测斜仪 2019-02-25 17:37:56.386+08 2020-08-05 14:16:22.724+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+3c72a231-83a6-4d92-88d3-d58e0660cef9 多通道振弦采集仪(32CH) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-F32M modbus 多通道振弦采集仪 2019-02-25 16:01:22.931+08 2020-04-08 16:10:37.722+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 1
+df22cddf-5a50-41f7-980a-0bbef6aeb763 振弦表面式应变计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-01-VK41 2019-03-15 14:35:35.861+08 2019-03-15 14:39:55.38+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+9ea89d82-49ea-480a-a90a-0b99290db919 风速仪 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t HQFS 2019-03-05 13:33:36.253+08 2019-03-05 14:20:23.956+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+49b8d21c-3486-496b-b17b-ccf195aaeb65 湿度计 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t HQSD 2019-03-05 13:25:13.297+08 2019-03-05 14:20:28.188+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+06f5aa07-d8ae-4621-9db2-278fb653ddcd 风向仪 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 t HQFX 2019-03-05 13:35:31.064+08 2019-03-05 14:26:08.615+08 0a638ade-14a7-4e31-b102-953f910425a8 4
+a97834b4-727b-42ad-9ce0-aede595a5727 孔隙水压计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-KY02 配套 多通道振弦采集仪 2019-02-25 11:41:29.878+08 2020-04-09 16:27:56.363+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+3b7ca159-32d0-4c74-8f84-591774636dc5 采集仪 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 t JTM32 2019-03-06 09:32:38.148+08 2019-03-07 13:55:58.651+08 69ff6b39-2d8c-443e-939d-f6c087588d22 1
+a0803ec9-69c4-41dd-9531-2de25b6274b3 智能网关 da122b7a-a86b-4e04-8e43-4a5b4978c8a4 da122b7a-a86b-4e04-8e43-4a5b4978c8a4 da122b7a-a86b-4e04-8e43-4a5b4978c8a4 f 378482 2019-03-07 11:24:52.821+08 2019-03-07 16:11:57.352+08 \N 1
+7128744b-0a8b-463f-b231-40f8862cba87 高精物位计 3bc407e4-dd38-4be8-9659-2f9aac78956a 3bc407e4-dd38-4be8-9659-2f9aac78956a 3bc407e4-dd38-4be8-9659-2f9aac78956a t BDXK-WY 2019-03-04 11:20:58.173+08 2019-03-11 17:06:09.042+08 db593efc-030f-4b47-b7e1-b49795714439 4
+30bfe302-d364-4325-be1f-7fef73afaf77 轴力计(三弦) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-ZL30-03 配套飞尚 多通道振弦采集仪 2019-02-25 13:43:01.994+08 2020-04-14 10:50:50.737+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+fde20cf0-6bb6-4987-8830-dec5aa5874f2 LVTD裂缝计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-WXCQ 2019-03-08 17:17:40.586+08 2019-04-04 11:02:08.627+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+ce1e7a12-8f26-4f77-8610-4871a40cfe98 静力水准仪 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-01-HLEV05 2019-03-15 14:36:32.756+08 2019-03-15 14:41:37.933+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+ad1ce5b5-24d5-4aa3-9125-bbb25ea24069 振动传感器 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-EXT-ZD 2019-03-15 17:00:45.449+08 2019-03-20 14:57:48.032+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+2f25fa6f-a99e-440e-ac0a-29ada5069d4f 采集仪(API) d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 t JTM32-API 2019-03-15 11:26:26.404+08 2019-03-17 17:46:40.217+08 69ff6b39-2d8c-443e-939d-f6c087588d22 1
+f2d1cabf-7888-4be1-9357-bf5052e5772c 设备1 b3d70ac0-822c-4382-a570-c1a96e482597 b3d70ac0-822c-4382-a570-c1a96e482597 b3d70ac0-822c-4382-a570-c1a96e482597 f xxxx-24 2019-03-19 10:11:54.281+08 2019-03-19 10:11:54.281+08 \N 4
+8ebd65bb-633a-43d4-880a-d916b11067ba 静力水准仪 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 f HJ-9411 2019-03-27 16:22:34.474+08 2019-03-27 16:22:34.474+08 \N 4
+00e79982-c3d7-4bef-a27d-050dc08eaf82 流量计 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e t CHLL 2019-03-27 10:19:53.291+08 2019-03-27 15:27:20.625+08 a78c9ea6-7625-4604-8b4c-15c694154389 4
+cbd0eeaa-e06e-4933-9394-86c48eacae95 测试_测斜仪 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f anxin_cx 2019-03-19 15:25:06.954+08 2019-03-19 15:25:06.954+08 \N 4
+4ff02b0c-e9de-4687-90b5-0e723ab835fe 测试_测斜仪 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f anxin_cx 2019-03-19 15:25:15.705+08 2019-03-19 15:25:15.705+08 \N 4
+e4a7eb69-0c5d-4b87-b1af-913b0220dea2 温湿度气压传感器 82999c5b-1550-42e6-82fb-054c97191ff7 82999c5b-1550-42e6-82fb-054c97191ff7 82999c5b-1550-42e6-82fb-054c97191ff7 f RY-WSY 2019-03-19 16:45:17.822+08 2019-03-19 16:45:17.822+08 \N 0
+18900e9a-1828-4d26-8966-51c1e5ebfa26 静力水准仪 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f BK-J03A 2019-03-20 15:26:27.794+08 2019-03-20 15:26:27.794+08 \N 4
+fc817231-7e3d-4952-b912-0855d2e90545 温度传感器 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f 1203 温度 2019-03-20 21:36:52.932+08 2019-03-20 21:36:52.932+08 \N 4
+6d7ee2b6-ee61-4933-9f14-9378592187da 热量计 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e t CHRL 2019-03-27 10:22:14.192+08 2019-03-27 15:27:25.619+08 a78c9ea6-7625-4604-8b4c-15c694154389 4
+3feb218e-5b82-496a-9f57-71be58552c0d 光栅类应变计 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 t ZX-FBG-S01A 2019-03-25 11:24:21.005+08 2019-04-09 10:55:46.022+08 e78edb7a-da87-4973-8c4b-ab7b13833072 4
+420a7807-dc95-4fe3-bfff-fd1db144ed8e 轴力计 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK—ZL01 2019-04-10 15:48:52.491+08 2019-04-10 16:08:28.47+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+9aa975c7-a3d4-42ec-a384-17d0425e602a 控制器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t USR-IO808-GR 2019-03-14 11:21:14.943+08 2019-03-26 10:43:10.033+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+360a9975-3171-4f12-b47a-6f57bdf76dfe 西门子PLC 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e t S7-200_SMART 2019-03-27 09:42:22.603+08 2019-03-27 15:27:05.541+08 a78c9ea6-7625-4604-8b4c-15c694154389 1
+248ab293-5e7c-41e5-835a-2978782081de 压力传感器 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e t CHYL 2019-03-27 09:45:06.489+08 2019-03-27 15:27:12.727+08 a78c9ea6-7625-4604-8b4c-15c694154389 4
+c3eaf904-6808-4fde-a795-474b0128fe5f 温度传感器 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e t CHWD 2019-03-27 10:17:10.449+08 2019-03-27 15:27:16.605+08 a78c9ea6-7625-4604-8b4c-15c694154389 4
+9078888c-628e-4b91-94f8-caaedcc9b640 24温度采集仪 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f RS485 2019-03-28 10:30:24.009+08 2019-03-28 10:30:24.009+08 \N 1
+044ef7b0-afed-464c-b3fb-8bbf7fa42023 aaa a83dd8eb-87e6-4594-9729-6d0783c1d6e3 a83dd8eb-87e6-4594-9729-6d0783c1d6e3 a83dd8eb-87e6-4594-9729-6d0783c1d6e3 f fwe gre 2019-03-29 16:40:02.698+08 2019-03-29 16:40:02.698+08 \N 1
+e6ddf9e3-cda3-4fcf-975a-a7b4f14a0a34 山东兴威物联 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f RS485 温度 2019-03-29 17:37:11.113+08 2019-03-29 17:37:11.113+08 \N 1
+bb3ec092-4644-42eb-93ba-f9ae9b4b6601 扬尘设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t PmVender_GDB_1001 2019-03-31 14:16:47.785+08 2019-04-01 14:36:22.872+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+3aef6480-e9f6-4b07-8ee4-dc0516520d72 广东江威重力变送器 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f RZ25 重力变送器 2019-04-01 14:38:39.906+08 2019-04-01 14:38:39.906+08 \N 4
+936ee644-5ea7-4d64-98d7-ff52cc50e113 山东江威静力水准仪 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f RZ370/1 静力水准仪 2019-04-01 15:38:01.338+08 2019-04-01 15:38:01.338+08 \N 4
+cecf35d0-533a-45cd-b740-42f93c4f3df2 扬尘采集设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f RS-ZSYC-M 2019-04-04 11:32:30.406+08 2019-04-04 11:33:04.661+08 \N 4
+db04dc7e-6a55-4050-92a8-c1a6e5c0dc9c 锚索计 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK—GJ18 2019-04-03 16:53:56.854+08 2019-04-18 14:27:12.964+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+7f81d1d0-150c-49d4-9b52-4eda0387c996 全站仪 2831da9e-1815-47e1-a77e-67843477a527 2831da9e-1815-47e1-a77e-67843477a527 2831da9e-1815-47e1-a77e-67843477a527 t TM50_0.5 2019-04-08 10:06:51.197+08 2019-04-24 14:59:55.701+08 cde1d1ef-6811-4c85-b365-c8dc7be87675 1
+b73a2e67-7654-49ce-890a-7c2dfec89a03 直角小棱镜 2831da9e-1815-47e1-a77e-67843477a527 2831da9e-1815-47e1-a77e-67843477a527 2831da9e-1815-47e1-a77e-67843477a527 t prism_L 2019-04-08 11:04:20.102+08 2019-04-24 10:10:47.758+08 cde1d1ef-6811-4c85-b365-c8dc7be87675 4
+954dabda-7fd8-456d-8d9a-bc7058d4e8ad 解调仪 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 t ZX-FP-C02-3 2019-03-22 10:33:16.419+08 2019-04-09 10:55:34.755+08 e78edb7a-da87-4973-8c4b-ab7b13833072 1
+2cea756f-0ed5-406d-88a5-b2c3b6ad9b6d 光栅类温度计 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 t ZX-FBG-T01A 2019-03-25 11:18:25.739+08 2019-04-09 10:55:42.769+08 e78edb7a-da87-4973-8c4b-ab7b13833072 4
+765f6712-b911-4681-9d31-ce9ee3a45702 通道 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 t ZX-FBG-TD 2019-03-25 11:32:57.573+08 2019-04-09 10:55:50.233+08 e78edb7a-da87-4973-8c4b-ab7b13833072 1
+87bb0352-924e-440f-abb0-2a42797d0eb0 钢筋计 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK—GJ02 2019-04-10 15:48:53.405+08 2019-04-10 16:20:21.401+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+74d6fefc-59a0-42a8-bd3e-aff394533e06 无线振动测斜仪 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f LRK-DZ622A 测斜 振动 2019-04-10 18:28:39.197+08 2019-04-10 18:28:39.197+08 \N 1
+53efa30f-f738-43ef-9600-0963b6b108fd 振弦采集仪(16通道) 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-ZC16 2019-04-03 14:48:59.277+08 2019-05-31 08:54:38.144+08 ef17730e-9732-4152-9aae-d996160e4d7e 1
+3027f2cf-70b8-4ff6-92ee-7432a8b26887 安全步距设备 aed14e79-005c-4916-afac-c1b60faeca1b aed14e79-005c-4916-afac-c1b60faeca1b aed14e79-005c-4916-afac-c1b60faeca1b t CT-SafeStep 2019-04-16 09:09:09.714+08 2019-04-16 09:14:29.792+08 2aa3d1c2-45fe-4f61-96a4-654d13cc4b34 4
+9922afa7-509c-4ee2-8cfa-094233cf6eb1 激光测距 aed14e79-005c-4916-afac-c1b60faeca1b aed14e79-005c-4916-afac-c1b60faeca1b aed14e79-005c-4916-afac-c1b60faeca1b t CT-Laser-C 2019-04-16 09:11:47.701+08 2019-04-16 09:14:34.171+08 2aa3d1c2-45fe-4f61-96a4-654d13cc4b34 4
+cc36cffd-a5ac-44e5-8fe7-c2ad64a3e55b 压电式振动传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f FS-ZD-SJQ 振动转声级FS-ZD-A01 2019-12-20 18:07:22.532+08 2019-12-20 18:11:04.073+08 \N 4
+f929d6c9-de63-4cb0-89f9-f9e7a22cbadb 压差式变形测量传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LTG-Y1000-Z 2019-04-18 18:47:42.207+08 2019-10-31 11:49:20.091+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+efdfb5bf-1488-40b5-825f-629d60ebe7f7 8通道采集仪 84b76f77-20bf-48ff-a6a1-f80965b63275 84b76f77-20bf-48ff-a6a1-f80965b63275 84b76f77-20bf-48ff-a6a1-f80965b63275 f ACT4238 采集仪 2019-04-18 15:29:49.997+08 2019-04-18 15:29:49.997+08 \N 1
+1b53fdfb-8040-4fff-a045-a0bd3ac61881 振弦式水位计 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MCU32-VP560 2018-09-11 15:50:20.314+08 2019-04-19 10:16:50.593+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+1649a4a7-d092-40c1-8217-dc2b8e2ecea0 文件上传设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-File-UpLoad 2019-04-17 15:07:58.421+08 2019-04-18 16:04:44.143+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+82e60098-d956-499c-97c8-810ba64a8589 C型激光测距 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 t CHT-Laser-C 2019-04-16 09:50:05.885+08 2019-04-19 10:44:31.58+08 5f2040a8-8da6-4f79-bcb6-9b2480beea45 4
+85e05ea0-94ca-4806-9393-78780b771a4b 安全步距设备 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 t CHT-SafeStep 2019-04-16 09:52:28.864+08 2019-04-19 10:44:33.962+08 5f2040a8-8da6-4f79-bcb6-9b2480beea45 4
+43bea8b9-c871-432f-90d5-414d9d907254 采集仪 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f VM301 2019-04-19 16:42:52.605+08 2019-05-15 10:26:09.311+08 \N 4
+89fb363a-19d1-4e23-a9af-b2a2c310eb4f 氨气设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-BDS-AQ 2019-04-18 11:02:51.777+08 2019-04-18 16:57:13.773+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+d5bf6f22-3d7a-4ab0-9043-1020e9516bcc 温湿度传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-BDS-WSD 2019-04-18 11:06:31.785+08 2019-04-18 16:57:19.025+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+6bc95aa6-88cd-4473-98fc-7f4a1d76fc4a 孔隙水压计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-UDAS-KY 2019-04-18 17:58:14.549+08 2019-04-18 18:04:16.959+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+752edd7f-ca25-4a19-bf4a-53a700f2556a 采集仪 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 t CHT-ACQ 2019-04-16 10:59:31.897+08 2019-04-19 09:20:15.902+08 5f2040a8-8da6-4f79-bcb6-9b2480beea45 1
+5d98962d-dbd8-4688-ae48-dbebdce861f6 智能型拉线式位移计 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 t YH02-K10 2019-04-22 13:13:08.886+08 2019-04-22 13:59:10.49+08 1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa 4
+9b0e1890-c539-43be-8907-1f2eeaa3e309 测试API设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f API_Test 2019-04-22 14:08:53.021+08 2019-04-22 14:08:53.021+08 \N 4
+4aac7755-6f82-41a7-adde-756a7548c7f4 光纤解调仪 9b82d18b-98eb-4042-bb16-f05b923a0688 9b82d18b-98eb-4042-bb16-f05b923a0688 9b82d18b-98eb-4042-bb16-f05b923a0688 t FBG-D3 2019-04-23 14:45:48.294+08 2019-04-24 10:06:48.173+08 77c8175d-d8bb-466e-a914-20957a0c6c49 1
+fb1aa362-5048-47df-a1b3-89bc55bfe786 静力水准仪 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 t Y25JLSZY 2019-04-23 14:22:13.657+08 2019-04-23 14:23:32.357+08 1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa 4
+272894c2-dcd9-4a14-8205-f1e9a093f3cd 结构应变计 9b82d18b-98eb-4042-bb16-f05b923a0688 9b82d18b-98eb-4042-bb16-f05b923a0688 9b82d18b-98eb-4042-bb16-f05b923a0688 t BGK-FBG-4000T 2019-04-23 15:05:42.784+08 2019-04-24 10:06:56.358+08 77c8175d-d8bb-466e-a914-20957a0c6c49 4
+2698c5d7-398d-41ad-bdea-68e26f77a6bd 疲劳传感器 9b82d18b-98eb-4042-bb16-f05b923a0688 9b82d18b-98eb-4042-bb16-f05b923a0688 9b82d18b-98eb-4042-bb16-f05b923a0688 t TXD-YF-015 2019-04-23 15:47:59.388+08 2019-04-24 10:06:59.89+08 77c8175d-d8bb-466e-a914-20957a0c6c49 4
+0ffa5291-87ea-4e05-b031-ef948c53b474 结构温度计 9b82d18b-98eb-4042-bb16-f05b923a0688 9b82d18b-98eb-4042-bb16-f05b923a0688 9b82d18b-98eb-4042-bb16-f05b923a0688 t BGK-FBG-4700S 2019-04-24 09:21:38.782+08 2019-04-24 17:08:21.145+08 77c8175d-d8bb-466e-a914-20957a0c6c49 4
+29a8cde9-51c6-4647-8153-de06449e2ba2 裂缝计 9b82d18b-98eb-4042-bb16-f05b923a0688 9b82d18b-98eb-4042-bb16-f05b923a0688 9b82d18b-98eb-4042-bb16-f05b923a0688 t BGK-FBG-4420T 2019-04-24 09:19:20.816+08 2019-04-24 17:08:16.058+08 77c8175d-d8bb-466e-a914-20957a0c6c49 4
+83960893-0d31-4f1e-a576-69a4e7bce94c 采集仪 a002a7f5-f9ea-42a5-83d0-5f63f88e3b87 a002a7f5-f9ea-42a5-83d0-5f63f88e3b87 a002a7f5-f9ea-42a5-83d0-5f63f88e3b87 t ZXY1016-t 2019-04-25 15:02:30.55+08 2019-04-29 15:20:15.535+08 05074f6f-1e7f-4d0d-a2dd-9548f9799fdf 1
+d59a244e-554e-478d-b874-b75dc0dff2b5 设备测试 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 t 1.0 2019-04-26 13:07:35.547+08 2019-04-26 13:16:25.354+08 8dbfb926-2572-4bb5-bab4-96aba1ea8589 2
+3a1c9f2b-76dc-4276-8e10-aba208fd1fc5 振弦式钢筋计 a002a7f5-f9ea-42a5-83d0-5f63f88e3b87 a002a7f5-f9ea-42a5-83d0-5f63f88e3b87 a002a7f5-f9ea-42a5-83d0-5f63f88e3b87 t GJJ-1010 2019-04-25 15:04:01.403+08 2019-04-29 15:20:19.27+08 05074f6f-1e7f-4d0d-a2dd-9548f9799fdf 4
+ef966a9a-d938-4526-af04-cee74ea9b600 倾斜仪 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t MI1600 直接挂DTU 2019-04-18 14:42:33.138+08 2019-05-13 15:23:04.405+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+75c932d0-2df0-4628-81dd-0e9c1f11ff60 压差式变形测量传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LTG-Y2000-Z 压差式变形测量传感器 2018-01-24 11:19:02.096+08 2019-06-14 15:31:13.022+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+51b66c98-7a13-42ce-9b80-4df528d01234 静力水准仪 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f AX-LTG 2019-12-23 10:30:52.202+08 2019-12-23 10:30:52.202+08 \N 4
+28463128-4e0e-4167-8aa6-3c6f5accc368 温度计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-T2 温度计 2019-04-28 11:28:46.19+08 2019-10-09 13:54:34.617+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+e66b2170-dac3-4a27-b9d2-46e8fe63f0ce 无线光纤光栅解调仪 b7a8e100-b8fb-4135-a1b5-00a91da6da3f b7a8e100-b8fb-4135-a1b5-00a91da6da3f b7a8e100-b8fb-4135-a1b5-00a91da6da3f f NZS-FBG-A02 2019-12-23 14:13:38.172+08 2019-12-23 14:13:38.172+08 \N 1
+98ae496a-649c-4719-b18f-705b32d4f545 危大工程光栅传感器 b7a8e100-b8fb-4135-a1b5-00a91da6da3f b7a8e100-b8fb-4135-a1b5-00a91da6da3f b7a8e100-b8fb-4135-a1b5-00a91da6da3f f 1 2019-12-23 14:17:09.71+08 2019-12-23 14:17:09.71+08 \N 4
+b5973739-2377-4164-9d35-d25da04d9d05 激光测距仪 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f AX-LRF 2019-12-23 14:42:47.819+08 2019-12-23 14:42:47.819+08 \N 4
+42fa6a20-85bd-4f18-93f4-2349e5c1e804 温湿度传感器 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f AX-WSD 2019-12-23 16:11:23.791+08 2019-12-23 16:11:23.791+08 \N 4
+ce8318eb-2d27-407d-9b33-95018458d60f 风速风向仪 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f AX-FSFX 2019-12-24 09:20:36.074+08 2019-12-24 09:20:36.074+08 \N 4
+75780bad-38e2-4dde-adbd-950bd075a1d2 轴力计 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK—ZL02A 2019-04-28 10:50:55.156+08 2019-07-17 16:31:27.828+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+a9dc9dd4-9a62-4dfa-968a-69e2c4472a0a 人流量监控设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t CS5i 2019-04-30 09:49:47.67+08 2019-05-07 09:17:16.246+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+d3c271ff-22cb-4938-8c5f-c63484107a38 应变计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t ST1 2019-04-28 11:24:32.85+08 2019-06-18 18:18:21.59+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+6daadb42-2ee7-41fa-a6bd-85d9c0d77383 钢筋计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-ST5 钢筋计 2019-04-28 11:27:08.984+08 2019-06-18 19:03:53.186+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 0
+4068ff34-b211-4386-b274-0a6b12f35b59 测缝计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-J2 2019-02-22 13:35:17.617+08 2019-06-11 15:26:59.411+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+d634c358-000d-4c53-8c4b-0f411b4a52c3 智能数据采集器 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-MICRO-MCU SOIL采集仪 2019-05-14 14:10:38.832+08 2019-06-11 15:02:49.379+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 1
+5a46e837-7b8f-4cef-9951-969680cb65db gateway a0524b8e-f69f-421e-b306-124dd37f4f1c a0524b8e-f69f-421e-b306-124dd37f4f1c a0524b8e-f69f-421e-b306-124dd37f4f1c f V1 2019-04-28 17:41:50.406+08 2019-05-09 09:31:50.791+08 \N 2
+dc1f2a7f-e0b1-4894-852c-6eaa5c66ef83 应变计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-ST4 应变计 2019-04-28 11:26:12.315+08 2019-06-18 18:18:37.92+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+9ac9f312-0f0e-45d4-8d00-8420be016826 王飞的测试应用 f44d0365-c02b-42b1-9ad8-89b9a0dc4f58 f44d0365-c02b-42b1-9ad8-89b9a0dc4f58 f44d0365-c02b-42b1-9ad8-89b9a0dc4f58 f 123 2019-05-06 10:14:28.45+08 2019-05-06 10:14:28.45+08 \N 4
+3f25f8df-8a52-4d2c-b6ea-714da8be3c00 咏为中精度倾角传感器 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f SCT726T-M X倾角 Y倾角 2019-04-26 15:57:34.676+08 2019-05-09 14:17:41.161+08 \N 4
+e907425b-f687-45f0-9e44-798f6c00968f 振弦传感器 19fa25f4-9ba9-4e93-9025-e67b34db9cf7 19fa25f4-9ba9-4e93-9025-e67b34db9cf7 19fa25f4-9ba9-4e93-9025-e67b34db9cf7 f sensor 2019-05-07 15:54:53.403+08 2019-05-07 16:48:10.497+08 \N 4
+0a9ddd56-9373-42fc-b426-17797eeee64a watt-hour-meter a0524b8e-f69f-421e-b306-124dd37f4f1c a0524b8e-f69f-421e-b306-124dd37f4f1c a0524b8e-f69f-421e-b306-124dd37f4f1c f 100A 2019-04-28 17:36:59.002+08 2019-05-22 13:13:59.478+08 \N 4
+dc3e2b45-f9db-4aec-993a-d8369918a67e 空气净化器 f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f K20 2020-09-21 09:55:15.994+08 2020-09-21 09:55:15.994+08 \N 4
+ef6476c9-709e-4afb-a4d9-57009ee3ecf5 MEMS倾角计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-C12-A-2 电压输出 2019-02-22 13:27:41.849+08 2019-06-11 17:47:00.039+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+dc3255a4-0fb9-4ab9-85cd-714e6c5d70d0 振弦采集仪(8通道) 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-ZC08 1-8通道接收频率,9-16接收温度 2019-04-29 15:49:13.013+08 2019-05-31 17:58:29.274+08 ef17730e-9732-4152-9aae-d996160e4d7e 1
+1c6ea7b5-ffd8-4e6c-b190-c2cbdbe65a17 temperature_sensor a0524b8e-f69f-421e-b306-124dd37f4f1c a0524b8e-f69f-421e-b306-124dd37f4f1c a0524b8e-f69f-421e-b306-124dd37f4f1c f V1 2019-05-08 17:53:13.468+08 2019-05-08 18:26:53.034+08 \N 4
+f753602f-9889-47cc-a42c-2905bdaab97e 位移传感器 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 t LFWY01 2019-05-09 09:58:07.883+08 2019-05-09 11:07:05.634+08 d4d2115f-fe6e-410d-9b82-2b21fa4fade1 4
+54e76b93-f8ed-407b-b112-ed4a85db50db 倾角传感器 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 t LFQJ01 设备主动上传 2019-05-09 10:06:14.136+08 2019-05-09 11:07:09.285+08 d4d2115f-fe6e-410d-9b82-2b21fa4fade1 4
+7802e3d3-ffbf-4146-954f-a67f1cbfb41c 位移传感器 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 t LFWY02 2019-05-09 17:23:15.191+08 2019-05-09 18:11:06.301+08 d4d2115f-fe6e-410d-9b82-2b21fa4fade1 4
+b8061f6d-fe6e-443d-bed9-8b4e7fb81a71 应变计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-ST3 应变计 2019-04-28 11:25:30.648+08 2019-06-18 18:18:32.219+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+6151fdf6-4bb4-466e-b727-56b68ebf43e1 载重 bda7431e-46ed-40b2-bf13-b511219a8fcb bda7431e-46ed-40b2-bf13-b511219a8fcb bda7431e-46ed-40b2-bf13-b511219a8fcb t HI-TRAC-TMU4 测重 2019-05-13 16:27:13.633+08 2019-05-14 09:45:31.295+08 fe723f98-2007-4786-8a13-7b8cf97e9fb0 4
+ff67a769-94ed-4f3d-b944-b1f4d4468eec 安全帽 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-SafeCap 2019-05-14 16:57:37.938+08 2019-05-16 18:02:39.905+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+ecad4b77-ab58-460f-8469-b89b3c77d796 2D_FROZEN a0524b8e-f69f-421e-b306-124dd37f4f1c a0524b8e-f69f-421e-b306-124dd37f4f1c a0524b8e-f69f-421e-b306-124dd37f4f1c f 1Door 2019-05-08 18:17:31.592+08 2019-05-18 22:25:37.8+08 \N 0
+0cbb0bb5-1c3c-4fc8-94a1-981c026350f8 土壤水分变送器 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 t DSW-T1 2019-05-13 11:18:59.475+08 2019-05-15 10:06:59.693+08 0c9fca00-5fd3-43ef-8264-09333066ff13 4
+65b11e66-836c-4898-bde7-46706a2f74af 倾角仪 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-Q01AD 2019-06-27 17:01:33.244+08 2019-09-09 14:47:53.885+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+d9b333ed-096a-405a-9c9a-905cd04d2368 振弦采集仪(16通道) c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t anxin-16 2019-06-05 10:58:32.277+08 2020-09-15 09:26:51.99+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 1
+7f382df2-35f7-4128-9276-d2a3a40d6547 云盒 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 t JC-T4 2019-05-30 11:20:53.226+08 2019-05-30 11:21:28.782+08 40f627af-dfd1-4cd2-9921-110d47d4461c 1
+4b8a42f4-db96-4d3d-937c-0e98cae45ea0 应变计 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 t LFZX001 集采集仪于一体 2019-06-06 14:15:52.928+08 2019-10-18 15:14:57.53+08 d4d2115f-fe6e-410d-9b82-2b21fa4fade1 4
+fd43ad33-b4b0-46a5-b48c-5a4fa76e0aed 振弦采集仪(8通道) c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t anxin-8 2019-06-05 10:43:13.765+08 2020-09-15 09:26:43.944+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 1
+290bae7d-a183-4af8-be82-963486855761 电阻式温度计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-WF760 2019-05-28 15:02:38.775+08 2019-05-29 15:29:52.625+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+82c4e869-135f-466b-af92-27b7979b1fd2 振弦式轴力计 e3714b5a-b240-4f8f-a8c3-9067a3fffb04 e3714b5a-b240-4f8f-a8c3-9067a3fffb04 e3714b5a-b240-4f8f-a8c3-9067a3fffb04 t JY-1040 河南新睿的项目 2019-05-15 10:48:06.5+08 2019-05-17 18:07:31.471+08 4151ce66-cea2-470e-b9d6-1a9915f98dc4 4
+82ec14e4-a0ee-4d21-9fcb-24cde7cf551b 卸料机 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-XLJ 2019-05-29 14:51:02.746+08 2019-06-03 09:24:46.471+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+d93ae98f-5dbc-45c3-81cf-8f9360a11684 test e4e6d844-eda4-4bd9-9572-069581fdf034 e4e6d844-eda4-4bd9-9572-069581fdf034 e4e6d844-eda4-4bd9-9572-069581fdf034 f 111 2019-05-22 16:00:03.709+08 2019-05-22 16:00:03.709+08 \N 0
+d8d4cee4-3e1d-4d43-8861-53ccd536112e 振弦采集仪(32通道) c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t anxin-32 2019-06-05 11:07:53.591+08 2020-09-14 10:49:15.442+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 1
+104df6e9-2d4e-49ac-b7e1-a6d5cc2ba0e1 倾角传感器 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK—Q01B 2019-05-30 13:47:48.525+08 2019-05-30 14:30:21.945+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+6474815f-e86c-4909-966f-5fb6efc5c674 单点式沉降计 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK—DC100 2019-05-15 10:32:01.136+08 2019-05-24 08:49:30.356+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+5a3bf41b-78ef-45fa-96e2-ac2a42767d71 智能数据采集器 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t DT85G-WS 2019-06-11 15:06:43.218+08 2019-12-04 11:31:29.351+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 2
+31c3b19c-2202-408e-ba8f-efd800be8801 陶瓷电容式静力水准仪 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t MCU32-CSL570 2019-06-03 11:50:03.926+08 2019-06-03 13:42:42.54+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+d38d0e7a-cf28-4180-b331-9b950cfb89fd 加速度传感器 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f AX-JSD 2019-12-24 10:40:55.034+08 2019-12-24 10:40:55.034+08 \N 4
+85e07675-26a2-435b-8ee9-6c790ffe7463 振弦采集仪(8通道) 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-ZC08w 1通道频率对应9通道温度 2019-05-31 18:01:12.152+08 2019-06-05 16:38:21.977+08 ef17730e-9732-4152-9aae-d996160e4d7e 1
+42fbfa5f-4ca7-4e1d-b42f-08f4f641657a 全温补高精度数字输出型双轴倾角传感器 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 t ACA626T-5 北京瑞芬 2018-01-16 10:21:41.69+08 2019-05-30 10:26:20.956+08 19a42196-a096-4d6a-84d1-67d7c3030605 4
+721eaa20-a7b1-457b-a5b3-f5eb9b313129 振弦采集仪(3通道) 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-ZC03 2019-05-22 10:38:30.96+08 2019-05-30 15:39:19.357+08 ef17730e-9732-4152-9aae-d996160e4d7e 1
+304a0d25-d131-4d28-9534-296b7df2adb3 表面应变计 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK—BY3000 2019-05-29 15:57:45.362+08 2019-06-04 17:35:49.094+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+b69e622c-7f6b-4539-8ff3-f3027cb3a592 智能数据采集器 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-D1 六通道 2019-05-23 13:53:19.234+08 2019-06-11 15:02:54.415+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 1
+9c72853f-96b7-41a6-ab9e-10eafbf22a10 磁致位移传感器 ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c t KYDM-LP3MR910-GC1500 2019-06-18 11:02:55.433+08 2019-06-20 10:23:25.876+08 b2cdf84b-2f7e-4c47-9132-a579b62a3926 0
+c06263f7-c818-41f4-949a-4a526770fa9b 土体位移计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-E7 2019-06-11 16:41:49.124+08 2019-06-18 19:02:45.483+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+57df002c-3fa7-4684-a2b3-f46f54b7f87b 钢索计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-ST6 2019-06-11 15:43:02.151+08 2019-06-18 19:02:29.487+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+f93393d2-0bfd-4685-b6d9-31287c466007 静力水准仪 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-W10-PD modbus 2019-06-11 16:14:17.077+08 2019-06-11 18:01:12.019+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+2142db9e-293b-43a9-9883-3d41391ba533 锚索计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-L2 2019-06-11 16:37:25.792+08 2019-06-18 19:02:39.915+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+c12a0cbf-c2fa-4f1e-a52e-e371df51e0fb 测缝计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-J2I 2019-06-11 15:59:09.828+08 2019-06-11 18:01:31.695+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+aaee1bcc-dde9-4cef-8fde-7c072b96eab5 液压计 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f AX-YY 2019-12-24 11:15:19.99+08 2019-12-24 11:15:19.99+08 \N 4
+958debc4-8460-4237-a960-d51a6a866071 MEMS倾角计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-C12D-B 2019-06-11 17:32:28.558+08 2019-06-11 17:59:07.509+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+14068f43-74c6-48e8-b004-29eefa28fd36 MEMS倾角计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-C12D-A-2 2019-06-11 17:28:58.604+08 2019-06-11 17:59:14.324+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+4f72b98e-690d-429f-9b64-ab8de1c41a0b MEMS倾角计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-C12G-1 2019-06-11 17:20:41.942+08 2019-06-11 17:59:25.636+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+964d519d-ec1b-4a4c-8a02-01402c99d348 测斜仪 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f AX-CX 2019-12-24 11:48:30.832+08 2019-12-24 11:48:30.832+08 \N 4
+d52023ca-77dc-4b31-941a-5cb6d2b1a297 MEMS倾角计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-C12D-A-1 modbus 2019-06-11 17:11:17.09+08 2019-10-09 15:09:27.441+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+67f6e3ca-2368-45ff-a678-53f942e71caa MEMS倾角计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-C12-A-1 2019-06-11 17:18:00.714+08 2019-06-11 17:59:50.617+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+2f885022-839d-4c38-ae7a-b4c9881ca394 测缝计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-J1 2019-06-11 15:55:27.346+08 2019-06-11 18:00:28.805+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+8b3a3d99-7016-4c26-b6b6-65b742fcfc8b 废气污染物传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f MS80-IR 2019-06-18 15:44:35.478+08 2019-06-18 15:44:35.478+08 \N 4
+7fae0d43-0664-4c19-9d35-db80a97b6da2 多点位移计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-E10 2019-06-11 16:42:42.385+08 2019-06-18 19:02:50.561+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+3636e235-3352-4944-8092-c0b68a659ef1 量水堰计 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-W10 2019-06-11 16:47:18.238+08 2019-06-18 19:03:13.509+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+acd9ad51-99a5-4b2c-98ce-0d2d6c4dd848 静力水准仪 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-W10-DM modbus 2019-06-11 16:18:28.987+08 2019-10-09 11:09:20.539+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+91fc5de6-ad9d-47e3-ace2-1c2bd04979e5 TCP测试设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f TCP_DeviceDemp 2019-06-19 13:58:50.98+08 2019-06-19 13:58:50.98+08 \N 4
+4657f5dd-e39e-4be0-bc95-833443066096 固定测斜仪 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-X01AD 2019-06-27 17:34:29.062+08 2019-09-09 14:47:56.351+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+c8c925b5-d496-4eb8-a0c7-189ce391ff1a 智能数据传输模块 38913139-1273-4b5a-9155-e4aff0fc89ee 38913139-1273-4b5a-9155-e4aff0fc89ee 38913139-1273-4b5a-9155-e4aff0fc89ee t SOUTH-DCS4 2019-06-14 11:20:06.165+08 2020-06-15 10:10:17.931+08 73386ae5-ef81-46d7-97d1-617a84709958 1
+b10f2486-b1e8-48d6-8683-216a40bcb3bb 倾角计 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN630 2019-06-20 09:22:50.959+08 2019-06-21 16:29:46.955+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+5b797de0-bd75-4cc6-9bb7-4811869ba7d3 数字式自动化采集仪 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN-MICRO-32D 2019-06-20 16:55:24.365+08 2019-06-21 16:29:51.728+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 1
+3d52e349-bf19-46d5-bb7e-f1f533d10190 大气质量监测仪 6879ee09-86fe-48d2-a3ff-bd5395d66a27 6879ee09-86fe-48d2-a3ff-bd5395d66a27 6879ee09-86fe-48d2-a3ff-bd5395d66a27 t DZ-IGASQ 2019-06-25 11:39:02.375+08 2019-06-25 12:00:16.488+08 3f71a23d-2762-47d5-8d94-12f9671d4b53 4
+239fdc2a-bd0a-4cd6-b0c4-f7371f99f620 23 d71ba443-4232-4479-a2d3-2da5387cab6b d71ba443-4232-4479-a2d3-2da5387cab6b d71ba443-4232-4479-a2d3-2da5387cab6b f 22323 2019-06-25 15:49:19.305+08 2019-06-25 15:49:19.305+08 \N 1
+f41380a3-bc12-4229-8b46-67472fd5d9b3 光栅光纤解调仪 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-FBG-8600 2019-06-27 09:35:12.059+08 2019-06-29 15:24:59.178+08 b28ef84f-ad39-4657-8465-7968e542bdcd 1
+e8b1dd32-dd34-4923-a91d-e21f81210749 恶臭微型气象站 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t MS80-EC 2019-06-18 15:48:02.195+08 2019-07-17 15:32:42.287+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+4b13a538-ac93-4bc0-8515-4181c57b8650 光电光栅埋入式应变计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK–FBG–4000T 2019-06-27 09:35:21.01+08 2019-06-29 15:25:01.582+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+1c182e32-a4cb-4882-991a-be791c200d73 激光测距仪 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 t GXLMXX 武汉承拓电子科技有限公司激光测距仪 2019-06-27 13:03:58.338+08 2019-06-27 13:05:00.181+08 5f2040a8-8da6-4f79-bcb6-9b2480beea45 4
+db69fe15-3a1d-46c9-9e21-5bef4ff4e964 位移计 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-LW01A 2019-06-27 14:07:45.225+08 2019-06-28 15:51:56.052+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+32a78a97-fea6-477a-9cfd-7f512d81b40c 位移计 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-LF01A 2019-06-26 11:57:22.675+08 2019-06-28 15:51:59.517+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+9f8addd9-3d2e-434c-bc28-e73322276c7a 虚拟DTU 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t GK-V-WG 2019-06-27 09:35:05.694+08 2019-06-29 15:24:56.681+08 b28ef84f-ad39-4657-8465-7968e542bdcd 1
+aa852395-17c0-4ccf-a911-c8090dd6f578 应变计 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f AX-YB 2019-12-24 16:23:58.885+08 2019-12-24 16:23:58.885+08 \N 4
+54335927-f86b-44bd-aebe-f07fc9cddaed DTU c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t F2A16 2019-07-08 18:21:40.557+08 2019-07-25 09:52:42.396+08 cfd55b15-fe53-4c95-87a6-daddbc4fb638 0
+35ce9dd7-8476-4933-8a0a-27ada0e8ddf0 称重传感器 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-CZ05 2019-06-27 14:28:06.355+08 2019-06-28 15:51:52.517+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+193aabad-c6d8-4ec6-8ca5-df2c25ae71e2 磁致式静力水准仪 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-J02AD 2019-06-27 15:43:13.185+08 2019-06-28 15:52:34.148+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+d1d8105f-3b3d-4c89-a378-2e76afbb6f36 光电光栅裂缝计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK–FBG–4420–12.5 2019-06-27 09:35:29.124+08 2019-06-29 15:25:04.228+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+f25dac37-cd4c-4f51-b8ff-1d5d051fb21e 激光测距仪 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-JC01A 2019-06-28 09:51:38.273+08 2019-07-02 18:13:33.351+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+0df71d00-3d48-44a5-9c6f-8cceae090b0d 倾角仪 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN-630 2019-06-28 14:47:16.369+08 2019-08-02 15:58:17.239+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+4fa8750d-807d-4c0c-9526-2662418f6f2f 表面式钢弦应变传感器 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c t JMZX-212 接基康光电光栅采集仪 2019-07-09 15:10:11.699+08 2019-07-12 14:28:05.839+08 941c9c57-031c-4e4c-9a2b-5e544e387274 4
+7b879c12-2bc2-4ff7-a2ba-b730169c30c9 Zigbee Temperature f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f 1.0.0 Zibee Temperature Sensor by iOTA 2019-07-06 17:22:08.727+08 2019-07-15 10:43:51.162+08 \N 4
+64af86ba-2ede-48c5-b410-7e40264cdd8a iOTA Power Meter f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f 1.0.0 3 phase power meter. 2019-07-24 17:41:18.522+08 2019-08-06 11:51:43.943+08 \N 4
+6d2dad31-9715-4522-a382-9b1b99f9bebc 222 d71ba443-4232-4479-a2d3-2da5387cab6b d71ba443-4232-4479-a2d3-2da5387cab6b d71ba443-4232-4479-a2d3-2da5387cab6b f 23232 2019-07-22 10:33:56.597+08 2019-07-22 10:33:56.597+08 \N 4
+c2508e96-b2cc-4a5f-8015-aa9492a11193 光栅光纤采集仪 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-Micro40 2019-07-09 15:05:43.53+08 2019-07-09 17:28:22.938+08 b28ef84f-ad39-4657-8465-7968e542bdcd 1
+676c48ff-13c3-426f-9871-989570d76ef9 流量计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LLJ100 2019-07-09 15:00:57.803+08 2019-07-10 11:17:03.549+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+151950ee-2a96-4cb7-a2c7-8b8e15dcae36 3 Door Chill f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f 1.0.0 Chill with 3 door sensors and 1 temperature sensor. 2019-07-15 14:04:02.914+08 2019-07-15 14:32:48.772+08 \N 4
+df281eec-f674-4f68-bd65-ed56abf4f20c 单轴固定倾斜仪 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-MCU-4R-DZ 2019-07-09 08:53:49.429+08 2019-07-12 11:25:49.089+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+d926295e-4fda-4948-a719-bf6e04d96ddb iOTA Zigbee Edge f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f 1.0.0 Zigbee to MQTT Edge 2019-07-06 16:53:20.932+08 2019-07-15 11:54:00.647+08 \N 1
+7b8591c6-00a5-4a8f-9da0-f325fc60e8fa 2 Door Freezer f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f 1.0.0 Freezer with 2 door sensors and 1 temperature sensor. 2019-07-15 14:31:13.666+08 2019-07-15 14:33:16.044+08 \N 4
+de5f1899-8b36-4792-b34f-44a6f7748a86 温湿度传感器 736d5c22-d6ac-4577-9782-0f95345ea1d5 736d5c22-d6ac-4577-9782-0f95345ea1d5 736d5c22-d6ac-4577-9782-0f95345ea1d5 t huananws 2019-07-03 11:29:35.852+08 2019-07-16 15:43:22.654+08 4f42d31f-9c35-41b4-a21a-96b2e2e24619 4
+a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 空气采集仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f FS-oxy-agentl 2019-07-17 14:29:44.524+08 2019-07-17 14:29:44.524+08 \N 4
+68885fd4-0280-410a-bf22-3afadec546f2 高精度压力式水位计 802a6ad5-5ee7-4234-8c91-32aa074a0685 802a6ad5-5ee7-4234-8c91-32aa074a0685 802a6ad5-5ee7-4234-8c91-32aa074a0685 t HR8003 2019-07-22 16:03:30+08 2019-07-22 16:14:18.094+08 01f46e8d-4d8a-4474-8860-b7f71abb616f 4
+d3d5de96-da53-4adb-b8f8-29d0e0c8209c 锚索计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-4900 2019-07-16 17:46:08.879+08 2019-07-18 08:59:35.752+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+6def140f-5189-490c-ab4c-57e84dfcd3bf 翻斗式雨量计 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t GT-Ra1 2018-04-03 09:04:11.219+08 2019-07-19 16:46:31.306+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+a83dcd92-561e-40ba-b71c-b6d062d2bcb3 加速度传感器 736d5c22-d6ac-4577-9782-0f95345ea1d5 736d5c22-d6ac-4577-9782-0f95345ea1d5 736d5c22-d6ac-4577-9782-0f95345ea1d5 t PRE-1 2019-07-23 09:33:53.796+08 2019-07-23 11:23:52.462+08 4f42d31f-9c35-41b4-a21a-96b2e2e24619 4
+8830f3b8-1be3-48ae-b1d0-8a9583cf4a18 压力传感器 736d5c22-d6ac-4577-9782-0f95345ea1d5 736d5c22-d6ac-4577-9782-0f95345ea1d5 736d5c22-d6ac-4577-9782-0f95345ea1d5 t ACC-1 2019-07-23 11:13:52.723+08 2019-07-23 11:23:56.622+08 4f42d31f-9c35-41b4-a21a-96b2e2e24619 4
+433dc632-5b76-47eb-8a4f-eb40b4ba71bb 采集仪 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d t HS-IOT102 2019-07-03 11:17:20.922+08 2019-08-01 11:12:25.898+08 10c8af19-c2ad-4e25-be28-63f5a359a41c 1
+6980d68e-b6b4-4ab2-a048-042672a46cef iOTA Zigbee Router f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f 1.0.0 Zigbee Router by iOTA 2019-07-06 16:55:42.73+08 2019-08-06 11:52:16.871+08 \N 4
+390e46cc-b69d-4966-89f4-d305afdd4649 光电感烟火灾探测报警器 4a675a7d-e35c-478e-b8f1-ae01437c8281 4a675a7d-e35c-478e-b8f1-ae01437c8281 4a675a7d-e35c-478e-b8f1-ae01437c8281 t RS-YG-N01 2019-07-31 10:14:14.838+08 2019-07-31 10:23:14.385+08 82e912a1-10ca-41af-ad56-79cc088ef375 4
+ce76608b-0e66-4498-b079-51aa9f03c950 倾角计 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d t hs-QJJ 2019-07-31 16:04:11.13+08 2019-08-01 11:12:29.484+08 10c8af19-c2ad-4e25-be28-63f5a359a41c 4
+70cf173e-f529-4704-805e-193f1a6478cc 物联网传感器 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d t HS-100 2019-07-26 11:18:48.457+08 2019-08-01 11:36:21.511+08 10c8af19-c2ad-4e25-be28-63f5a359a41c 4
+79d3e66b-d0ad-4c0f-b724-11eca0d0c0cb 投入式水位计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-TRS-XX-Z 2019-12-11 15:50:46.303+08 2019-12-25 14:14:08.935+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+f0c82197-9e9a-42f2-a4e2-541c52deff52 智能图像测距仪 3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c 3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c 3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c t HT-12MPF30I3F 2019-08-07 10:26:40.97+08 2019-08-13 10:35:03.972+08 dc3110a0-e9c9-41ee-aa3e-417b06a4a8d8 1
+d77b7e20-7877-47dc-aef4-37a663bac660 振弦式弧焊型应变计 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 t BGK-4000 配套 基康 (振弦)自动化数据采集仪 2018-01-05 10:51:34.738+08 2019-08-12 17:18:58.298+08 b28ef84f-ad39-4657-8465-7968e542bdcd 4
+1c7ee1c6-3d99-4236-834f-6e0746c0f69f 采集仪 6c3cbbd8-b774-4955-897d-3333586385c6 6c3cbbd8-b774-4955-897d-3333586385c6 6c3cbbd8-b774-4955-897d-3333586385c6 t TST-001 2019-08-05 18:14:48.648+08 2019-08-05 18:17:08.843+08 396c7a87-c01f-4fc0-84bb-813f5525e16a 1
+077e62b4-27da-47aa-846d-3d9169a8a895 虚拟DTU 6c3cbbd8-b774-4955-897d-3333586385c6 6c3cbbd8-b774-4955-897d-3333586385c6 6c3cbbd8-b774-4955-897d-3333586385c6 t TST-VW 2019-08-05 18:12:12.123+08 2019-08-06 11:19:22.428+08 396c7a87-c01f-4fc0-84bb-813f5525e16a 1
+01da29ac-f803-4381-ae7f-28264effac4f 2 Door Chill f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f 1.0.0 Chill with 2 door sensors and 1 temperature sensor. 2019-07-15 13:27:37.546+08 2019-08-06 11:52:42.236+08 \N 4
+df7ff0f8-b92c-4856-a1af-bf3244a8610a 土壤含水计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-TYHS 2019-08-06 11:00:53.83+08 2019-08-06 13:24:49.606+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+bfe0979a-c0e4-4430-89d3-5fbe86568640 GPRS8通道节点 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t GPRS-JD-Eight 2019-08-07 10:40:39.025+08 2019-08-07 11:01:14.571+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+bff19d80-ce20-4c3d-b158-df091a1fb5ac LVDT裂缝计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LF50-X LVDT裂缝计 2018-05-16 17:44:54.87+08 2019-12-26 13:53:20.109+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+8e44219e-9d4e-40ed-85b7-85dd24f8e821 高支模采集仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GZMCJY-HTTP 2019-08-08 15:55:26.52+08 2019-08-09 09:02:38.405+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+3758c306-d352-4ff8-b9ef-470a58efa0a4 iOTA Edge e199a753-2b5e-4d34-bd12-d76c9afe47d3 e199a753-2b5e-4d34-bd12-d76c9afe47d3 e199a753-2b5e-4d34-bd12-d76c9afe47d3 f 1.0 2019-08-09 13:11:50.732+08 2019-08-09 13:11:50.732+08 \N 0
+d6189068-bb18-4c68-a359-8e3139ab22e5 分布式云振动网关 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-iFWL-VWG 2019-08-22 09:52:17.806+08 2019-12-27 15:04:56.291+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 1
+9de2769d-cd81-43c4-ae6d-82f4cb9431de 风速风向传感器 e54b85b0-151e-4b74-b360-a8ae65addd46 e54b85b0-151e-4b74-b360-a8ae65addd46 e54b85b0-151e-4b74-b360-a8ae65addd46 t EC-A3 2019-08-08 08:57:43.005+08 2019-08-20 15:16:09.105+08 05ef6403-9f87-4092-8b09-be1cfc2f9369 4
+e257dc56-f70f-4ba8-b653-c5d047f9edba 雨量计 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-YL01 2019-08-12 09:55:16.271+08 2019-08-12 11:53:13.337+08 ef17730e-9732-4152-9aae-d996160e4d7e 4
+f75a7b9a-2288-4f05-b3ec-5f17a297e53c 振弦采集仪(单通道) 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d t BK-ZC01 2019-08-01 15:00:23.346+08 2019-08-26 11:02:18.852+08 ef17730e-9732-4152-9aae-d996160e4d7e 1
+52c7f175-bdd6-4c4c-948d-aa2a7868cd82 雨量计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-YLJ-Z 2019-12-11 10:58:32.077+08 2019-12-27 15:32:30.923+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+53070eae-7839-46df-9492-f1b4c0b0b101 静力水准仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-JLSZ-30-V1.00 2019-06-06 17:24:55.44+08 2019-08-12 17:32:50.839+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+f49b431e-9069-47ec-a493-fd3c45eed27a 温度传感器 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN-200D 2019-12-30 13:30:51.462+08 2019-12-30 13:46:38.885+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+00576fa4-94c0-4ef1-b26c-189142d5bdea 数据采集仪 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-SI-MICRO 2020-03-19 13:24:27.248+08 2020-03-31 17:01:56.973+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 1
+47de1028-1b35-4a17-b78e-f66178ecb4e6 多维度变形测量系统 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-SL 2020-03-23 13:05:09.158+08 2020-03-31 17:02:01.186+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+fe0f0fce-4a90-4c6a-bd8a-26a48e5808e4 固定式甲苯检测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ES10B10-C7H8 2020-01-14 14:12:06.469+08 2020-01-15 13:51:02.995+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+84deac79-cd1d-4320-bcc6-3a0cdd4451da 轴力计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-ZL10 2018-04-16 11:54:59.719+08 2019-08-22 11:08:30.85+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+7f76a800-a32e-483a-a948-919fc9e7d075 孔隙水压计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-KY06C 工讯科技(深圳)有限公司 2018-04-08 14:06:27.112+08 2020-03-13 18:40:05.755+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+3aba791d-d6b2-4175-bb20-109f210f4065 振弦式土压力计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-TY08 振弦式土压力计 2018-03-26 11:43:22.853+08 2020-03-13 18:41:10.849+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+df68d6a9-c963-4bc4-a122-332e3d1435ac 轴力计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-ZL20 2018-04-16 15:46:07.714+08 2019-08-13 09:45:03.576+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+20ff998d-3014-4f62-ad12-37b56883c435 轴力计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-ZL40 2018-04-16 15:46:12.359+08 2019-08-13 09:45:05.836+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+c60cc02d-8c37-447a-9f9d-947aa66b7f39 轴力计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-ZL30 2018-04-16 15:46:07.872+08 2019-08-13 09:45:08.521+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+2ea1c0ff-9d04-4a29-addb-ceaf8b4c1744 温度传感器 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-WD120T 2019-06-21 13:52:33.001+08 2020-03-16 15:17:35.907+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17 轴力计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-ZL60 2018-07-19 09:35:56.538+08 2019-08-13 09:45:13.405+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+8fcb81d8-34ce-41b8-93c9-69d15060fa40 轴力计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-ZL50 2018-07-19 09:35:55.136+08 2019-08-22 11:26:44.545+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+e600502e-b2ff-466a-9fa6-b9e9e554647c 水位计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-YWJ-JW-MP 2019-09-04 15:48:38.122+08 2019-09-09 16:12:25.098+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+42eb2303-14bd-4431-9ca6-d5b8b2590d1d 静力水准仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-JLSZ-V1.00 2019-09-10 16:52:37.733+08 2019-09-11 11:51:41.801+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+1131f328-b9a1-4361-beae-547a1acb032d DCS d41427b1-5907-4063-88c6-422f4f478d1f d41427b1-5907-4063-88c6-422f4f478d1f d41427b1-5907-4063-88c6-422f4f478d1f f 101 2020-03-20 10:56:08.934+08 2020-03-20 10:56:08.934+08 \N 1
+c730d30c-6a9d-4e3e-b347-7dfbe40a217d 粉尘浓度监测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GDJCY-FC 2020-03-23 16:30:30.292+08 2020-03-23 16:31:56.802+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+ca6af9e3-f1dc-4992-8029-d0e438ef99b5 钢筋计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-GJ22 正值是张拉力,负值是承压力 2018-03-26 11:30:25.42+08 2019-09-16 14:01:45.67+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+ec7b0da8-24a8-48ad-b64a-0ea416189d8a 振弦采集仪 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN-MICRO-32 2019-06-24 16:49:45.119+08 2020-05-14 11:41:40.245+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 1
+0b09cbd9-3881-4b4a-8910-0e8730d5d935 钢筋计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-GJ25 正值是张拉力,负值是承压力 2018-03-26 11:35:22.719+08 2020-06-15 21:05:46.152+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+e92738ba-66bf-4ec9-85c5-c1f2b4d7780e GNSS ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GNSS-RTU 2020-03-12 15:37:30.912+08 2021-02-19 08:50:05.615+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+50fc0df9-2b02-445b-b04e-17209e8c69ee 温度计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-WD 2019-09-25 11:24:05.275+08 2019-09-26 11:37:41.036+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+f29e4bb2-0e42-4016-b27e-f2377c115ff1 水稳应变计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-YB-C 2019-09-25 17:25:19.267+08 2019-09-26 11:37:51.532+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+f535897b-dc69-4835-b0d7-b4a6062db938 竖向应变计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-YB-AV 2019-09-25 13:51:38.081+08 2019-09-26 11:38:06.317+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+c209cbd1-8662-42e5-81d2-6cba239aa394 (振弦)自动采集系统 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f BK-ZXC01A 2019-09-23 14:19:34.126+08 2019-09-23 14:19:34.126+08 \N 1
+73ac8e46-173b-4f23-bb89-edd506496e34 混凝土应变计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-YB-SC 2019-09-25 11:54:59.641+08 2019-09-26 11:38:08.748+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+6225c8bb-1497-4354-ad28-e5eb698de9f0 振弦采集仪 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t NB-IOT-4 复制上海建工 2019-09-19 09:36:03.227+08 2019-09-23 14:47:29.482+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 1
+da5f4309-1696-4853-94ef-f11b9d0602e0 数码型埋入式应变计 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f YKMS-1157I 2019-09-24 11:35:39.622+08 2019-09-24 11:35:39.622+08 \N 4
+59e0e84c-3ab8-485a-a6fc-d880a79b296a 数码型表面式应变计 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f YKMS-1140I 2019-09-24 11:35:42.165+08 2019-09-24 11:38:09.03+08 \N 4
+b20e46ed-a619-476a-9c50-88e1b8ea3697 数码温度型埋入式应变计 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f YKMS-1157IT 2019-09-24 11:44:07.126+08 2019-09-24 11:44:07.126+08 \N 4
+4ccb1624-a210-4672-9951-0dbf335dcdb1 数码温度型表面式应变计 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f YKMS-1140IT 2019-09-24 11:49:24.117+08 2019-09-24 11:49:24.117+08 \N 4
+9aa93498-820e-4fc6-a288-5b2274fb9246 分布式智能索具云采集系统 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-iFWL-SJWG-V1.10 索具云网关 2018-08-28 18:06:12.379+08 2019-09-24 11:51:03.459+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+37bc2c29-264c-4366-8fe1-9c2984702b94 土压力计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-TYL-FW 2019-09-25 10:49:31.374+08 2019-09-26 11:37:27.927+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+5102e0bc-4778-43b6-80d3-fd71e4032088 沥青应变计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-YB-A 2019-09-25 11:51:56.952+08 2019-09-26 11:38:11.042+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+dc1bdab2-ae0f-4ecc-8ce2-86d40ed2d08c 梁式测斜仪 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC-716TL 无锡咏为SCT716T-30-485(单轴) 2019-09-29 10:32:53.714+08 2019-10-15 14:32:41.604+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 4
+569fbb47-7ddc-4dd9-a1d0-e9e15d4ac448 停车场管理设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t BS_Pproperty 2019-09-29 14:37:47.009+08 2019-11-01 14:26:34.382+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+f190bf5a-78ab-4963-aac1-2fda921f2507 采集单元 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC-T420 采集单元-T420(16通道) 2019-09-29 16:05:37.72+08 2019-10-15 14:32:38.62+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 1
+a4e6dddc-930c-4704-9c93-9a8d78da81cb EC-1型风速风向仪 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC-FSX 2019-09-29 10:34:35.294+08 2019-10-10 16:51:02.166+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 4
+c96dced7-2915-4087-9ba5-b6f9bdc35f89 雨量计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-YLJ-D 2019-09-29 15:43:10.877+08 2019-09-29 16:08:01.979+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+594ffc3d-f245-4a5e-8843-9448105cb86d 温湿度传感器 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC-WS301 2019-09-29 10:41:59.462+08 2019-10-10 16:50:57.174+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 4
+a47565e1-92e5-41e9-ba98-79a93065f0ee 数字型双轴倾角计 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC-716T 无锡咏为SCT716T-30-485(双轴) 2019-09-29 10:33:47.166+08 2019-10-16 09:13:31.923+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 4
+6cb2c0f8-0c45-42e6-97ca-56d97a4a3484 路灯 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LED220W 2019-10-09 14:19:59.803+08 2019-10-23 09:52:40.466+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+8dc6a5c3-3f5b-40a8-9a90-d6b7b2cae471 钢筋计 56c7bc15-9ef6-4a82-984f-27e061f13a51 56c7bc15-9ef6-4a82-984f-27e061f13a51 56c7bc15-9ef6-4a82-984f-27e061f13a51 t DH001 2019-10-09 13:09:24.407+08 2019-10-09 13:12:27.74+08 06a9522a-1277-41df-a73c-54910c8bddd8 4
+150f2029-8823-45cf-813a-4a6a3e427d2f 新总线型采集模块1 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c t JMJK-II1 这个只接静力水准仪\njima-jl,因为数据2是一直为0 2019-10-08 17:01:20.284+08 2019-10-14 16:04:37.268+08 941c9c57-031c-4e4c-9a2b-5e544e387274 1
+66d2c15b-394a-4b84-b7d3-b991be41d9b0 静力水准仪 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c t JMYC-6210AD 这个接新总线型采集模块1 2019-10-08 16:12:15.888+08 2019-10-21 14:16:46.22+08 941c9c57-031c-4e4c-9a2b-5e544e387274 4
+01a43d23-84c6-4e78-bf39-7ed3a6383a88 钢弦式数据采集仪 56c7bc15-9ef6-4a82-984f-27e061f13a51 56c7bc15-9ef6-4a82-984f-27e061f13a51 56c7bc15-9ef6-4a82-984f-27e061f13a51 t DH8221 2019-09-30 09:56:31.659+08 2019-10-09 16:10:46.294+08 06a9522a-1277-41df-a73c-54910c8bddd8 1
+2ea41890-89c4-4569-89ab-df3b02dc16eb 轴力计 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t VRC 2019-10-23 10:16:21.715+08 2019-10-23 10:19:18.791+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+eaca25fa-f0bb-45cc-a5e0-59ba71654987 金码采集仪 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f ceshi 2019-10-10 09:55:12.712+08 2019-10-10 09:55:12.712+08 \N 1
+673195ba-381a-4dea-93e1-4f65f4d84079 高温温度传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-WD300 2019-10-10 10:48:36.493+08 2019-10-10 10:59:56.14+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+389a8b42-097c-411c-b534-0666e61c7842 压电式振动传感器 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-ZD-S10 2019-10-24 11:51:03.266+08 2019-10-24 11:51:24.743+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+c560df92-8e02-480d-8646-a66f98cc2aff 测缝计 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 t VWJ 2019-10-14 09:47:26.056+08 2019-10-14 11:41:29.241+08 4f3d93c3-5322-4bef-b358-e98b1589874d 4
+cc82fda3-8669-4810-a87a-ff57a55a3de6 无应力计 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 t VWS-10W 2019-10-14 09:49:18.018+08 2019-10-14 11:41:32.487+08 4f3d93c3-5322-4bef-b358-e98b1589874d 4
+b0c1da1a-0945-4edb-9f17-e9b845030888 锚杆应力计 a59371d0-7a5c-473a-83f2-41b31b9096e1 a59371d0-7a5c-473a-83f2-41b31b9096e1 a59371d0-7a5c-473a-83f2-41b31b9096e1 t SDG 2019-10-22 13:45:08.961+08 2019-10-24 10:10:18.359+08 ced3128b-5650-474d-99ae-4496d3d0ea97 4
+2095c53d-9927-4d63-b46b-03de0fd778e0 表面应变计 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN-500 2019-12-30 15:57:01.749+08 2019-12-31 09:19:41.623+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+1d22d353-6d39-4a84-bd17-aef0bc6f32f8 锚索计 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN-550 2019-12-30 15:59:09.731+08 2019-12-31 09:20:43.353+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+109b7349-2bb0-4859-8c1a-0c7630cbd11f 位移计 a59371d0-7a5c-473a-83f2-41b31b9096e1 a59371d0-7a5c-473a-83f2-41b31b9096e1 a59371d0-7a5c-473a-83f2-41b31b9096e1 t SDW 2019-10-22 13:48:51.927+08 2019-10-24 10:10:22.385+08 ced3128b-5650-474d-99ae-4496d3d0ea97 4
+a64fdbc7-36d7-49d9-8969-9040111aee6a 压电式振动传感器 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-ZD-A01 2019-10-24 11:47:52.601+08 2019-10-24 11:51:27.963+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+b13c8811-3051-46d5-87e2-d1bbbc7853f2 投放记录设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ZFL-240L-Record 2019-10-18 16:29:31.389+08 2019-10-18 16:29:31.389+08 \N 4
+a8607ea4-e6db-4dc6-9e64-3e8db3628ba0 位移计 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c t JMDL-4910A 接到综合采集模块下 2019-10-20 16:04:32.843+08 2019-10-21 15:24:48.802+08 941c9c57-031c-4e4c-9a2b-5e544e387274 4
+f46aa0c4-ed9b-4991-8fa8-ea4c884f5c35 异物侵限智能监测终端 3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c 3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c 3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c t H-C8R7-100 2019-10-22 14:47:29.624+08 2019-10-23 16:10:31.818+08 dc3110a0-e9c9-41ee-aa3e-417b06a4a8d8 0
+1dcd0084-9a2d-43ef-9b10-1e8305ce8b06 NB无线烟雾报警器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t HM-633PH-NB 2019-10-14 16:03:45.915+08 2019-10-24 09:53:59.7+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+7eee6239-5a81-4979-ab6f-43a1b3e8d570 激光收敛计 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t T-780 上海隼星T-780 2019-09-29 10:42:58.218+08 2020-04-14 14:11:33.003+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 4
+f19f1e04-8739-4652-9869-5fe16698e82e 路灯网关控制器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-SZ10-GW-R4A 2019-10-08 13:42:51.576+08 2019-10-23 09:52:35.4+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+cc938850-0b9a-4ab3-9712-dbf35ff157d9 云振动采集仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-iZD08 与飞尚一致 2019-10-24 11:23:42.79+08 2019-10-24 11:51:30.23+08 005e2048-b7e8-4f7c-847f-e9918a66414d 1
+55d8d331-c61d-4523-886d-2d69f350cde0 常规五参数水质监测仪 d3684da7-e6e5-4925-a09f-dc80904a6b3a d3684da7-e6e5-4925-a09f-dc80904a6b3a d3684da7-e6e5-4925-a09f-dc80904a6b3a t KM-MU-5S 上海清淼光电科技有限公司常规五参数水质监测仪 2017-09-14 19:08:55.091+08 2019-10-24 14:15:07.19+08 945dc90b-2494-4242-ac50-3068ac34de42 0
+e2fb2ed6-6d1c-41da-9f07-ab5866dd8940 自动采集仪 c8fac2b3-4360-47e4-91ab-2d6f3b3973e6 c8fac2b3-4360-47e4-91ab-2d6f3b3973e6 c8fac2b3-4360-47e4-91ab-2d6f3b3973e6 t XB-501 2019-10-28 17:16:59.584+08 2019-10-30 13:41:27.716+08 b5a689a1-1523-47c7-ab4b-96b2d01cc461 1
+ed459df4-d57c-430e-878b-37b61111d133 土压力计 c8fac2b3-4360-47e4-91ab-2d6f3b3973e6 c8fac2b3-4360-47e4-91ab-2d6f3b3973e6 c8fac2b3-4360-47e4-91ab-2d6f3b3973e6 t XB-150 2019-10-28 17:22:11.028+08 2019-10-30 16:09:51.521+08 b5a689a1-1523-47c7-ab4b-96b2d01cc461 4
+1e6fc551-3ad9-4963-9754-142f9c470c9c 全站仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-TM30 2019-11-05 14:15:48.111+08 2019-11-25 14:21:53.605+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+b86fdc56-591d-40c5-b4f8-cb5b2a265be8 雷达水位计 808e0822-39be-47f9-b409-837e6d913d53 808e0822-39be-47f9-b409-837e6d913d53 808e0822-39be-47f9-b409-837e6d913d53 t PWRD92H 2019-10-29 10:59:45.006+08 2019-10-29 11:05:34.566+08 45db210e-6095-414d-8ba7-4cf87583d293 4
+88c7c5c5-561d-4193-9cf0-91aceec9f79a 测试传感器 736d5c22-d6ac-4577-9782-0f95345ea1d5 736d5c22-d6ac-4577-9782-0f95345ea1d5 736d5c22-d6ac-4577-9782-0f95345ea1d5 f 1.0 2019-10-30 09:07:33.722+08 2019-10-30 09:07:33.722+08 \N 4
+58bfca53-22e0-4857-81f4-c64ce00efe67 埋入式应变计 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN-520 2019-12-30 15:57:52.562+08 2019-12-31 09:19:53.475+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+ccf64c47-a5cc-46bc-92d7-0ffa046876a4 柔性土压力计 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN-541 2019-12-30 15:58:44.08+08 2019-12-31 09:20:12.333+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+246ba00c-51d3-4e43-b651-4fd45ccd8ca0 表面裂缝计 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN-600 2019-12-30 15:59:31.444+08 2019-12-31 09:20:51.679+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+8a550a15-96be-455e-8c81-b9e7efcc2b30 温度计 c8fac2b3-4360-47e4-91ab-2d6f3b3973e6 c8fac2b3-4360-47e4-91ab-2d6f3b3973e6 c8fac2b3-4360-47e4-91ab-2d6f3b3973e6 t XB-880 2019-10-28 17:20:38.025+08 2019-10-30 16:09:49.16+08 b5a689a1-1523-47c7-ab4b-96b2d01cc461 4
+2e9595c1-ff54-4c5f-953e-f61a7837200e 钢筋应力计 c8fac2b3-4360-47e4-91ab-2d6f3b3973e6 c8fac2b3-4360-47e4-91ab-2d6f3b3973e6 c8fac2b3-4360-47e4-91ab-2d6f3b3973e6 t XB-120 2019-10-28 17:23:47.578+08 2019-10-30 16:09:54.155+08 b5a689a1-1523-47c7-ab4b-96b2d01cc461 4
+11a0df92-8921-470b-af9c-d7593b8b1f78 压差式变形测量传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LTG-Y1000-Z 压差式变形测量传感器 2018-01-24 11:18:54.103+08 2019-10-31 11:49:04.347+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+0f20644c-1893-49f9-bc83-6b66a9ead892 测试AES128设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f LK522 2019-10-31 16:01:05.953+08 2019-10-31 16:01:05.953+08 \N 4
+30cf2191-2a9e-40dd-a83f-969d2f053e1e 分类垃圾桶 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t ZFL-240L 2019-10-16 15:16:12.21+08 2019-11-01 14:25:32.205+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+28dd8b68-38c2-47ad-af2f-80cabb2e5af7 固定式二甲基乙酰胺检测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ES10B10-C4H9NO 2020-01-14 14:15:55.634+08 2020-01-15 13:51:26.958+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+86561a5b-04f5-4b5f-8bc7-6b002b4b6c68 测斜杆 fff3496c-71e7-4ca5-abe5-9de748ac5a63 fff3496c-71e7-4ca5-abe5-9de748ac5a63 fff3496c-71e7-4ca5-abe5-9de748ac5a63 t AZ103X 2019-11-01 14:03:28.022+08 2019-11-01 17:44:19.013+08 3825bcfe-887b-4c7e-825d-9e824d753aaf 1
+a1923ce2-b8a5-45cb-9d98-6a42901cee7c GNSS ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GNSS GNSS 2018-03-05 11:56:41.391+08 2021-02-19 10:53:41.049+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+20d96ea0-8995-453b-aa12-191acb05eced 板载噪声传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ZSRS-V1.00 2020-01-17 15:31:03.136+08 2020-03-02 18:55:06.243+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+a9dea92c-5afa-40b9-b1f3-197e9b0f82be 温度传感器 e2534302-c06d-4ddf-8857-7011bfdde945 e2534302-c06d-4ddf-8857-7011bfdde945 e2534302-c06d-4ddf-8857-7011bfdde945 f EE160 2019-11-05 09:12:10.042+08 2019-11-05 09:12:10.042+08 \N 4
+6431292f-5b95-41f0-8291-ff902e58b376 L型棱镜 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LJ-L 2019-11-05 14:06:15.033+08 2019-11-05 14:54:33.769+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+d43df443-364f-4958-b978-cb0e9ee0e532 钢筋计 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN-530 2019-12-30 15:58:16.619+08 2019-12-31 09:20:05.361+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+a581eb27-4334-4d9f-b28b-2c4b1e8136d5 多点位移计 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN-640 2019-12-30 15:59:53.301+08 2019-12-31 09:20:58.537+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+213e2ff2-285b-445d-8661-24f6f91bf7b8 垃圾桶 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t ZFL-240L-CAN 2019-10-16 15:20:46.741+08 2020-04-02 14:36:48.292+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+82d07222-1b08-4fa5-85bb-790f4dc24def 锚索轴力计 7883c07e-5754-4740-b90b-836def9cb38e 7883c07e-5754-4740-b90b-836def9cb38e 7883c07e-5754-4740-b90b-836def9cb38e t WY-T80 2019-12-06 10:18:48.758+08 2020-01-06 10:53:04.58+08 cb22fffc-27b3-479c-94ca-4117bb9483f3 4
+b1ce7bb7-4d25-468a-ab2b-22347d65b166 锚索计(三索) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-T80 复制的湖南五岳的 2020-01-06 15:12:33.152+08 2020-04-14 10:51:15.747+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+8c23f875-86cf-4fe7-a315-526c7a1d0187 雨量计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-YL-A 2019-08-27 16:31:15.65+08 2020-11-20 09:50:41.797+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+afba576d-0e5e-48cf-a9fa-18a3f986d812 声级计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-N01 2020-01-07 14:23:09.063+08 2020-01-10 14:01:48.012+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+1f143b2d-d58a-4b04-bec7-8a396e900c90 固定式乙醇检测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ES10B10-C2H60 2020-01-14 13:59:03.96+08 2020-01-15 13:50:37.532+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+50e00d9f-f07e-4a17-96bc-c74a2aab4d71 倾斜传感器 fff3496c-71e7-4ca5-abe5-9de748ac5a63 fff3496c-71e7-4ca5-abe5-9de748ac5a63 fff3496c-71e7-4ca5-abe5-9de748ac5a63 t AZXQX 依托于测斜杆、倾斜下的传感器 2019-11-01 14:59:07.343+08 2019-11-08 13:14:36.286+08 3825bcfe-887b-4c7e-825d-9e824d753aaf 4
+4abe48e9-ae10-4cd4-85a6-ad3970d8b928 固定式丙烷检测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ES10B10-C3H8 2020-01-14 14:02:50.252+08 2020-01-15 13:50:53.213+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+c7c40505-1247-43ea-a898-e767eeae6943 Magnetic Sensor f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f Magnetic Sensor Magnetic Sensor 2020-02-11 14:33:23.528+08 2020-02-11 14:33:23.528+08 \N 4
+1b1cc578-8839-4900-a0bf-8e8614bdbd41 水准仪_样例 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f Demo_jlsz 2020-02-19 16:24:50.457+08 2020-02-19 16:24:50.457+08 \N 4
+62fe835f-5a83-41c7-a31e-3304fb51c5a9 设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f xh 2020-02-20 16:35:47.502+08 2020-02-20 16:35:47.502+08 \N 4
+31be3fb7-3369-4966-8e26-b561dc31b6fd 直线位移传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ZWY-XX 2019-12-06 15:16:13.053+08 2020-02-21 13:12:31.951+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+2f966726-181d-4301-8415-5987393db114 NAS 控制器 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f 1.0 2020-02-27 20:51:36.619+08 2020-02-27 20:51:36.619+08 \N 1
+80f33249-c402-4942-8c91-15f19638dce4 Zigbee水阀 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f V1 2020-02-27 22:26:34.009+08 2020-02-27 22:26:34.009+08 \N 0
+e8283251-3a4d-40f8-a7cc-581af3168aee 振弦式渗压计 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN-700 2019-12-30 16:00:16.71+08 2020-11-24 09:55:54.846+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+98e6aaea-a6e2-449e-8b46-47fa016b1b96 地灾设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t RTU 2019-12-20 10:02:25.421+08 2021-02-04 15:58:16.301+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+0758748a-7706-4392-ba7e-e47526251acb 振动传感器 fff3496c-71e7-4ca5-abe5-9de748ac5a63 fff3496c-71e7-4ca5-abe5-9de748ac5a63 fff3496c-71e7-4ca5-abe5-9de748ac5a63 t AZ5523CJ 2019-11-07 10:06:59.578+08 2019-11-08 14:47:42.686+08 3825bcfe-887b-4c7e-825d-9e824d753aaf 4
+8392cdb0-52c7-4fee-8ace-a64e5cf86240 多点沉降计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-SYL 修改过 2019-09-25 11:38:34.938+08 2020-01-09 17:14:18.319+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+c1e63dc1-8a68-4dad-a180-c652ea587e83 总磷在线监测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t VL-TP-101 03智慧水务水质监测 2020-01-07 09:52:02.033+08 2020-01-10 09:42:20.068+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+c659433c-cfd8-4b1a-a9d3-5664beb39ed9 采集仪 fff3496c-71e7-4ca5-abe5-9de748ac5a63 fff3496c-71e7-4ca5-abe5-9de748ac5a63 fff3496c-71e7-4ca5-abe5-9de748ac5a63 t AZCJ 2019-11-08 13:18:41.57+08 2019-11-11 11:03:44.393+08 3825bcfe-887b-4c7e-825d-9e824d753aaf 1
+1f0ce463-872a-406b-bdbe-a469b45f9e9a 裂缝计 fff3496c-71e7-4ca5-abe5-9de748ac5a63 fff3496c-71e7-4ca5-abe5-9de748ac5a63 fff3496c-71e7-4ca5-abe5-9de748ac5a63 t AZ5523LF 2019-11-08 13:43:46.048+08 2019-11-11 11:03:47.552+08 3825bcfe-887b-4c7e-825d-9e824d753aaf 4
+13ee1f91-04cc-48af-820e-ffc0ed179b6c 表面式应变计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-BM50 表面式应变计 2018-01-05 14:02:10.777+08 2020-01-10 10:55:36.38+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+d756ead6-3c0a-4d1e-be3f-dde6e031a048 裂缝计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-LF 2019-09-25 11:07:08.043+08 2020-01-13 14:14:00.779+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+fe3a614d-329c-4b70-99ff-f95ccb28ab79 倾角计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-QJ 2019-09-25 10:37:46.501+08 2020-01-13 14:36:29.65+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+f7374ca5-78cb-4578-bfe3-df32eb350d05 土压力计 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-TYL-I 2019-09-25 11:19:02.062+08 2020-01-13 16:22:03.01+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+005826c9-dd60-4013-99bc-da28bc0d9c93 土壤水分传感器 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DTC-SD 2019-09-25 11:32:47.398+08 2020-01-13 16:41:50.828+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+e95109a9-cf5a-4e13-b52b-1f85101fd99a 多通道无线数据采集仪 bfe504c8-b84a-43ec-831a-5ce698db9950 bfe504c8-b84a-43ec-831a-5ce698db9950 bfe504c8-b84a-43ec-831a-5ce698db9950 t LRK-DZ642D 2019-11-15 10:29:23.428+08 2020-01-13 17:09:11.384+08 230cf38f-fd43-4b78-93b2-05620d4eab9f 1
+d6aefb14-b750-4133-94f4-e51c3df7743f 固定式氯气检测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ES10B10-CL2 2020-01-14 14:04:32.633+08 2020-01-15 13:51:08.357+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+c9eacd36-38d6-48b9-9672-e76406906ea3 孔隙水压计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-KY02 配套 飞尚 多条道振弦采集仪 2018-01-23 15:00:13.31+08 2019-11-09 10:12:28.947+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d 孔隙水压计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-KY10 配套 飞尚 多条道振弦采集仪 2018-01-23 15:00:11.224+08 2019-11-09 10:35:34.137+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+cb4eb310-0876-492a-9e06-8cd0a5542c5b 孔隙水压计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-KY08 配套 飞尚 多条道振弦采集仪 2018-01-23 15:00:11.827+08 2019-11-09 10:36:09.192+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 孔隙水压计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-KY06 配套 飞尚 多条道振弦采集仪 2018-01-23 15:00:12.505+08 2019-11-09 10:36:16.048+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 孔隙水压计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-KY04 配套 飞尚 多条道振弦采集仪 2018-01-23 15:00:12.707+08 2019-11-09 10:36:34.156+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1 钢筋计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GJ22 配套飞尚多通道振弦采集仪 2018-01-05 14:46:16.289+08 2019-11-09 10:53:04.062+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+473aee20-7c00-41cd-bd6e-b44c35c758ea 钢筋计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GJ25 配套飞尚多通道振弦采集仪 2018-01-05 14:50:21.82+08 2019-11-09 10:53:10.76+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+73a7b800-25d7-41ad-872d-96cc4f9430de 钢筋计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GJ32 配套飞尚多通道振弦采集仪 2018-01-05 15:18:31.279+08 2019-11-09 10:53:21.363+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+c150497e-123d-4ce0-bc80-9a537ee84489 二维面阵激光位移计 bfe504c8-b84a-43ec-831a-5ce698db9950 bfe504c8-b84a-43ec-831a-5ce698db9950 bfe504c8-b84a-43ec-831a-5ce698db9950 t LRK-DL630A 2019-11-14 13:09:15.668+08 2019-11-27 09:02:31.354+08 230cf38f-fd43-4b78-93b2-05620d4eab9f 4
+8e254f7b-1da7-4912-8b0d-467770662365 激光二维位移计 fff3496c-71e7-4ca5-abe5-9de748ac5a63 fff3496c-71e7-4ca5-abe5-9de748ac5a63 fff3496c-71e7-4ca5-abe5-9de748ac5a63 t AZ301 2019-11-08 13:12:19.604+08 2019-11-11 11:03:41.3+08 3825bcfe-887b-4c7e-825d-9e824d753aaf 4
+9a331e7d-9429-4f58-8d30-a2fde39a80f3 倾斜传感器 fff3496c-71e7-4ca5-abe5-9de748ac5a63 fff3496c-71e7-4ca5-abe5-9de748ac5a63 fff3496c-71e7-4ca5-abe5-9de748ac5a63 t AZ5523QX 2019-11-11 11:43:37.458+08 2019-11-11 11:46:33.857+08 3825bcfe-887b-4c7e-825d-9e824d753aaf 4
+ac632873-d5e1-42fa-9343-6962d16bb547 压电式振动传感器 17ecfb0a-03a3-45eb-8d52-4794676c3a0a 17ecfb0a-03a3-45eb-8d52-4794676c3a0a 17ecfb0a-03a3-45eb-8d52-4794676c3a0a t BY-S07 2019-11-13 11:47:24.166+08 2019-11-13 13:11:01.47+08 c6b69110-10f2-4697-afcf-eb74f9e4a777 4
+894ab7ef-b84f-420c-b2f0-cfdc5c00b826 GPRS节点 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-GPRSJD 复制工讯 2019-11-08 17:19:34.667+08 2020-08-05 14:16:27.618+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 1
+457137ac-994e-4445-8acf-12172464a82d 固定式氧气检测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ES10B10-O2 2020-01-14 14:00:56.89+08 2020-01-15 13:50:40.079+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+72c4a62b-a2d2-4e68-9686-cc325cd79f74 固定式天然气检测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ES10B10-Ex 2020-01-14 14:07:25.632+08 2020-01-15 13:50:47.299+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+1352d63c-d97b-4dd4-8289-0de6cad01db0 固定式二氧化碳检测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ES10B10-CO2 2020-01-14 14:10:01.172+08 2020-01-15 13:50:56.542+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+32cd67be-b8f0-42fe-9ef4-79ad8fbed488 智能数据采集器 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DT8X 2018-09-07 09:23:59.189+08 2021-01-28 15:15:57.969+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 1
+6e32b4dd-c257-4c55-922f-1d62e21220c9 振动采集仪 158a00b4-7170-4f1e-acd7-81e38c57b8da 158a00b4-7170-4f1e-acd7-81e38c57b8da 158a00b4-7170-4f1e-acd7-81e38c57b8da t G01NET-3D 2019-11-14 14:47:28.334+08 2019-11-15 15:16:44.05+08 752f5c02-d042-481d-ba52-83c0a4d969ae 1
+5375e7c0-4ad5-4fcb-93df-82c9140ba075 倾角仪 158a00b4-7170-4f1e-acd7-81e38c57b8da 158a00b4-7170-4f1e-acd7-81e38c57b8da 158a00b4-7170-4f1e-acd7-81e38c57b8da t QYG01-1 2019-11-14 14:50:04.922+08 2019-11-15 15:16:47.987+08 752f5c02-d042-481d-ba52-83c0a4d969ae 4
+70457bad-88aa-4b95-ba35-4d42f4c3ac9d 加速度计 158a00b4-7170-4f1e-acd7-81e38c57b8da 158a00b4-7170-4f1e-acd7-81e38c57b8da 158a00b4-7170-4f1e-acd7-81e38c57b8da t QZ2013 2019-11-14 15:00:54.128+08 2019-11-15 15:16:50.629+08 752f5c02-d042-481d-ba52-83c0a4d969ae 4
+9ef26f61-19a9-4990-83f4-b0c81d348eeb 位移计 158a00b4-7170-4f1e-acd7-81e38c57b8da 158a00b4-7170-4f1e-acd7-81e38c57b8da 158a00b4-7170-4f1e-acd7-81e38c57b8da t QZ2014 2019-11-14 15:05:32.271+08 2019-11-15 15:16:53.512+08 752f5c02-d042-481d-ba52-83c0a4d969ae 4
+83759876-3d92-4218-8efb-ea36dc6d81ef 激光位移传感器 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC-T-780 采集仪下设备 2019-09-29 17:46:42.908+08 2019-11-18 10:10:18.459+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 4
+5b2e8307-69da-445f-a1a5-6f04cfd7cd8f 倾斜传感器 bfe504c8-b84a-43ec-831a-5ce698db9950 bfe504c8-b84a-43ec-831a-5ce698db9950 bfe504c8-b84a-43ec-831a-5ce698db9950 t LRK-CX06 2019-11-18 09:58:17.644+08 2019-11-27 09:02:42.764+08 230cf38f-fd43-4b78-93b2-05620d4eab9f 4
+c2c9fa03-e2cf-45f7-ae3f-5cb586ab5a77 振弦采集仪 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC- T440 2019-11-11 14:50:36.239+08 2019-11-18 14:08:54.433+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 1
+9278fee5-3705-4e76-a8a6-1cf10956a376 电表27034408 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f nbddzy9898 大华电表 2019-11-19 14:06:12.362+08 2019-11-19 14:06:12.362+08 \N 4
+61a4ad5e-774e-40d2-9ea6-937da62db64b 智能无线数据采集仪 bfe504c8-b84a-43ec-831a-5ce698db9950 bfe504c8-b84a-43ec-831a-5ce698db9950 bfe504c8-b84a-43ec-831a-5ce698db9950 t LRK-DZ622A 2019-11-14 15:48:42.019+08 2019-12-13 10:53:04.931+08 230cf38f-fd43-4b78-93b2-05620d4eab9f 1
+407a002b-de7c-4a76-9732-e4e8aaaafec3 雷达水位计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-MIK-908 2019-11-19 16:14:21.585+08 2019-11-20 10:54:01.654+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+40c3cf7a-91d6-4c0e-aa48-4839dd6815cc 土工多点数据采集仪 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 t CUD-5M 2019-11-04 09:41:39.332+08 2019-11-20 15:05:38.861+08 b44a2f42-face-4c8f-a783-1cfb1757c880 1
+9199194c-49d8-4c20-8b52-67e469c30838 振弦式应变计 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 t JXB-3(P) 2019-11-04 09:47:11.723+08 2019-11-20 15:05:41.876+08 b44a2f42-face-4c8f-a783-1cfb1757c880 4
+863ffb4f-8b5f-4a67-b93e-fa4f92f2464a 振弦式应变计 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 t JXB-2(P) 2019-11-04 09:47:45.486+08 2019-11-20 15:05:44.799+08 b44a2f42-face-4c8f-a783-1cfb1757c880 4
+d325832b-3b9a-4f92-9b08-0984c6b81599 振弦式钢筋计 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 t JXG-1(T) 2019-11-04 09:48:05.254+08 2019-11-20 15:05:48.084+08 b44a2f42-face-4c8f-a783-1cfb1757c880 4
+28f92d45-2a16-4768-bc97-e9acc713b231 振弦式荷载测力计 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 t JXH-3(P) 2019-11-04 09:48:34.822+08 2019-11-20 15:05:56.618+08 b44a2f42-face-4c8f-a783-1cfb1757c880 4
+23b49cdb-2f9b-4170-9c38-2941c2341d00 振弦式轴力计 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 t JXZ-1(P) 2019-11-04 16:29:16.041+08 2019-11-20 15:05:59.693+08 b44a2f42-face-4c8f-a783-1cfb1757c880 4
+e62db430-948a-4311-996f-38348811807a 振弦式位移计 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 t JXW-2(P) 2019-11-04 16:29:39.696+08 2019-11-20 15:06:02.237+08 b44a2f42-face-4c8f-a783-1cfb1757c880 4
+f34a4e8b-3a8a-45d9-a73e-a352cb10bbd6 振弦式压力盒 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 t JXY-2(P) 2019-11-04 16:32:54.004+08 2019-11-20 15:06:06.989+08 b44a2f42-face-4c8f-a783-1cfb1757c880 4
+53ea01cf-1ce2-4b41-b725-974426affa48 振弦式压力盒 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 t JXY-4(P) 2019-11-04 16:32:31.747+08 2019-11-20 15:06:14.018+08 b44a2f42-face-4c8f-a783-1cfb1757c880 4
+d929c576-62dd-4f0c-a2cc-15120347b903 分布式云振动网关 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-iFWL-VWG 2018-09-25 15:45:23.967+08 2019-11-21 10:09:40.042+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+a0d06bbf-dedc-47dc-8d1e-52e2a282a93a 固定杆式测斜仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GGC02-V3.00 双轴 2019-11-21 11:47:17.596+08 2020-01-07 14:25:16.589+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+868f47ed-fe83-49c4-be2c-70731b436220 固定杆式测斜仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GGC01-V3.00 单轴 2019-11-21 11:47:18.841+08 2020-01-07 14:25:21.594+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+cd24ff84-fef3-40d2-8397-dfa240a13d17 固定式甲醇检测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ES10B10-CH4O 2020-01-14 14:13:41.843+08 2020-01-15 13:51:14.105+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+97078fa2-e944-487b-8913-e3c2c33c6ff0 DT湿度传感器 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 t DT-WSD 2018-09-07 10:55:19.788+08 2020-01-16 10:40:53.215+08 8c9b2c27-6501-4173-8be0-3d4b34466fe4 4
+d2e74fbe-59fe-420d-b127-c61ba8236f42 测斜传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-RTU-GGC01 2019-12-26 13:50:05.496+08 2021-02-05 15:30:43.789+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+6f6f83fa-1af9-4e4c-8d3f-53c2a4d1b4ca 土壤温湿度传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ZTRWSD-MX 2019-11-21 09:33:12.253+08 2020-03-10 14:00:40.609+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+123b24f1-ba7c-42e1-b742-afdc5bf8620b 视频位移传感器 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 t SMTN-M 2019-11-22 09:49:01.429+08 2019-11-27 09:22:57.819+08 3ced2ad4-50ab-4f5d-b3ca-fc19063f1879 1
+e1118b87-bfea-42be-b365-1c99d35511cc 激光传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-JGCJY-10-B 2019-11-21 15:13:15.422+08 2019-11-21 15:19:00.564+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+ee878563-3f80-4c7d-8888-319c875c8a5e 激光传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-JGCJY-30-B 2019-11-21 15:17:49.681+08 2019-11-21 15:19:06.696+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+b1353bed-cda0-44a5-b1e9-94cb166962a5 激光传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-JGCJY-70-B 2019-11-21 15:17:51.637+08 2019-11-21 15:19:14.497+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+446a08d7-c237-4f0b-acfb-3d9310da742d 激光传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-JGCJY-03-Z 2019-11-21 16:06:37.684+08 2019-11-21 16:22:47.868+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+4698f1de-2051-4283-9fe5-2c62b1687239 激光传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-JGCJY-10-Z 2019-11-21 16:15:06.503+08 2019-11-21 16:22:52.583+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+5b338441-75c4-4186-9fc3-23aa8d614e19 激光传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-JGCJY-30-Z 2019-11-21 16:15:07.771+08 2019-11-21 16:22:56.766+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+0e96ddaf-1acc-419b-afca-18854f8c25d8 激光传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-JGCJY-80-Z 2019-11-21 16:17:19.726+08 2019-11-21 16:23:01.716+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+0edf8e7f-0f5f-440a-a83a-333e5d90a2ef 测缝计 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC-T700 上海隼星T-700 2019-09-29 16:03:31.37+08 2019-11-22 10:58:27.901+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 4
+56c84083-d705-4aa0-94d2-34b731f75f97 压电式振动传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ZD-A01 2018-04-02 10:37:43.64+08 2020-01-14 10:56:55.778+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+adcecf0d-2b34-4a55-abc2-78a2439b1567 固定式氨气检测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ES10B10-NH3 智慧消防 2020-01-14 13:53:59.173+08 2020-01-15 13:50:30.071+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+742ee585-31d3-413c-b4f0-44d175b45bf5 固定式环氧乙烷检测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ES10B10-ETO 智慧消防 2020-01-14 13:57:25.412+08 2020-01-15 13:54:57.739+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+fd94699e-65db-45b8-bbe9-88c147ba1e0a 固定式温湿度检测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GDJCY-WSD 2020-03-23 17:25:41.951+08 2020-03-23 17:28:26.438+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+71735c3a-2e25-40c1-81ad-df10d8792ac2 分布式智能云采集系统 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-iFWL-WG-V2.10 云网关 2018-03-08 18:51:52.82+08 2020-03-25 10:19:01.56+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+70ed36c0-d58f-482d-8337-fafed8a2e6ac 表面应变计 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 t YH03-B30 湖南湘银河传感科技有限公司 2018-01-23 13:54:59.27+08 2020-03-25 10:35:45.886+08 1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa 4
+ca2fe08c-b600-4472-8de2-3c549ea7d150 串联式导轮测斜仪(双轴) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-GGC01-V3.0 2020-04-03 17:19:01.21+08 2020-04-10 14:13:28.93+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+b78fdf56-b70c-4c49-8734-67400e9a858a 静力水准仪 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN620 2020-03-26 11:00:05.676+08 2020-03-26 11:35:48.707+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+1b795716-096c-409d-8b43-290e31a0d4d5 静力水准仪 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN620D 2019-06-19 17:34:39.404+08 2020-03-26 11:38:32.43+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+03f53a90-43a0-47d6-9183-edfb825a09e5 静力水准仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-HLS-JW 2019-01-24 11:51:28.163+08 2020-03-26 15:52:28.491+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+cf08e20c-2c85-4a1d-84a6-b773c3291124 串联式导轮测斜仪(单轴) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f YX-GGC01-V3.0-01 2020-04-09 11:43:26.66+08 2020-04-10 14:21:21.054+08 \N 4
+1e4fb0f1-79a1-4246-a85c-478b55f8df95 静力水准仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t RZ370 2020-03-18 14:12:05.051+08 2020-03-27 17:04:27.994+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+12f885d6-8a49-4495-909e-8a938e23ec8b 太阳辐射传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-TYFS-A 2020-04-08 09:44:52.304+08 2020-04-08 09:52:27.653+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+f070a6a5-406b-4567-ab70-0ba9cc204545 海康红外摄像头 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t DS-2TD2137-10/V1 2020-04-01 09:55:29.038+08 2020-04-02 15:20:44.116+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+a21dbc9a-38d2-4468-8149-8324e875fc8a 气象多要素百叶箱 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-QXDYS-A 2020-04-08 10:43:30.789+08 2020-04-08 11:42:37.252+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+0796dca5-8068-4bc2-a73f-99160576a988 轴力计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f YX-ZL50 配套飞尚多通道振弦采集仪 2020-04-08 13:15:10.344+08 2020-04-08 15:11:53.409+08 \N 4
+c5a82ea8-374b-4efd-b9e9-716b216d8ee4 振弦式土压力计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f YX-TY06 配套飞尚多通道振弦采集仪 2020-04-08 15:18:35.607+08 2020-04-08 15:18:35.607+08 \N 4
+385b0bd6-f460-40fc-9a65-78aaba84aaf3 振弦式土压力计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f YX-TY60 \n配套飞尚多通道振弦采集仪 2020-04-08 15:52:56.272+08 2020-04-08 15:52:56.272+08 \N 4
+33215263-67ff-4ca8-9cec-d4c05068b412 单通道振弦采集仪 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f YX-F01M \nmodbus 多通道振弦采集仪 2020-04-08 16:11:41.684+08 2020-04-08 16:11:41.684+08 \N 1
+f54c9b05-e722-4677-9e19-4fbbeeee0938 多通道振弦采集仪(8CH) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f YX-F08M 2020-04-08 16:18:25.311+08 2020-04-08 16:18:25.311+08 \N 1
+718d8823-39a8-40fd-b726-76fde0fd8094 多通道振弦采集仪(16CH) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f YX-F16M 2020-04-08 16:23:51.231+08 2020-04-08 16:23:51.231+08 \N 1
+9699ac1e-3bc8-4a9a-960f-4c82cc2507ff 静力水准仪 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f YX-JLSZ-10-V1.00 2020-04-08 16:36:50.871+08 2020-04-08 16:36:50.871+08 \N 4
+bfa2c35f-19d1-450b-a04a-b0e211b43bf5 DTU 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f YX-DTU-4G-W-V1.00 2020-04-09 10:45:48.26+08 2020-04-09 10:45:48.26+08 \N 0
+939d26de-ea01-420a-95fb-9bb2398cb1c2 分布式GPRS节点 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 t ZY-CJX-8 复制一芯 2020-04-09 14:48:59.306+08 2020-04-10 16:09:37.488+08 1b270ac5-34e5-47e7-8d67-926c4783bf6d 1
+0b4561c4-31a6-4737-b593-18b2b1973850 钢筋应力计 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 t ZY-GJJ-1020 2020-04-09 16:22:25.393+08 2020-04-10 16:09:40.214+08 1b270ac5-34e5-47e7-8d67-926c4783bf6d 4
+854b696f-3001-4d7f-bffc-1e78e73b7d31 串联式导轮测斜仪(单轴) 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 t ZY-CX-061 2020-04-10 14:35:20.846+08 2020-04-10 16:20:47.505+08 1b270ac5-34e5-47e7-8d67-926c4783bf6d 4
+71c10138-4c73-4682-af9b-a904323eeac2 固定杆式测斜仪(单轴) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f YX-GGC01M-01 2020-04-13 13:05:47.902+08 2020-04-13 13:05:47.902+08 \N 4
+2f588726-18df-4ab2-b677-5c4479cef768 串联式导轮测斜仪(双轴) 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 t ZY-CX-062 2020-04-13 10:48:03.076+08 2020-04-13 11:08:27.416+08 1b270ac5-34e5-47e7-8d67-926c4783bf6d 4
+b3c05fb2-59b8-4bf7-b85d-7823a6781395 盒式固定测斜仪(单轴) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f YX-HGC01M-01 2020-04-13 11:44:59.531+08 2020-04-13 11:44:59.531+08 \N 4
+8fd9d375-1389-43b9-9423-654a4dd5af44 激光测距仪 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f YX-LRF-V1.00 2020-04-13 16:42:59.107+08 2020-04-13 16:42:59.107+08 \N 4
+0df31ce5-f6b4-4f95-a5f8-07c4ccc52346 温度传感器 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f YX-WD01MM 2020-04-13 16:31:25.26+08 2020-04-13 17:14:44.081+08 \N 4
+2b960cb5-8b22-4a35-b811-2a74b8f47196 锚索计(三索) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f YX-T50 2020-04-14 10:32:45.115+08 2020-04-14 10:32:45.115+08 \N 4
+2e98107c-2635-43a9-a89f-872152bac901 锚索计(三索) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f YX-T60 2020-04-14 10:39:24.278+08 2020-04-14 10:39:24.278+08 \N 4
+2de0b18f-a13a-48a9-8e34-6bfeff609972 锚索计(三索) 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f YX-T100 2020-04-14 10:44:39.265+08 2020-04-14 10:44:39.265+08 \N 4
+8cee37a9-d972-4d3b-97eb-53c9a87dbe9c 静力水准仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-JLSZ-CSB 2020-04-21 13:39:10.202+08 2020-04-21 14:49:36.945+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+f2966257-6f65-4e21-81a5-451cd5b63144 校验设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f wjjjj 2020-04-21 23:56:27.155+08 2020-04-21 23:56:27.155+08 \N 4
+f9304770-9fc6-4203-a75a-2759b659a4d7 RTU f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f V1.0 2020-04-22 19:14:32.861+08 2020-04-22 19:14:32.861+08 \N 0
+82d6439d-e647-44e7-ba65-2de818baea7f 振弦式锚索测力计 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 t VAB 2020-05-14 11:28:05.187+08 2020-05-14 11:41:31.35+08 a4ea8d4c-a663-48d2-a163-47085a402235 4
+310ec0de-7bbc-4a75-8f1b-d126a2d3ac4a 差阻式应变片 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t FLAB-3-11 2020-05-13 11:30:27.489+08 2020-05-14 11:41:34.383+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+4d37123c-99a8-49db-b2d2-3e334f5b27e0 全站仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-QZY 2020-05-21 15:16:19.411+08 2020-05-21 17:39:05.688+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+39e6fe98-3dea-458b-9f64-143d18617cc4 棱镜 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LJ 2020-05-21 15:23:07.793+08 2020-05-21 17:39:09.454+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+ba181334-9686-42cd-b00e-7165b35e067f 液位计 28bc5952-cfc7-4d3a-a922-92c82d003b20 28bc5952-cfc7-4d3a-a922-92c82d003b20 28bc5952-cfc7-4d3a-a922-92c82d003b20 t SSFMS-0100-M21N-MEPS 2020-05-14 15:02:02.187+08 2020-05-22 08:44:40.582+08 004b1a1d-6d36-45c7-9e9d-2e3a3ecdc5c1 4
+a2a6365d-ec0a-453a-be54-35e11b324d63 土壤温湿度计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-TRWSD-BO 2.0 1166 欧速电子 温湿度 2020-06-10 11:35:22.162+08 2020-06-10 13:58:59.293+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+57b88830-72c4-4739-8d3b-3754fb371135 多功能混凝土腐蚀监测仪 4ed578c6-f98d-4d94-b1b3-472e1ced51bd 4ed578c6-f98d-4d94-b1b3-472e1ced51bd 4ed578c6-f98d-4d94-b1b3-472e1ced51bd t LG-CM18 2020-05-11 09:29:12.665+08 2020-05-22 10:33:07.543+08 334b593d-da3a-4d6b-a756-36e82b6e882e 4
+a81d1a62-5c7f-4c96-8abe-fe4a0bca5dcc 加速度计 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed t YX-ZD-A01-V1.00 2020-04-13 17:20:54.423+08 2020-05-22 15:46:10.702+08 d9e142bf-ebb7-4b0a-851e-439ccdfd92bb 4
+94e0657d-9d34-4baf-bac1-34cb6610e051 激光位移传感器 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 t SMT-DL 2020-05-25 15:20:08.755+08 2020-05-26 16:51:50.229+08 3ced2ad4-50ab-4f5d-b3ca-fc19063f1879 4
+e867f531-f1a3-44c8-9876-368efe947b7d U-L型主机 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ECJC1 PM2.5/PM10+臭气OU值+氨气NH3+乙醇C2H5OH+VOC 2020-05-28 10:53:52.228+08 2020-07-17 15:23:33.339+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+d86466d8-8892-45e2-a86a-56e283df30ac U-L型主机 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ECJC2 2020-05-28 15:02:00.583+08 2020-07-17 15:23:38.277+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+9ed59e3e-108f-4fe9-b3c0-37c11cd46d92 激光测距仪 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd t SLDS-C150 2020-06-10 14:05:06.773+08 2020-06-15 10:43:03.581+08 9f0e639f-37d3-4661-bf82-808a6291df48 4
+33b14e4c-17e6-44c9-a0a1-84cfe22fa073 激光测距仪 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd t SLDS-C100 2020-06-10 14:00:54.72+08 2020-06-15 10:43:06.795+08 9f0e639f-37d3-4661-bf82-808a6291df48 4
+ce34762d-8e48-4c7e-8c23-1f7810ab7884 激光测距仪 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd t SLDS-C200 2020-06-10 14:06:51.124+08 2020-06-15 10:43:10.104+08 9f0e639f-37d3-4661-bf82-808a6291df48 4
+42d66a56-b0ca-400d-b41e-250d62a84878 激光测距仪 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd t SLDS-C300 2020-06-10 17:07:04.27+08 2020-06-15 10:43:14.495+08 9f0e639f-37d3-4661-bf82-808a6291df48 4
+ee98ef38-7fda-425a-9fae-5000c658a83e 采集仪 90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0 90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0 90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0 t YKMS-32 2020-06-05 14:45:30.23+08 2020-07-01 09:06:20.175+08 92d41b9e-5436-4c25-b181-973fa389f185 1
+47775a01-00ef-4500-82ee-04b5536aaeea 钢筋计 90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0 90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0 90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0 t YKGJ-22XX 2020-06-05 14:50:25.536+08 2020-07-06 14:50:31.895+08 92d41b9e-5436-4c25-b181-973fa389f185 4
+9c12215f-afab-45e9-8341-1e487df6d020 光栅光纤解调仪 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 t MWY-FBG-DS800 2020-05-20 09:22:50.295+08 2020-06-24 15:22:07.21+08 19d2071b-8a31-4f00-a984-a02a81fd50f7 1
+1aa0fcb2-1f26-4596-9211-f028c369fbcd 轴力计 90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0 90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0 90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0 t YKZL-31XX 2020-06-05 14:49:19.895+08 2020-06-22 11:06:22.12+08 92d41b9e-5436-4c25-b181-973fa389f185 4
+3ade0dca-d01e-4b1f-a1af-4948163e6902 水位计 90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0 90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0 90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0 t YKSW-41XX 2020-06-05 14:51:20.983+08 2020-06-22 11:06:30.157+08 92d41b9e-5436-4c25-b181-973fa389f185 4
+06cc1b7c-e6a3-4caf-9b5a-0e7ab8800ec2 光纤应变计 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 t MWY-FBG-SWBM 2020-05-20 09:26:32.51+08 2020-06-24 15:22:10.339+08 19d2071b-8a31-4f00-a984-a02a81fd50f7 4
+6a94d3b4-a64c-48d2-be57-dfbd7f20c530 虚拟DTU 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 t MWY-V-WG 2020-05-20 11:50:17.605+08 2020-06-24 15:22:13.521+08 19d2071b-8a31-4f00-a984-a02a81fd50f7 1
+5fec42a4-44a4-46e1-afba-17c79de7e09c 智能数据传输模块 38913139-1273-4b5a-9155-e4aff0fc89ee 38913139-1273-4b5a-9155-e4aff0fc89ee 38913139-1273-4b5a-9155-e4aff0fc89ee f SOUTH-DCH1 2020-06-12 10:02:36.332+08 2020-06-12 10:02:36.332+08 \N 1
+30c2c04a-0810-4f90-91cf-d49b9ed855be 激光位移计 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN640 2020-06-11 17:41:16.021+08 2020-06-15 10:35:34.892+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+e3d9aa70-13e8-419c-939b-953b239eb4b0 超声波风速风向仪 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN100 2020-06-11 17:32:44.091+08 2020-06-15 10:35:39.279+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+61f8ca5a-27a4-4e6e-8314-7b989dc3f178 空气温湿度计 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN110 2020-06-11 17:08:13.998+08 2020-06-15 10:35:44.102+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+7d85285c-28e9-44e3-b920-793850693e3a 倾角仪 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd t SAD-S005A 2020-06-10 17:08:53.377+08 2020-06-15 10:43:19.529+08 9f0e639f-37d3-4661-bf82-808a6291df48 4
+8485f6ac-e9d2-4f9f-a94d-0a3a3c516fea 倾角仪 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd t SADS-015A 2020-06-10 17:12:06.73+08 2020-06-15 10:43:22.794+08 9f0e639f-37d3-4661-bf82-808a6291df48 4
+537ca657-4262-4143-a1fd-7050c3795634 水位计 38913139-1273-4b5a-9155-e4aff0fc89ee 38913139-1273-4b5a-9155-e4aff0fc89ee 38913139-1273-4b5a-9155-e4aff0fc89ee f SWP-0.2G 2020-06-15 10:48:34.959+08 2020-06-15 10:48:34.959+08 \N 4
+c3507ba4-b2b5-45b8-aecb-84079c90649d 综合采集仪 4f529033-1917-4df3-80db-81efffdf28bf 4f529033-1917-4df3-80db-81efffdf28bf 4f529033-1917-4df3-80db-81efffdf28bf t IP-Logger-03 2020-06-28 11:29:02.953+08 2020-07-01 10:58:20.246+08 de2f4d46-1d32-4109-b909-a013dabfa58a 1
+d246af39-fb67-4750-8a25-d05680a359b3 倾角传感器 4f529033-1917-4df3-80db-81efffdf28bf 4f529033-1917-4df3-80db-81efffdf28bf 4f529033-1917-4df3-80db-81efffdf28bf t IP-2000 2020-06-29 09:57:57.712+08 2020-07-01 10:58:24.48+08 de2f4d46-1d32-4109-b909-a013dabfa58a 4
+c67f1f58-3886-4294-835b-b48db34d96e3 水位传感器 4f529033-1917-4df3-80db-81efffdf28bf 4f529033-1917-4df3-80db-81efffdf28bf 4f529033-1917-4df3-80db-81efffdf28bf t DLK20-485 2020-06-29 16:12:12.845+08 2020-07-01 10:58:28.57+08 de2f4d46-1d32-4109-b909-a013dabfa58a 4
+1a7f1970-6142-4919-a1e7-110829051ba9 水位计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-YWJ-GPRS8 2020-06-16 14:26:24.058+08 2020-06-17 13:50:56.209+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+59ffec5d-7c08-417e-bddc-8483466e1d66 信号转换模块 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t CM11 2020-06-10 16:55:56.55+08 2020-06-18 11:49:58.042+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+a999f92a-a9c4-4b33-a805-9bbb221f1935 无线数据采集终端 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-Node8-GPRS 2020-06-15 17:15:30.522+08 2020-06-18 15:17:00.798+08 005e2048-b7e8-4f7c-847f-e9918a66414d 1
+a8180277-ba74-44e1-a3bc-b408e290f742 磁式静力水准仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-CSHLS 2020-07-02 10:28:22.757+08 2020-07-03 09:30:20.601+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+2b1ac1f2-3501-4eb7-882b-59c5f346ad98 温度传感器 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-T 2020-06-24 09:49:46.91+08 2020-06-24 09:51:23.209+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+5865ba02-99d8-4649-a200-c40dfa917982 数据采集器 f38c8678-6245-4d4c-b6c2-b753ffe51a91 f38c8678-6245-4d4c-b6c2-b753ffe51a91 f38c8678-6245-4d4c-b6c2-b753ffe51a91 t CR1000X 2020-07-01 13:42:35.875+08 2020-07-07 09:21:35.524+08 8b21d12e-9bf9-4c00-8380-74aec0c58771 1
+75c9bb71-afbd-4667-8958-1c195663e0f6 多信道基站 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 t iCIVIL-3013 2020-07-20 14:34:10.839+08 2020-07-27 15:17:16.105+08 9cfcaef5-1af4-4e58-a074-4321b6cc7379 0
+f54dc0a0-6317-4a46-9f09-4d8024ff6959 采集仪 10b1641f-9368-4783-ab0f-85301fbe0b57 10b1641f-9368-4783-ab0f-85301fbe0b57 10b1641f-9368-4783-ab0f-85301fbe0b57 t RT2000 2020-07-20 16:27:00.551+08 2020-07-21 10:28:25.218+08 1d34edcf-e610-4987-980e-dbf2fa6a803a 1
+069e9c4f-794e-4b89-abc9-d53ab5d5cf7a GNSS 2abdd5b8-eda7-4f9d-b63c-e16753db1ef1 2abdd5b8-eda7-4f9d-b63c-e16753db1ef1 2abdd5b8-eda7-4f9d-b63c-e16753db1ef1 t M300 GNSS 2020-07-20 09:49:47.226+08 2020-08-10 15:22:44.355+08 a53ff2c9-fe4b-40b2-9384-d238618466ce 4
+b9092f6a-8c04-44c9-97ea-49b5389f5580 雨量计 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 t iCIVIL-4005L 2020-07-21 15:30:21.73+08 2020-07-27 15:17:25.223+08 9cfcaef5-1af4-4e58-a074-4321b6cc7379 4
+9a1a0afd-566e-45a2-8286-147f760679a4 崩塌计 10b1641f-9368-4783-ab0f-85301fbe0b57 10b1641f-9368-4783-ab0f-85301fbe0b57 10b1641f-9368-4783-ab0f-85301fbe0b57 t RT-2000BT 2020-07-03 11:01:14.996+08 2020-07-22 08:48:22.295+08 1d34edcf-e610-4987-980e-dbf2fa6a803a 4
+ff948ead-5a62-4990-b5c9-a440be471988 北斗星通接收机 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t C200 2020-07-23 13:36:21.041+08 2020-07-23 13:46:51.73+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+8581898c-d047-4cdc-8ccc-ef33a1567435 位移采集器 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC 2020-07-31 11:04:05.423+08 2020-08-10 13:43:39.962+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 1
+5b58e9d2-f305-4ded-8863-c346e916d5e7 激光位移计 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC-207DS 2020-08-04 11:14:39.06+08 2020-08-13 15:06:49.816+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 4
+c283a48d-8843-4cb6-9c01-336738a8137a 振弦采集仪 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC-Micro-08MOM1 2020-08-03 08:43:47.564+08 2020-10-13 17:12:32.987+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 1
+3bfe9ce6-f4d9-4822-968e-3649d5eee799 阵列式位移计 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC-212DS 2020-07-31 11:04:47.25+08 2020-08-10 13:43:44.754+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 4
+07977267-d666-4b82-8976-d533e9afde5b 水质监测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-SZJC05-V1.00 2020-08-05 16:54:52.103+08 2020-08-06 10:04:07.939+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+58f5081b-0b4e-4f26-853f-22ef0d1ea318 RTU 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 t JR9620 2020-08-27 16:08:53.955+08 2020-09-03 15:35:51.93+08 57a0b61a-7418-4200-9df8-2389ceabf0ab 1
+11b16ed9-a251-4907-b941-5a31ea559da1 电表 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t DTSD79-W1-380V 实际电能值=表读数值*互感系数(系数可配置) 2020-08-13 09:25:55.034+08 2020-08-13 10:03:38.221+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+6e1d455f-6dc1-4237-b1f2-de550f8dbd0e 全站仪 2831da9e-1815-47e1-a77e-67843477a527 2831da9e-1815-47e1-a77e-67843477a527 2831da9e-1815-47e1-a77e-67843477a527 f TM50_0.5_H 2020-08-14 16:22:21.497+08 2020-08-14 16:22:21.497+08 \N 1
+7599bfb7-18fc-40c7-be52-ff9fd0d1519e 直角小棱镜 2831da9e-1815-47e1-a77e-67843477a527 2831da9e-1815-47e1-a77e-67843477a527 2831da9e-1815-47e1-a77e-67843477a527 t L 2020-08-14 16:25:20.35+08 2020-08-14 16:34:24.341+08 cde1d1ef-6811-4c85-b365-c8dc7be87675 4
+2ebd818a-1949-4633-b46d-d923cc2bec7b 雨量计 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC-105DS 2020-08-14 11:53:53.172+08 2020-08-14 16:40:24.401+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 4
+8a59ee46-6582-4f9b-a696-f2025fca9eda 土壤温湿度计 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC-106DS 2020-08-14 15:25:23.084+08 2020-08-14 16:40:29.324+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 4
+6b55f70b-4626-47f5-b8fa-10f76bf80c68 拉线式位移计 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC-206DS100 2020-08-18 08:53:48.589+08 2020-08-18 10:46:47.459+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 4
+e0a57272-b5e1-4160-b62d-98cc9dcd10ca NB-IOT节点 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-iFWL-NB-IOT 2020-08-18 11:14:36.219+08 2020-08-18 11:23:29.85+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+032d4203-60ef-4d64-9888-530facf358ff 液压静力水准仪 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN621 2020-08-21 10:26:19.995+08 2020-08-21 14:36:01.131+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+945563fe-656a-461e-8dca-7a4b2edbf9d0 光纤测温主机 dc9a58ac-add9-4e6b-8b9b-36a0b4866d47 dc9a58ac-add9-4e6b-8b9b-36a0b4866d47 dc9a58ac-add9-4e6b-8b9b-36a0b4866d47 f BST220-08D08 2020-08-26 13:29:30.015+08 2020-08-26 13:32:43.444+08 \N 1
+cc3c245e-aa6a-4e4e-831b-780769ec41ca 测温光缆 dc9a58ac-add9-4e6b-8b9b-36a0b4866d47 dc9a58ac-add9-4e6b-8b9b-36a0b4866d47 dc9a58ac-add9-4e6b-8b9b-36a0b4866d47 f sss 2020-08-26 13:33:13.414+08 2020-08-26 13:33:13.414+08 \N 4
+8f3e91ce-4354-4d6a-826a-c727aaabaa58 测试传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-CGQ 2020-09-01 10:29:11.198+08 2020-09-01 10:34:33.192+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+d876d84c-b881-4ef4-a79d-8a60b372c964 高端空气净化器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f FS-AIRClear 2020-09-01 11:23:08.024+08 2020-09-01 11:23:08.024+08 \N 4
+f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43 倾角采集单元 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 t iCIVIL-2302-2L 2020-07-20 17:54:25.259+08 2020-09-14 13:57:28.885+08 9cfcaef5-1af4-4e58-a074-4321b6cc7379 1
+207df42a-f8cf-47d0-a4bc-d1d5d9114928 地灾摄像头 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-JP-C83CW 2020-09-10 11:15:15.26+08 2020-11-20 10:27:33.196+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+2a7828f8-5044-43fb-9435-9a59ec4d769a GNSS 19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2 19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2 19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2 t GNSS 虚拟的GNNS设备,非直接接入使用 2020-09-11 14:36:39.58+08 2020-09-11 15:07:07.65+08 ade25a08-2f33-44ac-8a49-a4fe690e3a57 4
+fc096555-1b1d-4526-a6d2-a734b1d313fd 超高精度双轴倾角传感器 0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273 0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273 0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273 f AIS 2000 2020-09-01 14:32:02.463+08 2020-09-03 10:03:56.438+08 \N 4
+518c0b84-693f-4a2d-8f80-1ef2cbc6c3ab 多功能监测仪 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 t zx001-D 2020-09-04 12:04:26.557+08 2020-10-21 09:53:50.821+08 57a0b61a-7418-4200-9df8-2389ceabf0ab 4
+f922cc6e-672b-4f59-a90e-2499ecfc1d24 多功能监测仪 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 t zx001 2020-09-04 14:47:20.783+08 2020-09-04 17:10:30.642+08 57a0b61a-7418-4200-9df8-2389ceabf0ab 4
+899def98-516b-4c5f-a7e8-2fd48018bf12 倾角传感器 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 t LVT526H 2020-08-27 16:38:22.109+08 2020-09-03 15:35:41.799+08 57a0b61a-7418-4200-9df8-2389ceabf0ab 4
+35e7c6a8-9125-4612-889d-259e09a24735 雨量计 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 t ZXYL500 2020-08-27 16:22:16.978+08 2020-09-03 15:35:47.013+08 57a0b61a-7418-4200-9df8-2389ceabf0ab 4
+33a769c0-0ef3-47dd-ab22-3e86247259eb 倾角计 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 t iCIVIL-2302 2020-09-11 13:29:23.069+08 2020-09-14 13:57:24.167+08 9cfcaef5-1af4-4e58-a074-4321b6cc7379 4
+a2885ce6-68b4-46e7-8dc6-fda47f2ad7bf 水分计 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 t DSW-T1W1 2020-09-15 08:40:27.822+08 2020-09-15 09:41:45.61+08 0c9fca00-5fd3-43ef-8264-09333066ff13 4
+4a7b1546-e1c1-4103-8fd0-baa6ce39ab2c 振弦式多点位移计 8bb8c871-dd83-4665-8378-1ae66927181a 8bb8c871-dd83-4665-8378-1ae66927181a 8bb8c871-dd83-4665-8378-1ae66927181a t DDWYJ-5002 2020-09-15 08:59:09.146+08 2020-09-15 09:41:50.557+08 6953cb17-93d1-43e9-b65a-2b0990bc0049 4
+8523278f-0788-4ef6-8669-64d28b348c59 直角小棱镜 2831da9e-1815-47e1-a77e-67843477a527 2831da9e-1815-47e1-a77e-67843477a527 2831da9e-1815-47e1-a77e-67843477a527 t L-m 单位 米 2020-09-18 11:09:34.118+08 2020-09-18 11:13:10.948+08 cde1d1ef-6811-4c85-b365-c8dc7be87675 4
+343d74d9-fc95-40d7-930c-e0cd01536d55 节点传感器 10b1641f-9368-4783-ab0f-85301fbe0b57 10b1641f-9368-4783-ab0f-85301fbe0b57 10b1641f-9368-4783-ab0f-85301fbe0b57 t RT-1010 2020-09-17 16:42:41.355+08 2021-01-25 10:02:35.901+08 1d34edcf-e610-4987-980e-dbf2fa6a803a 4
+55f72e62-0922-4975-9714-058decf7a14d 方盒形加湿器 f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f SD01 自蒸发式(4L) 2020-09-07 16:10:09.066+08 2020-10-15 14:33:16.922+08 \N 4
+c2dbdbb3-32a5-4be9-8b5a-530d8087ffe5 一体化水位计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-YTSW-JC 2020-11-10 09:02:26.682+08 2020-11-13 08:34:09.445+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+c251c010-afd1-42d0-9d85-e044a6d51a8a 位移计 256d53e2-0a91-4903-9753-736649588b98 256d53e2-0a91-4903-9753-736649588b98 256d53e2-0a91-4903-9753-736649588b98 t TD-WY 2020-12-31 14:28:18.765+08 2021-01-06 11:33:16.277+08 9d5e90d5-269a-4683-9010-34bd32ed70f6 4
+04ffee3d-0572-491c-9291-82dbbf14e7d4 地应力计 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC-DYL200 2020-10-13 10:08:39.374+08 2020-10-13 10:26:39.744+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 4
+92520c27-c002-4a35-84f0-dae3238662ae 三维变形监测阵列 10b1641f-9368-4783-ab0f-85301fbe0b57 10b1641f-9368-4783-ab0f-85301fbe0b57 10b1641f-9368-4783-ab0f-85301fbe0b57 t RT-1010 2020-09-17 16:40:25.93+08 2021-01-25 15:35:19.348+08 1d34edcf-e610-4987-980e-dbf2fa6a803a 1
+e6b4e767-9ae2-459f-99fc-042b9d6af678 风速仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-FS 2020-09-28 10:33:27.918+08 2020-09-28 10:58:16.337+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+455f2a29-2660-4cfa-97f9-ef7f357d59d6 风向仪 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-FX 2020-09-28 10:45:02.861+08 2020-09-28 10:58:18.734+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+b6d47de4-d27f-45de-a8b2-adfedc7f0f6a 立柱形加湿器 f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f SD02 超声波式(9L) 2020-09-21 09:55:14.213+08 2020-10-15 14:33:19.324+08 \N 4
+f84896ea-8908-41e9-9e30-371a39cd4261 激光测距仪 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc t AX-FTM-50S 2020-10-29 16:40:39.24+08 2020-10-29 16:47:04.839+08 e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5 4
+4452ff6a-859b-45e6-9e9c-c6b59ee3667b 倾斜仪 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 t TAC01 2020-10-09 14:17:46.835+08 2020-12-30 09:38:42.805+08 980b9cf9-1073-4a81-b777-0d29ac8237d2 4
+f89c588a-f68a-4208-857b-555022da9f9e 智慧小区摄像头 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t C5Si 2020-10-19 17:25:27.856+08 2020-10-21 16:18:43.113+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+e33b5ca8-307d-47dc-afbc-01098220b4ac 液位计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MPM4700_gprs 非微功耗 2020-09-29 09:28:13.396+08 2020-09-29 10:49:07.463+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+e4de5a5f-c4cc-4e7e-bb0b-b34c28a89925 塔机监测传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-TDJC06-V1.00 2020-09-29 11:19:58.818+08 2020-09-29 11:21:07.598+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+d26881e7-f69e-4b7d-9041-47009bd2c298 湿度传感器 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 t BSIL-H 2020-10-23 17:03:59.944+08 2020-10-23 17:05:34.919+08 4f8482c3-8bc4-4b8c-af3c-c935faed0aef 4
+fa3e1751-abcf-43d6-89d5-ad9bc9a979b6 立柱形加湿器 f9927e7e-69c2-439e-916f-4981e6821dfa f9927e7e-69c2-439e-916f-4981e6821dfa f9927e7e-69c2-439e-916f-4981e6821dfa f SD02 超声波式(9L) 2020-10-10 10:46:03.614+08 2020-10-10 10:46:03.614+08 \N 4
+f0d5077b-4260-422c-87e3-92d13d136ebf 方盒形加湿器 f9927e7e-69c2-439e-916f-4981e6821dfa f9927e7e-69c2-439e-916f-4981e6821dfa f9927e7e-69c2-439e-916f-4981e6821dfa f SD01 自蒸发式(4L) 2020-10-10 10:46:11.456+08 2020-10-10 10:46:11.456+08 \N 4
+e3e8ca1e-1676-4b76-96ed-131ba8516599 土壤温湿度 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-WSD-RTU 2020-11-04 09:56:29.44+08 2020-11-23 16:46:09.277+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+1450b04e-214d-47b0-8e32-def5a361cc48 声光告警器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-Alarm-RTU 2020-10-16 14:22:53.581+08 2020-11-24 15:49:44.321+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+2d0ff832-a7e0-4029-94bf-d7203c1fa793 拉线位移传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LXWY-RTU 2020-11-04 10:06:19.399+08 2020-11-20 10:58:00.626+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+ec7fa28a-0898-4cb3-a5d0-098d568c1e69 裂缝计 8bb8c871-dd83-4665-8378-1ae66927181a 8bb8c871-dd83-4665-8378-1ae66927181a 8bb8c871-dd83-4665-8378-1ae66927181a t AX-LFXX-A 2020-10-30 14:32:49.855+08 2020-10-30 15:20:01.419+08 6953cb17-93d1-43e9-b65a-2b0990bc0049 4
+ebfa9f73-9cbe-4629-9e1c-365f58c1ebc2 螺栓轴力计 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 t RN550D 2020-10-28 10:07:56.831+08 2020-11-11 16:53:47.653+08 1b8a807b-0029-4862-b3e8-f0e60c713a62 4
+8da5aeab-4a1e-4bb5-afe2-67cadfc4700a 动静态应变传感器 55ecba2d-f3da-4ebb-b58d-7cc16522faad 55ecba2d-f3da-4ebb-b58d-7cc16522faad 55ecba2d-f3da-4ebb-b58d-7cc16522faad t FTYB-3000B 2020-10-19 14:17:50.529+08 2020-10-30 16:39:30.558+08 5646c79d-1071-4fa1-ba75-ffc8abf95e65 4
+f9f36adc-75b4-4140-a14e-73f8172228d7 静力水准仪 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 t SMT-S 2020-10-26 13:25:32.916+08 2020-10-29 13:07:56.732+08 3ced2ad4-50ab-4f5d-b3ca-fc19063f1879 4
+eefc80f3-265d-475f-b00b-d44016522eab 静力水准仪 55ecba2d-f3da-4ebb-b58d-7cc16522faad 55ecba2d-f3da-4ebb-b58d-7cc16522faad 55ecba2d-f3da-4ebb-b58d-7cc16522faad t FTJS-1000 2020-10-19 14:20:08.547+08 2020-10-30 16:39:34.862+08 5646c79d-1071-4fa1-ba75-ffc8abf95e65 4
+b6f7c250-9eeb-4225-8c5e-68b766f03649 风速风向仪 e54b85b0-151e-4b74-b360-a8ae65addd46 e54b85b0-151e-4b74-b360-a8ae65addd46 e54b85b0-151e-4b74-b360-a8ae65addd46 t AX-YLJ-02 2020-11-02 10:05:36.102+08 2020-11-02 11:21:56.29+08 05ef6403-9f87-4092-8b09-be1cfc2f9369 4
+30d005dd-93a1-4c1a-ac10-8bdedf26bab4 门禁设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f FS-DoorAlarm 2020-11-02 13:44:41.972+08 2020-11-02 13:44:41.972+08 \N 4
+c51512a6-3e90-4b6e-8a21-987464b10ca9 雨量 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-YL-RTU 2020-11-04 10:10:46.168+08 2021-02-05 15:30:54.329+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+0b84defc-2160-4d4a-8d71-6f350b4d6666 激光测距仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LRF-RTU 2020-10-16 11:41:30.072+08 2021-02-20 15:03:14.767+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+f3a9238e-8d1c-4876-a81d-f2bb05755585 红外客流计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-WINZ-1001B 外购 2020-11-04 09:48:42.707+08 2020-11-06 11:34:16.14+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+fb922722-9262-470f-8064-4b78234fa802 一体化水位计 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-YTSW 2020-11-10 09:01:05.478+08 2020-11-13 14:54:14.113+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+b7dd781d-dba7-4228-b49f-8aee75e42625 孔隙水压计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-KY-RTU 2020-10-16 13:52:59.048+08 2021-02-09 14:18:17.744+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+c02e4b7c-e6b7-4d83-969c-34059f84af1f 裂缝计 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 t YYPS1010 2020-11-26 10:47:49.898+08 2020-11-26 13:07:37.767+08 57a0b61a-7418-4200-9df8-2389ceabf0ab 4
+55a923ff-6180-4aa1-b44b-257b7dc587ed TD210 d1efb331-43f4-4d42-8a9f-72a328b316a3 d1efb331-43f4-4d42-8a9f-72a328b316a3 d1efb331-43f4-4d42-8a9f-72a328b316a3 f TD210-A 2020-11-17 09:55:25.488+08 2020-11-17 09:55:25.488+08 \N 0
+86aa83da-35f2-4247-8660-4d23b9c30a1c 泥位计 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 t YYZY9050 2020-11-26 10:57:51.653+08 2020-11-26 13:54:38.216+08 57a0b61a-7418-4200-9df8-2389ceabf0ab 4
+90e48651-6ab9-4f11-95e9-c2c7eb4c3c15 振弦式土压力计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-TY-RTU 2020-11-16 09:26:32.437+08 2021-02-05 15:30:48.845+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+cce5d34b-3464-4566-81e6-3ff2540af13e 综合采集仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-CP-SP-V1.00 2020-12-28 14:09:52.525+08 2021-02-01 11:49:31.112+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+92bbac70-53a3-4d25-b8ab-b4287c52359d 空气净化器 f9927e7e-69c2-439e-916f-4981e6821dfa f9927e7e-69c2-439e-916f-4981e6821dfa f9927e7e-69c2-439e-916f-4981e6821dfa t K20 2020-11-11 17:46:31.983+08 2020-11-18 17:17:00.985+08 b5ea9716-5d8c-450c-971e-33e25652dea1 4
+75ab7fed-fb74-48c5-8cf9-898b3fc62358 倾角传感器02 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 t yywj001 2020-11-27 09:56:17.667+08 2020-11-27 17:21:39.491+08 57a0b61a-7418-4200-9df8-2389ceabf0ab 4
+af9ec966-1c73-4e23-bae8-5ffcb4661942 单点位移计(振弦式) 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 t MAS-DWY-10 2020-11-19 09:19:24.236+08 2020-11-20 09:01:21.657+08 005e2048-b7e8-4f7c-847f-e9918a66414d 4
+f963b588-8c55-4b9b-b455-8e7302d88408 振弦采集仪 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC-Micro-08MOM1-JT 2020-11-24 11:13:14.735+08 2020-11-24 14:51:07.739+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 1
+19edfd93-0bd4-4c71-85c0-647971fa008a 双轴倾角传感器 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 t QJ02-15R 2020-12-11 08:53:07.228+08 2020-12-11 15:41:37.592+08 ce4fbec7-4440-489a-be8b-fd328339df21 4
+aeced422-061a-4b9f-bf4c-1e9597f5b016 锚索计 7471567c-43bd-422d-9d05-9742a9a517c5 7471567c-43bd-422d-9d05-9742a9a517c5 7471567c-43bd-422d-9d05-9742a9a517c5 t AC-MS 2020-12-16 15:35:33.599+08 2020-12-17 10:00:32.526+08 995100fe-ae10-4774-a39f-817f580c578c 4
+7737f9b3-195f-465e-b563-1a4f509e38ce 位移式水准仪 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 t SZ01-100R 2020-12-11 08:53:58.623+08 2020-12-15 09:15:31.236+08 ce4fbec7-4440-489a-be8b-fd328339df21 4
+dac7cbf1-b98a-4c95-9ff7-14b1602c494f 裂缝传感器 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 t LF01 2020-12-11 08:54:51.193+08 2020-12-11 15:41:46.776+08 ce4fbec7-4440-489a-be8b-fd328339df21 4
+403dcab2-df50-4fda-a92e-c2100bb9a242 气体监测仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-GDSFHQTJCY 原来型号OS60Y 2020-12-08 17:06:13.989+08 2020-12-09 14:39:36.011+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+8001366f-40a9-4e0c-affa-d050c5eacf17 人员定位基站 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ZGBJZ 2020-12-09 13:47:35.626+08 2020-12-09 14:39:40.66+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+5ab3d59e-efe3-45c3-b69d-36ec4af9fd8c 人员定位标签 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-ZGBBQ 2020-12-09 13:58:20.277+08 2020-12-09 14:39:45.527+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+6d6210bc-a5e7-439d-b731-e6efdeada2f7 温度传感器 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 t WD 2020-12-11 08:56:50.259+08 2020-12-11 15:41:51.947+08 ce4fbec7-4440-489a-be8b-fd328339df21 4
+8c5826bc-d7e6-4506-9dab-ded01f4c2346 数据采集仪 eb348dfa-0075-47b5-b190-4e10b6c5c6be eb348dfa-0075-47b5-b190-4e10b6c5c6be eb348dfa-0075-47b5-b190-4e10b6c5c6be t VW100X 2020-12-10 15:58:14.689+08 2020-12-11 16:47:04.395+08 b368dca7-d851-4853-bf37-d16c775a9d9e 1
+35ccbe8e-d5fd-462c-9b89-c1c128a9f4f9 轴力计 7471567c-43bd-422d-9d05-9742a9a517c5 7471567c-43bd-422d-9d05-9742a9a517c5 7471567c-43bd-422d-9d05-9742a9a517c5 t AC-ZL 2020-12-16 15:38:50.327+08 2020-12-17 10:00:37.338+08 995100fe-ae10-4774-a39f-817f580c578c 4
+90f77fb4-1b78-4f30-b558-8026aa10f6db 三轴测振仪 9f26c140-684e-41f5-80a9-b0c1f660b9f7 9f26c140-684e-41f5-80a9-b0c1f660b9f7 9f26c140-684e-41f5-80a9-b0c1f660b9f7 t TH-VBR-H 2020-12-21 17:30:31.21+08 2020-12-22 09:51:20.634+08 d1c2b73f-7215-4523-bb92-43041584ab1a 4
+19f735aa-e557-4795-93bf-fc5e8c57b47a 应变计 7471567c-43bd-422d-9d05-9742a9a517c5 7471567c-43bd-422d-9d05-9742a9a517c5 7471567c-43bd-422d-9d05-9742a9a517c5 t AC-YB 2020-12-16 15:29:32.231+08 2020-12-17 10:00:27.164+08 995100fe-ae10-4774-a39f-817f580c578c 4
+4f041931-dc1f-4868-985b-e5f1d27b1d38 振弦采集仪 7471567c-43bd-422d-9d05-9742a9a517c5 7471567c-43bd-422d-9d05-9742a9a517c5 7471567c-43bd-422d-9d05-9742a9a517c5 t AC-8/16 2020-12-16 17:00:14.074+08 2020-12-17 10:00:46.722+08 995100fe-ae10-4774-a39f-817f580c578c 1
+167e3709-030c-4724-bbad-4060c61870bc 倾角传感器 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d t HS726T 2020-12-21 17:00:24.177+08 2020-12-21 17:43:37.303+08 10c8af19-c2ad-4e25-be28-63f5a359a41c 4
+1a190e1d-27a0-4b3a-8635-8737f24de024 振弦采集仪 7471567c-43bd-422d-9d05-9742a9a517c5 7471567c-43bd-422d-9d05-9742a9a517c5 7471567c-43bd-422d-9d05-9742a9a517c5 t AC-32 2020-12-16 15:27:44.47+08 2020-12-24 12:36:59.18+08 995100fe-ae10-4774-a39f-817f580c578c 1
+d67fea40-a63c-4087-b5fd-5e5f0c387893 CA点式振动位移计 17e2c509-1128-42d6-89b5-5058d7a2a5cd 17e2c509-1128-42d6-89b5-5058d7a2a5cd 17e2c509-1128-42d6-89b5-5058d7a2a5cd t CA-QJ4G 2020-12-24 14:19:13.054+08 2020-12-30 09:04:44.822+08 3b23d906-05d9-484e-9f08-7a68831770e8 4
+7b536454-20a7-4c1b-bfeb-4a0f018d2673 电源控制模块 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e t ANC-JD01 2020-12-23 16:00:33.812+08 2020-12-25 12:08:18.686+08 f3f08d8d-1644-4a97-b5ab-a94039b1907c 4
+085307b7-181b-4059-9e81-1cbfff8fa061 WiFi客流计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-wifi-People 2020-12-03 17:40:46.294+08 2021-01-04 16:41:03.018+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+7c054865-5f77-4df5-9d1b-ed2c6f1bb27e 倾角仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-WXCX-XX-V1.00 2020-12-29 14:11:13.094+08 2021-01-29 10:21:45.936+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+d9aab088-57f5-43ba-b30b-3342219a4b75 超高精度双轴倾角传感器 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t AIS 2000 2020-09-02 17:43:02.608+08 2020-12-30 15:53:07.567+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+b44eeccf-0eed-4785-a539-0122bcd2a99f http_device ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f lk_http 2021-01-04 09:20:07.804+08 2021-01-04 09:20:07.804+08 \N 1
+e2ad2fb6-75a3-490f-82ae-eac117102885 泥水位计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-NW-RTU 2021-01-18 14:14:29.606+08 2021-02-05 15:31:06.584+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+7d999707-8940-47f8-995e-f50b44e48ede 加速度计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-JSD-RTU 2021-01-18 12:37:46.482+08 2021-02-05 15:30:58.34+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+d1b7163a-96fb-4364-a1ec-73b29be3dbc0 土壤温度 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-TW-RTU 2021-01-18 14:04:59.384+08 2021-02-04 16:17:29.984+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+2d4d2d3b-44b4-43ac-bb98-7c02fcf76152 全站仪 611a5d96-e77e-4ca6-925d-30609b1f57df 611a5d96-e77e-4ca6-925d-30609b1f57df 611a5d96-e77e-4ca6-925d-30609b1f57df t TS60 2021-01-07 08:51:22.849+08 2021-01-11 13:07:20.063+08 897e5bb1-9d4c-484c-b565-397bd37d5c55 1
+27e93aa0-1ec0-40df-aa0e-de4152459a66 超声波风速风向FM-C-SX ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f FM-C-SX 2021-01-14 14:24:33.361+08 2021-01-14 14:24:33.361+08 \N 4
+ecf4b234-2797-4fbc-bf0d-0f3f41dbd017 倾角仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-QJ-RTU 2021-01-18 14:02:07.837+08 2021-02-04 15:53:44.533+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+c991c138-3b47-4a21-af81-9ba1df554176 盒式测斜仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-RTU-HGC01 2020-11-11 09:55:32.221+08 2021-01-18 17:21:15.376+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+daaea98a-a1a5-40c5-b34f-108d16d94b12 直角小棱镜 611a5d96-e77e-4ca6-925d-30609b1f57df 611a5d96-e77e-4ca6-925d-30609b1f57df 611a5d96-e77e-4ca6-925d-30609b1f57df t L-M 2021-01-07 08:53:43.276+08 2021-01-18 11:20:01.326+08 897e5bb1-9d4c-484c-b565-397bd37d5c55 4
+1dae2ae1-5be8-4cd2-824f-cc4948f75959 采集终端 256d53e2-0a91-4903-9753-736649588b98 256d53e2-0a91-4903-9753-736649588b98 256d53e2-0a91-4903-9753-736649588b98 t TDZD 2020-12-31 13:36:49.026+08 2021-01-06 11:33:03.653+08 9d5e90d5-269a-4683-9010-34bd32ed70f6 1
+7da4f815-e889-4b79-8b69-8fda271a954f 应变计 256d53e2-0a91-4903-9753-736649588b98 256d53e2-0a91-4903-9753-736649588b98 256d53e2-0a91-4903-9753-736649588b98 t TD-YB 2020-12-31 14:25:20.537+08 2021-01-06 11:33:07.609+08 9d5e90d5-269a-4683-9010-34bd32ed70f6 4
+406adc2f-6e40-43fc-832a-d6982677d5e1 温度计 256d53e2-0a91-4903-9753-736649588b98 256d53e2-0a91-4903-9753-736649588b98 256d53e2-0a91-4903-9753-736649588b98 t TD-WD 2020-12-31 14:26:55.455+08 2021-01-06 11:33:12.048+08 9d5e90d5-269a-4683-9010-34bd32ed70f6 4
+2d2bb5aa-7dae-4123-bf05-5cdc08d7480f 直角小棱镜 611a5d96-e77e-4ca6-925d-30609b1f57df 611a5d96-e77e-4ca6-925d-30609b1f57df 611a5d96-e77e-4ca6-925d-30609b1f57df t L 2021-01-08 17:46:14.764+08 2021-01-18 11:20:08.123+08 897e5bb1-9d4c-484c-b565-397bd37d5c55 4
+dadaf677-ed6c-4f61-ba61-d030f157dd14 激光测距 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-LRF-UpLoad 2021-01-26 15:59:08.519+08 2021-01-26 15:59:30.727+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+5ab5659c-c875-43de-a5cb-c2c09a6b738d 倾角仪Z轴 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-WXCX-XZ-JSD-V1.00 2021-01-25 15:07:40.85+08 2021-02-01 09:48:36.418+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+8f03b15b-fbb7-4bca-ae92-2230abf071b7 倾角仪X轴 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-WXCX-XX-JSD-V1.00 2021-01-19 10:14:04.384+08 2021-02-01 09:48:28.124+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+a7e6bd92-16dd-49b0-a4c1-115a6c8b272f 倾角仪Y轴 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-WXCX-XY-JSD-V1.0 2021-01-25 15:05:43.696+08 2021-02-01 09:48:32.182+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+1738d5bc-6a00-4ec6-813b-1ecd8ed014bd 固定式测斜仪 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 t PTYYZY9020 2021-01-27 13:54:55.082+08 2021-01-28 09:03:40.377+08 57a0b61a-7418-4200-9df8-2389ceabf0ab 4
+9baef129-7240-456d-819f-081ed682b6c6 GNSS 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 t PTYYPS2010 2021-01-27 13:50:41.004+08 2021-01-28 09:03:46.09+08 57a0b61a-7418-4200-9df8-2389ceabf0ab 4
+c948c019-e1f5-4a3d-a348-de60051d3e2e 裂缝计 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 t PTYYPS1010 2021-01-27 16:52:16.872+08 2021-01-29 10:23:05.036+08 57a0b61a-7418-4200-9df8-2389ceabf0ab 4
+aad44a46-f5ad-4b1c-b6a4-cff40950cfba 水位计 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 t PTYYZY9050 2021-01-28 09:45:57.594+08 2021-01-29 10:23:12.101+08 57a0b61a-7418-4200-9df8-2389ceabf0ab 4
+b4836295-511d-4752-99b6-099f9e59ec54 加速度计 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 t PTYYPS1012 2021-01-27 16:50:39.664+08 2021-02-01 09:32:57.599+08 57a0b61a-7418-4200-9df8-2389ceabf0ab 4
+10652dfa-31f2-41fa-b997-d6162cb01901 管式土壤含水计 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 t PTYYPS1016 2021-01-28 09:58:52.849+08 2021-02-01 09:33:02.657+08 57a0b61a-7418-4200-9df8-2389ceabf0ab 4
+998e19a5-71a8-484e-a7af-5ffe30f99e87 雨量计 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 t PTYYPS1014 2021-01-28 09:32:46.572+08 2021-02-02 11:57:09.138+08 57a0b61a-7418-4200-9df8-2389ceabf0ab 4
+c51a8eb3-9068-456f-9922-5934de559a71 综合采集仪振动 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-CP-SP-VIB-V1.00 2021-01-29 10:12:04.662+08 2021-02-01 11:48:32.671+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+408d0732-eb70-4420-89b3-8f5ab433528f 地灾(江西地灾) ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t RTU-Test 2021-02-04 16:04:59.946+08 2021-02-05 14:52:02.576+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+c677c2a2-bc09-4171-ad9c-f9ddfbf3d046 土壤含水计 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-HS-RTU 2021-01-18 14:09:49.686+08 2021-02-05 15:31:02.31+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+c892bb1b-57aa-4b52-b1eb-79172e95a8fb 人流量设备 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-RL-1.0-3 安吉升 2021-02-22 09:15:10.011+08 2021-02-23 14:09:48.366+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+18ab2f15-70ec-43ff-ab7c-717e4ad0c0cd 电表采集仪 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-DBCJY 2021-02-24 17:38:25.365+08 2021-02-24 17:50:51.687+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 1
+f8803e24-c7c9-4089-8f06-5a00433131b1 电表 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 t FS-HBJC-A 安科瑞 2021-02-24 09:24:53.436+08 2021-02-25 14:05:10.396+08 415309d1-0dfa-4a51-9446-c5d96a8357c2 4
+5b625df3-f714-4971-94a8-625e9c8812fc 倾角仪 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 t TAC11 2021-02-24 11:11:07.558+08 2021-02-26 08:39:36.935+08 980b9cf9-1073-4a81-b777-0d29ac8237d2 4
+\.
+
+
+--
+-- Data for Name: DeviceMetaInterface; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."DeviceMetaInterface" (id, "directType", "createdAt", "updatedAt", "deviceMetaId", "interfaceMetaId") FROM stdin;
+63ccdc3f-2ef3-49e7-915f-ff80e09bac85 2 2017-08-12 17:28:55.324+08 2017-08-12 17:28:55.324+08 6888837c-236d-4a0a-871e-ea506429a386 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+fd6dbe19-8ab2-4a43-8af7-b23d43ae2662 1 2017-08-12 17:28:55.33+08 2017-08-12 17:28:55.33+08 6888837c-236d-4a0a-871e-ea506429a386 3dfadb0e-7608-49e1-aa43-24f7442b424a
+95376b40-306e-4012-be53-636ef41d2c77 1 2017-08-12 17:30:28.171+08 2017-08-12 17:30:28.171+08 990ac51b-201f-4818-8ac0-06e9997719ed 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e2ecd847-3032-449a-9cc9-ce707443625a 1 2018-08-17 11:27:24.43+08 2018-08-17 11:27:24.43+08 0ca9c27a-7633-4d1b-b46b-aadf7ce9bf3b 96b665c2-5314-4144-83d3-7db169ef9416
+e3cc63f3-b29f-48f1-ada2-3ccd62b1411e 1 2018-08-17 11:33:00.263+08 2018-08-17 11:33:00.263+08 df1112e3-a161-4260-850f-8f6644389623 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+57caac26-053a-415f-839e-d361e644ee3e 1 2018-01-05 16:27:59.068+08 2018-01-05 16:27:59.068+08 771be2fa-a2f9-4ba8-8c08-76b091627b87 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+eb975f2c-94f0-4073-a10f-08e05c10b8d2 1 2017-08-28 19:12:24.835+08 2017-08-28 19:12:24.835+08 180c854a-5ace-4044-babd-b270f98fde6b ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
+e216deb2-87c1-4ce8-b05d-bb8fc10be4fa 1 2018-01-05 16:28:13.398+08 2018-01-05 16:28:13.398+08 d32eacce-7db0-4c15-b17c-f1d870389c14 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2675dfb4-47bb-46f4-a12c-5072f787a0c9 1 2018-01-08 14:56:09.887+08 2018-01-08 14:56:09.887+08 7c4c667b-dbf0-4c9b-9d7d-7ad9b61b200e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+830ef5ad-6a3a-424f-85ad-738d2d56dd0b 1 2018-01-08 16:27:56.737+08 2018-01-08 16:27:56.737+08 666e753c-f0b0-478d-b5f5-839117db13f9 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+767dbc44-602f-4917-b86d-efba3577b917 1 2018-01-08 16:40:09.753+08 2018-01-08 16:40:09.753+08 947fdddf-6d80-4972-88cc-601559ca3458 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e9f5d29f-4a74-4605-b6a6-e54423e4ec5d 1 2018-01-08 17:03:46.47+08 2018-01-08 17:03:46.47+08 cb339f74-5895-4180-a0dc-a3cf12151b0b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3ee7d849-8437-4af9-be58-2de548f11313 1 2017-08-26 16:17:23.305+08 2018-10-08 14:42:55.251+08 870242c3-963d-417d-85fa-21add06c9e0a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7943dd9a-0f5b-44d8-a527-2aa409ceb961 1 2018-10-11 09:06:27.303+08 2018-10-11 09:06:27.303+08 cce8a8e4-cd65-4f13-a554-eb06fa2b7caa 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e0fc5b6e-c095-463a-a8bf-9d1d817a0c2c 1 2018-01-08 18:00:05.703+08 2018-01-08 18:00:05.703+08 930f1b29-d056-40a8-9b86-62829634874c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3836aef4-bcdf-4260-948b-77c48608f2d5 1 2018-10-31 18:04:59.738+08 2018-10-31 18:08:47.458+08 c1831563-faaf-4e2a-9d49-6b483abbd040 3dfadb0e-7608-49e1-aa43-24f7442b424a
+3d35566b-919f-4f62-85b3-aec523ba926a 1 2018-11-12 16:40:05.523+08 2018-11-12 16:40:05.523+08 ffa967e5-e1cd-4c0d-9aff-643c16430446 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+50f0137c-73fb-4190-8d2a-20119eb43a23 1 2018-11-23 10:32:50.889+08 2018-11-23 10:32:50.889+08 87a47520-e1a3-474c-b8b2-b1fd5dd521a9 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+110d0b44-a52c-40a7-93d7-c2c0a186d3a0 1 2018-01-09 21:37:46.433+08 2018-01-09 21:37:46.433+08 d08c2f42-3528-4b5f-9f34-04deac7051c1 3dfadb0e-7608-49e1-aa43-24f7442b424a
+3d1a6c0e-0643-4673-9574-7a5485b67c39 2 2017-08-28 11:19:40.996+08 2017-08-28 11:19:40.996+08 31ec0204-1cc6-475a-bd8b-39ad4cda3a25 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+711866e3-2603-448a-8ba8-d800fca4e33b 1 2017-08-28 11:19:40.991+08 2017-08-28 11:19:47.967+08 31ec0204-1cc6-475a-bd8b-39ad4cda3a25 3dfadb0e-7608-49e1-aa43-24f7442b424a
+b58e5131-ff68-4dff-a8f8-e7dd0eac6e45 1 2018-08-17 11:17:05.435+08 2018-11-13 13:36:00.612+08 0f069d0a-8f7e-4480-b864-201a86725331 66537b16-1e7d-4823-b03e-676459f5891d
+42f2b43c-9dc0-4cdb-9b56-39957948609e 2 2018-01-09 21:37:46.436+08 2018-01-09 21:37:46.436+08 d08c2f42-3528-4b5f-9f34-04deac7051c1 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+939fefae-55d4-4666-b93d-2b2986560287 1 2018-01-12 10:08:09.315+08 2018-01-12 10:08:09.315+08 301f43b2-e055-4169-8a27-c3d69b246a19 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+477bfb00-3a30-4991-8bfa-858e9523eb97 1 2017-09-02 14:31:47.777+08 2018-11-17 14:06:55.897+08 112843b4-e834-4892-9ef3-260fe3d90c24 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+493e88a6-85ce-437e-a724-335dee6baf6d 1 2018-01-16 10:34:03.648+08 2018-01-16 10:34:03.648+08 70177dd0-b5ab-45c0-8338-a6f69138f85f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+afc4461e-21e8-48f5-998b-e9f2d2d51892 1 2018-01-16 10:34:03.979+08 2018-01-16 10:34:03.979+08 72b0bf25-78ae-4ab5-995b-c83cfbf52484 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4fc29cb4-5cc5-4470-b36d-fca10dfb4fe3 1 2017-09-04 09:36:21.635+08 2017-09-27 16:01:04.297+08 c9946e27-bce7-41eb-b341-d6b03a7f115f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f9c931f2-268b-4bae-b97a-47cde5e60eae 1 2017-08-28 21:20:45.579+08 2017-09-27 16:01:16.06+08 b3f251c1-ab5e-4427-8b38-9180d6544783 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cf1b2fb7-1992-4e93-b636-f7c81b1cf722 1 2017-08-28 20:27:58.367+08 2017-09-27 16:01:24.97+08 9e8050a9-f38a-45c3-a02b-40670bdf19b7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d4512b58-88c7-4ee7-b18e-2e027dad3add 1 2018-01-08 11:06:18.389+08 2018-03-28 23:08:55.889+08 962c0a4a-535e-4f86-a25c-f38e3aa6f144 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7ae238e5-3972-416b-9889-5388c3889fea 1 2017-08-26 15:51:32.548+08 2017-09-27 16:01:50.214+08 131c98fc-2216-4f0f-9cd3-581d88f9affd 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+93027b4e-7dc8-45ad-9bd2-d2f83f5da14b 1 2017-08-24 20:03:54.292+08 2017-09-27 16:02:43.265+08 38d818a3-1e2d-42bd-af74-e6ed5fe0c8fd 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a9419541-f580-469a-9faf-549b75863b52 1 2017-08-28 20:53:46.154+08 2017-09-27 16:04:05.403+08 193a9dcf-959d-4cd5-a186-637c11ae97a0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+08d16d99-4102-4efc-935f-5ec573bc7d2c 1 2017-09-02 14:59:34.579+08 2017-09-27 16:34:58.209+08 0a25e0b7-784b-46fb-8fa3-d1a99593f343 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+809a86cd-7765-4faf-9b2e-10dfda10b756 1 2018-01-05 16:50:29.989+08 2018-03-07 16:44:38.865+08 d55af283-4d11-4eb7-8099-890d98bfcc0c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8699fd4b-ba62-4d57-865d-9ad6f15997e2 1 2017-08-26 15:45:06.824+08 2017-09-27 16:41:24.369+08 d51cfe97-0f8a-4f38-95fb-34208b171056 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+fc85fde7-32df-4a08-bf0a-5dc35079ab6f 1 2018-01-16 10:34:04.388+08 2018-01-16 10:34:04.388+08 0bae88b4-e518-4869-96ea-c833160a9914 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a95cdc2e-5ed2-4d6d-9346-8a87c54e3c60 1 2018-01-09 11:10:39.244+08 2018-03-29 11:39:33.036+08 5c1ff344-5845-4376-8ea0-1ac8d45d9f3c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+574b7efb-9e96-411c-a7d0-02224c65c80c 2 2018-01-08 18:00:05.708+08 2018-03-13 23:10:09.424+08 930f1b29-d056-40a8-9b86-62829634874c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+db55d5aa-a374-4095-8420-55d6b1129f4a 1 2017-08-31 17:02:01.775+08 2017-09-27 17:58:45.313+08 39dc1e20-9e5e-4776-8459-5354261926fd 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7666945f-7f67-4996-9f31-f2e6d57daf3b 1 2017-09-02 14:47:06.941+08 2017-09-28 09:06:20.61+08 28abcb7f-eb40-406b-a798-fc280b30638e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ffa49fe5-f400-4a48-82a2-cf6dc26328c2 1 2017-08-26 15:59:26.858+08 2018-03-16 18:39:12.892+08 9110f259-e269-446d-afa3-798069f4534d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a8da373f-295d-41c8-8370-38f54425b4ae 1 2018-01-05 16:26:30.083+08 2018-06-26 10:45:34.789+08 2d9520e9-143b-48c2-960f-5c9dca7a21b4 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ed20e575-26ef-46bf-93a3-c9a1d7d099ce 1 2018-08-17 11:39:56.603+08 2018-08-17 11:39:56.603+08 46272932-067d-4fa2-87ac-85a866b4f691 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e4070f8f-14f7-42b3-b0cf-d7981072cb90 1 2018-01-05 17:40:36.047+08 2018-01-05 17:40:36.047+08 1f00228f-9138-4060-9b9b-1ae22f803af7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3bf63ed3-8ad5-4ac4-9fff-227a8abd7be2 1 2018-01-08 15:10:26.502+08 2018-03-12 15:18:52.252+08 f5f27d3f-b8fd-44ee-97e2-8a78748a424f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8c7a5c1d-30b5-4c7c-92a9-75eeb60fea98 1 2017-09-19 16:23:55.238+08 2017-09-19 16:23:55.238+08 98a8fd6f-cab9-47d3-88aa-8832962c931c 73c3b65f-2eb1-4465-9ead-47e699326a86
+3fc485df-6741-431d-a892-9ea00c094999 1 2017-09-04 14:12:42.494+08 2017-09-27 16:00:51.36+08 1d4b6c8a-8a37-4ba0-9612-ad63ea6f1f3a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cc5158b9-1eb4-4313-90e6-e3de0d17b31a 1 2017-09-06 18:47:18.566+08 2017-09-27 16:03:28.98+08 584a210b-20f2-49cf-906a-9d6b4883af09 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6b0f9f27-9cee-42f5-ba21-60413843980e 1 2017-09-12 17:44:48.568+08 2017-09-27 16:04:41.734+08 003540d0-616c-4611-92c1-1cd31005eabf 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e4418a0e-75b1-49b1-b2e7-081f5515c9e8 1 2017-09-08 09:20:57.953+08 2017-09-27 16:34:36.058+08 f9cf9002-bdbd-458c-8534-37db6183e217 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+252c23b3-3c8d-408c-a694-5b27600daa69 1 2017-09-04 19:04:13.353+08 2017-09-27 16:36:07.631+08 a0bf9003-9dbd-4cc7-8bea-7da81ce69f32 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+89797dc1-14f9-42c0-8db0-e6a802c0a024 1 2017-09-14 20:56:17.159+08 2017-09-27 16:38:32.916+08 fd8e5a82-2b93-4d83-9132-4666b974079d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a02c7304-9b7e-497d-9d53-00667d47295b 1 2017-09-16 12:22:16.713+08 2017-09-27 16:40:30.805+08 0357e07d-3afb-4d4b-b196-766688a5b2b2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ad0b4164-972d-458e-8f63-d16b24582168 1 2017-09-16 16:10:09.732+08 2017-09-27 16:40:57.863+08 aa9f0751-4576-42b2-b09b-a6c3959955df 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f16fa6ae-e48c-44d0-a906-8fe92d621c22 1 2017-09-14 14:53:06.099+08 2017-09-27 16:41:46.094+08 3415a2e9-2c44-402f-872c-f0187cef058f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9e5ed7e4-08fd-407c-a34c-6c293ae720cf 1 2017-09-14 14:50:50.8+08 2017-09-27 16:41:52.589+08 a96f169e-56b9-49c8-a5cd-caade25fbf14 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d4908512-bbfa-4243-a285-3edfbdb18441 1 2017-09-14 14:47:52.159+08 2017-09-27 16:42:26.036+08 ac3a0caf-7018-44d2-9337-32c7194ec412 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+474d1a8b-734f-47c6-b26c-c51ff6353237 1 2017-09-14 19:08:55.121+08 2017-09-27 16:42:47.309+08 55d8d331-c61d-4523-886d-2d69f350cde0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e96f9d8d-b89d-40ec-86f4-8dd32c040a7b 1 2017-09-14 20:36:40.088+08 2017-09-27 16:43:15.716+08 80dbb37c-0408-4a0b-8ef5-dc1acd7c303b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3810fe74-db24-4553-87b1-ca5f1c9adaf7 1 2017-09-12 17:44:24.676+08 2017-09-27 16:43:53.431+08 c7528fab-94f4-4110-9aaf-8964afa09c20 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+71ac1749-1c32-4014-a496-8507cf5be772 1 2017-09-05 10:54:48.254+08 2017-09-27 16:44:21.459+08 9604d366-28f8-4291-a5bd-5d049b1e90eb 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7c467342-5c75-43f3-b949-139162c808ae 1 2017-09-19 20:20:53.732+08 2017-09-27 16:45:01.375+08 7e6111e8-0a68-4af8-92ae-6238b7f3c631 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4aa4a735-9dff-49e1-8ff2-296efe68a305 1 2017-09-08 17:28:38.385+08 2017-09-27 16:45:21.259+08 96870c78-2ed9-4141-9438-e9415cd6eeb8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2595061b-5754-47db-bc80-c72c62ad229c 1 2017-09-09 15:51:26.008+08 2017-09-27 16:45:46.53+08 cf03d97a-0c99-494f-821d-da2dc02126dc 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+83d49ed0-5f75-4c4e-bda6-f6c6662ea8e0 1 2017-09-14 14:41:42.374+08 2017-09-27 16:47:33.559+08 6850f742-c5b7-4984-b1ef-d01b16015eb9 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3da6f3aa-036e-4f89-a50b-9fa2081ec912 1 2017-09-14 14:34:58.927+08 2017-09-27 16:47:39.198+08 eccb6310-f340-4668-9469-3df210aa471d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8cdbe324-b7a2-4bb4-8353-bb3beaee80e4 1 2017-09-09 14:39:09.809+08 2017-09-27 16:48:37.739+08 ae93a369-2ef8-4e20-83d6-d2f89076b115 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9081165a-8470-49d3-887b-1cc9e43fe06d 1 2017-09-14 20:24:32.009+08 2017-09-27 16:49:32.225+08 92597060-2385-438d-8a9e-25fee05e4e31 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+74fa134b-dffd-45e9-975a-8d2b64a5d1b7 1 2017-09-06 20:01:37.361+08 2017-09-27 16:50:39.595+08 05d70310-6689-4174-b4ae-274ab5e8f287 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ab11e177-0282-4aac-a84b-df19e34d4320 1 2017-09-13 09:13:35.767+08 2017-09-27 16:51:00.375+08 d523046b-7e32-486b-a1ab-cac779eb6209 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+64cb0706-4c3a-406d-886e-8cbdd636207e 1 2017-09-12 19:48:22.303+08 2017-09-27 16:51:06.888+08 a8a32974-fa53-4e18-a264-58c885d3c409 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7d3d6aa9-710d-4dde-bcdb-77baa08e3973 1 2017-09-18 21:05:59.008+08 2017-09-27 16:51:26.809+08 34e17d2c-cfa7-42a7-88d0-fc64f13f68c2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8a918454-cdf7-442a-8181-8b92abebfdd8 1 2017-09-11 20:33:20.848+08 2017-09-27 16:51:44.338+08 497ca51c-dd0a-46cb-8651-ac4bb7bd45c0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+36572834-2379-48b7-ba25-7c69aaee0bea 1 2017-09-06 19:34:49.411+08 2017-09-27 16:51:59.657+08 8e782506-4bab-4798-9e24-315107e3cc15 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a074e70e-ee4c-46c8-a87c-fd2abb07bb98 1 2017-09-04 20:41:19.212+08 2017-09-27 16:53:41.998+08 ed599be6-4811-4a09-a065-4b29586a4c00 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1a40d489-5c03-4f60-8665-4b24279aedc6 1 2017-09-12 17:57:39.262+08 2017-09-27 16:54:06.617+08 ab34de76-f758-4311-8bfc-dc7054a58ecf 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f57f7c1b-549f-4af4-8914-447d7c461e5f 1 2017-09-14 17:27:01.207+08 2017-09-27 16:54:27.786+08 cdf69820-94cb-45a3-acfe-21aa83737595 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e631ef74-cc0b-4ab0-90bb-8ae9a37294dd 1 2017-09-16 15:21:21.446+08 2017-09-27 16:54:58.008+08 eb1c1781-cea9-411f-8c15-39aafc8ee62c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+102b9d0f-de06-4a70-92fd-fadf63194b79 1 2017-09-14 19:37:28.69+08 2017-09-28 09:03:03.45+08 2078f06f-be3c-4d10-90b1-200f3bdb00ae 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c9738a60-d623-45c0-9ede-1701eff4703c 1 2017-09-13 10:00:10.873+08 2017-09-28 09:04:19.854+08 e833a38c-2409-474d-8d23-86ff4d45b199 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3b22f46a-d6ad-4cb6-ab8a-7266056a5f46 1 2017-09-07 20:31:18.884+08 2017-09-28 09:04:58.31+08 77d3bafd-4986-4848-b3c9-dfe847c6750e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+25110c4b-809d-4dff-82fa-1eb8eb53c4c5 1 2017-09-19 20:40:00.067+08 2017-09-28 09:08:45.261+08 d32b2513-a8bb-465c-aabf-0832f355ef6b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8b671122-6145-4f8e-82f6-5294af6806a1 1 2017-09-09 11:32:45.947+08 2017-09-28 09:11:14.746+08 b56e401a-75e7-47ea-84db-6638fd421792 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8198cafd-1e4d-4b68-bb6c-d75fd90059fd 1 2017-09-07 14:40:21.318+08 2017-09-28 09:13:33.93+08 0c5bca0d-95b8-416e-865b-1f09bb49285f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+90bd0c79-4d69-4a80-be30-5c6425891dab 1 2017-09-16 14:18:38.39+08 2017-09-28 09:14:19.559+08 831ab1f7-fe76-4152-b7a0-3359bdf7c3bd 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7bb4f089-2a73-4a73-aaff-81066efbde67 1 2017-09-12 20:28:25.973+08 2017-09-28 09:16:53.283+08 5bc92012-60a1-48ac-840f-575cb4e94c48 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b815e8bd-a927-4120-81ee-53ba19468f9a 1 2017-09-26 10:30:13.274+08 2017-09-26 10:30:13.274+08 1c909cc1-bb51-4e83-824c-31fb278ce026 ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
+8ccca344-fbcd-45ad-bcfc-eb97278fba39 1 2017-09-27 15:52:07.851+08 2017-09-27 15:52:07.851+08 65bd339b-0469-4019-8c96-55a6dbc6b697 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+69c54d0d-fcb5-4607-8266-dd978f93f713 1 2018-08-17 15:55:31.652+08 2018-08-24 09:46:18.211+08 ba3d723e-88ac-4e9a-976f-43d43081e621 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+39b76697-28f1-47dd-a54a-3d2b850b7d70 1 2018-10-11 14:47:31.903+08 2018-10-11 14:47:31.903+08 177e7e33-3dae-4163-8d7d-1778e70b4a8b d4f271b6-567a-4880-beb0-161b33ac2094
+ecc801b1-0517-4722-aa98-e20d2c9b2fb7 1 2017-09-27 15:57:28.226+08 2017-09-27 15:57:28.226+08 ca7ff65b-b5a0-49f3-ad0b-6821012604ce 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+84c1cb7e-d5ff-428d-9382-a27e2284a946 1 2018-11-02 11:05:43.306+08 2018-11-02 11:05:43.306+08 b440e042-3173-43c6-887c-3cf4ce8a49e4 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7f3b1220-a5f6-4c2d-bc6e-efec711079c7 1 2017-09-25 19:45:57.206+08 2017-09-27 16:40:07.585+08 6f1f679a-d9b7-4fe3-945d-8b83105284a8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+bb39dea7-0de5-4844-8e66-c702f05081e4 1 2017-09-22 17:34:24.76+08 2017-09-27 16:44:52.899+08 fd3ad887-4a33-4d80-b3bb-d5d48ced0e7b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5d90bc3b-2691-4841-9f9a-787ce4b681a5 1 2017-09-27 16:52:40.389+08 2017-09-27 16:52:40.389+08 6f16c6fa-6d60-481b-95ec-e450227fe268 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e56064f3-665a-4f5d-ac50-b6f31faa26a2 1 2017-09-25 10:44:21.673+08 2017-09-27 17:58:31.387+08 d3245ff1-0781-49bd-b37c-e245a350a709 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+23557cc0-60a0-46fe-8e09-8a48afff76df 1 2017-11-06 10:15:13.303+08 2017-11-06 10:15:13.303+08 8ae3c80d-72ae-4e4f-b6e7-fd2dda6cc125 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cf7d6928-ce06-4e99-aaa0-4fc4c011ce61 1 2017-09-20 16:26:18.702+08 2017-09-28 09:08:19.336+08 c094bbbe-bc2a-4223-bba7-539edb03d3b0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2750266f-7ee5-48c7-9278-f14032923026 1 2017-09-21 10:57:18.45+08 2017-09-28 09:09:38.64+08 1c210656-dc67-470f-b8c3-d653c82e3bb0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a9fc8480-541f-4a49-9a5f-f4934866728f 1 2017-09-25 10:54:34.178+08 2017-09-28 09:10:05.875+08 3bf186e9-5049-40e4-ba57-b40d90cd1543 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+45fd4862-0a07-41dc-a52a-ddf6dad3c4eb 1 2017-11-13 17:45:45.256+08 2017-11-13 17:45:45.256+08 a1a0ce1a-3883-4148-8bd7-a94ce938e39b 3dfadb0e-7608-49e1-aa43-24f7442b424a
+145b26e1-5bc2-4b77-a7ed-6a55750a2104 2 2018-11-12 16:41:13.991+08 2018-11-12 16:41:13.991+08 540e29ab-87bd-4d64-9f6c-c9af1db5bbf4 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+42a338ee-84cd-4de7-842e-bc9fc068e82b 1 2017-10-31 17:57:38.208+08 2018-03-12 17:09:52.55+08 99e46759-26c1-4aa3-8e57-9818fc111906 3dfadb0e-7608-49e1-aa43-24f7442b424a
+0e4a346a-3921-43ad-8ea5-1168af781862 1 2017-09-29 15:08:42.946+08 2017-09-29 15:08:42.946+08 be246ea1-fd75-4151-92c6-54b278d11287 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d26901f2-158e-40e0-98a6-a05b1e119321 2 2017-10-31 17:57:38.212+08 2018-02-28 16:12:08.598+08 99e46759-26c1-4aa3-8e57-9818fc111906 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3dfee4c8-a046-4751-b2c1-dc037b69943b 1 2017-09-30 11:42:38.221+08 2017-09-30 11:42:38.221+08 cbc19e42-a8ba-4a12-83f9-6ef1469df546 c96530d8-c5e2-4acd-a7fa-450e15e27ddb
+884698d5-ed56-4613-85fd-cc02d313ae2c 1 2017-10-07 20:50:21.483+08 2017-10-07 20:50:21.483+08 6d1f494d-6e60-4181-85ee-115ea3586c6d 54d9b5fc-1253-41af-80d2-b6bef8f04add
+fa62c56e-a9b8-4fa5-81c0-2ab96f5764bb 1 2017-10-31 18:02:48.581+08 2018-02-28 16:12:19.217+08 f5e0fd8e-6d70-4dd7-830f-42efadf389f5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2d2e69b2-0032-4057-859e-b1ebf354ed31 1 2018-01-05 16:18:59.238+08 2018-03-07 16:50:51.119+08 9abfc35c-6cff-489a-8257-b868954725f4 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c4c2344a-fb89-4bfa-90fd-c8eb322eb2f2 1 2017-11-01 15:38:54.179+08 2017-11-01 15:38:54.179+08 e5b27a73-2d4c-4b53-8bcd-86583097a730 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+767c921b-d375-475f-bec1-d5a11464e86d 1 2017-11-02 16:13:34.441+08 2017-11-02 16:13:34.441+08 abb38d23-09f3-48fc-b9ee-4dfaf1db995b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0850698e-6c98-44ce-a664-9f4e257d8650 1 2017-11-06 11:16:45.196+08 2017-11-06 11:16:45.196+08 c52cea56-d5aa-4b14-ad9f-05fb6974e528 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c79eeb0d-55cb-4508-b1be-f9f1c4282293 1 2017-11-06 15:04:16.814+08 2017-11-06 15:04:16.814+08 43e2a07a-c33e-4e54-ba5e-0a948ae4ba61 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e8af9421-7e70-473a-a865-eabc51835f3a 1 2017-11-09 11:07:51.835+08 2017-11-09 11:07:51.835+08 26ceb3f3-78b3-4b0a-910b-a5bc39218370 3dfadb0e-7608-49e1-aa43-24f7442b424a
+3c98a8d3-87fd-4b2f-ad59-d949ec850aea 2 2017-11-09 11:07:51.838+08 2017-11-09 11:07:51.838+08 26ceb3f3-78b3-4b0a-910b-a5bc39218370 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+472e6c9f-a3b3-4345-ba17-96aebcbc7306 1 2017-11-10 14:03:39.836+08 2017-11-10 14:03:39.836+08 393862fc-cfec-404b-873d-c42f5e22bc61 3dfadb0e-7608-49e1-aa43-24f7442b424a
+26a1ed11-25b0-4738-a304-b26ea7cf14a5 1 2017-11-13 17:11:55.541+08 2017-11-13 17:11:55.541+08 1fbfe6ef-ffff-4bd9-936a-67d9665006be 3dfadb0e-7608-49e1-aa43-24f7442b424a
+d6ac6c8c-d447-482b-96ce-41f67eba46b4 2 2017-11-13 17:12:07.342+08 2017-11-13 17:12:07.342+08 1fbfe6ef-ffff-4bd9-936a-67d9665006be 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+64ae3dd1-e6df-4a25-bda6-414915daa59b 1 2017-11-13 17:19:34.965+08 2017-11-13 17:19:34.965+08 8015ec05-fd08-4afb-b018-3bc916702f96 3dfadb0e-7608-49e1-aa43-24f7442b424a
+49390aff-8cdb-4573-bf8d-cf1cab7bbfcf 2 2017-11-13 17:19:41.345+08 2017-11-13 17:19:41.345+08 8015ec05-fd08-4afb-b018-3bc916702f96 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3c5b207c-eb57-43bd-b2bd-c029247ba94f 1 2017-11-13 17:29:29.578+08 2017-11-13 17:29:29.578+08 b00292b1-f8e5-46c1-808a-dff46e9557ff 3dfadb0e-7608-49e1-aa43-24f7442b424a
+a63fe795-c948-4113-acad-2e0468635101 2 2017-11-13 17:29:35.319+08 2017-11-13 17:29:35.319+08 b00292b1-f8e5-46c1-808a-dff46e9557ff 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8718baf5-fb8b-436d-b875-7c34bbe278cd 1 2017-11-13 17:29:46.237+08 2017-11-13 17:29:46.237+08 f8ec9655-408b-46e4-96f3-a8fcc382230a 3dfadb0e-7608-49e1-aa43-24f7442b424a
+9f40c5ae-7efe-4b01-8cc7-bed09d447184 2 2017-11-13 17:29:52.354+08 2017-11-13 17:29:52.354+08 f8ec9655-408b-46e4-96f3-a8fcc382230a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+91dbb75c-a5f5-4fd3-8841-c49aca71b547 1 2017-11-13 17:37:00.867+08 2017-11-13 17:37:00.867+08 337651d1-80e3-4b07-9e87-79d5e20547aa 3dfadb0e-7608-49e1-aa43-24f7442b424a
+352eaf9d-af3b-4648-83b8-0778dda25573 2 2017-11-13 17:37:07.891+08 2017-11-13 17:37:07.891+08 337651d1-80e3-4b07-9e87-79d5e20547aa 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7ee8a8a2-14dc-4e99-be3a-a73023b6fa18 2 2017-11-13 17:45:51.416+08 2017-11-13 17:45:51.416+08 a1a0ce1a-3883-4148-8bd7-a94ce938e39b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6c369fae-95c7-4986-a439-1a2b511a6d71 1 2017-11-16 13:50:55.925+08 2017-11-16 13:50:55.925+08 cff552ac-d565-4a44-8400-e0f4382ce853 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a7ad819c-a67e-4173-a2a9-0ad7dde3582f 1 2017-11-16 17:03:23.913+08 2017-11-16 17:03:23.913+08 f86c7d29-f504-474d-8665-d484e5c41e8a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+880d26e0-1562-4456-ae4a-6809dfb1885a 1 2017-11-17 09:45:45.972+08 2017-11-17 09:45:45.972+08 d87be87a-12ba-4e65-97ba-816bcb3e2e62 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9e689319-009e-4809-846f-dc4a98ad40a6 1 2017-11-20 16:42:59.96+08 2017-11-20 16:42:59.96+08 3f80f427-4615-44ae-b2e8-e783733d0ea5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+aee5e701-48db-49cb-a3a4-fb45007cc060 1 2017-11-21 15:57:22.478+08 2017-11-21 15:57:22.478+08 dfbedf15-8cef-4760-9cad-efaab883db3d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+579fbaf1-9b81-42e4-b9e9-528296ba6e32 1 2017-11-23 10:44:00.887+08 2017-11-23 10:44:00.887+08 57bf451a-e6f5-4df5-a4a7-c2c42a46546f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0e1840a7-4883-4b25-bc8b-c8a7ce3c4ba7 1 2018-01-09 11:31:58.814+08 2018-03-29 17:16:53.357+08 92bad770-f845-4bd8-8e2b-55e5343a2201 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+5d581d09-0fd7-4ea3-9752-4af4aabf1796 1 2017-11-28 16:59:05.371+08 2017-11-28 16:59:05.371+08 f2c96428-649e-47e9-9b6f-e5749195cb33 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ee8acfbd-2198-46ae-a522-1e9d5cadc4c7 1 2017-11-29 11:48:07.559+08 2017-11-29 11:48:07.559+08 13126536-b6af-48d0-b43e-25144b65dd8d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d2adaa01-0e99-40c5-bb35-60983fbf30e2 1 2017-11-29 11:48:16.431+08 2017-11-29 11:48:16.431+08 0c5d070d-fb83-4f78-acc0-a0bd12be6cc2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+034d576e-32da-4ab2-8b1f-309e1eddf10d 1 2017-11-29 11:48:25.647+08 2017-11-29 11:48:25.647+08 f3ad3df8-e1ad-4e05-b479-185ac5ae8602 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+523f6570-a896-46be-b31d-58b0dd5c3fc6 1 2017-11-29 11:48:34.798+08 2017-11-29 11:48:34.798+08 e8d9a100-9650-4afc-a260-9c7bcdea9263 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6ce95b94-a0b7-49cf-94c7-b61f921a526f 1 2018-09-11 14:34:02.862+08 2018-09-11 14:34:02.862+08 470fe434-e3f4-40b1-a823-12f5b6122b0a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e0b7b313-76bc-4f6b-8094-1cbe8f086ff9 1 2018-01-05 16:27:38.104+08 2018-01-05 16:27:38.104+08 b0a93683-5c88-4f1d-81de-5e41fed44566 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d1d9e6df-e64d-46b4-978b-372dcb2a87d7 2 2018-01-05 16:27:38.107+08 2018-01-05 16:27:38.107+08 b0a93683-5c88-4f1d-81de-5e41fed44566 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+af8ac3f8-0501-42e7-b64d-e48ce5a657c6 1 2018-01-08 15:12:21.603+08 2018-01-08 15:12:21.603+08 0e1586ef-cbec-4dc3-8ff4-af3e4c7c8d2e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+fe3a2636-729f-4895-a031-9cb72c9c49a3 1 2018-01-08 15:32:40.767+08 2018-01-08 15:32:40.767+08 2fd2ebfb-7858-40db-91a8-d933269ccf64 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6bd2f2d5-dcd3-4767-b0c5-a365eb0b3843 2 2018-09-11 14:34:02.867+08 2018-09-11 14:34:02.867+08 470fe434-e3f4-40b1-a823-12f5b6122b0a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7300e18c-24a8-4c69-9e39-e4cab75d99f8 1 2018-01-08 16:22:24.854+08 2018-01-08 16:22:24.854+08 22dc1e96-f05a-4752-bebf-9d3c1285dace 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cf3cdaf4-edfb-49e6-aced-889665fb8cad 1 2018-01-08 16:22:25.016+08 2018-01-08 16:22:25.016+08 c53d6302-b66b-40f4-b190-4d5447180ba7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+85f438f1-4779-4cba-890f-22fb871e1b89 1 2018-01-08 16:27:58.084+08 2018-01-08 16:27:58.084+08 8ea772de-0c69-4a35-bbbb-7e0fb97d7c2f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+436b1289-e9c0-4f43-a72a-d95727c270b1 1 2018-01-08 16:27:58.781+08 2018-01-08 16:27:58.781+08 03db4d1f-c0bf-47b0-9f10-0a0a5d6cfca3 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+189c2f2b-1d0a-4b3c-94b1-33bebff36ab4 1 2018-01-08 16:50:48.394+08 2018-01-08 16:50:48.394+08 80e5052f-477a-4e27-a3bc-0ec95ab3d4a2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+719b3dba-bba1-4f87-b495-4edec4572d91 1 2018-01-08 16:50:48.893+08 2018-01-08 16:50:48.893+08 fbc83633-74fd-494b-b1b7-75d289358b27 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7283403b-2780-411f-a674-f5aea930ddbb 1 2018-01-08 16:54:49.754+08 2018-01-08 16:54:49.754+08 bfc79caf-826f-4f9d-a709-241529e118b5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+683de5ab-224e-409d-8d87-924293e1f557 1 2018-01-08 17:10:40.668+08 2018-01-08 17:10:40.668+08 a3b4fd36-dd87-463c-84af-254647a24cc5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ea60971e-6c2c-4863-b5ae-ef74b224e054 1 2018-01-08 17:10:41.15+08 2018-01-08 17:10:41.15+08 e718c1a2-1c56-4da0-8cb3-36445c6b4f26 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+39bbcb01-7a84-4835-9646-a8a70dea04ab 1 2018-01-08 17:10:41.657+08 2018-01-08 17:10:41.657+08 c7f01571-7f09-4bef-99d3-fdc2da5fcaa2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ecca3930-fdb8-4e18-8da2-448131e548b7 1 2018-10-12 10:19:30.549+08 2018-10-12 10:19:30.549+08 5fc20b7c-ce0f-4584-aee1-c8e7dbb32e8a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6a369ae7-2703-4918-a144-59072ef59862 1 2018-01-12 11:27:20.208+08 2018-01-12 11:27:20.208+08 99978bc0-b3c7-4ba1-9064-723c2c13b95f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f87dd261-6de4-496d-9825-f1879888d6a3 1 2018-01-16 11:50:37.231+08 2018-01-16 11:50:37.231+08 0d123bba-3d2e-4252-a27e-af567da8aca1 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+22b97f71-1db8-48f7-9ee4-85adcd617e0c 1 2018-11-20 16:26:17.238+08 2018-11-20 16:26:17.238+08 9c5aaf1f-48c2-4293-8338-f549c223993d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4c350113-8ea9-4493-93e4-7654d1660884 1 2018-01-18 15:22:34.511+08 2018-01-18 15:22:34.511+08 c0b0b779-cafb-4d7f-b4ff-64534e422738 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+45976e2a-feb0-4aee-ad80-88a47ef3d19f 1 2018-01-18 15:22:34.694+08 2018-01-18 15:22:34.694+08 abefa36d-6587-4818-bb39-e14a51c26b4e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1b7394e3-aac9-4412-8fb3-67337c27b101 1 2018-01-18 15:22:34.874+08 2018-01-18 15:22:34.874+08 79ef29a0-9796-43ce-957d-952d3b16d70a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3aa8b22a-2569-4c0b-921d-4b27c1a84d0b 1 2018-01-18 15:22:35.033+08 2018-01-18 15:22:35.033+08 ef4d9187-0ca8-44c7-b7f5-42e6c0904fd5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5a51894a-4fc3-4c9f-b0af-2fe7a3e2ed6c 1 2018-01-22 11:12:08.468+08 2018-01-22 11:12:08.468+08 eb9a3ca2-0c98-4af1-9e73-2a17cbe81af6 80284583-ddc4-4364-8399-b49e3289bbf3
+91d65629-6006-40b8-ae3b-626f6e477dcf 2 2018-01-22 18:07:23.435+08 2018-01-22 18:07:23.435+08 b914a394-bbd8-4ff4-857e-02a2d8eb6d25 3d88a29a-ca10-482f-8643-4fd39d4b50e2
+c44d908b-d931-4e1e-ae6f-8336dec968f3 1 2018-01-23 14:02:27.107+08 2018-01-23 14:02:27.107+08 85ba72e3-3754-4b11-a144-757d7a01f1dc 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a011b6b6-4034-42d5-90c6-615d17724ecd 1 2018-01-23 14:10:45.507+08 2018-01-23 14:10:45.507+08 931fef11-654a-4f36-bf37-dbc168c46e84 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cb2c078e-72b0-47e3-bb1b-a9498ba5650f 1 2018-01-23 15:32:11.047+08 2018-01-23 15:32:11.047+08 1c332609-ad1d-4066-b0fa-67df29181432 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4ca813f3-cc80-4c82-8802-ce37a1aff0af 1 2018-01-17 17:52:43.804+08 2018-03-06 17:39:39.708+08 4696ff30-0685-4f87-bc16-25d640a014a6 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2d38e284-8948-4188-8f48-ce14e901e66c 2 2018-01-10 15:59:36.196+08 2018-03-06 16:01:37.33+08 f65db984-9da0-4cef-a9ea-7de5e02ef42f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a5c68c4f-124e-4860-b68c-b0a78cc4bcd0 1 2018-01-10 15:59:36.193+08 2018-03-06 16:05:48.232+08 f65db984-9da0-4cef-a9ea-7de5e02ef42f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1dbcdff1-a7dd-4cc4-900b-609d102a9a3c 2 2018-01-12 11:27:20.212+08 2018-03-08 09:07:40.915+08 99978bc0-b3c7-4ba1-9064-723c2c13b95f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6d728207-be8c-4d23-a36b-fad121cc99b4 2 2018-01-08 15:32:40.763+08 2018-03-09 09:14:54.395+08 2fd2ebfb-7858-40db-91a8-d933269ccf64 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+89e11345-37d4-4990-ab56-0c8b992ca12d 1 2018-01-08 11:44:22.156+08 2018-03-09 09:15:05.845+08 92d06569-3e06-4ceb-91e5-d28589632145 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f56c8027-8dd3-412f-956f-21ad3082f2ea 1 2018-01-08 17:19:40.376+08 2018-03-12 16:27:46.275+08 1f3f14a2-a6d4-44a5-859b-3406794e7b37 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+06b640bf-bd95-419d-8ca9-a5cabe7f1060 1 2018-01-23 14:57:48.745+08 2018-03-23 16:36:53.122+08 37c046eb-9a0e-49b0-95fb-f0128338f381 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+71babe9d-868f-4e77-ab53-c83cae3de9d9 1 2018-01-23 15:00:11.832+08 2018-03-23 16:38:52.153+08 cb4eb310-0876-492a-9e06-8cd0a5542c5b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8db063a3-b808-4355-bcdd-82afe11c5dbc 1 2018-01-08 08:03:31.843+08 2018-03-28 16:49:27.06+08 684a2261-481c-4504-9f4b-665baf97aae6 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+70a8ddba-e9cc-4b23-afef-f6f751a0181c 1 2017-11-25 11:53:42.33+08 2018-03-28 23:08:00.226+08 6aa982a5-d7a3-48ee-b1dc-afe4686ce796 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ba54a277-84a9-4908-8137-33a4a0c12281 1 2017-11-28 16:55:26.341+08 2017-11-28 16:55:26.341+08 fe65a1cd-2040-403c-bb6f-529d4063bc45 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d28e2d95-3e15-4c82-a89e-fc92b24eeb16 1 2017-11-29 06:20:41.894+08 2017-11-29 06:20:41.894+08 217607ad-e8e6-4940-91ff-dc4d831cccbc 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+45750a64-368f-422d-b2b2-cf71d63aee33 1 2017-11-29 09:23:59.554+08 2017-11-29 09:23:59.554+08 04cb319d-9e45-4534-8be6-5f1f4aef7740 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ae393b36-8ca0-4235-8eea-478dd008d7b8 1 2017-11-29 11:48:43.621+08 2017-11-29 11:48:43.621+08 d7912272-424d-4546-a3c1-43a24365dde0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ce1060ac-eb0a-43d0-85c7-7e63523b057f 1 2017-11-29 11:49:00.645+08 2017-11-29 11:49:00.645+08 91372b00-3bf7-4eb0-9495-ad544dfb04ca 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+58804dd8-5a61-42a0-9ca5-a9ad436b163a 1 2017-11-29 11:49:22.207+08 2017-11-29 11:49:22.207+08 0aae766a-5d82-479a-bd71-7eb1e0e4e20f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+274e14b3-fb65-4b24-8a1e-104a29ca88af 1 2017-11-29 11:49:30.505+08 2017-11-29 11:49:30.505+08 ac32d002-0463-4bc7-a307-86236e6307a7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d999e924-2f01-4d79-9c09-be9e50d4d94b 1 2017-11-29 15:24:41.548+08 2017-11-29 15:24:41.548+08 16ca7eed-6c64-4c4b-a495-6c5f785b86cd 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+93c8f248-e1bb-40d5-8f58-7008e4f6706b 1 2017-11-29 15:35:17.596+08 2017-11-29 15:35:17.596+08 3462227d-e989-421c-9f48-c0ae7a573b78 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+fb241343-d509-4147-a2b9-94ebe362c90b 1 2017-11-29 15:43:10.241+08 2017-11-29 15:43:10.241+08 6bd546bc-55b0-4ee4-8b58-34feec8cdb6c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6f71d673-6cb0-435d-8813-4bae2641569e 1 2017-11-29 15:47:20.475+08 2017-11-29 15:47:20.475+08 65f4e736-8261-40cc-b3b8-948ab0e4252e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+768a6d53-6450-45ee-9c11-e9a943a1f0b5 1 2017-11-29 15:51:55.329+08 2017-11-29 15:51:55.329+08 e015d9d3-542e-4d54-80c6-39db4ba20877 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+53e68c57-c31b-42ce-ad23-1662e9824e46 1 2017-11-29 15:56:44.947+08 2017-11-29 15:56:44.947+08 24b365fd-4e6e-4800-ad48-d3f082c9b2b8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+61ab412b-58c2-4f61-878d-52a0ac420011 1 2017-11-30 13:55:54.578+08 2017-11-30 13:55:54.578+08 93f84dd4-087b-46ef-bdda-9db4adfdb16b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1c92852a-e4b2-4ce4-824b-123f7fe284de 1 2017-11-30 15:01:46.31+08 2017-11-30 15:01:46.31+08 345d6324-7330-4d26-a786-a6823849f483 c3feea31-4449-46fb-a1dc-2214d73c3935
+d8cb1d69-e11d-452a-b054-21e315f403bb 1 2017-11-30 15:14:59.453+08 2017-11-30 15:14:59.453+08 40b8c657-2644-4ce2-b490-cf61523a4012 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1494ec33-f0e1-497e-8b34-1b50f00b2903 1 2017-11-30 15:18:38.813+08 2017-11-30 15:18:38.813+08 e889420f-f8d0-4e0d-aab2-1f2f965e75bb 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1d61610c-7715-4c72-9273-2a0eecae239c 1 2017-11-30 15:25:27.897+08 2017-11-30 15:25:27.897+08 f5c42818-e09f-4cb7-b7cb-63b18e8829a9 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+573ebd83-8539-4533-9c4a-8b05403e6817 1 2017-12-01 09:59:04.593+08 2017-12-01 09:59:04.593+08 22d007b2-5200-4bf6-85dc-c755a7a75bcf 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b98aec75-4636-4312-ba9b-06433a59ae92 1 2018-01-08 12:02:17.335+08 2018-01-08 12:02:17.335+08 b1b251a9-2555-415d-996f-88df44f4df3c 0656e39e-ad05-4573-8a05-3c6f5dd01785
+cac36e98-e9ce-47ef-8d79-ede8b72a1d28 1 2018-01-08 12:02:17.337+08 2018-01-08 12:02:17.337+08 b1b251a9-2555-415d-996f-88df44f4df3c fcfced24-ec69-4898-b965-a6fcc3fda47c
+79718b5e-8dd9-4ae7-b11e-c17173b4793d 1 2018-09-11 14:37:10.395+08 2018-09-11 14:37:10.395+08 098ca922-fd35-4605-abc8-f65640f8f879 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6d7ae59b-52da-43e9-8888-fa8068f45ee7 1 2018-01-08 15:25:13.476+08 2018-01-08 15:25:13.476+08 4866de4e-56ad-435f-a21b-0f2b00011e12 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+eb7cdd9e-1a3e-46bb-b17d-4af8009f58c5 2 2018-01-08 15:25:13.479+08 2018-03-12 15:11:31.372+08 4866de4e-56ad-435f-a21b-0f2b00011e12 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+21226244-5465-439b-9ec6-7facf0f96d67 1 2017-11-29 18:00:44.752+08 2018-03-16 10:00:15.848+08 bd742efe-04d8-4e90-9799-dd3830baf3ca 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c43bc2c6-bb86-4b96-912d-989da5e84a08 1 2017-11-29 17:57:56.255+08 2018-03-16 10:00:23.123+08 2420aadc-c220-4ce6-bfe9-c21d79ce827f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+41a2d44b-73a6-477f-af22-b0275ba0ab7a 1 2017-12-01 15:00:04.224+08 2017-12-01 15:00:04.224+08 2f8c4ab2-42a9-44d8-bd3d-cfa9d1f55252 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+680fcf75-2aab-47c5-99da-5fa692c9e2d0 1 2017-12-01 15:05:58.351+08 2017-12-01 15:05:58.351+08 1cdf6eb6-fcd9-4346-992d-6ddc41b956cf 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+12b9717b-35bd-439a-bb17-2733b58ad3b7 1 2017-12-04 12:57:26.171+08 2017-12-04 12:57:26.171+08 f5d141ad-ea96-4398-8712-2a802af988f8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b8a87627-8374-4059-bf7c-33d7ab066bf6 1 2017-12-04 13:47:01.136+08 2017-12-04 13:47:01.136+08 e08c86d5-195d-4cf6-a1a5-1cfd113ddd52 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+105a2dd0-4901-4b59-aac0-5610876a7fd8 1 2017-12-04 14:33:34.378+08 2017-12-04 14:33:34.378+08 409f2510-dd44-4990-b530-096bf2bcb592 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f307bfc4-068e-472e-9ac2-e384185a2575 1 2017-12-05 10:50:36.376+08 2017-12-05 10:50:36.376+08 b0a937d5-432e-4a49-b044-e4b66d649f52 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a964c6c9-365f-4c63-b62b-cdb064a34695 1 2018-09-11 15:57:59.804+08 2018-09-11 15:57:59.804+08 00e107aa-a84e-4014-98e7-f0aa931b22ae 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e2e6e717-5b3d-49d1-b3aa-89a6989840a8 1 2017-11-29 17:55:29.409+08 2018-03-16 10:00:32.85+08 823921c0-40e3-46c6-809c-804adcf828ce 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3c11e69c-226b-499b-92d3-e157f8767c7a 1 2017-12-06 10:37:27.475+08 2017-12-06 10:37:27.475+08 6c19e60e-0ed7-4e22-abb4-ddc9caf20d91 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+927ba5cb-747d-4cd7-8e17-63cef84ba3f4 1 2017-12-06 12:00:43.624+08 2017-12-06 12:00:43.624+08 b6d1b7db-4a04-40af-a1e9-ed944a65b0b8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2106de0f-be01-4d02-8193-e5937a85bf6d 1 2017-12-06 14:12:59.648+08 2017-12-06 14:12:59.648+08 21d99b83-6a52-4465-90c4-125d8330e1c1 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c02aab36-aa63-44cd-94d1-75ef3f190771 1 2017-11-29 17:52:19.028+08 2018-03-16 10:00:41.018+08 cb9d01e5-2af8-48b2-b522-4f7ae3a9dc6e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+92890ffa-93a4-4ae2-b4d0-8cf778724f5e 1 2017-11-29 17:49:21.399+08 2018-03-16 10:00:51.339+08 97463615-eb6e-4836-86a1-a282e935ed5d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8c05ad44-f5cf-4459-96bb-2a15d9a21bac 1 2017-11-29 17:46:58.802+08 2018-03-16 10:00:59.764+08 6629f27c-b28d-400b-9355-71e81a910b2b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d5fcc72b-859b-490b-b112-4d7025ef4ae8 1 2017-11-29 17:43:55.663+08 2018-03-16 10:01:06.217+08 55be82a9-bf1f-4e1d-bca3-d76fc60beca3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+1ffa653d-c6c7-4dea-81d1-c794e428e2d3 1 2017-11-29 17:40:19.261+08 2018-03-16 10:01:19.429+08 5dcdefa3-da3c-4745-828c-d97fae30d82d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2f5fb5c5-0ef5-4557-a585-dd622f2b10b8 1 2017-11-29 17:37:50.905+08 2018-03-16 10:01:26.058+08 6e9cc5a0-a0ab-49f5-bf77-13164ed09055 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+94c168e2-c0e7-4294-b4c2-d919008c1d10 1 2017-11-29 17:32:42.143+08 2018-03-16 10:01:32.511+08 5ce1bb8e-5512-48aa-9842-c5ea7754f340 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+5a345bee-327b-4873-b40c-d87f79a605fb 1 2017-11-29 16:58:58.19+08 2018-03-16 10:01:38.965+08 b3014b29-7547-4c85-a147-7ab37d6c328f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ae25354c-f866-42d2-bd43-9ec059f2c260 1 2018-01-08 08:30:38.759+08 2018-03-28 23:15:06.359+08 8e812d09-7b95-4c07-ad74-d4c66104e7a7 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d77c5aa7-cc69-4efb-9360-d8c00f1e6b6c 1 2018-01-08 08:17:08.566+08 2018-03-28 23:17:09.78+08 223ac440-c7b0-4005-8144-f33ce926d9bf 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a0737f04-cdba-41ff-8879-1145f93cc280 1 2017-12-06 15:17:54.536+08 2017-12-06 15:17:54.536+08 aa86893b-e991-4c57-94a7-b29e7349fe50 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4ba2d703-2e5c-466e-8cc8-04bc992eb93c 1 2018-08-24 09:09:28.319+08 2018-08-24 09:09:28.319+08 bbcd2556-3714-4360-80d1-af1f8be94404 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2c2b9e64-45cb-4df2-b0eb-aa6968c9ee08 1 2018-09-11 15:50:20.32+08 2018-09-11 15:50:20.32+08 1b53fdfb-8040-4fff-a045-a0bd3ac61881 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2d72e310-41e8-48b3-8589-e1fdc02234a1 1 2018-10-16 11:55:50.854+08 2018-10-16 11:55:50.854+08 27503c42-1dec-4321-ad45-eab67190afb5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+59c6964a-3590-4ec3-8c18-9f58d2583cb9 1 2018-11-02 17:11:56.249+08 2018-11-03 10:22:40.624+08 24946992-8d23-4862-ab23-0844e246fb46 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f14c354e-4160-4dea-a3c8-9ad3129d817c 1 2018-01-08 13:36:45.748+08 2018-01-08 13:36:45.748+08 a8add874-7ace-4c3b-a044-8d6da02a9257 fcfced24-ec69-4898-b965-a6fcc3fda47c
+7bf32190-691e-4aa0-9b58-c4768a6993c8 1 2018-01-08 13:36:45.752+08 2018-01-08 13:36:45.752+08 a8add874-7ace-4c3b-a044-8d6da02a9257 0656e39e-ad05-4573-8a05-3c6f5dd01785
+10cd3331-634c-424d-bbbd-8722d7b57780 1 2018-01-08 15:50:34.799+08 2018-01-08 15:50:34.799+08 72fb9e20-7c7b-4ccb-9da1-d8600223beca 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a4327012-21f7-4f4c-8a08-aa84df8df368 1 2018-01-08 16:50:49.864+08 2018-01-08 16:50:49.864+08 64d50498-d37a-4f4a-99f8-2268e82a035e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+69cf7444-fdc6-4f98-b3e0-2d11f4125b00 1 2018-11-12 16:41:13.993+08 2018-11-12 16:44:19.167+08 540e29ab-87bd-4d64-9f6c-c9af1db5bbf4 7273694e-484e-4f59-b7d6-03032fb343bb
+30367b45-ab92-4ddf-ba29-1625b347c30a 1 2018-12-03 15:03:56.957+08 2018-12-03 16:27:39.244+08 a820a6a6-2302-4291-bf8a-e6beb3e7f663 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ad92b98f-514c-42f9-b387-3e963cf9410c 1 2019-01-14 16:35:28.384+08 2019-01-14 16:35:28.384+08 e996ef32-944e-448f-9370-862fd5ed719d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9cde36af-7898-4aa0-b0cf-3ae8a9d1222e 1 2018-12-18 16:53:42.848+08 2018-12-18 16:53:42.848+08 99685e46-230b-43e6-a98c-f7f472af999f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+1de94af4-bdba-4d78-9427-208c421a9052 1 2018-01-11 10:36:37.368+08 2018-01-11 10:36:37.368+08 58647986-2640-4318-902a-5ee7d04150ef 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+fbad3c06-b02a-4f8a-b1c7-7da77c5037ee 1 2018-01-12 14:32:00.3+08 2018-01-12 14:32:00.3+08 7d457a8b-5537-4186-bd68-df0c5868ef7e ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
+4147f31c-2a52-43de-9601-20f4142d96d8 1 2018-01-16 16:49:43.482+08 2018-01-16 16:49:43.482+08 2dfa1f51-0e5a-4e11-a86d-f8487d602ebf 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+06ff4979-ef6c-42b8-bda5-74c797384d80 1 2018-01-17 13:45:21.836+08 2018-01-17 13:45:21.836+08 0df6f7cc-b408-4936-8fee-d5344c2d8ae9 93f2d601-f46f-4361-ae92-431401bd869d
+ae984788-d3eb-48a5-b115-a1a9f0888473 1 2018-12-28 11:30:35.246+08 2018-12-28 11:30:35.246+08 10d33bab-421f-428f-b450-b5ee4b1c3465 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+790b37a9-d105-48fd-86ae-edc501b75246 1 2019-01-19 17:15:44.537+08 2019-01-19 17:15:44.537+08 0a341896-3c5d-4e60-af19-fe5f645c6967 d4f271b6-567a-4880-beb0-161b33ac2094
+768b5117-e123-4f47-adb9-eaf62dbf3d6c 1 2019-01-30 11:05:38.186+08 2019-01-30 11:05:38.186+08 9d3d4083-57c0-4067-b3e6-f9ebc2a7a6d5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d3aeb7df-fcd7-4fba-b003-6c0ee98bc33a 1 2018-01-23 10:17:42.568+08 2018-01-23 10:17:42.568+08 08ca737d-d94b-46f2-bb48-33327b7fc0eb 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f000b352-038c-4802-b9bd-4f10773f351a 1 2018-01-23 17:19:51.366+08 2018-01-23 17:19:51.366+08 ddf17ba9-fcef-4ef4-97f0-c09e0503dfa3 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8489e217-3c86-459f-9fbf-33d6efcdc58e 1 2019-02-25 13:32:42.879+08 2019-02-25 13:32:42.879+08 c952a71d-a917-40a7-aecc-cf2dc40c238a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f7df5401-dc58-4a7b-9b2e-0ffa66914834 1 2018-01-24 11:19:02.104+08 2018-01-24 11:19:02.104+08 75c932d0-2df0-4628-81dd-0e9c1f11ff60 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8f911a46-bbe2-4a38-9447-568a060116d6 1 2018-01-24 11:19:06.36+08 2018-01-24 11:19:06.36+08 9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+52b9b684-34b1-433c-b728-80e91cc5a76d 1 2018-01-24 11:19:10.109+08 2018-01-24 11:19:10.109+08 76288807-186e-4444-a1ce-6be599aacfd2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ce18c57f-a082-4417-a65f-4aacc7f5e09b 1 2018-01-24 11:26:28.341+08 2018-01-24 11:26:28.341+08 780de52c-47eb-46cb-b77b-3d919bae5ffb 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c04952c0-e6f4-419d-abd6-134b7e5eb1e7 1 2018-01-23 15:06:34.917+08 2018-03-06 15:58:48.198+08 eee64353-8241-4a69-a2ed-5e42bbf4450c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2b29d5d5-623e-4bdc-98f9-69123ff44f3a 2 2018-01-23 10:17:42.564+08 2018-03-09 09:52:07.358+08 08ca737d-d94b-46f2-bb48-33327b7fc0eb 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+fbcaf825-7175-4d83-8e74-120e4cf95efa 1 2018-01-08 17:35:44.853+08 2018-03-12 16:26:49.835+08 157090bc-b53c-4ae3-94fc-4b3804ed6433 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+46b4f9e9-23e4-4818-a438-dc1e704d09eb 1 2018-01-08 17:33:37.627+08 2018-03-12 16:27:07.267+08 448efd11-ceec-4f64-93a0-ad7133e38b8d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d685f8ef-8318-418b-990b-5c0b7aaa7e2c 1 2018-01-08 19:28:51.345+08 2018-03-23 16:32:23.224+08 2dead818-122a-42d9-8f52-3aa8d92ab0c3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8e298dad-1062-4012-8fb3-1b05adb415d3 1 2018-01-23 14:49:59.709+08 2018-03-23 16:34:36.555+08 c0cde67c-9734-4a3c-bb52-0caba0ae8724 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+11d6a8b0-4da2-472b-9ef4-85df5e9a547f 1 2018-01-24 11:30:26.757+08 2018-03-23 16:40:47.542+08 1d48c633-6d83-4b96-a572-6f59a0100c9b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6cc60b33-5d89-453b-ba31-d38482a9ce89 1 2018-01-24 11:32:24.983+08 2018-03-23 16:41:06.544+08 50600703-5c4c-4ceb-a44d-d0b79882b1dc 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+673c43a4-9317-4649-b5b8-56a122ad4423 2 2018-01-16 16:49:43.486+08 2018-03-27 10:52:50.304+08 2dfa1f51-0e5a-4e11-a86d-f8487d602ebf 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6e710f3b-5d74-43d8-aa5b-89613410ba7c 2 2018-01-11 10:36:37.372+08 2018-03-28 16:49:18.681+08 58647986-2640-4318-902a-5ee7d04150ef 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e43de4ec-78b6-42ba-90bb-387eb544283a 2 2018-01-08 15:50:34.798+08 2018-03-28 23:08:15.162+08 72fb9e20-7c7b-4ccb-9da1-d8600223beca 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0721f93b-cc19-4dd7-96e6-4794005f481c 1 2018-01-08 08:30:40.831+08 2018-03-28 23:12:27.924+08 9bdf8d5c-e571-4dd4-9614-0099745b0a73 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a0ac7cfb-2fc0-4e5e-ac37-37a5e1effe3e 1 2018-01-08 08:30:40.25+08 2018-03-28 23:13:18.084+08 5c18688a-731b-40d0-b4dd-4ba002026bb3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3d498b9b-a878-4a48-8e88-8991154f9267 1 2018-01-08 08:30:39.673+08 2018-03-28 23:14:14.345+08 3c8c9002-2d60-43f0-9a2c-52daa53cab54 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9cdf4777-a545-4674-ba15-51ab000ae7d1 1 2018-01-08 08:30:38.152+08 2018-03-28 23:16:05.375+08 e3713c95-6aa3-4a2e-ad89-579a16cb1a03 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+5a23459f-6ede-47d4-ae3d-8fe9cf62792d 1 2018-01-08 18:35:09.098+08 2018-03-29 11:39:25.969+08 29aa5799-e271-4913-8e21-04edddaa5be1 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+20a77cce-e455-4a31-afd7-6f10510aa0cb 1 2018-01-09 14:14:58.428+08 2018-03-29 18:00:04.473+08 85f5b6fd-92cc-4d22-9dff-952c59003e3f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+93a423e2-42b3-4b7d-8854-842293efc6eb 1 2018-01-09 14:07:31.168+08 2018-03-29 18:02:18.776+08 0beb606c-f306-4476-8526-31646c8107e5 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+93019638-64f8-4245-bdb4-0ce42493ad68 1 2017-12-07 10:22:04.892+08 2017-12-07 10:22:04.892+08 7118fecd-555d-4d6c-9b3a-63b6ed0d2a45 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3fd1641e-ba73-46b1-97d8-45877841ebb4 1 2017-12-07 11:43:58.695+08 2017-12-07 11:43:58.695+08 183c2cd5-5a53-4985-80aa-33a6ce2f82d4 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c96da240-7b15-4c50-97a4-8a01116bf267 1 2017-12-07 14:20:25.159+08 2017-12-07 14:20:25.159+08 4d5a3f58-0eda-4443-9dcc-c64bb1785d88 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f9a91641-6ecd-4bc6-a379-c525fd61df56 1 2017-12-07 15:20:39.538+08 2017-12-07 15:20:39.538+08 5fcd559a-c3dc-4c38-acde-b4b1749b4ab3 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7a2eaf7b-ff5c-4b89-b57c-badd6f4043d0 1 2017-12-08 09:55:09.538+08 2017-12-08 09:55:09.538+08 ef2cc4b4-23d3-4ff0-981b-84a8c98113ab 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5e00aef4-c162-4abe-a4ba-e73bfb991c9d 1 2017-12-08 14:40:29.021+08 2017-12-08 14:40:29.021+08 d2e5e59c-47f9-4eb9-98ce-c6dc6f2f0d66 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4f3234e1-d6ac-4927-8224-469d14ab9a0a 1 2017-12-08 14:49:12.893+08 2017-12-08 14:49:12.893+08 0fc23377-9f3d-4511-ab1b-8b8df0259d2f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+bd0e6c4c-edb9-4c6e-b543-ed83223b0fc7 1 2017-12-08 14:54:02.54+08 2017-12-08 14:54:02.54+08 14bab7df-524d-4a64-a618-23d4ebcc9b5e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+60baad2a-7ec0-4b24-8c76-5bed2e2b8485 1 2017-12-08 14:57:54.014+08 2017-12-08 14:57:54.014+08 efcb4c3e-fc6f-447b-8f73-3fdff1d77fc6 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+15d630ab-45de-4087-9cb9-4a3998b52dfb 1 2017-12-08 15:02:49.624+08 2017-12-08 15:02:49.624+08 4255e295-7830-45af-ab7c-44fee1668641 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1580ee6a-cc2a-4abf-8c6d-08b3a85e814c 1 2017-12-08 15:09:50.785+08 2017-12-08 15:09:50.785+08 ceed540f-d7a3-48bc-b8d0-e861e21499a4 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d2c71261-eb6c-4d2d-ad95-4078c8cbeaee 1 2017-12-08 15:16:37.887+08 2017-12-08 15:16:37.887+08 31cb6c0b-e369-46b0-9be4-1de3737503fc 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f5479f61-a20e-4b8b-a4c6-6f7a7dab7c84 1 2017-12-08 15:23:44.911+08 2017-12-08 15:23:44.911+08 ea797ffb-87b5-4e0a-8da4-7f627c347b2f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+75f3270e-7bc7-4e14-8fbe-2f5685daf59b 1 2017-12-08 15:30:34.578+08 2017-12-08 15:30:34.578+08 8583cb29-4726-4532-9530-a5b338d3483c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8d7c54ed-ecd8-41ca-b7ee-4196ff1dea3e 1 2017-12-08 15:40:02.612+08 2017-12-08 15:40:02.612+08 dc5bdee9-14f3-4040-ad1c-faf008358890 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+578d0261-a4ad-495a-94a4-8c4e72ade2aa 1 2017-12-11 15:27:02.998+08 2017-12-11 15:27:02.998+08 ef629030-d691-43fa-b6b4-b1465e60dace 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ed327a11-684a-4b1f-b9e0-e8639c8fff33 1 2017-12-12 10:23:59.551+08 2017-12-12 10:23:59.551+08 24064f03-7c7e-493b-99f2-c926717d28fc 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b096c0ed-860a-4bbf-8644-ad85dba1d41e 1 2017-12-12 11:55:07.943+08 2017-12-12 11:55:07.943+08 405df805-9088-45a7-b4b2-763299e0c57b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9be10a92-e718-4210-8afe-aec7ee423e5a 1 2017-12-12 14:08:56.827+08 2017-12-12 14:08:56.827+08 2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0f3fcf12-23aa-4be6-a8cd-a7a5112f4a4c 1 2017-12-12 14:41:03.872+08 2017-12-12 14:41:03.872+08 10018134-99f1-486e-8071-dc652f44d152 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b6b2d1d5-264c-4c8b-b508-68431ebc7a8c 1 2017-12-13 13:09:16.237+08 2017-12-13 13:09:16.237+08 5cd62211-11dd-4deb-83bf-2873ae7dd42f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+aa1bc88f-7dc8-46b6-bb24-c1acfc4bd4d6 1 2017-12-13 13:21:56.919+08 2017-12-13 13:21:56.919+08 b475bf8f-00a0-457f-ad96-95b187dba62f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+27e905b4-22e6-473c-bf18-8d3432dbff64 1 2017-12-13 13:27:21.367+08 2017-12-13 13:27:21.367+08 63b7958b-9b1b-49ca-b01c-62ebe4df6376 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2e6a94ec-808d-4cd5-9a31-53dfd946e157 1 2017-12-13 13:40:01.324+08 2017-12-13 13:40:01.324+08 41da65aa-dd1b-4a8f-8758-13f624e45dad 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+dc9efb66-a50d-4c10-b3f5-54700dec4c11 1 2017-12-13 13:46:22.553+08 2017-12-13 13:46:22.553+08 16f7e5ff-fb7a-4aa6-a701-9776f7638689 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+81851968-bb35-43ab-a0fd-c9f922484d6b 1 2017-12-19 17:52:03.688+08 2018-03-14 00:20:36.812+08 235b7fe6-cf6f-4cf4-8d40-a3103cc0fba7 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+1a285064-b74f-4e0e-8446-f36206159b06 1 2017-12-13 14:13:06.344+08 2017-12-13 14:13:06.344+08 34424e2a-ca3d-47c4-8275-532ca1986c8c 31f274cf-4345-4b4e-adbc-e7b05abf7453
+4cd4b5bf-e373-4598-92ad-e729fc9fccd1 2 2017-12-13 14:13:06.347+08 2017-12-13 14:13:06.347+08 34424e2a-ca3d-47c4-8275-532ca1986c8c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8f688434-d219-45e8-b902-e02cef3958cb 1 2017-12-14 14:22:34.588+08 2017-12-14 14:22:34.588+08 61db6668-b790-47e8-9429-55bfa4f98b90 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+037a040a-ffda-4a16-ae2f-0b156eeaf375 1 2017-12-20 10:35:00.776+08 2017-12-20 10:35:00.776+08 1ac45c30-affc-479b-8ad6-3d63d1fa33f3 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2a43bd9c-32ec-47a3-91ec-bf2d150bf048 1 2017-12-14 16:49:47.947+08 2017-12-14 16:49:47.947+08 af1cd7e8-52e1-4411-9c9a-20bc82a2786d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9f3ab602-8c33-4b85-bc82-6f28cc991a1f 1 2017-12-14 16:55:58.277+08 2017-12-14 16:55:58.277+08 a30d283e-1af2-4531-ab6b-be1186799eea 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ee390c37-e447-4248-9449-1c05e898295f 1 2017-12-20 13:51:02.577+08 2017-12-20 13:51:02.577+08 5e96e066-3520-443f-80a4-9a3a1a7badd6 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cebb317f-fa5b-4ea3-88f7-f395a949ecad 1 2017-12-14 20:28:00.584+08 2017-12-14 20:32:16.833+08 7776a9dc-8e14-417c-a5fe-4b1dd1c869d7 31f274cf-4345-4b4e-adbc-e7b05abf7453
+6f410018-5357-4499-876e-bfaa7f87a6b1 1 2017-12-18 10:57:40.211+08 2017-12-18 10:57:40.211+08 4d48086d-804a-426d-9867-0e87efdc74fe 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+22c54ed0-f2e1-45be-a8db-e2b05a6c5141 1 2017-12-18 17:23:33.728+08 2017-12-18 17:23:33.728+08 701ab719-e85b-4428-ad59-1b7adff31c56 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7acc67cd-6f9c-4a4d-b25c-7c7c5285754b 1 2017-12-19 14:21:59.003+08 2017-12-19 14:21:59.003+08 0eb7e920-0359-4b8b-b604-14bc1136e8f5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7a857685-2f05-4568-83cf-742b00cc4268 1 2017-12-20 13:59:41.257+08 2017-12-20 13:59:41.257+08 ac8a15b2-1daa-48ce-b77f-52e2429c66bd 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cd9de59e-d636-4334-bfb0-d4bfdf7d0815 1 2017-12-20 14:03:22.685+08 2017-12-20 14:03:22.685+08 676795c3-0d71-441d-aa0e-62b82dff8193 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cf4a1774-7235-439d-be10-5c18236dea1e 1 2017-12-20 14:30:07.206+08 2017-12-20 14:30:07.206+08 14f67669-6cec-42c0-a7ca-4b60950ec7b5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b04f28f1-c62f-444a-9171-3bca433956ce 1 2017-12-20 15:25:01.225+08 2017-12-20 15:25:01.225+08 6bf32a53-c1d4-4014-b0b9-da1af43bda76 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f82bd316-9158-47bc-9023-7fbade31d7de 1 2017-12-20 15:39:19.349+08 2017-12-20 15:39:19.349+08 ad41eeec-8dff-4cbb-9a3a-8d42db92bca8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a7a4d4cf-2511-4248-b6f3-233c55453827 1 2017-12-20 15:39:26.994+08 2017-12-20 15:39:26.994+08 cd5e889f-775b-446c-9ffe-e2d8eeceaaa0 a9e6ee3e-327c-49ad-a6b8-0f073bfdccd7
+50e8fea1-6428-4ded-be3b-647ef512c5e2 1 2017-12-20 09:11:42.444+08 2018-03-14 00:20:51.076+08 6039a6d8-af54-411e-a520-451b20b6d089 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+fbdf2755-cb94-48e6-823f-a7a4b9cd9355 1 2018-08-24 15:43:38.411+08 2018-08-24 15:43:38.411+08 a5da9800-2b00-4701-8793-3aaad3e140f6 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7d57ef52-60e4-4f3f-92d4-a098de6b3c7f 1 2017-12-20 15:44:31.147+08 2017-12-20 15:44:31.147+08 3da31fde-9ea8-406f-9a1b-4a9932dbc2df 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f15a40b2-b1ac-4035-9cf1-5c48fe64862c 1 2018-01-05 16:29:05.825+08 2018-01-05 16:29:05.825+08 bc476c11-0887-40fb-ae9e-06ab514a44c0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cd48b5aa-3933-4fab-a764-bfdb95fa86bf 1 2018-01-05 18:21:38.318+08 2018-01-05 18:21:38.318+08 42b1e83a-cc6f-4051-8187-75dab10af0b1 cf3cc1ef-8614-4d32-ba45-2ac5d387379b
+57a25025-b2f1-4e40-8fc2-52309d5e99c3 1 2018-01-08 14:19:21.24+08 2018-01-08 14:19:21.24+08 0d7661f6-5ce5-490a-9520-ad56ba769d79 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+fe968b15-7e4a-4288-84c2-dbffdb08427a 2 2018-01-08 16:15:24.168+08 2018-01-08 16:15:24.168+08 45aee45b-bc26-4ac7-a8ed-3dcbe187b2de 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3cee7abf-90d6-426b-b864-a3bf42ecee67 1 2018-01-08 16:15:24.17+08 2018-01-08 16:15:24.17+08 45aee45b-bc26-4ac7-a8ed-3dcbe187b2de 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+563d9d57-4693-405c-a151-3104436e634c 2 2018-08-24 15:26:31.706+08 2018-08-24 15:36:29.6+08 85e88d3a-7c29-4c8d-a2a2-89ffcaffd72b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+914fd203-e2e0-4db3-a311-773637fc7b59 1 2018-01-08 16:27:59.729+08 2018-01-08 16:27:59.729+08 d3ae39b6-419c-4d57-a353-69768f82908a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e50861fc-edb7-44be-90fe-99332d32beb7 1 2018-01-08 16:54:47.93+08 2018-01-08 16:54:47.93+08 f446b0ec-ee0f-40bb-a6fc-9767fbd78a2b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+684cc47b-0907-403f-b4f3-1f1fb9980677 1 2018-01-08 16:54:48.911+08 2018-01-08 16:54:48.911+08 de0bfd26-fb8e-4f9d-8e0a-0119650952c6 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0b31dbb2-11b4-4343-817f-1a16f215d86e 1 2018-01-08 17:34:18.698+08 2018-01-08 17:34:18.698+08 5f908b85-0f3a-48c0-bc83-8e191731a754 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+dd1657fc-d96a-4700-840d-c7af9da9dda5 1 2018-01-08 17:44:21.349+08 2018-01-08 17:44:21.349+08 cad4657b-dba7-4ad9-990c-bf0ce3ee1e6f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7f1dd7af-ebee-486f-9ead-aed01fb9cf19 1 2018-09-13 17:12:19.012+08 2018-09-13 17:12:19.012+08 51c68d6c-029d-4a88-8802-335e6e6ddf6c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0f2e2fa8-e41b-4c8d-acaf-7a437bd18025 1 2018-01-08 18:26:58.116+08 2018-01-08 18:26:58.116+08 0dcb57e3-244f-44d3-8f9c-a50fc74481a8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+13905484-5d79-4146-96b5-a78aa427fcc6 1 2018-01-09 10:35:25.635+08 2018-01-09 10:35:25.635+08 8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812 9c90124d-0230-4da1-be95-61ec1f25cd7a
+22009d34-ff60-4346-ad0b-d918f374a221 1 2018-01-09 15:01:35.188+08 2018-01-09 15:01:35.188+08 db974c14-3d61-403d-b847-e0523ad53964 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c857c441-8c1a-4156-84c7-a647e3f7cafb 1 2018-01-11 11:13:31.327+08 2018-01-11 11:13:31.327+08 d53887ba-c67a-4b45-a1ed-1a61fbde6c4c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5cec0d32-95e1-40e2-a0a7-67fadc9b7383 1 2018-01-16 09:44:42.411+08 2018-01-16 09:44:42.411+08 c02185df-1224-4e63-aab4-3d284c8bb526 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3254cbda-a637-4b1f-b967-7e683097a03c 1 2018-01-16 10:33:58.389+08 2018-01-16 10:33:58.389+08 e47f8159-ee4b-45c0-b827-30b69d0328d8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+13bc605d-4733-4db8-967d-52c227283bd0 1 2018-01-16 10:33:59.644+08 2018-01-16 10:33:59.644+08 ff38a597-0318-47bb-a647-5ad78dd2dca8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3a2334c7-6f52-4204-a8a9-9784890e5a18 1 2018-01-16 10:34:00.721+08 2018-01-16 10:34:00.721+08 addad535-5578-4010-9d74-dbeab2b9e9eb 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e7458024-5760-41c0-8a52-3b84fbb0abaa 2 2018-09-13 17:12:19.017+08 2018-09-13 17:12:19.017+08 51c68d6c-029d-4a88-8802-335e6e6ddf6c 10ee8413-1dfd-465b-9dfe-fc1a496a7fa5
+b7b5df77-bbf5-4850-a327-7ef397695976 1 2018-09-13 17:17:20.64+08 2018-09-13 17:17:20.64+08 a1d2070f-926a-42a1-8bf8-a39b89eb4c92 10ee8413-1dfd-465b-9dfe-fc1a496a7fa5
+8f0908e3-40a5-4b67-8bec-6e317871a94e 1 2018-01-22 17:01:19.501+08 2018-01-22 17:01:19.501+08 b914a394-bbd8-4ff4-857e-02a2d8eb6d25 3dfadb0e-7608-49e1-aa43-24f7442b424a
+99aef2b1-befb-42c6-9b81-9ba05a5ef139 1 2018-01-22 17:01:19.498+08 2018-01-22 17:10:01.726+08 b914a394-bbd8-4ff4-857e-02a2d8eb6d25 3dfadb0e-7608-49e1-aa43-24f7442b424a
+75425dc5-fcf1-43f4-bc13-848b5e95398e 1 2018-01-23 14:05:00.646+08 2018-01-23 14:05:00.646+08 3eb1b2e4-ba3a-4329-a821-33a7f5bec873 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f9895680-9637-43e0-bdd0-c150adacf551 1 2018-01-24 11:18:54.113+08 2018-01-24 11:18:54.113+08 11a0df92-8921-470b-af9c-d7593b8b1f78 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ce22b934-d5c0-406d-89f7-faf00663dc05 1 2018-01-23 10:22:18.301+08 2018-03-09 09:52:15.969+08 219cbb09-9c49-4167-846d-00a8bdfadb9a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3eb1dd8e-018d-4767-945c-9771b24fffcd 2 2018-01-08 17:44:21.346+08 2018-03-12 16:26:42.32+08 cad4657b-dba7-4ad9-990c-bf0ce3ee1e6f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+abe9e753-d8dc-4744-b605-e76a00cc4d06 2 2018-01-08 18:26:58.12+08 2018-03-14 00:16:59.921+08 0dcb57e3-244f-44d3-8f9c-a50fc74481a8 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4117168c-01f4-4abd-a520-cd618a77957b 1 2018-01-08 19:23:48.681+08 2018-03-23 16:32:02.153+08 537cf41f-69a4-47de-81ee-63485ab8df1d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+56508426-48f6-4536-bf0c-71d92a66c933 1 2018-01-23 14:46:18.986+08 2018-03-23 16:33:07.061+08 90a2bc12-2214-43ff-9154-9b9212de2c10 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c1df54c0-e342-43de-9e78-d5d703748fc7 1 2018-01-23 14:46:19.182+08 2018-03-23 16:33:24.555+08 5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+21122d09-b2bc-4b76-b38d-473767b1ebd0 1 2018-01-23 14:46:19.408+08 2018-03-23 16:33:44.949+08 5e7775c1-0766-436e-b701-b1102833b98d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+65e46736-aed4-4225-8017-5940e005a2a0 1 2018-01-23 14:46:19.613+08 2018-03-23 16:34:01.607+08 099c6283-519f-4946-aa9d-f0059a76b832 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2551687c-91fa-4545-869c-819ef1f78726 1 2018-01-23 14:53:15.171+08 2018-03-23 16:35:15.742+08 bbfa13d3-fd42-4230-97e6-792463dbaf85 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6d05cb1a-e0cf-4c12-91b2-c6a2e260b0aa 1 2018-01-23 14:53:15.38+08 2018-03-23 16:35:45.648+08 f6b98e0f-0bfe-4a95-808c-d6d10b4c803b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+197ed34d-9547-42fc-98b6-5693147ed4ca 1 2018-01-23 14:53:15.769+08 2018-03-23 16:36:04.279+08 1bcd78b8-bd96-4c95-8e19-27a1ac7356c9 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4a2e0b1d-a5ac-4fd4-bbe4-624746bb62d7 1 2018-01-23 14:53:15.968+08 2018-03-23 16:36:23.281+08 8bab3e11-dc23-4082-97ec-a04e78fa19c3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ee2f9e0b-fda1-41ea-ab16-6b1d2bafbd18 2 2018-01-08 14:27:58.807+08 2018-03-27 16:45:06.478+08 0d7661f6-5ce5-490a-9520-ad56ba769d79 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ff1b877f-3711-444a-9f7e-ce0345695228 1 2018-01-08 13:46:38.347+08 2018-03-27 16:45:57.054+08 2b6f224d-770e-41bc-b28b-5afbe3b213c4 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+df9037f3-8dce-4779-b0c8-1bce916ae954 2 2018-01-11 11:13:31.329+08 2018-03-28 16:48:50.423+08 d53887ba-c67a-4b45-a1ed-1a61fbde6c4c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0a59c44a-1c6e-41df-852a-4c8ae147bb2c 1 2018-01-05 18:09:59.823+08 2018-03-28 16:49:34.024+08 9e56c900-b85f-4abd-b53f-3162016875ad 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f59483d2-abe8-4d36-b982-2192e91aad16 1 2018-01-05 17:57:19.731+08 2018-03-28 16:49:41.341+08 0cbe0018-ac32-4dfd-ba20-7c6e9658a553 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+25ec78fa-7f89-4c56-8145-82ca10f3c478 1 2018-01-08 08:30:41.932+08 2018-03-28 23:10:05.979+08 44c42c98-a486-411a-8813-c6ba48aab00c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+15f1ad0b-d19d-4cb4-a970-7fa756d3531d 1 2018-01-08 08:30:41.364+08 2018-03-28 23:11:22.038+08 f90de97b-b6e8-417a-b628-7b8e4bb9e335 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2228b7c8-ddf7-4340-877d-e535750783b9 1 2017-12-20 15:48:48.777+08 2017-12-20 15:48:48.777+08 466241f9-ceea-4552-b9c6-114413124018 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+967080e3-98af-4159-b73b-83fbe1adc1ef 1 2018-01-05 16:29:20.577+08 2018-01-05 16:29:20.577+08 5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9d9688a4-56c4-46fc-8cfe-f7bdb2abf8bb 1 2017-12-21 11:15:16.273+08 2017-12-21 11:15:16.273+08 7c1b8df9-4088-4cc7-b07b-3299d827d7d0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+47a783ba-cb5b-4939-b416-3fc9345cce28 1 2017-12-21 16:37:36.679+08 2017-12-21 16:37:36.679+08 6af0f3be-6cb5-43c8-a588-490e10fdf4b7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ec1cec29-b96c-45ed-bc2d-36cd2dc990db 1 2018-01-08 09:46:41.144+08 2018-01-08 09:46:41.144+08 078b521f-572a-48bb-b327-09f918ef1e92 fcfced24-ec69-4898-b965-a6fcc3fda47c
+12e0e3ef-2263-40d2-9b29-6e796130a147 1 2018-01-08 10:24:01.153+08 2018-01-08 10:24:01.153+08 e55e2ee6-c58a-481c-9bd3-9df2b38dfa3f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ac14ec8a-bec7-46a5-9434-50605169d7be 1 2018-01-08 10:24:02.004+08 2018-01-08 10:24:02.004+08 4253e350-b64f-4b81-b19b-bcd45c6181ad 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+89b0829e-cf41-4017-827f-b70b602fc33c 1 2018-01-08 10:24:02.577+08 2018-01-08 10:24:02.577+08 0eab3179-48cc-4e55-8ec9-b7516415aa75 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ee21c1d7-3c43-4cf6-ae0f-a037134f1851 1 2018-08-24 15:41:52.457+08 2018-08-24 15:41:52.457+08 4e3f8da9-5108-45ea-a042-dfab49718c5b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4763216c-0b7d-46d6-afa8-14beb251473c 1 2018-01-08 16:27:57.446+08 2018-01-08 16:27:57.446+08 f9331a24-582f-45b8-bea8-b919ffd48516 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+441659ff-1370-4415-8a6b-93255b902186 1 2018-01-08 17:03:45.948+08 2018-01-08 17:03:45.948+08 a54c400e-8b31-47ec-9820-550d04916f47 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b6991bd8-7da3-4eb2-ba43-907ea1ae054b 1 2018-08-24 15:55:16.961+08 2018-08-24 15:55:16.961+08 a5766cb2-27a1-4d0a-939b-ac6aa0871a81 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+64443ff3-fd39-4b61-9322-175d16adaad5 1 2017-12-28 20:13:20.336+08 2017-12-28 20:13:20.336+08 aa64719f-ac6f-463c-83c5-dcdbd25be81e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d97b73dd-c95d-48aa-9631-4e9242fa6d4a 1 2017-12-29 17:15:38.768+08 2017-12-29 17:15:38.768+08 4e281788-df68-4193-bbe0-9159eee1f24e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ccd8487f-a6c3-4906-80b8-55373af26c7c 1 2018-01-02 17:33:10.083+08 2018-01-02 17:33:10.083+08 608c11f3-91d9-4d92-9459-a4f7eb20bf1d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cac0b8ec-a645-475a-bcee-9ae7a8d570bc 1 2018-01-08 17:03:46.152+08 2018-01-08 17:03:46.152+08 933a027b-e620-4a6e-8340-d10c7aa29009 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+988ad232-d103-4cbe-a8fa-f7447da0cc47 1 2018-08-24 16:11:22.98+08 2018-08-24 16:11:22.98+08 6de7929d-736b-4c4e-a1c3-e7550a7b6d31 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+99cb3ad7-81d5-41da-8bd6-1ac995024668 1 2018-01-03 13:53:36.238+08 2018-01-03 13:53:36.238+08 46ad9444-1665-48d6-bb9a-37cee37d1604 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+602b8121-19a5-4082-a904-aa0ee4446ff6 2 2018-01-03 13:53:36.242+08 2018-01-03 13:53:36.242+08 46ad9444-1665-48d6-bb9a-37cee37d1604 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6c3b58fc-ffb5-4370-8878-ebe1ff3956b6 1 2018-08-24 16:11:23.702+08 2018-08-24 16:11:23.702+08 209249f3-7316-4e7d-a3bf-df78afc260eb 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0ca97a38-3a05-434a-9fc6-90d00e83f7d1 1 2018-01-03 16:19:19.147+08 2018-01-03 16:19:19.147+08 4d523084-bf91-421f-bafc-f278a63c5541 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+638e72c4-6848-46e5-8105-4de93c390fe3 2 2018-01-03 23:06:41.724+08 2018-01-03 23:06:41.724+08 30519425-7bd8-440f-83ea-f9da4767faf9 3ee5b7e3-e7ba-49ff-86eb-2d6498f67116
+4b8727cd-03c8-43f9-998d-bdf67fc5a979 2 2018-01-03 23:08:28.584+08 2018-01-03 23:08:28.584+08 34eeec21-d4e0-4716-a88e-42267e349980 ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
+2bd76fa8-aefd-4e77-a1cf-e5f65232555e 1 2018-01-08 19:23:06.703+08 2018-12-14 15:49:12.254+08 f55d7414-2db9-4c07-ad9b-34637318171e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+fb39a5a4-ef13-46f2-af59-34b56c3f6e46 1 2018-01-04 11:56:59.877+08 2018-01-04 11:56:59.877+08 6a8343f7-8c07-4851-8924-f8d4f1f5ab78 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+fdbdba4e-0427-4f25-8971-7b3ce5f817f3 1 2018-01-09 10:42:58.091+08 2018-01-09 10:42:58.091+08 8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812 74e413a0-dd33-474d-bd1f-b7f71885dff3
+5d6297b1-c23b-4584-bb92-3c973d54d009 1 2018-01-16 10:21:41.703+08 2018-01-16 10:21:41.703+08 42fbfa5f-4ca7-4e1d-b42f-08f4f641657a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ceab8566-19c7-407c-8e29-a2f7b5abd5ae 2 2018-01-22 10:21:00.152+08 2018-01-22 10:21:00.152+08 0cffe018-1007-40ed-ac19-a399517129af 3d88a29a-ca10-482f-8643-4fd39d4b50e2
+8c06f4a1-6f11-410b-9377-479f834ffc7e 2 2018-01-22 17:23:55.713+08 2018-01-22 17:23:55.713+08 0cffe018-1007-40ed-ac19-a399517129af ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
+d7ef1dd4-a6c1-4505-a0d1-ce37cd4d09b7 1 2018-01-23 13:54:59.275+08 2018-01-23 13:54:59.275+08 70ed36c0-d58f-482d-8337-fafed8a2e6ac 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a2e60556-d41e-450c-a30d-fcef21de8a6a 1 2018-01-24 11:05:24.803+08 2018-01-24 11:05:24.803+08 38b81b7d-bb3e-4885-aaea-6035faf20d1b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5c5ad0d1-1aed-43d8-bdf3-178b5ccc8db8 2 2017-12-29 17:15:38.771+08 2018-03-06 16:50:50.778+08 4e281788-df68-4193-bbe0-9159eee1f24e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+93343c0d-6372-4047-8668-1ffcd2061d4f 1 2018-01-04 12:11:30.179+08 2018-03-06 16:57:44.097+08 6c0d843c-169e-49b8-8dde-188699cc3077 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+53dff476-de0a-4f48-8cf2-68d3a110f884 1 2018-01-04 13:43:27.006+08 2018-03-06 17:33:24.853+08 e8ccf6dc-5626-4bb7-9f88-9bf8972619b4 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ca6f3bdd-34c4-45e3-89bc-e26e10dafe40 1 2018-01-04 11:48:49.716+08 2018-03-06 17:40:04.077+08 d8860bee-374c-497a-a33a-258af59e3690 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+10d111ab-0eab-4d87-82e5-1bbbefb8d00b 1 2018-01-04 11:19:16.721+08 2018-03-06 17:40:27.003+08 10f69514-4a4b-4ecd-a318-f8bf0c81a965 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+83a57b71-e45c-4f38-b95d-210b993d67b1 1 2017-12-29 17:40:30.251+08 2018-03-07 10:15:48.875+08 e58ee78a-e499-483c-acc8-a42683d62149 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e7560d3b-9857-407b-a6ec-0b184dd34a22 1 2018-01-08 10:43:07.558+08 2018-03-09 09:15:25.763+08 b1c85f0b-c610-4243-83a4-3a1e87b411ad 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+51927eb9-21dd-42bf-9856-1496680e3524 1 2018-01-23 15:00:11.231+08 2018-03-23 16:37:22.111+08 c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a40ea34c-f9f7-4672-b969-adec1dff887b 1 2018-01-23 15:00:12.508+08 2018-03-23 16:39:12.382+08 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8982fb04-33e0-4ee7-9bb0-7ff5fbc13785 1 2018-01-23 15:00:12.71+08 2018-03-23 16:39:35.59+08 91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0b63e426-d86a-4edc-9c7c-398421fd5828 1 2018-01-23 15:00:13.314+08 2018-03-23 16:39:53.603+08 c9eacd36-38d6-48b9-9672-e76406906ea3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+5f6c2fa6-075e-4c97-b0b1-ce4b945b700d 1 2018-01-08 14:10:26.887+08 2018-03-27 16:45:28.874+08 c36c08c3-4f22-474e-b748-c6c32288c802 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ca79e288-7a88-4d43-a59c-09a227ed2a87 1 2018-01-08 14:03:13.651+08 2018-03-27 16:45:41.528+08 6a6797bd-fdda-4b37-bbab-ce377a01521b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f009ce71-ac99-4a14-bbfd-a69d39863d7a 1 2018-01-08 13:55:43.517+08 2018-03-27 16:45:49.12+08 09e8eef6-6b70-4cda-84c2-a7680f7a535f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+466bc6e3-375f-46a0-8698-ba5a45d8b5aa 1 2018-01-05 16:48:16.707+08 2018-01-05 16:48:16.707+08 1e0d3ad9-26a9-427e-be48-685ffe3e84b7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d839dbcb-4ca1-49cf-8bad-7927d56ef8c2 1 2018-08-24 16:11:25.514+08 2018-08-24 16:11:25.514+08 b0493f78-0950-47ac-bf5f-27797da84f44 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c65c23ff-c9d1-4b80-b949-4dd251cd23a0 1 2018-01-05 11:16:01.994+08 2018-01-05 11:16:01.994+08 175e2759-ae38-4ac5-a62c-6ed4877f3863 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6cae1335-dcaf-4478-8b14-e2427cb57569 1 2018-01-05 11:47:57.126+08 2018-01-05 11:47:57.126+08 2574b00e-2491-471c-925a-5b713afa9561 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cb8e9d12-039b-4e4b-8167-0d8ec7dbdb9e 1 2018-01-08 14:45:06.866+08 2018-01-08 14:45:06.866+08 8d1d1382-984f-4aa9-8e57-c2a2c21e0c06 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9cff67f3-9cda-47a2-b5d2-099a504b726f 1 2018-01-08 14:52:21.868+08 2018-01-08 14:52:21.868+08 e7a84149-53b0-4ba3-88e7-fe7e0e0f21d4 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4b8fc505-6590-416b-b3f9-e658931e9a86 1 2018-01-04 13:57:54.951+08 2018-03-06 16:01:55.878+08 660c0ba2-d714-4ad3-8166-a1fa25a9d7d1 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4f858fc5-73b6-4028-a706-dc1261246286 1 2018-01-05 15:12:03.165+08 2018-01-05 15:12:03.165+08 e2d93988-c0e0-4581-b406-e43e455f7864 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3f3894b0-9588-4524-9f75-38b28f3c7727 2 2018-01-05 09:45:50.148+08 2018-03-06 16:13:57.515+08 cf03d97a-0c99-494f-821d-da2dc02126dc 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6a1943df-2897-4d48-a088-90522fc34601 1 2018-01-04 15:33:35.042+08 2018-03-06 17:07:37.811+08 fb1119c8-c430-4066-9f02-60a558d92a68 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c8e12bbb-a4c2-4cda-acde-719d40978d99 1 2018-01-05 15:36:58.421+08 2018-01-05 15:36:58.421+08 d2a5375c-0240-4435-9b8f-a62372fafaca 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+bd34bbe2-ca15-48e0-b350-ccc08a87cfb7 1 2018-01-05 15:36:59.848+08 2018-01-05 15:36:59.848+08 780ffe7d-7369-4d2f-9184-32790466f2ba 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+373dd9df-59fe-4fb3-83a7-05c68a1f9dd4 2 2018-01-05 16:48:16.71+08 2018-03-07 16:44:47.909+08 1e0d3ad9-26a9-427e-be48-685ffe3e84b7 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+091a6fc9-5dda-4cea-a5e1-03f2174e3a8c 1 2018-01-05 16:34:09.768+08 2018-03-07 16:45:08.44+08 7802bcc3-5fdb-441d-a57a-a89ca2ec158b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ec42e98a-1667-41f4-9f58-e02af9e496c2 1 2018-01-05 16:34:08.793+08 2018-03-07 16:50:41.422+08 5eb050b5-8b57-4528-adce-b3633e613b6c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ba7ceb0e-f6b7-4698-8ef3-ef352df0d199 1 2018-01-08 11:40:11.757+08 2018-03-09 09:15:13.041+08 f0b38ea6-f88e-4e79-b7bb-02d09ef2cf03 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+57a2f7b3-16b8-4298-ac6b-978d306d19a1 2 2018-01-05 11:16:01.99+08 2018-03-16 18:38:00.408+08 175e2759-ae38-4ac5-a62c-6ed4877f3863 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+da5ea9b6-c1f1-40c6-9bc6-5c7920e05d5d 1 2018-01-05 11:50:25.111+08 2018-03-16 23:20:25.184+08 b6095ab3-88ff-4a71-8f42-f0656b301e1e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+5e6182d7-7d90-40a6-a020-c598a2945429 1 2018-01-05 11:06:58.802+08 2018-03-18 15:48:16.316+08 17c35362-c638-46de-bea3-840893daf864 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+cf11c000-7c1a-4247-b85b-5fa6e911c28f 1 2018-01-05 11:06:58.395+08 2018-03-18 15:48:42.141+08 30da8546-87f0-4a5c-bd4f-f9919c954c82 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+5d1e6a40-b6e8-46e1-8f1a-25c985ad62eb 1 2018-01-05 10:51:34.747+08 2018-03-19 15:41:36.732+08 d77b7e20-7877-47dc-aef4-37a663bac660 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+70e72c6a-9cbd-44ce-95d9-cfa2b58e115b 1 2018-01-05 15:11:20.707+08 2018-03-20 17:54:47.43+08 abfa6634-cca0-4696-b67e-1c2eb2e57c9b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+714e146a-7bbc-4062-b58d-cd90a577f3d4 1 2018-01-05 15:11:19.829+08 2018-03-20 17:55:00.385+08 c50b3ecc-a416-4991-b64f-f2c79d8d1848 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+908acd8a-6cea-4af0-b7a5-1695246237bc 1 2018-01-05 14:57:25.904+08 2018-03-20 17:55:07.954+08 e6a3a1f5-2a8f-48a0-9758-407065bae1e9 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+533044f9-17b6-4537-932e-4211a4578be6 1 2018-01-05 14:53:24.807+08 2018-03-20 17:55:17.408+08 49b0b2b7-b6e7-4ec8-adf8-4c94dcfb2eae 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0df21243-96db-416f-890b-b77d40c36943 1 2018-01-05 14:53:22.518+08 2018-03-20 17:55:26.646+08 607fa5aa-d8d7-48be-bf60-b8a6d0de2e8e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8ac2e35e-7863-4a5d-ad18-7d1893b129da 1 2018-01-05 11:07:04.195+08 2018-03-20 17:55:39.093+08 b750e865-af38-40e9-a478-16fefb4cb618 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+fdedf646-c4fd-453e-806d-aa33b7054d19 1 2018-01-05 11:07:03.692+08 2018-03-20 17:55:48.722+08 ecfacbbe-037c-42cb-89ce-68a2e6170758 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ff2262ff-8083-46b4-963a-715c1a2a7eae 1 2018-01-05 11:07:03.19+08 2018-03-20 17:56:53.856+08 27f99320-b0dc-4b93-bc24-f5ccf9337356 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f4206b10-b245-48ab-8763-a3ce3fc2f8c6 1 2018-01-05 11:07:00.267+08 2018-03-20 17:57:04.452+08 35d1f34b-ccac-4110-9bb6-7e0a3327ef18 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+11932a54-f638-46e8-ac45-87ae6586a8c5 2 2018-01-05 12:01:31.676+08 2018-03-20 17:57:37.361+08 2574b00e-2491-471c-925a-5b713afa9561 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9fc202d6-1860-47e6-92de-f7aec26cb174 1 2018-01-05 11:07:01.125+08 2018-03-20 17:59:00.615+08 0530f690-1f3c-430e-97c7-6dc82f96fd47 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+cbe12e3b-0f5e-4aa0-8dbc-35fed3a80ad8 1 2018-01-05 11:07:00.023+08 2018-03-20 17:59:50.368+08 d14c6b02-4298-4713-b970-eba0aafee88b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0887c6ad-38d4-4eeb-a696-37a8e8bfcf3a 1 2018-01-05 11:07:00.141+08 2018-03-21 13:52:32.537+08 feb1fe0d-208d-41cf-9533-596f78fa835c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+92a1e4f8-e1fe-47ad-a20b-aa94951d0375 1 2018-01-05 15:18:31.286+08 2018-03-21 15:37:41.577+08 73a7b800-25d7-41ad-872d-96cc4f9430de 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+eba5f751-2548-4ca9-90ff-8e1860315669 1 2018-01-05 14:53:53.03+08 2018-03-21 15:38:16.587+08 b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3214fe7b-6a2c-4666-8964-506d0c3b80a6 1 2018-01-05 14:50:21.834+08 2018-03-21 15:38:33.609+08 473aee20-7c00-41cd-bd6e-b44c35c758ea 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ba597375-c17f-4caa-9134-f7fa11ea1b30 1 2018-01-05 14:46:16.302+08 2018-03-21 15:38:50.371+08 0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9c619f6a-6a64-4dbb-a4e0-75bdd13fc992 1 2018-01-05 15:33:22.33+08 2018-03-21 15:42:42.072+08 abaf6bf4-288f-4d21-9fab-515213e6dcac 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+36b0f90f-99b8-4543-8f97-118b79bf0572 1 2018-01-05 15:36:59.034+08 2018-03-23 16:26:26.549+08 ccb72dc5-f9bc-424d-a3ec-e6e9121bc534 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2885a62d-12f1-4301-941a-3ee5d1e4eeeb 1 2018-01-05 11:50:22.291+08 2018-03-23 16:26:59.403+08 5f4e4e99-20b3-4bf7-95cb-a2f507595b2d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3b3b9d0a-f929-4f7a-8fcd-61d951203f7c 1 2018-01-05 12:01:35.793+08 2018-03-23 16:27:42.975+08 cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3ddcd5c9-5483-405f-92e4-ed146ec893c3 1 2018-01-05 14:02:09.791+08 2018-03-23 16:27:59.867+08 11f0a3dc-13ad-4c40-ae16-1b2f1d139564 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+21e13ca2-f774-417a-a4a6-85f366d078ee 1 2018-01-05 14:02:10.787+08 2018-03-23 16:28:36.853+08 13ee1f91-04cc-48af-820e-ffc0ed179b6c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b853cd3e-e1fa-4ef3-b714-ade49476bff2 1 2018-01-05 15:48:51.36+08 2018-03-23 16:31:24.175+08 424f45f6-916c-4383-bce4-c71153f82e63 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+718ba26c-0638-4b39-b2e2-db452908c052 1 2018-01-05 11:06:57.937+08 2018-03-29 15:04:47.928+08 ba349741-3d03-49c6-a2cf-9e2156fd36c4 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+237f87be-73fd-42c7-8045-a3b3e98cdadc 1 2018-01-24 11:33:34.506+08 2018-03-23 16:41:27.043+08 27930598-2f6e-4932-a816-9685f17969b5 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2fa1d9b0-bc30-497a-a46d-d3d70c750edf 1 2018-08-27 14:20:09.993+08 2018-08-27 14:20:09.993+08 99c61d5d-4b9d-4fca-9d8c-e6d530b15871 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+972f1864-15c8-4b9b-bf9c-74d12a48bbd5 2 2018-08-27 14:20:10.002+08 2018-08-27 14:20:10.002+08 99c61d5d-4b9d-4fca-9d8c-e6d530b15871 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+cfafdaea-f33d-431b-a4d9-44341366d0e8 1 2018-10-18 15:18:15.089+08 2018-10-18 15:18:15.089+08 5de488a0-c8c4-4e3d-b0c7-82150f4bd79b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+91f6f550-8306-4e10-8099-9b323d57edb1 1 2018-11-03 15:41:07.726+08 2018-11-03 15:41:07.726+08 2729651f-9ad2-44f0-b9cf-bfc33669f9c7 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+238b4b73-1be3-4467-b185-3717e1cb1c68 1 2018-11-13 15:36:10.369+08 2018-11-13 15:36:10.369+08 830b9ca6-451c-480a-8013-67108cd4173f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3868a833-ef41-49f6-bdc1-524f920f3694 1 2018-11-13 16:37:13.339+08 2018-11-13 16:37:13.339+08 f125a65b-639e-46f7-8b52-6d2f4f2a064a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3f011ef9-77bb-401b-8290-643d74f1684a 1 2018-11-19 11:02:17.777+08 2018-11-19 11:02:17.777+08 d199daf3-83a4-4bcc-b23b-b6ca37fba927 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+bd3dc3ee-3bc7-4248-9fd3-bf20b08dfa02 1 2018-11-23 16:45:17.054+08 2018-11-23 16:45:17.054+08 3b796285-ef41-4963-9304-f0909623f5c7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+552ab723-f534-4b17-9a84-65142c14978e 2 2018-11-23 16:45:17.056+08 2018-11-23 16:45:17.056+08 3b796285-ef41-4963-9304-f0909623f5c7 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e99793c6-6cc5-49be-9551-14252cac2fb1 1 2018-11-28 10:41:03.638+08 2018-11-28 10:41:03.638+08 a1120cb3-3d96-45cc-81df-36f6c64d505c 3dfadb0e-7608-49e1-aa43-24f7442b424a
+24f81ea9-59f6-4e31-a6cd-d392cd797a37 2 2018-11-28 10:41:03.641+08 2018-11-28 10:41:03.641+08 a1120cb3-3d96-45cc-81df-36f6c64d505c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1842a81b-e5de-4835-a800-e8ad4353ff87 1 2018-12-03 10:29:47.825+08 2018-12-03 10:29:47.825+08 c6a59efb-40c2-4104-9b26-7895bb8e072d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ce55f3f5-68bc-446b-a42b-9d589c6a1917 1 2018-12-06 10:05:43.634+08 2018-12-06 10:05:43.634+08 91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 1aa841f1-d3fb-4523-9b54-e601d350c745
+0f251392-a8a4-43c5-97d9-30744aa0b17f 1 2018-12-07 17:12:17.18+08 2018-12-07 17:12:17.18+08 e8357fe4-05bb-4159-8a27-a46212d14544 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2e606b06-2574-4c66-807b-3c1c74604834 1 2018-12-07 17:22:03.976+08 2018-12-07 17:22:03.976+08 326d5283-7066-4e0f-9e27-380773523f19 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4abe4198-cdbd-4d72-8e9f-cc92ffede877 1 2018-12-18 16:53:43.563+08 2018-12-18 16:53:43.563+08 66ccfb40-3e33-4b5b-a47b-be50c83473e9 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d1951ebd-96f2-470e-bacb-b01b6fbfc5e6 1 2019-01-19 17:17:31.003+08 2019-01-19 17:17:31.003+08 0a341896-3c5d-4e60-af19-fe5f645c6967 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ecf46a8d-e7f2-4043-8671-2e1446607d6c 1 2019-02-25 13:32:42.883+08 2019-02-25 13:32:42.883+08 c952a71d-a917-40a7-aecc-cf2dc40c238a d0e8f529-c1bf-4146-beef-cd3056ea9787
+a6703faa-aa9d-4b91-a785-cfcbd58e52db 1 2019-02-25 14:25:00.047+08 2019-02-25 14:25:00.047+08 3d19a0b1-da48-466d-88d1-dc7c1f73bc68 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6af6e7b8-a166-4eb9-b326-b70b47acc94e 1 2019-02-25 14:25:00.05+08 2019-02-25 14:25:00.05+08 3d19a0b1-da48-466d-88d1-dc7c1f73bc68 d0e8f529-c1bf-4146-beef-cd3056ea9787
+21e62032-777f-4643-a1f7-de24c0099e71 1 2019-02-25 14:25:00.053+08 2019-02-25 14:25:00.053+08 3d19a0b1-da48-466d-88d1-dc7c1f73bc68 118383e6-1b61-4e15-8dee-a1a2a61b531e
+8b21d718-3d6d-4eb6-b9cd-f9090d48f121 1 2019-02-25 16:10:34.011+08 2019-02-25 16:10:34.011+08 934104cb-a134-4796-9c3d-52f0e8266fa3 3dfadb0e-7608-49e1-aa43-24f7442b424a
+6aaaa96a-2d02-418d-b084-dc33fcc52662 2 2019-02-25 16:10:34.015+08 2019-02-25 16:10:34.015+08 934104cb-a134-4796-9c3d-52f0e8266fa3 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e
+cbedc498-a7e7-4d15-a577-c4199e4590fe 1 2019-02-26 16:47:57.171+08 2019-02-26 16:47:57.171+08 c809f621-a9ff-4922-aa0e-1bcadbfcb7e1 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9f417292-8eda-4d81-99da-f675b85d8d39 1 2019-03-27 16:22:34.479+08 2019-03-27 16:22:34.479+08 8ebd65bb-633a-43d4-880a-d916b11067ba 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cb44766d-6328-46a6-a1e2-dccbc8abf7ce 1 2019-04-16 10:59:31.904+08 2019-04-16 10:59:47.082+08 752edd7f-ca25-4a19-bf4a-53a700f2556a 3dfadb0e-7608-49e1-aa43-24f7442b424a
+3e2852ce-43b1-46ff-bb32-dfcf92650dd0 1 2019-04-23 15:47:59.411+08 2019-04-23 15:47:59.411+08 2698c5d7-398d-41ad-bdea-68e26f77a6bd 7bc18b0f-46d5-403a-893a-029eed333a46
+ad654f88-5e0b-41e4-bbaa-82af8fd16f95 1 2019-04-25 15:04:01.449+08 2019-04-25 15:04:01.449+08 3a1c9f2b-76dc-4276-8e10-aba208fd1fc5 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2c43bbd4-cbae-41b9-974f-84297e8d9e16 1 2019-05-07 15:55:09.361+08 2019-05-07 16:50:10.377+08 e907425b-f687-45f0-9e44-798f6c00968f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6629488f-b160-48aa-9b7f-842db418fbf6 1 2019-05-29 15:57:45.372+08 2019-05-29 15:57:45.372+08 304a0d25-d131-4d28-9534-296b7df2adb3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f684ae18-0aac-4dcb-aef8-d641277b7295 1 2019-05-30 10:24:01.007+08 2019-05-30 10:24:01.007+08 42fbfa5f-4ca7-4e1d-b42f-08f4f641657a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+29410758-574b-472b-86c3-7d1cf0e76b91 1 2019-05-30 11:20:53.232+08 2019-05-30 11:20:53.232+08 7f382df2-35f7-4128-9276-d2a3a40d6547 ca45c7c2-42df-48cc-849c-c4cd01067e5d
+1dffaaf8-93b5-42bd-b641-4c9e543bd8ae 2 2019-05-30 11:20:53.235+08 2019-05-30 11:20:53.235+08 7f382df2-35f7-4128-9276-d2a3a40d6547 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+774b9665-0093-406d-82a5-0876622a38b5 1 2019-05-30 13:47:48.537+08 2019-05-30 13:47:48.537+08 104df6e9-2d4e-49ac-b7e1-a6d5cc2ba0e1 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c397dade-68d0-4540-8762-8b3b952d8738 2 2019-05-14 14:10:38.851+08 2019-05-31 16:19:28.934+08 d634c358-000d-4c53-8c4b-0f411b4a52c3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+307c2a2a-d933-42bc-910e-ad6019053f9b 1 2019-05-31 16:21:25.573+08 2019-05-31 16:21:25.573+08 6daadb42-2ee7-41fa-a6bd-85d9c0d77383 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f6b6a799-5ea9-411c-ab15-eed85c3363e7 1 2019-05-31 16:22:59.79+08 2019-05-31 16:22:59.79+08 d3c271ff-22cb-4938-8c5f-c63484107a38 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+68b64022-0338-4ea5-8724-b23e112b8606 1 2019-05-31 16:24:47.767+08 2019-05-31 16:24:47.767+08 ef6476c9-709e-4afb-a4d9-57009ee3ecf5 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+231ec281-245a-42c4-a57c-118fc0c16011 1 2019-05-31 18:01:12.162+08 2019-05-31 18:01:12.162+08 85e07675-26a2-435b-8ee9-6c790ffe7463 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a7fb1de1-1c96-4e0c-ab41-c24a6cc6fd79 2 2019-05-31 18:01:12.195+08 2019-05-31 18:01:12.195+08 85e07675-26a2-435b-8ee9-6c790ffe7463 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7cb70a27-5f67-494d-aea7-976fceabd55e 1 2019-06-03 11:50:03.935+08 2019-06-03 11:51:59.413+08 31c3b19c-2202-408e-ba8f-efd800be8801 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0e2b1a40-1445-41d3-bdfa-e4f5da1cf92a 2 2019-06-05 10:43:13.772+08 2019-06-05 10:43:13.772+08 fd43ad33-b4b0-46a5-b48c-5a4fa76e0aed 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+79f916f0-c25b-499a-986d-64311324c671 1 2019-06-05 10:43:13.775+08 2019-06-05 10:43:13.775+08 fd43ad33-b4b0-46a5-b48c-5a4fa76e0aed 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4f45c56b-fd06-4ed0-a6e3-35e78d0ed499 2 2019-06-05 11:07:53.598+08 2019-06-05 11:07:53.598+08 d8d4cee4-3e1d-4d43-8861-53ccd536112e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+31c55214-5327-487e-8633-a4c329e1a312 1 2019-06-05 11:07:53.601+08 2019-06-05 11:07:53.601+08 d8d4cee4-3e1d-4d43-8861-53ccd536112e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cefce46e-a10e-4588-a7b1-c6b5e0454e31 1 2019-06-06 14:15:52.934+08 2019-06-06 14:15:52.934+08 4b8a42f4-db96-4d3d-937c-0e98cae45ea0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7c07bcb8-40eb-4b12-a566-ffc8c4a1252a 1 2018-01-24 11:34:49.46+08 2018-03-23 16:41:46.57+08 e5f12d4b-bb3c-4158-b98e-8af3579bd2cc 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f91278d4-3571-4028-8205-df9d7eabd9f5 1 2018-01-24 11:34:50.377+08 2018-03-23 16:42:41.55+08 362018b7-e626-4eab-a6ad-214d85cfcc03 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9a4f5022-d830-4559-bff6-a5b6e6b6393f 1 2018-08-28 17:55:20.403+08 2018-08-28 17:55:20.403+08 c631f2ea-9e5c-415a-b56e-9d96c600e527 30e6dca7-ede5-48be-9952-9fb056b2e9d1
+6949ace4-688f-4c60-856e-38b66f491094 2 2018-08-28 17:55:20.413+08 2018-08-28 17:55:20.413+08 c631f2ea-9e5c-415a-b56e-9d96c600e527 d0e8f529-c1bf-4146-beef-cd3056ea9787
+ab4809e4-f574-4d5c-90c4-a8be6e48f158 2 2018-08-28 17:55:20.421+08 2018-08-28 17:55:20.421+08 c631f2ea-9e5c-415a-b56e-9d96c600e527 7667c2d9-3c04-4818-bfeb-42f43b60af77
+6ac020e9-abb5-4bb3-bbef-a3b930f21731 1 2018-08-28 18:06:12.394+08 2018-08-28 18:06:12.394+08 9aa93498-820e-4fc6-a288-5b2274fb9246 3dfadb0e-7608-49e1-aa43-24f7442b424a
+3c04d8b1-1bb2-41b3-a9e1-30477d6da962 2 2018-08-28 18:06:12.4+08 2018-08-28 18:06:12.4+08 9aa93498-820e-4fc6-a288-5b2274fb9246 30e6dca7-ede5-48be-9952-9fb056b2e9d1
+c7ac0d00-dcd4-4dc1-ae3d-1ae943392ad1 1 2018-09-19 17:31:06.045+08 2018-09-19 17:31:06.045+08 56e2d696-3384-449a-9072-46e2a18adbc8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+33f671fa-6b32-4bda-af2c-1c435c65392c 2 2018-09-19 17:31:06.047+08 2018-09-19 17:31:06.047+08 56e2d696-3384-449a-9072-46e2a18adbc8 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+dc210dff-ef4a-4e64-adab-59655d775a74 1 2018-08-24 15:26:31.709+08 2018-09-21 11:23:18.756+08 85e88d3a-7c29-4c8d-a2a2-89ffcaffd72b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9f047473-1e30-4e60-93f0-85781d1bfbd5 1 2018-09-21 17:53:12.724+08 2018-09-21 17:53:12.724+08 0f37be2c-4009-4079-81f8-e9c598773ea2 8280ccac-494e-4784-bd0c-5ffe97746993
+aef73585-33cc-40f1-8f4d-6d1d09e59434 1 2018-10-24 10:46:54.975+08 2018-10-24 14:58:46.646+08 5e639171-0ad1-4fcb-aa69-d2f1d4af1f51 6eeb1913-71e2-40b2-ae39-c8750cbdefd7
+66cc9d36-940b-4fe5-b66d-d3e7dee81055 2 2018-10-24 10:46:54.981+08 2018-10-24 14:58:53.439+08 5e639171-0ad1-4fcb-aa69-d2f1d4af1f51 118383e6-1b61-4e15-8dee-a1a2a61b531e
+649c125c-9faf-43aa-978a-251e7b7e3a8c 2 2018-10-24 10:46:54.988+08 2018-10-24 14:59:12.542+08 5e639171-0ad1-4fcb-aa69-d2f1d4af1f51 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22
+4232eb85-d2fb-435e-a1fa-3896c591fcf2 1 2019-02-25 17:37:03.972+08 2020-04-05 15:52:32.636+08 145c9d4f-4fc0-4441-a8c4-0f32b15f5018 dff00e7d-1fb2-443e-be6a-615214932ee6
+bcce5a40-25ee-4628-81ec-ddb2ba172bbc 1 2018-11-05 09:08:45.111+08 2018-11-05 09:59:27.86+08 a03158bb-03f2-4da6-9ef0-10b837caab9e 3dfadb0e-7608-49e1-aa43-24f7442b424a
+f4429bb2-1a4f-46c3-90aa-d3ca911e484e 1 2018-11-15 15:46:09.078+08 2018-11-15 15:46:09.078+08 5f1f2736-2744-4339-b456-50c5626ea641 66537b16-1e7d-4823-b03e-676459f5891d
+7a9d917f-ec9a-4777-aa07-456ef2d00ae3 1 2018-11-19 16:52:15.444+08 2018-11-19 16:52:15.444+08 1a456dbb-f7f0-493c-969d-2a0c1f1698ef 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+725a525e-ce17-429b-a647-6aaac43b5b16 2 2018-11-19 16:52:15.447+08 2018-11-19 16:52:15.447+08 1a456dbb-f7f0-493c-969d-2a0c1f1698ef 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2550cb4b-a31e-4560-bed0-8325a2fea057 1 2018-11-23 17:09:41.869+08 2018-11-23 17:09:41.869+08 8c73b29c-6146-4170-9cb7-d8ead8990d60 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a1fd0bc0-392b-4ffa-9460-997e6df4a464 1 2018-11-28 10:42:00.889+08 2018-11-28 10:42:00.889+08 f0c41435-ecaf-4e42-b592-b53aaa72f721 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2517e18c-8012-4694-84f2-59146317e9f0 1 2018-12-03 14:06:15.009+08 2018-12-03 14:06:15.009+08 f0229321-e654-43b1-a172-a660b74367cd 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+827f748e-7f46-44dc-908b-4f30a556d488 1 2018-12-06 10:14:56.964+08 2018-12-06 10:14:56.964+08 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 1aa841f1-d3fb-4523-9b54-e601d350c745
+85c7634a-334b-4eed-a93c-c3192e743bcd 1 2018-12-06 10:18:55.769+08 2018-12-06 10:18:55.769+08 cb4eb310-0876-492a-9e06-8cd0a5542c5b 1aa841f1-d3fb-4523-9b54-e601d350c745
+49f198b3-5c31-4f2d-b625-265c66993722 1 2018-12-07 17:12:17.326+08 2018-12-07 17:12:17.326+08 01f1ac79-6cbb-4f77-b73f-cf8d602f11a6 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+bcbf41b5-d713-46b4-a1e8-bd6f2e1d4c62 1 2018-12-18 18:03:29.504+08 2018-12-18 18:03:29.504+08 6b180341-15c7-4148-89e3-b6fc10b0f7b5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a54c026d-8570-4920-b0aa-4ca6984bc48c 1 2018-10-26 14:52:49.972+08 2019-04-19 14:55:44.498+08 3805bf98-24dc-453c-a62b-a5a97633ca8b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3bfea365-a06c-4aad-95b2-33dce750cdbb 1 2019-03-08 17:17:40.595+08 2019-03-08 17:17:40.595+08 fde20cf0-6bb6-4987-8830-dec5aa5874f2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+786724c1-acde-4ce1-99b0-44ffb417add2 1 2019-03-12 09:49:51.412+08 2019-03-12 09:49:51.412+08 7f8fac16-3dbd-4d0a-bf38-322c5818e096 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+babf1792-c944-4e08-b747-a70be2981c9e 1 2019-02-25 13:43:02.004+08 2019-02-25 13:43:02.004+08 30bfe302-d364-4325-be1f-7fef73afaf77 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+98b42027-b02b-4d02-af91-fa4b310a1e9c 1 2019-02-25 13:43:02.01+08 2019-02-25 13:43:02.01+08 30bfe302-d364-4325-be1f-7fef73afaf77 d0e8f529-c1bf-4146-beef-cd3056ea9787
+88d4cda9-f09e-4941-b443-9dc8a4436f90 1 2019-02-25 15:41:07.248+08 2019-02-25 15:41:07.248+08 c169f72a-deae-4135-84ee-62d771722507 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c872b023-f403-4046-a167-4a9865399e6d 1 2019-02-25 15:41:07.253+08 2019-02-25 15:41:07.253+08 c169f72a-deae-4135-84ee-62d771722507 d0e8f529-c1bf-4146-beef-cd3056ea9787
+55d0479b-e79d-439f-9c46-4f49f203ac5c 1 2019-02-25 15:41:07.256+08 2019-02-25 15:41:07.256+08 c169f72a-deae-4135-84ee-62d771722507 118383e6-1b61-4e15-8dee-a1a2a61b531e
+2e756ed4-27ad-4581-b18c-50e26ecfaa35 1 2019-02-25 17:37:03.963+08 2019-02-25 17:37:03.963+08 145c9d4f-4fc0-4441-a8c4-0f32b15f5018 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+afdc9171-1256-4338-9615-016dd33a24cb 1 2019-02-26 16:29:15.92+08 2019-02-26 16:29:15.92+08 7ac67279-f72c-4296-ba27-9b03b8c07c05 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0fd4d11c-fd8a-4e3d-8957-41e4c1690319 1 2019-03-05 13:25:13.302+08 2019-03-05 13:25:13.302+08 49b8d21c-3486-496b-b17b-ccf195aaeb65 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2fc597e9-5717-436f-a2d8-ed88c18cbd11 1 2019-03-07 15:12:54.31+08 2019-03-07 15:12:54.31+08 a0803ec9-69c4-41dd-9531-2de25b6274b3 2d8a5feb-5c4a-49f1-b5cd-3770f2b8e090
+8530041f-38d8-47a4-b52f-4fc03a11bd29 1 2019-03-14 11:21:14.949+08 2019-03-14 11:21:14.949+08 9aa975c7-a3d4-42ec-a384-17d0425e602a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+fc258178-b85a-4632-b5f6-c6b4290556f6 1 2019-03-15 11:37:05.302+08 2019-03-15 11:45:39.318+08 2f25fa6f-a99e-440e-ac0a-29ada5069d4f be9d7f9a-cbe9-4033-b6b8-8920bd29fdbd
+94ddf32c-b093-417c-a1d7-42381d290092 1 2019-03-15 16:40:05.808+08 2019-03-15 16:40:05.808+08 771be2fa-a2f9-4ba8-8c08-76b091627b87 66a06e5d-a436-4d37-806b-919d8fd1c564
+c7582cca-84ee-4bae-8b85-05c423f792b4 1 2019-03-20 15:26:27.803+08 2019-03-20 15:26:27.803+08 18900e9a-1828-4d26-8966-51c1e5ebfa26 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2ff60b54-bc1a-4c20-8396-07b7312fe984 1 2019-03-22 10:33:16.432+08 2019-03-22 10:33:16.432+08 954dabda-7fd8-456d-8d9a-bc7058d4e8ad 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9bc994ef-a76e-46fb-82c4-60946018fa97 1 2019-02-25 17:37:03.969+08 2020-04-05 15:52:40.961+08 145c9d4f-4fc0-4441-a8c4-0f32b15f5018 2dd0e24e-8f6a-4171-8657-493de66868bd
+00b7975b-2a18-4146-9e51-b8d8b71550d8 1 2019-02-25 17:37:03.966+08 2020-04-05 15:52:47.715+08 145c9d4f-4fc0-4441-a8c4-0f32b15f5018 e65d6dc4-b239-4755-b83e-af11fa23fb70
+d2078c90-429d-4446-998d-d43e6ccd4b77 1 2018-08-30 16:11:13.766+08 2018-08-30 16:11:13.766+08 2425cf54-e1bc-4c75-ac7b-62b039f29548 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+161d57d4-a9b7-44a5-a6b0-90ea6c5a2121 1 2018-09-19 17:32:06.995+08 2018-09-19 17:32:06.995+08 8b635501-4320-49f5-b573-e4193d4e31b6 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+eac22ea1-cdd7-45c9-90b1-79c6dc066cc0 1 2018-01-26 09:39:05.309+08 2018-01-26 09:39:05.309+08 7697d048-c21e-4b28-8c88-a59de01bae96 2d974b4e-c841-430c-8cbf-c92f7d6a890d
+8e64aea7-1579-42bf-ac93-406314fe9b30 1 2018-09-25 10:58:50.735+08 2018-09-25 10:58:50.735+08 19bb2b93-6e2e-4861-95df-67a68bc71fc4 d4f271b6-567a-4880-beb0-161b33ac2094
+33551006-d4b1-487b-b77f-f8472a7e463c 2 2018-01-28 21:26:41.918+08 2018-01-28 21:26:41.918+08 7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4 ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
+0c9f7cef-31cb-4539-8104-92c9a1c25262 1 2018-01-30 17:26:52.47+08 2018-01-30 17:26:52.47+08 67becf68-18c7-4ab3-83b2-d306f89bd25d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+813adfd8-3295-4724-ae8a-42761cfdf2b6 1 2018-01-30 17:38:49.917+08 2018-01-30 17:38:49.917+08 745e1f26-ee66-45dd-9606-052a34a944fc 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+654a4b9f-5e15-4ff6-b678-cf9f792ddc34 2 2018-02-01 16:23:11.247+08 2018-02-01 16:23:11.247+08 cd5e889f-775b-446c-9ffe-e2d8eeceaaa0 a9e6ee3e-327c-49ad-a6b8-0f073bfdccd7
+07150fe0-c0a7-45f8-884e-3e1b58d916c3 1 2018-02-02 16:19:55.414+08 2018-02-02 16:19:55.414+08 22827d64-06e1-4752-a0b6-3cf6fb36cd21 b2d60094-05d4-473d-a62d-e1cd0ebd557b
+3a59ba8f-dcaa-4276-808f-3f6244455278 1 2018-02-05 11:21:19.472+08 2018-02-05 11:21:19.472+08 9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b3e74ddf-2759-46b8-ba37-a944d5a83851 1 2018-02-05 11:21:34.551+08 2018-02-05 11:21:34.551+08 cef1d2a2-c44e-4143-84bd-2a65140e33d0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e9b06093-70f9-404c-9ee9-c056cb62226a 1 2018-02-05 11:21:49.79+08 2018-02-05 11:21:49.79+08 0f4f59de-cde7-4aec-a402-703e5426bb76 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5137058a-3c36-49fe-b29e-460166a4017e 1 2018-02-05 11:22:03.786+08 2018-02-05 11:22:03.786+08 2e2456a6-9738-456c-abf1-94d5ebad124a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6e3a148f-8824-4508-9f7a-6d2accaae772 1 2018-02-05 14:54:12.665+08 2018-02-05 14:54:12.665+08 d148ae2e-c0dd-4e57-a0e8-833d32107f31 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+72182529-ac2d-4ecc-8afd-7a001f8981e2 1 2018-02-06 16:34:19.394+08 2018-02-06 16:34:19.394+08 9497edfc-bee0-4aac-b65d-2f1af60cc760 ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
+4fc60bc7-fb8c-47c8-b184-de46b05d9ab8 2 2018-02-06 16:34:19.399+08 2018-02-06 16:34:19.399+08 9497edfc-bee0-4aac-b65d-2f1af60cc760 3dfadb0e-7608-49e1-aa43-24f7442b424a
+261bc8fe-1c1f-47bd-a3fd-298812d1c399 1 2018-09-25 10:58:50.738+08 2018-09-25 10:58:50.738+08 19bb2b93-6e2e-4861-95df-67a68bc71fc4 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7bb18ac9-38a5-4f43-9d10-eb169b0d6e86 1 2018-02-06 17:17:32.187+08 2018-02-06 17:17:32.187+08 7fefd73e-8fd9-48a6-8d7a-76f5796a8197 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+056c0cb1-35e1-4602-8d5a-b5afac2fa309 1 2018-02-06 17:32:56.517+08 2018-02-06 17:32:56.517+08 9137c92c-6de6-4b00-bafc-a995288280f7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ac1a4739-f1d2-4e18-b9b8-e98f87522977 1 2018-02-06 17:44:49.263+08 2018-02-06 17:44:49.263+08 edcdb4a2-9f82-46d7-bba1-3ebb4f69483e ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
+2d04c70c-59f5-4a33-86d8-5f57fe213fc1 1 2018-02-07 09:45:44.21+08 2018-02-07 09:49:38.359+08 5ecfc751-afb0-4596-a6f7-85a31eca40c3 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6b72b53f-367d-4eb7-8f07-1e32ea89bf72 1 2018-02-07 16:37:15.385+08 2018-02-07 16:37:15.385+08 36918a6c-395e-4f8c-93b1-7ca400374cf8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+09cb7c07-4a03-4c3f-a66d-1f645c4ec8b8 2 2018-02-07 16:37:15.391+08 2018-02-07 16:37:15.391+08 36918a6c-395e-4f8c-93b1-7ca400374cf8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6cdbb4ff-49e8-4e38-ace2-ac518eddd372 1 2018-02-09 14:00:32.95+08 2018-02-09 14:00:32.95+08 ee8205dc-c9b0-4c29-b85f-9a54216ab198 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f45e76cc-849c-4169-b4ed-d5dbee6db11d 2 2018-02-09 14:00:32.965+08 2018-02-09 14:00:32.965+08 ee8205dc-c9b0-4c29-b85f-9a54216ab198 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ead506c4-61b1-4848-8939-d40490b53d73 1 2018-02-11 16:58:21.736+08 2018-02-11 16:58:21.736+08 c98659b5-30ec-471f-9654-41f5f8df47b0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+39f37687-7532-4541-846f-6c2cfc7610b9 1 2018-02-11 17:07:24.77+08 2018-02-11 17:07:24.77+08 fdf34922-d64e-4616-9313-96d7d94b8412 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+11349b6e-9105-48ec-a093-00e780913f1b 1 2018-02-11 17:16:18.661+08 2018-02-11 17:16:18.661+08 b53146b9-7737-46cd-a305-e2c9cb286d3d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+72e1d52e-cf44-4123-aebb-b3ea312b4d54 1 2018-02-27 09:46:30.759+08 2018-02-27 09:46:30.759+08 a8e0db23-0d35-4eb1-a5b8-deadd9c3d80d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+74016b2d-f8a7-43bd-83b2-1829955c4a75 1 2018-02-27 16:28:09.439+08 2018-02-27 16:28:09.439+08 1a6ea847-974c-49f4-b1e6-452665775d49 3dfadb0e-7608-49e1-aa43-24f7442b424a
+8ef229f4-04af-4e0b-bfc7-da2e9789de05 1 2018-02-28 16:01:53.165+08 2018-02-28 16:01:53.165+08 12adcb99-432b-46f5-9240-dad30ec75ea6 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+967dd284-9632-4e8b-8e72-f97ef221a8c8 1 2018-02-28 16:21:12.169+08 2018-02-28 16:21:12.169+08 bcc5cadb-0395-464b-8ead-ac3917b49e30 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1531aa66-e652-42fa-8ec2-ce8a21b3bf12 1 2018-02-28 16:21:13.118+08 2018-02-28 16:21:13.118+08 8e752366-9256-4bab-a79b-276a89aea484 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+bf72e889-6d3e-4b1b-96d0-109c4bf11c1f 1 2018-02-28 16:21:13.688+08 2018-02-28 16:21:13.688+08 87bf38c3-0b08-4bcf-98b4-12060fd9a345 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+54a5200d-95df-40fd-a03f-232696f3166a 1 2018-02-28 16:21:14.322+08 2018-02-28 16:21:14.322+08 167d20c6-d128-4532-9974-d4a55788823e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4e1694d1-bc78-4e41-96d4-779ec95762de 1 2018-02-28 16:48:43.046+08 2018-02-28 16:48:43.046+08 10ac4010-ff56-4d05-9e45-55f84f4292aa 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+94a4c225-557a-417b-b7c8-6289c88e290e 1 2018-02-28 16:48:44.783+08 2018-02-28 16:48:44.783+08 1f16c362-1f8e-4cbc-8b2c-8f43dd306390 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+48fa9380-745a-4968-8733-f9c0d3f6517c 1 2018-02-28 16:48:45.379+08 2018-02-28 16:48:45.379+08 8571c1b0-8472-45b5-955f-5a7614a2f08c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8f6ed7c4-a717-4834-a1b5-781e5169d708 1 2018-02-28 16:48:46.01+08 2018-02-28 16:48:46.01+08 a570a2de-ca66-488a-a078-6c6b14b71f2a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+60e4ae40-e9c9-427e-87e3-a59b6ee6939e 1 2018-02-28 16:48:46.68+08 2018-02-28 16:48:46.68+08 d54f6d25-04dc-4847-8dda-9c54d54b2d8f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+312345c3-2a74-4b8b-a5f6-9181f1bfb55f 2 2018-10-26 16:01:47.64+08 2018-10-26 16:34:52.433+08 3805bf98-24dc-453c-a62b-a5a97633ca8b 5cc45782-5d73-4354-b2c1-4904e284c95b
+8aa2ad50-9740-4add-9d62-327eed1b920d 1 2018-11-05 11:05:43.24+08 2018-11-05 11:05:43.24+08 706988da-65c8-4388-a4ab-47e553cd1085 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b372116b-3e75-4e51-a202-28609f8c6bb1 1 2018-02-07 16:40:02.705+08 2018-03-18 15:43:56.084+08 aaa7d270-43dc-4864-bb0a-967c33658698 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d0212fe3-5814-4546-8b3a-de355f207a2a 1 2018-09-05 09:55:00.346+08 2018-09-05 09:55:00.346+08 5c6b67cd-fe7a-472e-8907-63baa655cb42 ad4f23f8-9213-4194-97ce-209a34596649
+a5d45d20-8865-47eb-9bc3-3982af96ed65 1 2018-09-20 13:52:41.747+08 2018-09-20 13:52:41.747+08 c1b890f6-babe-41df-b3b4-0a277ad7e1b2 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9d391a94-45d4-4209-a10e-d1c9f1e6dd35 2 2018-09-25 15:45:23.982+08 2018-09-25 15:45:23.982+08 d929c576-62dd-4f0c-a2cc-15120347b903 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e
+a6b46729-f63a-42c7-946c-2f308b7e169a 1 2018-09-25 15:45:23.986+08 2018-09-25 15:45:23.986+08 d929c576-62dd-4f0c-a2cc-15120347b903 3dfadb0e-7608-49e1-aa43-24f7442b424a
+37f86573-bda4-4eaf-a404-b11edab30fd5 1 2018-10-24 13:35:04.255+08 2018-10-24 13:35:04.255+08 04425c48-b89c-498d-8372-b3a64d1abf1e 0af1af55-38cd-43c1-abe3-b71570342d40
+c7f56265-3127-4b55-b485-95134998bcd4 1 2019-03-19 10:11:54.287+08 2019-03-19 10:11:54.287+08 f2d1cabf-7888-4be1-9357-bf5052e5772c 3dfadb0e-7608-49e1-aa43-24f7442b424a
+7f54bf03-96d7-44ff-b4c1-c1f94c1a3fdb 2 2019-03-25 11:15:17.53+08 2019-03-25 11:15:17.53+08 954dabda-7fd8-456d-8d9a-bc7058d4e8ad c3c19462-3221-4cca-8288-13f960d7ea5b
+0b84eeb5-9a45-4d3c-819f-dd4875c00720 1 2018-11-07 10:56:08.264+08 2018-11-07 14:53:29.119+08 ed1a6677-30c5-4215-a128-96bbd4b46c9f 6f8504db-8b86-4b33-a0c6-721249b63f46
+939cd5ef-673f-4683-9dea-55ac0af56393 1 2018-11-16 14:10:42.792+08 2018-11-16 14:10:42.792+08 f12a248f-faab-43f2-bfbe-088da7f471dc 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+533b75af-c0a0-4e4a-bdba-630ed0c9fa4f 1 2018-11-19 16:52:44.375+08 2018-11-19 16:52:44.375+08 7c42d86a-5801-4ef2-94df-2b5c702ff7f5 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d24f5460-15a0-4f18-9f2e-9e9b235bf27d 1 2018-11-26 11:44:21.377+08 2018-11-26 11:44:21.377+08 a300435b-3982-4694-aab4-48ba853d838e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8ee3c94e-fc38-4a55-a21d-00efe99c3575 1 2018-11-28 15:02:30.528+08 2018-11-28 15:02:30.528+08 b75d2a21-d798-498b-966f-75375c6967ff 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+bafbbebe-8667-44d4-9543-18ac43ad4d21 1 2018-12-05 14:59:23.185+08 2018-12-05 14:59:23.185+08 c9eacd36-38d6-48b9-9672-e76406906ea3 1aa841f1-d3fb-4523-9b54-e601d350c745
+9a265b2b-7300-4ceb-bba1-48150a012b88 1 2018-12-06 10:22:18.385+08 2018-12-06 10:22:18.385+08 c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d 1aa841f1-d3fb-4523-9b54-e601d350c745
+92bdce01-7eae-4842-8ce6-a0bf3f4a6ae3 1 2018-12-07 17:12:17.901+08 2018-12-07 17:12:17.901+08 7328323d-9f8b-435e-9d4f-f963f502dc31 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+26ad1933-4049-40dc-8b89-c9122a6d58af 1 2018-12-11 14:09:09.384+08 2018-12-11 14:09:09.384+08 0b4f75d6-d921-4913-a9de-cfff3b99d56e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+45549831-3126-45f5-8357-924cb2bf9eb6 2 2018-12-18 18:04:30.321+08 2018-12-18 18:04:30.321+08 6b180341-15c7-4148-89e3-b6fc10b0f7b5 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+996cc1ec-1a12-46d2-8e73-4ef3e4c8a224 1 2019-02-25 14:08:36.897+08 2019-02-25 14:08:36.897+08 2b835f19-8eba-46b3-b3aa-affc9b36dcd1 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3b5bf79b-409a-48d9-a255-9963165291a6 1 2019-02-25 14:08:36.906+08 2019-02-25 14:08:36.906+08 2b835f19-8eba-46b3-b3aa-affc9b36dcd1 d0e8f529-c1bf-4146-beef-cd3056ea9787
+5d39348c-b190-404c-bcdb-c1ac2b3b1a42 1 2019-02-25 15:41:59.719+08 2019-02-25 15:41:59.719+08 9bcce139-4a57-4c96-ba1f-914569011b77 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c884a293-b09e-480e-9af0-e67c8ae442da 1 2019-02-25 15:41:59.724+08 2019-02-25 15:41:59.724+08 9bcce139-4a57-4c96-ba1f-914569011b77 1aa841f1-d3fb-4523-9b54-e601d350c745
+63095003-a279-4564-bf48-0f3f7ca2db97 1 2019-02-25 15:41:59.727+08 2019-02-25 15:41:59.727+08 9bcce139-4a57-4c96-ba1f-914569011b77 d0e8f529-c1bf-4146-beef-cd3056ea9787
+26cf03db-09ec-481c-a58e-60b4deebfa0b 1 2019-02-25 17:37:56.394+08 2019-02-25 17:37:56.394+08 f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+460c8158-6935-498e-bf3e-3cf869867fdc 1 2019-02-25 17:37:56.398+08 2019-02-25 17:37:56.398+08 f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4 7667c2d9-3c04-4818-bfeb-42f43b60af77
+b5e97809-0399-4ad9-8b8d-340b9d23a997 1 2019-02-22 16:33:55.416+08 2019-02-26 14:17:32.482+08 b21b534c-d8f1-4caf-a405-1682a99dc1a9 c00008f7-06d9-4907-b2e7-619374116b36
+ae51a29d-22f2-4f81-ae18-a59f55bc742d 1 2019-02-26 16:30:15.678+08 2019-02-26 16:30:15.678+08 88bd8ad3-6ffd-4b0f-8768-085e0e59d92e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8a14a4a6-fd46-4d3a-a9cc-6a27d9c930c0 1 2019-02-26 16:39:23.422+08 2019-02-26 16:39:23.422+08 a504d969-ffb0-42c6-9edd-529d1d61a77c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0746543a-bb5d-4868-80ca-c4469861f7c5 1 2019-03-04 11:20:58.18+08 2019-03-04 11:20:58.18+08 7128744b-0a8b-463f-b231-40f8862cba87 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+811fb16f-c188-47a2-9b1e-bad008e375a3 1 2019-03-05 13:33:36.262+08 2019-03-05 13:33:36.262+08 9ea89d82-49ea-480a-a90a-0b99290db919 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+123ef5be-3991-4a19-a1fb-fd63d26c512e 2 2019-03-15 11:37:12.53+08 2019-03-15 11:37:12.53+08 2f25fa6f-a99e-440e-ac0a-29ada5069d4f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e10db378-7371-4def-9081-13d2446dca8f 2 2019-04-25 15:41:27.417+08 2019-04-25 15:41:27.417+08 83960893-0d31-4f1e-a576-69a4e7bce94c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+91476c9a-6eb5-46a2-9206-01b186e4e6fa 1 2019-04-26 13:07:35.552+08 2019-04-26 13:07:35.552+08 d59a244e-554e-478d-b874-b75dc0dff2b5 89b76f5e-c6dd-46db-a92f-a3335aeafa86
+b8f2fe7e-2a21-4bbb-98c9-a7d6d0c292f9 2 2019-04-26 13:07:35.555+08 2019-04-26 13:07:35.555+08 d59a244e-554e-478d-b874-b75dc0dff2b5 89b76f5e-c6dd-46db-a92f-a3335aeafa86
+ed76d0c6-f7a4-46fa-b322-90a6ac76fe30 1 2019-04-26 15:57:34.682+08 2019-04-26 15:57:34.682+08 3f25f8df-8a52-4d2c-b6ea-714da8be3c00 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+16889bf4-74d5-4c72-bfa9-4cde4b691cca 1 2019-04-28 10:50:55.204+08 2019-04-28 10:50:55.204+08 75780bad-38e2-4dde-adbd-950bd075a1d2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cfdc691c-18ca-4ece-a05a-61c433381df8 1 2019-04-28 17:36:59.008+08 2019-04-28 17:42:00.723+08 0a9ddd56-9373-42fc-b426-17797eeee64a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ab6325d5-dbae-449e-8c76-86b82e488771 1 2019-04-28 11:27:08.99+08 2019-04-29 15:08:14.522+08 6daadb42-2ee7-41fa-a6bd-85d9c0d77383 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+5ad2026e-5c8b-4567-bfb6-858e613b3d42 1 2019-05-06 10:14:28.456+08 2019-05-06 10:14:28.456+08 9ac9f312-0f0e-45d4-8d00-8420be016826 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3b2a1939-ab5a-4ecd-99f3-6f48b3cf1b1e 1 2019-02-25 17:37:56.401+08 2020-08-05 14:15:19.729+08 f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4 dff00e7d-1fb2-443e-be6a-615214932ee6
+be1600c4-af01-4849-9099-c10dba51edc9 1 2018-03-01 14:29:42.729+08 2018-03-01 14:29:42.729+08 c69575ab-795c-45ec-8901-f370255beff1 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e3114646-dc4d-48a2-bdf9-24ac4cee2e68 1 2018-09-07 09:24:39.742+08 2018-09-07 09:24:39.742+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e4a15813-aaff-4012-b84e-538d4af261e6 1 2018-03-02 16:15:39.581+08 2018-03-02 16:15:39.581+08 ec223bfa-7244-4458-8180-4205fd31ac24 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c799837b-448d-46a8-bc2e-abecbeaaddf0 1 2018-03-02 17:16:41.277+08 2018-03-02 17:16:41.277+08 a812ef4d-0c77-49e6-bad2-c74c79c50e49 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+88827513-9301-4dcb-84c5-f531c188097a 1 2018-03-05 09:35:14.837+08 2018-03-05 09:35:14.837+08 5fc4a5d5-9307-4ab0-9fb1-7f017c432911 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+807f922d-1d65-4e57-81d3-b507221a5358 2 2018-10-24 14:59:19.947+08 2018-10-24 14:59:19.947+08 5e639171-0ad1-4fcb-aa69-d2f1d4af1f51 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+11740afe-14dd-41c7-819a-2764c0f02321 1 2018-03-05 10:52:42.56+08 2018-03-05 10:52:42.56+08 84747787-27a7-463d-bd03-9ee55d84fea0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+03c06c61-5dd6-4065-a2cd-c3e003f08119 1 2018-03-05 10:59:51.142+08 2018-03-05 10:59:51.142+08 f1fc4840-f3c9-4752-a703-b0bef637f3ee 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ed2433d4-7df9-40e4-8b3c-ef56522294af 1 2018-03-05 13:34:14.917+08 2018-03-05 13:34:14.917+08 a1923ce2-b8a5-45cb-9d98-6a42901cee7c 34ab0b66-1ce3-4462-ad0c-520d349ca04c
+3b79c6c2-39da-4c8e-9b85-df2a31cf822f 1 2018-11-20 14:58:30.327+08 2018-11-20 14:58:30.327+08 800e5478-374c-4de8-ab05-d9aa4be45cdb 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+60c4219d-07b1-4793-8eb8-776528db5395 1 2018-03-06 16:50:09.438+08 2018-03-06 16:50:09.438+08 5dced7e6-e4c2-4e43-82a2-6b994fb790b4 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f95f5c4f-4338-4022-927f-72cb45e4b786 1 2018-10-26 16:15:49.376+08 2018-10-30 19:12:31.224+08 a5dda81c-6a85-4e7b-97f3-be45b980646e 5cc45782-5d73-4354-b2c1-4904e284c95b
+6d4c23a3-4f3e-4f58-8f7d-ef6893dc2077 1 2018-03-07 14:01:44.98+08 2018-03-07 14:01:44.98+08 7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7587a4d4-7375-4dee-a174-e0f3718a566a 1 2018-03-07 14:45:52.002+08 2018-03-07 14:45:52.002+08 7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4 250ec8dc-2cd2-4056-88f4-863278485bba
+df977518-6bfe-4ae3-85f8-7c41d81bad29 1 2018-11-17 14:04:21.032+08 2018-11-17 14:04:21.032+08 e689bb3a-b7ce-4502-9042-c07f89958809 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2250e19c-6399-4b84-85d5-308b7e5bfc37 2 2018-11-17 14:04:21.039+08 2018-11-17 14:04:21.039+08 e689bb3a-b7ce-4502-9042-c07f89958809 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ddc7f984-593c-43ac-9597-bc98218b8b09 1 2018-03-07 16:17:30.733+08 2018-03-07 16:17:30.733+08 24ff3733-db3f-4d37-b90a-edd44a77e054 250ec8dc-2cd2-4056-88f4-863278485bba
+d8f7cc71-3dff-4f7b-b19c-768e3499f822 2 2018-03-07 16:17:44.029+08 2018-03-07 16:17:44.029+08 24ff3733-db3f-4d37-b90a-edd44a77e054 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f97a1d41-06aa-4929-9229-ceb6ca403947 1 2018-03-07 17:15:48.177+08 2018-03-07 17:15:48.177+08 68cb03f4-a381-4eaa-9068-d375ae3500e8 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b1195b35-3e64-4d7d-bf10-4cdba0dc0876 1 2018-03-07 17:18:03.904+08 2018-03-07 17:18:03.904+08 3a8c62b6-14dc-497e-90e8-68c2160e7d08 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4bc60568-92df-4cfa-ab39-d14868df8568 2 2018-11-23 21:36:30.653+08 2018-11-23 21:36:30.653+08 09ebfc15-19c9-4e5f-bacb-5e81ec5ef026 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e19d2117-7307-4824-87c6-2db0a176fd23 1 2018-12-06 10:24:58.814+08 2018-12-06 10:24:58.814+08 37c046eb-9a0e-49b0-95fb-f0128338f381 1aa841f1-d3fb-4523-9b54-e601d350c745
+19151d32-ffd7-4ad1-80cb-b6173adaf11f 1 2018-12-07 17:22:01.989+08 2018-12-07 17:22:01.989+08 65e60374-6bdf-42f8-801d-00fc50085215 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+24c1e87b-fd73-430f-a9a7-18d155d3ea41 2 2018-03-08 18:57:00.03+08 2018-03-08 18:57:00.03+08 71735c3a-2e25-40c1-81ad-df10d8792ac2 7697235e-a619-4da5-ac6e-9a76a6e59a78
+59f129f4-a877-43c8-b7a2-538663b3926c 1 2018-03-08 19:35:31.287+08 2018-03-08 19:35:31.287+08 aee112f2-97fd-415e-b3b8-7009ea712ab1 7697235e-a619-4da5-ac6e-9a76a6e59a78
+3689732c-0546-4b35-88f5-bde1451753a4 2 2018-03-08 19:35:40.861+08 2018-03-08 19:35:40.861+08 aee112f2-97fd-415e-b3b8-7009ea712ab1 d0e8f529-c1bf-4146-beef-cd3056ea9787
+b0c8a9e8-3cb6-4f75-af40-b91d61b8122b 2 2018-03-08 19:35:47.547+08 2018-03-08 19:35:47.547+08 aee112f2-97fd-415e-b3b8-7009ea712ab1 7667c2d9-3c04-4818-bfeb-42f43b60af77
+b2835fca-b4e0-4ba4-9f6b-99f78ab6375c 1 2018-03-08 20:01:25.855+08 2018-03-08 20:01:25.855+08 9e8050a9-f38a-45c3-a02b-40670bdf19b7 7667c2d9-3c04-4818-bfeb-42f43b60af77
+a054b20a-1687-45aa-b27b-8a004a4c819d 1 2018-03-08 20:19:54.227+08 2018-03-08 20:19:54.227+08 13ee1f91-04cc-48af-820e-ffc0ed179b6c d0e8f529-c1bf-4146-beef-cd3056ea9787
+5e8cad65-f4b8-440f-8c7d-ff360c05699e 1 2018-12-13 13:58:23.802+08 2018-12-13 13:58:23.802+08 d5ce913e-4a89-473e-b69b-bdfbc0fa6753 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2e4a0dfd-e4ed-4606-b682-f07f9af83752 1 2018-03-09 14:51:58.795+08 2018-03-09 15:04:04.927+08 21c691a7-7a5a-4262-a3fe-cedb0c37e5fe 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+98efd1b8-ba29-41ac-8022-8e5fcdae47d7 1 2018-03-09 16:27:20.879+08 2018-03-09 16:27:20.879+08 22fee831-1acb-498b-a4f4-c73ca9e48eac 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+816698d5-874a-4b41-9a10-7283e570c6ca 2 2018-03-09 16:27:20.881+08 2018-03-09 16:27:55.721+08 22fee831-1acb-498b-a4f4-c73ca9e48eac 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ee8cac2b-69c4-4de0-ae4f-605dd6615b5a 1 2018-01-08 15:14:58.249+08 2018-03-12 15:18:02.974+08 e2d104b1-9c57-4a16-8d05-07817bc8b785 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+bcb5dc91-e7b9-465f-86e7-f92b319cde98 1 2018-03-12 17:55:34.545+08 2018-03-12 17:55:34.545+08 ae356f39-ab83-4ac9-b847-31391780a6c5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+00d429fe-3521-43bd-82c5-27c3701da1b1 1 2018-03-08 18:56:49.984+08 2018-03-13 11:27:46.627+08 71735c3a-2e25-40c1-81ad-df10d8792ac2 3dfadb0e-7608-49e1-aa43-24f7442b424a
+f0a6aa85-d578-4445-88a6-a7b5b0f01743 1 2018-03-13 17:32:48.257+08 2018-03-13 17:32:48.257+08 e60e191c-767a-479d-a33e-589622634060 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b33235f3-7afe-4051-8783-4ec466435d0e 2 2018-03-13 17:32:48.259+08 2018-03-13 17:32:48.259+08 e60e191c-767a-479d-a33e-589622634060 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c8db06d8-ccaa-4330-bbbe-b005900e16ef 1 2018-03-13 23:09:59.902+08 2018-03-13 23:09:59.902+08 384f80e3-ad51-400e-b0aa-8a3885961cec 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9950fe4a-165d-4b00-899f-c145ca03a1a8 1 2017-12-19 17:58:52.28+08 2018-03-14 00:18:37.926+08 dfffdb75-6ad1-4092-95d2-ac6596b3c4ce 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a53ca2e5-bb91-4e04-8ee5-dd80dc1ec6d1 1 2018-03-14 08:03:41.078+08 2018-03-14 08:03:41.078+08 77d8ba09-082d-405d-aeca-9a0d66f902c3 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+25d8f312-6c96-4a77-9521-ee0e237e776a 2 2018-03-14 08:03:41.082+08 2018-03-14 08:04:02.688+08 77d8ba09-082d-405d-aeca-9a0d66f902c3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e0b42b21-df2e-4e86-9230-79d1b39ce3c5 1 2018-03-14 08:24:49.336+08 2018-03-14 08:24:49.336+08 b3da87da-9dc0-443c-960e-ccea1c35f87e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+291ecf10-1628-41fb-b42e-c7410d5cb72e 1 2018-03-14 09:30:58.052+08 2018-03-14 09:30:58.052+08 c9946e27-bce7-41eb-b341-d6b03a7f115f 7667c2d9-3c04-4818-bfeb-42f43b60af77
+df1bcf14-1ac8-4918-9450-692a9001d08b 2 2018-03-02 16:15:39.584+08 2018-03-23 16:43:14.205+08 ec223bfa-7244-4458-8180-4205fd31ac24 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+878bf1ee-1496-47cf-8379-d969910bdbd2 2 2018-03-02 17:16:41.28+08 2018-03-23 16:43:43.422+08 a812ef4d-0c77-49e6-bad2-c74c79c50e49 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+73722e50-2271-451e-a7b7-1433748336ca 2 2018-09-07 09:24:46.795+08 2018-09-07 09:24:46.795+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488 e4049f35-3902-4610-ac6e-45c01236a230
+235c1960-ae8c-4a50-b7c9-99a5bbfac71f 1 2018-03-14 15:32:30.957+08 2018-03-14 15:32:30.957+08 5d399cb2-7e5a-4a27-bff0-e1769f43499d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3696cf22-f9b3-4cb9-9b56-bd074a7d5e89 1 2018-03-14 15:32:44.476+08 2018-03-14 15:32:44.476+08 aa6f3b0e-9bd2-41e8-801d-730aca3e32fb 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+beca9f91-8832-47fa-aa7f-ef70d8d241ac 1 2018-03-14 15:54:05.9+08 2018-03-14 15:54:05.9+08 28d8942e-d1ab-40ee-878a-c3b2f60da896 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+5c3e5d1b-6ebd-4f19-96ff-58ebf7b73141 1 2018-09-26 14:38:16.185+08 2018-09-26 14:38:16.185+08 7475ac58-b627-442e-b8fc-259c0c1561e7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+481e9d5e-986b-4e38-897f-dcbadfddd0b2 1 2019-04-29 15:49:13.025+08 2019-04-29 15:57:08.78+08 dc3255a4-0fb9-4ab9-85cd-714e6c5d70d0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b5c94690-f48a-4b07-92d3-78ff4c72866a 1 2018-11-20 15:19:51.009+08 2018-11-20 15:19:51.009+08 0209176c-7c91-4fe0-9a00-e751fe24c8f8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+38f9bd20-5149-47ed-90bb-43740eda51d2 1 2018-11-24 15:49:28.023+08 2018-11-24 15:49:28.023+08 09ebfc15-19c9-4e5f-bacb-5e81ec5ef026 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c2c7492f-5032-46e8-a136-2eca48b246f8 1 2018-12-06 11:09:50.99+08 2018-12-06 11:09:50.99+08 424f45f6-916c-4383-bce4-c71153f82e63 1aa841f1-d3fb-4523-9b54-e601d350c745
+76902a4e-8831-4253-ac3c-9a7be5c855b1 1 2018-12-07 17:22:02.566+08 2018-12-07 17:22:02.566+08 2bbdef47-01cb-401b-ae49-c4b7bad46d36 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0d45b316-620c-4ceb-b7f8-ce526e426f84 2 2018-12-11 17:15:13.76+08 2018-12-11 17:15:13.76+08 d8de8739-f146-41e0-877e-747f30ac59a7 d0e8f529-c1bf-4146-beef-cd3056ea9787
+78911adf-c9d2-4092-b240-73c277688e2e 2 2018-12-13 15:31:50.776+08 2018-12-13 15:31:50.776+08 50d3cb43-638b-4833-a401-f526d1cbbc9e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b0d8fcf8-afdf-4196-88de-97ac045c0f54 1 2018-12-14 15:48:01.103+08 2018-12-14 15:48:01.103+08 164528dd-81d3-435b-a4cd-dc328abbe3ba 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e93fe806-fdc8-4e26-bb4b-9bfb860328e4 2 2019-04-29 15:49:13.022+08 2019-04-29 15:57:49.636+08 dc3255a4-0fb9-4ab9-85cd-714e6c5d70d0 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3ced8ff2-50b3-487c-9d04-92a3ba8716c6 1 2019-05-09 09:58:07.891+08 2019-05-09 09:58:07.891+08 f753602f-9889-47cc-a42c-2905bdaab97e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3d62206d-c8ae-4dde-9474-0e6b2786f684 1 2018-12-13 15:31:50.772+08 2018-12-15 16:44:32.18+08 50d3cb43-638b-4833-a401-f526d1cbbc9e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+405c8685-171a-43e9-8b38-09c82435cba1 1 2019-05-09 17:23:15.204+08 2019-05-09 17:23:15.204+08 7802e3d3-ffbf-4146-954f-a67f1cbfb41c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4babe510-4919-4c08-9d00-c2fbbb5743c1 1 2019-02-25 14:10:58.942+08 2019-02-25 14:10:58.942+08 ac1d92e7-4587-48e7-84ce-c4cd8db40687 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2db0bca2-23d9-4090-8ca8-30ff8699b103 1 2019-02-25 14:10:58.947+08 2019-02-25 14:10:58.947+08 ac1d92e7-4587-48e7-84ce-c4cd8db40687 d0e8f529-c1bf-4146-beef-cd3056ea9787
+7d9f19cb-ea57-440b-9651-dbf601f1f3a1 1 2019-02-25 15:39:43.184+08 2019-02-25 15:39:43.184+08 04f55cdb-e98a-4dc9-b3fc-480a9a241a02 1aa841f1-d3fb-4523-9b54-e601d350c745
+504e3c9b-603d-4118-a370-217347a4324c 1 2019-02-25 15:39:43.186+08 2019-02-25 15:39:43.186+08 04f55cdb-e98a-4dc9-b3fc-480a9a241a02 d0e8f529-c1bf-4146-beef-cd3056ea9787
+ca7f0328-2a8d-4c73-b9ea-bd1565e548e4 1 2019-02-25 15:43:06.977+08 2019-02-25 15:43:06.977+08 9bd34a2c-73d9-4615-af4b-1d61a6fc81bd 1aa841f1-d3fb-4523-9b54-e601d350c745
+b00d5e02-4a5f-4617-a233-3c6951697271 1 2019-02-25 15:43:06.98+08 2019-02-25 15:43:06.98+08 9bd34a2c-73d9-4615-af4b-1d61a6fc81bd d0e8f529-c1bf-4146-beef-cd3056ea9787
+99d2be00-995d-4591-92d5-68cfedb384d4 1 2018-10-24 15:16:44.643+08 2019-02-27 10:00:04.398+08 3ad4be85-c6f9-46b8-97dd-39d01e4ef858 15b373b0-30f8-471e-8900-cb62e28d0e50
+95bb977a-fef4-4236-b1df-71ec5e232327 1 2019-03-05 13:35:31.069+08 2019-03-05 13:35:31.069+08 06f5aa07-d8ae-4621-9db2-278fb653ddcd 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f0d93d00-26d0-4031-ae2c-d9f951d701da 1 2019-03-06 09:32:38.16+08 2019-03-06 09:32:38.16+08 3b7ca159-32d0-4c74-8f84-591774636dc5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+67f96afc-968b-41f5-9647-47cb8d81e798 2 2019-03-06 09:32:38.164+08 2019-03-06 09:32:38.164+08 3b7ca159-32d0-4c74-8f84-591774636dc5 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+749bc501-a3f2-4fa2-be05-e916ef8ff484 1 2019-03-15 14:35:35.867+08 2019-03-15 14:35:35.867+08 df22cddf-5a50-41f7-980a-0bbef6aeb763 c43e054f-dbeb-43c0-9702-4bc9bf7fdcd1
+05eb00de-228e-42e3-8fba-4540b8a83436 1 2019-03-25 11:24:21.012+08 2019-03-25 11:24:21.012+08 3feb218e-5b82-496a-9f57-71be58552c0d 0d963823-0c01-40c1-acc4-74d4eaaea996
+c8c0ffa9-442b-4a69-9ea3-ef44ce7d3bbe 2 2019-03-27 10:04:24.014+08 2019-03-27 10:04:24.014+08 360a9975-3171-4f12-b47a-6f57bdf76dfe 68238334-fea4-4bc0-b1cd-98456c41faab
+b5f9869d-556b-4c1e-a022-5e1dc1538144 1 2019-03-27 10:17:10.457+08 2019-03-27 10:17:10.457+08 c3eaf904-6808-4fde-a795-474b0128fe5f 68238334-fea4-4bc0-b1cd-98456c41faab
+7bc43383-0e2a-41b4-875c-ac3aef700e59 1 2019-04-28 17:41:50.413+08 2019-04-28 17:41:50.413+08 5a46e837-7b8f-4cef-9951-969680cb65db 3dfadb0e-7608-49e1-aa43-24f7442b424a
+36fdc7bc-6466-404f-b5ce-3fb9a1c76a7a 2 2019-04-28 17:41:50.416+08 2019-04-28 17:41:50.416+08 5a46e837-7b8f-4cef-9951-969680cb65db 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+35e02a89-9c94-4426-aeb2-86d112f36942 1 2019-04-28 11:24:32.856+08 2019-04-29 15:08:52.676+08 d3c271ff-22cb-4938-8c5f-c63484107a38 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+c1ae7a2c-395e-47ee-a6c7-1789ac8e0720 1 2019-04-30 09:49:47.679+08 2019-05-07 09:17:00.099+08 a9dc9dd4-9a62-4dfa-968a-69e2c4472a0a 3f912f2c-18f1-4563-9043-dc271141fc55
+758e0b8e-cb3b-47b5-90f1-27debcd07c7a 1 2019-05-13 11:18:59.492+08 2019-05-13 11:18:59.492+08 0cbb0bb5-1c3c-4fc8-94a1-981c026350f8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4699c34f-7862-41fe-bbe3-b86681abd493 1 2019-05-13 16:27:13.642+08 2019-05-13 16:27:13.642+08 6151fdf6-4bb4-466e-b727-56b68ebf43e1 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e94758b3-a6a6-4116-921c-8b7050cbada3 1 2019-05-14 14:10:38.857+08 2019-05-14 14:10:38.857+08 d634c358-000d-4c53-8c4b-0f411b4a52c3 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a3f8ee67-dc1d-42dc-b7c8-19418d949d49 1 2019-05-14 16:57:37.946+08 2019-05-14 16:57:37.946+08 ff67a769-94ed-4f3d-b944-b1f4d4468eec 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1d0404d7-be40-4099-b270-b86b7952435c 1 2019-05-15 10:32:01.142+08 2019-05-15 10:32:01.142+08 6474815f-e86c-4909-966f-5fb6efc5c674 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d6faad75-a8a6-4eaf-85ed-30c0d9992e12 1 2019-05-22 10:38:30.966+08 2019-05-22 10:38:30.966+08 721eaa20-a7b1-457b-a5b3-f5eb9b313129 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+45e26ce6-7b9b-4125-8c71-dc8b496c5a3b 2 2019-05-22 10:38:30.969+08 2019-05-22 10:38:30.969+08 721eaa20-a7b1-457b-a5b3-f5eb9b313129 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e508cf8c-eafe-4269-a3e4-64fc8707d942 1 2019-02-25 15:43:06.974+08 2020-04-08 15:02:18.229+08 9bd34a2c-73d9-4615-af4b-1d61a6fc81bd 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+434907cf-7398-4d18-bdb8-7649660e6511 1 2019-02-25 15:39:43.181+08 2020-04-08 15:09:02.141+08 04f55cdb-e98a-4dc9-b3fc-480a9a241a02 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+71a44ffa-c49f-4c12-8112-50ba20100e20 1 2018-09-07 09:46:01.469+08 2018-09-07 09:46:01.469+08 be5be8af-c339-4f15-b2b7-0f16e1e51792 e4049f35-3902-4610-ac6e-45c01236a230
+c0e552fb-ad46-451e-a33c-adc8fd3a7f24 1 2018-09-07 10:55:19.797+08 2018-09-07 10:55:19.797+08 97078fa2-e944-487b-8913-e3c2c33c6ff0 e4049f35-3902-4610-ac6e-45c01236a230
+cf1e81d7-8fd6-4a0a-925e-c4a3bd9f2db4 1 2018-03-14 15:32:53.593+08 2018-03-14 15:32:53.593+08 4af8678b-8f9b-48e6-b8f0-ea7ec7ed53ee 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+41221de5-8b11-41f5-a41f-d050ea705626 1 2018-09-26 17:10:21.449+08 2018-09-26 17:10:21.449+08 7737cd79-82ca-472e-ba8c-5ed79fde2e70 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f3fadba7-5ddb-4dcd-94d1-5b2d5f01125f 1 2018-11-20 15:38:42.528+08 2018-11-20 15:38:42.528+08 b349f69a-d7bb-4bee-aa65-6d250e1a7ae8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9585b3c2-bb23-4cd5-8f4e-684ecdb933f2 1 2018-11-24 17:43:05.354+08 2018-11-24 17:43:05.354+08 780ffe7d-7369-4d2f-9184-32790466f2ba 1aa841f1-d3fb-4523-9b54-e601d350c745
+eaf50efd-3be3-4815-ab62-cfd1e2d77bed 1 2018-12-06 11:26:30.175+08 2018-12-06 11:26:30.175+08 ccb72dc5-f9bc-424d-a3ec-e6e9121bc534 1aa841f1-d3fb-4523-9b54-e601d350c745
+2cadb449-7dfc-4c3c-a468-c568c8ea7e62 1 2018-12-07 17:22:03.071+08 2018-12-07 17:22:03.071+08 fac96717-3818-4839-aedc-5dbb6c1c62f2 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ad2f6401-76d2-4a89-9757-93f0be9a0ce4 2 2018-12-14 17:47:13.814+08 2018-12-14 17:47:13.814+08 164528dd-81d3-435b-a4cd-dc328abbe3ba 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c6c0510c-e43e-49e1-9bf8-f34decd08b41 2 2019-02-22 10:39:46.787+08 2019-02-22 10:39:46.787+08 b52fa83f-d3fd-4a8e-b9d5-76ea840aca15 7697235e-a619-4da5-ac6e-9a76a6e59a78
+5ac785dd-b1d2-4072-ba26-4177d113aaaf 1 2018-12-13 15:33:20.401+08 2018-12-15 12:12:01.462+08 6d4fda56-b81c-4873-9c75-10257aaf7254 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+44af48ad-3421-4c1f-8bca-d1d7d5e70909 1 2018-12-18 13:51:36.291+08 2018-12-18 13:51:36.291+08 bfd93522-374e-4c12-b203-e02ff040a821 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+10510cea-5771-4c3f-bd64-a46fde4168ff 2 2018-12-18 13:51:36.297+08 2018-12-18 13:51:36.297+08 bfd93522-374e-4c12-b203-e02ff040a821 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+16b8f107-2281-418f-8ca7-72bce6fb7b63 1 2018-12-20 14:56:36.688+08 2018-12-20 14:56:36.688+08 9e3cc14a-915c-4fd2-bb82-35360798cb23 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+aff0fe49-8082-44aa-83e2-49633a1a1b54 2 2018-12-20 14:56:36.691+08 2018-12-20 14:56:36.691+08 9e3cc14a-915c-4fd2-bb82-35360798cb23 12cbda5e-cdad-4e5e-91b8-4489f816f00d
+85ec3e83-333d-44b7-8261-b91e9606e9d5 1 2018-12-24 11:48:02.121+08 2018-12-24 11:48:02.121+08 fc561f5f-92c8-4549-8e02-dd01dd276aef 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+bb9bad8b-bb99-4fcd-bfe1-d6d85cf31b47 1 2019-01-04 15:34:26.871+08 2019-01-04 15:34:26.871+08 7efbc3e8-ff6b-433b-9041-c76b9df89644 7667c2d9-3c04-4818-bfeb-42f43b60af77
+a0c5947b-4714-4987-84d5-da7399f0e29d 1 2019-01-04 15:34:26.875+08 2019-01-04 15:34:26.875+08 7efbc3e8-ff6b-433b-9041-c76b9df89644 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8f6bb3ed-e811-4069-8476-45fa0cfc6f17 1 2019-01-07 11:08:30.145+08 2019-01-07 11:08:30.145+08 f7257ee9-fbb6-4cd9-a622-3f3a5c3cff2e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7abdf473-6d6f-469a-a0c3-e57738d022eb 2 2019-01-09 15:48:00.74+08 2019-01-09 15:48:00.74+08 36f70703-df53-42ae-a8da-e001d8215fd8 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+fe3b0041-aabf-4046-b8be-3b05ee46de20 1 2019-01-14 11:53:46.237+08 2019-01-14 11:53:46.237+08 969043a0-c1f9-49c2-9f36-c029a03a9c87 66537b16-1e7d-4823-b03e-676459f5891d
+25d28c61-1984-41c9-9543-be1517393c6e 1 2019-01-18 14:06:05.479+08 2019-01-18 14:06:05.479+08 61e3c33e-85cf-4894-9fc6-70fc3fd7a522 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f19ee44f-9d24-4217-ade5-37ed7ca87040 2 2019-01-18 14:06:05.482+08 2019-01-18 14:06:05.482+08 61e3c33e-85cf-4894-9fc6-70fc3fd7a522 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d948a2a9-74a8-46e1-963e-bf0f6134764f 1 2019-01-24 09:47:37.03+08 2019-01-24 09:47:37.03+08 17b4a482-830c-44e4-be09-1a9cac67c1e7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1cd1cb16-1d8a-4d20-be3f-548f7b177b1b 1 2019-01-28 10:00:29.635+08 2019-01-28 10:00:29.635+08 a9f88745-32d0-4068-bcd3-6735e90b15a0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c1fd9e76-3d2c-4150-919c-c529a57581c0 1 2019-01-25 16:07:25.616+08 2019-04-01 10:34:35.671+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 6c0898f5-e8da-495b-8718-6efba367e3f1
+5f6f7e78-e8a6-411e-8c41-b7cc3fec8898 1 2019-02-25 11:38:44.893+08 2019-02-25 11:38:44.893+08 ef68a37c-37fa-40d7-8537-dcbc64eaf1e1 452e3349-a87b-4b5b-97f9-7dc730f910fa
+42fd4a7a-d513-4309-995f-cc109be9b8a9 2 2019-01-29 10:31:34.826+08 2019-01-29 10:32:53.082+08 d8de8739-f146-41e0-877e-747f30ac59a7 7667c2d9-3c04-4818-bfeb-42f43b60af77
+b338dcdb-b7bd-4265-a7fc-63bcae5b5597 1 2019-01-25 16:07:25.62+08 2019-01-29 10:33:57.097+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 7667c2d9-3c04-4818-bfeb-42f43b60af77
+4d9db838-043f-4513-8e70-c976017fc1f7 1 2019-01-31 11:35:16.834+08 2019-01-31 11:35:16.834+08 c9459443-e9d6-48eb-b37d-d25dfb8faaac 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5ded3a70-6e94-40c4-8d91-9661b286feff 1 2019-02-25 13:31:57.627+08 2019-02-25 13:31:57.627+08 9768653f-3bb0-4f60-9842-ed5df2685dc4 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7839c3b9-d403-4853-97e3-475e04fafdd6 1 2019-02-25 13:31:57.63+08 2019-02-25 13:31:57.63+08 9768653f-3bb0-4f60-9842-ed5df2685dc4 d0e8f529-c1bf-4146-beef-cd3056ea9787
+87b6ed6d-58cf-4afa-ab03-be2ebce8c7fb 1 2019-02-25 14:12:02.943+08 2019-02-25 14:12:02.943+08 35088e4d-f42e-4324-8237-bedb617ee489 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+5328d9ca-9004-4ad3-a806-62b8f0b5b82b 1 2019-02-25 14:12:02.947+08 2019-02-25 14:12:02.947+08 35088e4d-f42e-4324-8237-bedb617ee489 d0e8f529-c1bf-4146-beef-cd3056ea9787
+b4d4a7fc-ee80-47cb-941c-661474fa55d9 1 2019-02-25 15:44:37.096+08 2019-02-25 15:44:37.096+08 998a52d3-f5ee-4d52-997f-1865b390e26b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+96af8bbe-5a34-4604-83e1-99d7e098b3a7 1 2019-02-25 15:44:37.099+08 2019-02-25 15:44:37.099+08 998a52d3-f5ee-4d52-997f-1865b390e26b 1aa841f1-d3fb-4523-9b54-e601d350c745
+1ff7c3fe-925a-4554-9f06-dee7dfd80357 1 2019-02-25 15:44:37.102+08 2019-02-25 15:44:37.102+08 998a52d3-f5ee-4d52-997f-1865b390e26b d0e8f529-c1bf-4146-beef-cd3056ea9787
+2905fd0c-f857-4da4-871f-de9a6be87f04 1 2019-03-15 14:36:32.762+08 2019-03-15 14:36:32.762+08 ce1e7a12-8f26-4f77-8610-4871a40cfe98 876d87b1-cccb-4847-80ea-dabfc20a2175
+dd784afa-bc27-44c3-b5b1-3c2fe92b868f 1 2019-03-19 15:25:06.965+08 2019-03-19 15:25:06.965+08 cbd0eeaa-e06e-4933-9394-86c48eacae95 b425fff8-940f-467d-81f7-b456d8ad0b22
+31c10c64-1f65-4f48-83c9-36df059d2801 1 2019-03-25 11:32:57.578+08 2019-03-25 11:32:57.578+08 765f6712-b911-4681-9d31-ce9ee3a45702 c3c19462-3221-4cca-8288-13f960d7ea5b
+468b72df-d8b5-40fe-a8cb-b8013e9c3194 2 2019-03-25 11:32:57.58+08 2019-03-25 11:32:57.58+08 765f6712-b911-4681-9d31-ce9ee3a45702 0d963823-0c01-40c1-acc4-74d4eaaea996
+0bdad9e1-ec85-44fd-850e-954954381313 1 2018-09-07 11:09:31.032+08 2018-09-07 11:09:31.032+08 afb69a31-61c2-417c-b62e-c41730b3e6a1 e4049f35-3902-4610-ac6e-45c01236a230
+7161b852-38ad-46db-aee9-b3a2363e4d65 1 2018-03-14 15:53:53.998+08 2018-03-14 15:53:53.998+08 4d3ecec5-32b4-4d9b-aa02-a08275dd10c7 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+efe06b26-7f9a-4057-801e-7748498a459e 1 2018-03-14 16:17:20.813+08 2018-03-14 16:18:08.841+08 1f6ae927-989f-48b3-9fa4-18518326953b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f8e61314-d600-4d78-b66c-ed7b8fec6565 2 2018-03-15 13:45:07.085+08 2018-03-15 13:45:07.085+08 fa0123d0-7db7-4412-9670-53175d0c2c40 d07a1774-312c-4497-adbb-6e3da9410cb6
+8ec909d3-5d38-410c-8e0c-ef9e2d5d3417 1 2018-03-15 13:45:07.088+08 2018-03-15 13:45:07.088+08 fa0123d0-7db7-4412-9670-53175d0c2c40 3dfadb0e-7608-49e1-aa43-24f7442b424a
+66d2ff10-fea7-4539-873e-c5be6ca52424 1 2018-03-15 13:49:32.761+08 2018-03-15 13:49:32.761+08 ee21c9a6-d51b-4f10-83cc-8c9611003cfa d07a1774-312c-4497-adbb-6e3da9410cb6
+c86adfdc-485f-4d92-aeed-ca78b6032132 2 2018-03-15 13:49:32.764+08 2018-03-15 13:49:32.764+08 ee21c9a6-d51b-4f10-83cc-8c9611003cfa d4f271b6-567a-4880-beb0-161b33ac2094
+a2bfe3d7-6a63-4dc1-95c2-f33509226372 2 2018-03-15 13:49:32.767+08 2018-03-15 13:49:32.767+08 ee21c9a6-d51b-4f10-83cc-8c9611003cfa d5f2066b-b4d8-4e26-8991-0c068495e2c9
+c8bfa700-20bc-46d4-b876-a46a392e04a6 1 2018-09-07 11:18:27.982+08 2018-09-07 11:18:27.982+08 6c5b2840-b01d-4bb3-8ab1-a831b3880184 e4049f35-3902-4610-ac6e-45c01236a230
+40734640-74c6-40b2-9646-2c1f7a876997 1 2018-03-15 14:28:52.098+08 2018-03-15 14:28:52.098+08 4a0f1cd5-1e52-4ec3-8976-0b1f82031d28 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a088573a-f033-41a8-acb0-6670bcfac941 1 2018-09-07 11:22:10.522+08 2018-09-07 11:22:10.522+08 db345382-4b53-424d-b563-909bfe0a36cd e4049f35-3902-4610-ac6e-45c01236a230
+f9ae88f7-8101-48ad-88d2-89005d53f830 1 2018-03-15 14:36:49.755+08 2018-03-15 14:36:49.755+08 d52af3c0-c4b0-4091-96c6-ac3e97535f92 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+eceb18c6-6b90-4ab3-9cb4-c4e198751362 1 2018-03-15 16:51:58.433+08 2018-03-15 16:51:58.433+08 b55b3b15-5db9-4946-a5a9-b0d352de6a24 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+553c1f7f-1497-4a65-be6b-9cbf4debda54 1 2018-03-15 16:52:12.158+08 2018-03-15 16:52:12.158+08 63429c67-5b55-4b88-998c-65d4464623c8 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ff6cf1e7-02fb-4238-a169-4eeae1daf382 1 2018-09-26 17:10:27.037+08 2018-09-26 17:10:27.037+08 97c2157a-e4ee-41aa-b2ca-c8745fdda755 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0dc52b0a-0c56-4a29-962e-7298204c60d5 1 2018-03-15 17:11:09.928+08 2018-03-15 17:11:09.928+08 874e1ee5-94fe-49aa-94b0-6d6bfef680bc 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7a9c7db2-f131-47a3-aa64-196cafd2600b 2 2018-03-16 09:57:17.069+08 2018-03-16 09:57:17.069+08 c841ad96-ea6e-4050-b317-a0d79fecbead 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6590317a-c6c4-4555-98f7-096aef3d4edc 1 2018-03-16 09:57:17.066+08 2018-03-19 14:07:31.288+08 c841ad96-ea6e-4050-b317-a0d79fecbead 3dfadb0e-7608-49e1-aa43-24f7442b424a
+c34a2dbd-4a84-497c-9ca7-026687a37717 1 2018-03-19 14:57:03.364+08 2018-03-19 14:57:03.364+08 717279c9-81b5-4bfe-8dd3-906297d70e41 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d376a52a-bd48-42a2-9c78-23f1eac3eddc 1 2018-03-19 16:10:23.475+08 2018-03-19 16:10:23.475+08 099c6283-519f-4946-aa9d-f0059a76b832 d0e8f529-c1bf-4146-beef-cd3056ea9787
+73c755a0-b4de-4f3b-95de-a4d13d1b5bbe 1 2018-03-16 11:58:51.503+08 2018-03-23 16:27:46.559+08 c8fd3080-b416-4381-8bcc-e84c12471281 ad4f23f8-9213-4194-97ce-209a34596649
+183d4894-be30-4daa-9cf6-a257ec40bf3f 1 2018-03-20 17:29:17.043+08 2018-03-20 17:29:17.043+08 b3b4f0f1-7cdc-4892-9e6a-f4936931472c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+858ff33f-056f-4229-a01f-23fa0fb2cf1e 1 2018-03-16 11:37:21.293+08 2018-03-23 15:09:26.575+08 61f09dd0-ba56-40e4-a2d1-45dab1143900 ad4f23f8-9213-4194-97ce-209a34596649
+a714fc0f-3e11-488c-a3da-b07367d98120 2 2018-03-16 13:57:33.028+08 2018-03-23 15:11:13.159+08 86cc781e-642b-40ee-b49f-1e94aec669ae ad4f23f8-9213-4194-97ce-209a34596649
+32834f4d-6653-478f-8917-40df0f0706ab 1 2018-03-16 13:57:33.024+08 2018-03-23 15:11:33.247+08 86cc781e-642b-40ee-b49f-1e94aec669ae 3dfadb0e-7608-49e1-aa43-24f7442b424a
+0a10f2ad-1873-4c11-82dd-98004c3690fe 1 2018-03-20 09:46:35.551+08 2018-03-23 15:12:54.569+08 526c42ea-d9a9-48d1-9862-b3118a7ef211 ad4f23f8-9213-4194-97ce-209a34596649
+92f24f51-71d8-4518-9321-cffca08d97fb 1 2018-03-23 16:05:01.462+08 2018-03-23 16:05:01.462+08 9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8 d4f271b6-567a-4880-beb0-161b33ac2094
+3ea1c8da-5416-457d-8303-88e25c7b1c37 1 2018-03-23 16:11:24.547+08 2018-03-23 16:11:24.547+08 cef1d2a2-c44e-4143-84bd-2a65140e33d0 d4f271b6-567a-4880-beb0-161b33ac2094
+9aa12a3b-8017-406f-8a88-289e1e1aa27c 1 2018-03-21 09:54:46.401+08 2018-03-23 16:23:51.633+08 12a0ae21-df74-42b4-94ce-492125b941bd ad4f23f8-9213-4194-97ce-209a34596649
+fa4b84e2-60d6-4d39-8ec2-be9eae52a7f7 1 2018-03-23 16:32:39.684+08 2018-03-23 16:32:39.684+08 2e2456a6-9738-456c-abf1-94d5ebad124a d4f271b6-567a-4880-beb0-161b33ac2094
+b53dabf5-8d79-4003-ac2f-05cb858dda67 1 2018-03-23 16:36:53.803+08 2018-03-23 16:36:53.803+08 0f4f59de-cde7-4aec-a402-703e5426bb76 d4f271b6-567a-4880-beb0-161b33ac2094
+87361a2b-a3b3-4fea-97ba-1cc719e1125f 1 2018-03-23 17:02:05.696+08 2018-03-23 17:02:05.696+08 5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed d4f271b6-567a-4880-beb0-161b33ac2094
+52772d68-c0f8-4950-88c2-87fe5c350736 1 2018-03-23 17:06:57.097+08 2018-03-23 17:06:57.097+08 bc476c11-0887-40fb-ae9e-06ab514a44c0 d4f271b6-567a-4880-beb0-161b33ac2094
+63dd0fd9-2dad-4755-93df-c2ade460af7a 1 2018-03-23 17:57:47.857+08 2018-03-23 17:57:47.857+08 771be2fa-a2f9-4ba8-8c08-76b091627b87 d4f271b6-567a-4880-beb0-161b33ac2094
+b3a896a0-6180-448e-996e-5cc3d9775f7e 1 2018-03-25 19:20:49.994+08 2018-03-25 19:20:49.994+08 388cca81-7338-40d3-ba1f-89ec9d5aa2f7 ad4f23f8-9213-4194-97ce-209a34596649
+3a9e7afb-b301-4ca5-b24c-a8625767cb5c 1 2018-03-26 10:52:50.966+08 2018-03-26 10:52:50.966+08 2d9520e9-143b-48c2-960f-5c9dca7a21b4 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+0b7eb99a-e67b-405c-969b-5930963ded34 1 2018-03-26 11:16:11.491+08 2018-03-26 11:16:11.491+08 02513eed-ba94-456b-86e0-89ea996b879d d5f2066b-b4d8-4e26-8991-0c068495e2c9
+71c9ba8a-8861-4e8a-b47b-be8a862551c8 1 2018-03-26 11:16:13.094+08 2018-03-26 11:16:13.094+08 2e0d00cd-a321-4504-b716-41813848cbdb d5f2066b-b4d8-4e26-8991-0c068495e2c9
+29f74d0b-7785-443e-856b-9d094d302afd 1 2018-03-26 11:24:13.128+08 2018-03-26 11:24:13.128+08 1bda935e-56de-4365-b60e-f02d19299795 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+afa7245c-e631-45a5-b115-35e2ca8c2727 1 2018-03-26 11:27:33.447+08 2018-03-26 11:27:33.447+08 d31031ab-0237-41a5-adc0-867c1e9952f7 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+d5069096-9653-4d8f-a0dc-6dece2a96ea2 1 2018-03-26 11:27:35.438+08 2018-03-26 11:27:35.438+08 9297adfa-1972-45e3-a5c4-0f31a0acbe84 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+f0a71c11-60b9-4c93-a634-379547afa6e9 1 2018-03-26 11:30:25.43+08 2018-03-26 11:30:25.43+08 ca6af9e3-f1dc-4992-8029-d0e438ef99b5 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+41f16658-3046-4a0a-bdc1-9e3052e8d392 1 2018-03-26 11:16:13.091+08 2018-06-25 10:41:47.336+08 2e0d00cd-a321-4504-b716-41813848cbdb 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+41996fc6-d698-4c07-a88a-b124494e1469 1 2018-03-26 11:27:33.444+08 2018-06-25 10:42:30.8+08 d31031ab-0237-41a5-adc0-867c1e9952f7 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f45c1c35-7bfc-430b-b02c-101650805f41 1 2018-03-26 11:27:35.436+08 2018-06-25 10:42:51.797+08 9297adfa-1972-45e3-a5c4-0f31a0acbe84 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b3591c45-4238-49e6-9467-c68e0013140e 1 2018-03-26 11:30:25.427+08 2018-06-25 10:43:13.202+08 ca6af9e3-f1dc-4992-8029-d0e438ef99b5 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6e103548-19ee-4fec-a3fc-48f0c30b7a0d 1 2018-03-26 11:35:23.087+08 2018-03-26 11:35:23.087+08 0b09cbd9-3881-4b4a-8910-0e8730d5d935 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+80da1e72-1b76-4cf7-9318-ad8995f278c0 1 2018-03-26 11:35:23.206+08 2018-03-26 11:35:23.206+08 aab61193-270e-4d06-9bdf-9da5194c744a d5f2066b-b4d8-4e26-8991-0c068495e2c9
+dd20c30f-b6c1-48bd-8033-6a74226db443 1 2018-09-10 10:22:20.294+08 2018-09-10 10:22:20.294+08 7a741fa4-a643-495d-bb49-443ec2df29b9 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+01d7db4f-1d4f-48ad-9a55-f99c88c7d993 1 2018-09-10 17:11:57.976+08 2018-09-10 17:11:57.976+08 7a741fa4-a643-495d-bb49-443ec2df29b9 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+da1ba9f2-1f71-49d3-8aa5-9f5b8b82758b 1 2018-03-26 11:35:22.725+08 2018-06-25 10:43:35.128+08 0b09cbd9-3881-4b4a-8910-0e8730d5d935 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+43434057-77b8-47ae-998b-5a49df399d30 1 2018-03-26 11:35:23.204+08 2018-06-25 10:44:28.544+08 aab61193-270e-4d06-9bdf-9da5194c744a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4b7343df-51ed-4df2-b33c-921f78f8eeae 2 2018-09-26 17:10:27.04+08 2018-09-26 17:10:27.04+08 97c2157a-e4ee-41aa-b2ca-c8745fdda755 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d410a566-edaa-4fd8-9f08-2b167893d872 1 2019-02-25 15:46:09.565+08 2019-02-25 15:46:09.565+08 a62aba76-29bb-43b8-a1fe-2dff7c77ecb8 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8cb76a98-9a11-4237-abb7-d6ef25643d0a 1 2018-10-26 16:26:05.543+08 2018-10-30 19:12:19.718+08 d5bfb91e-3d09-4068-ac33-5974e8b7f039 5cc45782-5d73-4354-b2c1-4904e284c95b
+b2990d11-a7bd-473c-902f-ba1988141462 2 2018-11-20 15:40:08.434+08 2018-11-20 15:40:08.434+08 b349f69a-d7bb-4bee-aa65-6d250e1a7ae8 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ae1ec7b9-1bfa-47d0-b4f9-7f1f90dab416 1 2018-11-26 11:43:09.69+08 2018-11-26 11:43:09.69+08 59f09a3b-57f2-46ee-a2c7-8bba3e704794 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+36ed02fa-1e61-4b6f-8310-80a09531bd46 1 2018-11-28 15:04:48.334+08 2018-11-28 15:04:48.334+08 acd2fd97-bd2a-4cad-9c11-1e4267d0b9fb 3dfadb0e-7608-49e1-aa43-24f7442b424a
+25fb0236-2f28-42fe-bf21-e6506e5efe9d 2 2018-11-28 15:04:48.336+08 2018-11-28 15:04:48.336+08 acd2fd97-bd2a-4cad-9c11-1e4267d0b9fb 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7812e889-d184-4f4c-be6d-ce2a956aa747 1 2018-12-03 13:54:10.245+08 2018-12-03 13:59:08.194+08 7575abc3-ef50-40ce-90c4-66fb308cf20c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0ef9c682-3630-4317-8dc4-0b6fa49142d1 1 2018-12-06 11:37:00.477+08 2018-12-06 11:37:00.477+08 d2a5375c-0240-4435-9b8f-a62372fafaca 1aa841f1-d3fb-4523-9b54-e601d350c745
+2df285e9-afc2-451a-94b0-6d7435d7005a 1 2018-12-07 17:22:04.452+08 2018-12-07 17:22:04.452+08 9dac79b5-8173-4081-abff-37f65c42b0c6 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+de0e5741-ccb8-4de2-b764-fba43324662c 1 2018-12-18 16:35:54.027+08 2018-12-18 16:35:54.027+08 e376bde0-8e4f-493d-a03e-98b4b27acec0 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b6ec7cc4-efa7-4c35-a8ab-968845f3da43 1 2018-12-20 14:58:02.432+08 2018-12-20 14:58:02.432+08 f09a8627-9e84-489e-86f5-72522b126e74 12cbda5e-cdad-4e5e-91b8-4489f816f00d
+225a2a41-62a1-4c65-b64b-a017f4e5ccd5 1 2018-12-15 11:36:54.19+08 2018-12-21 17:02:41.248+08 495526a7-7701-4e9c-8dfd-bbfd7e0b163b c00008f7-06d9-4907-b2e7-619374116b36
+0560b094-8bc0-4d1e-9495-466f241e7391 1 2018-12-24 11:53:24.869+08 2018-12-24 11:53:24.869+08 6f051a40-1c14-47c6-8124-3077f27facc5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+63041b9e-d1bc-4876-b127-ae8d3470301d 1 2018-12-28 11:02:10.359+08 2018-12-28 11:02:10.359+08 e6c538b8-f82a-4e8f-9d47-529a835fc779 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7e40c49c-634a-47a1-bfb4-5d363af2cae4 1 2019-01-07 17:23:55.777+08 2019-01-07 17:23:55.777+08 1824bec3-15cd-498d-b2c1-b3cc804a1021 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+edee803b-2b24-4f36-b154-23ce80793f4d 2 2019-01-14 11:54:28.927+08 2019-01-14 11:54:28.927+08 969043a0-c1f9-49c2-9f36-c029a03a9c87 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a09fea95-bdee-4b25-b46d-ae2352c44000 1 2019-01-18 16:57:11.298+08 2019-01-19 13:19:51.363+08 0794ccbd-2a6e-49b6-9b42-abf93957b33c 71458c57-c197-4b3c-9171-2cdc5658201e
+d407820e-e638-40cc-ba07-3175574f34f7 1 2019-01-24 11:51:28.169+08 2019-01-24 11:51:28.169+08 03f53a90-43a0-47d6-9183-edfb825a09e5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a30ffb26-d605-495a-9e8b-00a0c6b534ad 1 2019-01-28 10:50:57.666+08 2019-01-28 10:50:57.666+08 d0fcad31-8656-4b67-9530-1519960defec 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+fcfbd781-138a-4298-a573-df9082d9914e 1 2019-01-29 10:56:26.78+08 2019-01-29 10:56:26.78+08 6020197b-abd9-4ef2-b674-0451a754fe68 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+bd61417b-e4c4-4aaa-b475-2bb5422f00a3 2 2019-01-29 10:56:26.784+08 2019-01-29 10:56:26.784+08 6020197b-abd9-4ef2-b674-0451a754fe68 6c047530-0656-4cb4-a416-f4ac00b015f9
+243336ba-85c0-4bfa-bb27-55b9928d7ba7 2 2019-01-31 11:35:29.039+08 2019-01-31 11:35:29.039+08 c9459443-e9d6-48eb-b37d-d25dfb8faaac 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+90721552-469c-47cb-a77e-4d3bfffbf6c5 1 2019-02-21 17:19:51.481+08 2019-02-21 17:19:51.481+08 b52fa83f-d3fd-4a8e-b9d5-76ea840aca15 3dfadb0e-7608-49e1-aa43-24f7442b424a
+33472f2d-14b8-4de5-9b74-435c692ec885 1 2019-02-25 11:41:29.887+08 2019-02-25 11:41:29.887+08 a97834b4-727b-42ad-9ce0-aede595a5727 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+70d62ce7-a781-4d0f-adb4-b79da0f0febe 1 2019-02-25 11:41:29.891+08 2019-02-25 11:41:29.891+08 a97834b4-727b-42ad-9ce0-aede595a5727 1aa841f1-d3fb-4523-9b54-e601d350c745
+e51e5db8-7a14-436c-9b94-487800faf545 1 2019-02-25 11:41:29.894+08 2019-02-25 11:41:29.894+08 a97834b4-727b-42ad-9ce0-aede595a5727 d0e8f529-c1bf-4146-beef-cd3056ea9787
+7c448417-3b77-447c-8f48-85c3554d4e49 1 2019-02-25 14:14:48.83+08 2019-02-25 14:14:48.83+08 1b0b94f1-5fde-428d-aa1c-242e8e024809 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c9e0d0f5-9c30-4188-a161-a46d017455d0 1 2019-02-25 14:14:48.834+08 2019-02-25 14:14:48.834+08 1b0b94f1-5fde-428d-aa1c-242e8e024809 d0e8f529-c1bf-4146-beef-cd3056ea9787
+5f07c93b-7d9d-4756-b1ee-849b6a29cc1a 1 2019-02-25 15:46:09.569+08 2019-02-25 15:46:09.569+08 a62aba76-29bb-43b8-a1fe-2dff7c77ecb8 d0e8f529-c1bf-4146-beef-cd3056ea9787
+be6b7a73-02b2-4e03-8438-1d2851265d3d 1 2019-02-25 15:46:09.573+08 2019-02-25 15:46:09.573+08 a62aba76-29bb-43b8-a1fe-2dff7c77ecb8 118383e6-1b61-4e15-8dee-a1a2a61b531e
+c0ff77a6-4d80-413c-a71b-842314237d20 1 2019-03-15 16:27:38.697+08 2019-03-15 16:27:38.697+08 848b15cb-6357-48eb-979d-a6398d05bd8c 6f9486b4-6b22-4fbd-a73a-9334e711badb
+b9a3b789-6f9a-446c-a152-d88301294e5d 2 2019-03-15 16:27:38.701+08 2019-03-15 16:27:38.701+08 848b15cb-6357-48eb-979d-a6398d05bd8c 66a06e5d-a436-4d37-806b-919d8fd1c564
+3a008113-cca2-45ec-86df-9f1dada45b38 2 2019-03-15 16:27:38.704+08 2019-03-15 16:27:38.704+08 848b15cb-6357-48eb-979d-a6398d05bd8c 936f5813-db0d-4a2a-a7bc-8d323024140b
+385ce4ca-9613-40dc-b62b-b939a0f49f24 1 2019-04-28 11:28:46.196+08 2019-04-29 15:07:42.776+08 28463128-4e0e-4167-8aa6-3c6f5accc368 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+d6efa4d1-c65e-45c2-bd65-45a4a3a9eb5d 1 2019-04-28 11:28:04.774+08 2019-04-29 15:07:54.421+08 3d182049-68c9-440d-adde-b62b71abee38 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+443e2148-f4da-43ee-b65d-7871425558a6 1 2019-04-28 11:25:30.652+08 2019-04-29 15:08:38.921+08 b8061f6d-fe6e-443d-bed9-8b4e7fb81a71 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+e89fa25a-4873-4dc9-ab37-df477d56e76b 2 2019-02-22 15:14:23.575+08 2019-04-29 16:05:08.368+08 2b04a6d8-4af7-428f-95c9-325800c4b59d 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+174d5f4f-1823-4d8a-977f-39f7b1ace156 1 2018-03-26 11:35:24.357+08 2018-03-26 11:35:24.357+08 d3763c4f-94ba-4ae4-b35e-ccff2340c16a d5f2066b-b4d8-4e26-8991-0c068495e2c9
+ac8f829d-2206-4e4a-a6b8-5277c03b2c1a 1 2018-03-26 11:35:24.355+08 2018-06-25 10:47:52.807+08 d3763c4f-94ba-4ae4-b35e-ccff2340c16a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d185b76d-f67c-45e7-a3ea-acaef9c07ec6 1 2018-09-10 17:10:05.05+08 2018-09-10 17:10:05.05+08 1c431af0-8407-422f-8823-82fe58af024f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b031bb45-a265-4419-9cbe-332423ba2abc 2 2018-09-10 17:10:05.054+08 2018-09-10 17:10:05.054+08 1c431af0-8407-422f-8823-82fe58af024f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+265f9d4d-51cf-436b-9d43-166ad66c7080 1 2018-09-29 15:42:42.216+08 2018-09-29 15:42:42.216+08 477ce1aa-aaae-40d3-a55e-2d3ef3a38e23 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+604da184-9177-4c22-a39d-a0c72af7e904 2 2018-09-29 15:42:42.218+08 2018-09-29 15:42:42.218+08 477ce1aa-aaae-40d3-a55e-2d3ef3a38e23 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+545579d9-9935-4629-a62a-a6dc09848c44 1 2018-10-26 17:54:01.952+08 2018-10-26 17:54:01.952+08 4a91ace7-e5da-44c8-843d-43fb6a130847 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+110ef22a-73d0-44dd-ad6f-6a45ceb40cc6 1 2018-11-22 14:43:45.883+08 2018-11-22 14:43:45.883+08 9d5905bc-0969-4032-ad57-69d6490fbc47 ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
+79878e10-a5ed-4ae1-a9cf-ee24079c0c35 2 2018-11-22 14:43:45.887+08 2018-11-22 15:41:25.285+08 9d5905bc-0969-4032-ad57-69d6490fbc47 8774b4f0-60c1-4c7d-940b-f3a847c2847a
+e2b8312f-d75e-4857-a7f8-6d60189e4e73 2 2018-11-26 11:43:48.533+08 2018-11-26 11:43:48.533+08 59f09a3b-57f2-46ee-a2c7-8bba3e704794 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d365d25c-5fbf-4a51-8e0a-7a46b052daf3 1 2018-12-06 11:38:03.408+08 2018-12-06 11:38:03.408+08 d2a5375c-0240-4435-9b8f-a62372fafaca d0e8f529-c1bf-4146-beef-cd3056ea9787
+278e2327-057d-40cf-8780-7cd3af707ed1 1 2018-12-08 15:12:26.599+08 2018-12-08 15:12:26.599+08 0747dcbe-0a49-4db1-ac06-d9a460babdd3 66537b16-1e7d-4823-b03e-676459f5891d
+90a7baa6-3124-4a2c-ad12-9415ae86f051 1 2018-12-15 11:42:30.093+08 2018-12-15 12:57:11.471+08 74ca6540-3a33-4157-8629-f00d8750aa78 452e3349-a87b-4b5b-97f9-7dc730f910fa
+5baa86e2-f207-486e-a510-137b3b367704 1 2018-12-18 16:35:55.144+08 2018-12-18 16:35:55.144+08 ae5c1f57-7ae4-4515-b6ba-51319d4599ce 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f671f747-5450-4d50-a757-fc74e75fe965 1 2018-12-20 15:04:51.308+08 2018-12-20 15:04:51.308+08 b2e31dbc-1560-4ab9-8b57-a57a012d5022 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5de53d90-f7f0-4a31-b82b-f6582e38cc39 1 2018-12-24 11:53:26.515+08 2018-12-24 11:53:26.515+08 b92bc45a-bf9b-425f-9747-7caedf0c2784 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+614b3b1e-fe7f-4ad3-a9d1-3a40b2cdc1fc 1 2018-12-28 11:07:29.294+08 2018-12-28 11:07:29.294+08 092ae1af-65d0-45dd-a621-17fd26682e7c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0caf32b7-082e-4aa6-bd8a-f6a177eaae26 1 2019-01-07 17:45:50.813+08 2019-01-07 17:45:50.813+08 a81c3314-06e2-428a-bede-88adf880bdd7 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a7b23026-3fec-406a-a8a7-66ad91e531bb 1 2019-01-14 15:28:21.352+08 2019-01-14 15:28:21.352+08 ccfcd1c0-1cf5-4123-9be8-ca521b1e79d3 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8bdc1373-d05c-4dec-a5b5-eeaeded2b8a0 1 2019-01-19 09:49:48.909+08 2019-01-19 09:49:48.909+08 53ff80a4-bf85-47bd-9351-ad8cbd0121e3 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+26574d0f-9eca-4448-8d80-2dfb803e770e 1 2019-02-25 11:42:07.351+08 2019-02-25 11:42:07.351+08 bf5a92b7-59ab-429b-bce7-da858650205e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d1a02c47-887d-406c-9db4-9848330c25c7 1 2019-02-25 11:42:07.356+08 2019-02-25 11:42:07.356+08 bf5a92b7-59ab-429b-bce7-da858650205e 1aa841f1-d3fb-4523-9b54-e601d350c745
+cfabebbb-7b37-4862-9dfe-6745ce6c4fa4 1 2019-02-25 11:42:07.359+08 2019-02-25 11:42:07.359+08 bf5a92b7-59ab-429b-bce7-da858650205e d0e8f529-c1bf-4146-beef-cd3056ea9787
+03420b4e-17dc-4a2b-a3be-fec86c8912ce 1 2019-02-25 14:16:02.46+08 2019-02-25 14:16:02.46+08 80342a8c-db6f-40e6-b331-0ae1eca53138 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d176a150-ed6d-4e82-9ae0-cabede0f9d86 1 2019-02-25 14:16:02.464+08 2019-02-25 14:16:02.464+08 80342a8c-db6f-40e6-b331-0ae1eca53138 d0e8f529-c1bf-4146-beef-cd3056ea9787
+d775256b-39e7-4c7b-843b-b040a4a8cb3f 1 2019-02-25 15:46:53.769+08 2019-02-25 15:46:53.769+08 8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+26672437-afc7-40c2-9f69-bb2ff009e0da 1 2019-02-25 15:46:53.772+08 2019-02-25 15:46:53.772+08 8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3 d0e8f529-c1bf-4146-beef-cd3056ea9787
+0fd6829f-47b8-4f06-8d61-7819cf367cb9 1 2019-02-25 15:46:53.774+08 2019-02-25 15:46:53.774+08 8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3 1aa841f1-d3fb-4523-9b54-e601d350c745
+5602db39-4448-48d0-bd83-5f5c7d153ee9 1 2019-03-15 16:35:52.832+08 2019-03-15 16:35:52.832+08 5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed 66a06e5d-a436-4d37-806b-919d8fd1c564
+c3311b93-b9ed-4269-93d7-b0ad072e57d5 1 2019-03-19 15:25:15.734+08 2019-03-19 15:25:15.734+08 4ff02b0c-e9de-4687-90b5-0e723ab835fe b425fff8-940f-467d-81f7-b456d8ad0b22
+80628eea-49ed-4c2f-959d-2deb4b670627 1 2019-03-25 11:18:25.744+08 2019-03-25 11:18:25.744+08 2cea756f-0ed5-406d-88a5-b2c3b6ad9b6d 0d963823-0c01-40c1-acc4-74d4eaaea996
+d9fb92f0-acdc-4294-bf1b-bd3449d569ea 1 2019-04-28 11:26:12.324+08 2019-04-29 15:08:26.571+08 dc1f2a7f-e0b1-4894-852c-6eaa5c66ef83 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+b2586eb2-81e4-45d5-8232-b6d874663056 1 2019-02-22 11:35:12.144+08 2019-04-29 16:05:57.803+08 d1b35088-9410-4203-924c-75b60634c7c6 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+bc1c265d-4934-4a19-9b3b-b3894639c532 1 2019-02-22 11:35:40.174+08 2019-04-29 16:06:05.204+08 283a3cd5-8593-4b92-a528-bbd35a07b288 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+64b42834-88da-4052-9a4b-d54d2ded8159 1 2019-05-31 16:20:28.342+08 2019-05-31 16:20:28.342+08 28463128-4e0e-4167-8aa6-3c6f5accc368 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+67e8079a-e342-4c82-96d0-5519b7d172eb 1 2019-05-08 17:53:13.474+08 2019-05-08 17:53:13.474+08 1c6ea7b5-ffd8-4e6c-b190-c2cbdbe65a17 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6721bd30-fd2e-446e-b46c-2d301c9bd8a6 1 2019-05-15 10:48:06.505+08 2019-05-15 10:48:06.505+08 82c4e869-135f-466b-af92-27b7979b1fd2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e4b2eb17-1aa6-425b-8ed3-b6eb62ee862c 1 2019-05-22 16:00:03.717+08 2019-05-22 16:00:03.717+08 d93ae98f-5dbc-45c3-81cf-8f9360a11684 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+baa643c7-bfdd-477b-b31f-b5d128cc5281 2 2019-05-22 16:00:03.721+08 2019-05-22 16:00:03.721+08 d93ae98f-5dbc-45c3-81cf-8f9360a11684 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+579d559b-7c0e-46ef-9c84-77bc1da70da9 1 2019-05-31 16:22:08.121+08 2019-05-31 16:22:08.121+08 dc1f2a7f-e0b1-4894-852c-6eaa5c66ef83 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4deee1cf-e422-45dc-ae21-00b253538032 1 2019-05-31 16:23:24.298+08 2019-05-31 16:23:24.298+08 c70bf363-fc19-41f9-80df-27a231a1a2bd 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+17a5fc51-7701-471a-9ed2-22b64877374a 1 2019-05-31 16:24:16.078+08 2019-05-31 16:24:16.078+08 4068ff34-b211-4386-b274-0a6b12f35b59 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+947b9222-20af-4c12-a0e3-b2ac87fe9f2a 1 2019-05-31 16:25:12.918+08 2019-05-31 16:25:12.918+08 283a3cd5-8593-4b92-a528-bbd35a07b288 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+73e7150f-daff-4342-a1db-41e7eaa4a812 2 2019-06-05 10:58:32.282+08 2019-06-05 10:58:32.282+08 d9b333ed-096a-405a-9c9a-905cd04d2368 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9bf83d9e-9729-4c07-953c-1f5e58760c26 1 2019-06-05 10:58:32.285+08 2019-06-05 10:58:32.285+08 d9b333ed-096a-405a-9c9a-905cd04d2368 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c7a4e95a-ab30-40b7-9706-97af9fd565f8 1 2019-06-06 17:24:55.447+08 2019-06-06 17:24:55.447+08 53070eae-7839-46df-9492-f1b4c0b0b101 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4c7d09a5-8842-4f74-bc03-6b720fbbceef 1 2019-06-11 15:50:05.405+08 2019-06-11 15:50:05.405+08 888fb650-543d-4141-a70e-7dff25dfffe7 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+91981670-d364-4217-8bd4-d5771fbdf651 1 2018-03-26 11:38:24.176+08 2018-03-26 11:38:24.176+08 11f0a3dc-13ad-4c40-ae16-1b2f1d139564 d0e8f529-c1bf-4146-beef-cd3056ea9787
+d13d97cf-bbb8-40d4-83df-7665c341ff35 1 2018-03-26 11:41:39.431+08 2018-03-26 11:41:39.431+08 fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+44118f25-8b14-49d7-9f1c-ad1ab08e3f31 1 2018-03-26 11:43:22.7+08 2018-03-26 11:43:22.7+08 a9d42f6d-8409-415c-937e-aea8bebf7a50 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+1c6314fe-a3cf-4334-b57a-c95efa23fc1b 1 2018-03-26 11:43:22.861+08 2018-03-26 11:43:22.861+08 3aba791d-d6b2-4175-bb20-109f210f4065 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+f669551b-cade-498e-bc5e-e1af210678ae 1 2018-03-26 11:43:23.166+08 2018-03-26 11:43:23.166+08 0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+31b6984c-82fa-4104-9e7d-50bd5a2a3501 1 2018-09-29 15:46:46.724+08 2018-09-29 15:46:46.724+08 d5df12f1-ea7f-45d0-81a9-79a1fb4e0c90 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+28e4fc9b-80c1-4cea-9716-04eca78859bf 1 2018-03-26 11:43:24.2+08 2018-03-26 11:43:24.2+08 f30482b9-b518-4048-8217-bd64158911e6 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+3cf4d4c7-c487-43bb-bb7d-65fc6e366033 1 2018-03-26 13:34:41.818+08 2018-03-26 13:34:41.818+08 0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1 d0e8f529-c1bf-4146-beef-cd3056ea9787
+0b032124-e602-47ce-9feb-4ea8d7b76be4 1 2018-03-26 13:43:47.875+08 2018-03-26 13:43:47.875+08 473aee20-7c00-41cd-bd6e-b44c35c758ea d0e8f529-c1bf-4146-beef-cd3056ea9787
+f13135a3-2817-4988-8939-af1c5a2ac321 1 2018-03-26 13:48:14.673+08 2018-03-26 13:48:14.673+08 b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 d0e8f529-c1bf-4146-beef-cd3056ea9787
+0a6471bd-8bf4-4f55-9bff-7d257cd5543c 1 2018-03-26 13:53:22.872+08 2018-03-26 13:53:22.872+08 73a7b800-25d7-41ad-872d-96cc4f9430de d0e8f529-c1bf-4146-beef-cd3056ea9787
+2b3f9f56-bc0b-4d13-a4cc-cfd5d6681f54 1 2018-03-26 13:57:13.721+08 2018-03-26 13:57:13.721+08 65b984f5-c294-49fa-8433-510d38416095 ad4f23f8-9213-4194-97ce-209a34596649
+92868b2d-fe4e-4e52-89bc-f0e458bd731b 1 2018-03-26 14:02:25.871+08 2018-03-26 14:02:25.871+08 abaf6bf4-288f-4d21-9fab-515213e6dcac d0e8f529-c1bf-4146-beef-cd3056ea9787
+eb1ac1bd-5461-42b2-90a1-98bc094d7978 1 2018-03-26 14:21:18.709+08 2018-03-26 14:21:18.709+08 ccb72dc5-f9bc-424d-a3ec-e6e9121bc534 d0e8f529-c1bf-4146-beef-cd3056ea9787
+e4525921-3f8f-49cb-b1a1-b289cfbce822 1 2018-03-26 14:26:14.473+08 2018-03-26 14:26:14.473+08 780ffe7d-7369-4d2f-9184-32790466f2ba d0e8f529-c1bf-4146-beef-cd3056ea9787
+0f8321e1-4979-4096-a680-84283ae510be 1 2018-03-26 14:29:05.338+08 2018-03-26 14:29:05.338+08 424f45f6-916c-4383-bce4-c71153f82e63 d0e8f529-c1bf-4146-beef-cd3056ea9787
+cb53c59b-db7b-4784-bf0c-3904b516ea73 1 2018-03-26 14:37:35.58+08 2018-03-26 14:37:35.58+08 90a2bc12-2214-43ff-9154-9b9212de2c10 d0e8f529-c1bf-4146-beef-cd3056ea9787
+545ab4bf-df32-4df2-9299-1749c51dc520 1 2018-03-26 14:44:57.931+08 2018-03-26 14:44:57.931+08 5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8 d0e8f529-c1bf-4146-beef-cd3056ea9787
+83bfc264-e916-44cd-af22-18decbd771c6 1 2018-03-26 15:02:09.45+08 2018-03-26 15:02:09.45+08 5e7775c1-0766-436e-b701-b1102833b98d d0e8f529-c1bf-4146-beef-cd3056ea9787
+6f54391e-0bbe-457c-b9bb-700e9a6cd79f 1 2018-03-26 15:13:35.552+08 2018-03-26 15:13:35.552+08 c0cde67c-9734-4a3c-bb52-0caba0ae8724 d0e8f529-c1bf-4146-beef-cd3056ea9787
+6578b6e8-7c36-4811-bc98-a87c85516f01 1 2018-03-26 15:17:35.616+08 2018-03-26 15:17:35.616+08 bbfa13d3-fd42-4230-97e6-792463dbaf85 d0e8f529-c1bf-4146-beef-cd3056ea9787
+89ed11de-42f6-469b-8110-777ef53bf7d8 1 2018-03-26 15:21:21.924+08 2018-03-26 15:21:21.924+08 f6b98e0f-0bfe-4a95-808c-d6d10b4c803b d0e8f529-c1bf-4146-beef-cd3056ea9787
+a107c8da-4237-4bd1-b410-0c94480f3380 1 2018-03-26 15:26:18.91+08 2018-03-26 15:26:18.91+08 1bcd78b8-bd96-4c95-8e19-27a1ac7356c9 d0e8f529-c1bf-4146-beef-cd3056ea9787
+7b4d2a79-2754-45ab-ba53-06061ccd349a 1 2018-03-26 15:36:04.279+08 2018-03-26 15:36:04.279+08 8bab3e11-dc23-4082-97ec-a04e78fa19c3 d0e8f529-c1bf-4146-beef-cd3056ea9787
+93af1d8f-28a8-4416-bebc-69aff080224f 1 2018-03-26 15:42:57.945+08 2018-03-26 15:42:57.945+08 37c046eb-9a0e-49b0-95fb-f0128338f381 d0e8f529-c1bf-4146-beef-cd3056ea9787
+cfb376d0-5f56-4641-a00e-49d6b761588c 1 2018-03-26 15:48:03.246+08 2018-03-26 15:48:03.246+08 c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d d0e8f529-c1bf-4146-beef-cd3056ea9787
+08e96e61-ca23-485e-bb15-7d4680b93c2a 1 2018-03-26 15:58:02.75+08 2018-03-26 15:58:02.75+08 cb4eb310-0876-492a-9e06-8cd0a5542c5b d0e8f529-c1bf-4146-beef-cd3056ea9787
+d86b7f4e-33b9-493f-a96e-c6dc2a23ab25 1 2018-03-26 16:12:35.744+08 2018-03-26 16:12:35.744+08 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 d0e8f529-c1bf-4146-beef-cd3056ea9787
+52d35c64-df91-4a35-a8af-064108a83edf 1 2018-03-26 16:17:47.745+08 2018-03-26 16:17:47.745+08 91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 d0e8f529-c1bf-4146-beef-cd3056ea9787
+f694a273-d028-40e3-977c-cc05a87e4682 1 2018-03-26 16:24:02.878+08 2018-03-26 16:24:02.878+08 c9eacd36-38d6-48b9-9672-e76406906ea3 d0e8f529-c1bf-4146-beef-cd3056ea9787
+39f9a215-438d-4632-8279-1bd1b2f3bf67 1 2018-03-26 16:43:45.704+08 2018-03-26 16:43:45.704+08 1d48c633-6d83-4b96-a572-6f59a0100c9b d0e8f529-c1bf-4146-beef-cd3056ea9787
+b1fef6a3-82b1-482f-a84f-563abd6544b9 1 2018-03-26 16:47:53.769+08 2018-03-26 16:47:53.769+08 8c2579cd-6aca-4902-a9d6-61e916a4541e ad4f23f8-9213-4194-97ce-209a34596649
+fdd5f1ac-6973-487e-82ad-9024c7c0a1a0 1 2018-03-26 16:50:45.347+08 2018-03-26 16:50:45.347+08 50600703-5c4c-4ceb-a44d-d0b79882b1dc d0e8f529-c1bf-4146-beef-cd3056ea9787
+00ee24d8-ef44-4ff2-8733-303cf1445fc0 1 2018-03-26 16:59:55.985+08 2018-03-26 16:59:55.985+08 27930598-2f6e-4932-a816-9685f17969b5 d0e8f529-c1bf-4146-beef-cd3056ea9787
+875ae240-20b8-449b-9630-295f35bdd0e0 1 2018-03-26 17:36:26.275+08 2018-03-26 17:36:26.275+08 83d8bf62-35f8-48c5-afa2-0d454cb19f70 ad4f23f8-9213-4194-97ce-209a34596649
+a9558f80-d4df-444f-92c9-70616683c45e 1 2018-03-27 10:50:24.642+08 2018-03-27 10:50:24.642+08 4d523084-bf91-421f-bafc-f278a63c5541 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c5e83eac-d67a-4d06-9f09-17f58b88b5bf 1 2018-03-27 10:57:11.918+08 2018-03-27 10:57:11.918+08 e5f12d4b-bb3c-4158-b98e-8af3579bd2cc d0e8f529-c1bf-4146-beef-cd3056ea9787
+31f521d5-23c2-4ba1-87c8-f5dbf3f015ce 1 2018-03-27 11:00:20.897+08 2018-03-27 11:00:20.897+08 362018b7-e626-4eab-a6ad-214d85cfcc03 d0e8f529-c1bf-4146-beef-cd3056ea9787
+cdec673e-1ba8-433e-9eb7-6d4f2d695fb3 1 2018-03-27 11:03:50.765+08 2018-03-27 11:03:50.765+08 cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3 d0e8f529-c1bf-4146-beef-cd3056ea9787
+5a36aa3d-31f1-43ac-916d-fa194e5de4eb 1 2018-03-27 11:07:04.302+08 2018-03-27 11:07:04.302+08 b6095ab3-88ff-4a71-8f42-f0656b301e1e d0e8f529-c1bf-4146-beef-cd3056ea9787
+067d54bd-4310-47e8-a3a2-e7c9972d5987 1 2018-03-27 11:12:12.027+08 2018-03-27 11:12:12.027+08 5f4e4e99-20b3-4bf7-95cb-a2f507595b2d d0e8f529-c1bf-4146-beef-cd3056ea9787
+ff31a727-8a78-4e10-99e9-ec9c374288ef 1 2018-03-27 11:28:21.216+08 2018-03-27 11:28:21.216+08 9110f259-e269-446d-afa3-798069f4534d d0e8f529-c1bf-4146-beef-cd3056ea9787
+4bfd9afa-c491-4a9d-86a1-80152e284ed7 1 2018-03-26 11:43:23.162+08 2018-06-25 10:46:23.557+08 0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3ae76e58-0d33-43cb-b3f0-37be15bc52c8 1 2018-03-26 11:43:22.858+08 2018-06-25 10:46:40.641+08 3aba791d-d6b2-4175-bb20-109f210f4065 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a141085c-a860-4f4f-adb1-9df8136501bc 1 2018-03-26 11:43:22.694+08 2018-06-25 10:47:02.67+08 a9d42f6d-8409-415c-937e-aea8bebf7a50 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+84220059-ac10-4c5b-968f-bf30f3447838 1 2018-03-26 11:41:39.428+08 2018-06-25 10:47:32.911+08 fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d87458cf-1db9-4c12-9670-549ad5eefa05 1 2018-03-27 11:23:37.914+08 2018-07-31 17:13:57.13+08 131c98fc-2216-4f0f-9cd3-581d88f9affd 7667c2d9-3c04-4818-bfeb-42f43b60af77
+9ef9e4d8-cb52-46c2-b527-50bbdeeb6b4b 1 2018-10-05 09:56:54.402+08 2018-10-05 09:56:54.402+08 6ac55754-f252-4ba5-ba9c-72a158734b97 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+eac95355-2c8c-43cb-88d7-e5d18905bb5a 1 2018-11-22 15:42:43.423+08 2018-11-22 15:42:43.423+08 c9946e27-bce7-41eb-b341-d6b03a7f115f 8774b4f0-60c1-4c7d-940b-f3a847c2847a
+599630a4-4928-4a64-8f90-159d011fd29a 1 2018-12-06 11:45:58.369+08 2018-12-06 11:45:58.369+08 abaf6bf4-288f-4d21-9fab-515213e6dcac 1aa841f1-d3fb-4523-9b54-e601d350c745
+3c3d09f2-74ae-4f10-89ed-7936e63c1757 1 2018-12-08 17:37:32.88+08 2018-12-08 17:37:32.88+08 a4cf524d-8114-4b70-b13a-a931429c4bbf 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c58f5dc3-27a5-4282-a3f8-94f9b3d16c6e 1 2018-12-18 16:53:40.221+08 2018-12-18 16:53:40.221+08 e5b96801-9448-44f2-a175-40cc7e8466b4 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d3eaab75-aa06-4cab-95ac-328dbab44be9 1 2018-12-21 15:20:51.747+08 2018-12-21 15:20:51.747+08 f09bd97d-d0b3-4fbc-ae36-8de97f4c64e2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+04562f37-0ed2-4adc-bebc-4221b5a5e8a4 1 2018-12-15 16:52:13.975+08 2018-12-21 17:02:53.211+08 11c61b7f-9d36-4273-b679-898a09fe21e9 c00008f7-06d9-4907-b2e7-619374116b36
+e13e14c3-6fe2-4040-b3f8-423eae5a91af 1 2018-12-24 11:53:35.034+08 2018-12-24 11:53:35.034+08 52ae2b25-56b5-4a29-9f0b-33454ac99ff6 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b012ebe8-a730-40aa-87f3-82e77cfb599d 1 2018-12-28 11:10:50.055+08 2018-12-28 11:10:50.055+08 a300435b-3982-4694-aab4-48ba853d838e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6ad120cf-00c3-4c2a-a056-5ea5ab387e2d 1 2019-01-14 15:31:37.062+08 2019-01-14 15:31:37.062+08 a23e3c37-7ab4-4ed4-b73b-a791c96d596c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+04deffaf-f121-45f9-bea1-d4723e651eed 1 2019-01-19 09:53:06.268+08 2019-01-19 09:53:06.268+08 2b4affd1-2151-4632-b11a-e0176fee0a84 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cf726343-afa9-490a-8e8d-3b41dc1b77a6 1 2019-02-25 11:44:07.879+08 2019-02-25 11:44:07.879+08 b8904c0e-1294-49f9-b0e9-dadd79c4efe4 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+48502331-2bba-4d85-a0d1-f876ff61a3b5 1 2019-02-25 11:44:07.883+08 2019-02-25 11:44:07.883+08 b8904c0e-1294-49f9-b0e9-dadd79c4efe4 1aa841f1-d3fb-4523-9b54-e601d350c745
+9d22825d-09ab-4227-869e-7e1ca9427ea1 1 2019-02-25 11:44:07.886+08 2019-02-25 11:44:07.886+08 b8904c0e-1294-49f9-b0e9-dadd79c4efe4 d0e8f529-c1bf-4146-beef-cd3056ea9787
+5b1fc7aa-2569-4fb3-b5bb-87e91878e52a 1 2019-02-25 14:17:43.255+08 2019-02-25 14:17:43.255+08 b345cafa-8d58-454f-a01e-e42859545b18 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4248df69-024d-448e-ad68-9699e2a2f826 1 2019-02-25 14:17:43.259+08 2019-02-25 14:17:43.259+08 b345cafa-8d58-454f-a01e-e42859545b18 d0e8f529-c1bf-4146-beef-cd3056ea9787
+87a08465-e5ea-4be3-a7a3-4d802b029d0f 1 2019-02-25 15:47:53.712+08 2019-02-25 15:47:53.712+08 e7ed3509-511e-4c5d-8aec-3f331ec8defa 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2c650f14-4abe-465c-a46e-a58b61e31607 1 2019-02-25 15:47:53.716+08 2019-02-25 15:47:53.716+08 e7ed3509-511e-4c5d-8aec-3f331ec8defa d0e8f529-c1bf-4146-beef-cd3056ea9787
+7dabf9b4-9806-4020-b95c-8022ed6b57da 2 2019-01-08 10:25:09.201+08 2019-02-27 10:00:17.715+08 5e639171-0ad1-4fcb-aa69-d2f1d4af1f51 15b373b0-30f8-471e-8900-cb62e28d0e50
+16702ac4-e42c-428b-ac0f-2deddffbf2b5 1 2019-03-15 16:43:50.772+08 2019-03-15 16:43:50.772+08 d32eacce-7db0-4c15-b17c-f1d870389c14 66a06e5d-a436-4d37-806b-919d8fd1c564
+ec1af40e-00ed-4917-b74a-8e36bc87adcd 1 2019-03-27 09:42:22.611+08 2019-03-27 09:42:22.611+08 360a9975-3171-4f12-b47a-6f57bdf76dfe 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+499a2ec5-f993-4fdd-b651-0be24400e324 1 2019-03-28 10:30:24.021+08 2019-03-28 10:30:24.021+08 9078888c-628e-4b91-94f8-caaedcc9b640 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ff287390-6653-404a-ae72-c9c39e8ef4bd 1 2019-03-20 21:36:52.937+08 2019-03-28 17:55:09.3+08 fc817231-7e3d-4952-b912-0855d2e90545 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4ab52a1f-1563-45ce-8b15-583cd47faaa5 2 2019-03-28 10:30:24.024+08 2019-03-28 17:55:21.058+08 9078888c-628e-4b91-94f8-caaedcc9b640 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+919a897f-db8b-44da-b80a-4a74d14f6bbb 1 2019-03-29 16:40:02.733+08 2019-03-29 16:40:02.733+08 044ef7b0-afed-464c-b3fb-8bbf7fa42023 66537b16-1e7d-4823-b03e-676459f5891d
+7c90e6f3-06b9-4f03-b54e-bd1fa5f4f85f 1 2019-03-31 14:16:47.792+08 2019-03-31 14:16:47.792+08 bb3ec092-4644-42eb-93ba-f9ae9b4b6601 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a1670826-5255-49b6-b248-67de89c66086 1 2019-04-01 14:38:39.918+08 2019-04-01 14:38:39.918+08 3aef6480-e9f6-4b07-8ee4-dc0516520d72 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6b91b9ed-0c0e-4566-95ff-1203866a2c57 1 2019-04-03 14:48:59.283+08 2019-04-03 14:48:59.283+08 53efa30f-f738-43ef-9600-0963b6b108fd 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+936feab3-0e16-4bf8-8f9e-6c52df7a75af 1 2019-04-08 10:06:51.204+08 2019-04-08 10:54:28.015+08 7f81d1d0-150c-49d4-9b52-4eda0387c996 3dfadb0e-7608-49e1-aa43-24f7442b424a
+4065ce5a-e702-4f13-83aa-02243875fa79 1 2019-04-10 15:48:52.497+08 2019-04-10 15:48:52.497+08 420a7807-dc95-4fe3-bfff-fd1db144ed8e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+50cf0eba-6f77-456b-b29c-50f90e252f71 1 2019-04-10 18:28:39.212+08 2019-04-10 18:28:39.212+08 74d6fefc-59a0-42a8-bd3e-aff394533e06 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+005dea14-47b9-4c44-9e04-4ea66c336968 2 2019-04-10 18:28:39.215+08 2019-04-10 18:28:39.215+08 74d6fefc-59a0-42a8-bd3e-aff394533e06 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1cd100fe-470d-4bbc-a445-ec257fdaedb5 1 2019-04-16 09:09:09.721+08 2019-04-16 09:09:09.721+08 3027f2cf-70b8-4ff6-92ee-7432a8b26887 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2a35435c-8310-4106-8f81-62cd9e5ff419 1 2019-04-16 16:01:34.214+08 2019-04-16 16:01:34.214+08 cbdb48d6-afd7-4322-884a-d37d56f96176 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f1e557ba-74ac-46bc-b1b2-5f117af385d3 1 2019-04-17 15:07:58.429+08 2019-04-17 15:07:58.429+08 1649a4a7-d092-40c1-8217-dc2b8e2ecea0 3dfadb0e-7608-49e1-aa43-24f7442b424a
+230c804f-e9ba-4305-b311-d60be21cb495 2 2019-04-17 15:07:58.433+08 2019-04-17 15:16:17.272+08 1649a4a7-d092-40c1-8217-dc2b8e2ecea0 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+1c2ce94f-c296-45d7-90e9-4ae2cfad5aee 1 2019-04-18 11:02:51.788+08 2019-04-18 11:02:51.788+08 89fb363a-19d1-4e23-a9af-b2a2c310eb4f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4467d9de-7f7e-4ba0-85e1-9f1e821fad35 1 2019-04-18 13:53:56.789+08 2019-04-18 13:53:56.789+08 76288807-186e-4444-a1ce-6be599aacfd2 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a952ffd5-c302-4fa3-a7b5-475be69c08ed 2 2019-04-18 15:29:50.008+08 2019-04-18 15:35:06.995+08 efdfb5bf-1488-40b5-825f-629d60ebe7f7 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+782ef934-e5fc-4964-a768-d435efa11399 1 2019-04-18 15:29:50.005+08 2019-04-18 15:47:15.802+08 efdfb5bf-1488-40b5-825f-629d60ebe7f7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c63367b4-3f00-479d-acb9-63374d61e0ef 1 2019-04-18 17:58:14.556+08 2019-04-18 17:58:14.556+08 6bc95aa6-88cd-4473-98fc-7f4a1d76fc4a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+734c9298-f1e1-491d-a8b6-8642e1a0a0dc 1 2019-04-19 10:43:41.443+08 2019-04-19 10:43:41.443+08 85e05ea0-94ca-4806-9393-78780b771a4b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f1484a98-4d8f-486e-836a-8dd14ccd1823 1 2019-04-19 16:42:52.611+08 2019-04-19 16:42:52.611+08 43bea8b9-c871-432f-90d5-414d9d907254 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+11985a9b-36a7-47e7-9f3e-188816953f32 1 2019-04-22 13:13:08.897+08 2019-04-22 13:13:08.897+08 5d98962d-dbd8-4688-ae48-dbebdce861f6 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8aa49ad7-2fe1-41c5-a102-a3c6784019f9 1 2019-04-22 14:08:53.03+08 2019-04-22 14:08:53.03+08 9b0e1890-c539-43be-8907-1f2eeaa3e309 66537b16-1e7d-4823-b03e-676459f5891d
+f229b1fc-3f30-4e7a-8909-9d75182c5b3d 1 2018-03-28 14:52:06.912+08 2018-09-10 16:33:50.223+08 bbf47be7-1d85-4e1b-b356-70be269a0d32 3dfadb0e-7608-49e1-aa43-24f7442b424a
+1bb48193-4a33-48f8-a4e2-b3b7555ff324 1 2018-10-08 14:13:14.278+08 2018-10-08 14:13:14.278+08 ae5aa015-b2d1-41a8-8b49-9a3d28565e8d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+bd67bdfa-24f2-4384-82a7-00d8ac84a0e3 1 2018-10-29 16:18:27.052+08 2018-10-29 16:18:27.052+08 2fb5ab76-2e1f-4791-a38a-edcad8b3ab4e 66537b16-1e7d-4823-b03e-676459f5891d
+d0b18a52-b09f-43e4-aec6-b55f6e4b5ef3 2 2018-03-28 14:52:06.909+08 2018-03-28 14:52:06.909+08 bbf47be7-1d85-4e1b-b356-70be269a0d32 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e
+4535e17c-bdc5-46c2-81e7-b8a7aa506e89 1 2018-03-28 14:54:49.038+08 2018-03-28 14:54:49.038+08 09252236-560b-47e1-bf81-f774d303ba26 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e
+c3d7c202-6499-4b43-85bf-d79e51629771 1 2018-03-28 15:40:02.861+08 2018-03-28 15:40:02.861+08 7faf119d-7804-470c-a448-516d681cce6b f5115163-46ca-4e11-ac6e-d1be363871d1
+5b88117b-02ea-488f-98d0-0a3a9bbccaa7 1 2018-03-29 13:37:27.977+08 2018-03-29 13:37:27.977+08 f4976287-96c1-42a2-aedf-0d8e8ab739c5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c7932a1f-6a4b-4511-81fd-6285af951b9c 1 2018-04-02 10:37:43.655+08 2018-04-02 10:37:43.655+08 56c84083-d705-4aa0-94d2-34b731f75f97 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e
+ff37fdc7-53f6-481d-84ce-1e6e6676701d 1 2018-04-02 15:54:14.317+08 2018-04-02 15:54:14.317+08 1489127c-8f48-448b-a86e-1604f08894ce ad4f23f8-9213-4194-97ce-209a34596649
+1c3775ff-0ed7-4741-a82d-5551cc860061 1 2018-04-02 16:51:42.727+08 2018-04-02 16:51:42.727+08 1e7003bf-2cd1-4dcb-9ad9-116151f49ae6 ad4f23f8-9213-4194-97ce-209a34596649
+cbc1dbb0-6dc8-4cc4-9d0f-162bd1e5cbe6 1 2018-04-02 17:17:24.082+08 2018-04-02 17:18:01.988+08 c15c6be6-83b0-47ea-ac05-38d625eb8ac8 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+dcb774f0-6fc6-430d-9486-48e03b653032 1 2018-04-02 17:21:29.446+08 2018-04-02 17:21:29.446+08 8b83567e-d874-40f2-a7e4-f78d6cb5415c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+32652678-cd83-4791-a2af-b6915fcf96e1 2 2018-04-02 17:21:29.449+08 2018-04-02 17:21:29.449+08 8b83567e-d874-40f2-a7e4-f78d6cb5415c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d37be38e-381a-472d-88e9-29be91869584 1 2018-04-03 11:39:47.185+08 2018-04-03 11:39:47.185+08 cda0b115-60d6-4169-8f45-4a92d6801fb3 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4443e795-6d04-4648-9997-a93862565b3e 1 2018-04-03 11:52:10.939+08 2018-04-03 11:52:10.939+08 8fb33fdb-3378-44a4-8e48-ec79ff29a37e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+99244d8c-d0ce-4963-b0ba-efbaaef5f50a 1 2018-04-03 11:53:08.69+08 2018-04-03 11:53:08.69+08 00b58795-1a49-4171-b60f-a0e32a25f6f6 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8fbaa90c-9998-424e-82fe-948c7a948332 1 2018-04-03 12:41:11.891+08 2018-04-03 12:41:11.891+08 1e20c41f-4f52-4d61-94e4-ae8496163aed 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+553d0d89-b8b2-4900-a17c-19fc50269001 1 2018-04-04 16:47:18.033+08 2018-04-04 16:53:12.631+08 8185c197-338c-42e3-acfc-acba2bb1b180 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+37a47128-0a76-4bbb-89ef-26b27932254b 1 2018-04-08 14:00:40.993+08 2018-04-08 14:00:40.993+08 f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d d5f2066b-b4d8-4e26-8991-0c068495e2c9
+88f66ce8-8107-4f37-bc64-152ecee7006f 1 2018-04-08 14:06:24.498+08 2018-04-08 14:06:24.498+08 cf54dd7a-2c8a-4f16-9f92-7484af585f13 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+ecad271e-3edb-482a-bd07-10d2ea8a07be 1 2018-04-08 14:06:25.439+08 2018-04-08 14:06:25.439+08 624610fd-38ca-4e72-92c8-0492eb66412a d5f2066b-b4d8-4e26-8991-0c068495e2c9
+a471484c-32ed-4224-9451-8506afa95ee8 1 2018-04-08 14:06:26.074+08 2018-04-08 14:06:26.074+08 ea2cc9e5-072a-4994-a232-f79655536c64 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+3b86da52-5af8-4866-8b37-daf269b580c9 1 2018-04-08 14:06:27.118+08 2018-04-08 14:06:27.118+08 7f76a800-a32e-483a-a948-919fc9e7d075 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+fae9d93e-eb25-4486-bf75-43b5d9093060 1 2018-04-08 14:06:27.657+08 2018-04-08 14:06:27.657+08 3f493145-8216-487c-b145-d58dacf9c570 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+e780352b-7e88-436a-a05c-6cc0b2ad1d51 1 2018-04-08 14:40:13.993+08 2018-04-08 14:40:13.993+08 4142b1cc-3576-456b-b0e4-31e68cc16b32 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+74e3ee05-6f81-434d-89d5-409b3c3c3028 1 2018-04-08 14:40:13.996+08 2018-04-08 14:40:13.996+08 4142b1cc-3576-456b-b0e4-31e68cc16b32 d4f271b6-567a-4880-beb0-161b33ac2094
+57f5d115-e89e-430c-a5a9-541aacafb488 1 2018-04-09 08:03:04.738+08 2018-04-09 08:03:04.738+08 b9829d8a-9088-455a-ad16-9a814303b909 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+97988fe8-fafd-4a27-986a-2d936fe46274 2 2018-04-09 08:03:04.742+08 2018-04-09 08:03:04.742+08 b9829d8a-9088-455a-ad16-9a814303b909 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+dc05a0f7-5d8f-4d5e-80f9-a68d6601c488 1 2018-04-09 08:05:14.712+08 2018-04-09 08:05:14.712+08 fbc0de18-03f7-421b-b7d4-4440a7c96791 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2237acf6-6dd9-4bb2-9dc4-72457562917d 1 2018-04-09 16:11:41.546+08 2018-04-09 16:11:41.546+08 0bf78d42-85ee-486c-bf43-c62c3168ee33 7667c2d9-3c04-4818-bfeb-42f43b60af77
+33a6e9a2-e5b2-4b6f-814e-fc678e4bfc52 1 2018-04-09 16:11:41.55+08 2018-04-09 16:11:41.55+08 0bf78d42-85ee-486c-bf43-c62c3168ee33 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+bf00840f-93e5-4f6d-be3e-b449e2d92051 1 2018-04-10 09:58:21.453+08 2018-04-10 09:58:21.453+08 727fa9b6-b621-41cb-b084-ef3f74f7c496 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+307ae878-46e3-44a7-8603-67b38cfdf570 1 2018-04-11 09:27:08.919+08 2018-04-11 09:27:08.919+08 d75d2473-6ed4-437c-8509-682f55d0d407 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+acb64f0a-30d4-4146-a608-43cd4f2a20cd 1 2018-04-11 16:24:01.252+08 2018-04-11 16:24:01.252+08 6e1d3878-3ea2-4c73-9137-0ef98781be0c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+923da6c2-8d1a-41fb-8a9a-a9f15c21fbf6 2 2018-04-12 09:54:19.723+08 2018-04-12 09:54:19.723+08 3f7793d6-8f50-4dc7-b5e5-5e6cf74f77a6 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+27472fa9-3075-47d0-9c88-7accc4386103 1 2018-04-12 09:54:19.727+08 2018-04-12 09:54:19.727+08 3f7793d6-8f50-4dc7-b5e5-5e6cf74f77a6 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1a7d98ac-27fa-49bb-bd82-df050812f8e6 1 2018-04-12 11:22:01.414+08 2018-04-12 11:22:01.414+08 a8e0db23-0d35-4eb1-a5b8-deadd9c3d80d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+cedcda73-60da-4a75-a229-bec319bd9757 1 2018-04-16 11:54:59.724+08 2018-04-16 13:55:29.851+08 84deac79-cd1d-4320-bcc6-3a0cdd4451da d5f2066b-b4d8-4e26-8991-0c068495e2c9
+e34d9d96-f878-4896-ae3e-55d492c4ba33 1 2018-04-16 14:07:58.009+08 2018-04-16 14:07:58.009+08 6c650368-cf3e-4a75-a30d-01b2a37356fb d5f2066b-b4d8-4e26-8991-0c068495e2c9
+bbe094dd-4c59-4a44-9a56-cd5676418107 1 2018-04-16 14:07:58.012+08 2018-04-16 14:07:58.012+08 6c650368-cf3e-4a75-a30d-01b2a37356fb 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c57824af-5b3c-4c9b-b719-2fcdf41e5c93 1 2018-04-08 14:06:27.655+08 2018-06-25 10:39:58.615+08 3f493145-8216-487c-b145-d58dacf9c570 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e1fd616b-edce-488d-8065-8cd901709aca 1 2018-04-08 14:06:27.116+08 2018-06-25 10:40:54.975+08 7f76a800-a32e-483a-a948-919fc9e7d075 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+82731511-63b1-4afd-9fc4-5eed20a7e13f 1 2018-04-08 14:06:26.071+08 2018-06-25 10:44:43.193+08 ea2cc9e5-072a-4994-a232-f79655536c64 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+28cfe943-004f-4549-aba4-26bfbbf65e97 1 2018-04-08 14:06:25.437+08 2018-06-25 10:45:02.407+08 624610fd-38ca-4e72-92c8-0492eb66412a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+506a40fe-aa97-4845-b2e7-0986aeab2b76 1 2018-04-08 14:06:24.496+08 2018-06-25 10:45:20.268+08 cf54dd7a-2c8a-4f16-9f92-7484af585f13 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a6450058-743b-460a-829c-c7a9442535a6 1 2018-04-08 14:00:40.99+08 2018-06-25 10:45:39.893+08 f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+83e3df67-8f00-466e-acdf-d7441b033a73 1 2018-04-16 11:54:59.729+08 2018-04-16 14:08:08.531+08 84deac79-cd1d-4320-bcc6-3a0cdd4451da 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9e709c26-1099-40b7-88b3-482e26e9df23 1 2018-04-16 15:46:07.72+08 2018-04-16 15:46:07.72+08 df68d6a9-c963-4bc4-a122-332e3d1435ac d5f2066b-b4d8-4e26-8991-0c068495e2c9
+5ebfd140-8067-4b51-b1da-bb357c7c8e4d 1 2018-04-16 15:46:07.723+08 2018-04-16 15:46:07.723+08 df68d6a9-c963-4bc4-a122-332e3d1435ac 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0af9f7d2-c08a-4441-93d7-2eb703f0e941 1 2018-04-16 15:46:07.877+08 2018-04-16 15:46:07.877+08 c60cc02d-8c37-447a-9f9d-947aa66b7f39 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+b80de95b-ab1a-4b9b-b64a-61eb47118f77 1 2018-04-16 15:46:07.88+08 2018-04-16 15:46:07.88+08 c60cc02d-8c37-447a-9f9d-947aa66b7f39 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0261a452-9e7a-4fad-b07c-2d6fce0561bd 1 2018-04-16 15:46:12.365+08 2018-04-16 15:46:12.365+08 20ff998d-3014-4f62-ad12-37b56883c435 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+fc8399b0-54ca-4ea8-8615-d61da7fdb2e4 1 2018-04-16 15:46:12.368+08 2018-04-16 15:46:12.368+08 20ff998d-3014-4f62-ad12-37b56883c435 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9273a392-a552-4099-ada8-143bd6e3e6bb 1 2018-04-16 16:00:53.266+08 2018-04-16 16:00:53.266+08 7674c64d-e09e-4257-8726-c64a26ed309a d5f2066b-b4d8-4e26-8991-0c068495e2c9
+7541951a-fc00-49e0-953a-ac2547dd63b9 1 2018-04-16 16:00:53.27+08 2018-04-16 16:00:53.27+08 7674c64d-e09e-4257-8726-c64a26ed309a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9c326fdb-af9f-4b0c-aa19-41010e7f0915 1 2018-04-16 16:00:54.775+08 2018-04-16 16:00:54.775+08 4a7b8b8f-6ba0-4731-af44-8f3f6d30a928 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+c8861318-798d-40fc-b51c-c9ce2a59bcd9 1 2018-04-16 16:00:54.778+08 2018-04-16 16:00:54.778+08 4a7b8b8f-6ba0-4731-af44-8f3f6d30a928 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3aff7db1-0f77-40b3-9228-13d6519ef209 1 2018-04-16 16:01:22.133+08 2018-04-16 16:01:22.133+08 4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+f3f91a46-2eb7-4c1c-a364-2af8856c8e67 1 2018-04-16 16:01:22.136+08 2018-04-16 16:01:22.136+08 4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6472b729-0e05-4a8e-846a-d74b97e3c4ee 1 2018-04-16 16:14:50.361+08 2018-04-16 16:14:50.361+08 110a38a6-8cb9-43c5-9682-4b1ba0e9d01f d5f2066b-b4d8-4e26-8991-0c068495e2c9
+9c2fb1e3-599f-48e6-9e9b-6c3613275199 1 2018-04-16 16:14:50.365+08 2018-04-16 16:14:50.365+08 110a38a6-8cb9-43c5-9682-4b1ba0e9d01f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+66731701-c15e-49a4-9eb9-4e13de5dc80d 1 2018-04-24 09:41:18.026+08 2018-04-24 09:41:18.026+08 4a84b11e-7f79-47ff-b530-6cbc5615b491 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+70bfe3ff-fb57-474c-80c3-d9fd580896f2 1 2018-04-24 15:29:24.94+08 2018-04-24 15:29:24.94+08 324eb312-14cd-4931-a6e0-f84880fb8ac5 d357249e-6ccf-4d1b-8546-c57c18fa121c
+87cb6711-77cc-4dea-bc25-589956a2335c 1 2018-04-27 16:05:28.272+08 2018-04-27 16:05:28.272+08 699b9288-1402-48ab-ae80-31eacc42652e 0e98e5cb-6e50-4d85-940b-b538ce71dc14
+a8cf3a82-d9cf-49ef-b2a8-36689b772016 1 2018-05-03 08:54:32.778+08 2018-05-03 08:54:32.778+08 0363c038-6fa5-4290-adaf-c9afa18f1171 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8c4473e8-69dd-411c-828e-ca663d9ae8e1 2 2018-05-17 14:43:40.139+08 2018-05-17 15:08:16.117+08 82db02f1-7f86-44cf-b9a4-d32e28672a84 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ba38e139-3c67-4179-975d-6a1b29c08aa6 1 2018-05-28 14:03:33.957+08 2018-05-28 14:03:33.957+08 7c2ff6f1-5bb6-4736-91cd-1bd068e760aa 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d6bcc8eb-4906-4bd5-b207-3e62af569320 1 2018-05-17 14:43:40.144+08 2018-05-17 15:12:15.267+08 82db02f1-7f86-44cf-b9a4-d32e28672a84 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cf7bba70-efc0-4741-93bc-828ede8e47e9 2 2018-05-03 08:54:32.782+08 2018-05-03 10:28:09.48+08 0363c038-6fa5-4290-adaf-c9afa18f1171 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+34e0cc1a-2e8b-40d3-a85c-4762ac05a1e9 1 2018-05-03 10:34:23.748+08 2018-05-03 10:34:23.748+08 fbe11da9-a717-4a5e-bd90-93f394b46ccc 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+1da75911-667d-4484-8cc8-3d05eb06e404 1 2018-05-03 10:35:59.175+08 2018-05-03 10:35:59.175+08 5efb0ea9-ca31-4a41-9389-be6c24b3ad2c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+64036170-2629-430f-9f56-56f2f645bfd0 1 2018-05-03 10:37:15.477+08 2018-05-03 10:37:15.477+08 ae8d62c1-09f0-4fcd-bc62-add087919ff0 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a9612792-cc30-4b80-bfbb-97c0fdeecf45 1 2018-05-09 10:42:20.037+08 2018-05-09 10:42:20.037+08 ed5ede03-616b-4df7-b741-eea396939ecf 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+67f02e4a-e979-44d2-b17d-849ba3ba1eb6 2 2018-05-09 11:11:01.652+08 2018-05-09 11:11:01.652+08 3b03e747-cc81-4f6e-9ccf-f828a5534096 3dfadb0e-7608-49e1-aa43-24f7442b424a
+e6adceba-3e63-4d8c-81f9-0733ce80b9e9 1 2018-05-09 13:55:22.685+08 2018-05-09 13:55:22.685+08 1cfa35c8-129a-45eb-9304-2b105bc22380 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+238b18df-6349-4e01-bea7-c785f5754543 1 2018-05-10 09:13:20.645+08 2018-05-10 09:13:20.645+08 901073b9-b411-427c-9eb6-43a935ec8c27 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4c99b328-de6c-4929-a512-82cf921fc74d 1 2018-05-10 17:53:00.78+08 2018-05-10 17:53:00.78+08 fdef19ae-68f1-4ad5-937b-3cb60e20d8ce 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b53ef639-7171-4c8a-88ee-fff2e88a2a20 1 2018-05-10 17:55:50.403+08 2018-05-10 17:55:50.403+08 67b821eb-caf8-4352-a59b-360e7c9a3ad9 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f437f173-ee82-423a-b2cd-6e1672f6887e 1 2018-05-11 10:41:15.495+08 2018-05-11 10:41:15.495+08 077f4241-fe27-4cbc-9918-cf5b8d1c8283 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+fbb1bac9-c0b4-4340-bea2-035eef7cc9ca 1 2018-05-11 15:45:31.127+08 2018-05-11 15:45:31.127+08 efdb6604-3283-41b2-9a30-aa532a49d897 ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
+9c330608-e096-4bc0-9c59-0036a16a2296 1 2018-05-16 17:44:54.885+08 2018-05-16 17:44:54.885+08 bff19d80-ce20-4c3d-b158-df091a1fb5ac 7667c2d9-3c04-4818-bfeb-42f43b60af77
+358a0539-4815-456c-90f6-2f5313b54f0a 1 2018-05-16 17:44:54.889+08 2018-05-16 17:44:54.889+08 bff19d80-ce20-4c3d-b158-df091a1fb5ac 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6dfea180-3bab-434b-b4d9-01f484b55b2c 1 2018-05-17 10:26:47.534+08 2018-05-17 10:26:47.534+08 e5c11c48-0e03-4229-b879-a487b7cda972 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3634cea3-6aed-48c2-8d2e-90ddacf28317 1 2018-05-17 13:55:17.791+08 2018-05-17 13:55:17.791+08 83881bee-4e8c-4ad6-a11f-45810d035b3d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5fa9177f-e430-46e8-b0fa-a824b5c39c36 1 2018-05-28 10:45:28.324+08 2018-05-28 10:45:28.324+08 78540227-fdf9-47ed-841e-7b76fed0f788 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6eb5ae32-1f75-44e5-9436-c7f6f0af18b6 1 2018-05-28 10:50:00.163+08 2018-05-28 10:50:00.163+08 40a69ace-03f8-4acf-8cf7-6acf43ac2de8 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d2d06ac7-74e5-445e-a927-dd699b74e323 1 2018-05-28 11:45:20.153+08 2018-05-28 15:52:42.914+08 200655be-879b-4a82-8a17-1ff1ccb9f961 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c1633898-dfbd-45a4-a28a-1cfaabcf74e5 1 2018-05-28 17:34:00.448+08 2018-05-28 17:34:00.448+08 899dde06-bd1d-4215-963e-23596c3fda7f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e6366125-1358-42e4-926f-0d6344002fb8 2 2018-05-28 17:34:23.439+08 2018-05-28 17:34:23.439+08 899dde06-bd1d-4215-963e-23596c3fda7f c8eeed37-ec79-49a9-b3d8-68b7343e0334
+65b9c79b-8e8a-4dc5-897f-bd7bf3960cfc 1 2018-05-29 11:41:59.94+08 2018-05-29 11:41:59.94+08 5ac91988-c93a-4176-9f33-7c6ba110590f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+51ea2c79-c5a6-42b8-a2ce-e50601d22364 1 2018-05-29 14:51:48.725+08 2018-05-29 14:51:48.725+08 9d6f5e3b-2821-48f0-b5c5-997baf346f39 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ee9ea11b-cc74-4556-97a2-6092409e08ae 1 2018-05-30 20:45:30.281+08 2018-05-30 20:45:30.281+08 35046949-3e59-43c1-8898-bfc7995c3da9 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+09dd6500-ec1e-4917-9481-2a0ab7fcd30c 1 2018-05-31 07:52:27.75+08 2018-05-31 07:52:27.75+08 da7a3b52-f9fb-4e4c-bf41-dda355ec5585 31f274cf-4345-4b4e-adbc-e7b05abf7453
+cc115119-d1b9-48e4-af00-1f2408d73eb0 1 2018-10-08 16:48:22.303+08 2018-10-08 16:48:22.303+08 357c45b8-b190-4369-862c-e28530e13aa2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+fa05e5c1-ce60-4618-8a06-493a8a6a3c86 1 2018-05-31 14:37:08.559+08 2018-05-31 14:37:08.559+08 563221c8-bdb4-4511-b781-25cab72585a7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+81dc439b-c906-46bf-83db-a7fa8b7e3aa6 1 2018-06-01 16:02:25.96+08 2018-06-01 16:02:25.96+08 4c79d9ed-386d-4540-bff3-82caf4d9d329 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+829f092c-d925-4c5e-acba-61eab7f587cb 2 2018-06-01 16:02:25.967+08 2018-06-01 16:02:25.967+08 4c79d9ed-386d-4540-bff3-82caf4d9d329 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e2016e01-e19d-4477-8714-4fa61c267d4e 1 2018-06-01 16:26:56.735+08 2018-06-01 16:26:56.735+08 0d00f0b6-190e-430c-a626-c3e5efd2828c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6dcdb2e5-0e72-493d-9280-9cf6973b94f6 1 2018-06-01 16:29:14.99+08 2018-06-01 16:29:14.99+08 c7cd0af4-425e-42e5-a5ad-cc2b9369c84b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+10f11161-b15f-4c43-ac76-c4e7f3409ecf 1 2018-06-04 18:00:22.399+08 2018-06-04 18:00:22.399+08 51654fb3-cd61-405e-890f-ade3931c8b7e ad4f23f8-9213-4194-97ce-209a34596649
+22ff2aa0-57f7-4213-8174-bae34ce95af4 1 2018-06-05 14:51:24.813+08 2018-06-05 14:51:24.813+08 34e0efb7-3081-4432-acb3-1f21d62ace7a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+99e90ef8-1994-4a72-986c-411f2e18324c 2 2018-06-05 14:51:24.821+08 2018-06-05 14:51:24.821+08 34e0efb7-3081-4432-acb3-1f21d62ace7a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e350552a-0a4f-42f5-846a-57031931982b 1 2018-06-05 14:52:38.976+08 2018-06-05 14:52:38.976+08 22d007b2-5200-4bf6-85dc-c755a7a75bcf 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b5d5d84f-ee8b-4fb6-bf89-cae02af804b8 1 2018-10-29 18:06:17.124+08 2018-10-29 18:06:17.124+08 57e52f6f-9cfd-4060-bbf4-506058f6206d 66537b16-1e7d-4823-b03e-676459f5891d
+3cc3b230-37eb-4ac1-83aa-c5b7427a1d28 1 2018-06-06 18:05:16.199+08 2018-06-06 18:05:16.199+08 6a257a93-25ef-48f8-bdd7-0a4674c83a7c ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
+38dea75a-8548-4b80-94a9-90496afdfe57 1 2018-06-07 14:25:03.222+08 2018-06-07 14:25:03.222+08 e458516d-60cf-4395-8ec5-df491ae97d3e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0fa018d2-0369-40aa-8c3e-932340593506 1 2018-06-07 15:37:44.39+08 2018-06-07 15:37:44.39+08 fb7bb438-ec7d-41fa-b7f5-737c395901bc 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6e54ae36-3233-48fa-bcd3-c9253cdb0966 1 2018-06-07 15:54:22.267+08 2018-06-07 15:54:22.267+08 66717a8f-3c59-41e0-ab21-bf6bcdde55ea 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+fafd2a42-8f24-4ce7-9b46-c5942b2540b2 1 2018-06-07 15:54:34.224+08 2018-06-07 15:54:34.224+08 260e307b-9a7c-4f75-90cd-79710a7d0221 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+55442875-ceff-489d-9392-180aaa5afbb4 1 2018-06-11 14:59:44.586+08 2018-06-11 14:59:44.586+08 c9a11ba9-fb0d-4a82-b480-7539948c9b56 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+eb54bfe2-32cb-4251-a44d-6c5d6b2aefdf 1 2018-06-13 16:57:27.857+08 2018-06-13 16:57:27.857+08 2d547109-73ea-48f5-99b8-48dd9236e19b 5ef40d3b-0094-45fb-9663-892c5c4e270d
+f0f3dc05-2c35-4dcc-ac95-d6a86829e70f 2 2018-06-14 10:34:18.654+08 2018-06-14 10:34:18.654+08 4efc7878-409b-4195-b3e6-ed93b829fed9 ad4f23f8-9213-4194-97ce-209a34596649
+6c6a8485-fbd1-4808-b826-93f84b441e66 1 2018-06-14 10:34:18.651+08 2018-06-14 14:01:32.208+08 4efc7878-409b-4195-b3e6-ed93b829fed9 3dfadb0e-7608-49e1-aa43-24f7442b424a
+39209c52-b9af-409d-b34d-a1fe088243e9 2 2018-06-15 09:39:55.598+08 2018-06-15 09:39:55.598+08 88155a32-3321-4f89-86ba-c204d101cce7 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+129a1f20-b51f-4419-9084-917b09d4d3c6 1 2018-06-15 09:39:55.602+08 2018-06-15 09:39:55.602+08 88155a32-3321-4f89-86ba-c204d101cce7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2c66b5f5-27ea-4406-85c1-b5772e200df5 1 2018-06-15 17:08:39.594+08 2018-06-15 17:08:39.594+08 3f564278-8edf-4fe7-a35e-21b91e6d4129 452e3349-a87b-4b5b-97f9-7dc730f910fa
+5809d1c2-97e1-4f57-917f-479a0d09aa3e 1 2018-06-15 17:09:27.7+08 2018-06-15 17:09:27.7+08 279c47e7-04c2-4841-8fdd-263a5f4af93a 6619c155-5a30-4c92-b738-816302f0c4ed
+da3d498e-2955-4d5a-a208-c3d2d91cff67 1 2018-06-19 09:46:45.595+08 2018-06-19 09:46:45.595+08 9aff4ead-342b-40e8-b365-6a53212df7dd ca45c7c2-42df-48cc-849c-c4cd01067e5d
+3346a8ca-c42b-4006-9931-1800ab324724 2 2018-06-19 09:47:08.323+08 2018-06-19 09:47:08.323+08 9aff4ead-342b-40e8-b365-6a53212df7dd 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4d2419e0-8da8-4f11-b5f0-90ea093a9c81 1 2018-06-19 09:48:17.015+08 2018-06-19 09:48:17.015+08 b15a4ae0-8100-4809-978d-50914fdc2f32 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+83e19aff-382e-4792-8cb0-acdb2a3a817a 1 2018-06-19 09:50:26.17+08 2018-06-19 09:50:26.17+08 1991c0ef-7dd2-4290-ad34-c8bc82161d2f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+78e404b9-c5d6-4030-b6b9-487b8bfb35e8 1 2018-06-20 10:32:24.751+08 2018-06-20 10:32:24.751+08 cf379e04-548b-4a35-bafd-4ce52ae84b07 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+95efa533-8d6d-45c4-92fb-695d5cc9861f 1 2018-06-20 10:35:52.502+08 2018-06-20 10:35:52.502+08 e4192bd0-7b4b-48fd-8274-4f4ed24a1cd2 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9811d477-4cca-4ecd-842a-cb4836b135b9 1 2018-06-20 10:35:53.277+08 2018-06-20 10:35:53.277+08 e2b308df-8629-49a6-ab1d-397df5ab4e45 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+5c8492ac-2d38-4c54-9d6e-b48b46542248 1 2018-06-20 10:35:54.634+08 2018-06-20 10:35:54.634+08 d116c1db-0a8e-4cd7-a021-6dedf5987ec4 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0e09f170-aae1-4349-9595-f658c99bb411 1 2018-06-20 11:04:00.667+08 2018-06-20 11:04:00.667+08 bfa4cd6a-f4fc-4087-8322-c0dd793cfd39 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+989a0f1b-313b-4e5d-955f-27aac6f36e8f 1 2018-06-20 11:04:01.393+08 2018-06-20 11:04:01.393+08 f88c2cc7-2f89-40e1-ab48-28a17b001737 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3552b9bd-63d3-4a74-bea0-aadf816dc48f 1 2018-06-20 11:04:02.542+08 2018-06-20 11:04:02.542+08 4c874d9f-456e-420e-9057-3a8c7de8368c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d124430c-8240-44e0-8828-7d67755c691e 1 2018-06-20 11:13:47.048+08 2018-06-20 11:13:47.048+08 b58bb3be-9cea-460b-b91b-0281432cc158 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+054ceec6-745d-4f31-844f-eb436787b2b8 1 2018-06-21 11:10:55.925+08 2018-06-21 11:10:55.925+08 9fbee940-6591-45b4-a3a9-83abc9c76e85 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6c2951ba-8402-475a-a4cb-6180a8cd0b29 1 2018-06-21 13:39:44.918+08 2018-06-21 13:39:44.918+08 b2d406aa-3d16-4f6a-a0cf-201673678a8f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d0f0f4de-46ac-4e07-8456-f468a54c9924 1 2018-06-21 13:53:07.641+08 2018-06-21 13:53:07.641+08 aa4c3887-4040-4ac1-a908-4ae45f754c3b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8c16c60d-36f2-4f22-bb99-f9403f0e5f71 1 2018-06-22 17:30:28.393+08 2018-06-22 17:30:28.393+08 9c410206-a22f-4b1c-b86f-32fda9f61ca2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+96971fcc-6fde-4343-a988-0fac51fe396f 2 2018-06-22 17:30:28.398+08 2018-06-22 17:30:28.398+08 9c410206-a22f-4b1c-b86f-32fda9f61ca2 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8efcbe1c-3797-4980-b49a-9285bfbfecc7 1 2018-06-25 09:05:33.106+08 2018-06-25 09:05:33.106+08 a045d540-6405-495e-af5f-ea705c094472 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b2c5c319-5966-4d2d-a607-a73e9fa97317 1 2018-03-26 11:16:11.487+08 2018-06-25 10:41:25.827+08 02513eed-ba94-456b-86e0-89ea996b879d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7d240885-b6aa-4476-8a55-30746fc1b69c 1 2018-03-26 11:24:13.125+08 2018-06-25 10:42:06.926+08 1bda935e-56de-4365-b60e-f02d19299795 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6f37f0c9-1488-4c4f-a340-c1b9b060f47f 1 2018-03-26 11:43:24.195+08 2018-06-25 10:45:57.519+08 f30482b9-b518-4048-8217-bd64158911e6 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+995b760a-4d99-4884-8690-2857fea3bc13 1 2018-06-25 11:28:08.6+08 2018-06-25 11:28:08.6+08 d32eacce-7db0-4c15-b17c-f1d870389c14 d4f271b6-567a-4880-beb0-161b33ac2094
+3f0c11f0-a928-4f1d-b9d6-cdfc9ecad7b6 1 2018-06-25 15:29:28.075+08 2018-06-25 15:29:28.075+08 d56a9be3-7a4a-4c75-91ec-f524bb273574 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ff18de5c-e5f4-4c95-9419-60e369173067 1 2018-06-26 10:53:23.583+08 2018-06-26 10:53:23.583+08 a42dc0a2-1190-4f91-bf27-a5db9a2ed7ca 639a37c9-637b-46e7-97ac-7b5991155e02
+cfba0786-e932-437a-8f2a-c15bde9b3e1d 1 2018-06-27 13:45:01.576+08 2018-06-27 13:45:01.576+08 0f6fd3af-59cc-4fa8-8ff5-f42f173ac9fa 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b16adb70-fe65-4609-a7fd-923e42da0e38 1 2018-06-27 14:02:16.355+08 2018-06-27 14:02:16.355+08 847fb856-ef0a-493b-9a30-d2876243481a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+535a7032-01f6-42e2-ad88-6f1c9aa12900 2 2018-06-27 14:02:16.361+08 2018-06-27 14:02:16.361+08 847fb856-ef0a-493b-9a30-d2876243481a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f2308778-87af-4b2b-8892-031d77a4fdb2 1 2018-06-27 14:04:58.284+08 2018-06-27 14:04:58.284+08 948c741a-f999-4abe-ae1f-64c23e27462c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7cd0e434-1b19-4991-a8dd-b5507ce83d8c 1 2018-10-09 17:02:23.459+08 2018-10-09 17:02:23.459+08 e5ed186c-f248-4b06-ae1c-8ada54d1c67d d4f271b6-567a-4880-beb0-161b33ac2094
+ee568ad5-33ca-4b20-8fcf-9932c3e4758c 2 2018-11-09 14:39:36.875+08 2018-11-09 14:39:36.875+08 6757358d-f79f-4a71-a721-6a882b92b350 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b7fa7727-83e0-46f3-b9c6-de4800fb5451 1 2018-11-09 14:39:36.873+08 2018-11-09 17:32:20.788+08 6757358d-f79f-4a71-a721-6a882b92b350 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0688d076-74f7-443a-8642-8ad412fbf1c6 1 2018-11-22 16:01:39.292+08 2018-11-22 16:01:39.292+08 b91bca75-6908-439e-9860-f0debec0bf10 3dfadb0e-7608-49e1-aa43-24f7442b424a
+7b3133e2-342d-4eda-8584-5f1daf55a8a4 2 2018-11-22 16:01:39.295+08 2018-11-22 16:01:39.295+08 b91bca75-6908-439e-9860-f0debec0bf10 8396ee22-73b6-4375-a8be-854a047aecbf
+790def09-4560-4246-b2e1-3ef7b9817c42 1 2018-12-10 10:00:18.975+08 2018-12-10 10:00:18.975+08 1152aa27-3899-4f0f-9954-9d83cedd5aab 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+78099f25-c4b6-40ae-b659-7eaf416ca5a9 1 2018-12-18 16:53:40.791+08 2018-12-18 16:53:40.791+08 8580899d-741c-4cc7-a479-ccd6c0c6e22c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e171ad93-8887-40f9-be9a-c009f4efe72a 2 2018-12-21 16:55:45.969+08 2018-12-21 16:55:45.969+08 3f9ded10-1974-46c6-b577-74ef70477cc1 c00008f7-06d9-4907-b2e7-619374116b36
+9d7a8978-3d54-4242-b04e-be1eff619aec 1 2018-12-24 14:39:01.234+08 2018-12-24 14:39:01.234+08 0c6ecc38-15dc-4580-a580-aa3c39eb9064 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+06120084-e5b4-4810-a74f-44f86005fad1 1 2018-12-21 16:55:45.966+08 2018-12-27 15:23:58.094+08 3f9ded10-1974-46c6-b577-74ef70477cc1 0f0c11cf-71ae-4bba-b9ba-95442f1fb714
+a76e6a76-e9bd-462a-a916-27797d6febff 1 2018-12-28 11:17:19.426+08 2018-12-28 11:17:19.426+08 d52114b2-8ad0-42a3-989f-0650203b54c8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5f4173ab-b59f-4fa7-9f55-9e0a66adf6c7 1 2019-01-08 15:12:49.578+08 2019-01-08 15:12:49.578+08 a9f13e6b-82bb-4a59-82b7-cf52b91642a5 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2fcf52d0-80b8-4b81-9bed-b0a86eb903a8 1 2019-01-14 15:44:06.669+08 2019-01-14 15:44:06.669+08 a91dd10c-af61-4fcf-8294-1d200a035664 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d8634a38-8284-4196-9a3f-ab3d6d1af934 1 2019-01-19 09:54:40.59+08 2019-01-19 09:54:40.59+08 75ff49e4-22d3-4777-a5a5-71f3a5fc4436 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+66b50554-6427-482d-9a1f-b31cace75305 1 2019-02-25 11:46:10.788+08 2019-02-25 11:46:10.788+08 a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d2085d03-54f3-4d35-95c2-ac918bc59588 1 2019-02-25 11:46:10.792+08 2019-02-25 11:46:10.792+08 a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62 1aa841f1-d3fb-4523-9b54-e601d350c745
+c1b6b03c-8a17-4110-9120-7d28b4f62f36 1 2019-02-25 11:46:10.795+08 2019-02-25 11:46:10.795+08 a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62 d0e8f529-c1bf-4146-beef-cd3056ea9787
+15eb120d-af1f-4b2a-997d-aebb756c4244 1 2019-02-25 14:18:58.099+08 2019-02-25 14:18:58.099+08 536c5d54-6c47-4800-aecb-47219ee56fc2 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ad16f71a-68b6-4014-bf6a-bcee4d3a60d5 1 2019-02-25 14:18:58.103+08 2019-02-25 14:18:58.103+08 536c5d54-6c47-4800-aecb-47219ee56fc2 d0e8f529-c1bf-4146-beef-cd3056ea9787
+3ddbbbb3-9d0d-4cac-8f44-8b395cd26afa 1 2019-03-15 17:00:45.457+08 2019-03-15 17:00:45.457+08 ad1ce5b5-24d5-4aa3-9125-bbb25ea24069 936f5813-db0d-4a2a-a7bc-8d323024140b
+12a4e096-faea-4a88-93ab-27a42d813c80 1 2019-04-10 15:48:53.413+08 2019-04-10 15:48:53.413+08 87bb0352-924e-440f-abb0-2a42797d0eb0 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+45053113-3040-4e3f-8f51-26ce5428e17f 1 2019-03-27 09:45:06.495+08 2019-03-27 10:04:01.171+08 248ab293-5e7c-41e5-835a-2978782081de 68238334-fea4-4bc0-b1cd-98456c41faab
+563aa63f-70d2-47f8-b69b-5a836865f2ad 1 2019-03-29 17:37:11.121+08 2019-03-29 17:37:11.121+08 e6ddf9e3-cda3-4fcf-975a-a7b4f14a0a34 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6b037c2a-3f6b-4ad9-97a9-0cf50758d610 2 2019-03-29 17:37:11.126+08 2019-03-29 17:37:11.126+08 e6ddf9e3-cda3-4fcf-975a-a7b4f14a0a34 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+32465ca8-9d2e-4f6d-91df-aadc7ba1619e 1 2019-04-01 15:38:01.391+08 2019-04-01 15:38:01.391+08 936ee644-5ea7-4d64-98d7-ff52cc50e113 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d830e326-46e8-46d1-8ef1-0b40a29c0a14 1 2019-04-03 16:53:56.862+08 2019-04-03 16:53:56.862+08 db04dc7e-6a55-4050-92a8-c1a6e5c0dc9c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+32435b8b-f100-4ed8-abc1-8fe485c14861 1 2019-04-04 11:32:30.412+08 2019-04-04 11:32:30.412+08 cecf35d0-533a-45cd-b740-42f93c4f3df2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+66f5e87e-68ba-42cc-823a-b2f3c0c46f4e 2 2019-04-08 10:58:20.18+08 2019-04-08 10:58:20.18+08 7f81d1d0-150c-49d4-9b52-4eda0387c996 b3cb9990-288c-4f0d-a91a-547254d1d9c6
+610d6acd-999b-4ad8-a4e2-476a1fb53d20 1 2019-04-16 09:11:47.988+08 2019-04-16 09:11:47.988+08 9922afa7-509c-4ee2-8cfa-094233cf6eb1 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+332f021d-a41a-4385-8efa-6e17a2f538ee 1 2019-04-18 11:06:31.791+08 2019-04-18 11:06:31.791+08 d5bf6f22-3d7a-4ab0-9043-1020e9516bcc 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+aca44562-f9b0-4c7c-8c90-43f8a3b57de8 1 2019-04-18 13:54:40.621+08 2019-04-18 13:54:40.621+08 9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ce509d06-76f1-49ac-93d5-477b9705a395 1 2019-04-18 18:47:42.214+08 2019-04-18 18:47:42.214+08 f929d6c9-de63-4cb0-89f9-f9e7a22cbadb 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+81c78d91-7706-4922-82bd-38444ca9b046 1 2019-04-19 10:44:05.925+08 2019-04-19 10:44:05.925+08 82e60098-d956-499c-97c8-810ba64a8589 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0cf029a6-b198-4afc-abcf-a7279db56ba7 1 2019-04-23 14:22:13.661+08 2019-04-23 14:22:13.661+08 fb1aa362-5048-47df-a1b3-89bc55bfe786 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1f96c713-b157-490a-87ef-75903faeec82 1 2019-02-22 13:27:41.871+08 2019-04-29 16:06:12.924+08 ef6476c9-709e-4afb-a4d9-57009ee3ecf5 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+ca73c002-2faf-44ae-b3f6-44d42c0558c0 1 2019-02-22 13:41:58.509+08 2019-04-29 16:06:27.181+08 6c6b5c79-b408-447c-b2b1-3ff7bf122a19 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+6924cdf6-5d7c-4a36-a9b0-cdb858d60861 1 2018-06-28 15:28:03.049+08 2018-06-28 15:28:03.049+08 ad463dbb-84bc-45ec-9a0e-98de9aaf5fb8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+35aaf533-2deb-46cb-b33e-0409c36b18e4 1 2018-07-02 10:37:28.261+08 2018-07-02 10:37:28.261+08 20e28988-ea9b-4757-9f79-22dce525207a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4e34c724-73e6-4bb6-8dfc-59443e627031 1 2018-07-03 19:14:02.256+08 2018-07-03 19:14:02.256+08 5838090c-ced5-4fb2-9320-53c516ee9b33 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b78cd8f6-60bd-42ad-8ee9-2fcc5603394d 1 2018-07-04 12:31:15.222+08 2018-07-04 12:31:15.222+08 515030fd-3993-442a-89f7-ca844c5671c0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c64d5f1b-a524-4a66-af36-52c23666d617 1 2018-07-04 16:49:20.263+08 2018-07-04 16:49:20.263+08 32349c76-d117-4331-8a10-9b7ea057c2ab 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+173acc1a-9b79-4918-9ea8-2f9559e65794 1 2018-07-05 14:21:10.246+08 2018-07-05 14:21:10.246+08 9fab42c0-0c95-4fd2-a470-08437473a2f4 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+05f0ac13-f119-4b73-9254-18f6a4ebb3d4 2 2018-07-06 17:14:37.671+08 2018-07-06 17:14:37.671+08 e442b9a5-066f-4cde-b5f3-9709a193c328 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+617a40b1-cf86-47a8-81a1-0276ddbc2d17 1 2018-07-09 10:14:00.837+08 2018-07-09 10:14:00.837+08 70dd7ed7-45de-4c9c-a299-7c0686775dc3 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+087bb313-bb27-423b-bb51-c5970d80a61d 1 2018-07-09 11:43:50.743+08 2018-07-09 11:43:50.743+08 427e8976-edd3-4467-8900-587c12fbf6cf 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+43afd7e5-c38f-4263-9508-b8e06098c954 1 2018-07-10 11:55:47.362+08 2018-07-10 11:55:47.362+08 2bd37bef-1f44-47e9-8086-b0343328eb0c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ecf19fc8-9807-4753-a1e5-c018c19680f4 1 2018-07-10 14:47:24.851+08 2018-07-10 14:47:24.851+08 94540a5f-cb58-4a32-a605-05002a4391ed 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d20564a8-5902-4ba7-a199-ee9c3800792a 1 2018-07-10 17:19:28.452+08 2018-07-10 17:19:28.452+08 d8b7d673-b192-4f7a-84d9-0946b8d30f41 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+29f1ee6e-8283-419a-bbab-46ea0a54a6b5 1 2018-07-11 10:25:15.537+08 2018-07-11 10:25:15.537+08 a6d30b7e-a718-4cbf-80be-2ddefa2445ab 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c09c2619-45df-4f25-a765-58b559af0ea3 1 2018-07-11 10:25:55.122+08 2018-07-11 10:25:55.122+08 8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+00b03660-427a-4ce0-a8ef-abd2cd65ac31 1 2018-07-13 16:15:51.106+08 2018-07-13 16:15:51.106+08 cb6fd3f6-2591-4242-b0a8-dbb037543831 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+166bc1cb-32cb-4163-987b-19b1c9b35f66 1 2018-07-23 15:18:06.237+08 2018-07-23 15:18:06.237+08 7da8e64c-b909-4802-9639-84077cefa569 7c5f8c54-870d-46fb-97fd-ffdf565e7e7e
+869aebb5-9093-4651-b0ff-eb3835c3e88d 1 2018-07-18 09:51:58.259+08 2018-07-18 09:51:58.259+08 e32efbee-3c36-4be6-a4d3-d5058acf1fda 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22
+a516724a-2214-48ba-abbd-287bf60d42ed 1 2018-07-18 09:55:29.602+08 2018-07-18 09:55:29.602+08 c9946e27-bce7-41eb-b341-d6b03a7f115f 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+a615e317-7a24-4c74-9d3a-5ab19299559f 1 2018-07-18 09:58:42.828+08 2018-07-18 09:58:42.828+08 9e8050a9-f38a-45c3-a02b-40670bdf19b7 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+efa11bc6-774b-4295-9c0e-57feee9cb217 2 2018-07-18 09:52:40.446+08 2018-07-18 10:01:54.781+08 c3455ece-210c-4203-af82-88b61e4b2584 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+d34bd34d-8be6-451c-a92f-049c21e64115 2 2018-07-18 09:52:34.718+08 2018-07-18 10:01:59.955+08 c3455ece-210c-4203-af82-88b61e4b2584 118383e6-1b61-4e15-8dee-a1a2a61b531e
+01ce0d35-3e87-4d8c-bd4a-97b020d9b76b 2 2018-07-18 09:52:28.093+08 2018-07-18 10:02:20.1+08 c3455ece-210c-4203-af82-88b61e4b2584 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22
+9a43f07c-ca17-46c9-89dc-765e4df66475 1 2018-07-19 09:35:55.144+08 2018-07-19 09:35:55.144+08 8fcb81d8-34ce-41b8-93c9-69d15060fa40 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+629d92f1-f322-4ba5-88b8-e767ab052ef2 1 2018-07-19 09:35:55.148+08 2018-07-19 09:35:55.148+08 8fcb81d8-34ce-41b8-93c9-69d15060fa40 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b39dbca9-dd75-4ef1-901a-759dba6f3de7 1 2018-07-19 09:35:56.544+08 2018-07-19 09:35:56.544+08 f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17 d5f2066b-b4d8-4e26-8991-0c068495e2c9
+236d9e27-dc5d-4e5f-8746-2c83b505e259 1 2018-07-19 09:35:56.547+08 2018-07-19 09:35:56.547+08 f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+606698dd-2cbb-4401-8d88-78715c282b84 1 2018-07-23 15:29:31.263+08 2018-07-23 15:29:31.263+08 3bd37805-2e49-4fdb-8bab-d54c72112de8 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8a7450fa-c8f0-4edb-a4bc-f7551f4d0971 1 2018-07-23 15:31:50.026+08 2018-07-23 15:31:50.026+08 1f235ab7-7bbb-4c4a-b106-7a0a435448bf 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+453c3722-5749-445a-9d0f-12b3f13c5f16 1 2018-07-23 15:34:09.531+08 2018-07-23 15:34:09.531+08 3c312b4a-0bd1-4ee4-acf1-5a51f99ed087 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+892f447b-ed6f-4eaa-8547-93100b1bdcf9 1 2018-07-23 15:37:15.297+08 2018-07-23 15:37:15.297+08 edfaccd5-edfd-4895-a519-541faa623db3 3dfadb0e-7608-49e1-aa43-24f7442b424a
+3a9f673d-7ed0-4962-969c-c181928e01a4 2 2018-07-23 15:37:15.302+08 2018-07-23 15:37:15.302+08 edfaccd5-edfd-4895-a519-541faa623db3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7956fe10-dfc9-4716-9118-d3f4e8880bb5 1 2018-07-23 15:23:19.642+08 2018-07-25 09:42:50.581+08 4a1c835d-1f99-4d95-8d21-ceab11c714d3 452e3349-a87b-4b5b-97f9-7dc730f910fa
+7deeff92-08bd-495a-9d0c-6be8709457ed 1 2018-07-25 09:50:10.776+08 2018-07-25 09:50:10.776+08 6d00ebcb-1976-40ff-8c6d-99e9df45035a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e9c82794-1f38-45a6-abee-3f54b3894669 1 2018-07-27 16:11:26.062+08 2018-07-27 16:11:26.062+08 75bcea50-3625-4248-9181-b8f541953270 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+be6f5149-c66d-4043-8db5-8441d9996e6c 2 2018-07-27 16:11:26.07+08 2018-07-27 16:11:26.07+08 75bcea50-3625-4248-9181-b8f541953270 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+51ddec14-349a-4066-af32-e3870d29b3b2 1 2018-07-27 17:05:36.514+08 2018-07-27 17:05:36.514+08 ab820c4a-1397-4605-b9d5-68aea01ab2b5 7fd05290-f814-4049-812f-b8c7865ec221
+167a9888-36c3-4f8f-9b23-06f3f7751c23 1 2018-07-28 17:05:35.555+08 2018-07-28 17:05:35.555+08 039664c3-5d24-4edb-b251-7540c98dc2ce 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7f331791-d57f-4760-8a73-869a52dc89c1 1 2018-07-28 17:20:27.362+08 2018-07-28 17:20:27.362+08 d0e4432b-aeb4-4004-b728-9ef120f0e1db 71458c57-c197-4b3c-9171-2cdc5658201e
+5ee8afd8-6862-4d72-ac27-ab94a67d2516 2 2018-07-28 17:20:45.008+08 2018-07-28 17:20:45.008+08 d0e4432b-aeb4-4004-b728-9ef120f0e1db 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ead1ab34-9fee-42d7-af72-e553327035b9 1 2018-07-31 09:20:17.914+08 2018-07-31 09:20:17.914+08 8d37a4fb-8add-44a4-ad5e-a8d190e87209 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+45845af8-6001-40d8-9c80-a62cd1c498b2 1 2018-07-31 14:22:29.692+08 2018-07-31 14:22:29.692+08 13ee1f91-04cc-48af-820e-ffc0ed179b6c 118383e6-1b61-4e15-8dee-a1a2a61b531e
+f56a4f85-44cc-4ea7-970e-858dd9150566 1 2018-07-31 14:53:45.771+08 2018-07-31 14:53:45.771+08 11f0a3dc-13ad-4c40-ae16-1b2f1d139564 118383e6-1b61-4e15-8dee-a1a2a61b531e
+66642664-b51f-4599-a75a-963d32a18ca7 1 2018-07-31 15:03:45.587+08 2018-07-31 15:03:45.587+08 cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3 118383e6-1b61-4e15-8dee-a1a2a61b531e
+9c2bfc48-4d7b-477f-8a2a-f0fd329da5bf 1 2018-07-31 15:12:59.341+08 2018-07-31 15:12:59.341+08 b6095ab3-88ff-4a71-8f42-f0656b301e1e 118383e6-1b61-4e15-8dee-a1a2a61b531e
+90b3d65e-5aec-420b-948e-4bb6cd546963 1 2018-07-31 15:15:53.673+08 2018-07-31 15:15:53.673+08 5f4e4e99-20b3-4bf7-95cb-a2f507595b2d 118383e6-1b61-4e15-8dee-a1a2a61b531e
+caf61f62-b229-4355-8d3f-dcf42c8a32eb 1 2018-07-31 17:07:23.879+08 2018-07-31 17:07:23.879+08 b3f251c1-ab5e-4427-8b38-9180d6544783 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+4b2e8fe7-8d33-4c61-b54a-62caea9e3947 1 2018-07-31 15:18:58.267+08 2018-07-31 15:18:58.267+08 9110f259-e269-446d-afa3-798069f4534d 118383e6-1b61-4e15-8dee-a1a2a61b531e
+f62fb242-cddb-4387-ae70-7b27fcd161af 1 2018-07-31 16:19:11.949+08 2018-07-31 16:19:11.949+08 bff19d80-ce20-4c3d-b158-df091a1fb5ac 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+0511247f-0b74-49af-9ec1-81899d8c1024 1 2018-07-31 17:07:35.166+08 2018-07-31 17:07:35.166+08 b3f251c1-ab5e-4427-8b38-9180d6544783 7667c2d9-3c04-4818-bfeb-42f43b60af77
+762e55a6-c0c8-4444-8a74-24102e58cccd 1 2018-07-31 17:11:13.208+08 2018-07-31 17:11:13.208+08 131c98fc-2216-4f0f-9cd3-581d88f9affd 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+b3e5ceec-9730-4ea1-a4ae-5e8e3082f718 1 2018-07-31 17:21:20.032+08 2018-07-31 17:21:20.032+08 11a0df92-8921-470b-af9c-d7593b8b1f78 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+c652dfcc-2815-482e-92fa-d71e3647a73d 1 2018-10-10 11:24:53.689+08 2018-10-10 11:24:53.689+08 dc4b89d8-51e0-4b94-91d7-92d61a59a696 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+42916342-ec67-4a16-9274-d09bfd9bd8af 2 2018-10-10 11:24:53.693+08 2018-10-10 11:24:53.693+08 dc4b89d8-51e0-4b94-91d7-92d61a59a696 6c047530-0656-4cb4-a416-f4ac00b015f9
+4dd766ed-6f42-4028-8d71-180701484513 1 2018-11-09 14:49:07.696+08 2018-11-09 14:49:07.696+08 296a97ca-fbd1-4876-83b2-f40a7fa7d5c5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2b007e18-5525-47fc-9a41-fd337b33dbbf 1 2018-11-22 17:12:56.413+08 2018-11-22 17:12:56.413+08 3b867352-5d0b-4016-a55f-4d68d0dcbaa4 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f0c7e12e-dbe8-4c3e-9b01-cf184c7eef29 1 2018-12-10 11:36:18.833+08 2018-12-10 11:36:18.833+08 d4582a57-2984-4d20-94de-598f5b28a188 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d4a10687-30a5-42f2-bfba-bd833a11152b 1 2018-12-18 16:53:41.307+08 2018-12-18 16:53:41.307+08 b640a9ef-9a1c-4973-ada5-0cdab7877f55 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0139ef61-9f17-416c-ad0f-70f24fe921e8 1 2018-12-22 09:15:30.081+08 2018-12-22 09:57:45.599+08 2aec4a46-de9a-40e0-ac97-bdb0d149e82d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+26daa22f-efbc-421c-8600-042b16026119 1 2018-12-24 15:31:37.9+08 2018-12-24 15:31:37.9+08 2202dd15-500f-45e8-a555-e90ddf24df13 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+84b3c3bd-bbc6-4ce1-ba57-02c4d7bc86a6 1 2018-12-28 11:30:29.891+08 2018-12-28 11:30:29.891+08 bc87beae-9433-42de-875d-6981e7975f21 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+615c536b-700b-4b98-beac-b0bda377b4bd 1 2019-01-04 18:36:21.56+08 2019-01-04 18:36:21.56+08 f90616c7-29f8-4aa3-863b-c67c6ef4ec61 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b194ce55-ccc1-4265-8dab-a705947e6817 1 2019-01-08 16:04:57.713+08 2019-01-08 16:09:28.447+08 36f70703-df53-42ae-a8da-e001d8215fd8 3dfadb0e-7608-49e1-aa43-24f7442b424a
+f10cf6e2-3599-438c-9f98-8fa73bfecd62 1 2019-01-14 15:47:03.723+08 2019-01-14 15:47:03.723+08 4eb4d7ed-2199-4514-9411-9c12d59f72e3 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+10ac1a73-d796-4fba-a87d-78f1352e2e13 1 2019-01-19 14:34:12.831+08 2019-01-19 14:34:12.831+08 9eef0ea4-1634-4d46-a9fb-6613a37b9431 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+bc561d59-77ee-4011-8762-39608d6b9c5a 1 2019-01-19 14:35:13.514+08 2019-01-19 14:35:13.514+08 f5cf2b42-6efc-474b-aad5-f5614e5ec0d8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+938c98b5-a684-498c-aecf-a82a98e519d6 2 2019-01-22 15:15:43.189+08 2019-01-22 15:15:43.189+08 ff9746d5-839e-46dc-aae9-ec714680e041 1aa841f1-d3fb-4523-9b54-e601d350c745
+c73341e3-6650-4b19-9fa7-beb642ef4307 2 2019-01-22 15:15:43.191+08 2019-01-22 15:15:43.191+08 ff9746d5-839e-46dc-aae9-ec714680e041 8774b4f0-60c1-4c7d-940b-f3a847c2847a
+2c6a3261-9129-46ad-969b-1d0f360dc9a3 1 2019-01-22 15:15:43.193+08 2019-01-22 15:15:43.193+08 ff9746d5-839e-46dc-aae9-ec714680e041 ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
+a4a803d0-a15c-4d5c-9c5f-c93e13505c5f 1 2019-02-25 11:52:45.914+08 2019-02-25 11:52:45.914+08 369b29f9-7664-42c3-8510-7ad4c7b5bc06 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+bb24e66d-41e6-41d0-bc4b-30660c057030 1 2019-02-25 11:52:45.918+08 2019-02-25 11:52:45.918+08 369b29f9-7664-42c3-8510-7ad4c7b5bc06 1aa841f1-d3fb-4523-9b54-e601d350c745
+1874d1bb-32c6-4c07-b240-9ce47ecec1bf 1 2019-02-25 11:52:45.921+08 2019-02-25 11:52:45.921+08 369b29f9-7664-42c3-8510-7ad4c7b5bc06 d0e8f529-c1bf-4146-beef-cd3056ea9787
+e3216636-9763-4b64-a0f3-a5d7f9fb40f0 1 2019-02-25 14:20:41.315+08 2019-02-25 14:20:41.315+08 1ecb51e2-e759-45ef-9792-89f34bb715d0 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2b780bf5-2292-4dbe-ad9e-dcf41181f5d9 1 2019-02-25 14:20:41.319+08 2019-02-25 14:20:41.319+08 1ecb51e2-e759-45ef-9792-89f34bb715d0 d0e8f529-c1bf-4146-beef-cd3056ea9787
+da3c65bd-1c3b-4e2d-9c93-df7bc942e10f 1 2019-02-25 14:20:41.322+08 2019-02-25 14:20:41.322+08 1ecb51e2-e759-45ef-9792-89f34bb715d0 118383e6-1b61-4e15-8dee-a1a2a61b531e
+c627dfb1-eb49-4687-929a-9e02683846ff 1 2019-02-25 15:51:46.867+08 2019-02-25 15:51:46.867+08 18b82e73-7501-445f-a72c-a8e20cf9da40 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ecbc8c0a-03af-480d-9141-1943fbb35ab1 1 2019-02-25 15:51:46.872+08 2019-02-25 15:51:46.872+08 18b82e73-7501-445f-a72c-a8e20cf9da40 d0e8f529-c1bf-4146-beef-cd3056ea9787
+102c5517-619e-4b9f-9e4c-7cbf4437765d 1 2019-03-19 16:45:17.826+08 2019-03-19 16:45:17.826+08 e4a7eb69-0c5d-4b87-b1af-913b0220dea2 ac94d09e-3893-4f3d-b42b-0825be96e0c7
+2f9e8480-78ae-4d06-8dae-9bfb384c7ae6 2 2019-04-03 17:24:15.665+08 2019-04-03 17:24:15.665+08 53efa30f-f738-43ef-9600-0963b6b108fd 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+1b35e5c9-e4c7-49dc-a957-87cf135a7271 1 2019-04-08 11:04:20.109+08 2019-04-08 11:04:20.109+08 b73a2e67-7654-49ce-890a-7c2dfec89a03 b3cb9990-288c-4f0d-a91a-547254d1d9c6
+8e90f68c-0a42-4565-a0a0-734b5b4bd99c 1 2019-04-25 15:02:30.566+08 2019-04-28 14:19:34.521+08 83960893-0d31-4f1e-a576-69a4e7bce94c 66537b16-1e7d-4823-b03e-676459f5891d
+ba500390-3f34-454c-a11c-46a503db2d3e 1 2019-04-18 13:55:48.225+08 2019-04-18 13:55:48.225+08 75c932d0-2df0-4628-81dd-0e9c1f11ff60 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b342d887-3839-4ce0-9314-4cdf7c9e7895 1 2019-04-19 11:06:37.311+08 2019-04-19 13:59:55.467+08 ef966a9a-d938-4526-af04-cee74ea9b600 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f547f965-5d5f-4aea-811e-8057633bc374 1 2019-04-23 14:45:48.306+08 2019-04-23 14:45:48.306+08 4aac7755-6f82-41a7-adde-756a7548c7f4 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+54db998e-43ed-46da-9c44-ff738728ed07 1 2019-04-24 09:19:20.82+08 2019-04-24 09:19:20.82+08 29a8cde9-51c6-4647-8153-de06449e2ba2 7bc18b0f-46d5-403a-893a-029eed333a46
+b9704e98-04a2-4552-b0aa-d0ca02c0bc51 1 2019-02-22 13:35:17.625+08 2019-04-29 16:06:19.398+08 4068ff34-b211-4386-b274-0a6b12f35b59 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+21f1570a-9a90-44c7-a20e-df59a4f0665c 2 2019-05-07 15:57:23.332+08 2019-05-07 16:48:33.287+08 573fb497-e583-41c4-ba6b-ecf548921eaf 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d66fa059-5b42-428c-9c83-65b31ec08a45 1 2019-05-08 18:17:31.597+08 2019-05-08 18:17:31.597+08 ecad4b77-ab58-460f-8469-b89b3c77d796 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a0c4221e-b5ca-486b-8f8d-f98ec84e87f9 1 2019-05-09 10:06:14.144+08 2019-05-09 10:06:14.144+08 54e76b93-f8ed-407b-b112-ed4a85db50db 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+07ea4428-ccd3-428f-a85b-1c8460c545fa 1 2019-05-23 13:53:19.245+08 2019-05-23 13:53:19.245+08 b69e622c-7f6b-4539-8ff3-f3027cb3a592 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+19f133c9-6f68-4f24-87fd-14d6fdf4120d 1 2019-05-29 14:51:02.756+08 2019-05-29 14:51:02.756+08 82ec14e4-a0ee-4d21-9fcb-24cde7cf551b 66537b16-1e7d-4823-b03e-676459f5891d
+18765cd8-d70d-4f27-9272-3a873ab16682 2 2019-05-23 13:53:19.242+08 2019-05-31 16:19:09.067+08 b69e622c-7f6b-4539-8ff3-f3027cb3a592 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7cf8f57e-36fa-47e1-9c4f-eadd2c5a6f58 1 2018-07-31 16:20:35.99+08 2018-07-31 16:20:35.99+08 0bf78d42-85ee-486c-bf43-c62c3168ee33 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+3ac73307-9df7-4d10-a3be-af55d9bf116b 1 2018-07-31 17:21:32.095+08 2018-07-31 17:21:32.095+08 11a0df92-8921-470b-af9c-d7593b8b1f78 7667c2d9-3c04-4818-bfeb-42f43b60af77
+80c119de-eb55-4e71-b726-4bd7554c9cab 1 2018-10-10 11:26:00.994+08 2018-10-10 11:26:00.994+08 7febae4c-c706-48a8-9f99-e546f48e338b 6c047530-0656-4cb4-a416-f4ac00b015f9
+587f6401-8b02-441d-b1f7-fd05c1de5877 2 2018-10-10 11:26:00.998+08 2018-10-10 11:26:00.998+08 7febae4c-c706-48a8-9f99-e546f48e338b 0af1af55-38cd-43c1-abe3-b71570342d40
+d7bb4068-12cd-41d5-ab05-2b61891b4c76 1 2018-11-09 17:35:43.402+08 2018-11-09 17:35:43.402+08 5e44f909-0d21-4d00-82f5-d3502e192e18 66537b16-1e7d-4823-b03e-676459f5891d
+74693392-a0a7-4214-9a28-7e36b761542e 1 2018-11-22 17:30:26.337+08 2018-11-22 17:30:26.337+08 dff02ef2-0438-415d-9327-cdd883c38c81 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6aae0b51-ec60-4612-a5bf-bfb15e46401a 1 2018-12-18 16:53:41.846+08 2018-12-18 16:53:41.846+08 b0726a2c-5c69-481f-8d2d-d8f8e17a248d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6ff79b88-32b8-4293-b82e-ce1e9c1102df 1 2018-12-11 10:31:53.261+08 2018-12-26 11:47:17.502+08 d8de8739-f146-41e0-877e-747f30ac59a7 a8f77633-9fe3-4228-b557-34a9108b3d50
+1bdc5e70-82a2-4784-85fc-3dfa298e5d35 1 2018-12-28 11:30:32.412+08 2018-12-28 11:30:32.412+08 21387f8b-b7bb-48c8-9972-7ff32e01f2fa 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3ec66b5d-883c-4ae8-a7ae-2977a544c5ab 1 2019-01-14 15:48:47.003+08 2019-01-14 15:48:47.003+08 9db37a62-7896-4477-a3c4-7d317d28f26e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3eccadd7-08d3-44e8-b1b4-e23b646bd03b 1 2019-01-19 15:00:28.912+08 2019-01-19 15:00:28.912+08 e1d537c6-2a5b-4b97-91ea-a2bd94093494 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f7568e77-c6a6-4c03-8484-16c935134b2b 1 2019-02-25 11:55:32.878+08 2019-02-25 11:55:32.878+08 ff97f842-4bf0-4384-b4b6-05a9783aa809 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f1a7bcec-66c4-498e-9739-b940ed9e0fa9 1 2019-02-25 11:55:32.882+08 2019-02-25 11:55:32.882+08 ff97f842-4bf0-4384-b4b6-05a9783aa809 1aa841f1-d3fb-4523-9b54-e601d350c745
+d90d60d1-ad46-40d4-a382-f71eed7ddfcc 1 2019-02-25 11:55:32.886+08 2019-02-25 11:55:32.886+08 ff97f842-4bf0-4384-b4b6-05a9783aa809 d0e8f529-c1bf-4146-beef-cd3056ea9787
+3b4a9a5f-f359-465f-8082-cd95b32b6c73 1 2019-02-25 14:21:56.98+08 2019-02-25 14:21:56.98+08 d26842d0-7685-4eec-869d-160b023932b9 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+bc09c546-2858-43b3-9a27-880b1601f475 1 2019-02-25 14:21:56.984+08 2019-02-25 14:21:56.984+08 d26842d0-7685-4eec-869d-160b023932b9 d0e8f529-c1bf-4146-beef-cd3056ea9787
+bbc1ddfa-9e1f-4ff2-bee6-a0b2720f41ff 1 2019-02-25 14:21:56.987+08 2019-02-25 14:21:56.987+08 d26842d0-7685-4eec-869d-160b023932b9 118383e6-1b61-4e15-8dee-a1a2a61b531e
+437f278c-a4b7-4b5f-aa56-bd31c07374d3 1 2019-02-25 16:01:22.94+08 2019-02-25 16:01:22.94+08 3c72a231-83a6-4d92-88d3-d58e0660cef9 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b0773d91-90a0-4b35-bb6e-3f1fde2fe240 2 2019-02-25 16:01:22.944+08 2019-02-25 16:01:22.944+08 3c72a231-83a6-4d92-88d3-d58e0660cef9 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8a7b5668-623e-4563-a0a1-1ed55b88e481 1 2019-03-27 10:19:53.295+08 2019-03-27 10:19:53.295+08 00e79982-c3d7-4bef-a27d-050dc08eaf82 68238334-fea4-4bc0-b1cd-98456c41faab
+684cc240-1b5d-4df2-9609-f00de3ca4fcc 1 2019-05-07 16:48:28.941+08 2019-05-13 14:03:11.482+08 573fb497-e583-41c4-ba6b-ecf548921eaf 66537b16-1e7d-4823-b03e-676459f5891d
+d02c8816-621a-49f2-85c0-3271f96748b5 1 2019-04-18 13:56:20.379+08 2019-04-18 13:56:20.379+08 11a0df92-8921-470b-af9c-d7593b8b1f78 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+99834e03-b0e6-4357-a9e2-b9a84d65263e 2 2019-04-23 15:03:33.254+08 2019-04-23 15:03:33.254+08 4aac7755-6f82-41a7-adde-756a7548c7f4 7bc18b0f-46d5-403a-893a-029eed333a46
+13eecc28-7330-407f-9903-09b4dc78240a 1 2019-04-24 09:21:38.789+08 2019-04-24 09:21:38.789+08 0ffa5291-87ea-4e05-b031-ef948c53b474 7bc18b0f-46d5-403a-893a-029eed333a46
+c6686a13-535d-4320-8b33-c625dbcbe77a 1 2019-05-28 15:02:38.78+08 2019-05-29 15:25:32.796+08 290bae7d-a183-4af8-be82-963486855761 876d87b1-cccb-4847-80ea-dabfc20a2175
+d2bcc066-99d6-44a5-89b5-f3263bc219c0 1 2019-05-31 16:20:56.765+08 2019-05-31 16:20:56.765+08 3d182049-68c9-440d-adde-b62b71abee38 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f204c0b8-74ab-42e2-a6fd-57944219dc48 1 2019-05-31 16:22:37.289+08 2019-05-31 16:22:37.289+08 b8061f6d-fe6e-443d-bed9-8b4e7fb81a71 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+bb576050-eafc-4b48-80fd-4efee1d5db5d 1 2019-02-22 13:44:23.965+08 2019-04-29 16:06:37.426+08 c70bf363-fc19-41f9-80df-27a231a1a2bd 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+3499e091-c394-497f-bd44-36b866260f82 1 2019-05-31 16:23:50.064+08 2019-05-31 16:23:50.064+08 6c6b5c79-b408-447c-b2b1-3ff7bf122a19 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+73d79c2e-3ea0-42b1-ae44-65de9a5631c2 1 2019-05-31 16:25:36.714+08 2019-05-31 16:25:36.714+08 d1b35088-9410-4203-924c-75b60634c7c6 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e2a67d8f-a482-4e0f-9ca6-5a351dce52db 2 2019-06-11 15:06:43.224+08 2019-06-11 15:06:43.224+08 5a3bf41b-78ef-45fa-96e2-ac2a42767d71 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+8f62138e-2ba9-42e6-960f-0c9996e6bb32 1 2019-06-11 15:06:43.227+08 2019-06-11 15:06:43.227+08 5a3bf41b-78ef-45fa-96e2-ac2a42767d71 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f0f85539-ea18-4c2e-b967-245a0d7fadca 1 2019-06-11 15:43:02.159+08 2019-06-11 15:43:02.159+08 57df002c-3fa7-4684-a2b3-f46f54b7f87b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b3e99a42-2843-488a-9745-1be8cd4250d9 1 2019-06-11 15:43:02.163+08 2019-06-11 15:43:02.163+08 57df002c-3fa7-4684-a2b3-f46f54b7f87b 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+2a1269b0-1a5e-4abe-a183-bfd4ee301351 1 2019-06-11 15:50:05.408+08 2019-06-11 15:50:05.408+08 888fb650-543d-4141-a70e-7dff25dfffe7 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b9595344-32b0-4fa3-9516-545d002add5f 1 2019-06-11 15:55:27.354+08 2019-06-11 15:55:27.354+08 2f885022-839d-4c38-ae7a-b4c9881ca394 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+933f6013-a45d-4373-b637-bdf66de02c3a 1 2019-06-11 15:55:27.357+08 2019-06-11 15:55:27.357+08 2f885022-839d-4c38-ae7a-b4c9881ca394 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3363d9e0-2735-405a-bdb3-d15c36520807 1 2019-06-11 15:59:09.834+08 2019-06-11 15:59:09.834+08 c12a0cbf-c2fa-4f1e-a52e-e371df51e0fb 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+0d24fa6d-e98f-46b5-a3f9-67b3e859cb96 1 2019-06-11 15:59:09.837+08 2019-06-11 15:59:09.837+08 c12a0cbf-c2fa-4f1e-a52e-e371df51e0fb 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8e07b05a-7ca0-4958-bd13-4e85847f4b81 1 2019-06-11 16:14:17.083+08 2019-06-11 16:14:17.083+08 f93393d2-0bfd-4685-b6d9-31287c466007 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+d6b7c19f-46c8-4909-b997-d9ccec20f591 1 2019-06-11 16:18:28.994+08 2019-06-11 16:18:28.994+08 acd9ad51-99a5-4b2c-98ce-0d2d6c4dd848 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+ad1e9529-19f6-4407-b675-4625883988ef 1 2019-06-11 16:27:10.947+08 2019-06-11 16:27:10.947+08 f70240a0-3384-4984-a854-65fe5b16dc0a 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+d3b80e8a-111b-400d-8894-0b4ea74fc09b 1 2019-06-11 16:27:10.952+08 2019-06-11 16:27:10.952+08 f70240a0-3384-4984-a854-65fe5b16dc0a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+fb0a2107-aa2b-450a-b87e-534e8281eec9 1 2019-06-11 16:37:25.8+08 2019-06-11 16:37:25.8+08 2142db9e-293b-43a9-9883-3d41391ba533 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+0c9c30de-3021-42b5-845f-d418fa88b181 1 2019-06-11 16:37:25.803+08 2019-06-11 16:37:25.803+08 2142db9e-293b-43a9-9883-3d41391ba533 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9a007f5b-80af-443f-ad5e-b2b897b8caf9 1 2019-06-11 16:41:49.138+08 2019-06-11 16:41:49.138+08 c06263f7-c818-41f4-949a-4a526770fa9b 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+83ada60d-d85e-488c-930a-b8b5e6a10aa4 1 2019-06-11 16:41:49.142+08 2019-06-11 16:41:49.142+08 c06263f7-c818-41f4-949a-4a526770fa9b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+18a4fb1d-a113-4ae3-81d7-405348e26869 1 2018-07-11 14:03:53.552+08 2018-07-31 16:39:27.571+08 c3455ece-210c-4203-af82-88b61e4b2584 6eeb1913-71e2-40b2-ae39-c8750cbdefd7
+820be4de-7ec1-46b8-a364-0b98e4111d9d 1 2018-08-01 09:11:07.377+08 2018-08-01 09:11:07.377+08 75c932d0-2df0-4628-81dd-0e9c1f11ff60 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+b1688753-3e48-4e22-a4dd-3acb689792bb 1 2018-08-01 09:11:14.829+08 2018-08-01 09:11:14.829+08 75c932d0-2df0-4628-81dd-0e9c1f11ff60 7667c2d9-3c04-4818-bfeb-42f43b60af77
+72477d9c-fe9f-4047-a008-32bd34c54fd4 1 2018-08-01 09:19:16.826+08 2018-08-01 09:19:16.826+08 9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+15d6e1c6-40bd-42c1-8038-7a60a99a22ac 1 2018-08-01 09:19:22.855+08 2018-08-01 09:19:22.855+08 9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec 7667c2d9-3c04-4818-bfeb-42f43b60af77
+e6b914ee-1893-44c7-bb8e-ebf12fce3747 1 2018-08-01 09:32:21.771+08 2018-08-01 09:32:21.771+08 76288807-186e-4444-a1ce-6be599aacfd2 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+4c4c16be-53e5-4082-b62a-71cf80609053 1 2018-08-01 09:32:38.399+08 2018-08-01 09:32:38.399+08 76288807-186e-4444-a1ce-6be599aacfd2 7667c2d9-3c04-4818-bfeb-42f43b60af77
+d6f3f5ec-f72e-417f-9d32-834f93d9f54e 1 2018-08-01 16:02:48.208+08 2018-08-01 16:02:48.208+08 9f4bea7e-e18f-431e-af3b-9bac229c98c6 3dfadb0e-7608-49e1-aa43-24f7442b424a
+1732751d-5b07-4bb4-aced-1bde9707a202 2 2018-08-01 16:04:38.435+08 2018-08-01 16:04:38.435+08 9f4bea7e-e18f-431e-af3b-9bac229c98c6 d0ad76ed-4f11-4355-b876-7f1b04037ae1
+99bb5c58-f2bd-437a-bcf3-e1376792d2b5 1 2018-08-01 16:20:24.307+08 2018-08-01 16:20:24.307+08 82edfa3d-c080-4212-ad83-32be43b48841 d0ad76ed-4f11-4355-b876-7f1b04037ae1
+7098e077-d8df-4873-867e-f6229109c503 2 2018-08-01 16:20:24.31+08 2018-08-01 16:20:24.31+08 82edfa3d-c080-4212-ad83-32be43b48841 c43e054f-dbeb-43c0-9702-4bc9bf7fdcd1
+bab8da8a-0a49-44f2-ade7-d8b741b2e868 1 2018-08-01 16:25:49.74+08 2018-08-01 16:25:49.74+08 915fc949-c75f-47a9-8ba5-f516f0eb6228 c43e054f-dbeb-43c0-9702-4bc9bf7fdcd1
+dbeac185-ea2d-440d-bd83-59c03d164dce 2 2018-08-02 10:31:04.101+08 2018-08-02 10:31:04.101+08 2cbbf402-789b-4c54-b408-7e61934ebd4d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+fe0c5930-84b8-445c-9665-59f2c880f8a4 1 2018-08-02 10:31:54.569+08 2018-08-02 10:31:54.569+08 705738a1-f330-4875-a2a0-23c30ec9f5d4 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+767752a2-9e11-4345-9b42-df1d3a202742 1 2018-08-02 10:33:18.531+08 2018-08-02 10:33:18.531+08 6b4905df-caae-4bcc-a8a7-c99cb7866e06 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4e563302-f20e-4001-855b-d9cb1b56ad64 1 2018-08-02 10:35:48.069+08 2018-08-02 10:35:48.069+08 8e67e334-231e-467c-8868-c41461d9463e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+549b472a-04f4-4df6-b246-2c324c122e2c 1 2018-08-02 10:37:02.583+08 2018-08-02 10:37:02.583+08 e1f36777-486a-4527-a30f-61d17b7a8796 452e3349-a87b-4b5b-97f9-7dc730f910fa
+fabc7925-e9e4-408c-90fe-338bff871125 1 2018-08-02 10:41:04.603+08 2018-08-02 10:41:04.603+08 77a4b2d1-adf0-4cab-be7e-5f4635e4063f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+1d497ad7-f56a-4e73-959f-29424bb92a2c 1 2018-08-02 10:31:04.096+08 2018-08-02 10:47:30.612+08 2cbbf402-789b-4c54-b408-7e61934ebd4d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2768cdc7-6232-43bc-a8f0-dd8bd3be5b29 1 2018-08-03 07:13:57.952+08 2018-08-03 07:33:55.174+08 cd27d23f-a55d-4ce0-8c59-33675bb5ad62 876d87b1-cccb-4847-80ea-dabfc20a2175
+bc83ff5f-4941-4f5e-883e-f3a6d84964b0 2 2018-08-03 07:28:29.455+08 2018-08-03 07:37:26.908+08 f556a96a-5649-49c8-beae-aa08f2faa752 876d87b1-cccb-4847-80ea-dabfc20a2175
+301a49ab-6faf-4a1b-8080-2bf10037f0ca 1 2018-08-03 07:37:35.181+08 2018-08-03 07:37:35.181+08 f556a96a-5649-49c8-beae-aa08f2faa752 d0ad76ed-4f11-4355-b876-7f1b04037ae1
+d4fa3b20-5cd6-4baa-a7e2-0df8ddd2dfd8 1 2018-08-03 10:29:52.686+08 2018-08-03 10:29:52.686+08 777c9799-3abe-4eee-a583-f5e6fac01946 876d87b1-cccb-4847-80ea-dabfc20a2175
+1e05a174-7435-4ab9-95dc-77a4fae8f42c 1 2018-08-03 10:36:00.509+08 2018-08-03 10:36:00.509+08 5f65c5dc-c32f-4e64-b40e-97f907d7c0fd 876d87b1-cccb-4847-80ea-dabfc20a2175
+bc13f6ad-4c38-4542-bb2b-acadf895ab86 1 2018-08-03 10:41:17.479+08 2018-08-03 10:41:17.479+08 bc1228dd-0195-4fba-b21f-178b91e4cf60 876d87b1-cccb-4847-80ea-dabfc20a2175
+5957e111-c3a4-4000-8948-6d1a7d17a7aa 1 2018-08-07 15:28:19.794+08 2018-08-07 15:28:19.794+08 c8b20fe8-531f-47aa-96cd-3d48ea0bc238 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5581361e-e00e-4621-b14d-ab5ffb4ec262 1 2018-08-07 15:28:53.903+08 2018-08-07 15:28:53.903+08 d6fe2897-a3e2-4aa8-9ba2-459831131cfa 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+540e245d-e5ba-4d59-a656-7aa61125273e 2 2018-08-09 08:30:07.964+08 2018-08-09 08:30:07.964+08 af95a9b9-46f4-4714-b286-3b7a92ef7c43 3dfadb0e-7608-49e1-aa43-24f7442b424a
+f3eb0b34-26c7-4f24-9771-7a55f39cc3c9 1 2018-08-09 14:40:15.565+08 2018-08-09 14:40:15.565+08 89ac2618-0c0c-45b5-a8a1-401e2c16189c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+62796f44-b914-45f5-93a9-731b794d28c8 1 2018-08-09 14:40:18.309+08 2018-08-09 14:40:18.309+08 2975be5f-7c2a-41d3-9157-e723ecfa9120 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b18e471e-bbbd-43c1-b2bc-d83883e0967e 1 2018-08-09 14:55:00.868+08 2018-08-09 14:55:00.868+08 cc6193d5-14b6-4231-a6f6-905db9c4a33c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9261925a-95b4-4602-9111-b6178b6ab599 1 2018-08-09 15:00:04.569+08 2018-08-09 15:00:04.569+08 793d9a65-784f-4f17-840d-51ac6a2f2ddd 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+cac26ff8-0020-4e6c-8bdd-95c3c6cfccdb 1 2018-08-09 16:03:13.759+08 2018-08-09 16:03:13.759+08 6dab819c-b584-4aea-bf13-c12a6a595abb ca45c7c2-42df-48cc-849c-c4cd01067e5d
+9c410fee-4422-4380-932d-b463266ee7d3 2 2018-08-09 16:03:13.761+08 2018-08-09 16:16:17.142+08 6dab819c-b584-4aea-bf13-c12a6a595abb 2c95c010-e14a-4284-89d5-a69fc7f2ed37
+32cde6c6-f27b-42fc-bd86-6b137168099e 1 2018-08-09 16:17:22.299+08 2018-08-09 16:19:05.653+08 f698a0a5-7e2b-4c2e-a66f-c33ff5f05689 2c95c010-e14a-4284-89d5-a69fc7f2ed37
+94e7b97c-4024-4c29-90f1-244939526615 1 2018-08-09 16:19:28.507+08 2018-08-09 16:19:55.765+08 6bd84b2f-3226-42ea-94b6-f740a5b60878 6f8504db-8b86-4b33-a0c6-721249b63f46
+7cbeab2b-ae06-4273-8ee9-266a9e2948fc 2 2018-08-09 16:24:15.675+08 2018-08-09 16:24:15.675+08 f698a0a5-7e2b-4c2e-a66f-c33ff5f05689 6f8504db-8b86-4b33-a0c6-721249b63f46
+29459873-dfc4-4a81-acfb-927d10b96504 1 2018-08-10 09:23:32.71+08 2018-08-10 09:23:32.71+08 05d80c4b-4b8f-428a-bcb0-55fb2f8b5edb 2c95c010-e14a-4284-89d5-a69fc7f2ed37
+fa8a97c3-5707-4684-afd4-d4741b0a1849 2 2018-08-10 09:23:32.715+08 2018-08-10 09:23:32.715+08 05d80c4b-4b8f-428a-bcb0-55fb2f8b5edb 6f8504db-8b86-4b33-a0c6-721249b63f46
+91be2158-bafa-4eb4-863b-d32efa4de0bb 1 2018-08-10 09:50:00.67+08 2018-08-10 09:54:30.77+08 342fde79-43b6-4d56-b5bc-37de3056e9fd 6f8504db-8b86-4b33-a0c6-721249b63f46
+9bbc6377-d6cd-44ea-a123-fca513a10203 1 2018-08-10 09:48:55.482+08 2018-08-10 09:54:41.964+08 7789641b-3a02-4369-b80e-894bacaa5cec 6f8504db-8b86-4b33-a0c6-721249b63f46
+fc18a218-68fb-442b-ab28-cb0c1a7ed52c 1 2018-08-10 09:43:03.96+08 2018-08-10 09:54:50.561+08 f63309ff-a714-4bd7-9052-30c217fa982e 6f8504db-8b86-4b33-a0c6-721249b63f46
+4e6dfa0f-e74c-4559-aedc-7c84e8545a87 1 2018-08-10 09:35:53.045+08 2018-08-10 09:55:10.356+08 9a9aa01c-948e-49a2-964f-cee49def906c 6f8504db-8b86-4b33-a0c6-721249b63f46
+0676a9c6-2a67-4f1f-adab-f4938e3a11aa 1 2018-08-10 09:33:09.088+08 2018-08-10 09:55:27.811+08 307cf077-4fd9-4e6c-a60b-33fddf42a0e4 6f8504db-8b86-4b33-a0c6-721249b63f46
+a695613e-cdcb-45bf-bc42-f569c998d922 1 2018-08-10 09:21:02.382+08 2018-08-10 09:56:08.787+08 145b9864-56d6-41e0-9a6c-3c68394e65e7 6f8504db-8b86-4b33-a0c6-721249b63f46
+18e18a33-9f35-424b-b400-6ede2c984aef 1 2018-08-10 13:58:44.436+08 2018-08-10 13:58:44.436+08 290b9462-1958-4dce-a86f-a0f1c503c660 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e4838c48-621f-497f-8fd5-c49c9ca1b4cb 1 2018-08-10 14:52:45.121+08 2018-08-10 14:52:45.121+08 bbedec49-a055-4238-9e60-98ad22b84379 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1f7f0dab-85e1-4534-9cbb-7ef2233bb7e1 1 2018-10-10 11:27:19.861+08 2018-10-10 11:27:19.861+08 d94bb4f7-d5a8-4bb0-b866-c8008e5123ab 0af1af55-38cd-43c1-abe3-b71570342d40
+ba2ba9d0-be95-455b-b670-307aef99bbc5 1 2018-10-30 22:17:59.321+08 2018-10-30 22:17:59.321+08 b03b1516-7e4a-41a4-9765-a1a485bb998a 5cc45782-5d73-4354-b2c1-4904e284c95b
+0231c7bd-309b-4f78-9936-d012a427497f 1 2018-11-10 11:08:27.8+08 2018-11-10 11:08:27.8+08 7734e171-78b3-4a47-bccf-b812a1cf30f3 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5c3be7dc-ab33-4131-854b-3a252f41281a 1 2018-08-10 16:44:30.631+08 2018-08-10 16:44:30.631+08 0f179575-cae8-4888-a644-1b66be3f8de2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+acf4fc51-1afd-4b17-ab81-5c286376efb4 1 2018-08-16 15:26:39.987+08 2018-11-22 16:03:35.751+08 3553eba2-db23-4cb8-b96d-e0d443644324 8396ee22-73b6-4375-a8be-854a047aecbf
+e3aa6165-6e76-4852-bcca-389784ae48f9 1 2018-08-13 10:56:46.613+08 2018-08-13 10:56:46.613+08 6b2b2d8d-a99b-4052-9a48-2c12125e2f41 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+15e7c745-7a6a-4fcc-9856-2964e2fa817b 1 2018-08-14 14:13:28.646+08 2018-08-14 14:20:59.689+08 0e7784d1-0cbf-46aa-b156-e3361a3251e4 d4f271b6-567a-4880-beb0-161b33ac2094
+3cd692df-6f92-4583-b5d9-c984d06ff486 1 2018-08-14 15:32:39.121+08 2018-08-14 15:32:39.121+08 1c9756ed-dcf4-4156-9a43-09ce478d2038 7667c2d9-3c04-4818-bfeb-42f43b60af77
+d3748bc0-b7f0-4ea1-b32e-8446ddae9b67 1 2018-08-14 16:18:30.088+08 2018-08-14 16:18:30.088+08 ebd999bc-a789-48f2-ac00-a15049b09e50 3d51e3f3-9e3c-4b50-973a-fa7f80af4ba5
+71472f06-593e-411b-adc2-4b3eb520a1a1 1 2018-08-14 16:26:33.738+08 2018-08-14 16:26:33.738+08 3746abdd-af23-4d98-bca0-f29909e0d0c3 3d51e3f3-9e3c-4b50-973a-fa7f80af4ba5
+686bd36b-e28a-435e-9568-0f256b5086e3 1 2018-08-14 16:31:33.436+08 2018-08-14 16:31:33.436+08 e405d9f6-8b46-4089-94e2-1437036d040b 3d51e3f3-9e3c-4b50-973a-fa7f80af4ba5
+4b427bc9-84b9-4440-aff2-645c64601260 1 2018-08-14 16:36:12.213+08 2018-08-14 16:36:12.213+08 1f342dfc-9de3-4d9e-b772-416fa0bfe58a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c1f24df9-8281-4960-9068-09112a7b4087 2 2018-08-14 16:36:12.215+08 2018-08-14 16:36:12.215+08 1f342dfc-9de3-4d9e-b772-416fa0bfe58a 3d51e3f3-9e3c-4b50-973a-fa7f80af4ba5
+27b6c83c-8a53-487a-a8f2-cde18a5da18e 1 2018-08-15 09:48:18.554+08 2018-08-15 09:48:18.554+08 4e3f8da9-5108-45ea-a042-dfab49718c5b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c04eaad9-2d31-4bb1-bf18-63f3caa29a71 1 2018-08-15 10:53:47.747+08 2018-08-15 10:53:47.747+08 a5da9800-2b00-4701-8793-3aaad3e140f6 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b18ce679-ba55-48e9-a324-7b90a90f5f99 1 2018-08-15 13:45:10.78+08 2018-08-15 13:45:10.78+08 0b9ab6dc-b8e5-4f20-a507-567be8892e4f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f3868f75-f941-4354-b7bb-c0d30b07c769 2 2018-08-15 13:45:10.783+08 2018-08-15 13:45:10.783+08 0b9ab6dc-b8e5-4f20-a507-567be8892e4f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+28d0290a-7423-4c1d-8164-7b8762604543 1 2018-08-15 14:38:59.635+08 2018-08-15 14:38:59.635+08 9f845f40-f7bf-4fe7-828e-8f488aff934e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+41073dc9-3180-4266-ae64-ef1d14e174f2 1 2018-08-15 14:39:57.307+08 2018-08-15 14:39:57.307+08 a99d7cc9-7afe-4415-93dd-bcdc193c5121 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2ebb555f-57dc-4dcc-9b91-730615b6ca61 1 2018-08-15 14:40:39.263+08 2018-08-15 14:40:39.263+08 b0c20a76-7e51-479c-9837-1516be5a1567 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+47bbaf8a-77eb-47fa-8d8e-ebc01555ea5e 1 2018-08-15 14:40:50.444+08 2018-08-15 14:40:50.444+08 ada233fb-1f59-4f50-991c-049331716bbf 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+1af2457f-8ccf-4acb-9445-4e81b3c91225 1 2018-08-15 14:41:47.944+08 2018-08-15 14:41:47.944+08 b15e4068-3a0b-43cf-898a-151d9a211756 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b4cb33dc-55b9-4b8f-86cb-ed164802a931 1 2018-08-15 17:13:27.446+08 2018-08-15 17:13:27.446+08 c1738ab8-25cd-4216-823d-0159c2d9fc82 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+5726c1e6-f383-4e73-9286-903d01e69d66 2 2018-11-22 17:39:48.791+08 2018-11-22 17:39:48.791+08 9d5905bc-0969-4032-ad57-69d6490fbc47 1aa841f1-d3fb-4523-9b54-e601d350c745
+389a976f-3036-4ff6-900c-ebf2487c79e3 1 2018-11-23 16:18:45.322+08 2018-11-23 16:18:45.322+08 1db3d346-d4ae-41e3-9a98-d22760482541 3dfadb0e-7608-49e1-aa43-24f7442b424a
+0ea71f12-7747-4d8f-ab2d-06fa78950245 2 2018-11-23 16:18:45.324+08 2018-11-23 16:18:45.324+08 1db3d346-d4ae-41e3-9a98-d22760482541 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5127c2ad-f91e-4619-9edf-973a09cd81b9 2 2018-08-16 15:30:42.251+08 2018-08-16 15:30:42.251+08 3553eba2-db23-4cb8-b96d-e0d443644324 9aece67a-050e-41a4-9b7d-7d890212f385
+f872ce6c-3df6-4a1d-922a-00a70b1c1af2 1 2018-08-10 17:03:20.989+08 2018-08-16 15:59:44.099+08 8cb3528e-cadf-463e-9db2-003bb899ebb6 9aece67a-050e-41a4-9b7d-7d890212f385
+50e9b4d1-2dc0-4ffc-bf5d-f1945b0f012b 1 2018-08-10 16:23:43.221+08 2018-08-16 16:00:02.281+08 030c456b-e97a-42a6-93b7-a6f48fcce4a6 9aece67a-050e-41a4-9b7d-7d890212f385
+703a3444-277d-4e97-8a24-d2cea6881997 1 2018-08-16 16:25:36.768+08 2018-08-16 16:25:36.768+08 7bd233a3-8bb9-45d7-8298-278d0288de46 ad4f23f8-9213-4194-97ce-209a34596649
+0edf5985-412a-448a-891a-5f89db140c8a 1 2018-12-18 16:53:42.371+08 2018-12-18 16:53:42.371+08 00824420-b248-4f1e-9e56-57e8573c9e35 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+da539a47-a027-4fdf-9036-10adb8dffa99 1 2018-12-28 11:30:33.804+08 2018-12-28 11:30:33.804+08 966cf4b9-f411-4764-bad3-2372cd867458 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+77558afc-920c-4316-9a55-b31c4ee1df61 1 2019-01-14 15:51:12.893+08 2019-01-14 15:51:12.893+08 3d8fcd19-8b2a-4d02-8dd3-de8e2c082dcc 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5dbf1e88-6875-442e-b049-c57705ec9fa3 1 2019-02-22 15:14:23.573+08 2019-02-22 15:14:23.573+08 2b04a6d8-4af7-428f-95c9-325800c4b59d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0767af83-f061-4628-8cce-76a442d4b998 1 2019-01-22 09:31:07.195+08 2019-01-22 09:31:07.195+08 20b14a3c-9532-42df-b60c-baf4ba16865c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b6c88e58-4911-4b0b-8735-247bd7b4c383 1 2019-02-22 17:20:51.904+08 2019-02-22 17:20:51.904+08 dcac1d14-912a-4868-8be8-08d1e86d2fa5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2229186b-2e5b-4d19-8175-44c2bc060c0c 1 2019-02-25 13:30:26.991+08 2019-02-25 13:30:26.991+08 6e79c080-ecb3-4222-927e-f2dfcd85683a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6e6be4e9-0c8a-4281-97d5-d61407a645f5 1 2019-02-25 14:24:04.246+08 2019-02-25 14:24:04.246+08 f0443cf8-a24d-46f9-a894-7c731798736d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a71d3565-92e0-406e-93f6-9a5b9edb1917 1 2019-02-25 14:24:04.249+08 2019-02-25 14:24:04.249+08 f0443cf8-a24d-46f9-a894-7c731798736d d0e8f529-c1bf-4146-beef-cd3056ea9787
+3b7f8cc7-cdfb-433c-b2b1-3e94e0bb57af 1 2019-02-25 14:24:04.251+08 2019-02-25 14:24:04.251+08 f0443cf8-a24d-46f9-a894-7c731798736d 118383e6-1b61-4e15-8dee-a1a2a61b531e
+688625b2-bc87-49e2-8183-5ea065fe988c 1 2019-02-25 16:03:31.495+08 2019-02-25 16:03:31.495+08 f7cf6cc3-3067-42c4-8d9d-85df26882451 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e
+9e907320-86e4-4bf3-b588-927cf6d6b615 1 2019-03-27 10:22:14.196+08 2019-03-27 10:22:14.196+08 6d7ee2b6-ee61-4933-9f14-9378592187da 68238334-fea4-4bc0-b1cd-98456c41faab
+4e70af5d-5886-4442-a56c-9a7e6c65eaee 2 2019-04-16 10:59:31.907+08 2019-04-16 10:59:31.907+08 752edd7f-ca25-4a19-bf4a-53a700f2556a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+91a56b17-bd72-425a-b6fd-0c58a143058a 1 2019-04-23 15:05:42.79+08 2019-04-23 15:05:42.79+08 272894c2-dcd9-4a14-8205-f1e9a093f3cd 7bc18b0f-46d5-403a-893a-029eed333a46
+89933af4-5fcc-4055-b42c-4f6ba258dae3 1 2019-02-25 13:30:26.994+08 2020-04-14 10:24:11.138+08 6e79c080-ecb3-4222-927e-f2dfcd85683a 25642488-1945-4865-81e7-e9593c12d208
+9da50509-5f5e-41f3-b078-2be4bc483f28 1 2019-06-11 16:42:42.394+08 2019-06-11 16:42:42.394+08 7fae0d43-0664-4c19-9d35-db80a97b6da2 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+93585b8f-19ad-4e59-a78d-a9b4db270b0f 1 2019-06-11 16:42:42.397+08 2019-06-11 16:42:42.397+08 7fae0d43-0664-4c19-9d35-db80a97b6da2 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9b003e5b-94a2-403d-bafe-8da8d349c4a0 1 2019-06-11 16:47:18.526+08 2019-06-11 16:47:18.526+08 3636e235-3352-4944-8092-c0b68a659ef1 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+f84dd7a8-a8a7-457d-9e2f-a80a0f866200 1 2019-06-11 16:47:18.529+08 2019-06-11 16:47:18.529+08 3636e235-3352-4944-8092-c0b68a659ef1 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f5729179-77d7-43ba-b619-fdbffd719155 1 2019-06-11 17:11:17.099+08 2019-06-11 17:11:17.099+08 d52023ca-77dc-4b31-941a-5cb6d2b1a297 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+f1622883-4682-42a2-b06f-85d0f35881e9 1 2019-06-11 17:18:00.719+08 2019-06-11 17:18:00.719+08 67f6e3ca-2368-45ff-a678-53f942e71caa 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+7d00bdfc-22b4-4369-aee0-bffe91fe1e52 1 2019-06-11 17:18:00.722+08 2019-06-11 17:18:00.722+08 67f6e3ca-2368-45ff-a678-53f942e71caa 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+50837f7d-3037-44e0-a8c4-99aa7c6c6d24 1 2019-06-11 17:20:41.951+08 2019-06-11 17:20:41.951+08 4f72b98e-690d-429f-9b64-ab8de1c41a0b 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+d755e19b-5182-44e4-8053-3c670552773f 1 2019-06-11 17:20:41.954+08 2019-06-11 17:20:41.954+08 4f72b98e-690d-429f-9b64-ab8de1c41a0b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a8f79317-c98e-4a7e-8b54-5135e22f7e37 1 2019-06-11 17:24:10.302+08 2019-06-11 17:24:10.302+08 96e0e6a4-fb0a-4e01-ba5b-1ab1feff3aee 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+0cff1454-261b-4273-aced-f792a7e564cf 1 2019-06-11 17:24:10.304+08 2019-06-11 17:24:10.304+08 96e0e6a4-fb0a-4e01-ba5b-1ab1feff3aee 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+73d602d6-5deb-4c31-93ed-14ce2e0ba09e 1 2019-06-11 17:28:58.61+08 2019-06-11 17:28:58.61+08 14068f43-74c6-48e8-b004-29eefa28fd36 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+1f2484a1-2aec-45e0-82a9-21c642800c35 1 2019-06-11 17:32:28.566+08 2019-06-11 17:32:28.566+08 958debc4-8460-4237-a960-d51a6a866071 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+268d743b-a7ae-4a56-a182-a625c6ca57ef 2 2019-06-14 11:20:06.174+08 2019-06-14 11:20:06.174+08 c8c925b5-d496-4eb8-a0c7-189ce391ff1a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+bc4fa7e9-4d2c-43da-ad06-0870638b5c4e 1 2019-06-14 11:20:06.172+08 2020-06-12 09:21:59.348+08 c8c925b5-d496-4eb8-a0c7-189ce391ff1a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7d40d4ad-ac31-4eb1-b9d8-c7fc8844ded5 1 2019-06-18 11:02:55.441+08 2019-06-18 11:02:55.441+08 9c72853f-96b7-41a6-ab9e-10eafbf22a10 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f89b5fe4-284c-47da-9883-f515e6d73929 1 2019-06-18 15:44:35.489+08 2019-06-18 15:44:35.489+08 8b3a3d99-7016-4c26-b6b6-65b742fcfc8b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+87e3b279-9de3-4649-9936-4d255890f9e9 1 2019-06-18 15:48:02.201+08 2019-06-18 15:48:02.201+08 e8b1dd32-dd34-4923-a91d-e21f81210749 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+99f48679-0083-474b-a125-a3c4f4180626 1 2019-06-19 13:58:50.986+08 2019-06-19 13:58:50.986+08 91fc5de6-ad9d-47e3-ace2-1c2bd04979e5 452e3349-a87b-4b5b-97f9-7dc730f910fa
+add2ae46-f882-4fef-8a49-3bceea7fed6c 1 2019-06-19 17:34:39.411+08 2019-06-19 17:34:39.411+08 1b795716-096c-409d-8b43-290e31a0d4d5 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+009461bc-fccf-4311-a769-a2d7dc5e05fa 1 2019-06-20 09:22:50.967+08 2019-06-20 09:22:50.967+08 b10f2486-b1e8-48d6-8683-216a40bcb3bb 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+559c9c33-544e-421d-ae15-3a68d3a2c6a3 1 2019-06-20 16:55:24.372+08 2019-06-20 16:55:24.372+08 5b797de0-bd75-4cc6-9bb7-4811869ba7d3 66537b16-1e7d-4823-b03e-676459f5891d
+d0e64f70-800d-4a6c-9488-47968026da81 2 2019-06-20 16:55:24.375+08 2019-06-20 16:55:24.375+08 5b797de0-bd75-4cc6-9bb7-4811869ba7d3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+5c5d9637-e662-4957-aff8-a2c4004f2fd4 1 2019-06-21 13:52:33.007+08 2019-06-21 13:52:33.007+08 2ea1c0ff-9d04-4a29-addb-ceaf8b4c1744 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5b9c612c-792f-4e87-994d-1243df194f42 2 2019-06-24 16:49:45.129+08 2019-06-24 16:49:45.129+08 ec7b0da8-24a8-48ad-b64a-0ea416189d8a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+5aae81c0-30fe-4213-a681-58a6233419b9 1 2019-06-24 16:49:45.132+08 2019-06-24 16:49:45.132+08 ec7b0da8-24a8-48ad-b64a-0ea416189d8a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f4e5cb7a-c6da-4082-a9e6-7ce7fa47cc20 1 2019-06-25 11:39:02.381+08 2019-06-25 11:39:02.381+08 3d52e349-bf19-46d5-bb7e-f1f533d10190 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c416461c-d178-40d0-8285-9b9c160d0065 1 2019-06-26 11:57:22.681+08 2019-06-26 11:57:22.681+08 32a78a97-fea6-477a-9cfd-7f512d81b40c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8781643d-2409-419a-bef2-9fc163b064c4 1 2019-06-25 15:49:19.312+08 2019-06-25 15:49:19.312+08 239fdc2a-bd0a-4cd6-b0c4-f7371f99f620 66537b16-1e7d-4823-b03e-676459f5891d
+6d14cdaf-b1e2-431a-8696-9509d87aee1b 1 2019-06-27 09:35:05.7+08 2019-06-27 09:35:05.7+08 9f8addd9-3d2e-434c-bc28-e73322276c7a 3dfadb0e-7608-49e1-aa43-24f7442b424a
+4a91580f-4a23-43ca-abc5-60af4f1222ea 2 2019-06-27 09:35:05.703+08 2019-06-27 09:35:05.703+08 9f8addd9-3d2e-434c-bc28-e73322276c7a 8396ee22-73b6-4375-a8be-854a047aecbf
+e52dbdd8-6a51-4429-b070-a5b11884694a 1 2019-06-27 09:35:12.068+08 2019-06-27 09:35:12.068+08 f41380a3-bc12-4229-8b46-67472fd5d9b3 8396ee22-73b6-4375-a8be-854a047aecbf
+4de5bbb0-6933-4c1d-aa54-ff9347815cbb 2 2019-06-27 09:35:12.072+08 2019-06-27 09:35:12.072+08 f41380a3-bc12-4229-8b46-67472fd5d9b3 9aece67a-050e-41a4-9b7d-7d890212f385
+a0a487d5-b5b6-4602-91fc-41239e82d20b 1 2019-06-27 09:35:21.02+08 2019-06-27 09:35:21.02+08 4b13a538-ac93-4bc0-8515-4181c57b8650 9aece67a-050e-41a4-9b7d-7d890212f385
+1541e9b2-2463-4eb4-afab-8f459c685039 1 2019-06-27 09:35:29.133+08 2019-06-27 09:35:29.133+08 d1d8105f-3b3d-4c89-a378-2e76afbb6f36 9aece67a-050e-41a4-9b7d-7d890212f385
+f6523358-73a3-44a6-8f22-21d34be28fea 1 2019-06-27 13:03:58.345+08 2019-06-27 13:03:58.345+08 1c182e32-a4cb-4882-991a-be791c200d73 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a3ab42f1-102e-48f9-a2f4-2909dfc0a17e 1 2019-06-27 14:07:45.232+08 2019-06-27 14:07:45.232+08 db69fe15-3a1d-46c9-9e21-5bef4ff4e964 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+044e1eb3-8c5a-4dc8-9614-dd62a06cc150 1 2019-06-27 14:28:06.362+08 2019-06-27 14:28:06.362+08 35ce9dd7-8476-4933-8a0a-27ada0e8ddf0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+84c28951-d376-4903-86d6-3bc2c3418056 1 2019-06-27 15:43:13.191+08 2019-06-27 15:43:13.191+08 193aabad-c6d8-4ec6-8ca5-df2c25ae71e2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8fecc0b1-a948-400f-bcf4-af4cddf275a7 1 2019-06-27 17:01:33.25+08 2019-06-27 17:01:33.25+08 65b11e66-836c-4898-bde7-46706a2f74af 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cefad036-368d-4a98-8734-002ed67fc3a1 1 2019-06-27 17:34:29.067+08 2019-06-27 17:34:29.067+08 4657f5dd-e39e-4be0-bc95-833443066096 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ae5df136-4e9a-4d47-8da8-203c182bd2ea 1 2019-06-28 09:51:38.279+08 2019-06-28 09:51:38.279+08 f25dac37-cd4c-4f51-b8ff-1d5d051fb21e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+43b0b89f-672b-4eba-b75c-7b79070559a3 1 2019-06-28 14:47:16.383+08 2019-06-28 14:47:16.383+08 0df71d00-3d48-44a5-9c6f-8cceae090b0d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+798f8501-1446-455c-82cb-c27ad5f882ff 1 2019-07-03 11:33:19.105+08 2019-07-03 11:33:19.105+08 de5f1899-8b36-4792-b34f-44a6f7748a86 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+713325ff-e2f9-46b9-bab4-b34d6b901fa9 1 2019-07-04 10:06:40.273+08 2019-07-04 10:06:40.273+08 433dc632-5b76-47eb-8a4f-eb40b4ba71bb 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cd20aaeb-723e-44d3-89ac-4d55a2b3e676 2 2019-07-04 10:06:47.997+08 2019-07-04 10:06:47.997+08 433dc632-5b76-47eb-8a4f-eb40b4ba71bb 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9bed84a7-4d4e-4198-9bb4-2660d0fac4af 1 2019-07-22 16:03:30.007+08 2019-07-22 16:03:30.007+08 68885fd4-0280-410a-bf22-3afadec546f2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0821e034-0233-4466-97ad-13ab408fabcf 1 2019-07-06 16:53:20.94+08 2019-07-06 16:53:20.94+08 d926295e-4fda-4948-a719-bf6e04d96ddb 27a58884-75a3-4f5d-94f6-37cc15d419fb
+233421dd-1b04-4a3f-95f6-0010e886fa91 2 2019-07-06 16:53:20.944+08 2019-07-06 16:53:20.944+08 d926295e-4fda-4948-a719-bf6e04d96ddb f3eee31e-d2c2-481e-9d6a-93cd469e4c63
+5b242533-ee4b-4858-b1fa-3a64373c8be3 1 2019-07-06 16:55:42.74+08 2019-07-06 16:55:42.74+08 6980d68e-b6b4-4ab2-a048-042672a46cef c41d198c-435b-4551-ae66-b74be2c022d6
+4193e471-7176-4c42-bb41-e59636bf8d32 1 2019-07-06 17:22:08.736+08 2019-07-06 17:22:08.736+08 7b879c12-2bc2-4ff7-a2ba-b730169c30c9 c41d198c-435b-4551-ae66-b74be2c022d6
+73b9913c-69ad-4369-b6e7-7285b7e99df3 1 2019-07-08 18:21:40.576+08 2019-07-08 18:21:40.576+08 54335927-f86b-44bd-aebe-f07fc9cddaed 3dfadb0e-7608-49e1-aa43-24f7442b424a
+5581da8c-810c-4a01-9304-d17b2e107e21 2 2019-07-08 18:21:40.582+08 2019-07-08 18:21:40.582+08 54335927-f86b-44bd-aebe-f07fc9cddaed 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cbad1c10-70d1-4f59-b5cb-6896f2134b6e 1 2019-07-09 08:53:49.451+08 2019-07-09 08:53:49.451+08 df281eec-f674-4f68-bd65-ed56abf4f20c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f406feb9-ffd0-4a31-9014-b8556f83b6df 1 2019-07-09 15:00:57.812+08 2019-07-09 15:00:57.812+08 676c48ff-13c3-426f-9871-989570d76ef9 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+77f2a844-f5a5-4fd5-93cc-2213ad29136e 1 2019-07-09 15:05:43.54+08 2019-07-09 15:05:43.54+08 c2508e96-b2cc-4a5f-8015-aa9492a11193 8396ee22-73b6-4375-a8be-854a047aecbf
+b3d5311e-324b-4d26-9db3-c7ad064ebd7b 2 2019-07-09 15:05:43.545+08 2019-07-09 15:05:43.545+08 c2508e96-b2cc-4a5f-8015-aa9492a11193 9aece67a-050e-41a4-9b7d-7d890212f385
+a5793abe-68ce-4ca1-8f10-4a1361eab80a 1 2019-07-09 15:10:11.903+08 2019-07-09 15:10:11.903+08 4fa8750d-807d-4c0c-9526-2662418f6f2f 9aece67a-050e-41a4-9b7d-7d890212f385
+a806dc77-31eb-4de2-8dee-3003478abefb 1 2019-07-15 13:27:37.571+08 2019-07-15 13:27:37.571+08 01da29ac-f803-4381-ae7f-28264effac4f c41d198c-435b-4551-ae66-b74be2c022d6
+4085b18f-dd96-4757-a9c9-baa3f2b6a431 1 2019-07-15 14:04:02.918+08 2019-07-15 14:04:02.918+08 151950ee-2a96-4cb7-a2c7-8b8e15dcae36 c41d198c-435b-4551-ae66-b74be2c022d6
+036cfbb1-ba1f-4ba0-b79d-eae5a887301d 1 2019-07-15 14:31:13.671+08 2019-07-15 14:31:13.671+08 7b8591c6-00a5-4a8f-9da0-f325fc60e8fa c41d198c-435b-4551-ae66-b74be2c022d6
+7eb81fa0-516a-4904-83d6-eb999a1561c4 1 2019-07-16 17:46:08.886+08 2019-07-16 17:46:08.886+08 d3d5de96-da53-4adb-b8f8-29d0e0c8209c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9c899e73-1ae7-4049-8fc6-1299a4471683 1 2019-07-17 14:29:44.528+08 2019-07-17 14:29:44.528+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 6c0898f5-e8da-495b-8718-6efba367e3f1
+44e24e0e-8518-425f-a76c-4c0cc9b2e09a 1 2019-07-17 14:29:44.531+08 2019-07-17 14:29:44.531+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 7667c2d9-3c04-4818-bfeb-42f43b60af77
+4373927e-eeba-4ddd-8060-3ce22d76a092 1 2018-04-03 09:04:11.238+08 2019-07-18 11:50:09.119+08 6def140f-5189-490c-ab4c-57e84dfcd3bf 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+24f0b253-b144-44db-bb05-9f7a23a6af04 2 2019-07-22 10:33:56.621+08 2019-07-22 10:33:56.621+08 6d2dad31-9715-4522-a382-9b1b99f9bebc 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3e0f6804-6e7b-4de6-bb21-8f12309fd10e 1 2019-07-23 09:33:53.802+08 2019-07-23 09:33:53.802+08 a83dcd92-561e-40ba-b71c-b6d062d2bcb3 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+13cd7a9a-72bf-45d5-bc31-29a2ffd319ee 1 2019-07-23 11:13:52.728+08 2019-07-23 11:13:52.728+08 8830f3b8-1be3-48ae-b1d0-8a9583cf4a18 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e6b7a194-c779-4946-bf01-10b2337bb8c0 1 2019-07-23 19:49:43.328+08 2019-07-23 19:49:43.328+08 131c98fc-2216-4f0f-9cd3-581d88f9affd 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+720e6f6d-551b-4c1d-95ea-497b8a0c5495 1 2019-07-23 19:52:40.06+08 2019-07-23 19:52:40.06+08 9e8050a9-f38a-45c3-a02b-40670bdf19b7 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d0ef103e-0f08-4d7e-bfb0-5d83d5fe6229 1 2019-07-23 20:06:29.84+08 2019-07-23 20:06:29.84+08 bff19d80-ce20-4c3d-b158-df091a1fb5ac 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ad4ff171-1622-4d98-be68-31ccc47670ce 1 2019-07-23 20:33:01.325+08 2019-07-23 20:33:01.325+08 7efbc3e8-ff6b-433b-9041-c76b9df89644 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b57f5ef5-3222-4954-a846-5947bdcd8fdd 2 2019-07-24 16:48:20.906+08 2019-07-24 16:48:20.906+08 d926295e-4fda-4948-a719-bf6e04d96ddb 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a5fe8095-bd72-41c5-adeb-cfda5c403460 1 2019-07-24 17:41:18.534+08 2019-07-24 17:41:18.534+08 64af86ba-2ede-48c5-b410-7e40264cdd8a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+55e7472f-14ef-49f5-a5bf-e9883ab12aaa 1 2019-07-26 11:18:48.463+08 2019-07-26 11:18:48.463+08 70cf173e-f529-4704-805e-193f1a6478cc 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+577193c0-1b0d-478b-9564-5e4fbdeb93a7 1 2019-07-31 10:14:14.845+08 2019-07-31 10:14:14.845+08 390e46cc-b69d-4966-89f4-d305afdd4649 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+77cd6691-869c-430a-963f-76d142e0fc59 1 2019-07-31 16:04:11.145+08 2019-07-31 16:04:11.145+08 ce76608b-0e66-4498-b079-51aa9f03c950 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+559bdbfa-e05f-4b4b-9c3c-749a8796d6ad 2 2019-08-01 15:00:23.353+08 2019-08-01 15:00:23.353+08 f75a7b9a-2288-4f05-b3ec-5f17a297e53c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+443334e7-e33b-42a5-a28b-c6d5236a3bdc 1 2019-08-01 15:00:23.355+08 2019-08-01 15:00:23.355+08 f75a7b9a-2288-4f05-b3ec-5f17a297e53c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5db05fad-c8d0-49d4-b1b4-fdc4d103a4f2 1 2019-08-05 09:26:28.911+08 2019-08-05 09:26:28.911+08 32349c76-d117-4331-8a10-9b7ea057c2ab 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+65521918-9732-4999-926f-7ce8eb88b1f6 2 2019-08-05 18:12:12.132+08 2019-08-05 18:12:12.132+08 077e62b4-27da-47aa-846d-3d9169a8a895 f03c622c-30e7-47a4-a0de-cd681dc2fe61
+c68e5d05-a0df-41b4-a083-bf39676b5f16 1 2019-08-05 18:12:12.135+08 2019-08-05 18:12:12.135+08 077e62b4-27da-47aa-846d-3d9169a8a895 3dfadb0e-7608-49e1-aa43-24f7442b424a
+755738d1-45b6-4543-9264-338035fde289 1 2019-08-05 18:14:48.654+08 2019-08-05 18:14:48.654+08 1c7ee1c6-3d99-4236-834f-6e0746c0f69f f03c622c-30e7-47a4-a0de-cd681dc2fe61
+4d8a4ac7-6094-40d6-bb4b-e33b738d5a16 2 2019-08-05 18:14:48.657+08 2019-08-05 18:14:48.657+08 1c7ee1c6-3d99-4236-834f-6e0746c0f69f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ac6b47f4-f4e5-4116-9ecb-ea3a596d6c87 1 2019-08-06 11:00:53.835+08 2019-08-06 11:00:53.835+08 df7ff0f8-b92c-4856-a1af-bf3244a8610a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+54b161a3-81b0-49ea-b3d9-cb5d47a99dc4 2 2019-08-06 11:19:09.202+08 2019-08-06 11:19:09.202+08 077e62b4-27da-47aa-846d-3d9169a8a895 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9ca0fc98-cca7-4941-9663-845bae9ea161 1 2019-08-07 10:27:08.67+08 2019-08-07 10:27:08.67+08 f0c82197-9e9a-42f2-a4e2-541c52deff52 66537b16-1e7d-4823-b03e-676459f5891d
+80138d2f-53ed-49be-858d-24c7e02f1c02 2 2019-08-07 10:27:16.302+08 2019-08-07 10:27:16.302+08 f0c82197-9e9a-42f2-a4e2-541c52deff52 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+651fa16d-db86-4bc6-ab8b-b897d720abda 1 2019-08-07 10:33:57.304+08 2019-08-07 10:33:57.304+08 6fb1b711-d8c0-489d-9751-524410c27bcc 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4bc02775-53a6-4460-b702-ad1052ca5d16 1 2019-08-07 10:40:39.043+08 2019-08-07 10:40:39.043+08 bfe0979a-c0e4-4430-89d3-5fbe86568640 6eeb1913-71e2-40b2-ae39-c8750cbdefd7
+6d08c994-d603-4e9e-b947-bf42d2b9e13c 2 2019-08-07 10:40:39.053+08 2019-08-07 10:40:39.053+08 bfe0979a-c0e4-4430-89d3-5fbe86568640 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22
+77004a14-a2ed-4d11-9ea8-56f65d28c2bf 2 2019-08-07 10:40:39.055+08 2019-08-07 10:40:39.055+08 bfe0979a-c0e4-4430-89d3-5fbe86568640 118383e6-1b61-4e15-8dee-a1a2a61b531e
+0ad61fb2-86a7-4e3b-a8d4-08d93504f82c 2 2019-08-07 10:40:39.057+08 2019-08-07 10:40:39.057+08 bfe0979a-c0e4-4430-89d3-5fbe86568640 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+9933d869-0d51-4438-b0ad-e60c286a751d 2 2019-08-08 15:55:26.526+08 2019-08-08 15:55:26.526+08 8e44219e-9d4e-40ed-85b7-85dd24f8e821 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+5988c18f-590f-492e-a15b-dedb507026b5 1 2019-08-08 15:55:26.528+08 2019-08-08 15:56:25.195+08 8e44219e-9d4e-40ed-85b7-85dd24f8e821 66537b16-1e7d-4823-b03e-676459f5891d
+f2304d99-4332-428d-bb9b-c9114a9920d2 1 2019-08-08 17:57:28.949+08 2019-08-08 17:57:28.949+08 9de2769d-cd81-43c4-ae6d-82f4cb9431de 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3272414d-9f0c-4b06-8b0a-a795eb6efd7b 2 2019-08-09 13:11:50.736+08 2019-08-09 13:11:50.736+08 3758c306-d352-4ff8-b9ef-470a58efa0a4 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+124bb216-6d3f-4102-bc69-bbbd616d74f9 1 2019-08-09 13:14:23.267+08 2019-08-09 13:14:23.267+08 3758c306-d352-4ff8-b9ef-470a58efa0a4 da330369-58e7-4bce-8bc1-3c0a062dd1a0
+b6842940-36df-42a2-88c5-b23821666a3b 2 2019-08-09 13:14:42.97+08 2019-08-09 13:14:42.97+08 3758c306-d352-4ff8-b9ef-470a58efa0a4 efc73d5c-867e-4feb-82f6-2c5afb8c432f
+2d14a681-e0d3-4bdd-baa9-55d66f12a7e7 1 2019-08-12 09:55:16.277+08 2019-08-12 09:55:16.277+08 e257dc56-f70f-4ba8-b653-c5d047f9edba 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e04f7d4c-fa14-4062-9c51-d6b0339fa07b 1 2019-08-13 17:52:48.303+08 2019-08-13 17:52:48.303+08 a7c51497-66e3-4e63-aa6f-7b243fb8ea77 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+89c979fe-c1e6-4f97-bb91-23de053d3180 1 2019-08-19 10:39:47.469+08 2019-08-19 10:39:47.469+08 aa0e3416-fabe-4415-a848-d6cd84a500dd 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e421f6ea-3b1e-496b-a895-4b7b541647f3 1 2019-08-22 09:13:02.113+08 2019-08-22 09:13:02.113+08 5b40bb69-7692-4cee-b6df-bd7871764131 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3375723c-28e2-4d43-a5c2-e10974373d01 1 2019-08-22 10:37:57.817+08 2019-08-22 10:37:57.817+08 d6189068-bb18-4c68-a359-8e3139ab22e5 3dfadb0e-7608-49e1-aa43-24f7442b424a
+c989c701-e938-4278-b25a-c8e62760f036 1 2019-08-22 11:03:45.614+08 2019-08-22 11:25:38.861+08 0b09cbd9-3881-4b4a-8910-0e8730d5d935 5afb303e-0963-4e23-91f7-2b41f543aaf6
+2d09e805-1771-43ab-8e3d-93d9a208b45e 1 2019-08-22 11:08:55.775+08 2019-08-22 11:26:30.878+08 8fcb81d8-34ce-41b8-93c9-69d15060fa40 5afb303e-0963-4e23-91f7-2b41f543aaf6
+cbbb0c0f-8a80-4df3-87cb-d80512c19639 1 2019-08-22 11:27:17.555+08 2019-08-22 11:27:17.555+08 4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66 5afb303e-0963-4e23-91f7-2b41f543aaf6
+481831b6-0c92-41af-b346-fefa2646f3db 2 2019-08-22 11:35:42.402+08 2019-08-22 11:35:42.402+08 d6189068-bb18-4c68-a359-8e3139ab22e5 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500
+29c6d92b-4c71-4826-a921-8ceb10b7560d 1 2019-08-22 11:37:17.694+08 2019-08-22 11:37:17.694+08 0a341896-3c5d-4e60-af19-fe5f645c6967 66a06e5d-a436-4d37-806b-919d8fd1c564
+eecdc85d-85a0-4dca-aae0-dec7fd23b8a7 1 2019-08-22 11:41:35.943+08 2019-08-22 11:41:35.943+08 4142b1cc-3576-456b-b0e4-31e68cc16b32 66a06e5d-a436-4d37-806b-919d8fd1c564
+2ce5d834-0933-4b80-92a1-0f8e07c12cae 1 2019-08-22 14:08:59.397+08 2019-08-22 14:08:59.397+08 19bb2b93-6e2e-4861-95df-67a68bc71fc4 66a06e5d-a436-4d37-806b-919d8fd1c564
+9631f2f6-6210-42e2-a6de-6bba2aab0c84 1 2019-08-22 14:16:59.518+08 2019-08-22 14:16:59.518+08 6ac55754-f252-4ba5-ba9c-72a158734b97 66a06e5d-a436-4d37-806b-919d8fd1c564
+a4f761da-30fe-4ab6-9723-15ddfee5a122 1 2019-08-22 14:20:31.241+08 2019-08-22 14:20:31.241+08 03f53a90-43a0-47d6-9183-edfb825a09e5 66a06e5d-a436-4d37-806b-919d8fd1c564
+880b9fcc-cf91-4493-8a91-62eff6c334c5 1 2019-08-22 14:22:24.814+08 2019-08-22 14:22:24.814+08 6e1d3878-3ea2-4c73-9137-0ef98781be0c 66a06e5d-a436-4d37-806b-919d8fd1c564
+307bc98c-b426-44ab-9e27-a1054d3901f9 2 2019-08-22 14:36:10.875+08 2019-08-22 14:36:10.875+08 a0d7ec2d-24f8-4039-b175-8921c00c1f4f 5afb303e-0963-4e23-91f7-2b41f543aaf6
+3950b96f-a504-4ff4-bd8c-3ea8e4d79dca 2 2019-08-22 14:36:10.877+08 2019-08-22 14:36:10.877+08 a0d7ec2d-24f8-4039-b175-8921c00c1f4f 66a06e5d-a436-4d37-806b-919d8fd1c564
+80b44ba8-223b-4f00-b532-703d4aed26ad 2 2019-08-22 14:36:10.879+08 2019-08-22 14:36:10.879+08 a0d7ec2d-24f8-4039-b175-8921c00c1f4f 936f5813-db0d-4a2a-a7bc-8d323024140b
+3a45f740-c977-47f3-adee-712981f14584 1 2019-08-22 14:36:10.881+08 2019-08-22 14:36:10.881+08 a0d7ec2d-24f8-4039-b175-8921c00c1f4f 6f9486b4-6b22-4fbd-a73a-9334e711badb
+e86b98d4-8ec7-4755-bf2e-69b4e3b612c2 2 2019-08-27 09:48:38.222+08 2019-08-27 09:48:38.222+08 ec8018e2-1de6-4384-ac85-01405362dc83 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+191ea0f6-1f56-4d21-afd5-79e38a293bed 1 2019-08-27 09:48:38.224+08 2019-08-27 09:48:38.224+08 ec8018e2-1de6-4384-ac85-01405362dc83 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3538712f-979f-4a0b-8023-88d67e679dd2 1 2019-08-27 15:43:12.965+08 2019-08-27 15:43:12.965+08 3bf54b2d-1623-4920-80c2-4e1f7407b318 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e7bc168f-4187-4d39-826a-117d253cb165 1 2019-08-27 16:31:15.672+08 2019-08-27 16:31:15.672+08 8c23f875-86cf-4fe7-a315-526c7a1d0187 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8edb15e2-2c8d-4166-907c-65607aee4f74 1 2019-08-29 09:09:46.396+08 2019-08-29 09:09:46.396+08 12253047-b588-4225-9f55-e6282003788a 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500
+9c2a669f-c447-4983-8831-49d8e75ee00f 2 2019-08-30 14:28:31.128+08 2019-08-30 14:28:31.128+08 421933bd-e149-4d7c-ad95-ef8aa2a2692c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9d1ce8fd-956a-40fa-b181-f8d296c84a15 1 2019-08-30 14:28:31.13+08 2019-08-30 14:28:31.13+08 421933bd-e149-4d7c-ad95-ef8aa2a2692c 3dfadb0e-7608-49e1-aa43-24f7442b424a
+4fdf90fe-1ffa-4099-96ac-7f29ac3d8c02 1 2019-09-04 13:53:37.952+08 2019-09-04 13:53:37.952+08 c3ed0f20-828b-46bd-b8ef-b7821cd0fcce 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+03c376a5-0560-46ee-a25e-2b099734a83a 1 2019-09-04 15:11:13.142+08 2019-09-04 15:11:13.142+08 7efbc3e8-ff6b-433b-9041-c76b9df89644 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+94a57fd5-7132-46a4-bd02-c8bf82b23612 1 2019-09-04 15:22:23.211+08 2019-09-04 15:22:23.211+08 1c9756ed-dcf4-4156-9a43-09ce478d2038 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+b0fab7ce-8158-48ad-8adc-7afd0fd05b6f 1 2019-09-04 15:40:23.386+08 2019-09-04 15:40:23.386+08 aa630d67-b466-4f6a-9a04-fe5744954d20 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+e45fe22a-617a-4c7b-81bc-fab457214014 1 2019-09-04 15:48:38.134+08 2019-09-04 15:48:38.134+08 e600502e-b2ff-466a-9fa6-b9e9e554647c 66a06e5d-a436-4d37-806b-919d8fd1c564
+656a3518-d900-4a80-8f78-1ddd189e4a99 1 2019-09-04 16:08:29.522+08 2019-09-04 16:08:29.522+08 0e7784d1-0cbf-46aa-b156-e3361a3251e4 66a06e5d-a436-4d37-806b-919d8fd1c564
+49507ddb-ae8d-4d86-82d3-6514d327495e 1 2019-09-05 11:41:01.275+08 2019-09-05 11:41:01.275+08 e61d9a9e-3d7f-4488-a60e-252b429dcb7b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f9548d10-632f-4697-b602-a1ab9a9842d4 2 2019-09-05 11:41:01.278+08 2019-09-05 11:41:01.278+08 e61d9a9e-3d7f-4488-a60e-252b429dcb7b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+03bbaf0f-a95e-4fc3-8be0-f1bb133e6c59 1 2019-09-10 14:47:17.461+08 2019-09-10 14:47:17.461+08 70c53b9c-f7ec-48ce-b790-bd96754d2d3b 66537b16-1e7d-4823-b03e-676459f5891d
+1c6fff73-3ce7-4ad2-9d35-9d56b4546354 1 2019-09-10 16:52:37.739+08 2019-09-10 16:52:37.739+08 42eb2303-14bd-4431-9ca6-d5b8b2590d1d 66a06e5d-a436-4d37-806b-919d8fd1c564
+a901b930-3d22-42d7-a4c5-fa642e4d6d6a 1 2019-09-10 16:52:37.742+08 2019-09-10 16:52:37.742+08 42eb2303-14bd-4431-9ca6-d5b8b2590d1d d4f271b6-567a-4880-beb0-161b33ac2094
+c9a6c01a-1560-452d-9a35-679537571bf2 1 2019-09-10 16:52:37.744+08 2019-09-10 16:52:37.744+08 42eb2303-14bd-4431-9ca6-d5b8b2590d1d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0b4f22fa-ae6a-4447-885d-35c6ef622b78 1 2019-09-11 10:15:40.123+08 2019-09-11 10:15:40.123+08 f34762e6-6532-434e-93a0-74c119cfc58a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+618e7f9f-11ec-480e-8851-e26d099ea06c 1 2019-09-11 11:36:45.977+08 2019-09-11 11:36:45.977+08 798b891d-6c34-4219-bde6-a8d957643010 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+dcee217a-22ab-4996-9ad1-03c62a6b4902 1 2019-09-11 11:57:38.68+08 2019-09-11 11:57:38.68+08 36ddd8af-d58c-4496-ae9a-ce9cb9786cd5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+405f26fd-abc1-46d4-8f41-3a60c6765ed4 1 2019-09-16 16:50:20.696+08 2019-09-16 16:50:20.696+08 c89d02cd-f052-4004-aa3e-93906248a62b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b65ec323-0509-46fe-9d0c-52e8330fb545 1 2019-09-17 09:35:34.083+08 2019-09-17 09:35:34.083+08 69f9043f-2ce4-4d39-97fe-94f6c2f6185c e498b9c2-546f-4bba-9ab6-0c575a49d452
+7e256ea6-aa85-4094-a615-21f74404888d 1 2019-09-19 09:38:03.004+08 2019-09-19 09:38:03.004+08 6225c8bb-1497-4354-ad28-e5eb698de9f0 66537b16-1e7d-4823-b03e-676459f5891d
+7b77f258-5b0f-462b-af44-d56a62868dd7 2 2019-09-19 09:38:18.854+08 2019-09-19 09:38:18.854+08 6225c8bb-1497-4354-ad28-e5eb698de9f0 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+cd348cb5-97c6-4981-8022-26e74e9d0b35 1 2019-09-19 12:41:51.98+08 2019-09-19 12:41:51.98+08 8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+5e03d125-7525-421a-9697-995ac40df8f5 1 2019-09-19 16:33:42.714+08 2019-09-19 16:33:42.714+08 a6d30b7e-a718-4cbf-80be-2ddefa2445ab 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+c38840bc-94d7-4887-9f97-2851fd59423d 1 2019-09-23 14:19:34.132+08 2019-09-23 14:19:34.132+08 c209cbd1-8662-42e5-81d2-6cba239aa394 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a8ef0337-c5b6-4849-b968-15f8350bbe6c 2 2019-09-23 14:19:34.136+08 2019-09-23 14:19:34.136+08 c209cbd1-8662-42e5-81d2-6cba239aa394 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+5e16458b-b726-48c0-b781-96f28b18ecc4 1 2019-09-24 11:35:39.893+08 2019-09-24 11:35:39.893+08 da5f4309-1696-4853-94ef-f11b9d0602e0 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+24ad6c87-e81b-45f9-b240-fddaba5e2b44 1 2019-09-24 11:35:42.441+08 2019-09-24 11:35:42.441+08 59e0e84c-3ab8-485a-a6fc-d880a79b296a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e8db6360-e3df-44ba-b4d7-270b6b3fccbd 1 2019-09-24 11:44:07.131+08 2019-09-24 11:44:07.131+08 b20e46ed-a619-476a-9c50-88e1b8ea3697 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+033a8ac7-85bb-4a73-bf58-df30fe677bef 1 2019-09-24 11:49:24.124+08 2019-09-24 11:49:24.124+08 4ccb1624-a210-4672-9951-0dbf335dcdb1 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4c016552-7e6a-402f-b5cc-d4cf2644cef4 1 2019-09-25 10:40:55.957+08 2019-09-25 10:40:55.957+08 fe3a614d-329c-4b70-99ff-f95ccb28ab79 e4049f35-3902-4610-ac6e-45c01236a230
+6e2c64c6-e0f9-4454-bebe-cc6b592c47d9 1 2019-09-25 10:49:31.379+08 2019-09-25 10:49:31.379+08 37bc2c29-264c-4366-8fe1-9c2984702b94 e4049f35-3902-4610-ac6e-45c01236a230
+23530c8d-f685-42cb-94a9-f36a8966b2f8 1 2019-09-25 11:07:08.049+08 2019-09-25 11:07:08.049+08 d756ead6-3c0a-4d1e-be3f-dde6e031a048 e4049f35-3902-4610-ac6e-45c01236a230
+741fd631-a364-419a-9231-7283a28cb242 1 2019-09-25 11:19:02.071+08 2019-09-25 11:19:02.071+08 f7374ca5-78cb-4578-bfe3-df32eb350d05 e4049f35-3902-4610-ac6e-45c01236a230
+0219f24f-25b9-4546-9d81-8367349d0277 1 2019-09-25 11:24:05.364+08 2019-09-25 11:24:05.364+08 50fc0df9-2b02-445b-b04e-17209e8c69ee e4049f35-3902-4610-ac6e-45c01236a230
+137361e0-8a77-40bf-9f25-5f47f6b6a564 1 2019-09-25 11:32:47.404+08 2019-09-25 11:32:47.404+08 005826c9-dd60-4013-99bc-da28bc0d9c93 e4049f35-3902-4610-ac6e-45c01236a230
+9990bd9a-102b-4275-9a68-0667708bbd65 1 2019-09-25 11:38:34.943+08 2019-09-25 11:38:34.943+08 8392cdb0-52c7-4fee-8ace-a64e5cf86240 e4049f35-3902-4610-ac6e-45c01236a230
+0002c6d3-ef7c-43f5-964e-395a2626910f 1 2019-09-25 11:51:56.958+08 2019-09-25 11:51:56.958+08 5102e0bc-4778-43b6-80d3-fd71e4032088 e4049f35-3902-4610-ac6e-45c01236a230
+cb4a020c-164a-411c-8fd4-4d91dfe12240 1 2019-09-25 11:54:59.647+08 2019-09-25 11:54:59.647+08 73ac8e46-173b-4f23-bb89-edd506496e34 e4049f35-3902-4610-ac6e-45c01236a230
+788ffd0b-a898-4e60-99fd-2f47e5499d19 1 2019-09-25 13:51:38.099+08 2019-09-25 13:51:38.099+08 f535897b-dc69-4835-b0d7-b4a6062db938 e4049f35-3902-4610-ac6e-45c01236a230
+7cb0143f-d2d1-48e4-a7c2-29a61b4692a0 1 2019-09-25 17:25:19.272+08 2019-09-25 17:25:19.272+08 f29e4bb2-0e42-4016-b27e-f2377c115ff1 e4049f35-3902-4610-ac6e-45c01236a230
+67e89a04-ffdb-41e7-be13-eb8a1db4e66c 1 2019-09-29 11:20:27.368+08 2019-09-29 11:20:27.368+08 a47565e1-92e5-41e9-ba98-79a93065f0ee 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+67141178-8db8-4460-bf60-95b8a6172236 1 2019-09-29 11:31:19.681+08 2019-09-29 11:31:19.681+08 dc1bdab2-ae0f-4ecc-8ce2-86d40ed2d08c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3c8be1a4-ce5e-424b-a96b-0fbd0cd338dd 1 2019-09-29 12:00:33.527+08 2019-09-29 12:00:33.527+08 594ffc3d-f245-4a5e-8843-9448105cb86d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9796f4dc-0b66-4078-9c9f-88c1fb840d70 1 2019-09-29 13:35:25.301+08 2019-09-29 13:35:25.301+08 a4e6dddc-930c-4704-9c93-9a8d78da81cb 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4f6b51e2-0f80-4681-9aa0-f27d25b55ab1 1 2019-09-29 14:37:47.02+08 2019-09-29 14:37:47.02+08 569fbb47-7ddc-4dd9-a1d0-e9e15d4ac448 66537b16-1e7d-4823-b03e-676459f5891d
+f9c188d1-ab33-4041-b345-e308b3175a65 1 2019-09-29 15:43:10.886+08 2019-09-29 15:43:10.886+08 c96dced7-2915-4087-9ba5-b6f9bdc35f89 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2c02f34d-08e1-473f-81cc-8a9b793519f7 2 2019-09-29 16:15:27.828+08 2019-09-29 16:15:27.828+08 f190bf5a-78ab-4963-aac1-2fda921f2507 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e05d5580-4166-4bca-9526-883e221fa201 1 2019-09-29 16:15:35.153+08 2019-09-29 16:15:35.153+08 f190bf5a-78ab-4963-aac1-2fda921f2507 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+80cbdfcf-cba2-40ac-b382-0b54536d6b8c 1 2019-09-29 17:46:53.509+08 2019-09-29 17:46:53.509+08 83759876-3d92-4218-8efb-ea36dc6d81ef 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+36459c6d-944a-4893-8184-4e285b638e81 1 2019-09-29 17:52:15.128+08 2019-09-29 17:52:15.128+08 0edf8e7f-0f5f-440a-a83a-333e5d90a2ef 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+542252d8-f28d-4f94-82f6-1158b3bc4931 1 2019-09-29 17:55:57.031+08 2019-09-29 17:55:57.031+08 7eee6239-5a81-4979-ab6f-43a1b3e8d570 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f39343aa-3c12-4106-b5ae-da2b8b4ec719 1 2019-09-30 09:56:31.666+08 2019-09-30 09:56:31.666+08 01a43d23-84c6-4e78-bf39-7ed3a6383a88 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4dc28d80-d732-46c0-92e3-7627c604f4f3 2 2019-09-30 09:56:31.67+08 2019-09-30 09:56:31.67+08 01a43d23-84c6-4e78-bf39-7ed3a6383a88 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f943fc11-0ad9-44b0-8183-4887c3fd064a 1 2019-10-08 13:42:51.582+08 2019-10-08 13:54:47.161+08 f19f1e04-8739-4652-9869-5fe16698e82e 3f912f2c-18f1-4563-9043-dc271141fc55
+5fdabe6f-6d78-44ea-97cd-0b6a4c56a315 1 2019-10-08 17:02:20.817+08 2019-10-08 17:02:20.817+08 150f2029-8823-45cf-813a-4a6a3e427d2f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ae239c8a-37b2-44b4-8fd2-c718c7e39e74 2 2019-10-08 17:02:30.325+08 2019-10-08 17:02:30.325+08 150f2029-8823-45cf-813a-4a6a3e427d2f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4490ab7d-0201-4309-a7a3-bf6dd143e3c5 1 2019-10-09 08:45:35.164+08 2019-10-09 08:45:35.164+08 66d2c15b-394a-4b84-b7d3-b991be41d9b0 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d387901e-2390-4c45-9f74-a63d0f38caa9 1 2019-10-09 13:09:24.413+08 2019-10-09 13:09:24.413+08 8dc6a5c3-3f5b-40a8-9a90-d6b7b2cae471 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+923951b5-1a1f-450f-b565-8466f343b98f 1 2019-10-09 13:11:20.973+08 2019-10-09 13:11:20.973+08 7ce5e1fb-e335-4fa0-928d-9b1032350ab8 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ebf57f0a-cb29-4ddd-91c8-cc8678038e3d 2 2019-10-09 14:19:17.488+08 2019-10-09 14:28:41.669+08 f19f1e04-8739-4652-9869-5fe16698e82e 6361ba5f-8588-4685-a107-b692e3592f17
+564ac3e4-e029-464a-8895-44f162d8c138 1 2019-10-09 14:19:59.809+08 2019-10-09 14:28:49.898+08 6cb2c0f8-0c45-42e6-97ca-56d97a4a3484 6361ba5f-8588-4685-a107-b692e3592f17
+7849cf9f-a7f2-44e4-a728-c709b5d1815b 2 2019-10-10 09:55:12.725+08 2019-10-10 09:55:12.725+08 eaca25fa-f0bb-45cc-a5e0-59ba71654987 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9ec55f06-3e5b-4df9-908f-f00fc616ad7b 1 2019-10-10 09:55:12.73+08 2019-10-10 09:55:12.73+08 eaca25fa-f0bb-45cc-a5e0-59ba71654987 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7d85244f-1491-4309-89c6-16e33effa749 1 2019-10-10 10:48:36.502+08 2019-10-10 10:48:36.502+08 673195ba-381a-4dea-93e1-4f65f4d84079 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+55195d48-baa7-42e9-a307-ac8489ccbf9e 1 2019-10-11 14:16:26.981+08 2019-10-11 14:16:26.981+08 1fff247a-6494-4752-91b7-74565fa1f314 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+dee73b03-e45f-472f-a7d9-e13b866570bb 2 2019-10-14 09:24:23.052+08 2019-10-14 09:24:23.052+08 6b90f580-9b05-42a8-ba6a-113143823d44 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7897ad5c-fcaf-4864-a5f5-258372b978fa 1 2019-10-14 09:24:23.056+08 2019-10-14 09:24:23.056+08 6b90f580-9b05-42a8-ba6a-113143823d44 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5c58447a-84f4-4abc-9f85-3e82e4969387 1 2019-10-14 09:45:26.504+08 2019-10-14 09:45:26.504+08 274929f9-024a-40b8-8856-eb145c334b9a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2eb916f8-e824-4ba9-bbda-1359554271ec 1 2019-10-14 09:47:26.062+08 2019-10-14 09:47:26.062+08 c560df92-8e02-480d-8646-a66f98cc2aff 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+106e9686-2a44-4515-af18-aea0986c51dc 1 2019-10-14 09:49:18.026+08 2019-10-14 09:49:18.026+08 cc82fda3-8669-4810-a87a-ff57a55a3de6 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8607b060-3791-4b77-8f50-7da488d58697 1 2019-10-14 09:52:23.86+08 2019-10-14 09:52:23.86+08 fb91aca2-dc9a-4cbb-8ece-54a5e04d6566 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+277fe60c-a017-4add-9b87-167f51155998 1 2019-10-14 11:39:40.831+08 2019-10-14 11:39:40.831+08 b7bea944-ae59-4ec4-85cc-345e98006e52 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+fa4a0ad2-684d-4ede-9f8a-83995f13e4fe 1 2019-10-14 16:03:45.923+08 2019-10-14 16:03:45.923+08 1dcd0084-9a2d-43ef-9b10-1e8305ce8b06 66537b16-1e7d-4823-b03e-676459f5891d
+505c92e0-5a51-4372-8454-68c46eb977c8 1 2019-10-16 15:16:12.216+08 2019-10-16 15:16:12.216+08 30cf2191-2a9e-40dd-a83f-969d2f053e1e 66537b16-1e7d-4823-b03e-676459f5891d
+e4f8f6a5-ebc5-4ad3-8ac2-9603b40fa7c5 1 2019-10-16 15:20:46.746+08 2019-10-18 16:28:01.042+08 213e2ff2-285b-445d-8661-24f6f91bf7b8 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4e010d4f-94d1-412d-a03d-a44f1e569f57 2 2019-10-16 15:28:20.962+08 2019-10-18 16:28:13.158+08 30cf2191-2a9e-40dd-a83f-969d2f053e1e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+81bb8383-2e76-4a53-a51c-2b1a470edb68 1 2019-10-18 16:29:31.401+08 2019-10-18 16:29:31.401+08 b13c8811-3051-46d5-87e2-d1bbbc7853f2 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+1d228765-f4bd-489f-8f0f-ad293ef4aee5 1 2019-10-20 16:08:49.152+08 2019-10-20 16:08:49.152+08 a8607ea4-e6db-4dc6-9e64-3e8db3628ba0 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2b56d499-313a-4124-bef4-5c54154fae56 1 2019-10-22 13:45:08.966+08 2019-10-22 13:45:08.966+08 b0c1da1a-0945-4edb-9f17-e9b845030888 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3d84e10f-88bb-494c-b470-47da743c23b1 1 2019-10-22 13:48:51.935+08 2019-10-22 13:48:51.935+08 109b7349-2bb0-4859-8c1a-0c7630cbd11f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c7e29b9d-b8af-49f4-ad15-1141c32eb37a 1 2019-10-22 14:47:59.132+08 2019-10-22 14:47:59.132+08 f46aa0c4-ed9b-4991-8fa8-ea4c884f5c35 66537b16-1e7d-4823-b03e-676459f5891d
+58b22fe8-94ac-4030-b318-2f63d5240416 1 2019-10-23 10:16:21.72+08 2019-10-23 10:16:21.72+08 2ea41890-89c4-4569-89ab-df3b02dc16eb 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e31f3b04-8ff5-40ec-a71d-9ea454fe9afa 2 2019-10-24 11:23:42.795+08 2019-10-24 11:23:42.795+08 cc938850-0b9a-4ab3-9712-dbf35ff157d9 4714efc4-d103-4619-9895-28e67d9100e2
+051f7494-ede4-4cdb-8ce2-bc6bf14edd23 1 2019-10-24 11:23:42.797+08 2019-10-24 11:23:42.797+08 cc938850-0b9a-4ab3-9712-dbf35ff157d9 3dfadb0e-7608-49e1-aa43-24f7442b424a
+c06ef9be-c07d-40ee-b1f5-87dd61bd518a 1 2019-10-24 11:47:52.685+08 2019-10-24 11:47:52.685+08 a64fdbc7-36d7-49d9-8969-9040111aee6a 4714efc4-d103-4619-9895-28e67d9100e2
+e9693610-a8bc-42df-80d1-fb9b1fd442dc 1 2019-10-24 11:51:03.271+08 2019-10-24 11:51:03.271+08 389a8b42-097c-411c-b534-0666e61c7842 4714efc4-d103-4619-9895-28e67d9100e2
+cf03bc4a-827f-4f5c-acc5-a4652f32035e 1 2019-10-28 17:16:59.589+08 2019-10-28 17:16:59.589+08 e2fb2ed6-6d1c-41da-9f07-ab5866dd8940 66537b16-1e7d-4823-b03e-676459f5891d
+54d22e09-9b7e-4e93-858a-9cdb11ebd7e7 2 2019-10-28 17:16:59.591+08 2019-10-28 17:16:59.591+08 e2fb2ed6-6d1c-41da-9f07-ab5866dd8940 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+33547e16-e9bf-4aec-b932-3725456e99b1 1 2019-10-28 17:20:38.031+08 2019-10-28 17:20:38.031+08 8a550a15-96be-455e-8c81-b9e7efcc2b30 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+93728943-47a0-4721-9eb2-51a320bd66a7 1 2019-10-28 17:22:11.033+08 2019-10-28 17:22:11.033+08 ed459df4-d57c-430e-878b-37b61111d133 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+221c0192-d454-4fea-a71c-6880c041c43a 1 2019-10-28 17:23:47.583+08 2019-10-28 17:23:47.583+08 2e9595c1-ff54-4c5f-953e-f61a7837200e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+dbff7247-f39b-49bd-9564-df24d4a0b2b2 1 2019-10-29 10:59:52.836+08 2019-10-29 10:59:52.836+08 b86fdc56-591d-40c5-b4f8-cb5b2a265be8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+924170fb-d5be-4ae0-b90f-657bed50a717 1 2019-10-30 09:06:11.248+08 2019-10-30 09:06:11.248+08 613e22b3-00d5-4036-b4de-8988e8a25b02 66537b16-1e7d-4823-b03e-676459f5891d
+9bebca34-5d5e-4e7c-a534-7250ad03b5f2 2 2019-10-30 09:06:39.348+08 2019-10-30 09:06:39.348+08 613e22b3-00d5-4036-b4de-8988e8a25b02 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d00b1e09-e4ec-4b38-827c-347361e24502 1 2019-10-30 09:07:52.25+08 2019-10-30 09:07:52.25+08 88c7c5c5-561d-4193-9cf0-91aceec9f79a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+94ddbc11-b96c-4382-ba8e-dce7be2f6cd8 1 2019-10-31 16:01:05.959+08 2019-10-31 16:01:05.959+08 0f20644c-1893-49f9-bc83-6b66a9ead892 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+fd7c5e83-595f-417c-add3-4b8dc0a130f4 1 2019-11-01 14:03:28.026+08 2019-11-01 14:03:28.026+08 86561a5b-04f5-4b5f-8bc7-6b002b4b6c68 66537b16-1e7d-4823-b03e-676459f5891d
+3100d0a8-a250-4077-878f-c3fe4c15d84d 2 2019-11-01 14:57:12.148+08 2019-11-01 14:57:12.148+08 86561a5b-04f5-4b5f-8bc7-6b002b4b6c68 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+289f79f9-8c66-46c4-8104-ea6f1e48269a 1 2019-11-01 14:59:07.351+08 2019-11-01 14:59:07.351+08 50e00d9f-f07e-4a17-96bc-c74a2aab4d71 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+13d98625-2934-4747-964c-406642bf41ca 1 2019-11-04 09:55:37.331+08 2019-11-04 09:55:37.331+08 40c3cf7a-91d6-4c0e-aa48-4839dd6815cc 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+dddab794-eb67-43ea-b397-02b592ae4c47 2 2019-11-04 09:55:42.98+08 2019-11-04 09:55:42.98+08 40c3cf7a-91d6-4c0e-aa48-4839dd6815cc 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8a86ac72-72e7-41dc-9e39-c7aaa351c922 1 2019-11-04 16:33:37.304+08 2019-11-04 16:33:37.304+08 f34a4e8b-3a8a-45d9-a73e-a352cb10bbd6 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a0385cff-9bf0-4b10-9d67-830883a5f188 1 2019-11-04 16:35:39.102+08 2019-11-04 16:35:39.102+08 53ea01cf-1ce2-4b41-b725-974426affa48 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+363c087f-59a5-4790-9e0a-495fc46ee52d 1 2019-11-04 16:36:31.797+08 2019-11-04 16:36:31.797+08 e62db430-948a-4311-996f-38348811807a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+de074497-49de-49e5-bde0-d7ff72a7abdf 1 2019-11-04 16:37:13.96+08 2019-11-04 16:37:13.96+08 23b49cdb-2f9b-4170-9c38-2941c2341d00 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c2d79e3e-ee77-44fd-b514-47b315a14d29 1 2019-11-04 16:37:47.735+08 2019-11-04 16:37:47.735+08 28f92d45-2a16-4768-bc97-e9acc713b231 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3ab162fd-2116-4967-94a7-c7e3f684d505 1 2019-11-04 16:38:22.043+08 2019-11-04 16:38:22.043+08 d325832b-3b9a-4f92-9b08-0984c6b81599 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c7ad8552-d9c1-48e6-af24-2cbe475048ec 1 2019-11-04 16:41:57.23+08 2019-11-04 16:41:57.23+08 863ffb4f-8b5f-4a67-b93e-fa4f92f2464a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f6585a69-7dba-4119-b987-45b41298bd72 1 2019-11-04 16:42:29.012+08 2019-11-04 16:42:29.012+08 9199194c-49d8-4c20-8b52-67e469c30838 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0691fd52-f558-4788-8131-c93e5021efa1 1 2019-11-05 09:12:10.049+08 2019-11-05 09:12:10.049+08 a9dea92c-5afa-40b9-b1f3-197e9b0f82be 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c787e7f9-4888-41b4-9ab2-6b1d3c1ade0b 1 2019-11-05 14:06:15.038+08 2019-11-05 14:06:15.038+08 6431292f-5b95-41f0-8291-ff902e58b376 b3cb9990-288c-4f0d-a91a-547254d1d9c6
+694e8b8f-9239-4d5d-8cdc-bc5b715e6afa 1 2019-11-05 14:15:48.115+08 2019-11-05 14:15:48.115+08 1e6fc551-3ad9-4963-9754-142f9c470c9c 3dfadb0e-7608-49e1-aa43-24f7442b424a
+44e279ae-6bab-42f6-9262-de6308289931 2 2019-11-05 14:22:15.702+08 2019-11-05 14:22:15.702+08 1e6fc551-3ad9-4963-9754-142f9c470c9c b3cb9990-288c-4f0d-a91a-547254d1d9c6
+cdb78dd5-791d-41a1-b977-135b319f643a 1 2019-11-07 10:06:59.585+08 2019-11-07 10:06:59.585+08 0758748a-7706-4392-ba7e-e47526251acb 66537b16-1e7d-4823-b03e-676459f5891d
+98de9979-ee3f-49fd-a24e-6ffd754f32a1 1 2019-11-08 13:12:19.611+08 2019-11-08 13:12:19.611+08 8e254f7b-1da7-4912-8b0d-467770662365 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c4fc1163-946e-464f-b40b-d17843ecbf21 2 2019-11-08 13:18:41.585+08 2019-11-08 13:18:41.585+08 c659433c-cfd8-4b1a-a9d3-5664beb39ed9 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b4ae6323-5ad7-4484-a8dc-f3436e18620b 1 2019-11-08 13:18:41.588+08 2019-11-08 13:18:41.588+08 c659433c-cfd8-4b1a-a9d3-5664beb39ed9 66537b16-1e7d-4823-b03e-676459f5891d
+827b0843-a207-4dc8-86ed-167435ebacda 1 2019-11-08 13:43:46.052+08 2019-11-08 13:43:46.052+08 1f0ce463-872a-406b-bdbe-a469b45f9e9a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+626ee6c5-4367-4f3b-90b1-928ee5ae72c7 1 2019-11-08 17:22:09.143+08 2019-11-08 17:22:09.143+08 894ab7ef-b84f-420c-b2f0-cfdc5c00b826 0be63da7-6ab6-4d1f-830d-dd32add170c6
+609ecc8e-ceb4-46c1-9506-5484687f2b1c 2 2019-11-08 17:22:18.547+08 2019-11-08 17:22:18.547+08 894ab7ef-b84f-420c-b2f0-cfdc5c00b826 8751bbb1-2603-44bd-aa33-a7ad5e31a3ba
+462f0e12-b1dd-41d9-afab-d13a655d7fe5 2 2019-11-08 17:22:29.387+08 2019-11-08 17:22:29.387+08 894ab7ef-b84f-420c-b2f0-cfdc5c00b826 dff00e7d-1fb2-443e-be6a-615214932ee6
+5e0159f6-7b3f-430e-870d-6795d9bbcd88 2 2019-11-08 17:22:38.393+08 2019-11-08 17:22:38.393+08 894ab7ef-b84f-420c-b2f0-cfdc5c00b826 25642488-1945-4865-81e7-e9593c12d208
+430c515c-04d4-442d-a803-1be1e55aa3f7 1 2019-11-09 10:06:56.837+08 2019-11-09 10:06:56.837+08 c9eacd36-38d6-48b9-9672-e76406906ea3 118383e6-1b61-4e15-8dee-a1a2a61b531e
+b14b27af-b110-465e-a3c1-173d7135681d 1 2019-11-09 10:12:55.992+08 2019-11-09 10:12:55.992+08 91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 118383e6-1b61-4e15-8dee-a1a2a61b531e
+ea5bcd28-e40e-4d77-a512-57cbc5fd9230 1 2019-11-09 10:16:44.583+08 2019-11-09 10:16:44.583+08 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 118383e6-1b61-4e15-8dee-a1a2a61b531e
+c1425aa3-869c-4b30-bd57-1f2a3da95b2d 1 2019-11-09 10:22:51.856+08 2019-11-09 10:22:51.856+08 cb4eb310-0876-492a-9e06-8cd0a5542c5b 118383e6-1b61-4e15-8dee-a1a2a61b531e
+1d6724bb-cabf-47af-a23f-4bedef2b0e4e 1 2019-11-09 10:27:51.761+08 2019-11-09 10:27:51.761+08 c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d 118383e6-1b61-4e15-8dee-a1a2a61b531e
+12ccb6a2-95a8-4477-b07d-68d4ce5986d8 1 2019-11-09 10:32:27.003+08 2019-11-09 10:32:27.003+08 37c046eb-9a0e-49b0-95fb-f0128338f381 118383e6-1b61-4e15-8dee-a1a2a61b531e
+71a25702-d398-4011-bf1c-a0c2e7883dc5 1 2019-11-09 10:38:13.438+08 2019-11-09 10:38:13.438+08 73a7b800-25d7-41ad-872d-96cc4f9430de 118383e6-1b61-4e15-8dee-a1a2a61b531e
+ffd786df-1c50-4887-8975-b4b7842bbf23 1 2019-11-09 10:41:59.793+08 2019-11-09 10:41:59.793+08 b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 118383e6-1b61-4e15-8dee-a1a2a61b531e
+67704247-d8a7-4587-b27f-3c1559f7be34 1 2019-11-09 10:45:56.334+08 2019-11-09 10:45:56.334+08 473aee20-7c00-41cd-bd6e-b44c35c758ea 118383e6-1b61-4e15-8dee-a1a2a61b531e
+c0a9e5b7-2af9-45b9-a22a-b6a4a8b160e7 1 2019-11-09 10:50:10.37+08 2019-11-09 10:50:10.37+08 0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1 118383e6-1b61-4e15-8dee-a1a2a61b531e
+58fd4d47-a02f-4e6b-a495-106b88467e5d 1 2019-11-11 11:43:37.463+08 2019-11-11 11:43:37.463+08 9a331e7d-9429-4f58-8d30-a2fde39a80f3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ea642d87-00bb-4060-aa1f-d13a1aecd8a1 1 2019-11-11 14:50:57.359+08 2019-11-11 14:50:57.359+08 c2c9fa03-e2cf-45f7-ae3f-5cb586ab5a77 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ed93081d-a1a3-4e96-b564-985ec10bc036 2 2019-11-11 14:51:06.983+08 2019-11-11 14:51:06.983+08 c2c9fa03-e2cf-45f7-ae3f-5cb586ab5a77 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ee36577d-5afe-491b-894b-8b398e24c706 1 2019-11-13 11:47:53.203+08 2019-11-13 11:47:53.203+08 ac632873-d5e1-42fa-9343-6962d16bb547 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500
+b6bfe859-8459-4311-82a6-7b1e4dbc7538 1 2019-11-13 16:47:57.141+08 2019-11-13 16:47:57.141+08 ff97f842-4bf0-4384-b4b6-05a9783aa809 25642488-1945-4865-81e7-e9593c12d208
+0fe6cf40-6755-4974-be51-0a77071794d6 1 2019-11-14 13:09:15.674+08 2019-11-14 13:09:15.674+08 c150497e-123d-4ce0-bc80-9a537ee84489 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2479723b-feda-46f2-99bb-5ffd4ec390ff 1 2019-11-14 14:48:01.65+08 2019-11-14 14:48:01.65+08 6e32b4dd-c257-4c55-922f-1d62e21220c9 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f5ab987a-257d-4083-be4e-a90e05466aff 2 2019-11-14 14:48:08.832+08 2019-11-14 14:48:08.832+08 6e32b4dd-c257-4c55-922f-1d62e21220c9 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+34114f6f-3b62-486d-9556-ed4bf17476f6 1 2019-11-14 14:56:08.106+08 2019-11-14 14:56:08.106+08 5375e7c0-4ad5-4fcb-93df-82c9140ba075 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d00476da-54b8-4d71-b94e-c8a547f8baee 1 2019-11-14 15:03:05.425+08 2019-11-14 15:03:05.425+08 70457bad-88aa-4b95-ba35-4d42f4c3ac9d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8ba5c52a-3159-41ff-99c3-f356a2442d1b 1 2019-11-14 15:07:34.237+08 2019-11-14 15:07:34.237+08 9ef26f61-19a9-4990-83f4-b0c81d348eeb 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e731375d-a3f3-4e4c-805c-1280adc5f52b 2 2019-11-14 15:48:42.024+08 2019-11-14 15:48:42.024+08 61a4ad5e-774e-40d2-9ea6-937da62db64b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+be19acbd-14ed-4e4a-927a-19534e17b02b 1 2019-11-14 15:48:42.026+08 2019-11-14 15:48:42.026+08 61a4ad5e-774e-40d2-9ea6-937da62db64b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2ce73faf-7ff7-411c-8724-c7f5de3197d8 2 2019-11-15 10:29:23.435+08 2019-11-15 10:29:23.435+08 e95109a9-cf5a-4e13-b52b-1f85101fd99a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+58b4ce37-0691-4cff-95bc-df60aeb79a41 1 2019-11-15 10:29:23.437+08 2019-11-15 10:29:23.437+08 e95109a9-cf5a-4e13-b52b-1f85101fd99a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cfed20f0-05de-4d94-8f58-7beea29927e4 1 2019-11-15 14:29:58.329+08 2019-11-15 14:29:58.329+08 d26842d0-7685-4eec-869d-160b023932b9 25642488-1945-4865-81e7-e9593c12d208
+37e489f6-f1ea-4a99-9473-26b1f24af25d 1 2019-11-18 09:58:17.652+08 2019-11-18 09:58:17.652+08 5b2e8307-69da-445f-a1a5-6f04cfd7cd8f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a28365f2-ea6b-4780-a957-fff124cbf738 1 2019-11-19 14:06:12.368+08 2019-11-19 14:06:12.368+08 9278fee5-3705-4e76-a8a6-1cf10956a376 66537b16-1e7d-4823-b03e-676459f5891d
+7e07fddc-00e8-4b54-bf75-2ad0f837571c 1 2019-11-19 16:14:21.592+08 2019-11-19 16:14:21.592+08 407a002b-de7c-4a76-9732-e4e8aaaafec3 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+056ddac9-ad99-4ed4-9287-756b0c637166 1 2019-11-21 09:33:12.257+08 2019-11-21 09:33:12.257+08 6f6f83fa-1af9-4e4c-8d3f-53c2a4d1b4ca 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2b2090b3-6b7f-4134-9f51-c061f980f02b 1 2019-11-21 11:47:17.6+08 2019-11-21 11:47:17.6+08 a0d06bbf-dedc-47dc-8d1e-52e2a282a93a 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+4a6f99f4-e082-4a55-9f0b-601ec2131409 1 2019-11-21 11:47:17.602+08 2019-11-21 11:47:17.602+08 a0d06bbf-dedc-47dc-8d1e-52e2a282a93a 7667c2d9-3c04-4818-bfeb-42f43b60af77
+223ca791-daeb-4b6e-a828-7b17b443839d 1 2019-11-21 11:47:17.604+08 2019-11-21 11:47:17.604+08 a0d06bbf-dedc-47dc-8d1e-52e2a282a93a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a08d0dff-ea22-4b65-b24d-9422e9b8c7a8 1 2019-11-21 11:47:17.606+08 2019-11-21 11:47:17.606+08 a0d06bbf-dedc-47dc-8d1e-52e2a282a93a 8774b4f0-60c1-4c7d-940b-f3a847c2847a
+a5c0c2dd-2568-4e65-a7ec-cf06d9f743c7 1 2019-11-21 11:47:19.128+08 2019-11-21 11:47:19.128+08 868f47ed-fe83-49c4-be2c-70731b436220 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+724f7a46-0ccf-42cd-a991-1b0479907152 1 2019-11-21 11:47:19.132+08 2019-11-21 11:47:19.132+08 868f47ed-fe83-49c4-be2c-70731b436220 7667c2d9-3c04-4818-bfeb-42f43b60af77
+0f01d510-ea86-4324-937a-baa805d53f2c 1 2019-11-21 11:47:19.135+08 2019-11-21 11:47:19.135+08 868f47ed-fe83-49c4-be2c-70731b436220 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+157eca28-0baa-4b0e-9b28-1015cbe6430d 1 2019-11-21 11:47:19.137+08 2019-11-21 11:47:19.137+08 868f47ed-fe83-49c4-be2c-70731b436220 8774b4f0-60c1-4c7d-940b-f3a847c2847a
+c12324f7-d9d8-4772-8c47-90741c404d70 1 2019-11-21 14:01:06.931+08 2019-11-21 14:01:06.931+08 43060aae-0e85-4ec6-9fc9-b05216b11e13 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c23f8e42-87d0-419b-857b-35b8cbb12678 1 2019-11-21 15:13:15.431+08 2019-11-21 15:13:15.431+08 e1118b87-bfea-42be-b365-1c99d35511cc 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ef56b00e-603c-4c26-b132-037795bab2ce 1 2019-11-21 15:17:49.686+08 2019-11-21 15:17:49.686+08 ee878563-3f80-4c7d-8888-319c875c8a5e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5d4044c7-40c8-46e5-a5f6-7d7172a69bc9 1 2019-11-21 15:17:51.645+08 2019-11-21 15:17:51.645+08 b1353bed-cda0-44a5-b1e9-94cb166962a5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6bb6e4a7-0f87-4a93-8126-d22831a7b915 1 2019-11-21 16:06:37.688+08 2019-11-21 16:06:37.688+08 446a08d7-c237-4f0b-acfb-3d9310da742d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2877880f-2974-4163-96e4-f48a1aae4387 1 2019-11-21 16:15:06.513+08 2019-11-21 16:15:06.513+08 4698f1de-2051-4283-9fe5-2c62b1687239 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+23bc92df-57b9-4222-a6b3-7cb4fbdd87f5 1 2019-11-21 16:15:07.779+08 2019-11-21 16:15:07.779+08 5b338441-75c4-4186-9fc3-23aa8d614e19 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+07191c46-d74c-4c0b-9401-dc53e34f0d5a 1 2019-11-21 16:17:19.73+08 2019-11-21 16:17:19.73+08 0e96ddaf-1acc-419b-afca-18854f8c25d8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+eab9bb3c-ae22-4574-b211-e3fce64aa313 1 2019-11-22 14:53:57.133+08 2019-11-22 14:53:57.133+08 123b24f1-ba7c-42e1-b742-afdc5bf8620b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+648dc143-8ee1-4777-a763-cf66f3cbed70 2 2019-11-22 14:54:07.864+08 2019-11-22 14:54:07.864+08 123b24f1-ba7c-42e1-b742-afdc5bf8620b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0e411585-691d-43e4-b153-df45634de70d 1 2019-11-22 15:25:34.982+08 2019-11-22 15:25:34.982+08 9297adfa-1972-45e3-a5c4-0f31a0acbe84 5afb303e-0963-4e23-91f7-2b41f543aaf6
+e4c9283f-3609-4df0-abe4-92d822218a2f 1 2019-11-22 15:31:27.407+08 2019-11-22 15:31:27.407+08 1bda935e-56de-4365-b60e-f02d19299795 5afb303e-0963-4e23-91f7-2b41f543aaf6
+7fce98bf-5b42-4847-8d54-bc1f0e54a61e 1 2019-11-22 15:35:15.648+08 2019-11-22 15:35:15.648+08 d31031ab-0237-41a5-adc0-867c1e9952f7 5afb303e-0963-4e23-91f7-2b41f543aaf6
+591529fd-732e-4ad9-b1ce-71cb137fb31b 1 2019-11-22 15:38:16.262+08 2019-11-22 15:38:16.262+08 2e0d00cd-a321-4504-b716-41813848cbdb 5afb303e-0963-4e23-91f7-2b41f543aaf6
+9ce771e4-6304-4817-b176-8c9bd2e1f00a 2 2019-11-25 13:10:42.695+08 2019-11-25 13:10:42.695+08 5e052852-cf91-4092-8497-41556a0c10b8 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+5e4753f7-d79b-4ac3-a1a5-fc299c91f9e4 1 2019-11-25 13:10:42.699+08 2019-11-25 13:10:42.699+08 5e052852-cf91-4092-8497-41556a0c10b8 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+86bfce2a-faa5-42e9-a1c6-4ffb22a4e09f 1 2019-11-25 13:12:43.517+08 2019-11-25 13:12:43.517+08 3b4d2618-c6ec-4efc-a159-501ad68fd36e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+34ff37dd-975e-4fa8-a5ab-487b5cb6e1df 1 2019-11-25 17:26:40+08 2019-11-25 17:26:40+08 7e5507c8-b21b-47c0-b9de-f79f09875fc7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+bb97ef77-9c29-40b3-9e93-72eb26d9f67e 1 2019-11-26 10:00:52.342+08 2019-11-26 10:00:52.342+08 099c6283-519f-4946-aa9d-f0059a76b832 118383e6-1b61-4e15-8dee-a1a2a61b531e
+fd0f002e-7ec1-491e-9ff7-3e2781000f30 1 2019-11-26 10:01:08.786+08 2019-11-26 10:01:08.786+08 5e7775c1-0766-436e-b701-b1102833b98d 118383e6-1b61-4e15-8dee-a1a2a61b531e
+3377f9e3-709d-4cf5-9f5c-ac0e47f0a28c 1 2019-11-26 10:01:23.6+08 2019-11-26 10:01:23.6+08 5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8 118383e6-1b61-4e15-8dee-a1a2a61b531e
+45a3dabe-e080-4fc9-ba6f-01200690facd 1 2019-11-26 10:01:50.114+08 2019-11-26 10:01:50.114+08 90a2bc12-2214-43ff-9154-9b9212de2c10 118383e6-1b61-4e15-8dee-a1a2a61b531e
+0b1f985c-862f-4fed-9064-73f092421e8c 1 2019-11-26 16:13:41.235+08 2019-11-26 16:13:41.235+08 2663fcb4-832b-4bd9-ac6e-4a58835355cb 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d3c5a98f-b595-4635-9033-eef1233cca38 1 2019-11-27 14:14:55.497+08 2019-11-27 14:14:55.497+08 ba311e19-eea2-4eff-8674-1a146dab66c3 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e916fe27-5463-44f6-82dd-3430cd5213c0 1 2019-12-04 17:52:07.968+08 2019-12-04 17:52:07.968+08 e8b04a28-9fe8-4fd4-b5e9-7c8990e19e2d 639a37c9-637b-46e7-97ac-7b5991155e02
+4c4ef3cf-f1b5-4aef-9d5b-94fe66ddb957 1 2019-12-05 17:42:19.778+08 2019-12-05 17:42:19.778+08 ff8195ce-78e0-4668-81bb-8f26e83411a9 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6c25fbca-0d16-41c8-b1b7-ff724d5d9a76 1 2019-12-06 10:18:48.765+08 2019-12-06 10:18:48.765+08 82d07222-1b08-4fa5-85bb-790f4dc24def 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+1795a06d-3a75-4151-9dd1-347cf67c803d 1 2019-12-06 11:22:34.032+08 2019-12-06 11:22:34.032+08 d4255121-8115-4412-9778-4e29402a1720 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+fa0cbbe4-447f-408d-8ecf-7904f0ea8ff8 1 2019-12-06 15:16:13.058+08 2019-12-06 15:16:13.058+08 31be3fb7-3369-4966-8e26-b561dc31b6fd 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+05b98b4f-78c3-4a40-8efc-e36fb6debb58 1 2019-12-09 10:11:18.887+08 2019-12-09 10:11:18.887+08 5e2812d0-7cbc-4f79-9723-87bec81bb0ea 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+19976c8d-2707-4d40-b1b9-a7d0a9ef37c7 2 2019-12-09 10:11:18.892+08 2019-12-09 10:11:18.892+08 5e2812d0-7cbc-4f79-9723-87bec81bb0ea 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+1357595c-1801-4b05-a42d-1ca21020c433 1 2019-12-09 10:15:11.89+08 2019-12-09 10:15:11.89+08 15eadcdc-9a05-4580-946b-2b722d95ba5b 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+78e16739-e9e2-425d-934a-bcf3104e1eaa 1 2019-12-10 11:40:37.325+08 2019-12-10 11:40:37.325+08 1c9756ed-dcf4-4156-9a43-09ce478d2038 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f667f85f-5b6b-488d-b771-4a991eca38ac 1 2019-12-11 10:58:32.082+08 2019-12-11 10:58:32.082+08 52c7f175-bdd6-4c4c-948d-aa2a7868cd82 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9eb1b073-e915-4c9e-b7cc-13d1b6f6c4f9 1 2019-12-11 15:37:46.769+08 2019-12-11 15:37:46.769+08 7d9b7e21-42e2-4040-86d7-4bdbba095e43 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+1df8930c-6467-4c9a-8494-5a2beef7d031 1 2019-12-11 15:50:46.308+08 2019-12-11 15:50:46.308+08 79d3e66b-d0ad-4c0f-b724-11eca0d0c0cb 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1a7515b2-0caa-48b3-a171-af2232a46152 1 2019-12-12 11:29:56.732+08 2019-12-12 11:29:56.732+08 a8dd8956-f9ae-40d0-b207-8f5cf9669545 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+69ddd5cc-db94-4a65-9ea0-e7592350d708 1 2019-12-12 16:54:09.106+08 2019-12-12 16:54:09.106+08 8b4d38be-2454-4d9b-a586-d894c5197362 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+b0a927bb-109d-4f9f-b32c-b5b6b0dd3e54 1 2019-12-12 17:00:31.601+08 2019-12-12 17:00:31.601+08 1d7e6445-a676-42b9-9314-837415832451 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+dc20f3ad-4827-4b31-b4c9-9d7ea4a9950b 1 2019-12-16 11:28:19.781+08 2019-12-16 11:28:19.781+08 fbb11421-cbb6-435e-b9f0-4bf1e056016c c41d198c-435b-4551-ae66-b74be2c022d6
+ebb51648-fe47-4a08-8f10-fd9c08005537 1 2019-12-17 14:32:28.299+08 2019-12-17 14:32:28.299+08 d4476f92-5675-4de7-982e-fd914541136a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+456f2fa3-686a-4b01-9e49-7d92132f998e 1 2019-12-17 14:54:12.816+08 2019-12-17 14:54:12.816+08 dae07648-1adf-44d5-8a90-0519a5106a76 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+accde3c5-22d1-4547-8075-3f5316563e05 1 2019-12-17 15:53:57.6+08 2019-12-17 15:53:57.6+08 0fbc8f32-4f32-4e21-bbba-34023ac70ff4 c41d198c-435b-4551-ae66-b74be2c022d6
+8d019347-0d6d-435e-a798-e7dba9b83e94 1 2019-12-20 10:02:25.431+08 2019-12-20 10:02:25.431+08 98e6aaea-a6e2-449e-8b46-47fa016b1b96 e88f4b90-93c9-4a17-b425-b118ce4f4695
+6695fd40-827e-4ca8-8a19-4e91636751f5 1 2019-12-20 18:07:22.539+08 2019-12-20 18:07:22.539+08 cc36cffd-a5ac-44e5-8fe7-c2ad64a3e55b bb7d8ca9-1d07-48df-8d0f-b1439c0b990e
+104a4a5d-21c7-47d5-ac48-13724cdcb437 1 2019-12-23 10:30:52.206+08 2019-12-23 10:30:52.206+08 51b66c98-7a13-42ce-9b80-4df528d01234 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5fc7aef0-e1e9-4359-840b-c238a57cb395 1 2019-12-23 14:13:38.178+08 2019-12-23 14:13:38.178+08 e66b2170-dac3-4a27-b9d2-46e8fe63f0ce 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+afc36659-571a-4330-a927-08d51c905398 2 2019-12-23 14:13:38.181+08 2019-12-23 14:13:38.181+08 e66b2170-dac3-4a27-b9d2-46e8fe63f0ce 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3650d738-737b-4c16-8918-5cd22ba6dc88 1 2019-12-23 14:17:09.719+08 2019-12-23 14:17:09.719+08 98ae496a-649c-4719-b18f-705b32d4f545 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ce4680ae-0c4a-44e9-9376-af4ce8f2cf86 1 2019-12-23 14:42:47.824+08 2019-12-23 14:42:47.824+08 b5973739-2377-4164-9d35-d25da04d9d05 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e43545b3-6909-475c-85a5-ee3536a08b9f 1 2019-12-23 16:11:23.806+08 2019-12-23 16:11:23.806+08 42fa6a20-85bd-4f18-93f4-2349e5c1e804 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+7af23b3c-a97c-43f2-9d11-aafbb962b650 1 2019-12-24 09:20:36.099+08 2019-12-24 09:20:36.099+08 ce8318eb-2d27-407d-9b33-95018458d60f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+17f0019c-fa99-4caa-a15e-0a370f412436 1 2019-12-24 10:40:55.041+08 2019-12-24 10:40:55.041+08 d38d0e7a-cf28-4180-b331-9b950cfb89fd 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f78f1d5e-3516-4f92-acdd-03be971a578e 1 2019-12-24 11:15:20.028+08 2019-12-24 11:15:20.028+08 aaee1bcc-dde9-4cef-8fde-7c072b96eab5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ae0461df-12bb-4b97-9083-2388cc19fb64 1 2019-12-24 11:48:30.839+08 2019-12-24 11:48:30.839+08 964d519d-ec1b-4a4c-8a02-01402c99d348 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4373a223-fea3-4229-af15-847a2236af08 1 2019-12-24 16:23:58.892+08 2019-12-24 16:23:58.892+08 aa852395-17c0-4ccf-a911-c8090dd6f578 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+fb5176b4-4cfe-441f-80d8-041627633bdd 2 2019-12-26 10:22:56.05+08 2019-12-26 10:22:56.05+08 98e6aaea-a6e2-449e-8b46-47fa016b1b96 c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+de7228a6-d2a4-4308-8125-c25a5e80caf2 1 2019-12-26 11:22:19.495+08 2019-12-26 11:22:19.495+08 bff19d80-ce20-4c3d-b158-df091a1fb5ac c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+e9bff5bc-8f70-41bb-bb95-baeb9e055634 1 2019-12-30 13:31:05.439+08 2019-12-30 13:31:05.439+08 f49b431e-9069-47ec-a493-fd3c45eed27a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+507cca20-7447-4e32-b93f-7056f2964bb6 1 2019-12-30 16:35:12.232+08 2019-12-30 16:35:12.232+08 2095c53d-9927-4d63-b46b-03de0fd778e0 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+bfab9b6a-eb12-4dc4-b8c0-6d4de28b44b7 1 2019-12-31 08:40:01.976+08 2019-12-31 08:40:01.976+08 58bfca53-22e0-4857-81f4-c64ce00efe67 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+303fa19d-d73c-4e58-b8bc-9b74464f1dbd 1 2019-12-31 08:43:18.468+08 2019-12-31 08:43:18.468+08 d43df443-364f-4958-b978-cb0e9ee0e532 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c614b8c0-2914-4cae-b78c-5101b78834fc 1 2019-12-31 08:47:45.836+08 2019-12-31 08:47:45.836+08 ccf64c47-a5cc-46bc-92d7-0ffa046876a4 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+a12ba566-e9dd-49c6-b817-9e44e2efd96a 1 2019-12-31 09:03:15.074+08 2019-12-31 09:03:15.074+08 1d22d353-6d39-4a84-bd17-aef0bc6f32f8 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e8d38f56-e9e3-422d-a7f3-ea901d8522e5 1 2019-12-31 09:06:18.335+08 2019-12-31 09:06:18.335+08 246ba00c-51d3-4e43-b651-4fd45ccd8ca0 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8cd796d2-bdea-4fee-94fe-af39216acd9c 1 2019-12-31 09:09:24.868+08 2019-12-31 09:09:24.868+08 a581eb27-4334-4d9f-b28b-2c4b1e8136d5 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+261b6b65-18f2-4652-8cad-489527158a97 1 2019-12-31 09:12:30.171+08 2019-12-31 09:12:30.171+08 e8283251-3a4d-40f8-a7cc-581af3168aee 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+abeb3c83-cf97-4478-8eed-d65b7e03618b 1 2020-01-06 10:52:50.883+08 2020-01-06 10:52:50.883+08 82d07222-1b08-4fa5-85bb-790f4dc24def 6e48d81c-5e9a-4e94-95b8-5e03d0823466
+1ccfad69-bfd5-4a03-b03e-42541ba41172 1 2020-01-06 15:12:33.156+08 2020-01-06 15:12:33.156+08 b1ce7bb7-4d25-468a-ab2b-22347d65b166 25642488-1945-4865-81e7-e9593c12d208
+e3dc2dd7-b809-423c-875d-fd4e8f551348 1 2020-01-06 15:12:33.717+08 2020-01-06 15:12:33.717+08 b1ce7bb7-4d25-468a-ab2b-22347d65b166 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+88d5b4cf-1f0c-4875-a5dd-6dee39e6505b 1 2020-01-07 09:52:02.05+08 2020-01-07 09:52:02.05+08 c1e63dc1-8a68-4dad-a180-c652ea587e83 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a7735a3f-1762-45ba-80c2-79f16186e3a2 1 2020-01-07 14:23:09.07+08 2020-01-07 14:23:09.07+08 afba576d-0e5e-48cf-a9fa-18a3f986d812 7667c2d9-3c04-4818-bfeb-42f43b60af77
+3f092ecf-4e4f-428d-9bee-add7cf19355a 1 2020-01-10 10:52:48.979+08 2020-01-10 10:52:48.979+08 13ee1f91-04cc-48af-820e-ffc0ed179b6c c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+af7320c8-2821-44d5-8022-cb77f1d34195 1 2020-01-14 13:53:59.179+08 2020-01-14 13:53:59.179+08 adcecf0d-2b34-4a55-abc2-78a2439b1567 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d321d917-c48b-4c9d-a6b5-b12201ea05ba 1 2020-01-14 13:57:25.416+08 2020-01-14 13:57:25.416+08 742ee585-31d3-413c-b4f0-44d175b45bf5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3a9c27e9-df8e-4ad0-875d-c9de6327dce2 1 2020-01-14 13:59:03.966+08 2020-01-14 13:59:03.966+08 1f143b2d-d58a-4b04-bec7-8a396e900c90 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+458f1eb8-9e88-4975-b79d-55b0674ef142 1 2020-01-14 14:00:56.895+08 2020-01-14 14:00:56.895+08 457137ac-994e-4445-8acf-12172464a82d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2c1aa332-b340-4d0b-b1e4-a88d533a9e65 1 2020-01-14 14:02:50.257+08 2020-01-14 14:02:50.257+08 4abe48e9-ae10-4cd4-85a6-ad3970d8b928 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+179fa641-a8ed-484f-a6e9-72b1f93e0391 1 2020-01-14 14:04:32.642+08 2020-01-14 14:04:32.642+08 d6aefb14-b750-4133-94f4-e51c3df7743f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+30f53c73-6ccb-4c44-b639-6100f39a6df2 1 2020-01-14 14:06:32.983+08 2020-01-14 14:06:32.983+08 23ecb98e-e536-4313-9234-07622fea082f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a0b7f6d4-66fb-4a0c-8ef7-636676479bd6 1 2020-01-14 14:07:25.638+08 2020-01-14 14:07:25.638+08 72c4a62b-a2d2-4e68-9686-cc325cd79f74 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+16dfc6ce-8611-47f9-ae69-d9fa44e19138 1 2020-01-14 14:10:01.178+08 2020-01-14 14:10:01.178+08 1352d63c-d97b-4dd4-8289-0de6cad01db0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5174769f-c646-48c6-a882-98c9ada82dc4 1 2020-01-14 14:12:06.473+08 2020-01-14 14:12:06.473+08 fe0f0fce-4a90-4c6a-bd8a-26a48e5808e4 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d76ad255-098e-43b4-b776-49cae3872d7e 1 2019-12-26 13:50:05.501+08 2020-10-20 17:12:24.261+08 d2e74fbe-59fe-420d-b127-c61ba8236f42 c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+3a0e9308-533e-424a-812d-3f13e104da57 1 2020-01-14 14:13:41.861+08 2020-01-14 14:13:41.861+08 cd24ff84-fef3-40d2-8397-dfa240a13d17 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d9270c78-35a3-4962-b1d2-a35418e082b8 1 2020-01-14 14:15:55.642+08 2020-01-14 14:15:55.642+08 28dd8b68-38c2-47ad-af2f-80cabb2e5af7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+019051cd-3f9b-4557-b417-ff2853ac7152 1 2020-01-17 15:31:03.144+08 2020-01-17 15:31:03.144+08 20d96ea0-8995-453b-aa12-191acb05eced 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+73ebc60b-ecd7-4a5c-9bc3-977dba7d3d85 1 2020-02-11 14:33:32.066+08 2020-02-11 14:33:32.066+08 c7c40505-1247-43ea-a898-e767eeae6943 c41d198c-435b-4551-ae66-b74be2c022d6
+6cd932f6-1535-49bc-a14a-d30cef2b6cd5 1 2020-02-19 16:24:50.475+08 2020-02-19 16:24:50.475+08 1b1cc578-8839-4900-a0bf-8e8614bdbd41 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+983de5ed-36e6-4031-a1f4-2eed91e1e680 1 2020-02-20 16:35:47.513+08 2020-02-20 16:35:47.513+08 62fe835f-5a83-41c7-a31e-3304fb51c5a9 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+80c6d23b-6c8d-438c-a5b5-dfec268349ad 1 2020-02-21 13:07:00.693+08 2020-02-21 13:07:00.693+08 31be3fb7-3369-4966-8e26-b561dc31b6fd 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+e5a65814-7d06-41cd-b77e-4efcda706d73 1 2020-02-27 20:51:36.624+08 2020-02-27 21:07:30.518+08 2f966726-181d-4301-8415-5987393db114 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e95096f3-3c08-4f2c-a05d-474bc1c21b61 1 2020-02-27 22:26:34.018+08 2020-02-27 22:26:34.018+08 80f33249-c402-4942-8c91-15f19638dce4 c41d198c-435b-4551-ae66-b74be2c022d6
+61a7cfea-bccf-4f67-83f4-d08707f2e363 1 2020-03-07 16:35:47.279+08 2020-03-07 16:35:47.279+08 c82a7f0e-848f-4659-9555-8b275c33036e c41d198c-435b-4551-ae66-b74be2c022d6
+c45ebf7a-994c-4eea-b3f6-45a94048d9ce 1 2020-03-10 13:51:56.57+08 2020-03-10 13:51:56.57+08 6f6f83fa-1af9-4e4c-8d3f-53c2a4d1b4ca c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+3ca948fd-694f-4d59-a491-05081b807271 1 2020-04-08 15:57:11.838+08 2020-04-08 15:57:11.838+08 385b0bd6-f460-40fc-9a65-78aaba84aaf3 451db320-593b-4777-9848-9d778427dea5
+4722c16e-a855-4eb0-97d9-e99c47c9ef72 1 2020-03-12 15:37:30.921+08 2020-03-12 15:37:30.921+08 e92738ba-66bf-4ec9-85c5-c1f2b4d7780e c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+e852da81-b1c4-4d47-b3ef-39e64cbce075 1 2020-03-13 15:41:16.032+08 2020-03-13 18:38:51.919+08 7f76a800-a32e-483a-a948-919fc9e7d075 5afb303e-0963-4e23-91f7-2b41f543aaf6
+0dad32d1-e9ac-4632-8096-80bb0f46aa03 1 2020-03-13 15:45:56.951+08 2020-03-13 18:40:31.28+08 3aba791d-d6b2-4175-bb20-109f210f4065 5afb303e-0963-4e23-91f7-2b41f543aaf6
+4d41141b-c17b-42a1-89f4-4fadda5a662b 1 2020-03-13 17:42:39.306+08 2020-03-13 19:09:23.977+08 2ea1c0ff-9d04-4a29-addb-ceaf8b4c1744 5afb303e-0963-4e23-91f7-2b41f543aaf6
+4c440444-0e57-456c-8f11-981d32662ddb 1 2020-03-19 13:24:27.254+08 2020-03-19 13:24:27.254+08 00576fa4-94c0-4ef1-b26c-189142d5bdea 3d1a9d6a-ff6b-4b29-bb30-1c39079c1362
+01dd061c-0e37-4b9a-9d58-ed05cb8dff62 2 2020-03-19 13:24:27.258+08 2020-03-19 13:24:27.258+08 00576fa4-94c0-4ef1-b26c-189142d5bdea 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ab673ce3-dfbe-44b9-9694-bb3d71016009 1 2020-03-20 10:56:08.939+08 2020-03-20 11:15:55.237+08 1131f328-b9a1-4361-beae-547a1acb032d e4809d13-f016-47b0-8f2d-129502794def
+5db618dd-db52-4c2f-9ced-6b16d708ddae 1 2020-03-23 16:30:30.299+08 2020-03-23 16:30:30.299+08 c730d30c-6a9d-4e3e-b347-7dfbe40a217d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9ddb1044-aa3f-41ad-a145-d7b53882597c 1 2020-03-23 17:25:41.99+08 2020-03-23 17:25:41.99+08 fd94699e-65db-45b8-bbe9-88c147ba1e0a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f5be1c9b-cf89-4857-b349-a43edf06b737 1 2020-03-23 13:05:09.165+08 2020-03-25 15:27:36.44+08 47de1028-1b35-4a17-b78e-f66178ecb4e6 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+c0f06645-ac54-4ee7-8a18-d2da4cf349e3 1 2020-03-26 11:00:05.744+08 2020-03-26 11:00:05.744+08 b78fdf56-b70c-4c49-8734-67400e9a858a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+73a9ac3e-6c5a-446d-b67f-911d54f5301c 1 2020-03-18 14:12:05.058+08 2020-03-27 17:04:06.721+08 1e4fb0f1-79a1-4246-a85c-478b55f8df95 640f3d57-3789-4fc9-a69b-6175b4d3e384
+a22b55af-a29c-4f2b-a6c1-f84cfc4aa01d 1 2020-03-30 11:09:24.87+08 2020-03-30 11:09:24.87+08 47de1028-1b35-4a17-b78e-f66178ecb4e6 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4c188344-ac77-412b-8ed2-1e17a49452f9 2 2020-03-31 10:15:50.665+08 2020-03-31 10:15:50.665+08 a0d7ec2d-24f8-4039-b175-8921c00c1f4f 640f3d57-3789-4fc9-a69b-6175b4d3e384
+dbd1879f-ee6f-490b-95a2-179458f48a30 1 2020-04-08 15:57:21.93+08 2020-04-08 15:57:21.93+08 385b0bd6-f460-40fc-9a65-78aaba84aaf3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+530325fb-4018-4055-ac6f-06af5e9ef92b 1 2020-04-01 09:55:29.065+08 2020-04-02 15:19:21.346+08 f070a6a5-406b-4567-ab70-0ba9cc204545 80b06599-206f-411a-8965-2b4ccb6a3d59
+ecf245cf-eb1c-424e-87de-581473dee579 1 2020-04-03 17:19:01.217+08 2020-04-03 17:19:01.217+08 ca2fe08c-b600-4472-8de2-3c549ea7d150 e65d6dc4-b239-4755-b83e-af11fa23fb70
+cb8c1117-720e-4ecc-bf73-94387c4d9883 1 2020-04-03 17:19:01.22+08 2020-04-03 17:19:01.22+08 ca2fe08c-b600-4472-8de2-3c549ea7d150 2dd0e24e-8f6a-4171-8657-493de66868bd
+7190cc29-33df-48c4-b5fb-f67674d4b819 1 2020-04-03 17:19:01.223+08 2020-04-03 17:19:01.223+08 ca2fe08c-b600-4472-8de2-3c549ea7d150 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+fe902161-ccf0-4f4e-9087-6118bfeecd9e 1 2020-04-03 17:19:01.226+08 2020-04-03 17:19:01.226+08 ca2fe08c-b600-4472-8de2-3c549ea7d150 dff00e7d-1fb2-443e-be6a-615214932ee6
+50b8d95e-d224-4c41-ad37-affb54641460 1 2020-04-08 09:44:52.313+08 2020-04-08 09:44:52.313+08 12f885d6-8a49-4495-909e-8a938e23ec8b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1fee9b9a-9944-41aa-928a-c015f61bb511 1 2020-04-08 10:43:30.793+08 2020-04-08 10:43:30.793+08 a21dbc9a-38d2-4468-8149-8324e875fc8a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ceff386a-bc6e-46c5-a13a-d7380cc60803 1 2020-04-08 13:26:43.654+08 2020-04-08 13:26:43.654+08 0796dca5-8068-4bc2-a73f-99160576a988 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e7a92768-7533-4715-afc6-80476f5f2389 1 2020-04-08 14:09:27.562+08 2020-04-08 14:09:27.562+08 0796dca5-8068-4bc2-a73f-99160576a988 451db320-593b-4777-9848-9d778427dea5
+46c82a52-a4f0-4d35-8358-d9c757f40187 1 2020-04-08 15:22:48.321+08 2020-04-08 15:22:48.321+08 c5a82ea8-374b-4efd-b9e9-716b216d8ee4 451db320-593b-4777-9848-9d778427dea5
+f9c22bc0-1320-4f70-91b8-20cb8bcb6993 1 2020-04-08 15:23:08.355+08 2020-04-08 15:23:08.355+08 c5a82ea8-374b-4efd-b9e9-716b216d8ee4 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+df8f6580-c6ce-4fc4-92d7-819c27dcdb40 1 2020-04-08 15:29:11.12+08 2020-04-08 15:29:11.12+08 c5a82ea8-374b-4efd-b9e9-716b216d8ee4 0236d6b7-7ed8-4c8b-89cf-c4b352d8ed61
+4ec9c481-f55b-41a8-bf3d-617f0d62fbd8 1 2020-04-08 15:57:05.924+08 2020-04-08 15:57:05.924+08 385b0bd6-f460-40fc-9a65-78aaba84aaf3 0236d6b7-7ed8-4c8b-89cf-c4b352d8ed61
+86328969-acb0-4364-940b-b059ee66f415 1 2020-04-08 16:12:05.137+08 2020-04-08 16:12:05.137+08 33215263-67ff-4ca8-9cec-d4c05068b412 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a4e3d6a3-cf20-4432-8541-04470ba7b512 2 2020-04-08 16:12:12.443+08 2020-04-08 16:12:12.443+08 33215263-67ff-4ca8-9cec-d4c05068b412 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c51c7710-b2ef-4666-94f6-b073647973da 2 2020-04-08 16:18:25.328+08 2020-04-08 16:18:25.328+08 f54c9b05-e722-4677-9e19-4fbbeeee0938 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+83da887c-5273-42ad-b513-502c3e584888 1 2020-04-08 16:18:25.355+08 2020-04-08 16:18:25.355+08 f54c9b05-e722-4677-9e19-4fbbeeee0938 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+41b65cf5-a40e-4714-9539-cde9205d35c0 1 2020-04-08 16:23:51.244+08 2020-04-08 16:23:51.244+08 718d8823-39a8-40fd-b726-76fde0fd8094 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0f49609a-49e2-4056-960b-10ee986e88d8 2 2020-04-08 16:23:51.25+08 2020-04-08 16:23:51.25+08 718d8823-39a8-40fd-b726-76fde0fd8094 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4bd7b385-1d5b-434d-954d-a0f51efdc4de 1 2020-04-08 16:36:50.882+08 2020-04-08 16:36:50.882+08 9699ac1e-3bc8-4a9a-960f-4c82cc2507ff 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+64a1e2bd-ed3c-4512-a373-e461b1c50059 1 2020-04-09 09:21:51.841+08 2020-04-09 09:21:51.841+08 f0443cf8-a24d-46f9-a894-7c731798736d 25642488-1945-4865-81e7-e9593c12d208
+e9bffaa3-62a5-4116-90ad-ec2f64398bf7 1 2020-04-09 09:28:39.914+08 2020-04-09 09:28:39.914+08 1ecb51e2-e759-45ef-9792-89f34bb715d0 25642488-1945-4865-81e7-e9593c12d208
+c65cc7aa-c86b-4e79-923a-0d06f60d610c 1 2020-04-09 09:49:26.003+08 2020-04-09 09:49:26.003+08 369b29f9-7664-42c3-8510-7ad4c7b5bc06 25642488-1945-4865-81e7-e9593c12d208
+dca64f43-08c5-413c-8ad9-5417bb512881 1 2020-04-09 09:54:56.465+08 2020-04-09 09:54:56.465+08 a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62 25642488-1945-4865-81e7-e9593c12d208
+e7dde14b-e17a-42e9-89a9-a3c23524bb1a 1 2020-04-09 09:59:42.039+08 2020-04-09 09:59:42.039+08 b8904c0e-1294-49f9-b0e9-dadd79c4efe4 25642488-1945-4865-81e7-e9593c12d208
+04eb0c8a-7900-4291-bb44-31bbeb4fd7ab 1 2020-04-09 10:05:55.328+08 2020-04-09 10:05:55.328+08 bf5a92b7-59ab-429b-bce7-da858650205e 25642488-1945-4865-81e7-e9593c12d208
+d30c7f75-8f53-40c6-938b-fca23eea3726 1 2020-04-09 10:10:42.781+08 2020-04-09 10:10:42.781+08 a97834b4-727b-42ad-9ce0-aede595a5727 25642488-1945-4865-81e7-e9593c12d208
+9ba07a68-90c4-4a51-9d97-74ae9fefdd44 1 2020-04-09 10:47:23.477+08 2020-04-09 10:47:23.477+08 bfa2c35f-19d1-450b-a04a-b0e211b43bf5 3dfadb0e-7608-49e1-aa43-24f7442b424a
+b7751796-cc4f-4c13-8ae6-13746ec1391a 2 2020-04-09 10:48:42.622+08 2020-04-09 10:48:42.622+08 bfa2c35f-19d1-450b-a04a-b0e211b43bf5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3ee3e6ae-95c3-4076-bdc0-580e90fbe94d 1 2020-04-09 11:49:54.548+08 2020-04-09 11:49:54.548+08 cf08e20c-2c85-4a1d-84a6-b773c3291124 e65d6dc4-b239-4755-b83e-af11fa23fb70
+b0122d06-52ab-4363-a518-9dee079e5566 1 2020-04-09 11:50:03.689+08 2020-04-09 11:50:03.689+08 cf08e20c-2c85-4a1d-84a6-b773c3291124 2dd0e24e-8f6a-4171-8657-493de66868bd
+25b5c305-5424-403f-a687-5391a90c53e1 1 2020-04-09 11:50:19.667+08 2020-04-09 11:50:19.667+08 cf08e20c-2c85-4a1d-84a6-b773c3291124 dff00e7d-1fb2-443e-be6a-615214932ee6
+c2dd8e73-5c33-4c6b-a015-37abf3a4bf7d 1 2020-04-09 11:50:27.859+08 2020-04-09 11:50:27.859+08 cf08e20c-2c85-4a1d-84a6-b773c3291124 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ddedd8bd-d684-4ed1-8a73-ff5636926b76 2 2020-04-09 15:40:07.277+08 2020-04-09 15:40:25.236+08 939d26de-ea01-420a-95fb-9bb2398cb1c2 ad167c7a-80b6-4a2b-960a-532352df8a3c
+3794bf7b-f2ed-4b45-8a78-01636f2e5970 2 2020-04-09 15:40:17.145+08 2020-04-09 15:40:32.416+08 939d26de-ea01-420a-95fb-9bb2398cb1c2 74596cc6-9b6c-4386-8915-dd275e4dd101
+ca4f7fbb-cedf-4805-a5e6-f7ab3dcaf58a 1 2020-04-09 15:40:41.417+08 2020-04-09 15:40:41.417+08 939d26de-ea01-420a-95fb-9bb2398cb1c2 836f48be-3271-48ce-9df0-d8c9f35d9d35
+3899f885-1328-4dea-912d-1a3a379e92aa 2 2020-04-09 15:40:52.31+08 2020-04-09 15:40:52.31+08 939d26de-ea01-420a-95fb-9bb2398cb1c2 922031d2-ebc0-4fb4-a21a-0bbd78a09b80
+8cb986c9-a790-43ec-903e-0f2af0dccd72 1 2020-04-09 16:25:13.544+08 2020-04-09 16:25:13.544+08 0b4561c4-31a6-4737-b593-18b2b1973850 ad167c7a-80b6-4a2b-960a-532352df8a3c
+5960f593-fe7a-49d6-be3b-1c0529ab8e03 1 2020-04-09 16:25:28.827+08 2020-04-09 16:25:28.827+08 0b4561c4-31a6-4737-b593-18b2b1973850 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+08115467-24e5-4a70-81dd-a360e725171b 1 2020-04-13 11:46:45.195+08 2020-04-13 11:46:45.195+08 b3c05fb2-59b8-4bf7-b85d-7823a6781395 e65d6dc4-b239-4755-b83e-af11fa23fb70
+38f5f75e-8918-4148-94a3-355f97ff0a4e 1 2020-04-14 09:39:23.405+08 2020-04-14 09:39:23.405+08 2b835f19-8eba-46b3-b3aa-affc9b36dcd1 25642488-1945-4865-81e7-e9593c12d208
+bdfb666a-8123-4601-8533-db0a9b92ea55 1 2020-04-14 10:17:05.067+08 2020-04-14 10:17:05.067+08 9768653f-3bb0-4f60-9842-ed5df2685dc4 25642488-1945-4865-81e7-e9593c12d208
+2853d2bb-ec3c-4b98-bde1-16a9db4f9a58 1 2020-04-22 19:14:32.884+08 2020-04-22 19:14:32.884+08 f9304770-9fc6-4203-a75a-2759b659a4d7 3dfadb0e-7608-49e1-aa43-24f7442b424a
+a4ff9a85-c285-4720-afcf-155c0116c2db 2 2020-04-22 19:14:32.893+08 2020-04-22 19:14:32.893+08 f9304770-9fc6-4203-a75a-2759b659a4d7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+dd9c6ddd-01ca-4750-b867-f985cf0bbe35 1 2020-04-09 16:43:06.061+08 2020-04-09 16:43:06.061+08 a62aba76-29bb-43b8-a1fe-2dff7c77ecb8 25642488-1945-4865-81e7-e9593c12d208
+32e92b0e-4d21-4986-865c-842ca4573ec3 1 2020-04-09 16:47:29.181+08 2020-04-09 16:47:29.181+08 c169f72a-deae-4135-84ee-62d771722507 25642488-1945-4865-81e7-e9593c12d208
+b5a7e307-8a67-407b-8360-5c4d86168f55 1 2020-04-09 16:53:00.355+08 2020-04-09 16:53:00.355+08 3d19a0b1-da48-466d-88d1-dc7c1f73bc68 25642488-1945-4865-81e7-e9593c12d208
+a23f321f-21b8-44f7-b58f-a407221f9b93 1 2020-04-13 11:46:54.516+08 2020-04-13 11:46:54.516+08 b3c05fb2-59b8-4bf7-b85d-7823a6781395 dff00e7d-1fb2-443e-be6a-615214932ee6
+c4c769f4-1eb6-4060-90e0-6ab56634cada 1 2020-04-09 17:04:07.983+08 2020-04-09 17:04:07.983+08 18b82e73-7501-445f-a72c-a8e20cf9da40 25642488-1945-4865-81e7-e9593c12d208
+fd9283db-69e1-463f-b61e-d3ce9876e6dc 1 2020-04-09 17:07:42.146+08 2020-04-09 17:07:42.146+08 e7ed3509-511e-4c5d-8aec-3f331ec8defa 25642488-1945-4865-81e7-e9593c12d208
+0b0187d8-96d9-45cd-bb7f-0f4d14744210 1 2020-04-09 17:17:23.402+08 2020-04-09 17:17:23.402+08 536c5d54-6c47-4800-aecb-47219ee56fc2 25642488-1945-4865-81e7-e9593c12d208
+cb6e2488-674d-4a24-a326-2524e76d1435 1 2020-04-09 17:22:28.62+08 2020-04-09 17:22:28.62+08 b345cafa-8d58-454f-a01e-e42859545b18 25642488-1945-4865-81e7-e9593c12d208
+00d2a316-5cd5-4f82-bf3c-5d87cf208506 1 2020-04-10 10:44:15.335+08 2020-04-10 10:44:15.335+08 0796dca5-8068-4bc2-a73f-99160576a988 25642488-1945-4865-81e7-e9593c12d208
+338a761e-e215-4402-9c5e-91bdba47beba 1 2020-04-10 14:35:20.862+08 2020-04-10 14:35:20.862+08 854b696f-3001-4d7f-bffc-1e78e73b7d31 74596cc6-9b6c-4386-8915-dd275e4dd101
+954f6b1d-f314-4d0d-aee1-d9e0d846261b 1 2020-04-10 14:35:20.875+08 2020-04-10 14:35:20.875+08 854b696f-3001-4d7f-bffc-1e78e73b7d31 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d4ee7b16-0e6e-44f8-ac05-439cb2e04ff9 1 2020-04-10 15:36:27.77+08 2020-04-10 15:36:27.77+08 854b696f-3001-4d7f-bffc-1e78e73b7d31 82e26215-779c-407d-8dcf-7aa293ac2f50
+eeb39967-06ae-4270-8441-e6a248cd6c88 1 2020-04-10 15:36:36.066+08 2020-04-10 15:36:36.066+08 854b696f-3001-4d7f-bffc-1e78e73b7d31 c34d10ca-5037-406b-bedb-1c9e93c0502c
+dbc01469-d28b-493e-b1bf-5996ac187e6d 1 2020-04-10 17:03:16.212+08 2020-04-10 17:03:16.212+08 80342a8c-db6f-40e6-b331-0ae1eca53138 25642488-1945-4865-81e7-e9593c12d208
+38df0be1-f399-437f-b72a-17ebcb9d0cdb 1 2020-04-10 17:04:29.966+08 2020-04-10 17:04:29.966+08 1b0b94f1-5fde-428d-aa1c-242e8e024809 25642488-1945-4865-81e7-e9593c12d208
+c4d3eac7-dfda-4e6a-b84a-5fa59f3b5a19 1 2020-04-10 17:09:59.705+08 2020-04-10 17:09:59.705+08 35088e4d-f42e-4324-8237-bedb617ee489 25642488-1945-4865-81e7-e9593c12d208
+bd9cee05-9bbc-426f-a969-96c02256895b 1 2020-04-10 17:12:46.933+08 2020-04-10 17:12:46.933+08 ac1d92e7-4587-48e7-84ce-c4cd8db40687 25642488-1945-4865-81e7-e9593c12d208
+ee0d80c9-097b-4ef3-96b8-f24576e09e68 1 2020-04-13 08:46:38.648+08 2020-04-13 08:46:38.648+08 385b0bd6-f460-40fc-9a65-78aaba84aaf3 25642488-1945-4865-81e7-e9593c12d208
+a1e9ade4-6412-4226-acea-eeb400ea6253 1 2020-04-13 08:51:45.991+08 2020-04-13 08:51:45.991+08 c5a82ea8-374b-4efd-b9e9-716b216d8ee4 25642488-1945-4865-81e7-e9593c12d208
+b8b81a41-de19-46b3-95e6-dc715e1c56d9 1 2020-04-13 08:57:44.143+08 2020-04-13 08:57:44.143+08 8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3 25642488-1945-4865-81e7-e9593c12d208
+94b900d2-4db5-4562-9a6d-a747d706985c 1 2020-04-13 09:01:35.13+08 2020-04-13 09:01:35.13+08 998a52d3-f5ee-4d52-997f-1865b390e26b 25642488-1945-4865-81e7-e9593c12d208
+d7d75ad3-725f-4605-b594-c107f7ac2ef9 1 2020-04-13 10:48:03.081+08 2020-04-13 10:48:03.081+08 2f588726-18df-4ab2-b677-5c4479cef768 82e26215-779c-407d-8dcf-7aa293ac2f50
+7a4c06da-1e5b-4464-b1a7-54778e3a62a4 1 2020-04-13 10:48:03.083+08 2020-04-13 10:48:03.083+08 2f588726-18df-4ab2-b677-5c4479cef768 c34d10ca-5037-406b-bedb-1c9e93c0502c
+8238c7ec-b9d9-4ea6-aa1d-17bdef1c9d8c 1 2020-04-13 10:48:03.085+08 2020-04-13 10:48:03.085+08 2f588726-18df-4ab2-b677-5c4479cef768 74596cc6-9b6c-4386-8915-dd275e4dd101
+a67019ee-1b5e-4b6f-b38e-2e81ffb6dfed 1 2020-04-13 10:48:03.087+08 2020-04-13 10:48:03.087+08 2f588726-18df-4ab2-b677-5c4479cef768 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+25cfb943-c37a-4bd9-ac3b-ca76bb92a135 1 2020-04-13 11:26:42.563+08 2020-04-13 11:26:42.563+08 9bd34a2c-73d9-4615-af4b-1d61a6fc81bd 25642488-1945-4865-81e7-e9593c12d208
+bc3a1277-e947-4a62-b9ff-a9f4884680b0 1 2020-04-13 11:30:30.957+08 2020-04-13 11:30:30.957+08 9bcce139-4a57-4c96-ba1f-914569011b77 25642488-1945-4865-81e7-e9593c12d208
+bc518004-4d3b-4979-b2b2-0ce1c530ad4f 1 2020-04-13 11:33:52.173+08 2020-04-13 11:33:52.173+08 04f55cdb-e98a-4dc9-b3fc-480a9a241a02 25642488-1945-4865-81e7-e9593c12d208
+d9fe2336-3f05-4f8b-9fd4-61d917ccae4f 1 2020-04-13 11:47:01.89+08 2020-04-13 11:47:01.89+08 b3c05fb2-59b8-4bf7-b85d-7823a6781395 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c478a407-4b1f-4320-b3ac-df373fa8c28a 1 2020-04-13 13:05:47.913+08 2020-04-13 13:05:47.913+08 71c10138-4c73-4682-af9b-a904323eeac2 e65d6dc4-b239-4755-b83e-af11fa23fb70
+ffb1c108-4ff0-4445-96a1-e0dfa049ab08 1 2020-04-13 13:05:47.917+08 2020-04-13 13:05:47.917+08 71c10138-4c73-4682-af9b-a904323eeac2 2dd0e24e-8f6a-4171-8657-493de66868bd
+4a85bf4b-445d-44cd-ba39-cb6a79e93f30 1 2020-04-13 13:05:47.922+08 2020-04-13 13:05:47.922+08 71c10138-4c73-4682-af9b-a904323eeac2 dff00e7d-1fb2-443e-be6a-615214932ee6
+9f6a6386-111a-495e-9975-202724aaae19 1 2020-04-13 13:05:47.941+08 2020-04-13 13:05:47.941+08 71c10138-4c73-4682-af9b-a904323eeac2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5b58c3e3-eca9-479c-9eb5-e75f67f97d57 1 2020-04-13 13:26:08.719+08 2020-04-13 13:26:08.719+08 9699ac1e-3bc8-4a9a-960f-4c82cc2507ff dff00e7d-1fb2-443e-be6a-615214932ee6
+7b391eac-4a16-4a35-88e7-c158c50a0f68 1 2020-04-13 13:29:50.867+08 2020-04-13 13:29:50.867+08 cbdb48d6-afd7-4322-884a-d37d56f96176 dff00e7d-1fb2-443e-be6a-615214932ee6
+986ece2d-6b6e-4c34-a78c-6f144d632f28 1 2020-04-13 16:31:25.291+08 2020-04-13 16:31:25.291+08 0df31ce5-f6b4-4f95-a5f8-07c4ccc52346 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3c8bf7ce-3934-4bbc-8d08-640b6937e7aa 1 2020-04-13 16:42:59.115+08 2020-04-13 16:42:59.115+08 8fd9d375-1389-43b9-9423-654a4dd5af44 e65d6dc4-b239-4755-b83e-af11fa23fb70
+c244de67-ab93-4d9f-94a3-7965dfdd1554 1 2020-04-13 16:42:59.118+08 2020-04-13 16:42:59.118+08 8fd9d375-1389-43b9-9423-654a4dd5af44 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9148c4e7-ccfc-457f-9523-76fb8eddb5a1 1 2020-04-13 16:42:59.12+08 2020-04-13 16:42:59.12+08 8fd9d375-1389-43b9-9423-654a4dd5af44 dff00e7d-1fb2-443e-be6a-615214932ee6
+8aa9e896-0f9a-4897-97ea-b698b71a1b56 1 2020-04-13 17:26:36.481+08 2020-04-13 17:26:36.481+08 a81d1a62-5c7f-4c96-8abe-fe4a0bca5dcc 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500
+1545c9d8-07e6-45eb-859c-71e14c99d100 1 2020-04-14 09:46:36.219+08 2020-04-14 09:46:36.219+08 30bfe302-d364-4325-be1f-7fef73afaf77 25642488-1945-4865-81e7-e9593c12d208
+0a42cef2-35fb-41bd-88f3-884b49a30967 1 2020-04-14 10:12:31.869+08 2020-04-14 10:12:31.869+08 c952a71d-a917-40a7-aecc-cf2dc40c238a 25642488-1945-4865-81e7-e9593c12d208
+8c7dcb9d-43de-45f7-b210-5ace75e5ab7b 1 2020-04-14 10:32:45.122+08 2020-04-14 10:32:45.122+08 2b960cb5-8b22-4a35-b811-2a74b8f47196 25642488-1945-4865-81e7-e9593c12d208
+2f9705c2-7b35-4829-ac02-aad5df643695 1 2020-04-14 10:32:45.126+08 2020-04-14 10:32:45.126+08 2b960cb5-8b22-4a35-b811-2a74b8f47196 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3fa86c58-864f-4ace-ac19-a7c2e63273d8 1 2020-04-14 10:39:24.283+08 2020-04-14 10:39:24.283+08 2e98107c-2635-43a9-a89f-872152bac901 25642488-1945-4865-81e7-e9593c12d208
+5525ac80-6984-4305-a58c-fdcdea1edfb7 1 2020-04-14 10:39:24.286+08 2020-04-14 10:39:24.286+08 2e98107c-2635-43a9-a89f-872152bac901 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+bb16892a-4da0-4e00-b9c7-20b2e528b980 1 2020-04-14 10:44:39.27+08 2020-04-14 10:44:39.27+08 2de0b18f-a13a-48a9-8e34-6bfeff609972 25642488-1945-4865-81e7-e9593c12d208
+d844ea04-2ebd-4f69-a1c8-f58b2da3d757 1 2020-04-14 10:44:39.272+08 2020-04-14 10:44:39.272+08 2de0b18f-a13a-48a9-8e34-6bfeff609972 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+756a5045-b519-4794-b341-6f0e9a8c63a2 1 2020-04-14 10:54:11.583+08 2020-04-14 10:54:11.583+08 0df31ce5-f6b4-4f95-a5f8-07c4ccc52346 dff00e7d-1fb2-443e-be6a-615214932ee6
+acbc087a-cff1-4103-ab5d-5a1b270a5b22 1 2020-04-14 10:57:32.473+08 2020-04-14 10:57:32.473+08 5b40bb69-7692-4cee-b6df-bd7871764131 dff00e7d-1fb2-443e-be6a-615214932ee6
+fb0ac975-a15e-47d2-accf-814c412ad5e8 1 2020-04-21 13:39:10.229+08 2020-04-21 13:39:10.229+08 8cee37a9-d972-4d3b-97eb-53c9a87dbe9c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0e443d95-5d0e-4aac-b1e4-a1adaff332da 1 2020-04-21 23:56:27.162+08 2020-04-21 23:56:27.162+08 f2966257-6f65-4e21-81a5-451cd5b63144 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3b3649cc-a319-40bf-b088-c781f0ba795f 2 2020-04-22 19:18:31.181+08 2020-04-22 19:18:31.181+08 f9304770-9fc6-4203-a75a-2759b659a4d7 de1d3ee0-008d-4b6c-be9e-a94740944e36
+4844ea23-31c6-4752-a17b-b2f72320575e 2 2020-04-22 19:18:41.87+08 2020-04-22 19:18:41.87+08 f9304770-9fc6-4203-a75a-2759b659a4d7 a53ae7a4-4432-4696-9af3-bbc514ecee6e
+1f7e2288-09ed-47e2-ae8c-833e425aa571 2 2020-04-22 19:27:26.509+08 2020-04-22 19:27:26.509+08 f9304770-9fc6-4203-a75a-2759b659a4d7 f6b4041e-0a8c-46cf-a8df-21621b01f953
+28fc29f7-72b5-4667-90b2-06556fb12762 2 2020-04-22 19:27:33.85+08 2020-04-22 19:27:33.85+08 f9304770-9fc6-4203-a75a-2759b659a4d7 296ce231-ea55-48e7-90a3-4aea8879b66f
+259114a6-2e3e-4ec2-82b1-6db620d6eab2 2 2020-04-22 19:27:46.362+08 2020-04-22 19:27:46.362+08 f9304770-9fc6-4203-a75a-2759b659a4d7 139e622c-b7ec-45e4-9d31-862953487b92
+a5225e5f-1fdd-45dd-b907-d756fc67ab58 2 2020-04-22 19:27:59.436+08 2020-04-22 19:27:59.436+08 f9304770-9fc6-4203-a75a-2759b659a4d7 2686f932-1a7d-4a02-a326-e06e0d92f30a
+5b9e38a0-3fc3-4165-866d-fb5259c29c99 1 2020-05-11 09:29:12.669+08 2020-05-11 09:29:12.669+08 57b88830-72c4-4739-8d3b-3754fb371135 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+328d73ca-efc8-4070-96bc-e219a26ebe70 1 2020-05-13 11:30:27.494+08 2020-05-13 11:30:27.494+08 310ec0de-7bbc-4a75-8f1b-d126a2d3ac4a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9a7a64d6-cf0a-4182-9feb-1b5032169823 1 2020-05-14 11:28:55.628+08 2020-05-14 11:28:55.628+08 82d6439d-e647-44e7-ba65-2de818baea7f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e982a7aa-e38e-45b3-a537-bdcfe35d468a 1 2020-05-14 15:02:02.193+08 2020-05-14 15:02:02.193+08 ba181334-9686-42cd-b00e-7165b35e067f 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+79718313-a599-4e1a-ac4f-dae5017e2e64 1 2020-05-20 11:50:17.61+08 2020-05-20 11:50:17.61+08 6a94d3b4-a64c-48d2-be57-dfbd7f20c530 3dfadb0e-7608-49e1-aa43-24f7442b424a
+21c89044-25ad-4df8-aebe-8032f531f59f 1 2020-05-21 15:16:19.416+08 2020-05-21 15:16:19.416+08 4d37123c-99a8-49db-b2d2-3e334f5b27e0 66537b16-1e7d-4823-b03e-676459f5891d
+2ac693d6-3c38-4f50-9fd2-695a767a9daf 2 2020-05-21 15:16:19.419+08 2020-05-21 15:16:19.419+08 4d37123c-99a8-49db-b2d2-3e334f5b27e0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2b2d768b-6b55-406a-8f2b-0e8d55efbd38 1 2020-05-21 15:23:07.798+08 2020-05-21 15:23:07.798+08 39e6fe98-3dea-458b-9f64-143d18617cc4 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c5962a60-67df-47e7-9113-00cac921d0fe 1 2020-05-25 15:20:08.759+08 2020-05-25 15:20:08.759+08 94e0657d-9d34-4baf-bac1-34cb6610e051 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cdb61000-c726-4791-ac57-c3d79b4c32b6 1 2020-05-28 10:53:52.233+08 2020-05-28 10:53:52.233+08 e867f531-f1a3-44c8-9876-368efe947b7d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+cc32c566-291c-4843-acdc-abe10b99aa75 1 2020-05-28 15:02:00.603+08 2020-05-28 15:02:00.603+08 d86466d8-8892-45e2-a86a-56e283df30ac 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4c99cb74-82ae-4966-b8e9-db1a39ffd3d7 1 2020-06-05 14:45:30.238+08 2020-06-05 14:45:30.238+08 ee98ef38-7fda-425a-9fae-5000c658a83e 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+4620270e-1389-4742-94fb-8add2484c78f 2 2020-06-05 14:45:30.241+08 2020-06-05 14:45:30.241+08 ee98ef38-7fda-425a-9fae-5000c658a83e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7e9a75d3-78b2-4190-af48-917872395dff 1 2020-06-05 14:49:19.902+08 2020-06-05 14:49:19.902+08 1aa0fcb2-1f26-4596-9211-f028c369fbcd 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+901af8f9-5176-44d1-bdcc-ce352e485320 1 2020-06-05 14:50:25.542+08 2020-06-05 14:50:25.542+08 47775a01-00ef-4500-82ee-04b5536aaeea 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+16069271-c678-4ab0-830d-b550eb698a87 1 2020-06-05 14:51:20.997+08 2020-06-05 14:51:20.997+08 3ade0dca-d01e-4b1f-a1af-4948163e6902 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8877a5c7-25c7-43aa-9131-b6361c0a06e8 1 2020-06-10 11:35:22.171+08 2020-06-10 11:35:22.171+08 a2a6365d-ec0a-453a-be54-35e11b324d63 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+daac9c39-afad-4886-86c6-363bd5785bff 1 2020-06-10 14:00:54.726+08 2020-06-10 14:00:54.726+08 33b14e4c-17e6-44c9-a0a1-84cfe22fa073 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+76e17746-b712-4967-a506-ecd13d7f0ecd 1 2020-06-10 14:05:06.78+08 2020-06-10 14:05:06.78+08 9ed59e3e-108f-4fe9-b3c0-37c11cd46d92 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5a9d971b-ad1f-4360-966e-b7d83d502bf1 1 2020-06-10 14:06:51.133+08 2020-06-10 14:06:51.133+08 ce34762d-8e48-4c7e-8c23-1f7810ab7884 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f5c0e7a5-4bcb-4876-9cc6-f4d753afcbfe 1 2020-06-10 16:55:56.559+08 2020-06-10 16:55:56.559+08 59ffec5d-7c08-417e-bddc-8483466e1d66 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6d4212fe-6acc-407d-a5c1-10642accea1a 1 2020-06-10 17:07:04.275+08 2020-06-10 17:07:04.275+08 42d66a56-b0ca-400d-b41e-250d62a84878 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+55ca4f63-083f-4fdb-9406-bf94466cd4b6 1 2020-06-10 17:08:53.385+08 2020-06-10 17:08:53.385+08 7d85285c-28e9-44e3-b920-793850693e3a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d7b5d330-bd98-4e0b-8fe2-ed6c6241bd16 1 2020-06-10 17:12:06.738+08 2020-06-10 17:12:06.738+08 8485f6ac-e9d2-4f9f-a94d-0a3a3c516fea 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1052e946-4d2a-4d30-8789-5f05eb88e1a8 1 2020-06-11 17:08:14.285+08 2020-06-11 17:08:14.285+08 61f8ca5a-27a4-4e6e-8314-7b989dc3f178 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ff5565a0-4e66-4477-bd2f-9d481073129f 1 2020-06-11 17:32:44.099+08 2020-06-11 17:32:44.099+08 e3d9aa70-13e8-419c-939b-953b239eb4b0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5f2cb212-f147-41f7-b054-13f9b47f7392 1 2020-06-11 17:41:16.026+08 2020-06-11 17:41:16.026+08 30c2c04a-0810-4f90-91cf-d49b9ed855be 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+976c4e88-8f14-44be-9572-6cfcfe029da9 1 2020-06-12 10:02:36.339+08 2020-06-12 10:02:36.339+08 5fec42a4-44a4-46e1-afba-17c79de7e09c 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+470175a7-bba6-43f2-b98d-59365feb5db5 2 2020-06-12 10:02:36.342+08 2020-06-12 10:02:36.342+08 5fec42a4-44a4-46e1-afba-17c79de7e09c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0ab42106-9c70-43f0-8a3a-74694d0af133 1 2020-06-15 10:48:34.977+08 2020-06-15 10:48:34.977+08 537ca657-4262-4143-a1fd-7050c3795634 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6b71bb33-2824-48ba-b989-a52719e86916 1 2020-06-15 17:15:30.577+08 2020-06-15 17:15:30.577+08 a999f92a-a9c4-4b33-a805-9bbb221f1935 3dfadb0e-7608-49e1-aa43-24f7442b424a
+88f87fb8-1362-455c-8762-1eea46fa4922 2 2020-06-15 20:03:37.388+08 2020-06-15 20:03:37.388+08 a999f92a-a9c4-4b33-a805-9bbb221f1935 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0063aaea-c921-45c0-8ff5-ae08b21f3590 1 2020-06-16 14:26:24.064+08 2020-06-16 14:26:24.064+08 1a7f1970-6142-4919-a1e7-110829051ba9 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+fc33cf83-21e1-4e98-ad5e-2389e836de21 1 2020-06-24 09:49:49.827+08 2020-06-24 09:49:49.827+08 2b1ac1f2-3501-4eb7-882b-59c5f346ad98 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9008c7ca-1636-405e-ad93-8adef9cfd702 2 2020-06-24 15:19:41.374+08 2020-06-24 15:19:41.374+08 6a94d3b4-a64c-48d2-be57-dfbd7f20c530 030bf3ed-bc8b-4460-8031-99370c393db6
+e4cb3fdf-1af6-420c-a311-63d8ed972a79 1 2020-06-24 15:20:13.087+08 2020-06-24 15:20:13.087+08 9c12215f-afab-45e9-8341-1e487df6d020 030bf3ed-bc8b-4460-8031-99370c393db6
+14a69a88-1670-4519-b2e7-b000cc9b26c6 2 2020-06-24 15:20:20.199+08 2020-06-24 15:20:20.199+08 9c12215f-afab-45e9-8341-1e487df6d020 789cc633-6120-4c95-95a7-c7f15063488f
+a7a8865e-320e-45c0-b1a3-09d036a338ae 1 2020-06-24 15:21:13.395+08 2020-06-24 15:21:13.395+08 06cc1b7c-e6a3-4caf-9b5a-0e7ab8800ec2 789cc633-6120-4c95-95a7-c7f15063488f
+205e9398-7013-4cab-838f-eafd57410b9d 2 2020-06-28 11:29:02.96+08 2020-06-28 11:29:02.96+08 c3507ba4-b2b5-45b8-aecb-84079c90649d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+be17d735-b121-426e-ad77-0c9ee0207d44 1 2020-06-28 11:29:02.963+08 2020-06-28 11:29:02.963+08 c3507ba4-b2b5-45b8-aecb-84079c90649d 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+779efde0-4e70-4765-857a-9b96bdcfc08e 1 2020-06-29 09:57:57.719+08 2020-06-29 09:57:57.719+08 d246af39-fb67-4750-8a25-d05680a359b3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c6d00d85-cb05-405a-b910-289bded0649c 1 2020-06-29 16:12:12.856+08 2020-06-29 16:12:12.856+08 c67f1f58-3886-4294-835b-b48db34d96e3 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c3f125e8-d031-40c1-9640-560dc30e2679 2 2020-07-01 13:42:35.882+08 2020-07-01 13:42:35.882+08 5865ba02-99d8-4649-a200-c40dfa917982 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+5bd10d7a-1049-40dd-baa7-61fcf9a02b07 1 2020-07-01 13:42:35.887+08 2020-07-01 13:42:35.887+08 5865ba02-99d8-4649-a200-c40dfa917982 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+3ce62d6a-067d-4a2f-8a05-34e60b35bc4b 1 2020-07-02 10:28:22.762+08 2020-07-02 10:28:22.762+08 a8180277-ba74-44e1-a3bc-b408e290f742 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c196ad2a-9256-4f3d-9118-e00664b7eebc 1 2020-07-20 15:00:17.845+08 2020-07-20 15:00:17.845+08 75c9bb71-afbd-4667-8958-1c195663e0f6 3dfadb0e-7608-49e1-aa43-24f7442b424a
+5a3e2404-29dd-4080-af6a-63855994f51c 2 2020-07-20 15:00:27.659+08 2020-07-20 15:00:27.659+08 75c9bb71-afbd-4667-8958-1c195663e0f6 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+66a6b0b4-56e0-4f0e-8850-c776a629c121 1 2020-07-20 16:29:31.378+08 2020-07-20 16:29:31.378+08 f54dc0a0-6317-4a46-9f09-4d8024ff6959 1c21f4ae-9f87-49b7-96f4-64f39a145e97
+bd062ddd-204a-415c-88fd-19137eb3cbf3 2 2020-07-20 16:29:37.344+08 2020-07-20 16:29:37.344+08 f54dc0a0-6317-4a46-9f09-4d8024ff6959 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+9ddf05ea-8a4e-4c98-bb4d-ce137ddfcfbd 1 2020-08-26 13:29:30.02+08 2020-08-26 13:29:30.02+08 945563fe-656a-461e-8dca-7a4b2edbf9d0 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d3ea3597-df22-4d41-a41e-8ed052f2ab26 2 2020-08-26 13:29:30.023+08 2020-08-26 13:29:30.023+08 945563fe-656a-461e-8dca-7a4b2edbf9d0 0d79aad8-d5e4-4ae1-8062-4bbf602713cf
+a40c154f-9e69-436b-9d23-e0fc39b97725 1 2020-07-03 11:57:35.075+08 2020-07-21 10:26:38.681+08 9a1a0afd-566e-45a2-8286-147f760679a4 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e14de5eb-d92b-4081-aa14-3c3849bef9ca 1 2020-07-21 15:31:18.133+08 2020-07-21 15:31:18.133+08 b9092f6a-8c04-44c9-97ea-49b5389f5580 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+efe8225f-4482-4c27-8139-9b81ffd35456 1 2020-07-23 13:36:21.05+08 2020-07-23 13:36:21.05+08 ff948ead-5a62-4990-b5c9-a440be471988 66537b16-1e7d-4823-b03e-676459f5891d
+db3e4e5b-f023-40df-862c-4d8d0c48d0c2 1 2020-07-31 11:04:05.428+08 2020-07-31 11:04:05.428+08 8581898c-d047-4cdc-8ccc-ef33a1567435 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2a70f392-6f2c-405a-a65f-7e4491610af2 1 2020-08-03 08:43:47.575+08 2020-08-03 08:43:47.575+08 c283a48d-8843-4cb6-9c01-336738a8137a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+28aa96f9-693e-44f3-9b96-38c5fbd4ee1e 2 2020-08-03 08:43:47.578+08 2020-08-03 08:43:47.578+08 c283a48d-8843-4cb6-9c01-336738a8137a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+fa16930b-9773-4678-86e7-3918128f1dc9 1 2020-08-04 11:14:39.066+08 2020-08-04 11:14:39.066+08 5b58e9d2-f305-4ded-8863-c346e916d5e7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+38f5fb03-c53d-42c6-9a3b-b18d127d383e 1 2020-08-05 16:54:52.109+08 2020-08-05 16:54:52.109+08 07977267-d666-4b82-8976-d533e9afde5b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5f1c5214-9a9e-4e9b-a029-a48ea716f4ff 2 2020-07-31 11:04:05.431+08 2020-08-10 08:55:33.95+08 8581898c-d047-4cdc-8ccc-ef33a1567435 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+3a666cf1-c5e9-47ad-83a2-f28e8d3e68ec 1 2020-07-31 11:04:47.255+08 2020-08-10 08:55:48.032+08 3bfe9ce6-f4d9-4822-968e-3649d5eee799 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+45f68805-d64d-425b-834f-f6944a46c9b2 1 2020-07-20 09:49:47.232+08 2020-08-10 15:22:29.62+08 069e9c4f-794e-4b89-abc9-d53ab5d5cf7a b0b670ee-6fd7-4178-b684-08677b47ba30
+a1657550-326d-4cc0-8c1c-d0aa2a208d37 1 2020-08-13 09:25:55.317+08 2020-08-13 09:25:55.317+08 11b16ed9-a251-4907-b941-5a31ea559da1 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+bb9ca53f-ddab-44b1-838b-f1edc018fb6d 1 2020-08-14 11:53:53.18+08 2020-08-14 11:53:53.18+08 2ebd818a-1949-4633-b46d-d923cc2bec7b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+fb637416-6bbd-4ce3-8785-55c7a1e1993f 1 2020-08-14 15:25:23.089+08 2020-08-14 15:25:23.089+08 8a59ee46-6582-4f9b-a696-f2025fca9eda 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0a996db6-1ea0-4869-9d7e-7d4f42055999 1 2020-08-14 16:22:21.517+08 2020-08-14 16:22:21.517+08 6e1d455f-6dc1-4237-b1f2-de550f8dbd0e 3dfadb0e-7608-49e1-aa43-24f7442b424a
+c86ab2de-0be6-4c95-9d70-93fcd419b589 2 2020-08-14 16:22:21.53+08 2020-08-14 16:22:21.53+08 6e1d455f-6dc1-4237-b1f2-de550f8dbd0e b3cb9990-288c-4f0d-a91a-547254d1d9c6
+0fbee95d-d04d-4eb4-96f8-5b7a88a695b1 1 2020-08-14 16:25:21.438+08 2020-08-14 16:25:21.438+08 7599bfb7-18fc-40c7-be52-ff9fd0d1519e b3cb9990-288c-4f0d-a91a-547254d1d9c6
+4d250038-b2e2-43a6-86b6-8b47920bcf86 1 2020-08-18 08:53:48.596+08 2020-08-18 08:53:48.596+08 6b55f70b-4626-47f5-b8fa-10f76bf80c68 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+89c95ea2-6cca-47b2-aee1-cab6eed0e1a6 1 2020-08-18 11:14:36.347+08 2020-08-18 11:14:36.347+08 e0a57272-b5e1-4160-b62d-98cc9dcd10ca e8fa0f36-2606-4bc7-b594-ae3c3289ed63
+be1d9771-c1a4-4b57-ab5e-43476f7ce202 2 2020-08-18 11:14:36.352+08 2020-08-18 11:14:36.352+08 e0a57272-b5e1-4160-b62d-98cc9dcd10ca 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
+0341d559-c694-4a1d-91c5-46efa38ab7b3 2 2020-08-18 11:14:36.631+08 2020-08-18 11:14:36.631+08 e0a57272-b5e1-4160-b62d-98cc9dcd10ca 118383e6-1b61-4e15-8dee-a1a2a61b531e
+4d1531eb-e23e-4c0e-b19a-8573fe4541ce 2 2020-08-18 11:14:36.634+08 2020-08-18 11:14:36.634+08 e0a57272-b5e1-4160-b62d-98cc9dcd10ca 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22
+e509deea-5eb4-42e2-a446-937ace3243a6 1 2020-08-21 10:26:20+08 2020-08-21 10:26:20+08 032d4203-60ef-4d64-9888-530facf358ff 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+25a1a6c1-89ba-4bdc-af70-9b3483916a5c 1 2020-08-26 13:33:13.418+08 2020-08-26 13:33:13.418+08 cc3c245e-aa6a-4e4e-831b-780769ec41ca 0d79aad8-d5e4-4ae1-8062-4bbf602713cf
+e95b219e-b28a-47be-a720-4a8bdd1cc484 1 2020-08-27 16:11:17.327+08 2020-08-27 16:11:17.327+08 58f5081b-0b4e-4f26-853f-22ef0d1ea318 0237523c-9c1a-4c16-9fc8-7b8f9a369383
+4107b08d-9406-4946-bd4e-bb974e47732a 1 2020-09-01 10:29:11.204+08 2020-09-01 10:29:11.204+08 8f3e91ce-4354-4d6a-826a-c727aaabaa58 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c512274c-ac24-4850-af88-419cb4f76e9e 1 2020-09-01 11:23:08.028+08 2020-09-01 11:23:08.028+08 d876d84c-b881-4ef4-a79d-8a60b372c964 e88f4b90-93c9-4a17-b425-b118ce4f4695
+a55bdb42-e095-43be-ab7a-5c026a49008b 1 2020-09-01 14:32:02.471+08 2020-09-01 14:32:02.471+08 fc096555-1b1d-4526-a6d2-a734b1d313fd 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ceafa9d0-f201-4545-93a4-f683b05ac5a4 1 2020-09-02 17:43:02.612+08 2020-09-02 17:43:02.612+08 d9aab088-57f5-43ba-b30b-3342219a4b75 c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+718f3c5c-ef47-408e-9eda-38e1c3bbdd2a 1 2020-08-27 16:22:16.983+08 2020-09-03 11:40:30.483+08 35e7c6a8-9125-4612-889d-259e09a24735 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2c9fd49a-e60f-4df2-9ba6-bccf7891b1e6 1 2020-08-27 16:38:22.113+08 2020-09-03 11:40:43.889+08 899def98-516b-4c5f-a7e8-2fd48018bf12 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2202e398-3e6b-4b6c-87f4-9f52cf248cb7 2 2020-08-27 16:11:24.273+08 2020-09-03 11:40:56.549+08 58f5081b-0b4e-4f26-853f-22ef0d1ea318 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0874fdd8-f0a4-49e1-9529-25857531ab35 1 2020-09-04 12:04:26.562+08 2020-09-04 12:04:26.562+08 518c0b84-693f-4a2d-8f80-1ef2cbc6c3ab 66537b16-1e7d-4823-b03e-676459f5891d
+30c49a1a-f920-4de0-b130-43a7c2e55e37 1 2020-09-04 14:47:20.79+08 2020-09-04 14:47:20.79+08 f922cc6e-672b-4f59-a90e-2499ecfc1d24 66537b16-1e7d-4823-b03e-676459f5891d
+500cb3e6-5fad-41f5-8d2c-4e3d46b2c1a6 1 2020-09-07 16:10:09.072+08 2020-09-07 16:10:09.072+08 55f72e62-0922-4975-9714-058decf7a14d cd04713a-2775-4af9-94b3-89ddeca68f9a
+4609913f-cc94-4682-a556-127da768b954 1 2020-09-10 11:15:15.266+08 2020-09-10 11:15:15.266+08 207df42a-f8cf-47d0-a4bc-d1d5d9114928 c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+67882d64-f018-48ae-84a2-ca763a66b972 1 2020-07-20 17:54:25.266+08 2020-09-11 10:17:21.196+08 f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43 099c1ce3-267d-41ed-a3ed-be979a58222e
+d3d128d7-74a5-4635-84b3-1f9c8f68ec35 2 2020-09-11 12:01:40.266+08 2020-09-11 13:49:18.924+08 f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43 2bef85fc-4b8c-4b06-aea3-c4309283871b
+9f8055cb-759b-4594-b5ac-09653a838120 1 2020-09-11 13:29:23.082+08 2020-09-11 13:49:34.22+08 33a769c0-0ef3-47dd-ab22-3e86247259eb 2bef85fc-4b8c-4b06-aea3-c4309283871b
+ff49683c-d0d3-4fb4-a3cb-e79dbedbff42 1 2020-09-11 14:36:39.585+08 2020-09-11 14:36:39.585+08 2a7828f8-5044-43fb-9435-9a59ec4d769a ad4f23f8-9213-4194-97ce-209a34596649
+3e449c37-d3bd-43ae-a79f-bd187b76007e 1 2020-09-15 08:40:27.828+08 2020-09-15 08:40:27.828+08 a2885ce6-68b4-46e7-8dc6-fda47f2ad7bf 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a43e41e5-da9a-4f68-be1b-d5e69dd4735b 1 2020-09-15 08:59:09.152+08 2020-09-15 08:59:09.152+08 4a7b1546-e1c1-4103-8fd0-baa6ce39ab2c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c48b7e59-f422-4b80-a712-b414a713240d 1 2020-09-18 11:09:34.404+08 2020-09-18 11:09:34.404+08 8523278f-0788-4ef6-8669-64d28b348c59 b3cb9990-288c-4f0d-a91a-547254d1d9c6
+6b32a15d-6fa0-4856-bf23-2bbd8355ab79 1 2020-09-21 09:55:14.218+08 2020-09-21 09:55:14.218+08 b6d47de4-d27f-45de-a8b2-adfedc7f0f6a cd04713a-2775-4af9-94b3-89ddeca68f9a
+324f2d71-3a50-4146-9aae-e363bd12206d 1 2020-09-21 09:55:16.281+08 2020-09-21 09:55:16.281+08 dc3e2b45-f9db-4aec-993a-d8369918a67e cd04713a-2775-4af9-94b3-89ddeca68f9a
+ffa3ceac-455f-4f77-a6ff-9672588c611f 1 2020-09-28 10:33:27.923+08 2020-09-28 10:33:27.923+08 e6b4e767-9ae2-459f-99fc-042b9d6af678 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+c852dc68-be4c-4e55-abe9-657778e17115 1 2020-09-28 10:33:27.926+08 2020-09-28 10:33:27.926+08 e6b4e767-9ae2-459f-99fc-042b9d6af678 66a06e5d-a436-4d37-806b-919d8fd1c564
+e86b43e7-33da-4bd2-8984-7d4a79397349 1 2020-09-28 10:45:02.866+08 2020-09-28 10:45:02.866+08 455f2a29-2660-4cfa-97f9-ef7f357d59d6 66a06e5d-a436-4d37-806b-919d8fd1c564
+83f56f79-81e4-4274-9385-6ad10247f3f4 1 2020-09-28 10:45:02.871+08 2020-09-28 10:45:02.871+08 455f2a29-2660-4cfa-97f9-ef7f357d59d6 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2c6aef25-4dec-40f3-9c11-0d31971ba699 1 2020-09-29 09:28:13.403+08 2020-09-29 09:28:13.403+08 e33b5ca8-307d-47dc-afbc-01098220b4ac 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+0164eb27-0f0d-485f-a6fe-aabce5f65b3a 1 2020-09-29 10:14:18.841+08 2020-09-29 10:14:18.841+08 e33b5ca8-307d-47dc-afbc-01098220b4ac 66a06e5d-a436-4d37-806b-919d8fd1c564
+f0653362-f4de-4461-a2ed-7c75c32e2474 1 2020-09-29 11:19:58.824+08 2020-09-29 11:19:58.824+08 e4de5a5f-c4cc-4e7e-bb0b-b34c28a89925 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+d225ef09-9a28-4c68-9bc5-b9856e4b9af6 1 2020-10-09 14:17:46.84+08 2020-10-09 14:17:46.84+08 4452ff6a-859b-45e6-9e9c-c6b59ee3667b 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9d5d9205-b7b8-46bf-9ed6-9222582bfd40 1 2020-10-10 10:46:03.62+08 2020-10-10 10:46:03.62+08 fa3e1751-abcf-43d6-89d5-ad9bc9a979b6 cd04713a-2775-4af9-94b3-89ddeca68f9a
+77da0a6f-3db6-4714-8add-a2e306bf06ac 1 2020-10-10 10:46:11.465+08 2020-10-10 10:46:11.465+08 f0d5077b-4260-422c-87e3-92d13d136ebf cd04713a-2775-4af9-94b3-89ddeca68f9a
+36d81901-6ca4-41f4-912a-9088650f7d78 1 2020-10-13 10:08:39.386+08 2020-10-13 10:08:39.386+08 04ffee3d-0572-491c-9291-82dbbf14e7d4 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+8bed1966-b73c-4195-a86b-8eccc6181611 1 2020-10-16 11:41:30.084+08 2020-10-16 11:41:30.084+08 0b84defc-2160-4d4a-8d71-6f350b4d6666 c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+238c0049-a09c-40cb-bf15-77e8e1158751 1 2020-10-16 13:52:59.054+08 2020-10-16 13:52:59.054+08 b7dd781d-dba7-4228-b49f-8aee75e42625 c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+8e649d83-aaba-4c63-9f92-02946a92fff1 1 2020-10-16 14:22:53.587+08 2020-10-16 14:22:53.587+08 1450b04e-214d-47b0-8e32-def5a361cc48 c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+a0fc7ae8-d89f-479c-a454-f21088237c6d 1 2020-10-19 14:17:50.54+08 2020-10-19 14:17:50.54+08 8da5aeab-4a1e-4bb5-afe2-67cadfc4700a 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+f20ac868-25d7-4f6d-b54d-e068948a7310 1 2020-10-19 14:20:08.552+08 2020-10-19 14:20:08.552+08 eefc80f3-265d-475f-b00b-d44016522eab 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ae721f2e-dfd5-4d2a-9b62-85033317b741 1 2020-10-19 17:25:27.863+08 2020-10-20 15:15:38.857+08 f89c588a-f68a-4208-857b-555022da9f9e 80b06599-206f-411a-8965-2b4ccb6a3d59
+0c5bc927-e4bd-4894-aa69-ddc2f9e9b60b 1 2020-10-23 17:03:59.949+08 2020-10-23 17:03:59.949+08 d26881e7-f69e-4b7d-9041-47009bd2c298 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7b8077a4-0e3a-4eed-ab34-d0717f7e0ad4 1 2020-10-23 17:03:59.952+08 2020-10-23 17:03:59.952+08 d26881e7-f69e-4b7d-9041-47009bd2c298 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
+95143a7c-bbd9-4b58-a1e5-acf118cb793d 1 2020-10-26 13:25:33.98+08 2020-10-26 13:25:33.98+08 f9f36adc-75b4-4140-a14e-73f8172228d7 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+96438e38-60bd-4a77-a047-8c1a15df5f20 1 2020-10-28 10:07:56.836+08 2020-10-28 10:07:56.836+08 ebfa9f73-9cbe-4629-9e1c-365f58c1ebc2 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+13eb704f-aaab-459d-911d-acd9fa5e7775 1 2020-10-29 16:40:39.798+08 2020-10-29 16:40:39.798+08 f84896ea-8908-41e9-9e30-371a39cd4261 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+dee1c7ea-3f0b-4008-a84f-d6ac39dc26bf 1 2020-10-30 14:32:49.864+08 2020-10-30 14:32:49.864+08 ec7fa28a-0898-4cb3-a5d0-098d568c1e69 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+4665d5ce-a0fb-461c-863c-7da4cce84972 1 2020-11-02 10:05:36.111+08 2020-11-02 10:05:36.111+08 b6f7c250-9eeb-4225-8c5e-68b766f03649 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+51e7373e-8b18-4003-824f-c0a386f73332 1 2020-11-02 13:44:41.98+08 2020-11-02 13:44:41.98+08 30d005dd-93a1-4c1a-ac10-8bdedf26bab4 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+74b044d5-7f85-47df-ac2d-6d7530f04770 1 2020-11-04 09:48:42.715+08 2020-11-04 09:48:42.715+08 f3a9238e-8d1c-4876-a81d-f2bb05755585 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+210fdd62-59d0-40a2-822d-edc9f6615021 1 2020-11-04 09:56:29.864+08 2020-11-04 09:56:29.864+08 e3e8ca1e-1676-4b76-96ed-131ba8516599 c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+b0475fd4-5fc9-4e6d-992c-533c82f7f804 1 2020-11-04 10:06:19.407+08 2020-11-04 10:06:19.407+08 2d0ff832-a7e0-4029-94bf-d7203c1fa793 c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+0e3d3a37-7895-4682-8c35-27d59bdfae11 1 2020-11-04 10:10:46.531+08 2020-11-04 10:10:46.531+08 c51512a6-3e90-4b6e-8a21-987464b10ca9 c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+07eec80e-4e25-40b1-b117-021f32f3af0f 1 2020-11-10 09:02:26.692+08 2020-11-10 09:02:26.692+08 c2dbdbb3-32a5-4be9-8b5a-530d8087ffe5 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+8ff777a4-d7db-4151-8495-ab0a86d08eb0 1 2020-11-10 09:01:05.484+08 2020-11-10 14:35:52.627+08 fb922722-9262-470f-8064-4b78234fa802 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+e890945f-ea10-48a2-afc1-a84a42096f27 1 2020-11-11 09:55:32.281+08 2020-11-11 09:55:32.281+08 c991c138-3b47-4a21-af81-9ba1df554176 c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+fa8be449-f162-49ab-808d-7be4700b888a 1 2020-11-11 17:46:31.991+08 2020-11-11 17:46:31.991+08 92bbac70-53a3-4d25-b8ab-b4287c52359d cd04713a-2775-4af9-94b3-89ddeca68f9a
+5959f7bf-e2f7-4596-82f1-1857bf097444 1 2020-11-16 09:26:32.444+08 2020-11-16 09:26:32.444+08 90e48651-6ab9-4f11-95e9-c2c7eb4c3c15 c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+6caf6a7c-66cc-4a2d-96f0-ffe8f989d427 1 2020-09-25 08:57:37.431+08 2021-01-22 15:26:07.735+08 343d74d9-fc95-40d7-930c-e0cd01536d55 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+30d0291e-acce-4511-a468-7b15a87262e2 1 2020-09-17 16:40:25.947+08 2021-01-22 15:31:33.202+08 92520c27-c002-4a35-84f0-dae3238662ae 3dfadb0e-7608-49e1-aa43-24f7442b424a
+e3b0d12c-5881-4284-9c16-a0c396f04b67 1 2020-11-16 13:54:23.267+08 2020-11-16 13:54:23.267+08 f6b98e0f-0bfe-4a95-808c-d6d10b4c803b 118383e6-1b61-4e15-8dee-a1a2a61b531e
+ba1ad632-f452-47b6-93cb-c52336b35e05 1 2020-11-19 09:19:24.243+08 2020-11-19 09:19:24.243+08 af9ec966-1c73-4e23-bae8-5ffcb4661942 5afb303e-0963-4e23-91f7-2b41f543aaf6
+5baf8af0-2d94-4e1d-8319-bb67e745f6fa 2 2020-11-24 11:13:14.743+08 2020-11-24 11:13:14.743+08 f963b588-8c55-4b9b-b455-8e7302d88408 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+814b8d71-d9f6-4d3f-906a-c1434a830aa6 1 2020-11-24 11:13:14.746+08 2020-11-24 11:13:14.746+08 f963b588-8c55-4b9b-b455-8e7302d88408 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a91c63ab-c8b0-40b3-9e9b-d01e9a977815 1 2020-11-26 10:48:57.335+08 2020-11-26 10:48:57.335+08 c02e4b7c-e6b7-4d83-969c-34059f84af1f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c9821beb-28aa-47a7-a541-24967d0e81d1 1 2020-11-26 10:57:51.662+08 2020-11-26 10:57:51.662+08 86aa83da-35f2-4247-8660-4d23b9c30a1c 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+516bd35c-8acd-4dec-bea1-ec61f54b6182 1 2020-11-27 09:56:17.672+08 2020-11-27 09:56:17.672+08 75ab7fed-fb74-48c5-8cf9-898b3fc62358 66537b16-1e7d-4823-b03e-676459f5891d
+993bbe10-57d5-46e6-87d1-ee971f5cade7 1 2020-12-03 17:40:46.302+08 2020-12-03 17:40:46.302+08 085307b7-181b-4059-9e81-1cbfff8fa061 66537b16-1e7d-4823-b03e-676459f5891d
+44d4ef21-b985-488f-9e4b-bfa73bc4a80e 1 2020-12-08 17:06:14.27+08 2020-12-08 17:06:14.27+08 403dcab2-df50-4fda-a92e-c2100bb9a242 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+a3e88944-8cb9-4ae0-85d9-d25e1cb4d78d 1 2020-12-09 13:48:35.971+08 2020-12-09 13:48:35.971+08 8001366f-40a9-4e0c-affa-d050c5eacf17 66537b16-1e7d-4823-b03e-676459f5891d
+63c40633-92b9-4e0d-9230-f3163dfd7433 2 2020-12-09 13:55:26.954+08 2020-12-09 13:55:26.954+08 8001366f-40a9-4e0c-affa-d050c5eacf17 6ef0562f-3378-453f-935e-8057c95048ae
+de034ad9-62e3-419a-9411-ae2b018ae160 1 2020-12-09 13:58:20.432+08 2020-12-09 13:58:20.432+08 5ab3d59e-efe3-45c3-b69d-36ec4af9fd8c 6ef0562f-3378-453f-935e-8057c95048ae
+a657ade6-3b1f-4b7a-9507-bcbbc1485cd5 2 2020-12-10 15:58:14.693+08 2020-12-10 15:58:14.693+08 8c5826bc-d7e6-4506-9dab-ded01f4c2346 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+80e27ea5-5874-43f7-8f20-c298ef43108b 1 2020-12-10 15:58:14.699+08 2020-12-10 15:58:14.699+08 8c5826bc-d7e6-4506-9dab-ded01f4c2346 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+2dc45df9-c912-47a6-87f4-8eb1a5ee1272 1 2020-12-11 08:53:07.234+08 2020-12-11 08:53:07.234+08 19edfd93-0bd4-4c71-85c0-647971fa008a 66537b16-1e7d-4823-b03e-676459f5891d
+11dcf80d-a46c-4e22-9a8f-bb593a7e28fd 1 2020-12-11 08:53:58.629+08 2020-12-11 08:53:58.629+08 7737f9b3-195f-465e-b563-1a4f509e38ce 66537b16-1e7d-4823-b03e-676459f5891d
+4a234362-4626-4b36-81d4-0caa1f7c3a2c 1 2020-12-11 08:54:51.198+08 2020-12-11 08:54:51.198+08 dac7cbf1-b98a-4c95-9ff7-14b1602c494f 66537b16-1e7d-4823-b03e-676459f5891d
+740161b7-4fc4-4ea8-a6e7-92e2967ca6eb 1 2020-12-11 08:56:50.536+08 2020-12-11 08:56:50.536+08 6d6210bc-a5e7-439d-b731-e6efdeada2f7 66537b16-1e7d-4823-b03e-676459f5891d
+eff3ba9f-286e-46b0-9db5-b52ea848ac1f 2 2020-12-16 15:27:44.513+08 2020-12-16 15:27:44.513+08 1a190e1d-27a0-4b3a-8635-8737f24de024 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7acb204d-bb15-4ee5-894c-714cc65e4daf 1 2020-12-16 15:27:44.524+08 2020-12-16 15:27:44.524+08 1a190e1d-27a0-4b3a-8635-8737f24de024 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+702a3ccf-9ab6-4e19-95b9-6245c6e04333 1 2020-12-16 15:29:32.306+08 2020-12-16 15:29:32.306+08 19f735aa-e557-4795-93bf-fc5e8c57b47a 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+2e3d8e5f-92c8-4b83-9d21-aef4be9b2263 1 2020-12-16 15:35:33.637+08 2020-12-16 15:35:33.637+08 aeced422-061a-4b9f-bf4c-1e9597f5b016 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+dab5f60a-dbfc-4951-96bb-dad1810a2ad0 1 2020-12-16 15:38:50.35+08 2020-12-16 15:38:50.35+08 35ccbe8e-d5fd-462c-9b89-c1c128a9f4f9 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7df12d77-8970-4fff-9f35-3b008fdb9771 2 2020-12-16 17:00:14.084+08 2020-12-16 17:00:14.084+08 4f041931-dc1f-4868-985b-e5f1d27b1d38 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+00648dca-b439-4247-b1cc-ad416b169db5 1 2020-12-16 17:00:14.089+08 2020-12-16 17:00:14.089+08 4f041931-dc1f-4868-985b-e5f1d27b1d38 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+433ff29e-a7c6-430b-a1e5-3a709951b9e0 1 2020-12-21 17:00:24.184+08 2020-12-21 17:00:24.184+08 167e3709-030c-4724-bbad-4060c61870bc 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+9e915601-a6e0-42f9-b2bc-cf1796c48cb1 1 2020-12-21 17:30:31.216+08 2020-12-21 17:30:31.216+08 90f77fb4-1b78-4f30-b558-8026aa10f6db 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+1feaeb31-f479-466f-9219-95eae1bd10a5 1 2020-12-23 16:00:33.975+08 2020-12-23 16:00:33.975+08 7b536454-20a7-4c1b-bfeb-4a0f018d2673 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+30181893-36ba-45e6-b87f-8d8cac3d3b37 1 2020-12-24 14:19:13.342+08 2020-12-24 14:19:13.342+08 d67fea40-a63c-4087-b5fd-5e5f0c387893 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+318cfca2-7541-4831-898e-e01728bbd146 1 2021-01-08 17:49:03.018+08 2021-01-08 17:49:03.018+08 2d2bb5aa-7dae-4123-bf05-5cdc08d7480f 193f76a4-e706-4709-a54a-f6f08be3495c
+7d84ff9a-1a34-4ad9-8aea-b297a9ed6ef5 1 2020-12-28 14:09:52.535+08 2020-12-30 17:18:49.045+08 cce5d34b-3464-4566-81e6-3ff2540af13e 3dfadb0e-7608-49e1-aa43-24f7442b424a
+c99292ce-b061-45bd-9b6e-e8b245d590dc 1 2020-12-31 13:37:40.15+08 2020-12-31 13:37:40.15+08 1dae2ae1-5be8-4cd2-824f-cc4948f75959 629e35b1-4ffb-46b6-a53d-b8fb31425fe8
+6aa6d215-9d88-4b12-bddf-55f7df1a9f8c 1 2021-01-04 09:20:07.81+08 2021-01-04 09:20:07.81+08 b44eeccf-0eed-4785-a539-0122bcd2a99f 34ab0b66-1ce3-4462-ad0c-520d349ca04c
+7db61a3a-b4fd-491b-a05a-e4f380f2a393 1 2020-12-31 14:28:18.77+08 2021-01-06 11:32:03.093+08 c251c010-afd1-42d0-9d85-e044a6d51a8a 415b61a8-f54e-4e4b-a599-bf878220deab
+c08049c6-42da-40a9-80b2-e665985b24e6 1 2020-12-31 14:26:55.465+08 2021-01-06 11:32:22.798+08 406adc2f-6e40-43fc-832a-d6982677d5e1 415b61a8-f54e-4e4b-a599-bf878220deab
+a9da4397-40d0-4c10-8344-38b3959d6b40 1 2020-12-31 14:25:20.546+08 2021-01-06 11:32:32.492+08 7da4f815-e889-4b79-8b69-8fda271a954f 415b61a8-f54e-4e4b-a599-bf878220deab
+79642fe3-cd97-4d4d-b183-2dbccadc1402 2 2020-12-31 14:23:47.787+08 2021-01-06 11:32:44.654+08 1dae2ae1-5be8-4cd2-824f-cc4948f75959 415b61a8-f54e-4e4b-a599-bf878220deab
+d88f6fcd-dd3e-467b-8dc6-7ff0afd5ac09 2 2021-01-07 08:51:22.854+08 2021-01-07 08:51:22.854+08 2d4d2d3b-44b4-43ac-bb98-7c02fcf76152 193f76a4-e706-4709-a54a-f6f08be3495c
+353a977d-4e30-402d-b68d-fdc968f0ecfd 1 2021-01-07 08:51:23.132+08 2021-01-07 08:51:23.132+08 2d4d2d3b-44b4-43ac-bb98-7c02fcf76152 3dfadb0e-7608-49e1-aa43-24f7442b424a
+5eae67bd-91d8-4f16-a91d-5c3131acc7f6 1 2021-01-07 08:53:43.286+08 2021-01-07 08:53:43.286+08 daaea98a-a1a5-40c5-b34f-108d16d94b12 193f76a4-e706-4709-a54a-f6f08be3495c
+3ed67224-6373-43aa-88bb-5525f307f389 1 2021-01-14 14:29:22.426+08 2021-01-14 14:29:22.426+08 27e93aa0-1ec0-40df-aa0e-de4152459a66 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+5ce61c17-343b-40d0-bf89-b0f98ec0655b 1 2021-01-18 12:37:46.524+08 2021-01-18 12:37:46.524+08 7d999707-8940-47f8-995e-f50b44e48ede c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+d10c20a7-bf0e-431f-8b46-af16b2dc3493 1 2021-01-18 14:02:07.846+08 2021-01-18 14:02:07.846+08 ecf4b234-2797-4fbc-bf0d-0f3f41dbd017 c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+ac89a7c8-8b35-4dea-ae35-7083555aa058 1 2021-01-18 14:04:59.388+08 2021-01-18 14:04:59.388+08 d1b7163a-96fb-4364-a1ec-73b29be3dbc0 c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+25177421-56bd-4526-bb61-80bfbdac6734 1 2021-01-18 14:09:49.692+08 2021-01-18 14:09:49.692+08 c677c2a2-bc09-4171-ad9c-f9ddfbf3d046 c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+37b35270-ef60-478e-86b9-af7505a103a9 1 2021-01-18 14:14:29.626+08 2021-01-18 14:14:29.626+08 e2ad2fb6-75a3-490f-82ae-eac117102885 c1b7ebc4-5a06-40c2-a231-f3fa95094a26
+02a8457d-d78b-4e90-b195-aa32ecae3228 2 2020-09-25 08:57:52.891+08 2021-01-22 15:25:57.493+08 92520c27-c002-4a35-84f0-dae3238662ae 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+bcd81306-0c52-4917-9f4e-1f12b2aba1f1 1 2021-01-26 15:42:02.154+08 2021-01-26 15:42:02.154+08 1c9756ed-dcf4-4156-9a43-09ce478d2038 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+e1bc079f-babd-4346-85d1-114dbaa2c21d 1 2021-01-26 15:59:08.527+08 2021-01-26 15:59:08.527+08 dadaf677-ed6c-4f61-ba61-d030f157dd14 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+638f0588-b801-4d2b-8670-ca4fdec60d41 1 2021-01-27 13:50:41.038+08 2021-01-27 13:50:41.038+08 9baef129-7240-456d-819f-081ed682b6c6 66537b16-1e7d-4823-b03e-676459f5891d
+9a540453-32cf-40af-adda-95642eb383a7 1 2021-01-27 13:54:55.091+08 2021-01-27 13:54:55.091+08 1738d5bc-6a00-4ec6-813b-1ecd8ed014bd 66537b16-1e7d-4823-b03e-676459f5891d
+90588043-412c-498f-9155-0685988d8bd0 1 2021-01-27 16:50:39.679+08 2021-01-27 16:50:39.679+08 b4836295-511d-4752-99b6-099f9e59ec54 66537b16-1e7d-4823-b03e-676459f5891d
+65efe93f-1a17-4eb4-a179-ce76ab6c17e9 1 2021-01-27 16:52:16.887+08 2021-01-27 16:52:16.887+08 c948c019-e1f5-4a3d-a348-de60051d3e2e 66537b16-1e7d-4823-b03e-676459f5891d
+ba575768-81c4-4c14-9f2d-04fa864e226d 1 2021-02-20 15:01:28.113+08 2021-02-20 15:01:28.113+08 0b84defc-2160-4d4a-8d71-6f350b4d6666 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+fab87677-888e-4518-8659-53b5dfd3c6a3 1 2021-01-28 09:32:46.592+08 2021-01-28 09:32:46.592+08 998e19a5-71a8-484e-a7af-5ffe30f99e87 66537b16-1e7d-4823-b03e-676459f5891d
+5576f96c-9581-4276-b739-0573a8ebf1b8 1 2021-01-28 09:45:57.6+08 2021-01-28 09:45:57.6+08 aad44a46-f5ad-4b1c-b6a4-cff40950cfba 66537b16-1e7d-4823-b03e-676459f5891d
+ffc7efdf-4cd5-4f4f-92ec-3db6e058e699 1 2021-01-28 09:58:52.854+08 2021-01-28 09:58:52.854+08 10652dfa-31f2-41fa-b997-d6162cb01901 66537b16-1e7d-4823-b03e-676459f5891d
+63e11cb5-cde5-4171-9f98-29bd1a2fc703 1 2021-01-29 10:12:04.668+08 2021-01-29 10:12:04.668+08 c51a8eb3-9068-456f-9922-5934de559a71 3dfadb0e-7608-49e1-aa43-24f7442b424a
+2c435493-2a70-4351-87c5-98ec4c2430ba 2 2021-01-29 10:12:04.671+08 2021-01-29 10:12:04.671+08 c51a8eb3-9068-456f-9922-5934de559a71 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+01bcec7f-94a6-4e4b-aa40-0bfbc6e7a7cd 1 2021-01-29 10:20:59.591+08 2021-01-29 10:20:59.591+08 7c054865-5f77-4df5-9d1b-ed2c6f1bb27e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+edfc13ea-9d53-4359-8a5d-175794c31507 2 2021-01-29 10:23:39.205+08 2021-01-29 10:23:39.205+08 cce5d34b-3464-4566-81e6-3ff2540af13e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+754ed2aa-e632-424f-9b30-cade02417893 1 2021-01-29 10:40:05.543+08 2021-01-29 10:40:05.543+08 5ab5659c-c875-43de-a5cb-c2c09a6b738d 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b48adf9e-d73a-4eaa-9164-db7f61700a1b 1 2021-01-29 11:00:35.041+08 2021-01-29 11:00:35.041+08 a7e6bd92-16dd-49b0-a4c1-115a6c8b272f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+429a3145-8b01-4e86-b3ca-dbc5fe17a025 1 2021-01-29 11:01:29.757+08 2021-01-29 11:01:29.757+08 8f03b15b-fbb7-4bca-ae92-2230abf071b7 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6bf73ef5-add7-4fca-9109-abeff44fb7c5 1 2021-02-04 15:50:23.317+08 2021-02-04 15:50:23.317+08 ecf4b234-2797-4fbc-bf0d-0f3f41dbd017 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+d78ba7fc-eb9a-469d-b35b-b200fb48a6bb 1 2021-02-04 16:04:59.952+08 2021-02-04 16:04:59.952+08 408d0732-eb70-4420-89b3-8f5ab433528f e88f4b90-93c9-4a17-b425-b118ce4f4695
+8693f043-239f-4c5d-92af-98329ab97191 2 2021-02-04 16:04:59.956+08 2021-02-04 16:04:59.956+08 408d0732-eb70-4420-89b3-8f5ab433528f 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+6a0564cf-84b7-417f-b2d3-2d28b6c7b638 1 2021-02-04 16:07:06.782+08 2021-02-04 16:07:06.782+08 ff8195ce-78e0-4668-81bb-8f26e83411a9 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7a654ff2-acea-4f2d-b306-1228a40efd06 1 2021-02-04 16:16:40.275+08 2021-02-04 16:16:40.275+08 d1b7163a-96fb-4364-a1ec-73b29be3dbc0 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+26b345ea-524f-418a-9d6a-d49951b47485 1 2021-02-05 15:01:05.823+08 2021-02-05 15:01:05.823+08 e2ad2fb6-75a3-490f-82ae-eac117102885 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+0c3e6ef2-ff60-4ea4-a244-445fb7892e3d 1 2021-02-05 15:02:00.136+08 2021-02-05 15:02:00.136+08 c677c2a2-bc09-4171-ad9c-f9ddfbf3d046 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+b02ec007-4ee9-4359-b072-214b6ca173e8 1 2021-02-05 15:04:12.072+08 2021-02-05 15:04:12.072+08 7d999707-8940-47f8-995e-f50b44e48ede 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+f3aa671f-e62a-4ba6-ae6c-97bfcd022d22 1 2021-02-05 15:08:31.256+08 2021-02-05 15:08:31.256+08 90e48651-6ab9-4f11-95e9-c2c7eb4c3c15 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+65c99cac-65a9-4d11-ba14-78bf2cbeae96 1 2021-02-05 15:16:43.069+08 2021-02-05 15:16:43.069+08 c51512a6-3e90-4b6e-8a21-987464b10ca9 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+7eeac6c1-3030-42a2-a1f5-53ade070641a 1 2021-02-05 15:20:30.013+08 2021-02-05 15:20:30.013+08 d2e74fbe-59fe-420d-b127-c61ba8236f42 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+80560552-2ebd-411b-8da6-0292bc9fdd7c 1 2021-02-09 14:17:08.203+08 2021-02-09 14:17:08.203+08 b7dd781d-dba7-4228-b49f-8aee75e42625 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+ffa7ddbc-1735-46e1-b3ad-10c710cd67c9 1 2021-02-09 17:30:52.361+08 2021-02-09 17:30:52.361+08 e92738ba-66bf-4ec9-85c5-c1f2b4d7780e 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+c5e4fedb-77c1-4314-a2ab-ca98dbe14c21 1 2021-02-22 09:15:10.043+08 2021-02-22 09:15:10.043+08 c892bb1b-57aa-4b52-b1eb-79172e95a8fb 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+6c79ae4b-1355-4f76-b425-653185144205 1 2021-02-24 11:11:07.566+08 2021-02-24 11:11:07.566+08 5b625df3-f714-4971-94a8-625e9c8812fc 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ac468c3a-9a33-4fd5-89b2-7b2a21cd90bb 1 2021-02-24 09:24:53.45+08 2021-02-24 17:32:26.088+08 f8803e24-c7c9-4089-8f06-5a00433131b1 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+738176b6-6b0f-4161-9e28-2bb76e3c2ea8 1 2021-02-24 17:38:25.384+08 2021-02-24 17:38:25.384+08 18ab2f15-70ec-43ff-ab7c-717e4ad0c0cd 9a1540b6-fea8-4bc0-8090-296b05f87c4a
+ac1b9950-2b7a-4f47-98fb-9556cd8345e2 2 2021-02-24 17:38:25.387+08 2021-02-24 17:38:25.387+08 18ab2f15-70ec-43ff-ab7c-717e4ad0c0cd 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
+\.
+
+
+--
+-- Data for Name: DeviceProperty; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."DeviceProperty" (id, name, "showName", category, image, enum, "defaultValue", "precision", max, min, unit, "desc", "createdAt", "updatedAt", "deviceMetaId", "propertyTypeId", required, "isOtherParameter") FROM stdin;
+49 deviceType 设备类型 Constant \N \N DTU \N \N \N 2017-08-24 17:39:02.029+08 2017-08-24 17:39:02.029+08 1fbfe6ef-ffff-4bd9-936a-67d9665006be 5 t f
+52 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-08-24 20:03:54.312+08 2017-08-24 20:03:54.312+08 38d818a3-1e2d-42bd-af74-e6ed5fe0c8fd 5 t f
+2361 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-29 13:37:27.996+08 2018-03-29 13:37:27.996+08 f4976287-96c1-42a2-aedf-0d8e8ab739c5 5 t f
+50 deviceType 设备类型 Constant \N gateway 0 2017-08-24 17:39:38.791+08 2017-11-13 17:45:36.894+08 a1a0ce1a-3883-4148-8bd7-a94ce938e39b 5 t f
+35 SIMNum SIM卡号 Variable \N \N 13212345678 \N \N \N 2017-08-24 15:25:01.523+08 2017-08-24 15:25:01.523+08 1fbfe6ef-ffff-4bd9-936a-67d9665006be 5 t f
+37 SIMNum SIM卡号 Variable \N \N 13212345678 \N \N \N 2017-08-24 15:39:23.28+08 2017-08-24 15:39:23.28+08 337651d1-80e3-4b07-9e87-79d5e20547aa 5 t f
+39 SIMNum SIM卡号 Variable \N \N 13212345678 \N \N \N 2017-08-24 15:48:10.439+08 2017-08-24 15:48:10.439+08 a1a0ce1a-3883-4148-8bd7-a94ce938e39b 5 t f
+2027 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-02 16:15:39.594+08 2018-03-02 16:15:39.594+08 ec223bfa-7244-4458-8180-4205fd31ac24 5 t f
+2103 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-14 15:53:54.024+08 2018-03-14 15:53:54.024+08 4d3ecec5-32b4-4d9b-aa02-a08275dd10c7 5 t f
+56 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-08-26 15:45:06.85+08 2017-08-26 15:45:06.85+08 d51cfe97-0f8a-4f38-95fb-34208b171056 5 t f
+57 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-08-26 15:45:06.854+08 2017-08-26 15:45:06.854+08 d51cfe97-0f8a-4f38-95fb-34208b171056 5 t f
+58 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-08-26 15:51:32.57+08 2017-08-26 15:51:32.57+08 131c98fc-2216-4f0f-9cd3-581d88f9affd 5 t f
+61 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-08-26 15:59:26.882+08 2017-08-26 15:59:26.882+08 9110f259-e269-446d-afa3-798069f4534d 5 t f
+2104 channelId 通道号 Variable \N \N 1 \N 255 1 2018-03-14 15:53:54.028+08 2018-03-14 15:53:54.028+08 4d3ecec5-32b4-4d9b-aa02-a08275dd10c7 1 t f
+2362 K1 K1一次项系数 Variable \N 1 16 100000000000000000000000000000000 -100000000000000000000000000000000 \N 2018-03-29 13:37:28+08 2018-03-29 13:37:28+08 f4976287-96c1-42a2-aedf-0d8e8ab739c5 2 t f
+2363 K2 K2二次项系数 Variable \N 0 16 100000000000000000000000000000000 -100000000000000000000000000000000 2018-03-29 13:37:28.004+08 2018-03-29 13:37:28.004+08 f4976287-96c1-42a2-aedf-0d8e8ab739c5 2 t f
+65 channelId 通道号 Variable \N \N 1 \N 128 1 2017-08-26 16:17:23.353+08 2017-08-26 16:17:23.353+08 870242c3-963d-417d-85fa-21add06c9e0a 1 t f
+66 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-08-26 16:17:23.357+08 2017-08-26 16:17:23.357+08 870242c3-963d-417d-85fa-21add06c9e0a 5 t f
+67 id ID Variable \N \N 11011301 \N \N \N 2017-08-28 11:19:41+08 2017-08-28 11:19:41+08 31ec0204-1cc6-475a-bd8b-39ad4cda3a25 5 t f
+2364 Fo Fo基准读数 Variable \N 0 3 100000000000000000000000000000000 -100000000000000000000000000000000 2018-03-29 13:37:28.007+08 2018-03-29 13:37:28.007+08 f4976287-96c1-42a2-aedf-0d8e8ab739c5 2 t f
+2288 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 13:43:11.279+08 2018-03-26 13:43:11.279+08 473aee20-7c00-41cd-bd6e-b44c35c758ea 5 t f
+2289 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 13:43:33.807+08 2018-03-26 13:43:33.807+08 473aee20-7c00-41cd-bd6e-b44c35c758ea 1 t f
+51 deviceType 设备类型 Constant \N gateway 0 2017-08-24 17:40:09.347+08 2017-11-13 17:41:50.253+08 337651d1-80e3-4b07-9e87-79d5e20547aa 5 t f
+73 deviceType 设备型号 Constant \N \N sensor \N \N \N 2017-08-28 20:41:57.36+08 2017-08-28 20:41:57.36+08 193a9dcf-959d-4cd5-a186-637c11ae97a0 5 t f
+74 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-08-28 20:41:57.366+08 2017-08-28 20:41:57.366+08 193a9dcf-959d-4cd5-a186-637c11ae97a0 5 t f
+76 range 量程 Constant \N \N (‐40,120),(0,100) \N \N \N 2017-08-28 21:22:08.627+08 2017-08-28 21:22:08.627+08 b3f251c1-ab5e-4427-8b38-9180d6544783 5 t f
+2290 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 13:47:45.403+08 2018-03-26 13:47:45.403+08 b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 5 t f
+79 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-08-31 16:57:12.378+08 2017-08-31 16:57:12.378+08 39dc1e20-9e5e-4776-8459-5354261926fd 5 t f
+80 channelId 通道号 Constant \N \N 1 \N \N \N 2017-08-31 16:57:12.383+08 2017-08-31 16:57:12.383+08 39dc1e20-9e5e-4776-8459-5354261926fd 1 t f
+81 range 量程 Constant \N \N (‐1000,1000),(-10,100) \N \N \N 2017-08-31 16:57:12.386+08 2017-08-31 16:57:12.386+08 39dc1e20-9e5e-4776-8459-5354261926fd 5 t f
+2295 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 14:11:36.381+08 2018-03-26 14:11:36.381+08 abaf6bf4-288f-4d21-9fab-515213e6dcac 1 t f
+2300 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 14:25:34.639+08 2018-03-26 14:25:34.639+08 780ffe7d-7369-4d2f-9184-32790466f2ba 5 t f
+2365 K3 K3三次项系数 Variable \N \N 0 16 100000000000000000000000000000000 -100000000000000000000000000000000 2018-03-29 13:37:28.011+08 2018-03-29 13:37:28.011+08 f4976287-96c1-42a2-aedf-0d8e8ab739c5 2 t f
+72 devicetype 设备类型 Constant \N sensor 0 2017-08-28 20:34:21.041+08 2018-07-23 17:13:59.566+08 9e8050a9-f38a-45c3-a02b-40670bdf19b7 5 t f
+1068 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 16:18:59.708+08 2018-01-05 16:18:59.708+08 9abfc35c-6cff-489a-8257-b868954725f4 5 t f
+2534 sensortype 设备类型 Constant \N 485 0 \N \N \N 2018-08-03 10:29:52.704+08 2018-08-03 10:29:52.704+08 777c9799-3abe-4eee-a583-f5e6fac01946 5 t f
+1069 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 16:18:59.71+08 2018-01-05 16:18:59.71+08 9abfc35c-6cff-489a-8257-b868954725f4 1 t f
+2686 ranges \N Constant \N -45,45 0 ° 2018-12-24 11:53:26.54+08 2018-12-24 14:16:11.652+08 b92bc45a-bf9b-425f-9747-7caedf0c2784 5 t f
+2774 range 量程 Constant \N (-300,300) 0 \N \N t 2019-02-25 13:43:02.808+08 2019-02-25 13:43:02.808+08 30bfe302-d364-4325-be1f-7fef73afaf77 5 t f
+2775 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 13:43:02.812+08 2019-02-25 13:43:02.812+08 30bfe302-d364-4325-be1f-7fef73afaf77 5 t f
+102 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-02 14:31:47.81+08 2017-09-02 14:31:47.81+08 112843b4-e834-4892-9ef3-260fe3d90c24 5 t f
+103 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-02 14:47:06.963+08 2017-09-02 14:47:06.963+08 28abcb7f-eb40-406b-a798-fc280b30638e 5 t f
+104 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-02 14:47:06.967+08 2017-09-02 14:47:06.967+08 28abcb7f-eb40-406b-a798-fc280b30638e 5 t f
+105 range 量程 Constant \N \N (-30,30) \N \N \N ° 2017-09-02 14:47:06.97+08 2017-09-02 14:47:06.97+08 28abcb7f-eb40-406b-a798-fc280b30638e 5 t f
+106 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-02 14:59:34.598+08 2017-09-02 14:59:34.598+08 0a25e0b7-784b-46fb-8fa3-d1a99593f343 5 t f
+107 moduleId 模块号 Constant \N \N 1 \N \N \N 2017-09-02 14:59:34.602+08 2017-09-02 14:59:34.602+08 0a25e0b7-784b-46fb-8fa3-d1a99593f343 5 t f
+108 range 量程 Constant \N \N (0.05,70) \N \N \N mm 2017-09-02 14:59:34.605+08 2017-09-02 14:59:34.605+08 0a25e0b7-784b-46fb-8fa3-d1a99593f343 5 t f
+54 range 量程 Constant \N (0.05,80) 0 2017-08-24 20:03:54.32+08 2017-11-28 15:15:36.062+08 38d818a3-1e2d-42bd-af74-e6ed5fe0c8fd 5 t f
+60 range 量程 Constant \N (-40,120),(0,100) 0 ℃,%RH 2017-08-26 15:51:32.577+08 2017-12-14 13:54:35.286+08 131c98fc-2216-4f0f-9cd3-581d88f9affd 5 t f
+109 range 量程 Constant \N (-30,30),(-30,30),(-25,70) 0 °,°,℃ 2017-09-04 09:36:21.662+08 2017-12-20 16:01:30.204+08 c9946e27-bce7-41eb-b341-d6b03a7f115f 5 t f
+2776 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 13:43:02.815+08 2019-02-25 13:43:02.815+08 30bfe302-d364-4325-be1f-7fef73afaf77 5 t f
+2777 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 13:43:02.818+08 2019-02-25 13:43:02.818+08 30bfe302-d364-4325-be1f-7fef73afaf77 1 t f
+2778 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 13:43:02.82+08 2019-02-25 13:43:02.82+08 30bfe302-d364-4325-be1f-7fef73afaf77 1 t f
+116 range 量程 Variable \N (0,60),(0,360) 0 m/s,° 2017-09-04 14:12:42.538+08 2017-09-04 15:31:19.693+08 1d4b6c8a-8a37-4ba0-9612-ad63ea6f1f3a 5 t f
+114 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-04 14:12:42.527+08 2017-09-04 14:12:42.527+08 1d4b6c8a-8a37-4ba0-9612-ad63ea6f1f3a 5 t f
+115 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-04 14:12:42.533+08 2017-09-04 14:12:42.533+08 1d4b6c8a-8a37-4ba0-9612-ad63ea6f1f3a 5 t f
+2105 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-14 15:54:05.919+08 2018-03-14 15:54:05.919+08 28d8942e-d1ab-40ee-878a-c3b2f60da896 5 t f
+2366 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-29 18:02:08.017+08 2018-03-29 18:02:08.017+08 0beb606c-f306-4476-8526-31646c8107e5 5 t f
+111 devicetype 设备类型 Constant \N sensor 0 2017-09-04 09:36:21.669+08 2018-07-23 17:13:22.594+08 c9946e27-bce7-41eb-b341-d6b03a7f115f 5 t f
+2535 sensortype 设备类型 Constant \N 485 0 \N \N \N 2018-08-03 10:36:00.524+08 2018-08-03 10:36:00.524+08 5f65c5dc-c32f-4e64-b40e-97f907d7c0fd 5 t f
+124 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-04 19:04:13.379+08 2017-09-04 19:04:13.379+08 a0bf9003-9dbd-4cc7-8bea-7da81ce69f32 5 t f
+126 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-04 20:41:19.227+08 2017-09-04 20:41:19.227+08 ed599be6-4811-4a09-a065-4b29586a4c00 5 t f
+2028 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-02 17:16:41.289+08 2018-03-02 17:16:41.289+08 a812ef4d-0c77-49e6-bad2-c74c79c50e49 5 t f
+2106 channelId 通道号 Variable \N \N 1 \N 255 1 2018-03-14 15:54:05.921+08 2018-03-14 15:54:05.921+08 28d8942e-d1ab-40ee-878a-c3b2f60da896 1 t f
+2297 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 14:14:43.053+08 2018-03-26 14:14:43.053+08 d2a5375c-0240-4435-9b8f-a62372fafaca 1 t f
+131 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-05 10:54:48.275+08 2017-09-05 10:54:48.275+08 9604d366-28f8-4291-a5bd-5d049b1e90eb 5 t f
+132 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-05 10:54:48.28+08 2017-09-05 10:54:48.28+08 9604d366-28f8-4291-a5bd-5d049b1e90eb 5 t f
+133 channelId 通道号 Variable \N \N 1 \N 128 1 2017-09-05 10:54:48.283+08 2017-09-05 10:54:48.283+08 9604d366-28f8-4291-a5bd-5d049b1e90eb 1 t f
+134 range 量程 Constant \N \N (0,100) \N \N \N 2017-09-05 10:54:48.286+08 2017-09-05 10:54:48.286+08 9604d366-28f8-4291-a5bd-5d049b1e90eb 5 t f
+2687 ranges \N Constant \N -15,15 0 ° 2018-12-24 11:53:35.054+08 2018-12-24 14:16:26.643+08 52ae2b25-56b5-4a29-9f0b-33454ac99ff6 5 t f
+2779 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 13:43:02.823+08 2019-02-25 13:43:02.823+08 30bfe302-d364-4325-be1f-7fef73afaf77 5 t f
+139 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-06 18:47:18.586+08 2017-09-06 18:47:18.586+08 584a210b-20f2-49cf-906a-9d6b4883af09 5 t f
+140 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-06 18:47:18.589+08 2017-09-06 18:47:18.589+08 584a210b-20f2-49cf-906a-9d6b4883af09 5 t f
+2894 range 量程 Constant \N (-30,30),(-30,30),(-25,70) 0 \N \N °,°,℃ 2019-02-25 17:37:04.348+08 2019-02-25 17:37:04.348+08 145c9d4f-4fc0-4441-a8c4-0f32b15f5018 5 t f
+143 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-06 19:34:37.701+08 2017-09-06 19:34:37.701+08 8e782506-4bab-4798-9e24-315107e3cc15 5 t f
+144 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-06 20:01:37.377+08 2017-09-06 20:01:37.377+08 05d70310-6689-4174-b4ae-274ab5e8f287 5 t f
+145 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-07 14:40:21.355+08 2017-09-07 14:40:21.355+08 0c5bca0d-95b8-416e-865b-1f09bb49285f 5 t f
+147 range 量程 Constant \N (0,180),(0,180),(-40,120) 0 ° 2017-09-07 14:40:21.365+08 2017-09-07 14:40:37.029+08 0c5bca0d-95b8-416e-865b-1f09bb49285f 5 t f
+2895 devicetype 设备类型 Constant \N sensor 0 \N \N 2019-02-25 17:37:04.352+08 2019-02-25 17:37:04.352+08 145c9d4f-4fc0-4441-a8c4-0f32b15f5018 5 t f
+150 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-07 20:31:18.889+08 2017-09-07 20:31:18.889+08 77d3bafd-4986-4848-b3c9-dfe847c6750e 5 t f
+151 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-08 09:20:57.974+08 2017-09-08 09:20:57.974+08 f9cf9002-bdbd-458c-8534-37db6183e217 5 t f
+152 moduleId 模块号 Variable \N \N 1 \N \N \N ° 2017-09-08 17:28:38.397+08 2017-09-08 17:28:38.397+08 96870c78-2ed9-4141-9438-e9415cd6eeb8 5 t f
+2896 sensortype 传感器类型 Constant \N cx 0 \N \N 2019-02-25 17:37:04.354+08 2019-02-25 17:37:04.354+08 145c9d4f-4fc0-4441-a8c4-0f32b15f5018 5 t f
+2897 protocolcode 协议号 Constant \N 1503 0 \N \N \N Modbus杆式测斜协议 2019-02-25 17:37:04.357+08 2019-02-25 17:37:04.357+08 145c9d4f-4fc0-4441-a8c4-0f32b15f5018 5 t f
+2303 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 14:28:53.454+08 2018-03-26 14:28:53.454+08 424f45f6-916c-4383-bce4-c71153f82e63 1 t f
+157 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-11 20:33:20.863+08 2017-09-11 20:33:20.863+08 497ca51c-dd0a-46cb-8651-ac4bb7bd45c0 5 t f
+158 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-12 17:44:24.7+08 2017-09-12 17:44:24.7+08 c7528fab-94f4-4110-9aaf-8964afa09c20 5 t f
+2307 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 14:44:49.652+08 2018-03-26 14:44:49.652+08 5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8 1 t f
+160 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-12 17:44:48.592+08 2017-09-12 17:44:48.592+08 003540d0-616c-4611-92c1-1cd31005eabf 5 t f
+161 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-12 17:57:39.3+08 2017-09-12 17:57:39.3+08 ab34de76-f758-4311-8bfc-dc7054a58ecf 5 t f
+162 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-12 17:57:39.306+08 2017-09-12 17:57:39.306+08 ab34de76-f758-4311-8bfc-dc7054a58ecf 5 t f
+163 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-12 18:08:25.124+08 2017-09-12 18:08:25.124+08 65bd339b-0469-4019-8c96-55a6dbc6b697 5 t f
+165 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-12 19:48:22.323+08 2017-09-12 19:48:22.323+08 a8a32974-fa53-4e18-a264-58c885d3c409 5 t f
+167 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-12 20:28:25.977+08 2017-09-12 20:28:25.977+08 5bc92012-60a1-48ac-840f-575cb4e94c48 5 t f
+168 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-13 09:13:35.784+08 2017-09-13 09:13:35.784+08 d523046b-7e32-486b-a1ab-cac779eb6209 5 t f
+170 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-13 10:00:10.894+08 2017-09-13 10:00:10.894+08 e833a38c-2409-474d-8d23-86ff4d45b199 5 t f
+171 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-13 10:00:10.898+08 2017-09-13 10:00:10.898+08 e833a38c-2409-474d-8d23-86ff4d45b199 5 t f
+174 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-14 14:34:58.943+08 2017-09-14 14:34:58.943+08 eccb6310-f340-4668-9469-3df210aa471d 5 t f
+176 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-14 14:41:42.389+08 2017-09-14 14:41:42.389+08 6850f742-c5b7-4984-b1ef-d01b16015eb9 5 t f
+178 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-14 14:47:52.179+08 2017-09-14 14:47:52.179+08 ac3a0caf-7018-44d2-9337-32c7194ec412 5 t f
+180 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-14 14:50:50.819+08 2017-09-14 14:50:50.819+08 a96f169e-56b9-49c8-a5cd-caade25fbf14 5 t f
+77 deviceType 设备类型 Constant \N sensor 0 2017-08-28 21:24:01.299+08 2017-12-14 13:56:47.454+08 b3f251c1-ab5e-4427-8b38-9180d6544783 5 t f
+2923 sensortype 设备类型 Constant \N 485 0 \N \N \N 2019-03-15 14:36:33.06+08 2019-03-15 14:36:33.06+08 ce1e7a12-8f26-4f77-8610-4871a40cfe98 5 t f
+2312 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 15:12:19.762+08 2018-03-26 15:12:19.762+08 c0cde67c-9734-4a3c-bb52-0caba0ae8724 5 t f
+112 range 量程 Constant \N (-1500,1500) 0 με 2017-09-04 09:48:12.306+08 2018-01-05 11:26:25.824+08 9110f259-e269-446d-afa3-798069f4534d 5 t f
+2322 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 15:41:23.386+08 2018-03-26 15:41:23.386+08 37c046eb-9a0e-49b0-95fb-f0128338f381 5 t f
+3003 f0 频率初值 Variable \N \N 0 4 9999 -9999 Hz 2019-03-28 17:25:27.645+08 2019-03-28 17:25:27.645+08 fde20cf0-6bb6-4987-8830-dec5aa5874f2 2 t f
+2993 aqi_pre 执行前延迟-AQI Variable \N 25 0 600 0 百毫秒 2019-03-28 09:36:46.211+08 2019-04-02 09:57:57.972+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 1 t f
+181 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-14 14:50:50.824+08 2017-09-14 14:50:50.824+08 a96f169e-56b9-49c8-a5cd-caade25fbf14 5 t f
+182 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-14 14:53:06.117+08 2017-09-14 14:53:06.117+08 3415a2e9-2c44-402f-872c-f0187cef058f 5 t f
+183 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-14 14:53:06.122+08 2017-09-14 14:53:06.122+08 3415a2e9-2c44-402f-872c-f0187cef058f 5 t f
+184 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-14 17:27:01.228+08 2017-09-14 17:27:01.228+08 cdf69820-94cb-45a3-acfe-21aa83737595 5 t f
+185 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-14 17:27:01.232+08 2017-09-14 17:27:01.232+08 cdf69820-94cb-45a3-acfe-21aa83737595 5 t f
+186 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-14 19:08:55.153+08 2017-09-14 19:08:55.153+08 55d8d331-c61d-4523-886d-2d69f350cde0 5 t f
+187 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-14 19:08:55.158+08 2017-09-14 19:08:55.158+08 55d8d331-c61d-4523-886d-2d69f350cde0 5 t f
+188 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-14 19:37:28.759+08 2017-09-14 19:37:28.759+08 2078f06f-be3c-4d10-90b1-200f3bdb00ae 5 t f
+189 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-14 20:24:32.026+08 2017-09-14 20:24:32.026+08 92597060-2385-438d-8a9e-25fee05e4e31 5 t f
+190 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-14 20:24:32.03+08 2017-09-14 20:24:32.03+08 92597060-2385-438d-8a9e-25fee05e4e31 5 t f
+191 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-14 20:36:40.112+08 2017-09-14 20:36:40.112+08 80dbb37c-0408-4a0b-8ef5-dc1acd7c303b 5 t f
+192 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-14 20:36:40.116+08 2017-09-14 20:36:40.116+08 80dbb37c-0408-4a0b-8ef5-dc1acd7c303b 5 t f
+193 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-14 20:56:17.192+08 2017-09-14 20:56:17.192+08 fd8e5a82-2b93-4d83-9132-4666b974079d 5 t f
+194 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-16 12:22:16.738+08 2017-09-16 12:22:16.738+08 0357e07d-3afb-4d4b-b196-766688a5b2b2 5 t f
+195 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-16 14:18:31.286+08 2017-09-16 14:18:31.286+08 831ab1f7-fe76-4152-b7a0-3359bdf7c3bd 5 t f
+175 deviceType 设备类型 Constant \N sensor 0 2017-09-14 14:34:58.947+08 2017-09-27 10:23:49.526+08 eccb6310-f340-4668-9469-3df210aa471d 5 t f
+179 deviceType 设备类型 Constant \N sensor 0 2017-09-14 14:47:52.183+08 2017-09-27 10:41:41.807+08 ac3a0caf-7018-44d2-9337-32c7194ec412 5 t f
+169 deviceType 设备类型 Constant \N sensor 0 2017-09-13 09:13:35.788+08 2017-09-27 11:02:03.274+08 d523046b-7e32-486b-a1ab-cac779eb6209 5 t f
+166 deviceType 设备类型 Constant \N sensor 0 2017-09-12 19:48:22.327+08 2017-09-27 11:14:28.67+08 a8a32974-fa53-4e18-a264-58c885d3c409 5 t f
+164 deviceType 设备类型 Constant \N sensor 0 2017-09-12 18:08:25.127+08 2017-09-27 15:48:24.789+08 65bd339b-0469-4019-8c96-55a6dbc6b697 5 t f
+196 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-16 15:21:21.462+08 2017-09-16 15:21:21.462+08 eb1c1781-cea9-411f-8c15-39aafc8ee62c 5 t f
+197 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-16 16:10:09.783+08 2017-09-16 16:10:09.783+08 aa9f0751-4576-42b2-b09b-a6c3959955df 5 t f
+198 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-18 20:53:58.419+08 2017-09-18 20:53:58.419+08 6f16c6fa-6d60-481b-95ec-e450227fe268 5 t f
+199 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-18 21:05:59.014+08 2017-09-18 21:05:59.014+08 34e17d2c-cfa7-42a7-88d0-fc64f13f68c2 5 t f
+200 demoxx demoxx Variable \N \N demoxx \N \N \N 2017-09-19 16:23:55.258+08 2017-09-19 16:23:55.258+08 98a8fd6f-cab9-47d3-88aa-8832962c931c 5 t f
+201 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-19 20:20:53.763+08 2017-09-19 20:20:53.763+08 7e6111e8-0a68-4af8-92ae-6238b7f3c631 5 t f
+202 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-19 20:40:00.073+08 2017-09-19 20:40:00.073+08 d32b2513-a8bb-465c-aabf-0832f355ef6b 5 t f
+204 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-20 16:26:18.74+08 2017-09-20 16:26:18.74+08 c094bbbe-bc2a-4223-bba7-539edb03d3b0 5 t f
+205 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-20 16:26:18.745+08 2017-09-20 16:26:18.745+08 c094bbbe-bc2a-4223-bba7-539edb03d3b0 5 t f
+206 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-21 10:57:18.473+08 2017-09-21 10:57:18.473+08 1c210656-dc67-470f-b8c3-d653c82e3bb0 5 t f
+2367 sensortype 传感器类型 Constant \N \N njd \N \N \N \N 2018-04-02 15:54:14.352+08 2018-04-02 15:54:14.352+08 1489127c-8f48-448b-a86e-1604f08894ce 5 t f
+208 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-22 17:34:24.799+08 2017-09-22 17:34:24.799+08 fd3ad887-4a33-4d80-b3bb-d5d48ced0e7b 5 t f
+209 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-22 17:34:24.804+08 2017-09-22 17:34:24.804+08 fd3ad887-4a33-4d80-b3bb-d5d48ced0e7b 5 t f
+210 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-25 10:44:21.689+08 2017-09-25 10:44:21.689+08 d3245ff1-0781-49bd-b37c-e245a350a709 5 t f
+211 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-25 10:44:21.693+08 2017-09-25 10:44:21.693+08 d3245ff1-0781-49bd-b37c-e245a350a709 5 t f
+212 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-25 10:54:34.195+08 2017-09-25 10:54:34.195+08 3bf186e9-5049-40e4-ba57-b40d90cd1543 5 t f
+213 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-25 10:54:34.198+08 2017-09-25 10:54:34.198+08 3bf186e9-5049-40e4-ba57-b40d90cd1543 5 t f
+214 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-25 19:45:57.227+08 2017-09-25 19:45:57.227+08 6f1f679a-d9b7-4fe3-945d-8b83105284a8 5 t f
+215 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-25 19:45:57.23+08 2017-09-25 19:45:57.23+08 6f1f679a-d9b7-4fe3-945d-8b83105284a8 5 t f
+216 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-25 20:40:46.479+08 2017-09-25 20:40:46.479+08 ca7ff65b-b5a0-49f3-ad0b-6821012604ce 5 t f
+218 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-25 20:40:46.486+08 2017-09-25 20:40:46.486+08 ca7ff65b-b5a0-49f3-ad0b-6821012604ce 5 t f
+177 deviceType 设备类型 Constant \N sensor 0 2017-09-14 14:41:42.392+08 2017-09-27 10:23:27.487+08 6850f742-c5b7-4984-b1ef-d01b16015eb9 5 t f
+221 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-28 09:01:59.706+08 2017-09-28 09:01:59.706+08 39dc1e20-9e5e-4776-8459-5354261926fd 5 t f
+222 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-28 09:03:39.804+08 2017-09-28 09:03:39.804+08 2078f06f-be3c-4d10-90b1-200f3bdb00ae 5 t f
+223 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-28 09:05:25.752+08 2017-09-28 09:05:25.752+08 77d3bafd-4986-4848-b3c9-dfe847c6750e 5 t f
+224 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-28 09:09:12.795+08 2017-09-28 09:09:12.795+08 d32b2513-a8bb-465c-aabf-0832f355ef6b 5 t f
+226 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-28 09:14:50.548+08 2017-09-28 09:14:50.548+08 831ab1f7-fe76-4152-b7a0-3359bdf7c3bd 5 t f
+227 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-28 09:17:15.919+08 2017-09-28 09:17:15.919+08 5bc92012-60a1-48ac-840f-575cb4e94c48 5 t f
+2536 sensortype 设备类型 Constant \N 485 0 \N \N \N 2018-08-03 10:41:17.521+08 2018-08-03 10:41:17.521+08 bc1228dd-0195-4fba-b21f-178b91e4cf60 5 t f
+217 channelId 通道号 Variable \N 1 0 128 1 2017-09-25 20:40:46.483+08 2017-09-29 09:13:08.29+08 ca7ff65b-b5a0-49f3-ad0b-6821012604ce 1 t f
+231 channelId 通道号 Variable \N \N 1 \N 128 1 2017-09-29 09:14:52.556+08 2017-09-29 09:14:52.556+08 6f1f679a-d9b7-4fe3-945d-8b83105284a8 1 t f
+234 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-09-29 15:08:42.967+08 2017-09-29 15:08:42.967+08 be246ea1-fd75-4151-92c6-54b278d11287 5 t f
+235 channelId 通道号 Variable \N \N 1 \N 128 1 2017-09-29 15:08:42.974+08 2017-09-29 15:08:42.974+08 be246ea1-fd75-4151-92c6-54b278d11287 1 t f
+2688 ranges \N Constant \N -30,30 0 ° 2018-12-24 15:31:37.925+08 2018-12-24 15:32:28.777+08 2202dd15-500f-45e8-a555-e90ddf24df13 5 t f
+2780 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 14:08:36.97+08 2019-02-25 14:08:36.97+08 2b835f19-8eba-46b3-b3aa-affc9b36dcd1 5 t f
+2781 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 14:08:36.973+08 2019-02-25 14:08:36.973+08 2b835f19-8eba-46b3-b3aa-affc9b36dcd1 5 t f
+236 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-29 15:08:42.979+08 2017-09-29 15:08:42.979+08 be246ea1-fd75-4151-92c6-54b278d11287 5 t f
+237 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-29 16:27:41.324+08 2017-09-29 16:27:41.324+08 f9cf9002-bdbd-458c-8534-37db6183e217 5 t f
+2368 sensortype 传感器类型 Constant \N \N kqzl \N \N \N \N 2018-04-02 16:51:42.754+08 2018-04-02 16:51:42.754+08 1e7003bf-2cd1-4dcb-9ad9-116151f49ae6 5 t f
+239 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-29 17:06:18.88+08 2017-09-29 17:06:18.88+08 8e782506-4bab-4798-9e24-315107e3cc15 5 t f
+240 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-29 17:10:39.823+08 2017-09-29 17:10:39.823+08 05d70310-6689-4174-b4ae-274ab5e8f287 5 t f
+241 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-09-29 17:42:48.33+08 2017-09-29 17:42:48.33+08 ed599be6-4811-4a09-a065-4b29586a4c00 5 t f
+243 11111111111111111111 11111111111111111111 Variable \N 1 32 1 1 rr 3333333333333333333 2017-09-30 11:42:38.237+08 2017-09-30 11:43:55.838+08 cbc19e42-a8ba-4a12-83f9-6ef1469df546 2 t f
+2537 account 账号 Variable \N \N \N \N \N \N 2018-08-09 16:03:13.77+08 2018-08-09 16:03:13.77+08 6dab819c-b584-4aea-bf13-c12a6a595abb 5 t f
+244 阿发达 阿发达你 Variable \N \N 阿道夫 \N \N \N 2017-10-07 20:50:21.686+08 2017-10-07 20:50:21.686+08 6d1f494d-6e60-4181-85ee-115ea3586c6d 5 t f
+2538 pw 密码 Variable \N \N \N \N \N 2018-08-09 16:03:13.772+08 2018-08-09 16:03:13.772+08 6dab819c-b584-4aea-bf13-c12a6a595abb 5 t f
+2539 boxId 云盒编号 Variable \N \N \N \N \N 2018-08-09 16:03:13.775+08 2018-08-09 16:03:13.775+08 6dab819c-b584-4aea-bf13-c12a6a595abb 5 t f
+2540 tokenUrl tokenUrl Variable \N \N \N \N \N 2018-08-09 16:03:13.778+08 2018-08-09 16:03:13.778+08 6dab819c-b584-4aea-bf13-c12a6a595abb 5 t f
+2541 dataUrl dataUrl Variable \N \N \N \N \N 2018-08-09 16:03:13.78+08 2018-08-09 16:03:13.78+08 6dab819c-b584-4aea-bf13-c12a6a595abb 5 t f
+252 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-10-31 15:29:07.337+08 2017-10-31 15:29:07.337+08 abb38d23-09f3-48fc-b9ee-4dfaf1db995b 5 t f
+253 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-10-31 16:29:27.939+08 2017-10-31 16:29:27.939+08 8ae3c80d-72ae-4e4f-b6e7-fd2dda6cc125 5 t f
+2029 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-05 09:35:14.849+08 2018-03-05 09:35:14.849+08 5fc4a5d5-9307-4ab0-9fb1-7f017c432911 5 t f
+256 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-11-01 15:38:54.2+08 2017-11-01 15:38:54.2+08 e5b27a73-2d4c-4b53-8bcd-86583097a730 5 t f
+257 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-11-06 11:16:45.216+08 2017-11-06 11:16:45.216+08 c52cea56-d5aa-4b14-ad9f-05fb6974e528 5 t f
+258 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-11-06 15:04:16.832+08 2017-11-06 15:04:16.832+08 43e2a07a-c33e-4e54-ba5e-0a948ae4ba61 5 t f
+259 deviceType Constant \N \N gateway \N \N \N 2017-11-09 11:07:51.842+08 2017-11-09 11:07:51.842+08 26ceb3f3-78b3-4b0a-910b-a5bc39218370 5 t f
+260 DtuID Variable \N \N 11111111 \N \N \N 2017-11-09 11:07:51.847+08 2017-11-09 11:07:51.847+08 26ceb3f3-78b3-4b0a-910b-a5bc39218370 5 t f
+261 SIMNum Variable \N \N 13212345678 \N \N \N 2017-11-09 11:07:51.849+08 2017-11-09 11:07:51.849+08 26ceb3f3-78b3-4b0a-910b-a5bc39218370 5 t f
+262 deviceType 设备类型 Constant \N \N gateway \N \N \N 2017-11-13 17:18:43.722+08 2017-11-13 17:18:43.722+08 8015ec05-fd08-4afb-b018-3bc916702f96 5 t f
+263 SIMNum SIM卡号 Variable \N \N 13212345678 \N \N \N 2017-11-13 17:19:25.873+08 2017-11-13 17:19:25.873+08 8015ec05-fd08-4afb-b018-3bc916702f96 5 t f
+264 deviceType 设备类型 Constant \N \N gateway \N \N \N 2017-11-13 17:30:34.386+08 2017-11-13 17:30:34.386+08 f8ec9655-408b-46e4-96f3-a8fcc382230a 5 t f
+265 SIMNum SIM卡号 Variable \N \N 13212345678 \N \N \N 2017-11-13 17:31:01.354+08 2017-11-13 17:31:01.354+08 f8ec9655-408b-46e4-96f3-a8fcc382230a 5 t f
+266 deviceType 设备类型 Constant \N \N gateway \N \N \N 2017-11-13 17:31:29.958+08 2017-11-13 17:31:29.958+08 b00292b1-f8e5-46c1-808a-dff46e9557ff 5 t f
+267 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-16 13:50:55.94+08 2017-11-16 13:50:55.94+08 cff552ac-d565-4a44-8400-e0f4382ce853 5 t f
+268 range 量程 Variable \N \N 0,2000 \N \N \N 量程格式 0,1 2017-11-16 13:50:55.943+08 2017-11-16 13:50:55.943+08 cff552ac-d565-4a44-8400-e0f4382ce853 5 t f
+269 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-16 17:03:23.929+08 2017-11-16 17:03:23.929+08 f86c7d29-f504-474d-8665-d484e5c41e8a 5 t f
+271 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-17 09:45:45.988+08 2017-11-17 09:45:45.988+08 d87be87a-12ba-4e65-97ba-816bcb3e2e62 5 t f
+2689 range 量程 Constant \N (-40,120),(0,100) 0 m3,L/h 2018-12-25 11:22:22.508+08 2018-12-25 11:38:05.631+08 f09bd97d-d0b3-4fbc-ae36-8de97f4c64e2 5 t f
+272 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-20 16:43:00.271+08 2017-11-20 16:43:00.271+08 3f80f427-4615-44ae-b2e8-e783733d0ea5 5 t f
+273 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-21 15:57:22.499+08 2017-11-21 15:57:22.499+08 dfbedf15-8cef-4760-9cad-efaab883db3d 5 t f
+53 moduleId 模块号 Variable \N 1 0 2017-08-24 20:03:54.316+08 2017-11-21 16:59:45.966+08 38d818a3-1e2d-42bd-af74-e6ed5fe0c8fd 5 t f
+274 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-23 10:44:01.199+08 2017-11-23 10:44:01.199+08 57bf451a-e6f5-4df5-a4a7-c2c42a46546f 5 t f
+154 moduleId 模块号 Tag \N 0 2017-09-09 14:39:09.832+08 2017-11-23 15:36:21.984+08 ae93a369-2ef8-4e20-83d6-d2f89076b115 5 t f
+228 deviceType 设备类型 Constant \N sensor 0 2017-09-28 09:58:53.859+08 2017-11-23 15:39:49.106+08 ae93a369-2ef8-4e20-83d6-d2f89076b115 5 t f
+2782 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 14:08:36.975+08 2019-02-25 14:08:36.975+08 2b835f19-8eba-46b3-b3aa-affc9b36dcd1 1 t f
+277 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-28 16:55:19.419+08 2017-11-28 16:55:19.419+08 fe65a1cd-2040-403c-bb6f-529d4063bc45 5 t f
+2783 range 量程 Constant \N (-400,400) 0 \N \N t 2019-02-25 14:08:36.977+08 2019-02-25 14:08:36.977+08 2b835f19-8eba-46b3-b3aa-affc9b36dcd1 5 t f
+2784 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 14:08:36.98+08 2019-02-25 14:08:36.98+08 2b835f19-8eba-46b3-b3aa-affc9b36dcd1 5 t f
+2785 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 14:08:36.982+08 2019-02-25 14:08:36.982+08 2b835f19-8eba-46b3-b3aa-affc9b36dcd1 1 t f
+280 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-29 09:23:59.564+08 2017-11-29 09:23:59.564+08 04cb319d-9e45-4534-8be6-5f1f4aef7740 5 t f
+281 channelId 通道号 Variable \N \N 1 \N 65535 1 2017-11-29 09:23:59.568+08 2017-11-29 09:23:59.568+08 04cb319d-9e45-4534-8be6-5f1f4aef7740 1 t f
+282 deviceType 设备类型 Constant \N sensor 0 \N 2017-11-29 11:12:26.536+08 2017-11-29 11:12:44.679+08 13126536-b6af-48d0-b43e-25144b65dd8d 5 t f
+283 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 11:13:11.041+08 2017-11-29 11:13:11.041+08 0c5d070d-fb83-4f78-acc0-a0bd12be6cc2 5 t f
+2898 devicetype 设备类型 Constant \N sensor 0 \N \N 2019-02-25 17:37:56.49+08 2019-02-25 17:37:56.49+08 f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4 5 t f
+285 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 11:13:45.267+08 2017-11-29 11:13:45.267+08 f3ad3df8-e1ad-4e05-b479-185ac5ae8602 5 t f
+286 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 11:14:15.861+08 2017-11-29 11:14:15.861+08 e8d9a100-9650-4afc-a260-9c7bcdea9263 5 t f
+287 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 11:14:42.893+08 2017-11-29 11:14:42.893+08 d7912272-424d-4546-a3c1-43a24365dde0 5 t f
+289 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 11:15:27.589+08 2017-11-29 11:15:27.589+08 91372b00-3bf7-4eb0-9495-ad544dfb04ca 5 t f
+290 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 11:15:52.799+08 2017-11-29 11:15:52.799+08 0aae766a-5d82-479a-bd71-7eb1e0e4e20f 5 t f
+276 channelId 通道号 Variable \N 1 0 255 1 \N 2017-11-25 11:58:53.232+08 2017-12-11 14:00:26.51+08 6aa982a5-d7a3-48ee-b1dc-afe4686ce796 1 t f
+275 moduleId 模块号 Variable \N 1 0 \N 2017-11-25 11:57:48.597+08 2017-12-11 14:00:38.861+08 6aa982a5-d7a3-48ee-b1dc-afe4686ce796 5 t f
+291 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 11:16:46.848+08 2017-11-29 11:16:46.848+08 ac32d002-0463-4bc7-a307-86236e6307a7 5 t f
+298 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-29 11:20:13.867+08 2017-11-29 11:20:13.867+08 91372b00-3bf7-4eb0-9495-ad544dfb04ca 5 t f
+299 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-29 11:20:47.96+08 2017-11-29 11:20:47.96+08 0aae766a-5d82-479a-bd71-7eb1e0e4e20f 5 t f
+2924 sensortype 传感器类型 Constant \N \N zd \N \N \N 2019-03-15 17:00:45.47+08 2019-03-15 17:00:45.47+08 ad1ce5b5-24d5-4aa3-9125-bbb25ea24069 5 t f
+1179 devicetype 设备类型 Constant \N sensor 0 2018-01-05 16:26:30.152+08 2018-04-09 15:15:32.757+08 2d9520e9-143b-48c2-960f-5c9dca7a21b4 5 t f
+2925 dedc 去直流 Variable \N \N false \N \N \N 2019-03-15 17:00:45.474+08 2019-03-15 17:00:45.474+08 ad1ce5b5-24d5-4aa3-9125-bbb25ea24069 3 t f
+2786 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 14:10:59.022+08 2019-02-25 14:10:59.022+08 ac1d92e7-4587-48e7-84ce-c4cd8db40687 5 t f
+2787 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 14:10:59.025+08 2019-02-25 14:10:59.025+08 ac1d92e7-4587-48e7-84ce-c4cd8db40687 1 t f
+2788 range 量程 Constant \N (-1000,1000) 0 \N \N kN 2019-02-25 14:10:59.028+08 2019-02-25 14:10:59.028+08 ac1d92e7-4587-48e7-84ce-c4cd8db40687 5 t f
+2789 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 14:10:59.03+08 2019-02-25 14:10:59.03+08 ac1d92e7-4587-48e7-84ce-c4cd8db40687 5 t f
+2790 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 14:10:59.033+08 2019-02-25 14:10:59.033+08 ac1d92e7-4587-48e7-84ce-c4cd8db40687 5 t f
+2791 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 14:10:59.035+08 2019-02-25 14:10:59.035+08 ac1d92e7-4587-48e7-84ce-c4cd8db40687 2 t f
+2838 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 15:39:43.268+08 2019-02-25 15:39:43.268+08 04f55cdb-e98a-4dc9-b3fc-480a9a241a02 1 t f
+2839 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 15:39:43.271+08 2019-02-25 15:39:43.271+08 04f55cdb-e98a-4dc9-b3fc-480a9a241a02 5 t f
+2840 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 15:39:43.273+08 2019-02-25 15:39:43.273+08 04f55cdb-e98a-4dc9-b3fc-480a9a241a02 1 t f
+2841 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 15:39:43.275+08 2019-02-25 15:39:43.275+08 04f55cdb-e98a-4dc9-b3fc-480a9a241a02 5 t f
+2842 range 量程 Constant \N (0,0.4) 0 \N \N MPa 2019-02-25 15:39:43.278+08 2019-02-25 15:39:43.278+08 04f55cdb-e98a-4dc9-b3fc-480a9a241a02 5 t f
+2843 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 15:39:43.28+08 2019-02-25 15:39:43.28+08 04f55cdb-e98a-4dc9-b3fc-480a9a241a02 5 t f
+2899 range 量程 Constant \N (-30,30),(-30,30),(-25,70) 0 \N \N °,°,℃ 2019-02-25 17:37:56.494+08 2019-02-25 17:37:56.494+08 f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4 5 t f
+2900 protocolcode 协议号 Constant \N 1502 0 \N \N \N Modbus盒式测斜协议 2019-02-25 17:37:56.497+08 2019-02-25 17:37:56.497+08 f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4 1 t f
+2901 sensortype 传感器类型 Constant \N cx 0 \N \N 2019-02-25 17:37:56.5+08 2019-02-25 17:37:56.5+08 f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4 5 t f
+1182 range 量程 Constant \N (-1500,1500) 0 \N \N με 2018-01-05 16:26:30.16+08 2018-01-05 16:26:30.16+08 2d9520e9-143b-48c2-960f-5c9dca7a21b4 5 t f
+2988 pm100_rd 是否启用-PM100模组 Variable \N true 0 2019-03-28 09:27:41.148+08 2019-04-02 09:55:33.966+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 3 t f
+2972 pm10_st 模组类型-PM2.5,PM10 Constant \N pm10 0 2019-03-27 20:05:00.933+08 2019-04-02 09:58:11.951+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 5 t f
+1331 moduleId 模块号 Variable \N 1 0 \N \N \N 2018-01-08 11:06:18.447+08 2018-01-08 11:06:18.447+08 962c0a4a-535e-4f86-a25c-f38e3aa6f144 5 t f
+1332 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-08 11:06:18.449+08 2018-01-08 11:06:18.449+08 962c0a4a-535e-4f86-a25c-f38e3aa6f144 5 t f
+1333 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-08 11:06:18.451+08 2018-01-08 11:06:18.451+08 962c0a4a-535e-4f86-a25c-f38e3aa6f144 1 t f
+2030 channelId 通道号 Variable \N \N 1 \N 16 1 2018-03-05 09:35:14.853+08 2018-03-05 09:35:14.853+08 5fc4a5d5-9307-4ab0-9fb1-7f017c432911 1 t f
+2109 node 设备ID Variable \N \N 1 \N 65535 1 \N 2018-03-15 13:45:07.098+08 2018-03-15 13:45:07.098+08 fa0123d0-7db7-4412-9670-53175d0c2c40 1 t f
+1760 moduleId 模块号 Variable \N 1 0 \N 2018-01-23 14:49:59.762+08 2018-03-26 15:19:40.912+08 c0cde67c-9734-4a3c-bb52-0caba0ae8724 5 t f
+1442 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 16:27:56.76+08 2018-01-08 16:27:56.76+08 666e753c-f0b0-478d-b5f5-839117db13f9 5 t f
+1451 moduleId 模块号 Variable \N \N 1 \N \N \N 2018-01-08 16:40:09.765+08 2018-01-08 16:40:09.765+08 947fdddf-6d80-4972-88cc-601559ca3458 5 t f
+1452 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-08 16:40:09.769+08 2018-01-08 16:40:09.769+08 947fdddf-6d80-4972-88cc-601559ca3458 5 t f
+1453 channelId 通道号 Variable \N 1 0 128 1 2018-01-08 16:40:09.77+08 2018-01-08 16:40:09.77+08 947fdddf-6d80-4972-88cc-601559ca3458 1 t f
+1441 range 量程 Constant \N (0,600) 0 mm 2018-01-08 16:27:56.757+08 2018-01-08 16:47:50.089+08 666e753c-f0b0-478d-b5f5-839117db13f9 5 t f
+1471 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 17:03:46.491+08 2018-01-08 17:03:46.491+08 cb339f74-5895-4180-a0dc-a3cf12151b0b 5 t f
+1470 range 量程 Constant \N (-40,125) 0 ℃ 2018-01-08 17:03:46.486+08 2018-01-08 17:04:14.84+08 cb339f74-5895-4180-a0dc-a3cf12151b0b 5 t f
+1635 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-16 10:21:41.745+08 2018-01-16 10:21:41.745+08 42fbfa5f-4ca7-4e1d-b42f-08f4f641657a 5 t f
+1704 阿萨德 阿萨德 Variable \N \N 阿萨德 \N \N \N 123 123 2018-01-22 11:12:08.488+08 2018-01-22 11:12:08.488+08 eb9a3ca2-0c98-4af1-9e73-2a17cbe81af6 5 t f
+1759 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-23 14:49:59.757+08 2018-01-23 14:49:59.757+08 c0cde67c-9734-4a3c-bb52-0caba0ae8724 1 t f
+3004 kt 温度补偿系数 Variable \N \N 0 4 9999 -9999 2019-03-28 17:25:53.961+08 2019-03-28 17:25:53.961+08 fde20cf0-6bb6-4987-8830-dec5aa5874f2 2 t f
+2965 gps_pc 协议-GPS Constant \N 5001 0 \N 2019-03-27 20:00:19.439+08 2019-04-02 09:55:17.968+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 5 t f
+1763 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-23 14:49:59.771+08 2018-01-23 14:49:59.771+08 c0cde67c-9734-4a3c-bb52-0caba0ae8724 5 t f
+2970 am2305_st 模组型号-AM2305 Constant \N am2305 0 2019-03-27 20:03:35.46+08 2019-04-02 09:55:25.232+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 5 t f
+292 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-29 11:18:04.367+08 2017-11-29 11:18:04.367+08 13126536-b6af-48d0-b43e-25144b65dd8d 5 t f
+2374 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-04-03 11:53:08.716+08 2018-04-03 11:53:08.716+08 00b58795-1a49-4171-b60f-a0e32a25f6f6 5 t f
+2543 sensortype 设备类型 Constant \N \N gdgs \N \N \N \N 2018-08-10 16:23:43.25+08 2018-08-10 16:23:43.25+08 030c456b-e97a-42a6-93b7-a6f48fcce4a6 5 t f
+319 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-11-29 15:24:41.555+08 2017-11-29 15:24:41.555+08 16ca7eed-6c64-4c4b-a495-6c5f785b86cd 5 t f
+2546 sensortype 设备类型 Constant \N \N gdgs \N \N \N \N 2018-08-10 17:03:21.013+08 2018-08-10 17:03:21.013+08 8cb3528e-cadf-463e-9db2-003bb899ebb6 5 t f
+2792 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 14:12:03.013+08 2019-02-25 14:12:03.013+08 35088e4d-f42e-4324-8237-bedb617ee489 1 t f
+321 deviceType 设备类型 Variable \N sensor 0 2017-11-29 15:24:41.562+08 2017-11-29 15:28:36.469+08 16ca7eed-6c64-4c4b-a495-6c5f785b86cd 5 f f
+2793 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 14:12:03.016+08 2019-02-25 14:12:03.016+08 35088e4d-f42e-4324-8237-bedb617ee489 5 t f
+2794 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 14:12:03.019+08 2019-02-25 14:12:03.019+08 35088e4d-f42e-4324-8237-bedb617ee489 1 t f
+2795 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 14:12:03.309+08 2019-02-25 14:12:03.309+08 35088e4d-f42e-4324-8237-bedb617ee489 5 t f
+2796 range 量程 Constant \N (-2000,2000) 0 \N \N kN 2019-02-25 14:12:03.313+08 2019-02-25 14:12:03.313+08 35088e4d-f42e-4324-8237-bedb617ee489 5 t f
+2797 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 14:12:03.317+08 2019-02-25 14:12:03.317+08 35088e4d-f42e-4324-8237-bedb617ee489 5 t f
+2902 deviceType deviceType Constant \N sensor 0 \N \N \N 2019-02-26 16:29:15.952+08 2019-02-26 16:29:15.952+08 7ac67279-f72c-4296-ba27-9b03b8c07c05 5 t f
+3005 t0 温度初值 Variable \N \N 0 3 999 -999 ℃ 2019-03-28 17:26:31.663+08 2019-03-28 17:26:31.663+08 fde20cf0-6bb6-4987-8830-dec5aa5874f2 2 t f
+2989 am2305_rd 是否启用-AM2305模组 Variable \N true 0 2019-03-28 09:29:51.864+08 2019-04-02 09:59:01.154+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 3 t f
+2110 wakeupdelay 唤醒延时 Variable \N \N 1 \N 65535 1 s 2018-03-15 13:49:32.804+08 2018-03-15 13:49:32.804+08 ee21c9a6-d51b-4f10-83cc-8c9611003cfa 1 t f
+2111 interval 采集间隔 Variable \N \N 5 \N 65535 1 分 2018-03-15 13:49:32.807+08 2018-03-15 13:49:32.807+08 ee21c9a6-d51b-4f10-83cc-8c9611003cfa 1 t f
+2038 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-05 10:59:51.152+08 2018-03-05 10:59:51.152+08 f1fc4840-f3c9-4752-a703-b0bef637f3ee 5 t f
+2039 channelId 通道号 Variable \N \N 1 \N 16 1 2018-03-05 10:59:51.155+08 2018-03-05 10:59:51.155+08 f1fc4840-f3c9-4752-a703-b0bef637f3ee 1 t f
+2040 K 转换系数K(乘以*) Variable \N \N 1 3 1000 -1000 2018-03-05 10:59:51.159+08 2018-03-05 10:59:51.159+08 f1fc4840-f3c9-4752-a703-b0bef637f3ee 2 t f
+2050 channelId 通道号 Variable \N 1 0 255 1 \N 2018-03-07 17:15:48.205+08 2018-03-07 17:15:48.205+08 68cb03f4-a381-4eaa-9068-d375ae3500e8 1 t f
+2051 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-07 17:15:48.209+08 2018-03-07 17:15:48.209+08 68cb03f4-a381-4eaa-9068-d375ae3500e8 5 t f
+1437 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 16:22:24.862+08 2018-01-08 16:22:24.862+08 22dc1e96-f05a-4752-bebf-9d3c1285dace 5 t f
+1439 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 16:22:25.032+08 2018-01-08 16:22:25.032+08 c53d6302-b66b-40f4-b190-4d5447180ba7 5 t f
+1438 range 量程 Constant \N (0,70000) 0 mm/s 2018-01-08 16:22:24.864+08 2018-01-08 16:26:54.936+08 22dc1e96-f05a-4752-bebf-9d3c1285dace 5 t f
+1440 range 量程 Constant \N (0,250000) 0 mm/s 2018-01-08 16:22:25.036+08 2018-01-08 16:27:12.563+08 c53d6302-b66b-40f4-b190-4d5447180ba7 5 t f
+1446 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 16:27:58.11+08 2018-01-08 16:27:58.11+08 8ea772de-0c69-4a35-bbbb-7e0fb97d7c2f 5 t f
+1448 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 16:27:58.798+08 2018-01-08 16:27:58.798+08 03db4d1f-c0bf-47b0-9f10-0a0a5d6cfca3 5 t f
+1447 range 量程 Constant \N (0,54) 0 mm 2018-01-08 16:27:58.795+08 2018-01-08 16:29:05.54+08 03db4d1f-c0bf-47b0-9f10-0a0a5d6cfca3 5 t f
+1445 range 量程 Constant \N (0,135) 0 mm 2018-01-08 16:27:58.107+08 2018-01-08 16:29:37.626+08 8ea772de-0c69-4a35-bbbb-7e0fb97d7c2f 5 t f
+1460 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 16:54:47.945+08 2018-01-08 16:54:47.945+08 f446b0ec-ee0f-40bb-a6fc-9767fbd78a2b 5 t f
+1462 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 16:54:48.926+08 2018-01-08 16:54:48.926+08 de0bfd26-fb8e-4f9d-8e0a-0119650952c6 5 t f
+1463 range 量程 Constant \N (0,50) 0 m/s 2018-01-08 16:54:48.929+08 2018-01-08 17:00:50.897+08 de0bfd26-fb8e-4f9d-8e0a-0119650952c6 5 t f
+1461 range 量程 Constant \N (0,75) 0 m/s 2018-01-08 16:54:47.948+08 2018-01-08 17:01:21.536+08 f446b0ec-ee0f-40bb-a6fc-9767fbd78a2b 5 t f
+2966 am2305_pc 协议-AM2305 Constant \N 5004 0 2019-03-27 20:00:42.399+08 2019-04-02 09:59:10.704+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 5 t f
+1643 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-16 16:49:43.496+08 2018-01-16 16:49:43.496+08 2dfa1f51-0e5a-4e11-a86d-f8487d602ebf 5 t f
+1648 3 \N Variable \N \N \N \N \N \N 2018-01-17 13:45:21.853+08 2018-01-17 13:45:21.853+08 0df6f7cc-b408-4936-8fee-d5344c2d8ae9 5 t f
+1851 moduleId 模块号 Variable \N 1 0 \N 2018-01-23 15:00:13.376+08 2018-03-26 16:23:40.371+08 c9eacd36-38d6-48b9-9672-e76406906ea3 5 t f
+1852 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-23 15:00:13.378+08 2018-01-23 15:00:13.378+08 c9eacd36-38d6-48b9-9672-e76406906ea3 1 t f
+1853 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-23 15:00:13.38+08 2018-01-23 15:00:13.38+08 c9eacd36-38d6-48b9-9672-e76406906ea3 5 t f
+293 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-29 11:18:59.412+08 2017-11-29 11:18:59.412+08 0c5d070d-fb83-4f78-acc0-a0bd12be6cc2 5 t f
+294 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-29 11:19:12.865+08 2017-11-29 11:19:12.865+08 f3ad3df8-e1ad-4e05-b479-185ac5ae8602 5 t f
+2375 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-04-03 12:41:11.904+08 2018-04-03 12:41:11.904+08 1e20c41f-4f52-4d61-94e4-ae8496163aed 5 t f
+300 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-29 11:21:02.875+08 2017-11-29 11:21:02.875+08 ac32d002-0463-4bc7-a307-86236e6307a7 5 t f
+2798 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 14:14:48.917+08 2019-02-25 14:14:48.917+08 1b0b94f1-5fde-428d-aa1c-242e8e024809 5 t f
+2799 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 14:14:48.921+08 2019-02-25 14:14:48.921+08 1b0b94f1-5fde-428d-aa1c-242e8e024809 1 t f
+2800 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 14:14:48.923+08 2019-02-25 14:14:48.923+08 1b0b94f1-5fde-428d-aa1c-242e8e024809 5 t f
+2801 range 量程 Constant \N (-3000,3000) 0 \N \N kN 2019-02-25 14:14:48.926+08 2019-02-25 14:14:48.926+08 1b0b94f1-5fde-428d-aa1c-242e8e024809 5 t f
+2802 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 14:14:48.928+08 2019-02-25 14:14:48.928+08 1b0b94f1-5fde-428d-aa1c-242e8e024809 5 t f
+2803 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 14:14:48.931+08 2019-02-25 14:14:48.931+08 1b0b94f1-5fde-428d-aa1c-242e8e024809 1 t f
+2903 deviceType deviceType Constant \N sensor 0 \N \N \N 2019-02-26 16:30:15.713+08 2019-02-26 16:30:15.713+08 88bd8ad3-6ffd-4b0f-8768-085e0e59d92e 5 t f
+2908 K 系数 Constant \N 0.00007520 0 mm/Hz2 2019-03-07 10:47:32.035+08 2019-03-07 14:31:13.264+08 1824bec3-15cd-498d-b2c1-b3cc804a1021 2 t f
+1342 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-08 11:40:11.793+08 2018-01-08 11:40:11.793+08 f0b38ea6-f88e-4e79-b7bb-02d09ef2cf03 1 t f
+2990 gps_rd 是否启用-gps模组 Variable \N true 0 2019-03-28 09:32:54.723+08 2019-04-02 09:58:47.641+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 3 t f
+1346 moduleId 模块号 Variable \N 1 0 \N \N \N 2018-01-08 11:40:11.802+08 2018-01-08 11:40:11.802+08 f0b38ea6-f88e-4e79-b7bb-02d09ef2cf03 5 t f
+1347 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-08 11:40:11.805+08 2018-01-08 11:40:11.805+08 f0b38ea6-f88e-4e79-b7bb-02d09ef2cf03 5 t f
+2967 pm100_pc 协议号-PM100 Constant \N 5003 0 2019-03-27 20:01:28.943+08 2019-04-02 09:58:54.382+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 5 t f
+1469 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 17:03:46.163+08 2018-01-08 17:03:46.163+08 933a027b-e620-4a6e-8340-d10c7aa29009 5 t f
+2031 K 转换系数K(乘以*) Variable \N 1 3 1000 -1000 2018-03-05 09:35:14.857+08 2018-03-05 10:45:55.608+08 5fc4a5d5-9307-4ab0-9fb1-7f017c432911 2 t f
+2052 channelId 通道号 Variable \N 1 0 255 1 \N 2018-03-07 17:18:03.929+08 2018-03-07 17:18:03.929+08 3a8c62b6-14dc-497e-90e8-68c2160e7d08 1 t f
+2053 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-07 17:18:03.935+08 2018-03-07 17:18:03.935+08 3a8c62b6-14dc-497e-90e8-68c2160e7d08 5 t f
+1784 moduleId 模块号 Variable \N 1 0 \N 2018-01-23 14:53:15.436+08 2018-03-26 15:25:08.815+08 f6b98e0f-0bfe-4a95-808c-d6d10b4c803b 5 t f
+1616 a a Constant \N \N 1 \N \N \N \N 2018-01-09 21:37:46.45+08 2018-01-09 21:37:46.45+08 d08c2f42-3528-4b5f-9f34-04deac7051c1 1 t f
+1617 b b Tag \N \N \N \N \N \N b 2018-01-09 21:37:46.454+08 2018-01-09 21:37:46.454+08 d08c2f42-3528-4b5f-9f34-04deac7051c1 5 t f
+2327 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 15:52:42.74+08 2018-03-26 15:52:42.74+08 cb4eb310-0876-492a-9e06-8cd0a5542c5b 1 t f
+2329 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 16:12:10.72+08 2018-03-26 16:12:10.72+08 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 1 t f
+1706 11 \N Constant \N true 0 \N 2018-01-22 17:01:19.512+08 2018-01-22 17:09:41.335+08 b914a394-bbd8-4ff4-857e-02a2d8eb6d25 3 t f
+2333 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 16:21:59.585+08 2018-03-26 16:21:59.585+08 c9eacd36-38d6-48b9-9672-e76406906ea3 1 t f
+2337 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 16:50:28.58+08 2018-03-26 16:50:28.58+08 50600703-5c4c-4ceb-a44d-d0b79882b1dc 1 t f
+1782 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-23 14:53:15.431+08 2018-01-23 14:53:15.431+08 f6b98e0f-0bfe-4a95-808c-d6d10b4c803b 5 t f
+1785 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-23 14:53:15.438+08 2018-01-23 14:53:15.438+08 f6b98e0f-0bfe-4a95-808c-d6d10b4c803b 1 t f
+295 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-29 11:19:26.335+08 2017-11-29 11:19:26.335+08 e8d9a100-9650-4afc-a260-9c7bcdea9263 5 t f
+296 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-29 11:19:40.261+08 2017-11-29 11:19:40.261+08 d7912272-424d-4546-a3c1-43a24365dde0 5 t f
+358 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 18:00:44.765+08 2017-11-29 18:00:44.765+08 bd742efe-04d8-4e90-9799-dd3830baf3ca 5 t f
+360 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-30 13:55:54.589+08 2017-11-30 13:55:54.589+08 93f84dd4-087b-46ef-bdda-9db4adfdb16b 5 t f
+361 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-11-30 13:55:54.593+08 2017-11-30 13:55:54.593+08 93f84dd4-087b-46ef-bdda-9db4adfdb16b 5 t f
+362 deviceType 设备属性 Constant \N \N sensor \N \N \N \N 2017-11-30 15:14:59.474+08 2017-11-30 15:14:59.474+08 40b8c657-2644-4ce2-b490-cf61523a4012 5 t f
+323 moduleId 模块号 Constant \N \N 1 \N \N \N 2017-11-29 15:35:17.602+08 2017-11-29 15:35:17.602+08 3462227d-e989-421c-9f48-c0ae7a573b78 5 t f
+324 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-11-29 15:35:17.606+08 2017-11-29 15:35:17.606+08 3462227d-e989-421c-9f48-c0ae7a573b78 5 t f
+326 deviceType 设备类型 Constant \N sensor 0 \N 2017-11-29 15:40:40.998+08 2017-11-29 15:41:57.864+08 6bd546bc-55b0-4ee4-8b58-34feec8cdb6c 5 t f
+327 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-29 15:42:18.939+08 2017-11-29 15:42:18.939+08 6bd546bc-55b0-4ee4-8b58-34feec8cdb6c 5 t f
+329 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-11-29 15:47:20.479+08 2017-11-29 15:47:20.479+08 65f4e736-8261-40cc-b3b8-948ab0e4252e 5 t f
+331 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-11-29 15:47:20.486+08 2017-11-29 15:47:20.486+08 65f4e736-8261-40cc-b3b8-948ab0e4252e 5 t f
+332 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 15:51:55.34+08 2017-11-29 15:51:55.34+08 e015d9d3-542e-4d54-80c6-39db4ba20877 5 t f
+333 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-11-29 15:51:55.346+08 2017-11-29 15:51:55.346+08 e015d9d3-542e-4d54-80c6-39db4ba20877 5 t f
+335 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 15:56:44.957+08 2017-11-29 15:56:44.957+08 24b365fd-4e6e-4800-ad48-d3f082c9b2b8 5 t f
+336 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-11-29 15:56:44.96+08 2017-11-29 15:56:44.96+08 24b365fd-4e6e-4800-ad48-d3f082c9b2b8 5 t f
+340 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-11-29 17:32:42.15+08 2017-11-29 17:32:42.15+08 5ce1bb8e-5512-48aa-9842-c5ea7754f340 5 t f
+341 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 17:33:37.772+08 2017-11-29 17:33:37.772+08 b3014b29-7547-4c85-a147-7ab37d6c328f 5 t f
+342 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 17:37:50.908+08 2017-11-29 17:37:50.908+08 6e9cc5a0-a0ab-49f5-bf77-13164ed09055 5 t f
+344 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 17:40:19.273+08 2017-11-29 17:40:19.273+08 5dcdefa3-da3c-4745-828c-d97fae30d82d 5 t f
+2381 range 量程 Constant \N (0,0.1) 0 Mpa 2018-04-08 14:00:41.087+08 2018-04-08 14:05:25.634+08 f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d 5 t f
+346 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 17:43:55.673+08 2017-11-29 17:43:55.673+08 55be82a9-bf1f-4e1d-bca3-d76fc60beca3 5 t f
+350 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 17:49:21.408+08 2017-11-29 17:49:21.408+08 97463615-eb6e-4836-86a1-a282e935ed5d 5 t f
+348 deviceType 设备类型 Constant \N sensor 0 \N 2017-11-29 17:46:58.81+08 2017-11-29 17:49:38.692+08 6629f27c-b28d-400b-9355-71e81a910b2b 5 t f
+352 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 17:52:19.042+08 2017-11-29 17:52:19.042+08 cb9d01e5-2af8-48b2-b522-4f7ae3a9dc6e 5 t f
+2386 protocolcode 协议号 Constant \N 1401 0 2018-04-08 14:06:24.542+08 2018-04-09 14:57:23.562+08 cf54dd7a-2c8a-4f16-9f92-7484af585f13 5 t f
+354 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 17:55:29.419+08 2017-11-29 17:55:29.419+08 823921c0-40e3-46c6-809c-804adcf828ce 5 t f
+2385 sensortype 传感器类型 Constant \N zx 0 \N 2018-04-08 14:06:24.541+08 2018-04-09 14:57:29.873+08 cf54dd7a-2c8a-4f16-9f92-7484af585f13 5 t f
+356 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-29 17:57:56.265+08 2017-11-29 17:57:56.265+08 2420aadc-c220-4ce6-bfe9-c21d79ce827f 5 t f
+2380 protocolcode 协议号 Constant \N 1401 0 2018-04-08 14:00:41.08+08 2018-04-09 14:57:46.415+08 f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d 5 t f
+363 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-11-30 15:14:59.478+08 2017-11-30 15:14:59.478+08 40b8c657-2644-4ce2-b490-cf61523a4012 5 t f
+364 range 量程 Constant \N \N (0.05,3) \N \N \N m 2017-11-30 15:14:59.482+08 2017-11-30 15:14:59.482+08 40b8c657-2644-4ce2-b490-cf61523a4012 5 t f
+365 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-30 15:18:38.825+08 2017-11-30 15:18:38.825+08 e889420f-f8d0-4e0d-aab2-1f2f965e75bb 5 t f
+366 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-11-30 15:18:38.827+08 2017-11-30 15:18:38.827+08 e889420f-f8d0-4e0d-aab2-1f2f965e75bb 5 t f
+367 range 量程 Constant \N \N (0.05,10) \N \N \N m 2017-11-30 15:18:38.829+08 2017-11-30 15:18:38.829+08 e889420f-f8d0-4e0d-aab2-1f2f965e75bb 5 t f
+368 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-11-30 15:25:27.925+08 2017-11-30 15:25:27.925+08 f5c42818-e09f-4cb7-b7cb-63b18e8829a9 5 t f
+369 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-11-30 15:25:27.929+08 2017-11-30 15:25:27.929+08 f5c42818-e09f-4cb7-b7cb-63b18e8829a9 5 t f
+370 range 量程 Variable \N \N (0.05,30) \N \N \N m 2017-11-30 15:25:27.933+08 2017-11-30 15:25:27.933+08 f5c42818-e09f-4cb7-b7cb-63b18e8829a9 5 t f
+371 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-01 09:59:04.61+08 2017-12-01 09:59:04.61+08 22d007b2-5200-4bf6-85dc-c755a7a75bcf 5 t f
+372 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-01 09:59:04.613+08 2017-12-01 09:59:04.613+08 22d007b2-5200-4bf6-85dc-c755a7a75bcf 5 t f
+2379 sensortype 传感器类型 Constant \N zx 0 \N 2018-04-08 14:00:41.076+08 2018-04-09 14:57:51.852+08 f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d 5 t f
+2378 devicetype 设备类型 Constant \N sensor 0 2018-04-08 14:00:41.072+08 2018-04-09 14:57:56.57+08 f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d 5 t f
+2384 devicetype 设备类型 Constant \N sensor 0 2018-04-08 14:06:24.539+08 2018-04-09 14:58:20.861+08 cf54dd7a-2c8a-4f16-9f92-7484af585f13 5 t f
+374 range 量程 Constant \N \N (-40,120) \N \N \N ℃ 2017-12-01 09:59:04.619+08 2017-12-01 09:59:04.619+08 22d007b2-5200-4bf6-85dc-c755a7a75bcf 5 t f
+2387 range 量程 Constant \N (0,0.2) 0 Mpa 2018-04-08 14:06:24.544+08 2018-04-08 14:06:44.709+08 cf54dd7a-2c8a-4f16-9f92-7484af585f13 5 t f
+2547 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-08-14 14:13:28.661+08 2018-08-14 14:13:28.661+08 0e7784d1-0cbf-46aa-b156-e3361a3251e4 5 t f
+2548 range 量程 Constant \N \N (0.5,80) \N \N \N mm 2018-08-14 14:13:28.663+08 2018-08-14 14:13:28.663+08 0e7784d1-0cbf-46aa-b156-e3361a3251e4 5 t f
+2354 protocolcode 协议号 Constant \N 1102 0 2018-03-27 11:23:08.664+08 2018-09-17 17:00:53.753+08 131c98fc-2216-4f0f-9cd3-581d88f9affd 1 t f
+1786 range 量程 Constant \N (-3000,3000) 0 kN 2018-01-23 14:53:15.805+08 2021-03-02 13:55:54.254+08 1bcd78b8-bd96-4c95-8e19-27a1ac7356c9 5 t f
+2804 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 14:16:02.507+08 2019-02-25 14:16:02.507+08 80342a8c-db6f-40e6-b331-0ae1eca53138 1 t f
+2805 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 14:16:02.509+08 2019-02-25 14:16:02.509+08 80342a8c-db6f-40e6-b331-0ae1eca53138 5 t f
+2806 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 14:16:02.511+08 2019-02-25 14:16:02.511+08 80342a8c-db6f-40e6-b331-0ae1eca53138 5 t f
+2807 range 量程 Constant \N (-4000,4000) 0 \N \N KN 2019-02-25 14:16:02.513+08 2019-02-25 14:16:02.513+08 80342a8c-db6f-40e6-b331-0ae1eca53138 5 t f
+2808 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 14:16:02.515+08 2019-02-25 14:16:02.515+08 80342a8c-db6f-40e6-b331-0ae1eca53138 5 t f
+2809 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 14:16:02.517+08 2019-02-25 14:16:02.517+08 80342a8c-db6f-40e6-b331-0ae1eca53138 1 t f
+2909 f0 频率初值 Variable \N \N 1 12 99999 -99999 Hz 2019-03-07 10:48:31.64+08 2019-03-07 10:48:31.64+08 1824bec3-15cd-498d-b2c1-b3cc804a1021 2 t f
+2991 pm10_rd 是否启用-PM2.5,PM10模组 Variable \N true 0 2019-03-28 09:33:51.225+08 2019-04-02 09:58:32.088+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 3 t f
+2968 pm10_pc 协议-PM2.5,PM10 Constant \N 5002 0 2019-03-27 20:01:54.802+08 2019-04-02 09:58:40.175+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 5 t f
+1358 流出率 流出率 Variable \N \N \N \N \N \N 2018-01-08 12:02:17.347+08 2018-01-08 12:02:17.347+08 b1b251a9-2555-415d-996f-88df44f4df3c 5 t f
+1359 xxx \N Variable \N \N 3 \N 55 3 \N 2018-01-08 12:02:17.349+08 2018-01-08 12:02:17.349+08 b1b251a9-2555-415d-996f-88df44f4df3c 1 t f
+2035 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-05 10:52:42.571+08 2018-03-05 10:52:42.571+08 84747787-27a7-463d-bd03-9ee55d84fea0 5 t f
+2036 channelId 通道号 Variable \N \N 1 \N 16 1 2018-03-05 10:52:42.576+08 2018-03-05 10:52:42.576+08 84747787-27a7-463d-bd03-9ee55d84fea0 1 t f
+2037 K 转换系数K(乘以*) Variable \N \N 1 3 1000 -1000 2018-03-05 10:52:42.58+08 2018-03-05 10:52:42.58+08 84747787-27a7-463d-bd03-9ee55d84fea0 2 t f
+2041 pointId 监测点ID Variable \N \N 1 \N \N \N \N 2018-03-05 11:56:41.396+08 2018-03-05 11:56:41.396+08 a1923ce2-b8a5-45cb-9d98-6a42901cee7c 5 t f
+2113 range 量程 Constant \N (-30,30),(-30,30),(-25,70) 0 °,°,℃ 2018-03-15 14:28:52.125+08 2018-03-15 14:29:01.087+08 4a0f1cd5-1e52-4ec3-8976-0b1f82031d28 5 t f
+1468 range 量程 Constant \N (-40,120) 0 ℃ 2018-01-08 17:03:46.162+08 2018-01-08 17:05:29.148+08 933a027b-e620-4a6e-8340-d10c7aa29009 5 t f
+1482 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 17:10:40.694+08 2018-01-08 17:10:40.694+08 a3b4fd36-dd87-463c-84af-254647a24cc5 5 t f
+1484 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 17:10:41.175+08 2018-01-08 17:10:41.175+08 e718c1a2-1c56-4da0-8cb3-36445c6b4f26 5 t f
+1486 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 17:10:41.682+08 2018-01-08 17:10:41.682+08 c7f01571-7f09-4bef-99d3-fdc2da5fcaa2 5 t f
+1485 range 量程 Constant \N (-30,30) 0 ° 2018-01-08 17:10:41.678+08 2018-01-08 17:11:13.954+08 c7f01571-7f09-4bef-99d3-fdc2da5fcaa2 5 t f
+1483 range 量程 Constant \N (-30,30) 0 ° 2018-01-08 17:10:41.171+08 2018-01-08 17:12:10.016+08 e718c1a2-1c56-4da0-8cb3-36445c6b4f26 5 t f
+1481 range 量程 Constant \N (-90,90) 0 ° 2018-01-08 17:10:40.69+08 2018-01-08 17:14:51.1+08 a3b4fd36-dd87-463c-84af-254647a24cc5 5 t f
+1488 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-08 17:19:40.422+08 2018-01-08 17:19:40.422+08 1f3f14a2-a6d4-44a5-859b-3406794e7b37 1 t f
+1490 moduleId 模块号 Variable \N 1 0 \N \N \N 2018-01-08 17:19:40.427+08 2018-01-08 17:19:40.427+08 1f3f14a2-a6d4-44a5-859b-3406794e7b37 5 t f
+2328 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 16:11:55.552+08 2018-03-26 16:11:55.552+08 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 5 t f
+2331 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 16:17:16.186+08 2018-03-26 16:17:16.186+08 91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 1 t f
+2335 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 16:43:22.803+08 2018-03-26 16:43:22.803+08 1d48c633-6d83-4b96-a572-6f59a0100c9b 1 t f
+2339 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 16:58:38.514+08 2018-03-26 16:58:38.514+08 27930598-2f6e-4932-a816-9685f17969b5 1 t f
+2341 sensortype 传感器类型 Constant \N \N wsd \N \N \N \N 2018-03-26 17:26:09.472+08 2018-03-26 17:26:09.472+08 65b984f5-c294-49fa-8433-510d38416095 5 t f
+2346 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-27 10:56:54.976+08 2018-03-27 10:56:54.976+08 e5f12d4b-bb3c-4158-b98e-8af3579bd2cc 1 t f
+1218 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 17:40:36.059+08 2018-01-05 17:40:36.059+08 1f00228f-9138-4060-9b9b-1ae22f803af7 5 t f
+1219 channelId 通道号 Variable \N \N 1 \N 255 1 2018-01-05 17:40:36.062+08 2018-01-05 17:40:36.062+08 1f00228f-9138-4060-9b9b-1ae22f803af7 1 t f
+1360 自身属性01 自身属性01 Variable \N \N 哈哈 \N \N \N A 自身属性01 2018-01-08 13:36:46.069+08 2018-01-08 13:36:46.069+08 a8add874-7ace-4c3b-a044-8d6da02a9257 5 t f
+1907 moduleId 模块号 Variable \N 1 0 \N 2018-01-24 11:30:26.787+08 2018-03-02 15:36:31.953+08 1d48c633-6d83-4b96-a572-6f59a0100c9b 5 t f
+2042 beginTime 初始时间 Variable \N 20180102030405 0 \N 2018-03-06 09:58:32.457+08 2018-03-06 14:51:40.061+08 a1923ce2-b8a5-45cb-9d98-6a42901cee7c 5 t f
+2119 range 量程 Constant \N \N (-30,30),(-30,30),(-25,70) \N \N \N °,°,℃ 2018-03-15 14:36:49.786+08 2018-03-15 14:36:49.786+08 d52af3c0-c4b0-4091-96c6-ac3e97535f92 5 t f
+1565 version 版本 Constant \N \N 7.0.75 \N \N \N \N 版本 2018-01-09 10:35:25.656+08 2018-01-09 10:35:25.656+08 8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812 5 t f
+1566 jdkVersion jdk版本 Constant \N \N 1.8.0_102 \N \N \N jdk版本 2018-01-09 10:35:25.66+08 2018-01-09 10:35:25.66+08 8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812 5 t f
+2393 range 量程 Constant \N (0,0.3) 0 Mpa 2018-04-08 14:06:25.489+08 2018-04-08 14:07:20.708+08 624610fd-38ca-4e72-92c8-0492eb66412a 5 t f
+278 moduleId 模块号 Variable \N 1 0 \N 2017-11-28 16:58:55.912+08 2018-01-17 17:12:38.402+08 f2c96428-649e-47e9-9b6f-e5749195cb33 5 t f
+2330 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 16:17:02.966+08 2018-03-26 16:17:02.966+08 91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 5 t f
+1892 devicetype 设备类型 Constant \N sensor 0 2018-01-24 11:18:54.138+08 2018-08-01 09:18:17.847+08 11a0df92-8921-470b-af9c-d7593b8b1f78 5 t f
+1793 moduleId 模块号 Variable \N 1 0 \N 2018-01-23 14:53:15.822+08 2018-03-26 15:26:12.687+08 1bcd78b8-bd96-4c95-8e19-27a1ac7356c9 5 t f
+1802 moduleId 模块号 Variable \N 1 0 \N 2018-01-23 14:53:16.02+08 2018-03-26 15:35:55.094+08 8bab3e11-dc23-4082-97ec-a04e78fa19c3 5 t f
+2338 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 16:58:25.149+08 2018-03-26 16:58:25.149+08 27930598-2f6e-4932-a816-9685f17969b5 5 t f
+2392 protocolcode 协议号 Constant \N 1401 0 2018-04-08 14:06:25.487+08 2018-04-09 14:56:43.434+08 624610fd-38ca-4e72-92c8-0492eb66412a 5 t f
+2391 sensortype 传感器类型 Constant \N zx 0 \N 2018-04-08 14:06:25.485+08 2018-04-09 14:56:50.091+08 624610fd-38ca-4e72-92c8-0492eb66412a 5 t f
+2390 devicetype 设备类型 Constant \N sensor 0 2018-04-08 14:06:25.483+08 2018-04-09 14:57:06.924+08 624610fd-38ca-4e72-92c8-0492eb66412a 5 t f
+1899 devicetype 设备类型 Constant \N sensor 0 2018-01-24 11:19:06.378+08 2018-08-01 09:17:12.041+08 9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec 5 t f
+1901 devicetype 设备类型 Constant \N sensor 0 2018-01-24 11:19:10.126+08 2018-08-01 09:31:24.94+08 76288807-186e-4444-a1ce-6be599aacfd2 5 t f
+2549 sensortype 传感器类型 Constant \N \N cj \N \N \N \N 2018-08-14 14:14:43.467+08 2018-08-14 14:14:43.467+08 0e7784d1-0cbf-46aa-b156-e3361a3251e4 5 t f
+2550 protocolcode 协议号 Constant \N \N 9509 \N \N \N 2018-08-14 14:15:36.897+08 2018-08-14 14:15:36.897+08 0e7784d1-0cbf-46aa-b156-e3361a3251e4 5 t f
+2810 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 14:17:43.313+08 2019-02-25 14:17:43.313+08 b345cafa-8d58-454f-a01e-e42859545b18 5 t f
+1791 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-23 14:53:15.817+08 2018-01-23 14:53:15.817+08 1bcd78b8-bd96-4c95-8e19-27a1ac7356c9 5 t f
+2811 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 14:17:43.316+08 2019-02-25 14:17:43.316+08 b345cafa-8d58-454f-a01e-e42859545b18 1 t f
+1794 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-23 14:53:15.825+08 2018-01-23 14:53:15.825+08 1bcd78b8-bd96-4c95-8e19-27a1ac7356c9 1 t f
+2812 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 14:17:43.318+08 2019-02-25 14:17:43.318+08 b345cafa-8d58-454f-a01e-e42859545b18 5 t f
+2813 range 量程 Constant \N (-75,75) 0 \N \N kN 正值是张拉力,负值是承压力 2019-02-25 14:17:43.32+08 2019-02-25 14:17:43.32+08 b345cafa-8d58-454f-a01e-e42859545b18 5 t f
+2814 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 14:17:43.322+08 2019-02-25 14:17:43.322+08 b345cafa-8d58-454f-a01e-e42859545b18 5 t f
+2815 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 14:17:43.324+08 2019-02-25 14:17:43.324+08 b345cafa-8d58-454f-a01e-e42859545b18 1 t f
+1800 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-23 14:53:16.017+08 2018-01-23 14:53:16.017+08 8bab3e11-dc23-4082-97ec-a04e78fa19c3 5 t f
+1803 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-23 14:53:16.022+08 2018-01-23 14:53:16.022+08 8bab3e11-dc23-4082-97ec-a04e78fa19c3 1 t f
+2992 aqi_post 读取记录前延迟-AQI Variable \N 35 0 600 0 百毫秒 2019-03-28 09:35:59.502+08 2019-04-02 09:58:18.449+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 1 t f
+1856 range 量程 Constant \N (0,0.2) 0 \N \N MPa 2018-01-23 15:00:13.384+08 2018-01-23 15:00:13.384+08 c9eacd36-38d6-48b9-9672-e76406906ea3 5 t f
+2910 K 系数 Constant \N 0.0000184 0 KN/Hz2 2019-03-07 10:49:36.371+08 2019-03-07 14:31:20.984+08 a81c3314-06e2-428a-bede-88adf880bdd7 2 t f
+1804 range 量程 Constant \N (0,2.0) 0 MPa 2018-01-23 14:57:48.814+08 2018-01-23 15:03:10.978+08 37c046eb-9a0e-49b0-95fb-f0128338f381 5 t f
+1867 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-23 15:32:11.071+08 2018-01-23 15:32:11.071+08 1c332609-ad1d-4066-b0fa-67df29181432 5 t f
+2969 aqi_pc 协议-AQI Constant \N 5000 0 2019-03-27 20:03:05.22+08 2019-04-02 09:58:24.977+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 5 t f
+1881 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-24 11:10:16.237+08 2018-01-24 11:10:16.237+08 38b81b7d-bb3e-4885-aaea-6035faf20d1b 5 t f
+1891 range 量程 Constant \N (0,1) 0 \N \N MPa 2018-01-24 11:18:54.133+08 2018-01-24 11:18:54.133+08 11a0df92-8921-470b-af9c-d7593b8b1f78 5 t f
+1897 range 量程 Constant \N (0,0.2) 0 \N \N MPa 2018-01-24 11:19:06.37+08 2018-01-24 11:19:06.37+08 9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec 5 t f
+1900 range 量程 Constant \N (0,0.5) 0 \N \N MPa 2018-01-24 11:19:10.124+08 2018-01-24 11:19:10.124+08 76288807-186e-4444-a1ce-6be599aacfd2 5 t f
+1184 range 量程 Constant \N (-30,30),(-30,30),(-25,70) 0 \N \N °,°,℃ 2018-01-05 16:27:59.094+08 2018-01-05 16:27:59.094+08 771be2fa-a2f9-4ba8-8c08-76b091627b87 5 t f
+381 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-12-01 15:00:04.239+08 2017-12-01 15:00:04.239+08 2f8c4ab2-42a9-44d8-bd3d-cfa9d1f55252 5 t f
+382 channelId 通道号 Variable \N \N 1 \N 128 1 2017-12-01 15:00:04.242+08 2017-12-01 15:00:04.242+08 2f8c4ab2-42a9-44d8-bd3d-cfa9d1f55252 1 t f
+383 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-12-01 15:00:04.245+08 2017-12-01 15:00:04.245+08 2f8c4ab2-42a9-44d8-bd3d-cfa9d1f55252 5 t f
+384 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-12-01 15:05:58.362+08 2017-12-01 15:05:58.362+08 1cdf6eb6-fcd9-4346-992d-6ddc41b956cf 5 t f
+385 channelId 通道号 Variable \N \N 1 \N 128 1 2017-12-01 15:05:58.365+08 2017-12-01 15:05:58.365+08 1cdf6eb6-fcd9-4346-992d-6ddc41b956cf 1 t f
+386 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-12-01 15:05:58.367+08 2017-12-01 15:05:58.367+08 1cdf6eb6-fcd9-4346-992d-6ddc41b956cf 5 t f
+387 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-12-04 12:57:26.175+08 2017-12-04 12:57:26.175+08 f5d141ad-ea96-4398-8712-2a802af988f8 5 t f
+388 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-12-04 12:57:26.178+08 2017-12-04 12:57:26.178+08 f5d141ad-ea96-4398-8712-2a802af988f8 5 t f
+389 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-04 13:47:01.15+08 2017-12-04 13:47:01.15+08 e08c86d5-195d-4cf6-a1a5-1cfd113ddd52 5 t f
+390 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-04 13:47:01.153+08 2017-12-04 13:47:01.153+08 e08c86d5-195d-4cf6-a1a5-1cfd113ddd52 5 t f
+391 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-12-04 14:33:34.396+08 2017-12-04 14:33:34.396+08 409f2510-dd44-4990-b530-096bf2bcb592 5 t f
+392 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-05 10:50:36.386+08 2017-12-05 10:50:36.386+08 b0a937d5-432e-4a49-b044-e4b66d649f52 5 t f
+393 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-05 10:50:36.39+08 2017-12-05 10:50:36.39+08 b0a937d5-432e-4a49-b044-e4b66d649f52 5 t f
+2122 channelId 通道号 Variable \N \N 1 \N 128 1 2018-03-15 16:51:58.452+08 2018-03-15 16:51:58.452+08 b55b3b15-5db9-4946-a5a9-b0d352de6a24 1 t f
+1185 devicetype 设备类型 Constant \N sensor 0 2018-01-05 16:27:59.098+08 2018-04-09 15:14:40.943+08 771be2fa-a2f9-4ba8-8c08-76b091627b87 5 t f
+409 deviceType 设备类型 Constant \N sensor 0 \N 2017-12-06 16:09:36.049+08 2018-11-19 16:50:27.812+08 7c42d86a-5801-4ef2-94df-2b5c702ff7f5 5 t f
+399 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-06 10:37:27.501+08 2017-12-06 10:37:27.501+08 6c19e60e-0ed7-4e22-abb4-ddc9caf20d91 5 t f
+401 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-06 10:37:27.507+08 2017-12-06 10:37:27.507+08 6c19e60e-0ed7-4e22-abb4-ddc9caf20d91 5 t f
+402 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-06 12:00:43.64+08 2017-12-06 12:00:43.64+08 b6d1b7db-4a04-40af-a1e9-ed944a65b0b8 5 t f
+403 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-06 12:00:43.643+08 2017-12-06 12:00:43.643+08 b6d1b7db-4a04-40af-a1e9-ed944a65b0b8 5 t f
+404 channelId 通道号 Variable \N \N \N \N 255 1 2017-12-06 12:00:43.646+08 2017-12-06 12:00:43.646+08 b6d1b7db-4a04-40af-a1e9-ed944a65b0b8 1 t f
+405 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-06 14:12:59.659+08 2017-12-06 14:12:59.659+08 21d99b83-6a52-4465-90c4-125d8330e1c1 5 t f
+406 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-06 14:12:59.663+08 2017-12-06 14:12:59.663+08 21d99b83-6a52-4465-90c4-125d8330e1c1 5 t f
+407 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-06 15:17:54.546+08 2017-12-06 15:17:54.546+08 aa86893b-e991-4c57-94a7-b29e7349fe50 5 t f
+408 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-06 15:17:54.55+08 2017-12-06 15:17:54.55+08 aa86893b-e991-4c57-94a7-b29e7349fe50 5 t f
+411 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-07 10:21:23.693+08 2017-12-07 10:21:23.693+08 7118fecd-555d-4d6c-9b3a-63b6ed0d2a45 5 t f
+412 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-07 10:21:57.655+08 2017-12-07 10:21:57.655+08 7118fecd-555d-4d6c-9b3a-63b6ed0d2a45 5 t f
+413 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-07 11:43:58.706+08 2017-12-07 11:43:58.706+08 183c2cd5-5a53-4985-80aa-33a6ce2f82d4 5 t f
+414 moduleId 模块号 Variable \N 1 0 2017-12-07 11:43:58.71+08 2017-12-07 11:44:10.009+08 183c2cd5-5a53-4985-80aa-33a6ce2f82d4 5 t f
+415 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-07 14:20:25.17+08 2017-12-07 14:20:25.17+08 4d5a3f58-0eda-4443-9dcc-c64bb1785d88 5 t f
+416 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-07 14:20:25.175+08 2017-12-07 14:20:25.175+08 4d5a3f58-0eda-4443-9dcc-c64bb1785d88 5 t f
+417 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-07 15:20:39.555+08 2017-12-07 15:20:39.555+08 5fcd559a-c3dc-4c38-acde-b4b1749b4ab3 5 t f
+418 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-07 15:20:39.567+08 2017-12-07 15:20:39.567+08 5fcd559a-c3dc-4c38-acde-b4b1749b4ab3 5 t f
+419 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-08 09:55:09.552+08 2017-12-08 09:55:09.552+08 ef2cc4b4-23d3-4ff0-981b-84a8c98113ab 5 t f
+420 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-08 09:55:09.557+08 2017-12-08 09:55:09.557+08 ef2cc4b4-23d3-4ff0-981b-84a8c98113ab 5 t f
+421 range 量程 Constant \N \N (0.05,2) \N \N \N m 2017-12-08 14:36:20.533+08 2017-12-08 14:36:20.533+08 5bc92012-60a1-48ac-840f-575cb4e94c48 5 t f
+422 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-08 14:40:29.037+08 2017-12-08 14:40:29.037+08 d2e5e59c-47f9-4eb9-98ce-c6dc6f2f0d66 5 t f
+423 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-08 14:40:29.044+08 2017-12-08 14:40:29.044+08 d2e5e59c-47f9-4eb9-98ce-c6dc6f2f0d66 5 t f
+424 range 量程 Constant \N (0.2,12) 0 m 2017-12-08 14:40:29.05+08 2017-12-08 14:42:49.07+08 d2e5e59c-47f9-4eb9-98ce-c6dc6f2f0d66 5 t f
+425 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-08 14:49:12.904+08 2017-12-08 14:49:12.904+08 0fc23377-9f3d-4511-ab1b-8b8df0259d2f 5 t f
+426 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-08 14:49:12.907+08 2017-12-08 14:49:12.907+08 0fc23377-9f3d-4511-ab1b-8b8df0259d2f 5 t f
+427 range 量程 Constant \N \N (0.2,12) \N \N \N m 2017-12-08 14:49:12.911+08 2017-12-08 14:49:12.911+08 0fc23377-9f3d-4511-ab1b-8b8df0259d2f 5 t f
+428 deviceType 量程 Constant \N \N sensor \N \N \N \N 2017-12-08 14:54:02.549+08 2017-12-08 14:54:02.549+08 14bab7df-524d-4a64-a618-23d4ebcc9b5e 5 t f
+429 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-08 14:54:02.553+08 2017-12-08 14:54:02.553+08 14bab7df-524d-4a64-a618-23d4ebcc9b5e 5 t f
+430 range 量程 Constant \N \N (0.1,30) \N \N \N m 2017-12-08 14:54:02.561+08 2017-12-08 14:54:02.561+08 14bab7df-524d-4a64-a618-23d4ebcc9b5e 5 t f
+431 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-08 14:57:54.024+08 2017-12-08 14:57:54.024+08 efcb4c3e-fc6f-447b-8f73-3fdff1d77fc6 5 t f
+432 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-08 14:57:54.028+08 2017-12-08 14:57:54.028+08 efcb4c3e-fc6f-447b-8f73-3fdff1d77fc6 5 t f
+433 range 量程 Constant \N \N (0.2,60) \N \N \N m 2017-12-08 14:57:54.031+08 2017-12-08 14:57:54.031+08 efcb4c3e-fc6f-447b-8f73-3fdff1d77fc6 5 t f
+434 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-08 15:02:49.636+08 2017-12-08 15:02:49.636+08 4255e295-7830-45af-ab7c-44fee1668641 5 t f
+435 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-08 15:02:49.644+08 2017-12-08 15:02:49.644+08 4255e295-7830-45af-ab7c-44fee1668641 5 t f
+436 range 量程 Constant \N \N (0.05,70) \N \N \N m 2017-12-08 15:02:49.65+08 2017-12-08 15:02:49.65+08 4255e295-7830-45af-ab7c-44fee1668641 5 t f
+437 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-08 15:09:50.798+08 2017-12-08 15:09:50.798+08 ceed540f-d7a3-48bc-b8d0-e861e21499a4 5 t f
+438 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-08 15:09:50.802+08 2017-12-08 15:09:50.802+08 ceed540f-d7a3-48bc-b8d0-e861e21499a4 5 t f
+439 range 量程 Constant \N \N (0.5,100) \N \N \N m 2017-12-08 15:09:50.806+08 2017-12-08 15:09:50.806+08 ceed540f-d7a3-48bc-b8d0-e861e21499a4 5 t f
+452 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-08 15:56:51.386+08 2017-12-08 15:56:51.386+08 96870c78-2ed9-4141-9438-e9415cd6eeb8 5 t f
+1189 range 量程 Constant \N (-30,30),(-30,30),(-25,70) 0 \N \N °,°,℃ 2018-01-05 16:28:13.426+08 2018-01-05 16:28:13.426+08 d32eacce-7db0-4c15-b17c-f1d870389c14 5 t f
+1193 range 量程 Constant \N (-40,120),(0,100) 0 \N \N ℃,%RH 2018-01-05 16:29:20.596+08 2018-01-05 16:29:20.596+08 5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed 5 t f
+2044 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-06 16:50:09.598+08 2018-03-06 16:50:09.598+08 5dced7e6-e4c2-4e43-82a2-6b994fb790b4 5 t f
+2123 moduleId 模块号 Variable \N 1 0 \N \N 2018-03-15 16:51:58.456+08 2018-03-15 16:51:58.456+08 b55b3b15-5db9-4946-a5a9-b0d352de6a24 5 t f
+1741 moduleId 模块号 Variable \N 1 0 \N 2018-01-23 14:46:19.435+08 2018-03-26 15:05:01.903+08 5e7775c1-0766-436e-b701-b1102833b98d 5 t f
+1732 moduleId 模块号 Variable \N 1 0 \N 2018-01-23 14:46:19.21+08 2018-03-26 15:05:23.792+08 5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8 5 t f
+1723 moduleId 模块号 Variable \N 1 0 \N 2018-01-23 14:46:19.011+08 2018-03-26 15:05:36.285+08 90a2bc12-2214-43ff-9154-9b9212de2c10 5 t f
+2332 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 16:20:59.431+08 2018-03-26 16:20:59.431+08 c9eacd36-38d6-48b9-9672-e76406906ea3 5 t f
+1372 range 量程 Constant \N (-50,50),(0,100) 0 ℃,%RH 2018-01-08 13:46:38.402+08 2018-01-08 13:52:36.611+08 2b6f224d-770e-41bc-b28b-5afbe3b213c4 5 t f
+2336 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 16:49:50.98+08 2018-03-26 16:49:50.98+08 50600703-5c4c-4ceb-a44d-d0b79882b1dc 5 t f
+2342 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 17:27:27.878+08 2018-03-26 17:27:27.878+08 388cca81-7338-40d3-ba1f-89ec9d5aa2f7 5 t f
+2343 sensortype 传感器类型 Constant \N \N lf \N \N \N \N 2018-03-26 17:36:26.286+08 2018-03-26 17:36:26.286+08 83d8bf62-35f8-48c5-afa2-0d454cb19f70 5 t f
+1649 range 量程 Constant \N \N (0,50) \N \N \N mm 2018-01-17 17:16:50.57+08 2018-01-17 17:16:50.57+08 fe65a1cd-2040-403c-bb6f-529d4063bc45 5 t f
+1712 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-23 14:05:00.673+08 2018-01-23 14:05:00.673+08 3eb1b2e4-ba3a-4329-a821-33a7f5bec873 5 t f
+1724 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-23 14:46:19.013+08 2018-01-23 14:46:19.013+08 90a2bc12-2214-43ff-9154-9b9212de2c10 1 t f
+1725 range 量程 Constant \N (-1000,1000) 0 \N \N kN 2018-01-23 14:46:19.015+08 2018-01-23 14:46:19.015+08 90a2bc12-2214-43ff-9154-9b9212de2c10 5 t f
+1727 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-23 14:46:19.018+08 2018-01-23 14:46:19.018+08 90a2bc12-2214-43ff-9154-9b9212de2c10 5 t f
+1733 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-23 14:46:19.212+08 2018-01-23 14:46:19.212+08 5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8 1 t f
+1736 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-23 14:46:19.218+08 2018-01-23 14:46:19.218+08 5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8 5 t f
+1742 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-23 14:46:19.436+08 2018-01-23 14:46:19.436+08 5e7775c1-0766-436e-b701-b1102833b98d 1 t f
+1745 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-23 14:46:19.441+08 2018-01-23 14:46:19.441+08 5e7775c1-0766-436e-b701-b1102833b98d 5 t f
+1734 range 量程 Constant \N (-2000,2000) 0 kN 2018-01-23 14:46:19.214+08 2018-01-23 14:46:58.381+08 5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8 5 t f
+1743 range 量程 Constant \N (-3000,3000) 0 kN 2018-01-23 14:46:19.438+08 2018-01-23 14:47:33.731+08 5e7775c1-0766-436e-b701-b1102833b98d 5 t f
+2399 range 量程 Constant \N (0,0.4) 0 Mpa 2018-04-08 14:06:26.136+08 2018-04-08 14:10:46.575+08 ea2cc9e5-072a-4994-a232-f79655536c64 5 t f
+2405 range 量程 Constant \N (0,0.6) 0 Mpa 2018-04-08 14:06:27.181+08 2018-04-08 14:12:54.509+08 7f76a800-a32e-483a-a948-919fc9e7d075 5 t f
+2411 range 量程 Constant \N (0,1) 0 Mpa 2018-04-08 14:06:27.706+08 2018-04-08 14:14:13.863+08 3f493145-8216-487c-b145-d58dacf9c570 5 t f
+2410 protocolcode 协议号 Constant \N 1401 0 2018-04-08 14:06:27.705+08 2018-04-09 14:53:01.579+08 3f493145-8216-487c-b145-d58dacf9c570 5 t f
+2409 sensortype 传感器类型 Constant \N zx 0 \N 2018-04-08 14:06:27.703+08 2018-04-09 14:53:07.156+08 3f493145-8216-487c-b145-d58dacf9c570 5 t f
+2408 devicetype 设备类型 Constant \N sensor 0 2018-04-08 14:06:27.702+08 2018-04-09 14:53:13.153+08 3f493145-8216-487c-b145-d58dacf9c570 5 t f
+2404 protocolcode 协议号 Constant \N 1401 0 2018-04-08 14:06:27.18+08 2018-04-09 14:53:41.443+08 7f76a800-a32e-483a-a948-919fc9e7d075 5 t f
+2403 sensortype 传感器类型 Constant \N zx 0 \N 2018-04-08 14:06:27.177+08 2018-04-09 14:53:47.761+08 7f76a800-a32e-483a-a948-919fc9e7d075 5 t f
+2402 devicetype 设备类型 Constant \N sensor 0 2018-04-08 14:06:27.175+08 2018-04-09 14:53:52.554+08 7f76a800-a32e-483a-a948-919fc9e7d075 5 t f
+2398 protocolcode 协议号 Constant \N 1401 0 2018-04-08 14:06:26.133+08 2018-04-09 14:54:05.099+08 ea2cc9e5-072a-4994-a232-f79655536c64 5 t f
+2397 sensortype 传感器类型 Constant \N zx 0 \N 2018-04-08 14:06:26.131+08 2018-04-09 14:54:10.953+08 ea2cc9e5-072a-4994-a232-f79655536c64 5 t f
+2396 devicetype 设备类型 Constant \N sensor 0 2018-04-08 14:06:26.127+08 2018-04-09 14:54:17.422+08 ea2cc9e5-072a-4994-a232-f79655536c64 5 t f
+3185 devType \N Constant \N \N CDUENERGY \N \N \N \N 2019-08-03 13:11:51.084+08 2019-08-03 13:11:51.084+08 64af86ba-2ede-48c5-b410-7e40264cdd8a 5 t f
+1194 devicetype 设备类型 Constant \N sensor 0 2018-01-05 16:29:20.599+08 2018-04-09 15:12:51.981+08 5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed 5 t f
+1188 devicetype 设备类型 Constant \N sensor 0 2018-01-05 16:28:13.423+08 2018-04-09 15:14:11.355+08 d32eacce-7db0-4c15-b17c-f1d870389c14 5 t f
+2353 sensortype 传感器类型 Constant \N wsd 0 \N 2018-03-27 11:22:51.948+08 2018-07-31 17:13:15.713+08 131c98fc-2216-4f0f-9cd3-581d88f9affd 5 t f
+2554 protocolcode 协议号 Constant \N 9509 0 2018-08-14 15:32:39.148+08 2018-08-14 15:32:50.296+08 1c9756ed-dcf4-4156-9a43-09ce478d2038 5 t f
+2551 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-08-14 15:32:39.142+08 2018-08-14 15:32:39.142+08 1c9756ed-dcf4-4156-9a43-09ce478d2038 5 t f
+2552 range 量程 Constant \N \N (0.5,80) \N \N \N mm 2018-08-14 15:32:39.145+08 2018-08-14 15:32:39.145+08 1c9756ed-dcf4-4156-9a43-09ce478d2038 5 t f
+2553 sensortype 传感器类型 Constant \N \N cj \N \N \N 2018-08-14 15:32:39.147+08 2018-08-14 15:32:39.147+08 1c9756ed-dcf4-4156-9a43-09ce478d2038 5 t f
+2816 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 14:18:58.157+08 2019-02-25 14:18:58.157+08 536c5d54-6c47-4800-aecb-47219ee56fc2 5 t f
+2817 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 14:18:58.161+08 2019-02-25 14:18:58.161+08 536c5d54-6c47-4800-aecb-47219ee56fc2 1 t f
+2818 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 14:18:58.163+08 2019-02-25 14:18:58.163+08 536c5d54-6c47-4800-aecb-47219ee56fc2 5 t f
+2819 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 14:18:58.166+08 2019-02-25 14:18:58.166+08 536c5d54-6c47-4800-aecb-47219ee56fc2 1 t f
+2820 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 14:18:58.168+08 2019-02-25 14:18:58.168+08 536c5d54-6c47-4800-aecb-47219ee56fc2 5 t f
+2821 range 量程 Constant \N (-105,105) 0 \N \N kN 正值是张拉力,负值是承压力 2019-02-25 14:18:58.17+08 2019-02-25 14:18:58.17+08 536c5d54-6c47-4800-aecb-47219ee56fc2 5 t f
+2911 f0 频率初值 Variable \N \N 1 12 99999 -99999 Hz 2019-03-07 11:04:38.655+08 2019-03-07 11:04:38.655+08 a81c3314-06e2-428a-bede-88adf880bdd7 2 t f
+440 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-12-08 15:16:37.901+08 2017-12-08 15:16:37.901+08 31cb6c0b-e369-46b0-9be4-1de3737503fc 5 t f
+441 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-08 15:16:37.906+08 2017-12-08 15:16:37.906+08 31cb6c0b-e369-46b0-9be4-1de3737503fc 5 t f
+442 range 量程 Constant \N \N (0.5,150) \N \N \N m 2017-12-08 15:16:37.91+08 2017-12-08 15:16:37.91+08 31cb6c0b-e369-46b0-9be4-1de3737503fc 5 t f
+1192 range 量程 Constant \N \N (‐40,120),(0,100) \N \N \N 2018-01-05 16:29:05.851+08 2018-01-05 16:29:05.851+08 bc476c11-0887-40fb-ae9e-06ab514a44c0 5 t f
+1222 channelId 通道号 Variable \N \N 1 \N 255 1 2018-01-05 17:57:19.75+08 2018-01-05 17:57:19.75+08 0cbe0018-ac32-4dfd-ba20-7c6e9658a553 1 t f
+1223 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 17:57:19.754+08 2018-01-05 17:57:19.754+08 0cbe0018-ac32-4dfd-ba20-7c6e9658a553 5 t f
+1224 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 18:09:59.84+08 2018-01-05 18:09:59.84+08 9e56c900-b85f-4abd-b53f-3162016875ad 5 t f
+1225 channelId 通道号 Variable \N \N 1 \N 255 1 2018-01-05 18:09:59.847+08 2018-01-05 18:09:59.847+08 9e56c900-b85f-4abd-b53f-3162016875ad 1 t f
+1226 属性1 tt Variable \N \N 4.56 2 234.5 1.0 瓦 2018-01-05 18:21:38.33+08 2018-01-05 18:21:38.33+08 42b1e83a-cc6f-4051-8187-75dab10af0b1 2 t f
+2124 channelId 通道号 Variable \N \N 1 \N 128 1 2018-03-15 16:52:12.18+08 2018-03-15 16:52:12.18+08 63429c67-5b55-4b88-998c-65d4464623c8 1 t f
+2063 wakeupdelay 唤醒延时 Variable \N \N 1 \N 65535 1 s 2018-03-08 19:33:59.995+08 2018-03-08 19:33:59.995+08 aee112f2-97fd-415e-b3b8-7009ea712ab1 1 t f
+2125 moduleId 模块号 Variable \N 1 0 \N \N 2018-03-15 16:52:12.184+08 2018-03-15 16:52:12.184+08 63429c67-5b55-4b88-998c-65d4464623c8 5 t f
+1500 moduleId 模块号 Variable \N 1 0 \N 2018-01-08 17:35:44.875+08 2018-03-12 16:37:58.395+08 157090bc-b53c-4ae3-94fc-4b3804ed6433 5 t f
+1496 moduleId 模块号 Variable \N 1 0 \N 2018-01-08 17:33:37.648+08 2018-03-12 16:38:06.727+08 448efd11-ceec-4f64-93a0-ad7133e38b8d 5 t f
+1386 range 量程 Constant \N (0,70) 0 m/s 2018-01-08 13:55:43.528+08 2018-01-08 14:00:03.941+08 09e8eef6-6b70-4cda-84c2-a7680f7a535f 5 t f
+1392 range 量程 Constant \N (-40,125),(0,100) 0 ℃,%RH 2018-01-08 14:10:26.915+08 2018-01-08 14:14:01.778+08 c36c08c3-4f22-474e-b748-c6c32288c802 5 t f
+2334 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 16:42:28.016+08 2018-03-26 16:42:28.016+08 1d48c633-6d83-4b96-a572-6f59a0100c9b 5 t f
+1497 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-08 17:33:37.651+08 2018-01-08 17:33:37.651+08 448efd11-ceec-4f64-93a0-ad7133e38b8d 1 t f
+1499 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-08 17:35:44.871+08 2018-01-08 17:35:44.871+08 157090bc-b53c-4ae3-94fc-4b3804ed6433 1 t f
+1504 humiRange 湿度量程 Constant \N \N (0,100) \N \N \N % 2018-01-08 18:05:01.003+08 2018-01-08 18:05:01.003+08 5f908b85-0f3a-48c0-bc83-8e191731a754 5 t f
+2340 sensortype 传感器类型 Constant \N \N cx \N \N \N \N 2018-03-26 17:25:28.031+08 2018-03-26 17:25:28.031+08 8c2579cd-6aca-4902-a9d6-61e916a4541e 5 t f
+2344 channelId 通道号 Variable \N \N 1 \N \N \N \N 2018-03-27 10:16:16.659+08 2018-03-27 10:16:16.659+08 4d523084-bf91-421f-bafc-f278a63c5541 5 t f
+2345 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-27 10:56:35.978+08 2018-03-27 10:56:35.978+08 e5f12d4b-bb3c-4158-b98e-8af3579bd2cc 5 t f
+2348 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-27 11:00:11.048+08 2018-03-27 11:00:11.048+08 362018b7-e626-4eab-a6ad-214d85cfcc03 1 t f
+1619 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-11 10:36:37.383+08 2018-01-11 10:36:37.383+08 58647986-2640-4318-902a-5ee7d04150ef 5 t f
+2349 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-27 11:10:51.423+08 2018-03-27 11:10:51.423+08 5f4e4e99-20b3-4bf7-95cb-a2f507595b2d 5 t f
+1710 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-23 13:54:59.29+08 2018-01-23 13:54:59.29+08 70ed36c0-d58f-482d-8337-fafed8a2e6ac 5 t f
+2350 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-27 11:11:16.233+08 2018-03-27 11:11:16.233+08 5f4e4e99-20b3-4bf7-95cb-a2f507595b2d 1 t f
+2357 sensortype 传感器类型 Constant \N \N zx \N \N \N 2018-03-27 11:27:12.758+08 2018-03-27 11:27:12.758+08 9110f259-e269-446d-afa3-798069f4534d 5 t f
+2555 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-08-15 14:38:59.653+08 2018-08-15 14:38:59.653+08 9f845f40-f7bf-4fe7-828e-8f488aff934e 5 t f
+2412 range 量程 Constant \N (0,10) 0 mm 2018-04-08 14:40:14.028+08 2018-04-08 15:43:21.824+08 4142b1cc-3576-456b-b0e4-31e68cc16b32 5 t f
+2556 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-08-15 14:38:59.655+08 2018-08-15 14:38:59.655+08 9f845f40-f7bf-4fe7-828e-8f488aff934e 5 t f
+2416 protocolcode 协议号 Constant \N 9102 0 2018-04-08 14:40:14.041+08 2018-04-09 14:52:04.737+08 4142b1cc-3576-456b-b0e4-31e68cc16b32 5 t f
+2415 sensortype 传感器类型 Constant \N lf 0 \N 2018-04-08 14:40:14.035+08 2018-04-09 14:52:11.595+08 4142b1cc-3576-456b-b0e4-31e68cc16b32 5 t f
+2413 devicetype 设备类型 Constant \N sensor 0 2018-04-08 14:40:14.031+08 2018-04-09 14:52:22.552+08 4142b1cc-3576-456b-b0e4-31e68cc16b32 5 t f
+1190 devicetype 设备类型 Constant \N sensor 0 2018-01-05 16:29:05.845+08 2018-04-09 15:13:13.808+08 bc476c11-0887-40fb-ae9e-06ab514a44c0 5 t f
+2463 温湿度传感器 \N Variable \N \N \N \N 35 1 \N 2018-04-24 15:29:24.958+08 2018-04-24 15:29:24.958+08 324eb312-14cd-4931-a6e0-f84880fb8ac5 1 t f
+2557 channelId 通道号 Variable \N \N 1 \N 128 1 2018-08-15 14:38:59.657+08 2018-08-15 14:38:59.657+08 9f845f40-f7bf-4fe7-828e-8f488aff934e 1 t f
+2560 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-08-15 14:39:57.343+08 2018-08-15 14:39:57.343+08 a99d7cc9-7afe-4415-93dd-bcdc193c5121 5 t f
+2564 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-08-15 17:13:27.47+08 2018-08-15 17:13:27.47+08 c1738ab8-25cd-4216-823d-0159c2d9fc82 5 t f
+2822 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 14:20:41.42+08 2019-02-25 14:20:41.42+08 1ecb51e2-e759-45ef-9792-89f34bb715d0 5 t f
+2823 range 量程 Constant \N (-1500,1500) 0 \N \N με 2019-02-25 14:20:41.424+08 2019-02-25 14:20:41.424+08 1ecb51e2-e759-45ef-9792-89f34bb715d0 5 t f
+2824 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2019-02-25 14:20:41.427+08 2019-02-25 14:20:41.427+08 1ecb51e2-e759-45ef-9792-89f34bb715d0 1 t f
+2825 sensortype 设备类型 Constant \N zx 0 \N \N \N 2019-02-25 14:20:41.429+08 2019-02-25 14:20:41.429+08 1ecb51e2-e759-45ef-9792-89f34bb715d0 5 t f
+2882 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 15:51:46.937+08 2019-02-25 15:51:46.937+08 18b82e73-7501-445f-a72c-a8e20cf9da40 5 t f
+2883 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 15:51:46.94+08 2019-02-25 15:51:46.94+08 18b82e73-7501-445f-a72c-a8e20cf9da40 5 t f
+2884 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 15:51:46.942+08 2019-02-25 15:51:46.942+08 18b82e73-7501-445f-a72c-a8e20cf9da40 5 t f
+2885 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 15:51:46.944+08 2019-02-25 15:51:46.944+08 18b82e73-7501-445f-a72c-a8e20cf9da40 1 t f
+2886 range 量程 Constant \N (-136,136) 0 \N \N kN 正值是张拉力,负值是承压力 2019-02-25 15:51:46.947+08 2019-02-25 15:51:46.947+08 18b82e73-7501-445f-a72c-a8e20cf9da40 5 t f
+2887 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 15:51:46.949+08 2019-02-25 15:51:46.949+08 18b82e73-7501-445f-a72c-a8e20cf9da40 1 t f
+2973 aqi_st 模组类型-AQI Constant \N aqi 0 2019-03-27 20:05:58.45+08 2019-04-02 09:58:04.67+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 5 t f
+443 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-08 15:23:44.922+08 2017-12-08 15:23:44.922+08 ea797ffb-87b5-4e0a-8da4-7f627c347b2f 5 t f
+444 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-08 15:23:44.926+08 2017-12-08 15:23:44.926+08 ea797ffb-87b5-4e0a-8da4-7f627c347b2f 5 t f
+445 range 量程 Constant \N \N (0.5,200) \N \N \N m 2017-12-08 15:23:44.929+08 2017-12-08 15:23:44.929+08 ea797ffb-87b5-4e0a-8da4-7f627c347b2f 5 t f
+446 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-08 15:30:34.588+08 2017-12-08 15:30:34.588+08 8583cb29-4726-4532-9530-a5b338d3483c 5 t f
+447 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-08 15:30:34.591+08 2017-12-08 15:30:34.591+08 8583cb29-4726-4532-9530-a5b338d3483c 5 t f
+448 range 量程 Constant \N \N (0.5,250) \N \N \N m 2017-12-08 15:30:34.595+08 2017-12-08 15:30:34.595+08 8583cb29-4726-4532-9530-a5b338d3483c 5 t f
+449 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-08 15:40:02.623+08 2017-12-08 15:40:02.623+08 dc5bdee9-14f3-4040-ad1c-faf008358890 5 t f
+450 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-08 15:40:02.627+08 2017-12-08 15:40:02.627+08 dc5bdee9-14f3-4040-ad1c-faf008358890 5 t f
+451 range 量程 Constant \N \N (3,1000) \N \N \N m 2017-12-08 15:40:02.63+08 2017-12-08 15:40:02.63+08 dc5bdee9-14f3-4040-ad1c-faf008358890 5 t f
+453 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-11 14:01:04.75+08 2017-12-11 14:01:04.75+08 6aa982a5-d7a3-48ee-b1dc-afe4686ce796 5 t f
+454 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-12-11 15:27:03.017+08 2017-12-11 15:27:03.017+08 ef629030-d691-43fa-b6b4-b1465e60dace 5 t f
+455 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-12 10:23:59.561+08 2017-12-12 10:23:59.561+08 24064f03-7c7e-493b-99f2-c926717d28fc 5 t f
+457 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-12 10:23:59.567+08 2017-12-12 10:23:59.567+08 24064f03-7c7e-493b-99f2-c926717d28fc 5 t f
+458 range 量程 Constant \N \N (0,10000) \N \N \N ug/m3 2017-12-12 11:37:35.296+08 2017-12-12 11:37:35.296+08 abb38d23-09f3-48fc-b9ee-4dfaf1db995b 5 t f
+459 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-12 11:55:07.954+08 2017-12-12 11:55:07.954+08 405df805-9088-45a7-b4b2-763299e0c57b 5 t f
+460 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-12 11:55:07.957+08 2017-12-12 11:55:07.957+08 405df805-9088-45a7-b4b2-763299e0c57b 5 t f
+461 range 范围 Constant \N \N (0,60),(0,359.9) \N \N \N m/s,° 2017-12-12 11:55:07.961+08 2017-12-12 11:55:07.961+08 405df805-9088-45a7-b4b2-763299e0c57b 5 t f
+462 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-12 14:08:56.838+08 2017-12-12 14:08:56.838+08 2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b 5 t f
+463 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-12 14:08:56.842+08 2017-12-12 14:08:56.842+08 2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b 5 t f
+464 range 量程 Constant \N \N (-10,50),(0,100) \N \N \N ℃,% 2017-12-12 14:08:56.845+08 2017-12-12 14:08:56.845+08 2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b 5 t f
+465 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-12 14:41:03.878+08 2017-12-12 14:41:03.878+08 10018134-99f1-486e-8071-dc652f44d152 5 t f
+466 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-12 14:41:03.879+08 2017-12-12 14:41:03.879+08 10018134-99f1-486e-8071-dc652f44d152 5 t f
+467 range 量程 Constant \N \N (-40,120),(5,95) \N \N \N ℃,%RH 2017-12-12 14:41:03.881+08 2017-12-12 14:41:03.881+08 10018134-99f1-486e-8071-dc652f44d152 5 t f
+468 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-13 13:09:16.249+08 2017-12-13 13:09:16.249+08 5cd62211-11dd-4deb-83bf-2873ae7dd42f 5 t f
+469 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-13 13:09:16.252+08 2017-12-13 13:09:16.252+08 5cd62211-11dd-4deb-83bf-2873ae7dd42f 5 t f
+470 range 量程 Constant \N \N (0,50),(0,100) \N \N \N ℃,%RH 2017-12-13 13:09:16.255+08 2017-12-13 13:09:16.255+08 5cd62211-11dd-4deb-83bf-2873ae7dd42f 5 t f
+471 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-13 13:21:56.931+08 2017-12-13 13:21:56.931+08 b475bf8f-00a0-457f-ad96-95b187dba62f 5 t f
+472 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-13 13:21:56.934+08 2017-12-13 13:21:56.934+08 b475bf8f-00a0-457f-ad96-95b187dba62f 5 t f
+473 range 量程 Constant \N \N (-5,55),(0,100) \N \N \N ℃,%RH 2017-12-13 13:21:56.939+08 2017-12-13 13:21:56.939+08 b475bf8f-00a0-457f-ad96-95b187dba62f 5 t f
+474 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-13 13:27:21.376+08 2017-12-13 13:27:21.376+08 63b7958b-9b1b-49ca-b01c-62ebe4df6376 5 t f
+475 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-13 13:27:21.379+08 2017-12-13 13:27:21.379+08 63b7958b-9b1b-49ca-b01c-62ebe4df6376 5 t f
+476 range 量程 Constant \N \N (-10,60),(0,100) \N \N \N ℃,%RH 2017-12-13 13:27:21.382+08 2017-12-13 13:27:21.382+08 63b7958b-9b1b-49ca-b01c-62ebe4df6376 5 t f
+477 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-13 13:40:01.327+08 2017-12-13 13:40:01.327+08 41da65aa-dd1b-4a8f-8758-13f624e45dad 5 t f
+478 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-13 13:40:01.331+08 2017-12-13 13:40:01.331+08 41da65aa-dd1b-4a8f-8758-13f624e45dad 5 t f
+479 range 量程 Constant \N \N (-20,80),(0,100) \N \N \N ℃,%RH 2017-12-13 13:40:01.335+08 2017-12-13 13:40:01.335+08 41da65aa-dd1b-4a8f-8758-13f624e45dad 5 t f
+480 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-13 13:46:22.568+08 2017-12-13 13:46:22.568+08 16f7e5ff-fb7a-4aa6-a701-9776f7638689 5 t f
+481 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-13 13:46:22.571+08 2017-12-13 13:46:22.571+08 16f7e5ff-fb7a-4aa6-a701-9776f7638689 5 t f
+482 range 量程 Constant \N \N (-40,60),(0,100) \N \N \N ℃,%RH 2017-12-13 13:46:22.575+08 2017-12-13 13:46:22.575+08 16f7e5ff-fb7a-4aa6-a701-9776f7638689 5 t f
+483 pointId 监测点ID Variable \N \N 1 \N \N \N \N 2017-12-13 13:59:30.949+08 2017-12-13 13:59:30.949+08 7776a9dc-8e14-417c-a5fe-4b1dd1c869d7 5 t f
+485 112 \N Variable \N \N \N \N \N \N 2017-12-13 17:37:15.188+08 2017-12-13 17:37:15.188+08 8cf5725f-9e2d-447c-b261-cc810a1ed07b 5 t f
+486 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-12-14 14:22:34.622+08 2017-12-14 14:22:34.622+08 61db6668-b790-47e8-9429-55bfa4f98b90 5 t f
+487 range 量程 Constant \N \N (0,10000) \N \N \N ug/m3 2017-12-14 14:23:54.93+08 2017-12-14 14:23:54.93+08 61db6668-b790-47e8-9429-55bfa4f98b90 5 t f
+492 deviceType 设备类型 Constant \N \N 2 \N \N \N \N 2017-12-14 16:55:58.288+08 2017-12-14 16:55:58.288+08 a30d283e-1af2-4531-ab6b-be1186799eea 2 t f
+493 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-14 16:55:58.291+08 2017-12-14 16:55:58.291+08 a30d283e-1af2-4531-ab6b-be1186799eea 5 t f
+494 range 量程 Constant \N \N (-30,30),(-30,30) \N \N \N °,° 2017-12-14 16:55:58.295+08 2017-12-14 16:55:58.295+08 a30d283e-1af2-4531-ab6b-be1186799eea 5 t f
+489 deviceType 设备类型 Constant \N sensor 0 \N 2017-12-14 16:49:47.958+08 2017-12-14 16:56:17.282+08 af1cd7e8-52e1-4411-9c9a-20bc82a2786d 5 t f
+496 range 量程 Constant \N (0,1000) 0 mm 2017-12-18 14:15:56.101+08 2017-12-18 14:17:29.079+08 4d48086d-804a-426d-9867-0e87efdc74fe 5 t f
+497 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-12-18 17:23:33.752+08 2017-12-18 17:23:33.752+08 701ab719-e85b-4428-ad59-1b7adff31c56 5 t f
+495 moduleId 模块号 Variable \N 1 0 \N 2017-12-18 10:57:40.232+08 2017-12-18 14:17:36.4+08 4d48086d-804a-426d-9867-0e87efdc74fe 5 t f
+2464 温度 \N Variable \N \N \N 6 120 0 \N 2018-05-09 11:11:01.659+08 2018-05-09 11:11:01.659+08 3b03e747-cc81-4f6e-9ccf-f828a5534096 2 t f
+484 range 量程 Constant \N (-30,30),(-30,30),(-25,70) 0 °,°,℃ 2017-12-13 16:01:59.089+08 2017-12-20 16:02:12.061+08 9e8050a9-f38a-45c3-a02b-40670bdf19b7 5 t f
+491 range 量程 Constant \N (-30,30),(-30,30) 0 °,° 2017-12-14 16:49:47.964+08 2017-12-20 16:03:41.607+08 af1cd7e8-52e1-4411-9c9a-20bc82a2786d 5 t f
+498 range 沉降量程 Constant \N (0,1500) 0 mm 2017-12-19 13:42:28.733+08 2017-12-19 13:46:24.506+08 701ab719-e85b-4428-ad59-1b7adff31c56 5 t f
+499 tempRange 温度量程 Constant \N \N (-10,30) \N \N \N ℃ 2017-12-19 13:50:17.216+08 2017-12-19 13:50:17.216+08 701ab719-e85b-4428-ad59-1b7adff31c56 5 t f
+500 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-19 14:21:59.044+08 2017-12-19 14:21:59.044+08 0eb7e920-0359-4b8b-b604-14bc1136e8f5 5 t f
+501 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-19 14:21:59.046+08 2017-12-19 14:21:59.046+08 0eb7e920-0359-4b8b-b604-14bc1136e8f5 5 t f
+502 range 量程 Constant \N \N (0.1,1000) \N \N \N NTU 2017-12-19 14:21:59.049+08 2017-12-19 14:21:59.049+08 0eb7e920-0359-4b8b-b604-14bc1136e8f5 5 t f
+503 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-19 17:47:35.447+08 2017-12-19 17:47:35.447+08 235b7fe6-cf6f-4cf4-8d40-a3103cc0fba7 5 t f
+504 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-19 17:47:35.453+08 2017-12-19 17:47:35.453+08 235b7fe6-cf6f-4cf4-8d40-a3103cc0fba7 5 t f
+505 channelId 通道号 Variable \N \N 1 \N 255 1 2017-12-19 17:47:35.457+08 2017-12-19 17:47:35.457+08 235b7fe6-cf6f-4cf4-8d40-a3103cc0fba7 1 t f
+2132 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-19 14:57:03.378+08 2018-03-19 14:57:03.378+08 717279c9-81b5-4bfe-8dd3-906297d70e41 5 t f
+2159 channelId 通道号 Variable \N \N 1 \N 128 1 2018-03-22 09:59:58.372+08 2018-03-22 09:59:58.372+08 10f69514-4a4b-4ecd-a318-f8bf0c81a965 1 t f
+510 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-19 17:58:52.296+08 2017-12-19 17:58:52.296+08 dfffdb75-6ad1-4092-95d2-ac6596b3c4ce 5 t f
+511 channelId 通道号 Variable \N \N 1 \N 255 1 2017-12-19 17:58:52.3+08 2017-12-19 17:58:52.3+08 dfffdb75-6ad1-4092-95d2-ac6596b3c4ce 1 t f
+2347 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-27 10:59:53.476+08 2018-03-27 10:59:53.476+08 362018b7-e626-4eab-a6ad-214d85cfcc03 5 t f
+516 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-20 09:11:42.461+08 2017-12-20 09:11:42.461+08 6039a6d8-af54-411e-a520-451b20b6d089 5 t f
+517 channelId 通道号 Variable \N \N 1 \N 255 1 2017-12-20 09:11:42.464+08 2017-12-20 09:11:42.464+08 6039a6d8-af54-411e-a520-451b20b6d089 1 t f
+2358 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-27 11:28:14.204+08 2018-03-27 11:28:14.204+08 9110f259-e269-446d-afa3-798069f4534d 1 t f
+522 range 量程 Constant \N (0,5) 0 m 2017-12-20 11:47:41.558+08 2017-12-20 11:55:44.058+08 93f84dd4-087b-46ef-bdda-9db4adfdb16b 5 t f
+541 range 量程 Constant \N \N (-30,30),(-30,30),(-20,80) \N \N \N °,°,℃ 2017-12-20 15:13:11.457+08 2017-12-20 15:13:11.457+08 f5d141ad-ea96-4398-8712-2a802af988f8 5 t f
+523 range 量程 Constant \N (-20,60) 0 ℃ 2017-12-20 11:59:23.464+08 2017-12-20 11:59:44.026+08 1cdf6eb6-fcd9-4346-992d-6ddc41b956cf 5 t f
+524 range 量程 Constant \N \N (0,1000) \N \N \N ug/m3 2017-12-20 13:44:01.553+08 2017-12-20 13:44:01.553+08 2f8c4ab2-42a9-44d8-bd3d-cfa9d1f55252 5 t f
+525 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-20 13:51:02.587+08 2017-12-20 13:51:02.587+08 5e96e066-3520-443f-80a4-9a3a1a7badd6 5 t f
+526 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-20 13:51:02.59+08 2017-12-20 13:51:02.59+08 5e96e066-3520-443f-80a4-9a3a1a7badd6 5 t f
+527 channelId 通道号 Variable \N \N 1 \N 255 1 2017-12-20 13:51:02.593+08 2017-12-20 13:51:02.593+08 5e96e066-3520-443f-80a4-9a3a1a7badd6 1 t f
+528 range 量程 Constant \N \N (0,2000) \N \N \N ug/m3 2017-12-20 13:51:02.595+08 2017-12-20 13:51:02.595+08 5e96e066-3520-443f-80a4-9a3a1a7badd6 5 t f
+529 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-12-20 13:59:41.27+08 2017-12-20 13:59:41.27+08 ac8a15b2-1daa-48ce-b77f-52e2429c66bd 5 t f
+530 channelID 通道号 Variable \N \N 1 \N \N \N 2017-12-20 13:59:41.274+08 2017-12-20 13:59:41.274+08 ac8a15b2-1daa-48ce-b77f-52e2429c66bd 5 t f
+531 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-12-20 13:59:41.277+08 2017-12-20 13:59:41.277+08 ac8a15b2-1daa-48ce-b77f-52e2429c66bd 5 t f
+532 range 量程 Constant \N \N (0,50) \N \N \N ppm 2017-12-20 13:59:41.28+08 2017-12-20 13:59:41.28+08 ac8a15b2-1daa-48ce-b77f-52e2429c66bd 5 t f
+533 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-20 14:03:22.696+08 2017-12-20 14:03:22.696+08 676795c3-0d71-441d-aa0e-62b82dff8193 5 t f
+534 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-20 14:03:22.699+08 2017-12-20 14:03:22.699+08 676795c3-0d71-441d-aa0e-62b82dff8193 5 t f
+536 range 量程 Constant \N \N (0,500) \N \N \N ppb 2017-12-20 14:03:22.709+08 2017-12-20 14:03:22.709+08 676795c3-0d71-441d-aa0e-62b82dff8193 5 t f
+540 range 量程 Constant \N (0,200) 0 mm 2017-12-20 14:30:07.225+08 2018-12-07 16:51:12.746+08 14f67669-6cec-42c0-a7ca-4b60950ec7b5 5 t f
+535 channelId 通道号 Variable \N 1 0 255 1 2017-12-20 14:03:22.704+08 2017-12-20 14:04:05.097+08 676795c3-0d71-441d-aa0e-62b82dff8193 1 t f
+538 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-20 14:30:07.218+08 2017-12-20 14:30:07.218+08 14f67669-6cec-42c0-a7ca-4b60950ec7b5 5 t f
+539 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-20 14:30:07.222+08 2017-12-20 14:30:07.222+08 14f67669-6cec-42c0-a7ca-4b60950ec7b5 5 t f
+537 range 量程 Constant \N (0,100),(-20,80) 0 mm,℃ 2017-12-20 14:27:53.873+08 2017-12-20 15:18:35.224+08 e08c86d5-195d-4cf6-a1a5-1cfd113ddd52 5 t f
+542 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-20 15:25:01.24+08 2017-12-20 15:25:01.24+08 6bf32a53-c1d4-4014-b0b9-da1af43bda76 5 t f
+543 range 量程 Constant \N \N (0,500) \N \N \N ppb 2017-12-20 15:25:01.245+08 2017-12-20 15:25:01.245+08 6bf32a53-c1d4-4014-b0b9-da1af43bda76 5 t f
+544 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-20 15:25:01.251+08 2017-12-20 15:25:01.251+08 6bf32a53-c1d4-4014-b0b9-da1af43bda76 5 t f
+545 channelId 通道号 Variable \N \N 1 \N 255 1 2017-12-20 15:25:01.255+08 2017-12-20 15:25:01.255+08 6bf32a53-c1d4-4014-b0b9-da1af43bda76 1 t f
+546 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-20 15:39:19.359+08 2017-12-20 15:39:19.359+08 ad41eeec-8dff-4cbb-9a3a-8d42db92bca8 5 t f
+547 range 量程 Constant \N \N (0,500) \N \N \N ppb 2017-12-20 15:39:19.364+08 2017-12-20 15:39:19.364+08 ad41eeec-8dff-4cbb-9a3a-8d42db92bca8 5 t f
+548 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-20 15:39:19.369+08 2017-12-20 15:39:19.369+08 ad41eeec-8dff-4cbb-9a3a-8d42db92bca8 5 t f
+549 channelId 通道号 Variable \N \N 1 \N 255 1 2017-12-20 15:39:19.374+08 2017-12-20 15:39:19.374+08 ad41eeec-8dff-4cbb-9a3a-8d42db92bca8 1 t f
+550 temp 温度 Variable \N \N \N 2 100 -30 ℃ 2017-12-20 15:39:27.006+08 2017-12-20 15:39:27.006+08 cd5e889f-775b-446c-9ffe-e2d8eeceaaa0 2 t f
+551 humi 湿度 Variable \N \N \N 2 100 0 % 2017-12-20 15:39:27.01+08 2017-12-20 15:39:27.01+08 cd5e889f-775b-446c-9ffe-e2d8eeceaaa0 2 t f
+373 channel 通.道.号 Variable \N 1 0 8 1 2017-12-01 09:59:04.616+08 2018-04-08 18:16:53.087+08 22d007b2-5200-4bf6-85dc-c755a7a75bcf 1 t f
+2561 deviceType deviceType Constant \N sensor 0 \N \N \N 2018-08-15 14:40:39.293+08 2018-08-15 14:40:39.293+08 b0c20a76-7e51-479c-9837-1516be5a1567 5 t f
+2568 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-08-17 11:33:00.289+08 2018-08-17 11:33:00.289+08 df1112e3-a161-4260-850f-8f6644389623 5 t f
+2826 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 14:21:57.07+08 2019-02-25 14:21:57.07+08 d26842d0-7685-4eec-869d-160b023932b9 5 t f
+2827 range 量程 Constant \N (-3000,3000) 0 \N \N με 2019-02-25 14:21:57.073+08 2019-02-25 14:21:57.073+08 d26842d0-7685-4eec-869d-160b023932b9 5 t f
+2828 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 14:21:57.075+08 2019-02-25 14:21:57.075+08 d26842d0-7685-4eec-869d-160b023932b9 1 t f
+2829 sensortype 传感器类型 Constant \N zx 0 \N \N \N 2019-02-25 14:21:57.08+08 2019-02-25 14:21:57.08+08 d26842d0-7685-4eec-869d-160b023932b9 5 t f
+552 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-20 15:44:31.435+08 2017-12-20 15:44:31.435+08 3da31fde-9ea8-406f-9a1b-4a9932dbc2df 5 t f
+553 range 量程 Constant \N \N (0,100) \N \N \N %RH 2017-12-20 15:44:31.44+08 2017-12-20 15:44:31.44+08 3da31fde-9ea8-406f-9a1b-4a9932dbc2df 5 t f
+554 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-20 15:44:31.444+08 2017-12-20 15:44:31.444+08 3da31fde-9ea8-406f-9a1b-4a9932dbc2df 5 t f
+555 channelId 通道号 Variable \N \N 1 \N 255 1 2017-12-20 15:44:31.447+08 2017-12-20 15:44:31.447+08 3da31fde-9ea8-406f-9a1b-4a9932dbc2df 1 t f
+556 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-20 15:48:48.787+08 2017-12-20 15:48:48.787+08 466241f9-ceea-4552-b9c6-114413124018 5 t f
+557 range 量程 Constant \N \N (0,20) \N \N \N ppm 2017-12-20 15:48:48.79+08 2017-12-20 15:48:48.79+08 466241f9-ceea-4552-b9c6-114413124018 5 t f
+558 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-20 15:48:48.793+08 2017-12-20 15:48:48.793+08 466241f9-ceea-4552-b9c6-114413124018 5 t f
+559 channelId 通道号 Variable \N \N 1 \N 255 1 2017-12-20 15:48:48.796+08 2017-12-20 15:48:48.796+08 466241f9-ceea-4552-b9c6-114413124018 1 t f
+2065 protocolcode 协议号 Constant \N 1502 0 \N Modbus盒式测斜协议 2018-03-08 20:11:52.114+08 2018-03-14 16:19:49.843+08 9e8050a9-f38a-45c3-a02b-40670bdf19b7 1 t f
+2155 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-22 09:57:41.576+08 2018-03-22 09:57:41.576+08 874e1ee5-94fe-49aa-94b0-6d6bfef680bc 5 t f
+2133 deviceType 设备类型 Constant \N sensor 0 \N 2018-03-19 17:01:08.437+08 2018-03-19 17:03:27.112+08 4696ff30-0685-4f87-bc16-25d640a014a6 5 t f
+1201 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 16:34:08.835+08 2018-01-05 16:34:08.835+08 5eb050b5-8b57-4528-adce-b3633e613b6c 1 t f
+400 range 量程 Constant \N (-30,30),(-30,30) 0 °,° 2017-12-06 10:37:27.504+08 2017-12-21 09:36:51.162+08 6c19e60e-0ed7-4e22-abb4-ddc9caf20d91 5 t f
+1202 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 16:34:08.838+08 2018-01-05 16:34:08.838+08 5eb050b5-8b57-4528-adce-b3633e613b6c 5 t f
+566 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-12-21 11:15:16.289+08 2017-12-21 11:15:16.289+08 7c1b8df9-4088-4cc7-b07b-3299d827d7d0 5 t f
+565 range 量程 Constant \N (50,40000) 0 mm 2017-12-21 11:04:25.448+08 2017-12-21 11:26:18.317+08 f9cf9002-bdbd-458c-8534-37db6183e217 5 t f
+568 range 量程 Constant \N (0,20),(0,20) 0 m,m 2017-12-21 11:27:55.584+08 2017-12-21 11:28:43.762+08 21d99b83-6a52-4465-90c4-125d8330e1c1 5 t f
+2158 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-22 09:59:34.155+08 2018-03-22 09:59:34.155+08 10f69514-4a4b-4ecd-a318-f8bf0c81a965 5 t f
+2049 q \N Variable \N \N \N \N \N \N 2018-03-07 16:17:14.184+08 2018-03-07 16:17:14.184+08 24ff3733-db3f-4d37-b90a-edd44a77e054 5 t f
+569 range 量程 Constant \N (0,200) 0 mH2O 2017-12-21 11:32:06.762+08 2017-12-21 11:54:19.778+08 8e782506-4bab-4798-9e24-315107e3cc15 5 t f
+570 range 量程 Constant \N \N (-20,70),(0,100) \N \N \N ℃,%RH 2017-12-21 13:48:59.196+08 2017-12-21 13:48:59.196+08 497ca51c-dd0a-46cb-8651-ac4bb7bd45c0 5 t f
+571 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-12-21 13:49:17.451+08 2017-12-21 13:49:17.451+08 497ca51c-dd0a-46cb-8651-ac4bb7bd45c0 5 t f
+572 range 量程 Constant \N \N (0,60),(0,360) \N \N \N m/s,° 2017-12-21 14:11:59.238+08 2017-12-21 14:11:59.238+08 fd8e5a82-2b93-4d83-9132-4666b974079d 5 t f
+573 range 量程 Constant \N \N (-30,30),(-30,30) \N \N \N °,° 2017-12-21 14:19:19.167+08 2017-12-21 14:19:19.167+08 7118fecd-555d-4d6c-9b3a-63b6ed0d2a45 5 t f
+574 range 量程 Constant \N \N (-90,90),(-90,90) \N \N \N °,° 2017-12-21 14:22:39.249+08 2017-12-21 14:22:39.249+08 77d3bafd-4986-4848-b3c9-dfe847c6750e 5 t f
+575 range 量程 Constant \N \N (-90,90),(-180,180) \N \N \N ° 2017-12-21 15:07:07.226+08 2017-12-21 15:07:07.226+08 ef2cc4b4-23d3-4ff0-981b-84a8c98113ab 5 t f
+576 range 量程 Constant \N \N (-90,90),(-180,180) \N \N \N °,° 2017-12-21 15:08:18.334+08 2017-12-21 15:08:18.334+08 d32b2513-a8bb-465c-aabf-0832f355ef6b 5 t f
+577 range 量程 Constant \N \N (-90,90),(-90,90),(-40,80) \N \N \N °,°,℃ 2017-12-21 15:19:10.14+08 2017-12-21 15:19:10.14+08 183c2cd5-5a53-4985-80aa-33a6ce2f82d4 5 t f
+578 range 量程 Constant \N \N (-20,70),(0,95) \N \N \N ℃,%RH 2017-12-21 16:37:36.694+08 2017-12-21 16:37:36.694+08 6af0f3be-6cb5-43c8-a588-490e10fdf4b7 5 t f
+579 deviceType 设备类型 Constant \N \N sensor \N \N \N 2017-12-21 16:37:36.699+08 2017-12-21 16:37:36.699+08 6af0f3be-6cb5-43c8-a588-490e10fdf4b7 5 t f
+580 moduleId 模块号 Variable \N \N 1 \N \N \N 2017-12-21 16:37:36.703+08 2017-12-21 16:37:36.703+08 6af0f3be-6cb5-43c8-a588-490e10fdf4b7 5 t f
+581 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2017-12-21 17:50:57.701+08 2017-12-21 17:50:57.701+08 c7528fab-94f4-4110-9aaf-8964afa09c20 5 t f
+582 range 量程 Constant \N \N (-20,80),(0,100) \N \N \N ℃,%RH 2017-12-21 17:51:41.332+08 2017-12-21 17:51:41.332+08 c7528fab-94f4-4110-9aaf-8964afa09c20 5 t f
+611 key \N Variable \N \N \N \N 1 1 \N 2018-01-03 23:06:41.728+08 2018-01-03 23:06:41.728+08 30519425-7bd8-440f-83ea-f9da4767faf9 1 t f
+583 tempRange 温度 Constant \N \N (-55,85) \N \N \N ℃ 2017-12-25 11:10:04.787+08 2017-12-25 11:10:04.787+08 7c1b8df9-4088-4cc7-b07b-3299d827d7d0 5 t f
+2360 111111 2 Variable \N \N true \N \N \N 1 2 2018-03-28 15:40:02.875+08 2018-03-28 15:40:02.875+08 7faf119d-7804-470c-a448-516d681cce6b 3 t f
+2417 devicetype 设备类型 Constant \N \N sensor \N \N \N \N 2018-04-09 16:11:41.576+08 2018-04-09 16:11:41.576+08 0bf78d42-85ee-486c-bf43-c62c3168ee33 5 t f
+605 channelId 通道号 Variable \N 1 0 128 1 2018-01-02 17:33:10.108+08 2018-01-08 16:39:31.104+08 608c11f3-91d9-4d92-9459-a4f7eb20bf1d 1 t f
+609 moduleId 模块号 Variable \N 1 0 \N 2018-01-03 16:19:19.159+08 2018-01-18 17:33:00.428+08 4d523084-bf91-421f-bafc-f278a63c5541 5 f f
+2003 eee \N Variable \N \N \N \N 3 1 \N 2018-02-27 16:28:09.443+08 2018-02-27 16:28:09.443+08 1a6ea847-974c-49f4-b1e6-452665775d49 1 t f
+2064 interval 采集间隔 Variable \N \N 5 \N 65535 1 分 2018-03-08 19:34:49.095+08 2018-03-08 19:34:49.095+08 aee112f2-97fd-415e-b3b8-7009ea712ab1 1 t f
+2418 sensortype 传感器类型 Constant \N \N lf \N \N \N 2018-04-09 16:11:41.578+08 2018-04-09 16:11:41.578+08 0bf78d42-85ee-486c-bf43-c62c3168ee33 5 t f
+2419 protocolcode 协议号 Constant \N \N 9102 \N \N \N 2018-04-09 16:11:41.581+08 2018-04-09 16:11:41.581+08 0bf78d42-85ee-486c-bf43-c62c3168ee33 5 t f
+597 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2017-12-28 20:13:20.354+08 2017-12-28 20:13:20.354+08 aa64719f-ac6f-463c-83c5-dcdbd25be81e 5 t f
+598 channelId 通道号 Variable \N \N 1 \N \N \N 2017-12-28 20:13:20.359+08 2017-12-28 20:13:20.359+08 aa64719f-ac6f-463c-83c5-dcdbd25be81e 5 t f
+2467 range 量程 Constant \N \N (-3000,3000) \N \N \N e 2018-05-10 17:53:00.796+08 2018-05-10 17:53:00.796+08 fdef19ae-68f1-4ad5-937b-3cb60e20d8ce 5 t f
+2420 range 量程 Constant \N (-10,10) 0 mm 2018-04-09 16:11:41.584+08 2018-05-16 17:52:37.128+08 0bf78d42-85ee-486c-bf43-c62c3168ee33 5 t f
+2499 account 账号 Variable \N \N \N \N \N \N 2018-06-19 09:45:35.596+08 2018-06-19 09:45:35.596+08 9aff4ead-342b-40e8-b365-6a53212df7dd 5 t f
+603 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-02 17:33:10.101+08 2018-01-02 17:33:10.101+08 608c11f3-91d9-4d92-9459-a4f7eb20bf1d 5 t f
+604 moduleId 模块号 Variable \N \N 1 \N \N \N 2018-01-02 17:33:10.105+08 2018-01-02 17:33:10.105+08 608c11f3-91d9-4d92-9459-a4f7eb20bf1d 5 t f
+2500 pw 密码 Variable \N \N \N \N \N 2018-06-19 09:45:35.603+08 2018-06-19 09:45:35.603+08 9aff4ead-342b-40e8-b365-6a53212df7dd 5 t f
+608 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-03 13:53:36.259+08 2018-01-03 13:53:36.259+08 46ad9444-1665-48d6-bb9a-37cee37d1604 5 t f
+567 range 结冰厚度量程 Constant \N (0,10) 0 mm 2017-12-21 11:15:16.292+08 2018-01-03 20:13:29.752+08 7c1b8df9-4088-4cc7-b07b-3299d827d7d0 5 t f
+612 p \N Variable \N \N \N \N 3 2 \N 2018-01-03 23:08:28.592+08 2018-01-03 23:08:28.592+08 34eeec21-d4e0-4716-a88e-42267e349980 1 t f
+2421 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-04-11 09:27:08.937+08 2018-04-11 09:27:08.937+08 d75d2473-6ed4-437c-8509-682f55d0d407 5 t f
+2066 sensortype 传感器类型 Constant \N cx 0 2018-03-08 20:12:30.833+08 2018-03-14 16:20:12.935+08 9e8050a9-f38a-45c3-a02b-40670bdf19b7 5 t f
+2067 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-08 20:18:18.435+08 2018-03-14 16:22:48.105+08 13ee1f91-04cc-48af-820e-ffc0ed179b6c 5 t f
+2134 deviceType deviceType Constant \N sensor 0 \N 2018-03-19 17:01:59.064+08 2018-03-19 17:02:48.309+08 660c0ba2-d714-4ad3-8166-a1fa25a9d7d1 5 t f
+2501 boxId 云盒编号 Variable \N \N \N \N \N 2018-06-19 09:45:35.609+08 2018-06-19 09:45:35.609+08 9aff4ead-342b-40e8-b365-6a53212df7dd 5 t f
+2502 tokenUrl tokenUrl Variable \N \N \N \N \N 2018-06-19 09:45:35.621+08 2018-06-19 09:45:35.621+08 9aff4ead-342b-40e8-b365-6a53212df7dd 5 t f
+2156 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-22 09:58:34.896+08 2018-03-22 09:58:34.896+08 e8ccf6dc-5626-4bb7-9f88-9bf8972619b4 5 t f
+2503 dataUrl dataUrl Variable \N \N \N \N \N 2018-06-19 09:45:35.624+08 2018-06-19 09:45:35.624+08 9aff4ead-342b-40e8-b365-6a53212df7dd 5 t f
+2563 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-08-15 14:41:47.966+08 2018-08-15 14:41:47.966+08 b15e4068-3a0b-43cf-898a-151d9a211756 5 t f
+1208 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 16:34:09.8+08 2018-01-05 16:34:09.8+08 7802bcc3-5fdb-441d-a57a-a89ca2ec158b 1 t f
+1209 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 16:34:09.803+08 2018-01-05 16:34:09.803+08 7802bcc3-5fdb-441d-a57a-a89ca2ec158b 5 t f
+2565 sensortype 传感器类型 Constant \N gdgs 0 \N 2018-08-16 15:26:40.016+08 2018-08-16 15:28:53.333+08 3553eba2-db23-4cb8-b96d-e0d443644324 5 t f
+2830 sensortype 传感器类型 Constant \N zx 0 \N \N \N 2019-02-25 14:24:04.329+08 2019-02-25 14:24:04.329+08 f0443cf8-a24d-46f9-a894-7c731798736d 5 t f
+2831 protocolcode 协议号 Constant \N 1401 0 \N \N 2019-02-25 14:24:04.332+08 2019-02-25 14:24:04.332+08 f0443cf8-a24d-46f9-a894-7c731798736d 1 t f
+2832 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 14:24:04.334+08 2019-02-25 14:24:04.334+08 f0443cf8-a24d-46f9-a894-7c731798736d 5 t f
+2833 range 量程 Constant \N (-5000,5000) 0 \N \N με 2019-02-25 14:24:04.336+08 2019-02-25 14:24:04.336+08 f0443cf8-a24d-46f9-a894-7c731798736d 5 t f
+2913 value 参数值 Variable \N \N 6 99999 0 2019-03-07 15:14:53.166+08 2019-03-11 10:33:11.627+08 a820a6a6-2302-4291-bf8a-e6beb3e7f663 2 f f
+2974 gps_st 模组类型-GPS Constant \N gps 0 2019-03-27 20:08:29.221+08 2019-04-02 09:57:42.627+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 5 t f
+641 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-04 11:56:59.894+08 2018-01-04 11:56:59.894+08 6a8343f7-8c07-4851-8924-f8d4f1f5ab78 5 t f
+642 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-04 11:56:59.899+08 2018-01-04 11:56:59.899+08 6a8343f7-8c07-4851-8924-f8d4f1f5ab78 5 t f
+2995 pm10_pre 执行前延迟-PM10 Variable \N 25 0 600 0 百毫秒 2019-03-28 10:00:50.507+08 2019-04-02 09:57:50.1+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 1 t f
+1210 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 16:48:16.721+08 2018-01-05 16:48:16.721+08 1e0d3ad9-26a9-427e-be48-685ffe3e84b7 5 t f
+1398 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 14:45:01.204+08 2018-01-08 14:45:01.204+08 8d1d1382-984f-4aa9-8e57-c2a2c21e0c06 5 t f
+1423 range 量程 Constant \N \N (-40,80) \N \N \N ℃ 2018-01-08 16:03:38.883+08 2018-01-08 16:03:38.883+08 8d1d1382-984f-4aa9-8e57-c2a2c21e0c06 5 t f
+1421 tempRange 温度量程 Constant \N (-40,125) 0 ℃ 2018-01-08 16:00:26.359+08 2018-01-08 17:15:46.481+08 e5b27a73-2d4c-4b53-8bcd-86583097a730 5 t f
+1498 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 17:34:18.71+08 2018-01-08 17:34:18.71+08 5f908b85-0f3a-48c0-bc83-8e191731a754 5 t f
+1501 moduleId 模块号 Variable \N 0 0 \N \N \N 2018-01-08 17:44:21.356+08 2018-01-08 17:44:21.356+08 cad4657b-dba7-4ad9-990c-bf0ce3ee1e6f 5 t f
+1503 tempRange 温度量程 Constant \N \N (-40,120) \N \N \N ℃ 2018-01-08 18:04:25.036+08 2018-01-08 18:04:25.036+08 5f908b85-0f3a-48c0-bc83-8e191731a754 5 t f
+1509 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 18:26:58.129+08 2018-01-08 18:26:58.129+08 0dcb57e3-244f-44d3-8f9c-a50fc74481a8 5 t f
+1510 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 18:35:03.275+08 2018-01-08 18:35:03.275+08 29aa5799-e271-4913-8e21-04edddaa5be1 5 t f
+1511 range 量程 Constant \N \N (-40,80) \N \N \N ℃ 2018-01-08 18:40:09.811+08 2018-01-08 18:40:09.811+08 29aa5799-e271-4913-8e21-04edddaa5be1 5 t f
+2068 protocolcode 协议号 Constant \N 1401 0 2018-03-08 20:19:30.73+08 2018-03-14 16:22:56.322+08 13ee1f91-04cc-48af-820e-ffc0ed179b6c 1 t f
+2135 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-03-19 17:04:12.474+08 2018-03-19 17:04:12.474+08 e8ccf6dc-5626-4bb7-9f88-9bf8972619b4 5 t f
+2136 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-03-19 17:04:37.041+08 2018-03-19 17:04:37.041+08 6c0d843c-169e-49b8-8dde-188699cc3077 5 t f
+2137 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-03-19 17:05:09.504+08 2018-03-19 17:05:09.504+08 d8860bee-374c-497a-a33a-258af59e3690 5 t f
+1215 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 16:50:30.027+08 2018-01-05 16:50:30.027+08 d55af283-4d11-4eb7-8099-890d98bfcc0c 1 t f
+1216 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 16:50:30.03+08 2018-01-05 16:50:30.03+08 d55af283-4d11-4eb7-8099-890d98bfcc0c 5 t f
+2139 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-03-19 17:06:30.172+08 2018-03-19 17:06:30.172+08 e58ee78a-e499-483c-acc8-a42683d62149 5 t f
+1399 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 14:52:14.741+08 2018-01-08 14:52:14.741+08 e7a84149-53b0-4ba3-88e7-fe7e0e0f21d4 5 t f
+1400 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 14:56:03.581+08 2018-01-08 14:56:03.581+08 7c4c667b-dbf0-4c9b-9d7d-7ad9b61b200e 5 t f
+1869 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-23 17:19:51.386+08 2018-01-23 17:19:51.386+08 ddf17ba9-fcef-4ef4-97f0-c09e0503dfa3 5 t f
+1422 range 量程 Constant \N (0,30) 0 mm 2018-01-08 16:02:01.681+08 2018-01-08 16:26:00.38+08 e7a84149-53b0-4ba3-88e7-fe7e0e0f21d4 5 t f
+1502 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 18:00:05.72+08 2018-01-08 18:00:05.72+08 930f1b29-d056-40a8-9b86-62829634874c 5 t f
+2157 channelId 通道号 Variable \N \N 1 \N 128 1 2018-03-22 09:59:03.724+08 2018-03-22 09:59:03.724+08 e8ccf6dc-5626-4bb7-9f88-9bf8972619b4 1 t f
+1824 moduleId 模块号 Variable \N 1 0 \N 2018-01-23 15:00:11.889+08 2018-03-26 15:52:48.129+08 cb4eb310-0876-492a-9e06-8cd0a5542c5b 5 t f
+1572 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-09 10:59:07.1+08 2018-01-09 10:59:07.1+08 29aa5799-e271-4913-8e21-04edddaa5be1 1 t f
+1620 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-11 11:13:31.335+08 2018-01-11 11:13:31.335+08 d53887ba-c67a-4b45-a1ed-1a61fbde6c4c 5 t f
+1711 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-23 14:02:27.127+08 2018-01-23 14:02:27.127+08 85ba72e3-3754-4b11-a144-757d7a01f1dc 5 t f
+2422 moduleId 模块号 Variable \N \N 1 \N \N \N 2018-04-11 16:24:01.273+08 2018-04-11 16:24:01.273+08 6e1d3878-3ea2-4c73-9137-0ef98781be0c 5 t f
+2470 是否正常 是否正常 Variable \N \N true \N \N \N 2018-05-11 15:45:31.148+08 2018-05-11 15:45:31.148+08 efdb6604-3283-41b2-9a30-aa532a49d897 3 t f
+1825 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-23 15:00:11.892+08 2018-01-23 15:00:11.892+08 cb4eb310-0876-492a-9e06-8cd0a5542c5b 1 t f
+1826 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-23 15:00:11.894+08 2018-01-23 15:00:11.894+08 cb4eb310-0876-492a-9e06-8cd0a5542c5b 5 t f
+2469 温度 温度 Variable \N \N 2 50 0 ℃ 2018-05-11 15:45:31.143+08 2018-05-18 14:25:26.601+08 efdb6604-3283-41b2-9a30-aa532a49d897 2 t f
+2504 12222 \N Tag \N \N \N \N \N \N \N 2018-07-06 17:14:37.681+08 2018-07-06 17:14:37.681+08 e442b9a5-066f-4cde-b5f3-9709a193c328 \N t f
+1895 devicetype 设备类型 Constant \N sensor 0 2018-01-24 11:19:02.117+08 2018-08-01 09:19:49.891+08 75c932d0-2df0-4628-81dd-0e9c1f11ff60 5 t f
+1847 range 量程 Constant \N (0,0.4) 0 MPa 2018-01-23 15:00:12.746+08 2018-01-23 15:00:47.515+08 91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 5 t f
+1829 range 量程 Constant \N (0,0.8) 0 MPa 2018-01-23 15:00:11.9+08 2018-01-23 15:01:54.46+08 cb4eb310-0876-492a-9e06-8cd0a5542c5b 5 t f
+1859 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-23 15:06:34.968+08 2018-01-23 15:06:34.968+08 eee64353-8241-4a69-a2ed-5e42bbf4450c 5 t f
+2567 sensortype 传感器类型 Constant \N gdgs 0 \N 2018-08-16 16:25:36.797+08 2018-08-16 16:26:26.886+08 7bd233a3-8bb9-45d7-8298-278d0288de46 5 t f
+2569 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-08-24 09:09:28.374+08 2018-08-24 09:09:28.374+08 bbcd2556-3714-4360-80d1-af1f8be94404 5 t f
+1862 range 量程 Constant \N (-1500,1500) 0 \N \N με 2018-01-23 15:06:34.976+08 2018-01-23 15:06:34.976+08 eee64353-8241-4a69-a2ed-5e42bbf4450c 5 t f
+2595 test sdf Variable \N \N true \N \N \N w wasd撒旦法沙发 2018-09-12 13:56:08.4+08 2018-09-12 13:56:08.4+08 681c7dfc-f592-4339-a323-7a0ef757fd22 3 t f
+2844 devicetype 设备类型 Constant \N sensor 0 \N \N 2019-02-25 15:41:07.37+08 2019-02-25 15:41:07.37+08 c169f72a-deae-4135-84ee-62d771722507 5 t f
+1870 moduleId 模块号 Variable \N \N 0 \N \N \N \N 2018-01-24 11:05:24.824+08 2018-01-24 11:05:24.824+08 38b81b7d-bb3e-4885-aaea-6035faf20d1b 5 t f
+1871 range 量程 Constant \N \N (0.5,80) \N \N \N mm 2018-01-24 11:05:24.828+08 2018-01-24 11:05:24.828+08 38b81b7d-bb3e-4885-aaea-6035faf20d1b 5 t f
+2845 range 量程 Constant \N (-5000,5000) 0 \N \N με 2019-02-25 15:41:07.373+08 2019-02-25 15:41:07.373+08 c169f72a-deae-4135-84ee-62d771722507 5 t f
+1894 range 量程 Constant \N (0,2) 0 \N \N MPa 2018-01-24 11:19:02.115+08 2018-01-24 11:19:02.115+08 75c932d0-2df0-4628-81dd-0e9c1f11ff60 5 t f
+2846 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2019-02-25 15:41:07.376+08 2019-02-25 15:41:07.376+08 c169f72a-deae-4135-84ee-62d771722507 1 t f
+2847 sensortype 传感器类型 Constant \N zx 0 \N \N \N 2019-02-25 15:41:07.379+08 2019-02-25 15:41:07.379+08 c169f72a-deae-4135-84ee-62d771722507 5 t f
+2912 num 参数编号 Variable \N PM2.5系数A,PM2.5系数B,PM10系数A,PM10系数B,噪声系数A,噪声系数B,温度系数B,湿度系数B,风速系数B,联动阈值,控制回差 PM2.5系数A 0 \N 2019-03-07 15:13:39.237+08 2019-03-12 11:32:08.858+08 a820a6a6-2302-4291-bf8a-e6beb3e7f663 4 f f
+2931 sensortype 传感器类型 Constant \N wd 0 \N 2019-03-25 11:18:25.753+08 2019-03-25 11:24:28.062+08 2cea756f-0ed5-406d-88a5-b2c3b6ad9b6d 5 t f
+2996 gps_post 读取记录前延迟-GPS Variable \N 35 0 600 0 百毫秒 2019-03-28 10:29:33.625+08 2019-04-02 09:57:16.724+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 1 t f
+1227 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 08:03:31.863+08 2018-01-08 08:03:31.863+08 684a2261-481c-4504-9f4b-665baf97aae6 5 t f
+1228 channelId 通道号 Variable \N \N 1 \N 255 1 2018-01-08 08:03:31.867+08 2018-01-08 08:03:31.867+08 684a2261-481c-4504-9f4b-665baf97aae6 1 t f
+2170 sensortype 传感器类型 Constant \N gxgs 0 \N 2018-03-23 16:23:44.757+08 2018-04-02 09:34:32.555+08 12a0ae21-df74-42b4-94ce-492125b941bd 5 t f
+2138 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-03-19 17:05:43.983+08 2018-03-19 17:05:43.983+08 10f69514-4a4b-4ecd-a318-f8bf0c81a965 5 t f
+2160 sensortype 传感器类型 Constant \N yc 0 \N 2018-03-23 13:42:40.25+08 2018-04-09 15:10:10.428+08 2e2456a6-9738-456c-abf1-94d5ebad124a 5 t f
+2165 sensortype 传感器类型 Variable \N yc 0 2018-03-23 15:38:53.467+08 2018-04-09 15:11:14.611+08 0f4f59de-cde7-4aec-a402-703e5426bb76 5 t f
+2167 protocolcode 协议号 Constant \N 9002 0 2018-03-23 16:00:39.462+08 2018-04-09 15:11:47.464+08 cef1d2a2-c44e-4143-84bd-2a65140e33d0 5 t f
+2168 protocolcode 协议号 Constant \N 9002 0 \N 2018-03-23 16:02:05.076+08 2018-04-09 15:12:11.208+08 9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8 5 t f
+2169 sensortype 传感器类型 Constant \N yc 0 2018-03-23 16:02:23.195+08 2018-04-09 15:12:16.573+08 9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8 5 t f
+2423 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2018-04-16 11:54:59.779+08 2018-04-16 11:54:59.779+08 84deac79-cd1d-4320-bcc6-3a0cdd4451da 5 t f
+2424 sensortype 传感器类型 Constant \N \N zx \N \N \N 2018-04-16 11:54:59.787+08 2018-04-16 11:54:59.787+08 84deac79-cd1d-4320-bcc6-3a0cdd4451da 5 t f
+2425 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-04-16 11:54:59.791+08 2018-04-16 11:54:59.791+08 84deac79-cd1d-4320-bcc6-3a0cdd4451da 5 t f
+2426 range 量程 Constant \N \N (-1000,1000) \N \N \N 2018-04-16 11:54:59.795+08 2018-04-16 11:54:59.795+08 84deac79-cd1d-4320-bcc6-3a0cdd4451da 5 t f
+2471 devicetype 设备类型 Constant \N \N sensor \N \N \N \N 2018-05-16 17:44:54.921+08 2018-05-16 17:44:54.921+08 bff19d80-ce20-4c3d-b158-df091a1fb5ac 5 t f
+2472 sensortype 传感器类型 Constant \N \N lf \N \N \N 2018-05-16 17:44:54.924+08 2018-05-16 17:44:54.924+08 bff19d80-ce20-4c3d-b158-df091a1fb5ac 5 t f
+2473 protocolcode 协议号 Constant \N \N 9102 \N \N \N 2018-05-16 17:44:54.927+08 2018-05-16 17:44:54.927+08 bff19d80-ce20-4c3d-b158-df091a1fb5ac 5 t f
+2579 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-08-24 16:11:23.741+08 2018-08-24 16:11:23.741+08 209249f3-7316-4e7d-a3bf-df78afc260eb 5 t f
+2474 range 量程 Constant \N (-50,50) 0 mm 2018-05-16 17:44:54.929+08 2018-05-16 17:51:49.898+08 bff19d80-ce20-4c3d-b158-df091a1fb5ac 5 t f
+713 model 型号 Constant \N GT-MCU4-MI600T 0 2018-01-04 15:33:35.135+08 2018-06-07 10:22:38.24+08 fb1119c8-c430-4066-9f02-60a558d92a68 5 t f
+2505 1 1 Variable \N \N 1 \N 1 1 \N 2018-07-10 14:47:24.853+08 2018-07-10 14:47:24.853+08 94540a5f-cb58-4a32-a605-05002a4391ed 1 t f
+2573 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-08-24 15:55:17.003+08 2018-08-24 15:55:17.003+08 a5766cb2-27a1-4d0a-939b-ac6aa0871a81 5 t f
+2982 aqi_p4 系数-SO2 Variable \N 1 16 9999 -9999 2019-03-27 20:41:21.377+08 2019-04-08 13:52:56.889+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 2 t t
+2976 pm10_p2 系数-PM10 Variable \N 1 16 9999 -9999 2019-03-27 20:16:54.573+08 2019-04-08 13:52:54.167+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 2 t t
+2576 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-08-24 16:11:23.016+08 2018-08-24 16:11:23.016+08 6de7929d-736b-4c4e-a1c3-e7550a7b6d31 5 t f
+2596 sensorID 传感器编号 Variable \N \N \N \N \N \N 2018-09-13 17:17:20.67+08 2018-09-13 17:17:20.67+08 a1d2070f-926a-42a1-8bf8-a39b89eb4c92 5 t f
+1406 moduleId 模块号 Variable \N 1 0 \N \N \N 2018-01-08 15:10:26.573+08 2018-01-08 15:10:26.573+08 f5f27d3f-b8fd-44ee-97e2-8a78748a424f 5 t f
+1407 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-08 15:10:26.576+08 2018-01-08 15:10:26.576+08 f5f27d3f-b8fd-44ee-97e2-8a78748a424f 5 t f
+723 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 10:51:34.774+08 2018-01-05 10:51:34.774+08 d77b7e20-7877-47dc-aef4-37a663bac660 1 t f
+1408 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-08 15:10:26.583+08 2018-01-08 15:10:26.583+08 f5f27d3f-b8fd-44ee-97e2-8a78748a424f 1 t f
+727 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 11:06:57.961+08 2018-01-05 11:06:57.961+08 ba349741-3d03-49c6-a2cf-9e2156fd36c4 5 t f
+728 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 11:06:57.963+08 2018-01-05 11:06:57.963+08 ba349741-3d03-49c6-a2cf-9e2156fd36c4 1 t f
+729 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 11:06:58.699+08 2018-01-05 11:06:58.699+08 30da8546-87f0-4a5c-bd4f-f9919c954c82 5 t f
+730 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 11:06:58.706+08 2018-01-05 11:06:58.706+08 30da8546-87f0-4a5c-bd4f-f9919c954c82 1 t f
+731 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 11:06:58.823+08 2018-01-05 11:06:58.823+08 17c35362-c638-46de-bea3-840893daf864 5 t f
+732 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 11:06:58.826+08 2018-01-05 11:06:58.826+08 17c35362-c638-46de-bea3-840893daf864 1 t f
+733 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 11:07:00.034+08 2018-01-05 11:07:00.034+08 d14c6b02-4298-4713-b970-eba0aafee88b 5 t f
+734 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 11:07:00.036+08 2018-01-05 11:07:00.036+08 d14c6b02-4298-4713-b970-eba0aafee88b 1 t f
+735 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 11:07:00.157+08 2018-01-05 11:07:00.157+08 feb1fe0d-208d-41cf-9533-596f78fa835c 5 t f
+736 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 11:07:00.159+08 2018-01-05 11:07:00.159+08 feb1fe0d-208d-41cf-9533-596f78fa835c 1 t f
+724 moduleId 模块号 Variable \N 0 0 \N 2018-01-05 10:51:34.777+08 2018-01-05 13:20:58.09+08 d77b7e20-7877-47dc-aef4-37a663bac660 5 t f
+2599 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-09-25 10:58:51.087+08 2018-09-25 10:58:51.087+08 19bb2b93-6e2e-4861-95df-67a68bc71fc4 5 t f
+2600 protocolcode 协议号 Constant \N \N 9112 \N \N \N 2018-09-25 10:58:51.089+08 2018-09-25 10:58:51.089+08 19bb2b93-6e2e-4861-95df-67a68bc71fc4 5 t f
+2601 range 量程 Constant \N (0,50) 0 mm 2018-09-25 10:58:51.091+08 2018-09-25 10:59:02.632+08 19bb2b93-6e2e-4861-95df-67a68bc71fc4 5 t f
+2598 sensortype 传感器类型 Constant \N lf 0 \N 2018-09-25 10:58:51.084+08 2018-09-25 11:00:44.832+08 19bb2b93-6e2e-4861-95df-67a68bc71fc4 5 t f
+2848 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 15:41:59.844+08 2019-02-25 15:41:59.844+08 9bcce139-4a57-4c96-ba1f-914569011b77 5 t f
+2849 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 15:41:59.847+08 2019-02-25 15:41:59.847+08 9bcce139-4a57-4c96-ba1f-914569011b77 1 t f
+2850 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 15:41:59.851+08 2019-02-25 15:41:59.851+08 9bcce139-4a57-4c96-ba1f-914569011b77 5 t f
+2851 range 量程 Constant \N (0,0.8) 0 \N \N MPa 2019-02-25 15:41:59.854+08 2019-02-25 15:41:59.854+08 9bcce139-4a57-4c96-ba1f-914569011b77 5 t f
+2852 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 15:41:59.857+08 2019-02-25 15:41:59.857+08 9bcce139-4a57-4c96-ba1f-914569011b77 5 t f
+2853 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 15:41:59.86+08 2019-02-25 15:41:59.86+08 9bcce139-4a57-4c96-ba1f-914569011b77 1 t f
+2928 id 设备编号 Constant \N \N xxxx89788978 \N \N \N \N 2019-03-19 10:11:54.301+08 2019-03-19 10:11:54.301+08 f2d1cabf-7888-4be1-9357-bf5052e5772c 5 t f
+2929 temptur 温度 Variable \N \N 36 2 69 10 ° 2019-03-19 10:11:54.305+08 2019-03-19 10:11:54.305+08 f2d1cabf-7888-4be1-9357-bf5052e5772c 2 t f
+2932 sensortype 传感器类型 Constant \N \N yb \N \N \N \N 2019-03-25 11:24:21.026+08 2019-03-25 11:24:21.026+08 3feb218e-5b82-496a-9f57-71be58552c0d 5 t f
+737 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 11:07:00.29+08 2018-01-05 11:07:00.29+08 35d1f34b-ccac-4110-9bb6-7e0a3327ef18 5 t f
+738 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 11:07:00.293+08 2018-01-05 11:07:00.293+08 35d1f34b-ccac-4110-9bb6-7e0a3327ef18 1 t f
+739 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 11:07:01.147+08 2018-01-05 11:07:01.147+08 0530f690-1f3c-430e-97c7-6dc82f96fd47 5 t f
+740 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 11:07:01.15+08 2018-01-05 11:07:01.15+08 0530f690-1f3c-430e-97c7-6dc82f96fd47 1 t f
+1229 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-08 08:17:08.61+08 2018-01-08 08:17:08.61+08 223ac440-c7b0-4005-8144-f33ce926d9bf 1 t f
+1230 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-08 08:17:08.613+08 2018-01-08 08:17:08.613+08 223ac440-c7b0-4005-8144-f33ce926d9bf 5 t f
+747 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 11:07:03.22+08 2018-01-05 11:07:03.22+08 27f99320-b0dc-4b93-bc24-f5ccf9337356 5 t f
+748 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 11:07:03.224+08 2018-01-05 11:07:03.224+08 27f99320-b0dc-4b93-bc24-f5ccf9337356 1 t f
+751 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 11:07:04.229+08 2018-01-05 11:07:04.229+08 b750e865-af38-40e9-a478-16fefb4cb618 5 t f
+752 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 11:07:04.232+08 2018-01-05 11:07:04.232+08 b750e865-af38-40e9-a478-16fefb4cb618 1 t f
+2162 sensortype 传感器类型 Constant \N gxgs 0 \N 2018-03-23 15:10:22.119+08 2018-04-02 09:34:41.529+08 61f09dd0-ba56-40e4-a2d1-45dab1143900 5 t f
+2161 protocolcode 协议号 Constant \N 9002 0 2018-03-23 13:43:55.46+08 2018-04-09 15:10:04.786+08 2e2456a6-9738-456c-abf1-94d5ebad124a 5 t f
+2077 a \N Variable \N \N 0 \N 10 0 \N 2018-03-12 17:55:34.554+08 2018-03-12 17:55:34.554+08 ae356f39-ab83-4ac9-b847-31391780a6c5 1 t f
+759 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 11:47:57.151+08 2018-01-05 11:47:57.151+08 2574b00e-2491-471c-925a-5b713afa9561 5 t f
+1231 moduleId 模块号 Variable \N 1 0 \N \N \N 2018-01-08 08:17:08.616+08 2018-01-08 08:17:08.616+08 223ac440-c7b0-4005-8144-f33ce926d9bf 5 t f
+2166 sensortype 传感器类型 Constant \N yc 0 \N 2018-03-23 16:00:09.565+08 2018-04-09 15:11:41.754+08 cef1d2a2-c44e-4143-84bd-2a65140e33d0 5 t f
+765 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-05 11:50:22.348+08 2018-01-05 11:50:22.348+08 5f4e4e99-20b3-4bf7-95cb-a2f507595b2d 5 t f
+2427 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2018-04-16 14:07:58.063+08 2018-04-16 14:07:58.063+08 6c650368-cf3e-4a75-a30d-01b2a37356fb 5 t f
+771 range 量程 Constant \N (-3000,3000) 0 με 2018-01-05 11:50:22.364+08 2018-01-05 14:10:09.845+08 5f4e4e99-20b3-4bf7-95cb-a2f507595b2d 5 t f
+2429 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-04-16 14:07:58.072+08 2018-04-16 14:07:58.072+08 6c650368-cf3e-4a75-a30d-01b2a37356fb 5 t f
+2430 sensortype 传感器类型 Constant \N \N zx \N \N \N 2018-04-16 14:07:58.074+08 2018-04-16 14:07:58.074+08 6c650368-cf3e-4a75-a30d-01b2a37356fb 5 t f
+2443 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2018-04-16 16:00:53.323+08 2018-04-16 16:00:53.323+08 7674c64d-e09e-4257-8726-c64a26ed309a 5 t f
+2445 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-04-16 16:00:53.336+08 2018-04-16 16:00:53.336+08 7674c64d-e09e-4257-8726-c64a26ed309a 5 t f
+1249 moduleId 模块号 Variable \N 1 0 \N \N \N 2018-01-08 08:30:38.822+08 2018-01-08 08:30:38.822+08 8e812d09-7b95-4c07-ad74-d4c66104e7a7 5 t f
+1250 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-08 08:30:38.824+08 2018-01-08 08:30:38.824+08 8e812d09-7b95-4c07-ad74-d4c66104e7a7 5 t f
+1251 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-08 08:30:38.826+08 2018-01-08 08:30:38.826+08 8e812d09-7b95-4c07-ad74-d4c66104e7a7 1 t f
+2446 sensortype 传感器类型 Constant \N \N zx \N \N \N 2018-04-16 16:00:53.339+08 2018-04-16 16:00:53.339+08 7674c64d-e09e-4257-8726-c64a26ed309a 5 t f
+1409 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 15:12:21.625+08 2018-01-08 15:12:21.625+08 0e1586ef-cbec-4dc3-8ff4-af3e4c7c8d2e 5 t f
+1419 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 15:32:40.779+08 2018-01-08 15:32:40.779+08 2fd2ebfb-7858-40db-91a8-d933269ccf64 5 t f
+2171 sensortype 传感器 Constant \N \N zd \N \N \N \N 2018-03-23 16:27:39.185+08 2018-03-23 16:27:39.185+08 c8fd3080-b416-4381-8bcc-e84c12471281 5 t f
+1809 moduleId 模块号 Variable \N 1 0 \N 2018-01-23 14:57:48.829+08 2018-03-26 15:45:27.822+08 37c046eb-9a0e-49b0-95fb-f0128338f381 5 t f
+2582 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-08-24 16:11:25.609+08 2018-08-24 16:11:25.609+08 b0493f78-0950-47ac-bf5f-27797da84f44 5 t f
+1573 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-09 11:10:39.811+08 2018-01-09 11:10:39.811+08 5c1ff344-5845-4376-8ea0-1ac8d45d9f3c 1 t f
+1575 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-09 11:10:39.822+08 2018-01-09 11:10:39.822+08 5c1ff344-5845-4376-8ea0-1ac8d45d9f3c 5 t f
+2444 range 量程 Constant \N (-100,100) 0 kN 2018-04-16 16:00:53.326+08 2018-04-16 17:49:33.305+08 7674c64d-e09e-4257-8726-c64a26ed309a 5 t f
+2428 range 量程 Constant \N (-50,50) 0 kN 2018-04-16 14:07:58.066+08 2018-04-16 17:49:55.733+08 6c650368-cf3e-4a75-a30d-01b2a37356fb 5 t f
+2475 tst \N Variable \N \N \N \N 2 1 \N 2018-05-17 10:26:47.74+08 2018-05-17 10:26:47.74+08 e5c11c48-0e03-4229-b879-a487b7cda972 1 t f
+2602 uploadprocess 配置上传后处理 Variable \N restart,stop,start restart \N \N \N \N 2018-09-25 15:45:24.017+08 2018-09-25 15:45:24.017+08 d929c576-62dd-4f0c-a2cc-15120347b903 4 t f
+1574 range 量程 Constant \N (0,100) 0 %RH 2018-01-09 11:10:39.817+08 2018-01-09 11:14:19.053+08 5c1ff344-5845-4376-8ea0-1ac8d45d9f3c 5 t f
+1621 123 123 Variable \N \N 111111 \N \N \N \N 2018-01-11 15:19:04.812+08 2018-01-11 15:19:04.812+08 7d457a8b-5537-4186-bd68-df0c5868ef7e 5 t f
+1713 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-23 14:10:45.523+08 2018-01-23 14:10:45.523+08 931fef11-654a-4f36-bf37-dbc168c46e84 5 t f
+2603 triggermode 触发方式 Variable \N 软件触发,模拟硬件触发,数字硬件触发,硬件模拟数字触发 软件触发 \N \N \N 2018-09-25 15:45:24.02+08 2018-09-25 15:45:24.02+08 d929c576-62dd-4f0c-a2cc-15120347b903 4 t f
+2605 devicermode 设备工作模式 Variable \N 从设备异步,主设备异步,主设备同步 主设备异步 \N \N \N 2018-09-25 15:45:24.025+08 2018-09-25 15:45:24.025+08 d929c576-62dd-4f0c-a2cc-15120347b903 4 t f
+1807 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-23 14:57:48.825+08 2018-01-23 14:57:48.825+08 37c046eb-9a0e-49b0-95fb-f0128338f381 5 t f
+1808 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-23 14:57:48.827+08 2018-01-23 14:57:48.827+08 37c046eb-9a0e-49b0-95fb-f0128338f381 1 t f
+2606 hour 间隔触发启动时间小时 Variable \N 0 23 0 2018-09-25 15:45:24.028+08 2018-09-25 15:54:27.662+08 d929c576-62dd-4f0c-a2cc-15120347b903 1 f f
+2608 second 间隔触发启动时间秒 Variable \N 0 59 0 2018-09-25 15:45:24.032+08 2018-09-25 15:55:12.366+08 d929c576-62dd-4f0c-a2cc-15120347b903 1 f f
+2172 sensortype 传感器类型 Constant \N wsd 0 \N 2018-03-23 17:01:20.745+08 2018-04-09 15:12:46.617+08 5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed 5 t f
+2174 protocolcode 协议号 Constant \N 1102 0 \N 2018-03-23 17:06:29.705+08 2018-04-09 15:13:23.317+08 bc476c11-0887-40fb-ae9e-06ab514a44c0 5 t f
+2431 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2018-04-16 15:46:07.764+08 2018-04-16 15:46:07.764+08 df68d6a9-c963-4bc4-a122-332e3d1435ac 5 t f
+2432 sensortype 传感器类型 Constant \N \N zx \N \N \N 2018-04-16 15:46:07.767+08 2018-04-16 15:46:07.767+08 df68d6a9-c963-4bc4-a122-332e3d1435ac 5 t f
+749 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 11:07:03.721+08 2018-01-05 11:07:03.721+08 ecfacbbe-037c-42cb-89ce-68a2e6170758 5 t f
+750 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 11:07:03.734+08 2018-01-05 11:07:03.734+08 ecfacbbe-037c-42cb-89ce-68a2e6170758 1 t f
+2433 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-04-16 15:46:07.77+08 2018-04-16 15:46:07.77+08 df68d6a9-c963-4bc4-a122-332e3d1435ac 5 t f
+2435 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2018-04-16 15:46:07.919+08 2018-04-16 15:46:07.919+08 c60cc02d-8c37-447a-9f9d-947aa66b7f39 5 t f
+2436 sensortype 传感器类型 Constant \N \N zx \N \N \N 2018-04-16 15:46:07.922+08 2018-04-16 15:46:07.922+08 c60cc02d-8c37-447a-9f9d-947aa66b7f39 5 t f
+2437 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-04-16 15:46:07.925+08 2018-04-16 15:46:07.925+08 c60cc02d-8c37-447a-9f9d-947aa66b7f39 5 t f
+2439 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2018-04-16 15:46:12.413+08 2018-04-16 15:46:12.413+08 20ff998d-3014-4f62-ad12-37b56883c435 5 t f
+2144 K1 K1一次项系数 Variable \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N 2018-03-20 15:08:46.97+08 2018-03-20 15:31:35.267+08 874e1ee5-94fe-49aa-94b0-6d6bfef680bc 2 t f
+2163 sensortype 传感器类型 Constant \N \N gnss \N \N \N \N 2018-03-23 15:13:56.444+08 2018-03-23 15:13:56.444+08 526c42ea-d9a9-48d1-9862-b3118a7ef211 5 t f
+774 devicetype 设备类型 Constant \N sensor 0 2018-01-05 11:50:25.17+08 2018-03-26 11:27:37.936+08 b6095ab3-88ff-4a71-8f42-f0656b301e1e 5 t f
+2440 sensortype 传感器类型 Constant \N \N zx \N \N \N 2018-04-16 15:46:12.415+08 2018-04-16 15:46:12.415+08 20ff998d-3014-4f62-ad12-37b56883c435 5 t f
+1281 moduleId 模块号 Variable \N 1 0 \N \N \N 2018-01-08 08:30:41.418+08 2018-01-08 08:30:41.418+08 f90de97b-b6e8-417a-b628-7b8e4bb9e335 5 t f
+2441 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-04-16 15:46:12.418+08 2018-04-16 15:46:12.418+08 20ff998d-3014-4f62-ad12-37b56883c435 5 t f
+1282 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-08 08:30:41.42+08 2018-01-08 08:30:41.42+08 f90de97b-b6e8-417a-b628-7b8e4bb9e335 5 t f
+2615 startiming5 定时触发启动时间5 Variable \N 0 2018-09-25 15:45:24.046+08 2018-09-25 15:53:00.947+08 d929c576-62dd-4f0c-a2cc-15120347b903 5 f f
+2434 range 量程 Constant \N (-2000,2000) 0 2018-04-16 15:46:07.772+08 2018-04-16 15:47:04.674+08 df68d6a9-c963-4bc4-a122-332e3d1435ac 5 t f
+2438 range 量程 Constant \N (-3000,3000) 0 2018-04-16 15:46:07.927+08 2018-04-16 15:49:15.194+08 c60cc02d-8c37-447a-9f9d-947aa66b7f39 5 t f
+788 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-05 12:01:35.853+08 2018-01-05 12:01:35.853+08 cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3 5 t f
+2614 startiming4 定时触发启动时间4 Variable \N 0 2018-09-25 15:45:24.044+08 2018-09-25 15:53:04.329+08 d929c576-62dd-4f0c-a2cc-15120347b903 5 f f
+2442 range 量程 Constant \N (-4000,4000) 0 2018-04-16 15:46:12.42+08 2018-04-16 15:51:27.354+08 20ff998d-3014-4f62-ad12-37b56883c435 5 t f
+2476 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-05-17 13:55:17.809+08 2018-05-17 13:55:17.809+08 83881bee-4e8c-4ad6-a11f-45810d035b3d 5 t f
+2477 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-05-17 14:43:40.158+08 2018-05-17 14:43:40.158+08 82db02f1-7f86-44cf-b9a4-d32e28672a84 5 t f
+794 range 量程 Constant \N (-1500,1500) 0 \N \N με 2018-01-05 12:01:35.869+08 2018-01-05 12:01:35.869+08 cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3 5 t f
+2584 wakeupdelay 唤醒延时 Variable \N \N 1 \N 65535 1 s 2018-08-28 17:55:20.437+08 2018-08-28 17:55:20.437+08 c631f2ea-9e5c-415a-b56e-9d96c600e527 1 t f
+2585 interval 采集间隔 Variable \N \N 5 \N 65535 1 分 2018-08-28 17:55:20.444+08 2018-08-28 17:55:20.444+08 c631f2ea-9e5c-415a-b56e-9d96c600e527 1 t f
+2586 node 设备ID Variable \N \N 1 \N 65535 1 \N 2018-08-28 18:06:12.461+08 2018-08-28 18:06:12.461+08 9aa93498-820e-4fc6-a288-5b2274fb9246 1 t f
+2507 sensortype 传感器类型 Constant \N zd 0 \N 2018-07-18 09:51:58.272+08 2018-09-14 14:28:09.328+08 e32efbee-3c36-4be6-a4d3-d5058acf1fda 5 t f
+2613 startiming3 定时触发启动时间3 Variable \N 0 2018-09-25 15:45:24.042+08 2018-09-25 15:53:07.966+08 d929c576-62dd-4f0c-a2cc-15120347b903 5 f f
+810 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-05 14:02:09.835+08 2018-01-05 14:02:09.835+08 11f0a3dc-13ad-4c40-ae16-1b2f1d139564 5 t f
+2612 startiming2 定时触发启动时间2 Variable \N 0 2018-09-25 15:45:24.04+08 2018-09-25 15:53:11.994+08 d929c576-62dd-4f0c-a2cc-15120347b903 5 f f
+2611 startiming1 定时触发启动时间1 Variable \N 0 2018-09-25 15:45:24.038+08 2018-09-25 15:53:15.213+08 d929c576-62dd-4f0c-a2cc-15120347b903 5 f f
+2609 acqtimeint 间隔触发采样时长 Variable \N 0 50 1 s 2018-09-25 15:45:24.034+08 2018-09-25 15:55:03.125+08 d929c576-62dd-4f0c-a2cc-15120347b903 1 f f
+2079 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-13 23:09:59.915+08 2018-03-13 23:09:59.915+08 384f80e3-ad51-400e-b0aa-8a3885961cec 5 t f
+2080 channelId 通道号 Variable \N \N 1 \N 128 1 2018-03-13 23:09:59.92+08 2018-03-13 23:09:59.92+08 384f80e3-ad51-400e-b0aa-8a3885961cec 1 t f
+819 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-05 14:02:10.858+08 2018-01-05 14:02:10.858+08 13ee1f91-04cc-48af-820e-ffc0ed179b6c 5 t f
+822 range 量程 Constant \N (-5000,5000) 0 με 2018-01-05 14:02:10.864+08 2018-01-05 14:06:50.902+08 13ee1f91-04cc-48af-820e-ffc0ed179b6c 5 t f
+813 range 量程 Constant \N (-3000,3000) 0 με 2018-01-05 14:02:09.841+08 2018-01-05 14:07:11.011+08 11f0a3dc-13ad-4c40-ae16-1b2f1d139564 5 t f
+2164 protocolcode 协议号 Constant \N 9002 0 \N 2018-03-23 15:38:05.596+08 2018-04-09 15:11:08.851+08 0f4f59de-cde7-4aec-a402-703e5426bb76 5 t f
+2145 K2 K2二次项系数 Variable \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 2018-03-20 15:09:15.121+08 2018-03-20 15:31:28.135+08 874e1ee5-94fe-49aa-94b0-6d6bfef680bc 2 t f
+2147 Fo Fo基准读数 Variable \N 0 3 99999999999999999999999999999999 -99999999999999999999999999999999 2018-03-20 15:10:20.238+08 2018-03-22 13:52:22.16+08 874e1ee5-94fe-49aa-94b0-6d6bfef680bc 2 t f
+2173 protocolcode 协议号 Constant \N 1102 0 2018-03-23 17:01:55.532+08 2018-04-09 15:12:40.911+08 5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed 5 t f
+2447 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2018-04-16 16:00:54.811+08 2018-04-16 16:00:54.811+08 4a7b8b8f-6ba0-4731-af44-8f3f6d30a928 5 t f
+2449 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-04-16 16:00:54.816+08 2018-04-16 16:00:54.816+08 4a7b8b8f-6ba0-4731-af44-8f3f6d30a928 5 t f
+2450 sensortype 传感器类型 Constant \N \N zx \N \N \N 2018-04-16 16:00:54.818+08 2018-04-16 16:00:54.818+08 4a7b8b8f-6ba0-4731-af44-8f3f6d30a928 5 t f
+1241 moduleId 模块号 Variable \N 1 0 \N \N \N 2018-01-08 08:30:38.216+08 2018-01-08 08:30:38.216+08 e3713c95-6aa3-4a2e-ad89-579a16cb1a03 5 t f
+1242 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-08 08:30:38.219+08 2018-01-08 08:30:38.219+08 e3713c95-6aa3-4a2e-ad89-579a16cb1a03 5 t f
+1243 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-08 08:30:38.221+08 2018-01-08 08:30:38.221+08 e3713c95-6aa3-4a2e-ad89-579a16cb1a03 1 t f
+2616 startiming6 定时触发启动时间6 Variable \N 0 2018-09-25 15:45:24.048+08 2018-09-25 15:52:57.616+08 d929c576-62dd-4f0c-a2cc-15120347b903 5 f f
+2854 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 15:43:07.054+08 2019-02-25 15:43:07.054+08 9bd34a2c-73d9-4615-af4b-1d61a6fc81bd 5 t f
+2455 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2018-04-16 16:14:51.133+08 2018-04-16 16:14:51.133+08 110a38a6-8cb9-43c5-9682-4b1ba0e9d01f 5 t f
+2456 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-04-16 16:14:51.138+08 2018-04-16 16:14:51.138+08 110a38a6-8cb9-43c5-9682-4b1ba0e9d01f 5 t f
+2457 sensortype 传感器类型 Constant \N \N zx \N \N \N 2018-04-16 16:14:51.146+08 2018-04-16 16:14:51.146+08 110a38a6-8cb9-43c5-9682-4b1ba0e9d01f 5 t f
+1257 moduleId 模块号 Variable \N 1 0 \N \N \N 2018-01-08 08:30:39.713+08 2018-01-08 08:30:39.713+08 3c8c9002-2d60-43f0-9a2c-52daa53cab54 5 t f
+1258 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-08 08:30:39.715+08 2018-01-08 08:30:39.715+08 3c8c9002-2d60-43f0-9a2c-52daa53cab54 5 t f
+1259 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-08 08:30:39.716+08 2018-01-08 08:30:39.716+08 3c8c9002-2d60-43f0-9a2c-52daa53cab54 1 t f
+2855 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 15:43:07.056+08 2019-02-25 15:43:07.056+08 9bd34a2c-73d9-4615-af4b-1d61a6fc81bd 5 t f
+2448 range 量程 Constant \N (-200,200) 0 kN 2018-04-16 16:00:54.813+08 2018-04-16 17:50:05.038+08 4a7b8b8f-6ba0-4731-af44-8f3f6d30a928 5 t f
+2458 range 量程 Constant \N (-400,400) 0 kN 2018-04-16 16:14:51.169+08 2018-04-16 17:50:45.08+08 110a38a6-8cb9-43c5-9682-4b1ba0e9d01f 5 t f
+2478 test 测试 Constant \N \N 25.2 \N \N \N \N 2018-05-18 14:16:07.418+08 2018-05-18 14:16:07.418+08 efdb6604-3283-41b2-9a30-aa532a49d897 2 t f
+1265 moduleId 模块号 Variable \N 1 0 \N \N \N 2018-01-08 08:30:40.3+08 2018-01-08 08:30:40.3+08 5c18688a-731b-40d0-b4dd-4ba002026bb3 5 t f
+1266 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-08 08:30:40.303+08 2018-01-08 08:30:40.303+08 5c18688a-731b-40d0-b4dd-4ba002026bb3 5 t f
+1267 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-08 08:30:40.309+08 2018-01-08 08:30:40.309+08 5c18688a-731b-40d0-b4dd-4ba002026bb3 1 t f
+2856 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 15:43:07.058+08 2019-02-25 15:43:07.058+08 9bd34a2c-73d9-4615-af4b-1d61a6fc81bd 1 t f
+2857 range 量程 Constant \N (0,1) 0 \N \N MPa 2019-02-25 15:43:07.06+08 2019-02-25 15:43:07.06+08 9bd34a2c-73d9-4615-af4b-1d61a6fc81bd 5 t f
+2587 sensortype 传感器类型 Constant \N standard485 0 \N 2018-09-05 09:55:00.367+08 2018-09-05 14:59:39.414+08 5c6b67cd-fe7a-472e-8907-63baa655cb42 5 t f
+1273 moduleId 模块号 Variable \N 1 0 \N \N \N 2018-01-08 08:30:40.883+08 2018-01-08 08:30:40.883+08 9bdf8d5c-e571-4dd4-9614-0099745b0a73 5 t f
+1274 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-08 08:30:40.886+08 2018-01-08 08:30:40.886+08 9bdf8d5c-e571-4dd4-9614-0099745b0a73 5 t f
+1275 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-08 08:30:40.888+08 2018-01-08 08:30:40.888+08 9bdf8d5c-e571-4dd4-9614-0099745b0a73 1 t f
+2858 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 15:43:07.062+08 2019-02-25 15:43:07.062+08 9bd34a2c-73d9-4615-af4b-1d61a6fc81bd 5 t f
+2859 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 15:43:07.064+08 2019-02-25 15:43:07.064+08 9bd34a2c-73d9-4615-af4b-1d61a6fc81bd 1 t f
+2997 gps_pre 执行前延迟-GPS Variable \N 25 0 600 0 百毫秒 2019-03-28 10:30:00.133+08 2019-04-02 09:56:56.569+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 1 t f
+2978 pm100_p1 系数-PM100 Variable \N 1 16 9999 -9999 2019-03-27 20:18:39.017+08 2019-04-08 13:52:51.557+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 2 t t
+2610 acqtiming 定时触发采样时长(s) Variable \N 0 50 1 s 2018-09-25 15:45:24.036+08 2019-08-22 09:44:11.641+08 d929c576-62dd-4f0c-a2cc-15120347b903 1 f f
+2146 K3 K3三次项系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 2018-03-20 15:09:42.681+08 2018-03-20 15:09:42.681+08 874e1ee5-94fe-49aa-94b0-6d6bfef680bc 2 t f
+2175 sensortype 传感器类型 Constant \N wsd 0 2018-03-23 17:06:47.801+08 2018-04-09 15:13:28.028+08 bc476c11-0887-40fb-ae9e-06ab514a44c0 5 t f
+2451 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2018-04-16 16:01:22.172+08 2018-04-16 16:01:22.172+08 4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66 5 t f
+780 range 量程 Constant \N (-5000,5000) 0 με 2018-01-05 11:50:25.191+08 2018-01-05 14:09:31.096+08 b6095ab3-88ff-4a71-8f42-f0656b301e1e 5 t f
+2453 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-04-16 16:01:22.177+08 2018-04-16 16:01:22.177+08 4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66 5 t f
+2454 sensortype 传感器类型 Constant \N \N zx \N \N \N 2018-04-16 16:01:22.179+08 2018-04-16 16:01:22.179+08 4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66 5 t f
+2633 sensortype 设备类型 Constant \N pit 0 \N 2018-10-30 18:29:43.875+08 2018-10-31 08:21:54.561+08 a5dda81c-6a85-4e7b-97f3-be45b980646e 5 t f
+2452 range 量程 Constant \N (-300,300) 0 kN 2018-04-16 16:01:22.175+08 2018-04-16 17:50:23.508+08 4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66 5 t f
+2479 test1 测试 Tag \N \N \N \N \N \N 2018-05-18 14:22:06.832+08 2018-05-18 14:22:06.832+08 efdb6604-3283-41b2-9a30-aa532a49d897 \N t f
+1283 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-08 08:30:41.422+08 2018-01-08 08:30:41.422+08 f90de97b-b6e8-417a-b628-7b8e4bb9e335 1 t f
+2510 sensortype 传感器类型 Constant \N \N zx \N \N \N 2018-07-19 09:35:55.198+08 2018-07-19 09:35:55.198+08 8fcb81d8-34ce-41b8-93c9-69d15060fa40 5 t f
+2511 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-07-19 09:35:55.2+08 2018-07-19 09:35:55.2+08 8fcb81d8-34ce-41b8-93c9-69d15060fa40 5 t f
+2081 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-14 08:03:41.093+08 2018-03-14 08:03:41.093+08 77d8ba09-082d-405d-aeca-9a0d66f902c3 5 t f
+2514 sensortype 传感器类型 Constant \N \N zx \N \N \N 2018-07-19 09:35:56.587+08 2018-07-19 09:35:56.587+08 f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17 5 t f
+2515 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-07-19 09:35:56.589+08 2018-07-19 09:35:56.589+08 f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17 5 t f
+866 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-05 14:50:21.912+08 2018-01-05 14:50:21.912+08 473aee20-7c00-41cd-bd6e-b44c35c758ea 5 t f
+2512 range 量程 Constant \N (-5000,5000) 0 2018-07-19 09:35:55.203+08 2018-07-19 09:49:54.683+08 8fcb81d8-34ce-41b8-93c9-69d15060fa40 5 t f
+868 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-05 14:50:21.918+08 2018-01-05 14:50:21.918+08 473aee20-7c00-41cd-bd6e-b44c35c758ea 1 t f
+2516 range 量程 Constant \N (-6000,6000) 0 2018-07-19 09:35:56.592+08 2018-07-19 09:51:16.302+08 f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17 5 t f
+2588 protocolcode 协议号 Constant \N \N 9002 \N \N \N \N 2018-09-06 11:04:09.938+08 2018-09-06 11:04:09.938+08 75c932d0-2df0-4628-81dd-0e9c1f11ff60 5 t f
+2618 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-09-29 15:46:46.755+08 2018-09-29 15:46:46.755+08 d5df12f1-ea7f-45d0-81a9-79a1fb4e0c90 5 t f
+1289 moduleId 模块号 Variable \N 1 0 \N \N \N 2018-01-08 08:30:41.989+08 2018-01-08 08:30:41.989+08 44c42c98-a486-411a-8813-c6ba48aab00c 5 t f
+1290 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-08 08:30:41.991+08 2018-01-08 08:30:41.991+08 44c42c98-a486-411a-8813-c6ba48aab00c 5 t f
+1291 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-08 08:30:41.993+08 2018-01-08 08:30:41.993+08 44c42c98-a486-411a-8813-c6ba48aab00c 1 t f
+2621 protocolcode 协议号 Constant \N \N 9002 \N \N \N \N 2018-10-10 16:53:47.28+08 2018-10-10 16:53:47.28+08 e5ed186c-f248-4b06-ae1c-8ada54d1c67d 5 t f
+1410 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-08 15:14:58.289+08 2018-01-08 15:14:58.289+08 e2d104b1-9c57-4a16-8d05-07817bc8b785 1 t f
+2625 devicetype 设备类型 Constant \N \N sensor \N \N \N \N 2018-10-12 09:21:28.244+08 2018-10-12 09:21:28.244+08 177e7e33-3dae-4163-8d7d-1778e70b4a8b 5 t f
+1411 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-08 15:14:58.292+08 2018-01-08 15:14:58.292+08 e2d104b1-9c57-4a16-8d05-07817bc8b785 5 t f
+1412 moduleId 模块号 Variable \N 1 0 \N \N \N 2018-01-08 15:14:58.294+08 2018-01-08 15:14:58.294+08 e2d104b1-9c57-4a16-8d05-07817bc8b785 5 t f
+2627 devicetype 设备类型 Constant \N \N sensor \N \N \N \N 2018-10-24 15:43:36.227+08 2018-10-24 15:43:36.227+08 3ad4be85-c6f9-46b8-97dd-39d01e4ef858 5 t f
+1418 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 15:25:13.488+08 2018-01-08 15:25:13.488+08 4866de4e-56ad-435f-a21b-0f2b00011e12 5 t f
+1420 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 15:50:34.81+08 2018-01-08 15:50:34.81+08 72fb9e20-7c7b-4ccb-9da1-d8600223beca 5 t f
+2644 formula 多项式公式 Constant \N \N L=A*△θ^2+B*△θ+C \N \N \N \N 2018-11-17 09:39:56.61+08 2018-11-17 09:39:56.61+08 f12a248f-faab-43f2-bfbe-088da7f471dc 5 t f
+2651 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-11-23 10:32:50.918+08 2018-11-23 10:32:50.918+08 87a47520-e1a3-474c-b8b2-b1fd5dd521a9 5 t f
+2654 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-12-11 14:09:43.576+08 2018-12-11 14:09:43.576+08 0b4f75d6-d921-4913-a9de-cfff3b99d56e 5 t f
+864 moduleId 模块号 Variable \N 1 0 \N 2018-01-05 14:50:21.906+08 2018-03-02 10:35:27.598+08 473aee20-7c00-41cd-bd6e-b44c35c758ea 5 t f
+2673 range 量程 Constant \N (0,360) 0 ° 2018-12-14 11:36:57.535+08 2018-12-14 11:37:39.223+08 6a6797bd-fdda-4b37-bbab-ce377a01521b 5 t f
+2674 sensortype 传感器类型 Constant \N \N qixiangzhan \N \N \N \N 2018-12-21 17:23:02.757+08 2018-12-21 17:23:02.757+08 11c61b7f-9d36-4273-b679-898a09fe21e9 5 t f
+2690 sensorType 设备类型 Constant \N \N YB \N \N \N \N 2019-01-07 16:46:20.095+08 2019-01-07 16:46:20.095+08 e6c538b8-f82a-4e8f-9d47-529a835fc779 5 t f
+2691 sensortype 传感器类型 Constant \N sw 0 \N \N 2019-01-19 17:15:44.553+08 2019-01-19 17:15:44.553+08 0a341896-3c5d-4e60-af19-fe5f645c6967 5 t f
+2693 devicetype 设备类型 Constant \N \N sensor \N \N \N \N 2019-01-19 17:15:44.558+08 2019-01-19 17:15:44.558+08 0a341896-3c5d-4e60-af19-fe5f645c6967 5 t f
+2692 protocolcode 协议号 Constant \N 9005 0 \N 2019-01-19 17:15:44.556+08 2019-01-19 17:16:28.599+08 0a341896-3c5d-4e60-af19-fe5f645c6967 1 t f
+2702 sensortype 传感器类型 Constant \N wd 0 \N 2019-01-25 11:16:58.826+08 2019-01-25 11:17:44.387+08 04425c48-b89c-498d-8372-b3a64d1abf1e 5 t f
+2705 interval 采集间隔 Variable \N \N 5 \N 1400 0 min 2019-02-13 17:25:27.786+08 2019-02-13 17:25:27.786+08 9d5905bc-0969-4032-ad57-69d6490fbc47 1 t f
+2711 sensortype 传感器类型 Constant \N zx 0 \N \N \N 2019-02-22 11:35:12.169+08 2019-02-22 11:35:12.169+08 d1b35088-9410-4203-924c-75b60634c7c6 5 t f
+2709 size 尺寸 Variable \N 64*80,96*48,96*96 64*80 0 \N 2019-02-15 17:16:22.237+08 2019-02-15 17:22:38.456+08 e1d537c6-2a5b-4b97-91ea-a2bd94093494 4 t f
+2710 postion 位置 Variable \N male,female,public public \N \N \N \N 2019-02-21 09:43:57.893+08 2019-02-21 09:43:57.893+08 d5bfb91e-3d09-4068-ac33-5974e8b7f039 4 t f
+2719 Device_ID 设备ID Variable \N 0 \N \N \N 传感器唯一ID号 2019-02-25 11:38:45.237+08 2019-02-25 11:38:45.237+08 ef68a37c-37fa-40d7-8537-dcbc64eaf1e1 5 t f
+2860 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 15:44:37.214+08 2019-02-25 15:44:37.214+08 998a52d3-f5ee-4d52-997f-1865b390e26b 1 t f
+2861 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 15:44:37.217+08 2019-02-25 15:44:37.217+08 998a52d3-f5ee-4d52-997f-1865b390e26b 1 t f
+2862 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 15:44:37.221+08 2019-02-25 15:44:37.221+08 998a52d3-f5ee-4d52-997f-1865b390e26b 5 t f
+2148 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-21 13:45:09.035+08 2018-03-21 13:45:09.035+08 1f6ae927-989f-48b3-9fa4-18518326953b 5 t f
+2152 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-21 13:47:25.318+08 2018-03-21 13:47:25.318+08 c50b3ecc-a416-4991-b64f-f2c79d8d1848 5 t f
+906 moduleId 模块号 Variable \N 1 0 \N 2018-01-05 14:53:53.085+08 2018-03-02 10:35:14.609+08 b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 5 t f
+854 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-05 14:46:16.366+08 2018-01-05 14:46:16.366+08 0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1 5 t f
+856 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-05 14:46:16.37+08 2018-01-05 14:46:16.37+08 0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1 1 t f
+2178 protocolcode 协议号 Constant \N 1502 0 \N 2018-03-23 17:57:01.928+08 2018-04-09 15:14:01.434+08 d32eacce-7db0-4c15-b17c-f1d870389c14 5 t f
+2095 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-14 15:32:30.978+08 2018-03-14 15:32:30.978+08 5d399cb2-7e5a-4a27-bff0-e1769f43499d 5 t f
+2176 sensortype 传感器类型 Constant \N cx 0 \N 2018-03-23 17:40:52.863+08 2018-04-09 15:14:06.191+08 d32eacce-7db0-4c15-b17c-f1d870389c14 5 t f
+852 moduleId 模块号 Variable \N 1 0 \N 2018-01-05 14:46:16.363+08 2018-03-02 10:35:39.767+08 0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1 5 t f
+930 range 量程 Constant \N (-75,75) 0 kN 正值是张拉力,负值是承压力 2018-01-05 15:06:25.946+08 2018-03-02 10:46:03.152+08 0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1 5 t f
+2096 channelId 通道号 Variable \N \N 1 \N 255 1 2018-03-14 15:32:30.981+08 2018-03-14 15:32:30.981+08 5d399cb2-7e5a-4a27-bff0-e1769f43499d 1 t f
+2097 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-14 15:32:44.493+08 2018-03-14 15:32:44.493+08 aa6f3b0e-9bd2-41e8-801d-730aca3e32fb 5 t f
+2098 channelId 通道号 Variable \N \N 1 \N 255 1 2018-03-14 15:32:44.496+08 2018-03-14 15:32:44.496+08 aa6f3b0e-9bd2-41e8-801d-730aca3e32fb 1 t f
+2655 range 量程 Variable \N (0,1500) 0 mm 2018-12-11 14:10:14.369+08 2018-12-11 14:10:45.44+08 0b4f75d6-d921-4913-a9de-cfff3b99d56e 5 t f
+2675 sensortype 传感器类型 Constant \N \N fsfx \N \N \N \N 2018-12-21 17:23:59.061+08 2018-12-21 17:23:59.061+08 495526a7-7701-4e9c-8dfd-bbfd7e0b163b 5 t f
+889 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 14:53:22.541+08 2018-01-05 14:53:22.541+08 607fa5aa-d8d7-48be-bf60-b8a6d0de2e8e 5 t f
+890 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 14:53:22.544+08 2018-01-05 14:53:22.544+08 607fa5aa-d8d7-48be-bf60-b8a6d0de2e8e 1 t f
+2086 sensortype 传感器类型 Constant \N cx 0 2018-03-14 09:28:09.561+08 2018-07-23 17:13:05.627+08 c9946e27-bce7-41eb-b341-d6b03a7f115f 5 t f
+2085 protocolcode 协议号 Constant \N 1503 0 \N Modbus杆式测斜协议 2018-03-14 09:27:36.399+08 2018-07-23 17:13:14.688+08 c9946e27-bce7-41eb-b341-d6b03a7f115f 5 t f
+2517 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-07-23 17:15:42.3+08 2018-07-23 17:15:42.3+08 af1cd7e8-52e1-4411-9c9a-20bc82a2786d 5 t f
+2589 sensortype 传感器类型 Constant \N standard 0 \N 2018-09-07 09:46:01.485+08 2018-09-07 10:18:34.645+08 be5be8af-c339-4f15-b2b7-0f16e1e51792 5 t f
+896 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 14:53:24.82+08 2018-01-05 14:53:24.82+08 49b0b2b7-b6e7-4ec8-adf8-4c94dcfb2eae 5 t f
+897 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 14:53:24.822+08 2018-01-05 14:53:24.822+08 49b0b2b7-b6e7-4ec8-adf8-4c94dcfb2eae 1 t f
+2591 sensortype 传感器类型 Constant \N standard 0 \N \N \N 2018-09-07 10:55:19.84+08 2018-09-07 10:55:19.84+08 97078fa2-e944-487b-8913-e3c2c33c6ff0 5 t f
+2620 range 量程 Constant \N \N (-30,30) \N \N \N ° 2018-10-05 09:56:54.423+08 2018-10-05 09:56:54.423+08 6ac55754-f252-4ba5-ba9c-72a158734b97 5 t f
+2622 protocolcode 协议号 Constant \N \N 9004 \N \N \N \N 2018-10-11 14:47:31.929+08 2018-10-11 14:47:31.929+08 177e7e33-3dae-4163-8d7d-1778e70b4a8b 1 t f
+2623 sensortype 传感器类型 Constant \N \N yc \N \N \N \N 2018-10-11 15:17:22.717+08 2018-10-11 15:17:22.717+08 e5ed186c-f248-4b06-ae1c-8ada54d1c67d 5 t f
+2628 sensortype 传感器类型 Constant \N \N yc \N \N \N 2018-10-24 15:44:13.681+08 2018-10-24 15:44:13.681+08 3ad4be85-c6f9-46b8-97dd-39d01e4ef858 5 t f
+2632 initial 初值 Variable \N 0 3 9999999 0 kWh 2018-10-26 17:54:01.968+08 2018-11-01 16:40:37.535+08 4a91ace7-e5da-44c8-843d-43fb6a130847 2 t f
+2641 sourceld 2 Variable \N \N \N \N \N \N 2018-11-05 11:05:43.253+08 2018-11-05 11:05:43.253+08 706988da-65c8-4388-a4ab-47e553cd1085 5 t f
+908 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-05 14:53:53.091+08 2018-01-05 14:53:53.091+08 b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 5 t f
+910 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-05 14:53:53.095+08 2018-01-05 14:53:53.095+08 b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 1 t f
+2645 A 二次项系数A Variable \N \N 0 6 10000 -10000 2018-11-17 09:41:07.461+08 2018-11-17 09:41:07.461+08 f12a248f-faab-43f2-bfbe-088da7f471dc 2 t f
+912 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 14:57:25.935+08 2018-01-05 14:57:25.935+08 e6a3a1f5-2a8f-48a0-9758-407065bae1e9 5 t f
+913 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-05 14:57:25.938+08 2018-01-05 14:57:25.938+08 e6a3a1f5-2a8f-48a0-9758-407065bae1e9 1 t f
+2652 deviceType 设备类型 Constant \N \N DTU \N \N \N \N 2018-11-23 16:18:45.326+08 2018-11-23 16:18:45.326+08 1db3d346-d4ae-41e3-9a98-d22760482541 5 t f
+2653 SIMNum SIM卡号 Variable \N \N 13212345678 \N \N \N 2018-11-23 16:18:45.328+08 2018-11-23 16:18:45.328+08 1db3d346-d4ae-41e3-9a98-d22760482541 5 t f
+2863 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 15:44:37.223+08 2019-02-25 15:44:37.223+08 998a52d3-f5ee-4d52-997f-1865b390e26b 5 t f
+2703 sensortype 传感器类型 Constant \N \N yb \N \N \N \N 2019-01-25 11:17:28.922+08 2019-01-25 11:17:28.922+08 d94bb4f7-d5a8-4bb0-b866-c8008e5123ab 5 t f
+2707 interval2 2级告警阈值间隔 Variable \N \N 5 \N 1440 1 min 2019-02-13 17:27:50.298+08 2019-02-13 17:27:50.298+08 9d5905bc-0969-4032-ad57-69d6490fbc47 1 t f
+2712 sensortype 传感器类型 Constant \N zx 0 \N \N \N 2019-02-22 11:35:40.5+08 2019-02-22 11:35:40.5+08 283a3cd5-8593-4b92-a528-bbd35a07b288 5 t f
+2720 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 11:41:29.997+08 2019-02-25 11:41:29.997+08 a97834b4-727b-42ad-9ce0-aede595a5727 5 t f
+2721 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 11:41:30.001+08 2019-02-25 11:41:30.001+08 a97834b4-727b-42ad-9ce0-aede595a5727 1 t f
+2722 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 11:41:30.004+08 2019-02-25 11:41:30.004+08 a97834b4-727b-42ad-9ce0-aede595a5727 5 t f
+2723 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 11:41:30.006+08 2019-02-25 11:41:30.006+08 a97834b4-727b-42ad-9ce0-aede595a5727 1 t f
+2724 range 量程 Constant \N (0,0.2) 0 \N \N MPa 2019-02-25 11:41:30.008+08 2019-02-25 11:41:30.008+08 a97834b4-727b-42ad-9ce0-aede595a5727 5 t f
+2725 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 11:41:30.012+08 2019-02-25 11:41:30.012+08 a97834b4-727b-42ad-9ce0-aede595a5727 5 t f
+2864 range 量程 Constant \N (0,2) 0 \N \N MPa 2019-02-25 15:44:37.226+08 2019-02-25 15:44:37.226+08 998a52d3-f5ee-4d52-997f-1865b390e26b 5 t f
+2865 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 15:44:37.229+08 2019-02-25 15:44:37.229+08 998a52d3-f5ee-4d52-997f-1865b390e26b 5 t f
+2917 Account 账号 Variable \N \N \N \N \N \N 2019-03-15 11:32:44.159+08 2019-03-15 11:32:44.159+08 2f25fa6f-a99e-440e-ac0a-29ada5069d4f 5 t f
+2149 channelId 通道号 Variable \N \N \N \N 128 1 2018-03-21 13:45:47.548+08 2018-03-21 13:45:47.548+08 1f6ae927-989f-48b3-9fa4-18518326953b 1 t f
+2151 channelId 通道号 Variable \N \N 1 \N 128 1 2018-03-21 13:47:07.222+08 2018-03-21 13:47:07.222+08 abfa6634-cca0-4696-b67e-1c2eb2e57c9b 1 t f
+1815 moduleId 模块号 Variable \N 1 0 \N 2018-01-23 15:00:11.27+08 2018-03-26 15:47:55.056+08 c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d 5 t f
+1833 moduleId 模块号 Variable \N 1 0 \N 2018-01-23 15:00:12.545+08 2018-03-26 16:16:12.806+08 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 5 t f
+1842 moduleId 模块号 Variable \N 1 0 \N 2018-01-23 15:00:12.738+08 2018-03-26 16:17:41.379+08 91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 5 t f
+2177 sensortype 传感器类型 Constant \N cx 0 \N 2018-03-23 17:55:54.66+08 2018-04-09 15:14:32.533+08 771be2fa-a2f9-4ba8-8c08-76b091627b87 5 t f
+1424 humiRange 湿度量程 Constant \N \N (0,100) \N \N \N % 2018-01-08 16:04:46.005+08 2018-01-08 16:04:46.005+08 e5b27a73-2d4c-4b53-8bcd-86583097a730 5 t f
+2708 interval3 3级告警阈值间隔 Variable \N \N 5 \N 1440 1 min 2019-02-13 17:28:23.012+08 2019-02-13 17:28:23.012+08 9d5905bc-0969-4032-ad57-69d6490fbc47 1 t f
+1581 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-09 11:31:58.85+08 2018-01-09 11:31:58.85+08 92bad770-f845-4bd8-8e2b-55e5343a2201 1 t f
+1582 range 量程 Constant \N (0,100) 0 \N \N %RH 2018-01-09 11:31:58.853+08 2018-01-09 11:31:58.853+08 92bad770-f845-4bd8-8e2b-55e5343a2201 5 t f
+1588 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-09 11:31:58.868+08 2018-01-09 11:31:58.868+08 92bad770-f845-4bd8-8e2b-55e5343a2201 5 t f
+2713 sensortype 传感器类型 Constant \N dy 0 \N 2019-02-22 13:27:41.913+08 2019-02-22 13:41:41.358+08 ef6476c9-709e-4afb-a4d9-57009ee3ecf5 5 t f
+1697 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-18 15:22:34.537+08 2018-01-18 15:22:34.537+08 c0b0b779-cafb-4d7f-b4ff-64534e422738 5 t f
+1698 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-18 15:22:34.717+08 2018-01-18 15:22:34.717+08 abefa36d-6587-4818-bb39-e14a51c26b4e 5 t f
+1699 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-18 15:22:34.895+08 2018-01-18 15:22:34.895+08 79ef29a0-9796-43ce-957d-952d3b16d70a 5 t f
+1700 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-18 15:22:35.059+08 2018-01-18 15:22:35.059+08 ef4d9187-0ca8-44c7-b7f5-42e6c0904fd5 5 t f
+2726 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 11:42:07.458+08 2019-02-25 11:42:07.458+08 bf5a92b7-59ab-429b-bce7-da858650205e 1 t f
+2518 Device_ID 设备ID Variable \N 0 \N 传感器唯一ID号 2018-07-24 09:54:19.996+08 2018-07-28 13:35:35.538+08 4a1c835d-1f99-4d95-8d21-ceab11c714d3 5 t f
+1816 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-23 15:00:11.272+08 2018-01-23 15:00:11.272+08 c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d 1 t f
+1817 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-23 15:00:11.274+08 2018-01-23 15:00:11.274+08 c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d 5 t f
+2727 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 11:42:07.462+08 2019-02-25 11:42:07.462+08 bf5a92b7-59ab-429b-bce7-da858650205e 5 t f
+2624 devicetype 设备类型 Constant \N \N sensor \N \N \N 2018-10-11 15:18:27.984+08 2018-10-11 15:18:27.984+08 e5ed186c-f248-4b06-ae1c-8ada54d1c67d 5 t f
+2629 protocolcode 协议号 Constant \N \N 2405 \N \N \N 2018-10-24 15:44:50.575+08 2018-10-24 15:44:50.575+08 3ad4be85-c6f9-46b8-97dd-39d01e4ef858 1 t f
+2646 B 一次项系数B Variable \N \N 1 6 10000 -10000 2018-11-17 09:42:06.793+08 2018-11-17 09:42:06.793+08 f12a248f-faab-43f2-bfbe-088da7f471dc 2 t f
+1834 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-23 15:00:12.547+08 2018-01-23 15:00:12.547+08 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 1 t f
+1835 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-23 15:00:12.548+08 2018-01-23 15:00:12.548+08 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 5 t f
+2728 range 量程 Constant \N (0,0.4) 0 \N \N MPa 2019-02-25 11:42:07.465+08 2019-02-25 11:42:07.465+08 bf5a92b7-59ab-429b-bce7-da858650205e 5 t f
+1843 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-23 15:00:12.739+08 2018-01-23 15:00:12.739+08 91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 1 t f
+1844 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-23 15:00:12.741+08 2018-01-23 15:00:12.741+08 91766d07-1ae8-4f40-9fed-0d9a21eaf6f3 5 t f
+2729 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 11:42:07.468+08 2019-02-25 11:42:07.468+08 bf5a92b7-59ab-429b-bce7-da858650205e 5 t f
+2730 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 11:42:07.471+08 2019-02-25 11:42:07.471+08 bf5a92b7-59ab-429b-bce7-da858650205e 1 t f
+1838 range 量程 Constant \N (0,0.6) 0 MPa 2018-01-23 15:00:12.553+08 2018-01-23 15:01:26.726+08 2aba0129-a2af-4e99-ad8e-ca8e20aa62f6 5 t f
+1820 range 量程 Constant \N (0,1.0) 0 MPa 2018-01-23 15:00:11.279+08 2018-01-23 15:02:33.408+08 c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d 5 t f
+2731 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 11:42:07.473+08 2019-02-25 11:42:07.473+08 bf5a92b7-59ab-429b-bce7-da858650205e 5 t f
+2866 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 15:46:09.674+08 2019-02-25 15:46:09.674+08 a62aba76-29bb-43b8-a1fe-2dff7c77ecb8 5 t f
+918 range 量程 Constant \N (-136,136) 0 kN 正值是张拉力,负值是承压力 2018-01-05 14:58:44.748+08 2018-03-02 10:45:07.073+08 b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 5 t f
+2867 range 量程 Constant \N (-1500,1500) 0 \N \N με 2019-02-25 15:46:09.677+08 2019-02-25 15:46:09.677+08 a62aba76-29bb-43b8-a1fe-2dff7c77ecb8 5 t f
+2868 sensortype 传感器类型 Constant \N \N zx \N \N \N 2019-02-25 15:46:09.68+08 2019-02-25 15:46:09.68+08 a62aba76-29bb-43b8-a1fe-2dff7c77ecb8 5 t f
+2869 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 15:46:09.683+08 2019-02-25 15:46:09.683+08 a62aba76-29bb-43b8-a1fe-2dff7c77ecb8 1 t f
+2918 PassWord 密码 Variable \N \N \N \N \N 2019-03-15 11:32:56.515+08 2019-03-15 11:32:56.515+08 2f25fa6f-a99e-440e-ac0a-29ada5069d4f 5 t f
+2998 pm100_post 读取记录前延迟-PM100 Variable \N 35 0 600 0 百毫秒 2019-03-28 10:31:04.895+08 2019-04-02 09:56:18.561+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 1 t f
+2971 pm100_st 模组型号-PM100 Constant \N pm100 0 2019-03-27 20:04:23.206+08 2019-04-02 09:56:34.206+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 5 t f
+2150 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-21 13:46:34.061+08 2018-03-21 13:46:34.061+08 abfa6634-cca0-4696-b67e-1c2eb2e57c9b 5 t f
+1301 cpu使用率 cpu使用率 Variable \N \N 5.0 2 100.0 0.0 % cpu使用率 2018-01-08 09:46:41.168+08 2018-01-08 09:46:41.168+08 078b521f-572a-48bb-b327-09f918ef1e92 2 t f
+1302 内存使用率 内存使用率 Variable \N \N 5 2 100 0 % 内存使用率 2018-01-08 09:46:41.174+08 2018-01-08 09:46:41.174+08 078b521f-572a-48bb-b327-09f918ef1e92 2 t f
+1311 moduleId 模块号 Variable \N \N 1 \N \N \N 2018-01-08 10:24:01.172+08 2018-01-08 10:24:01.172+08 e55e2ee6-c58a-481c-9bd3-9df2b38dfa3f 5 t f
+1312 moduleId 模块号 Variable \N \N 1 \N \N \N 2018-01-08 10:24:02.017+08 2018-01-08 10:24:02.017+08 4253e350-b64f-4b81-b19b-bcd45c6181ad 5 t f
+1313 moduleId 模块号 Variable \N \N 1 \N \N \N 2018-01-08 10:24:02.593+08 2018-01-08 10:24:02.593+08 0eab3179-48cc-4e55-8ec9-b7516415aa75 5 t f
+1425 range 量程 Constant \N (-10,10) 0 ° 2018-01-08 16:08:40.421+08 2018-01-08 16:10:10.948+08 7c4c667b-dbf0-4c9b-9d7d-7ad9b61b200e 5 t f
+1444 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 16:27:57.466+08 2018-01-08 16:27:57.466+08 f9331a24-582f-45b8-bea8-b919ffd48516 5 t f
+1443 range 量程 Constant \N (0,280) 0 mm 2018-01-08 16:27:57.463+08 2018-01-08 16:47:10.943+08 f9331a24-582f-45b8-bea8-b919ffd48516 5 t f
+1458 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 16:50:49.899+08 2018-01-08 16:50:49.899+08 64d50498-d37a-4f4a-99f8-2268e82a035e 5 t f
+2981 aqi_p3 系数-NO2 Variable \N 1 16 9999 -9999 2019-03-27 20:25:24.916+08 2019-04-08 13:51:49.74+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 2 t t
+1459 range 量程 Constant \N (0,4000) 0 mm/s 2018-01-08 16:50:49.903+08 2018-01-08 16:51:17.712+08 64d50498-d37a-4f4a-99f8-2268e82a035e 5 t f
+2179 protocolcode 协议号 Constant \N 1503 0 \N 2018-03-23 17:57:35.728+08 2018-04-09 15:14:26.68+08 771be2fa-a2f9-4ba8-8c08-76b091627b87 5 t f
+1528 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-08 19:23:48.717+08 2018-01-08 19:23:48.717+08 537cf41f-69a4-47de-81ee-63485ab8df1d 1 t f
+2483 123456 12 Variable \N \N \N \N 12 12 \N 2018-05-28 17:34:00.466+08 2018-05-28 17:34:00.466+08 899dde06-bd1d-4215-963e-23596c3fda7f 1 t f
+1531 moduleId 模块号 Variable \N \N 1 \N \N \N 2018-01-08 19:23:48.729+08 2018-01-08 19:23:48.729+08 537cf41f-69a4-47de-81ee-63485ab8df1d 5 t f
+2592 sensortype 传感器类型 Constant \N zx 0 \N 2018-09-07 11:09:31.058+08 2018-09-07 11:19:16.913+08 afb69a31-61c2-417c-b62e-c41730b3e6a1 5 t f
+2594 sensortype 传感器类型 Constant \N zx 0 \N \N \N 2018-09-07 11:22:10.562+08 2018-09-07 11:22:10.562+08 db345382-4b53-424d-b563-909bfe0a36cd 5 t f
+1589 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-09 14:07:31.224+08 2018-01-09 14:07:31.224+08 0beb606c-f306-4476-8526-31646c8107e5 1 t f
+1624 moduleId 模块号 Variable \N 0 0 \N \N \N 2018-01-12 10:08:09.36+08 2018-01-12 10:08:09.36+08 301f43b2-e055-4169-8a27-c3d69b246a19 5 t f
+1625 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-12 10:08:09.364+08 2018-01-12 10:08:09.364+08 301f43b2-e055-4169-8a27-c3d69b246a19 1 t f
+1590 range 量程 Constant \N (0,359) 0 ° 2018-01-09 14:07:31.228+08 2018-01-09 14:10:09.236+08 0beb606c-f306-4476-8526-31646c8107e5 5 t f
+2626 sensortype 传感器类型 Constant \N sw 0 2018-10-12 09:21:51.509+08 2018-10-29 15:41:24.106+08 177e7e33-3dae-4163-8d7d-1778e70b4a8b 5 t f
+1600 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-09 14:14:58.479+08 2018-01-09 14:14:58.479+08 85f5b6fd-92cc-4d22-9dff-952c59003e3f 5 t f
+1604 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-09 14:14:58.488+08 2018-01-09 14:14:58.488+08 85f5b6fd-92cc-4d22-9dff-952c59003e3f 1 t f
+2698 interval1 1级阈值告警粒度 Variable \N 5 0 1440 1 min 2019-01-22 15:15:43.203+08 2019-01-22 15:16:18.477+08 ff9746d5-839e-46dc-aae9-ec714680e041 1 t f
+1599 range 量程 Constant \N (0,70) 0 m/s 2018-01-09 14:14:58.477+08 2018-01-09 14:51:10.494+08 85f5b6fd-92cc-4d22-9dff-952c59003e3f 5 t f
+2636 sensortype 传感器类型 Constant \N vistors 0 \N 2018-10-30 19:23:21.9+08 2018-10-30 20:53:20.66+08 d5bfb91e-3d09-4068-ac33-5974e8b7f039 5 t f
+1626 formula 计算公式 Constant \N ε=k*(fi^2-f0^2)+kt*(ti-to) 0 \N \N 2018-01-12 10:08:09.367+08 2018-01-12 10:08:09.367+08 301f43b2-e055-4169-8a27-c3d69b246a19 5 t f
+1627 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-12 10:08:09.37+08 2018-01-12 10:08:09.37+08 301f43b2-e055-4169-8a27-c3d69b246a19 5 t f
+1628 t0 初始温度 Variable \N \N 0 2 200 -50 ℃ 2018-01-12 10:08:09.373+08 2018-01-12 10:08:09.373+08 301f43b2-e055-4169-8a27-c3d69b246a19 2 t f
+1629 range 量程 Constant \N (-3000,3000) 0 \N \N με 2018-01-12 10:08:09.376+08 2018-01-12 10:08:09.376+08 301f43b2-e055-4169-8a27-c3d69b246a19 5 t f
+1630 f0 初始频率 Variable \N \N 1600 5 999999 -999999 Hz 2018-01-12 10:08:09.379+08 2018-01-12 10:08:09.379+08 301f43b2-e055-4169-8a27-c3d69b246a19 2 t f
+1631 kt 温度补偿系数 Variable \N \N 0 16 9999999 -99999999 2018-01-12 10:08:09.381+08 2018-01-12 10:08:09.381+08 301f43b2-e055-4169-8a27-c3d69b246a19 2 t f
+1632 k 模量系数 Variable \N \N 0 16 999999999 -99999999 2018-01-12 10:08:09.383+08 2018-01-12 10:08:09.383+08 301f43b2-e055-4169-8a27-c3d69b246a19 2 t f
+2099 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-14 15:32:53.623+08 2018-03-14 15:32:53.623+08 4af8678b-8f9b-48e6-b8f0-ea7ec7ed53ee 5 t f
+2100 channelId 通道号 Variable \N 1 0 255 1 2018-03-14 15:32:53.626+08 2018-03-14 15:32:53.626+08 4af8678b-8f9b-48e6-b8f0-ea7ec7ed53ee 1 t f
+2647 C 常量 Variable \N \N 0 6 10000 -10000 2018-11-17 09:44:59.372+08 2018-11-17 09:44:59.372+08 f12a248f-faab-43f2-bfbe-088da7f471dc 2 t f
+2697 interval 采集间隔 Variable \N \N 5 \N 1400 0 min 2019-01-22 15:15:43.201+08 2019-01-22 15:15:43.201+08 ff9746d5-839e-46dc-aae9-ec714680e041 1 t f
+2700 interval3 3级阈值告警粒度 Variable \N \N 5 \N 1400 1 min 2019-01-22 15:15:43.207+08 2019-01-22 15:15:43.207+08 ff9746d5-839e-46dc-aae9-ec714680e041 1 t f
+2699 interval2 2级阈值告警粒度 Variable \N 5 0 1440 1 min 2019-01-22 15:15:43.205+08 2019-01-22 15:16:15.087+08 ff9746d5-839e-46dc-aae9-ec714680e041 1 t f
+2593 sensortype 传感器类型 Constant \N dy 0 \N 2018-09-07 11:18:28.055+08 2019-02-22 13:50:17.326+08 6c5b2840-b01d-4bb3-8ab1-a831b3880184 5 t f
+2732 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 11:44:07.975+08 2019-02-25 11:44:07.975+08 b8904c0e-1294-49f9-b0e9-dadd79c4efe4 1 t f
+2733 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 11:44:07.979+08 2019-02-25 11:44:07.979+08 b8904c0e-1294-49f9-b0e9-dadd79c4efe4 5 t f
+2734 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 11:44:07.981+08 2019-02-25 11:44:07.981+08 b8904c0e-1294-49f9-b0e9-dadd79c4efe4 5 t f
+2735 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 11:44:07.983+08 2019-02-25 11:44:07.983+08 b8904c0e-1294-49f9-b0e9-dadd79c4efe4 1 t f
+2736 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 11:44:07.985+08 2019-02-25 11:44:07.985+08 b8904c0e-1294-49f9-b0e9-dadd79c4efe4 5 t f
+2737 range 量程 Constant \N (0,0.6) 0 \N \N MPa 2019-02-25 11:44:07.987+08 2019-02-25 11:44:07.987+08 b8904c0e-1294-49f9-b0e9-dadd79c4efe4 5 t f
+2870 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 15:46:53.851+08 2019-02-25 15:46:53.851+08 8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3 1 t f
+2871 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 15:46:53.854+08 2019-02-25 15:46:53.854+08 8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3 5 t f
+2872 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 15:46:53.856+08 2019-02-25 15:46:53.856+08 8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3 1 t f
+2873 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 15:46:53.858+08 2019-02-25 15:46:53.858+08 8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3 5 t f
+2153 channelId 通道号 Variable \N \N 1 \N 128 1 2018-03-21 13:47:47.269+08 2018-03-21 13:47:47.269+08 c50b3ecc-a416-4991-b64f-f2c79d8d1848 1 t f
+959 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-05 15:18:31.361+08 2018-01-05 15:18:31.361+08 73a7b800-25d7-41ad-872d-96cc4f9430de 5 t f
+961 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-05 15:18:31.365+08 2018-01-05 15:18:31.365+08 73a7b800-25d7-41ad-872d-96cc4f9430de 1 t f
+2192 range 量程 Constant \N (-3000,3000) 0 με 2018-03-26 11:16:13.122+08 2018-03-26 11:17:40.401+08 2e0d00cd-a321-4504-b716-41813848cbdb 5 t f
+2225 range 量程 Constant \N (-5000,5000) 0 \N \N με 2018-03-26 11:27:35.472+08 2018-03-26 11:27:35.472+08 9297adfa-1972-45e3-a5c4-0f31a0acbe84 5 t f
+2226 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2018-03-26 11:28:21.386+08 2018-03-26 11:28:21.386+08 b6095ab3-88ff-4a71-8f42-f0656b301e1e 1 t f
+957 moduleId 模块号 Variable \N 1 0 \N 2018-01-05 15:18:31.356+08 2018-03-02 10:34:58.437+08 73a7b800-25d7-41ad-872d-96cc4f9430de 5 t f
+1606 RL 数字量下限 Constant \N 0 0 mm/min 2018-01-09 15:01:35.229+08 2018-01-09 15:25:50.443+08 db974c14-3d61-403d-b847-e0523ad53964 1 t f
+1426 range 量程 Constant \N (0,5000) 0 mm/s 2018-01-08 16:09:57.762+08 2018-01-08 16:49:58.833+08 217607ad-e8e6-4940-91ff-dc4d831cccbc 5 t f
+1537 range 量程 Constant \N \N (0,100) \N \N \N % 2018-01-08 19:24:50.444+08 2018-01-08 19:24:50.444+08 f55d7414-2db9-4c07-ad9b-34637318171e 5 t f
+1544 moduleId 模块号 Variable \N \N 1 \N \N \N 2018-01-08 19:28:51.397+08 2018-01-08 19:28:51.397+08 2dead818-122a-42d9-8f52-3aa8d92ab0c3 5 t f
+1545 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-08 19:28:51.399+08 2018-01-08 19:28:51.399+08 2dead818-122a-42d9-8f52-3aa8d92ab0c3 1 t f
+1546 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-08 19:28:51.401+08 2018-01-08 19:28:51.401+08 2dead818-122a-42d9-8f52-3aa8d92ab0c3 5 t f
+2235 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2018-03-26 11:32:31.618+08 2018-03-26 11:32:31.618+08 cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3 1 t f
+2232 range 量程 Constant \N (-75,75) 0 kN 2018-03-26 11:30:25.52+08 2018-03-26 11:32:46.14+08 ca6af9e3-f1dc-4992-8029-d0e438ef99b5 5 t f
+2234 protocolcode 协议号 Constant \N 1401 0 2018-03-26 11:30:25.535+08 2018-04-09 15:05:16.217+08 ca6af9e3-f1dc-4992-8029-d0e438ef99b5 5 t f
+2233 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 11:30:25.528+08 2018-04-09 15:05:21.481+08 ca6af9e3-f1dc-4992-8029-d0e438ef99b5 5 t f
+2231 devicetype 设备类型 Constant \N sensor 0 2018-03-26 11:30:25.514+08 2018-04-09 15:05:26.793+08 ca6af9e3-f1dc-4992-8029-d0e438ef99b5 5 t f
+2222 devicetype 设备类型 Constant \N sensor 0 2018-03-26 11:27:35.464+08 2018-04-09 15:05:52.137+08 9297adfa-1972-45e3-a5c4-0f31a0acbe84 5 t f
+2223 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 11:27:35.466+08 2018-04-09 15:05:57.898+08 9297adfa-1972-45e3-a5c4-0f31a0acbe84 5 t f
+2224 protocolcode 协议号 Constant \N 1401 0 2018-03-26 11:27:35.469+08 2018-04-09 15:06:03.396+08 9297adfa-1972-45e3-a5c4-0f31a0acbe84 5 t f
+2194 protocolcode 协议号 Constant \N 1401 0 2018-03-26 11:16:13.126+08 2018-04-09 15:07:24.797+08 2e0d00cd-a321-4504-b716-41813848cbdb 5 t f
+2193 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 11:16:13.123+08 2018-04-09 15:07:29.621+08 2e0d00cd-a321-4504-b716-41813848cbdb 5 t f
+2191 devicetype 设备类型 Constant \N sensor 0 2018-03-26 11:16:13.119+08 2018-04-09 15:07:36.206+08 2e0d00cd-a321-4504-b716-41813848cbdb 5 t f
+2180 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 10:56:03.89+08 2018-04-09 15:15:11.049+08 2d9520e9-143b-48c2-960f-5c9dca7a21b4 5 t f
+2484 士大夫 士大夫 Variable \N \N 4 3 4 4 米 的首发机会d 2018-05-28 17:47:14.473+08 2018-05-28 17:47:14.473+08 899dde06-bd1d-4215-963e-23596c3fda7f 2 t f
+2520 protocolcode 协议号 Constant \N \N 1102 \N \N \N \N 2018-07-31 17:06:37.699+08 2018-07-31 17:06:37.699+08 b3f251c1-ab5e-4427-8b38-9180d6544783 5 t f
+1605 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-09 15:01:35.225+08 2018-01-09 15:01:35.225+08 db974c14-3d61-403d-b847-e0523ad53964 5 t f
+1609 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-09 15:01:35.237+08 2018-01-09 15:01:35.237+08 db974c14-3d61-403d-b847-e0523ad53964 1 t f
+1610 formula 公式 Constant \N \N y=(RH-RL)/(aH-aL)*(x-aL)+RL \N \N \N \N 2018-01-09 15:01:35.239+08 2018-01-09 15:01:35.239+08 db974c14-3d61-403d-b847-e0523ad53964 5 t f
+1611 aL 模拟量下限 Constant \N 4 0 \N \N mA 2018-01-09 15:01:35.242+08 2018-01-09 15:01:35.242+08 db974c14-3d61-403d-b847-e0523ad53964 1 t f
+1612 aH 模拟量上限 Constant \N \N 20 \N \N \N mA 2018-01-09 15:01:35.244+08 2018-01-09 15:01:35.244+08 db974c14-3d61-403d-b847-e0523ad53964 1 t f
+1608 RH 数字量上限 Constant \N 4 0 mm/min 2018-01-09 15:01:35.234+08 2018-01-09 15:25:57.625+08 db974c14-3d61-403d-b847-e0523ad53964 1 t f
+1607 range 量程 Constant \N (0,4) 0 mm/min 2018-01-09 15:01:35.232+08 2018-01-09 15:29:42.85+08 db974c14-3d61-403d-b847-e0523ad53964 5 t f
+1633 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-12 11:27:20.222+08 2018-01-12 11:27:20.222+08 99978bc0-b3c7-4ba1-9064-723c2c13b95f 5 t f
+1639 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-16 10:34:03.668+08 2018-01-16 10:34:03.668+08 70177dd0-b5ab-45c0-8338-a6f69138f85f 5 t f
+1640 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-16 10:34:04.001+08 2018-01-16 10:34:04.001+08 72b0bf25-78ae-4ab5-995b-c83cfbf52484 5 t f
+1641 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-16 10:34:04.407+08 2018-01-16 10:34:04.407+08 0bae88b4-e518-4869-96ea-c833160a9914 5 t f
+1642 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-16 11:50:37.251+08 2018-01-16 11:50:37.251+08 0d123bba-3d2e-4252-a27e-af567da8aca1 5 t f
+1650 range 量程 Constant \N \N (0,500) \N \N \N mm 2018-01-17 17:17:24.484+08 2018-01-17 17:17:24.484+08 a0bf9003-9dbd-4cc7-8bea-7da81ce69f32 5 t f
+2523 sensortype 传感器类型 Constant \N \N yc \N \N \N 2018-07-31 17:21:07.03+08 2018-07-31 17:21:07.03+08 11a0df92-8921-470b-af9c-d7593b8b1f78 5 t f
+2637 postion 厕所位置 Variable \N male,female,public male 0 \N 2018-10-30 22:17:59.354+08 2018-11-05 15:28:34.211+08 b03b1516-7e4a-41a4-9765-a1a485bb998a 4 t f
+2648 dedc 去直流 Variable \N false 0 \N 2018-11-17 14:03:27.917+08 2018-11-17 14:09:57.637+08 e32efbee-3c36-4be6-a4d3-d5058acf1fda 3 t f
+953 range 量程 Constant \N (-160,160) 0 kN 正值是张拉力,负值是承压力 2018-01-05 15:18:31.346+08 2018-03-02 10:44:29.902+08 73a7b800-25d7-41ad-872d-96cc4f9430de 5 t f
+2701 enumV 枚举变量 Variable \N 枚举1,枚举2 \N \N \N \N \N 2019-01-22 17:15:21.166+08 2019-01-22 17:15:21.166+08 67b821eb-caf8-4352-a59b-360e7c9a3ad9 4 t f
+2706 interval1 1级告警阈值间隔 Variable \N \N 5 \N 1400 1 min 2019-02-13 17:27:03.815+08 2019-02-13 17:27:03.815+08 9d5905bc-0969-4032-ad57-69d6490fbc47 1 t f
+2715 sensortype 传感器类型 Constant \N zx 0 \N \N \N 2019-02-22 13:35:17.655+08 2019-02-22 13:35:17.655+08 4068ff34-b211-4386-b274-0a6b12f35b59 5 t f
+2738 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 11:46:10.881+08 2019-02-25 11:46:10.881+08 a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62 1 t f
+2739 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 11:46:10.884+08 2019-02-25 11:46:10.884+08 a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62 5 t f
+950 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 15:11:56.645+08 2018-01-05 15:11:56.645+08 e2d93988-c0e0-4581-b406-e43e455f7864 5 t f
+1314 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-08 10:43:07.601+08 2018-01-08 10:43:07.601+08 b1c85f0b-c610-4243-83a4-3a1e87b411ad 1 t f
+2195 sensortype 设备类型 Constant \N zx 0 \N 2018-03-26 11:21:36.103+08 2018-03-26 11:21:41.596+08 cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3 5 t f
+1317 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-08 10:43:07.609+08 2018-01-08 10:43:07.609+08 b1c85f0b-c610-4243-83a4-3a1e87b411ad 5 t f
+1318 moduleId 模块号 Variable \N 1 0 \N \N \N 2018-01-08 10:43:07.611+08 2018-01-08 10:43:07.611+08 b1c85f0b-c610-4243-83a4-3a1e87b411ad 5 t f
+1322 range 量程 Constant \N (0,5) 0 mm 2018-01-08 10:47:53.791+08 2018-01-08 10:48:02.464+08 0eab3179-48cc-4e55-8ec9-b7516415aa75 5 t f
+1323 range 量程 Constant \N \N (0,40) \N \N \N \N 2018-01-08 10:48:47.709+08 2018-01-08 10:48:47.709+08 4253e350-b64f-4b81-b19b-bcd45c6181ad 5 t f
+1427 range 量程 Constant \N \N (0,10) \N \N \N m/s 2018-01-08 16:14:02.657+08 2018-01-08 16:14:02.657+08 e2d93988-c0e0-4581-b406-e43e455f7864 5 t f
+1428 range 量程 Constant \N (0,4000) 0 mm/s 2018-01-08 16:15:00.005+08 2018-01-08 16:26:34.797+08 0e1586ef-cbec-4dc3-8ff4-af3e4c7c8d2e 5 t f
+1454 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 16:50:48.42+08 2018-01-08 16:50:48.42+08 80e5052f-477a-4e27-a3bc-0ec95ab3d4a2 5 t f
+1456 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 16:50:48.917+08 2018-01-08 16:50:48.917+08 fbc83633-74fd-494b-b1b7-75d289358b27 5 t f
+1457 range 量程 Constant \N (0,4000) 0 mm/s 2018-01-08 16:50:48.92+08 2018-01-08 16:52:20.662+08 fbc83633-74fd-494b-b1b7-75d289358b27 5 t f
+1455 range 量程 Constant \N (0,8000) 0 mm/s 2018-01-08 16:50:48.423+08 2018-01-08 16:52:59.895+08 80e5052f-477a-4e27-a3bc-0ec95ab3d4a2 5 t f
+1464 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 16:54:49.762+08 2018-01-08 16:54:49.762+08 bfc79caf-826f-4f9d-a709-241529e118b5 5 t f
+1465 range 量程 Constant \N (0,20) 0 m/s 2018-01-08 16:54:49.764+08 2018-01-08 17:00:27.963+08 bfc79caf-826f-4f9d-a709-241529e118b5 5 t f
+2254 protocolcode 协议号 Constant \N 1401 0 2018-03-26 11:35:24.381+08 2018-04-09 15:03:33.759+08 d3763c4f-94ba-4ae4-b35e-ccff2340c16a 5 t f
+1613 osVersion 操作系统版本 Constant \N \N windws7 \N \N \N \N 2018-01-09 17:00:52.112+08 2018-01-09 17:00:52.112+08 7d457a8b-5537-4186-bd68-df0c5868ef7e 5 t f
+1634 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-16 09:44:42.446+08 2018-01-16 09:44:42.446+08 c02185df-1224-4e63-aab4-3d284c8bb526 5 t f
+1636 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-16 10:33:58.421+08 2018-01-16 10:33:58.421+08 e47f8159-ee4b-45c0-b827-30b69d0328d8 5 t f
+1637 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-16 10:33:59.662+08 2018-01-16 10:33:59.662+08 ff38a597-0318-47bb-a647-5ad78dd2dca8 5 t f
+1638 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-16 10:34:00.741+08 2018-01-16 10:34:00.741+08 addad535-5578-4010-9d74-dbeab2b9e9eb 5 t f
+2219 range 量程 Constant \N (-3000,3000) 0 \N \N με 2018-03-26 11:27:33.48+08 2018-03-26 11:27:33.48+08 d31031ab-0237-41a5-adc0-867c1e9952f7 5 t f
+1751 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-23 14:46:19.642+08 2018-01-23 14:46:19.642+08 099c6283-519f-4946-aa9d-f0059a76b832 1 t f
+2237 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 11:35:01.813+08 2018-03-26 11:35:01.813+08 11f0a3dc-13ad-4c40-ae16-1b2f1d139564 1 t f
+1754 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-23 14:46:19.647+08 2018-01-23 14:46:19.647+08 099c6283-519f-4946-aa9d-f0059a76b832 5 t f
+2255 range 量程 Constant \N (-160,160) 0 kN 2018-03-26 11:35:24.383+08 2018-03-26 11:38:49.417+08 d3763c4f-94ba-4ae4-b35e-ccff2340c16a 5 t f
+1750 moduleId 模块号 Variable \N 1 0 \N 2018-01-23 14:46:19.64+08 2018-03-26 15:07:21.186+08 099c6283-519f-4946-aa9d-f0059a76b832 5 t f
+1775 moduleId 模块号 Variable \N 1 0 \N 2018-01-23 14:53:15.229+08 2018-03-26 15:19:21.957+08 bbfa13d3-fd42-4230-97e6-792463dbaf85 5 t f
+1773 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-23 14:53:15.224+08 2018-01-23 14:53:15.224+08 bbfa13d3-fd42-4230-97e6-792463dbaf85 5 t f
+2253 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 11:35:24.379+08 2018-04-09 15:03:38.355+08 d3763c4f-94ba-4ae4-b35e-ccff2340c16a 5 t f
+1776 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-23 14:53:15.232+08 2018-01-23 14:53:15.232+08 bbfa13d3-fd42-4230-97e6-792463dbaf85 1 t f
+1753 range 量程 Constant \N (-4000,4000) 0 KN 2018-01-23 14:46:19.646+08 2018-03-02 14:16:16.254+08 099c6283-519f-4946-aa9d-f0059a76b832 5 t f
+2252 devicetype 设备类型 Constant \N sensor 0 2018-03-26 11:35:24.377+08 2018-04-09 15:03:43.04+08 d3763c4f-94ba-4ae4-b35e-ccff2340c16a 5 t f
+2216 devicetype 设备类型 Constant \N sensor 0 2018-03-26 11:27:33.474+08 2018-04-09 15:06:24.716+08 d31031ab-0237-41a5-adc0-867c1e9952f7 5 t f
+2217 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 11:27:33.476+08 2018-04-09 15:06:29.566+08 d31031ab-0237-41a5-adc0-867c1e9952f7 5 t f
+2218 protocolcode 协议号 Constant \N 1401 0 2018-03-26 11:27:33.478+08 2018-04-09 15:06:34.752+08 d31031ab-0237-41a5-adc0-867c1e9952f7 5 t f
+2181 protocolcode 协议号 Constant \N 1401 0 2018-03-26 10:56:34.904+08 2018-04-09 15:15:05.106+08 2d9520e9-143b-48c2-960f-5c9dca7a21b4 5 t f
+2486 K1 K1一次项系数 Variable \N 1 16 100000000000000000000000000000000 -100000000000000000000000000000000 \N 2018-05-31 14:37:08.579+08 2018-05-31 14:37:08.579+08 563221c8-bdb4-4511-b781-25cab72585a7 2 t f
+2487 K2 K2二次项系数 Variable \N 0 16 100000000000000000000000000000000 -100000000000000000000000000000000 2018-05-31 14:37:08.582+08 2018-05-31 14:37:08.582+08 563221c8-bdb4-4511-b781-25cab72585a7 2 t f
+2488 Fo Fo基准读数 Variable \N 0 3 100000000000000000000000000000000 -100000000000000000000000000000000 2018-05-31 14:37:08.585+08 2018-05-31 14:37:08.585+08 563221c8-bdb4-4511-b781-25cab72585a7 2 t f
+2489 K3 K3三次项系数 Variable \N \N 0 16 100000000000000000000000000000000 -100000000000000000000000000000000 2018-05-31 14:37:08.587+08 2018-05-31 14:37:08.587+08 563221c8-bdb4-4511-b781-25cab72585a7 2 t f
+2521 sensortype 传感器类型 Constant \N \N wsd \N \N \N 2018-07-31 17:07:12.42+08 2018-07-31 17:07:12.42+08 b3f251c1-ab5e-4427-8b38-9180d6544783 5 t f
+2638 sensortype 传感器类型 Constant \N weather 0 \N 2018-10-31 07:14:30.721+08 2018-10-31 07:15:12.795+08 b03b1516-7e4a-41a4-9765-a1a485bb998a 5 t f
+2740 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 11:46:10.886+08 2019-02-25 11:46:10.886+08 a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62 1 t f
+2741 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 11:46:10.888+08 2019-02-25 11:46:10.888+08 a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62 5 t f
+2742 range 量程 Constant \N (0,0.8) 0 \N \N MPa 2019-02-25 11:46:10.89+08 2019-02-25 11:46:10.89+08 a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62 5 t f
+2743 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 11:46:10.892+08 2019-02-25 11:46:10.892+08 a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62 5 t f
+2236 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 11:34:36.053+08 2018-03-26 11:34:47.954+08 11f0a3dc-13ad-4c40-ae16-1b2f1d139564 5 t f
+999 moduleId 模块号 Variable \N 1 0 \N 2018-01-05 15:36:59.876+08 2018-03-26 15:06:03.565+08 780ffe7d-7369-4d2f-9184-32790466f2ba 5 t f
+990 moduleId 模块号 Variable \N 1 0 \N 2018-01-05 15:36:59.08+08 2018-03-26 15:06:18.51+08 ccb72dc5-f9bc-424d-a3ec-e6e9121bc534 5 t f
+2198 devicetype 设备类型 Constant \N sensor 0 2018-03-26 11:24:13.152+08 2018-04-09 15:06:54.657+08 1bda935e-56de-4365-b60e-f02d19299795 5 t f
+2200 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 11:24:13.156+08 2018-04-09 15:06:59.771+08 1bda935e-56de-4365-b60e-f02d19299795 5 t f
+981 moduleId 模块号 Variable \N 1 0 \N 2018-01-05 15:36:58.477+08 2018-03-26 15:06:32.821+08 d2a5375c-0240-4435-9b8f-a62372fafaca 5 t f
+974 moduleId 模块号 Variable \N 1 0 \N 2018-01-05 15:33:22.385+08 2018-03-26 15:06:48.062+08 abaf6bf4-288f-4d21-9fab-515213e6dcac 5 t f
+2201 protocolcode 协议号 Constant \N 1401 0 2018-03-26 11:24:13.158+08 2018-04-09 15:07:05.523+08 1bda935e-56de-4365-b60e-f02d19299795 5 t f
+2490 sensortype 传感器 Constant \N zd 0 \N 2018-06-04 18:00:55.124+08 2018-06-04 18:01:29.289+08 51654fb3-cd61-405e-890f-ade3931c8b7e 5 t f
+2522 protocolcode 协议号 Constant \N \N 9002 \N \N \N \N 2018-07-31 17:20:44.967+08 2018-07-31 17:20:44.967+08 11a0df92-8921-470b-af9c-d7593b8b1f78 5 t f
+951 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-05 15:14:00.869+08 2018-01-05 15:14:00.869+08 217607ad-e8e6-4940-91ff-dc4d831cccbc 5 t f
+2182 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 11:16:03.996+08 2018-03-26 11:23:53.844+08 b6095ab3-88ff-4a71-8f42-f0656b301e1e 5 f f
+975 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-05 15:33:22.387+08 2018-01-05 15:33:22.387+08 abaf6bf4-288f-4d21-9fab-515213e6dcac 1 t f
+2199 range 量程 Constant \N (-1500,1500) 0 \N \N με 2018-03-26 11:24:13.154+08 2018-03-26 11:24:13.154+08 1bda935e-56de-4365-b60e-f02d19299795 5 t f
+1761 range 量程 Constant \N (-500,500) 0 kN 2018-01-23 14:49:59.765+08 2021-03-02 13:51:55.104+08 c0cde67c-9734-4a3c-bb52-0caba0ae8724 5 t f
+1768 range 量程 Constant \N (-1000,1000) 0 KN 2018-01-23 14:53:15.211+08 2021-03-02 13:52:31.974+08 bbfa13d3-fd42-4230-97e6-792463dbaf85 5 t f
+978 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-05 15:33:22.395+08 2018-01-05 15:33:22.395+08 abaf6bf4-288f-4d21-9fab-515213e6dcac 5 t f
+977 range 量程 Constant \N (0,0.2) 0 MPa 2018-01-05 15:33:22.393+08 2018-01-05 15:34:45.321+08 abaf6bf4-288f-4d21-9fab-515213e6dcac 5 t f
+2639 postion 位置 Variable \N male,female male 0 \N 2018-10-31 08:23:39.91+08 2018-10-31 08:25:16.603+08 a5dda81c-6a85-4e7b-97f3-be45b980646e 4 t f
+2640 initial 初值 Variable \N \N 0 3 100000000 0 t 2018-11-02 11:07:55.794+08 2018-11-02 11:07:55.794+08 b440e042-3173-43c6-887c-3cf4ce8a49e4 2 t f
+985 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-05 15:36:58.489+08 2018-01-05 15:36:58.489+08 d2a5375c-0240-4435-9b8f-a62372fafaca 1 t f
+988 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-05 15:36:58.497+08 2018-01-05 15:36:58.497+08 d2a5375c-0240-4435-9b8f-a62372fafaca 5 t f
+2744 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 11:52:46.024+08 2019-02-25 11:52:46.024+08 369b29f9-7664-42c3-8510-7ad4c7b5bc06 5 t f
+994 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-05 15:36:59.09+08 2018-01-05 15:36:59.09+08 ccb72dc5-f9bc-424d-a3ec-e6e9121bc534 1 t f
+2745 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 11:52:46.028+08 2019-02-25 11:52:46.028+08 369b29f9-7664-42c3-8510-7ad4c7b5bc06 1 t f
+997 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-05 15:36:59.097+08 2018-01-05 15:36:59.097+08 ccb72dc5-f9bc-424d-a3ec-e6e9121bc534 5 t f
+2746 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 11:52:46.031+08 2019-02-25 11:52:46.031+08 369b29f9-7664-42c3-8510-7ad4c7b5bc06 5 t f
+2747 range 量程 Constant \N (0,1.0) 0 \N \N MPa 2019-02-25 11:52:46.033+08 2019-02-25 11:52:46.033+08 369b29f9-7664-42c3-8510-7ad4c7b5bc06 5 t f
+2748 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 11:52:46.036+08 2019-02-25 11:52:46.036+08 369b29f9-7664-42c3-8510-7ad4c7b5bc06 5 t f
+2749 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 11:52:46.039+08 2019-02-25 11:52:46.039+08 369b29f9-7664-42c3-8510-7ad4c7b5bc06 1 t f
+1003 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-05 15:36:59.892+08 2018-01-05 15:36:59.892+08 780ffe7d-7369-4d2f-9184-32790466f2ba 1 t f
+2874 range 量程 Constant \N (0,0.2) 0 \N \N MPa 2019-02-25 15:46:53.859+08 2019-02-25 15:46:53.859+08 8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3 5 t f
+986 range 量程 Constant \N (0,0.4) 0 MPa 2018-01-05 15:36:58.492+08 2018-01-05 15:37:33.461+08 d2a5375c-0240-4435-9b8f-a62372fafaca 5 t f
+995 range 量程 Constant \N (0,0.8) 0 MPa 2018-01-05 15:36:59.092+08 2018-01-05 15:38:14.052+08 ccb72dc5-f9bc-424d-a3ec-e6e9121bc534 5 t f
+1004 range 量程 Constant \N (0,1) 0 MPa 2018-01-05 15:36:59.896+08 2018-01-05 15:39:00.379+08 780ffe7d-7369-4d2f-9184-32790466f2ba 5 t f
+1324 range 量程 Constant \N \N (0,8) \N \N \N mm 2018-01-08 10:49:25.145+08 2018-01-08 10:49:25.145+08 e55e2ee6-c58a-481c-9bd3-9df2b38dfa3f 5 t f
+2875 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 15:46:53.861+08 2019-02-25 15:46:53.861+08 8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3 5 t f
+2718 sensortype 传感器类型 Constant \N pressure 0 \N 2019-02-22 17:45:36.704+08 2019-02-26 14:49:45.9+08 b21b534c-d8f1-4caf-a405-1682a99dc1a9 5 t f
+2919 ModuleCode 模块代号 Variable \N \N \N \N \N 2019-03-15 11:34:20.29+08 2019-03-15 11:34:20.29+08 2f25fa6f-a99e-440e-ac0a-29ada5069d4f 5 t f
+2999 pm100_pre 执行前延迟-PM100 Variable \N 25 0 600 0 百毫秒 2019-03-28 10:31:54.136+08 2019-04-02 09:56:03.374+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 1 t f
+1006 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-05 15:36:59.904+08 2018-01-05 15:36:59.904+08 780ffe7d-7369-4d2f-9184-32790466f2ba 5 t f
+1325 range 量程 Constant \N \N (0,500) \N \N \N mm 2018-01-08 10:50:17.151+08 2018-01-08 10:50:17.151+08 f2c96428-649e-47e9-9b6f-e5749195cb33 5 t f
+1350 channelId 通道号 Variable \N 1 0 255 1 \N 2018-01-08 11:44:22.246+08 2018-01-08 11:44:22.246+08 92d06569-3e06-4ceb-91e5-d28589632145 1 t f
+1354 moduleId 模块号 Variable \N 1 0 \N \N \N 2018-01-08 11:44:22.255+08 2018-01-08 11:44:22.255+08 92d06569-3e06-4ceb-91e5-d28589632145 5 t f
+1355 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2018-01-08 11:44:22.257+08 2018-01-08 11:44:22.257+08 92d06569-3e06-4ceb-91e5-d28589632145 5 t f
+2185 devicetype 设备类型 Constant \N sensor 0 2018-03-26 11:16:11.531+08 2018-04-09 15:08:29.662+08 02513eed-ba94-456b-86e0-89ea996b879d 5 t f
+1016 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-05 15:48:51.396+08 2018-01-05 15:48:51.396+08 424f45f6-916c-4383-bce4-c71153f82e63 1 t f
+2186 range 量程 Constant \N (-5000,5000) 0 με 2018-03-26 11:16:11.537+08 2018-03-26 11:22:43.296+08 02513eed-ba94-456b-86e0-89ea996b879d 5 t f
+1018 moduleId 模块号 Variable \N 1 0 \N 2018-01-05 15:48:51.401+08 2018-03-26 15:05:50.015+08 424f45f6-916c-4383-bce4-c71153f82e63 5 t f
+2187 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 11:16:11.54+08 2018-04-09 15:08:34.815+08 02513eed-ba94-456b-86e0-89ea996b879d 5 t f
+1022 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-05 15:48:51.41+08 2018-01-05 15:48:51.41+08 424f45f6-916c-4383-bce4-c71153f82e63 5 t f
+2188 protocolcode 协议号 Constant \N 1401 0 2018-03-26 11:16:11.543+08 2018-04-09 15:08:40.146+08 02513eed-ba94-456b-86e0-89ea996b879d 5 t f
+1023 range 量程 Constant \N (0,2) 0 MPa 2018-01-05 15:48:51.412+08 2018-01-05 15:54:49.122+08 424f45f6-916c-4383-bce4-c71153f82e63 5 t f
+2527 sensortype 传感器类型 Constant \N \N yc \N \N \N 2018-08-01 09:19:07.196+08 2018-08-01 09:19:07.196+08 9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec 5 t f
+2524 devicetype 设备类型 Constant \N sensor 0 \N 2018-08-01 09:10:37.694+08 2018-08-01 09:19:58.425+08 75c932d0-2df0-4628-81dd-0e9c1f11ff60 5 t f
+2529 protocolcode 协议号 Constant \N \N 9002 \N \N \N 2018-08-01 09:32:10.281+08 2018-08-01 09:32:10.281+08 76288807-186e-4444-a1ce-6be599aacfd2 5 t f
+2750 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 11:55:32.986+08 2019-02-25 11:55:32.986+08 ff97f842-4bf0-4384-b4b6-05a9783aa809 5 t f
+2751 range 量程 Constant \N (0,2.0) 0 \N \N MPa 2019-02-25 11:55:33.004+08 2019-02-25 11:55:33.004+08 ff97f842-4bf0-4384-b4b6-05a9783aa809 5 t f
+2752 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 11:55:33.006+08 2019-02-25 11:55:33.006+08 ff97f842-4bf0-4384-b4b6-05a9783aa809 5 t f
+2753 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 11:55:33.008+08 2019-02-25 11:55:33.008+08 ff97f842-4bf0-4384-b4b6-05a9783aa809 5 t f
+2754 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 11:55:33.011+08 2019-02-25 11:55:33.011+08 ff97f842-4bf0-4384-b4b6-05a9783aa809 1 t f
+2755 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 11:55:33.013+08 2019-02-25 11:55:33.013+08 ff97f842-4bf0-4384-b4b6-05a9783aa809 1 t f
+2983 aqi_p5 系数-VOC Variable \N 1 16 9999 -9999 2019-03-27 20:42:25.281+08 2019-04-08 13:51:54.518+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 2 t t
+2876 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 15:47:53.775+08 2019-02-25 15:47:53.775+08 e7ed3509-511e-4c5d-8aec-3f331ec8defa 5 t f
+2877 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 15:47:53.779+08 2019-02-25 15:47:53.779+08 e7ed3509-511e-4c5d-8aec-3f331ec8defa 1 t f
+2878 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 15:47:53.781+08 2019-02-25 15:47:53.781+08 e7ed3509-511e-4c5d-8aec-3f331ec8defa 5 t f
+2879 range 量程 Constant \N (-160,160) 0 \N \N kN 正值是张拉力,负值是承压力 2019-02-25 15:47:53.783+08 2019-02-25 15:47:53.783+08 e7ed3509-511e-4c5d-8aec-3f331ec8defa 5 t f
+2880 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 15:47:53.786+08 2019-02-25 15:47:53.786+08 e7ed3509-511e-4c5d-8aec-3f331ec8defa 1 t f
+2881 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 15:47:53.788+08 2019-02-25 15:47:53.788+08 e7ed3509-511e-4c5d-8aec-3f331ec8defa 5 t f
+2920 ModuleAddress 模块地址 Variable \N \N \N \N \N 2019-03-15 11:35:37.991+08 2019-03-15 11:35:37.991+08 2f25fa6f-a99e-440e-ac0a-29ada5069d4f 5 t f
+1429 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 16:15:24.177+08 2018-01-08 16:15:24.177+08 45aee45b-bc26-4ac7-a8ed-3dcbe187b2de 5 t f
+1450 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 16:27:59.744+08 2018-01-08 16:27:59.744+08 d3ae39b6-419c-4d57-a353-69768f82908a 5 t f
+1449 range 量程 Constant \N (0,65) 0 mm 2018-01-08 16:27:59.741+08 2018-01-08 16:28:31.924+08 d3ae39b6-419c-4d57-a353-69768f82908a 5 t f
+1467 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-08 17:03:45.969+08 2018-01-08 17:03:45.969+08 a54c400e-8b31-47ec-9820-550d04916f47 5 t f
+3006 sensortype 传感器类型 Constant \N kq 0 \N 2019-03-29 10:00:14.029+08 2019-03-29 10:43:50.821+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 5 t f
+3007 test fa Variable \N \N true \N \N \N \N 2019-03-29 16:40:02.748+08 2019-03-29 16:40:02.748+08 044ef7b0-afed-464c-b3fb-8bbf7fa42023 3 t f
+2987 aqi_rd 是否启用-AQI模组 Variable \N true 0 \N 2019-03-28 09:27:07.085+08 2019-04-02 09:55:10.271+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 3 t f
+3000 am2305_post 读取记录前延迟-AM2305 Variable \N 35 0 600 0 百毫秒 2019-03-28 10:37:10.761+08 2019-04-02 09:55:44.37+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 1 t f
+1466 range 量程 Constant \N (-5,55) 0 ℃ 2018-01-08 17:03:45.965+08 2018-01-08 17:06:09.813+08 a54c400e-8b31-47ec-9820-550d04916f47 5 t f
+1903 range 量程 Constant \N \N (‐40,120),(0,100) \N \N \N 2018-01-24 11:26:28.353+08 2018-01-24 11:26:28.353+08 780de52c-47eb-46cb-b77b-3d919bae5ffb 5 t f
+1904 moduleId 模块号 Variable \N \N 1 \N \N \N 2018-01-24 11:26:28.355+08 2018-01-24 11:26:28.355+08 780de52c-47eb-46cb-b77b-3d919bae5ffb 5 t f
+1905 deviceType 设备类型 Constant \N sensor 0 \N \N 2018-01-24 11:26:28.357+08 2018-01-24 11:26:28.357+08 780de52c-47eb-46cb-b77b-3d919bae5ffb 5 t f
+1925 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-24 11:33:34.543+08 2018-01-24 11:33:34.543+08 27930598-2f6e-4932-a816-9685f17969b5 1 t f
+1926 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-24 11:33:34.545+08 2018-01-24 11:33:34.545+08 27930598-2f6e-4932-a816-9685f17969b5 5 t f
+1928 range 量程 Constant \N (0,100) 0 \N \N mm 2018-01-24 11:33:34.55+08 2018-01-24 11:33:34.55+08 27930598-2f6e-4932-a816-9685f17969b5 5 t f
+1932 moduleId 模块号 Variable \N 1 0 \N 2018-01-24 11:33:34.558+08 2018-03-02 15:36:16.388+08 27930598-2f6e-4932-a816-9685f17969b5 5 t f
+2249 range 量程 Constant \N (-136,136) 0 kN 2018-03-26 11:35:23.231+08 2018-03-26 11:37:37.858+08 aab61193-270e-4d06-9bdf-9da5194c744a 5 t f
+2246 devicetype 设备类型 Constant \N sensor 0 2018-03-26 11:35:23.224+08 2018-04-09 15:04:03.661+08 aab61193-270e-4d06-9bdf-9da5194c744a 5 t f
+2247 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 11:35:23.227+08 2018-04-09 15:04:08.042+08 aab61193-270e-4d06-9bdf-9da5194c744a 5 t f
+2248 protocolcode 协议号 Constant \N 1401 0 2018-03-26 11:35:23.23+08 2018-04-09 15:04:14.653+08 aab61193-270e-4d06-9bdf-9da5194c744a 5 t f
+2240 devicetype 设备类型 Constant \N sensor 0 2018-03-26 11:35:23.118+08 2018-04-09 15:04:33.17+08 0b09cbd9-3881-4b4a-8910-0e8730d5d935 5 t f
+2241 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 11:35:23.12+08 2018-04-09 15:04:37.659+08 0b09cbd9-3881-4b4a-8910-0e8730d5d935 5 t f
+2242 protocolcode 协议号 Constant \N 1401 0 2018-03-26 11:35:23.122+08 2018-04-09 15:04:45.079+08 0b09cbd9-3881-4b4a-8910-0e8730d5d935 5 t f
+2525 sensortype 传感器类型 Constant \N \N yc \N \N \N 2018-08-01 09:10:55.391+08 2018-08-01 09:10:55.391+08 75c932d0-2df0-4628-81dd-0e9c1f11ff60 5 t f
+2526 protocolcode 协议号 Constant \N 9002 0 \N 2018-08-01 09:17:02.484+08 2018-08-01 09:18:40.002+08 9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec 5 t f
+2528 sensortype 传感器类型 Constant \N \N yc \N \N \N \N 2018-08-01 09:31:53.994+08 2018-08-01 09:31:53.994+08 76288807-186e-4444-a1ce-6be599aacfd2 5 t f
+2834 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 14:25:00.176+08 2019-02-25 14:25:00.176+08 3d19a0b1-da48-466d-88d1-dc7c1f73bc68 5 t f
+2835 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 14:25:00.185+08 2019-02-25 14:25:00.185+08 3d19a0b1-da48-466d-88d1-dc7c1f73bc68 1 t f
+2836 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 14:25:00.195+08 2019-02-25 14:25:00.195+08 3d19a0b1-da48-466d-88d1-dc7c1f73bc68 5 t f
+2837 range 量程 Constant \N (-3000,3000) 0 \N \N με 2019-02-25 14:25:00.197+08 2019-02-25 14:25:00.197+08 3d19a0b1-da48-466d-88d1-dc7c1f73bc68 5 t f
+2921 Url URL Variable \N \N http://www.jsjtm.com.cn:8080/api/RawData/GetRawDataList \N \N \N \N 2019-03-15 13:42:26.342+08 2019-03-15 13:42:26.342+08 2f25fa6f-a99e-440e-ac0a-29ada5069d4f 5 t f
+3001 am2305_pre 执行前延迟-AM2305 Variable \N 25 0 600 0 百毫秒 2019-03-28 10:42:06.789+08 2019-04-02 09:54:52.459+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 1 t f
+2984 aqi_p6 系数-交叉干扰K1 Variable \N 1 16 9999 -9999 2019-03-27 20:43:46.032+08 2019-04-08 13:52:03.449+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 2 t t
+2985 aqi_p7 系数-交叉干扰K2 Variable \N 0.15 16 9999 -9999 2019-03-27 20:44:46.895+08 2019-04-08 13:52:06.517+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 2 t t
+2994 pm10_post 读取记录前延迟-PM10 Variable \N 35 0 600 0 百毫秒 2019-03-28 10:00:08.152+08 2019-04-02 09:56:41.692+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 1 t f
+1912 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-24 11:30:26.799+08 2018-01-24 11:30:26.799+08 1d48c633-6d83-4b96-a572-6f59a0100c9b 1 t f
+1913 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-24 11:30:26.801+08 2018-01-24 11:30:26.801+08 1d48c633-6d83-4b96-a572-6f59a0100c9b 5 t f
+1906 range 量程 Constant \N (0,100) 0 mm 2018-01-24 11:30:26.785+08 2018-01-24 11:31:39.219+08 1d48c633-6d83-4b96-a572-6f59a0100c9b 5 t f
+1916 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-24 11:32:25.019+08 2018-01-24 11:32:25.019+08 50600703-5c4c-4ceb-a44d-d0b79882b1dc 1 t f
+1917 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-24 11:32:25.021+08 2018-01-24 11:32:25.021+08 50600703-5c4c-4ceb-a44d-d0b79882b1dc 5 t f
+2261 range 量程 Constant \N (0,0.2) 0 MPa 2018-03-26 11:41:39.472+08 2018-03-26 11:42:18.406+08 fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45 5 t f
+1919 range 量程 Constant \N (0,200) 0 mm 2018-01-24 11:32:25.025+08 2018-01-24 11:32:45.539+08 50600703-5c4c-4ceb-a44d-d0b79882b1dc 5 t f
+1923 moduleId 模块号 Variable \N 1 0 \N 2018-01-24 11:32:25.032+08 2018-03-02 15:36:22.959+08 50600703-5c4c-4ceb-a44d-d0b79882b1dc 5 t f
+2267 range 量程 Constant \N (0,0.4) 0 MPa 2018-03-26 11:43:22.772+08 2018-03-26 11:44:00.985+08 a9d42f6d-8409-415c-937e-aea8bebf7a50 5 t f
+2273 range 量程 Constant \N (0,0.8) 0 MPa 2018-03-26 11:43:22.892+08 2018-03-26 11:44:54.88+08 3aba791d-d6b2-4175-bb20-109f210f4065 5 t f
+2279 range 量程 Constant \N (0,1) 0 MPa 2018-03-26 11:43:23.215+08 2018-03-26 11:46:52.893+08 0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83 5 t f
+2291 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 13:48:02.838+08 2018-03-26 13:48:02.838+08 b77b1ad2-2546-4219-bbe8-dc6b71d7fe01 1 t f
+2293 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 13:53:09.465+08 2018-03-26 13:53:09.465+08 73a7b800-25d7-41ad-872d-96cc4f9430de 1 t f
+2285 range 量程 Constant \N (0,2) 0 MPa 2018-03-26 11:43:24.242+08 2018-03-26 14:03:08.42+08 f30482b9-b518-4048-8217-bd64158911e6 5 t f
+2296 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 14:13:30.072+08 2018-03-26 14:13:30.072+08 d2a5375c-0240-4435-9b8f-a62372fafaca 5 t f
+2298 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 14:20:54.027+08 2018-03-26 14:20:54.027+08 ccb72dc5-f9bc-424d-a3ec-e6e9121bc534 5 t f
+2304 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 14:37:02.797+08 2018-03-26 14:37:02.797+08 90a2bc12-2214-43ff-9154-9b9212de2c10 5 t f
+2305 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 14:37:26.71+08 2018-03-26 14:37:26.71+08 90a2bc12-2214-43ff-9154-9b9212de2c10 2 t f
+2308 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 15:01:23.402+08 2018-03-26 15:01:23.402+08 5e7775c1-0766-436e-b701-b1102833b98d 5 t f
+2316 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 15:20:41.593+08 2018-03-26 15:20:41.593+08 f6b98e0f-0bfe-4a95-808c-d6d10b4c803b 5 t f
+2317 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 15:21:13.874+08 2018-03-26 15:21:13.874+08 f6b98e0f-0bfe-4a95-808c-d6d10b4c803b 1 t f
+2319 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 15:26:03.935+08 2018-03-26 15:26:03.935+08 1bcd78b8-bd96-4c95-8e19-27a1ac7356c9 1 t f
+2320 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 15:34:28.816+08 2018-03-26 15:34:28.816+08 8bab3e11-dc23-4082-97ec-a04e78fa19c3 5 t f
+2323 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 15:41:51.233+08 2018-03-26 15:41:51.233+08 37c046eb-9a0e-49b0-95fb-f0128338f381 1 t f
+2326 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 15:52:20.914+08 2018-03-26 15:52:20.914+08 cb4eb310-0876-492a-9e06-8cd0a5542c5b 5 t f
+2284 protocolcode 协议号 Constant \N 1401 0 2018-03-26 11:43:24.24+08 2018-04-09 14:58:33.542+08 f30482b9-b518-4048-8217-bd64158911e6 5 t f
+2283 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 11:43:24.238+08 2018-04-09 14:58:38.296+08 f30482b9-b518-4048-8217-bd64158911e6 5 t f
+2282 devicetype 设备类型 Constant \N sensor 0 2018-03-26 11:43:24.236+08 2018-04-09 14:58:43.621+08 f30482b9-b518-4048-8217-bd64158911e6 5 t f
+2278 protocolcode 协议号 Constant \N 1401 0 2018-03-26 11:43:23.211+08 2018-04-09 14:59:02.954+08 0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83 5 t f
+2277 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 11:43:23.207+08 2018-04-09 14:59:09.644+08 0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83 5 t f
+2276 devicetype 设备类型 Constant \N sensor 0 2018-03-26 11:43:23.203+08 2018-04-09 14:59:14.7+08 0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83 5 t f
+2270 devicetype 设备类型 Constant \N sensor 0 2018-03-26 11:43:22.885+08 2018-04-09 15:00:15.4+08 3aba791d-d6b2-4175-bb20-109f210f4065 5 t f
+2271 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 11:43:22.888+08 2018-04-09 15:00:24.731+08 3aba791d-d6b2-4175-bb20-109f210f4065 5 t f
+2272 protocolcode 协议号 Constant \N 1401 0 2018-03-26 11:43:22.89+08 2018-04-09 15:00:30.818+08 3aba791d-d6b2-4175-bb20-109f210f4065 5 t f
+2264 devicetype 设备类型 Constant \N sensor 0 2018-03-26 11:43:22.766+08 2018-04-09 15:01:16.075+08 a9d42f6d-8409-415c-937e-aea8bebf7a50 5 t f
+2265 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 11:43:22.768+08 2018-04-09 15:01:21.352+08 a9d42f6d-8409-415c-937e-aea8bebf7a50 5 t f
+2266 protocolcode 协议号 Constant \N 1401 0 2018-03-26 11:43:22.77+08 2018-04-09 15:01:26.589+08 a9d42f6d-8409-415c-937e-aea8bebf7a50 5 t f
+2258 devicetype 设备类型 Constant \N sensor 0 2018-03-26 11:41:39.466+08 2018-04-09 15:01:53.721+08 fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45 5 t f
+2259 sensortype 传感器类型 Constant \N zx 0 \N 2018-03-26 11:41:39.468+08 2018-04-09 15:01:59.725+08 fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45 5 t f
+2260 protocolcode 协议号 Constant \N 1401 0 2018-03-26 11:41:39.47+08 2018-04-09 15:02:06.142+08 fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45 5 t f
+2530 sensortype 设备类型 Constant \N \N ZX \N \N \N \N 2018-08-02 09:59:23.042+08 2018-08-02 09:59:23.042+08 915fc949-c75f-47a9-8ba5-f516f0eb6228 5 t f
+2531 Device_ID 设备ID Variable \N 0 \N \N \N 传感器唯一ID号 2018-08-02 10:37:02.622+08 2018-08-02 10:37:02.622+08 e1f36777-486a-4527-a30f-61d17b7a8796 5 t f
+2762 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 13:31:57.696+08 2019-02-25 13:31:57.696+08 9768653f-3bb0-4f60-9842-ed5df2685dc4 5 t f
+2763 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 13:31:57.699+08 2019-02-25 13:31:57.699+08 9768653f-3bb0-4f60-9842-ed5df2685dc4 5 t f
+2764 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 13:31:57.702+08 2019-02-25 13:31:57.702+08 9768653f-3bb0-4f60-9842-ed5df2685dc4 1 t f
+2766 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 13:31:57.707+08 2019-02-25 13:31:57.707+08 9768653f-3bb0-4f60-9842-ed5df2685dc4 1 t f
+2767 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 13:31:57.709+08 2019-02-25 13:31:57.709+08 9768653f-3bb0-4f60-9842-ed5df2685dc4 5 t f
+1949 moduleId 模块号 Variable \N 1 0 \N 2018-01-24 11:34:50.418+08 2018-03-02 15:36:00.824+08 362018b7-e626-4eab-a6ad-214d85cfcc03 5 t f
+1940 moduleId 模块号 Variable \N 1 0 \N 2018-01-24 11:34:49.504+08 2018-03-02 15:36:08.792+08 e5f12d4b-bb3c-4158-b98e-8af3579bd2cc 5 t f
+2286 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 13:34:08.546+08 2018-03-26 13:34:08.546+08 0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1 5 t f
+2765 range 量程 Constant \N (-600,600) 0 t 2019-02-25 13:31:57.704+08 2020-04-14 10:16:56.448+08 9768653f-3bb0-4f60-9842-ed5df2685dc4 5 t f
+1938 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-24 11:34:49.5+08 2018-01-24 11:34:49.5+08 e5f12d4b-bb3c-4158-b98e-8af3579bd2cc 5 t f
+1939 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-24 11:34:49.502+08 2018-01-24 11:34:49.502+08 e5f12d4b-bb3c-4158-b98e-8af3579bd2cc 1 t f
+2294 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 14:01:59.543+08 2018-03-26 14:01:59.543+08 abaf6bf4-288f-4d21-9fab-515213e6dcac 5 t f
+2301 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 14:25:53.787+08 2018-03-26 14:25:53.787+08 780ffe7d-7369-4d2f-9184-32790466f2ba 1 t f
+2302 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 14:28:35.368+08 2018-03-26 14:28:35.368+08 424f45f6-916c-4383-bce4-c71153f82e63 5 t f
+2315 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 15:17:25.363+08 2018-03-26 15:17:25.363+08 bbfa13d3-fd42-4230-97e6-792463dbaf85 1 t f
+2318 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 15:25:44.717+08 2018-03-26 15:25:44.717+08 1bcd78b8-bd96-4c95-8e19-27a1ac7356c9 5 t f
+1947 deviceType 设备类型 Constant \N \N sensor \N \N \N 2018-01-24 11:34:50.414+08 2018-01-24 11:34:50.414+08 362018b7-e626-4eab-a6ad-214d85cfcc03 5 t f
+1948 channelId 通道号 Variable \N \N 1 \N 128 1 2018-01-24 11:34:50.416+08 2018-01-24 11:34:50.416+08 362018b7-e626-4eab-a6ad-214d85cfcc03 1 t f
+2324 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 15:46:05.401+08 2018-03-26 15:46:05.401+08 c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d 5 t f
+1934 range 量程 Constant \N (0,50) 0 mm 2018-01-24 11:34:49.493+08 2018-01-24 11:35:13.384+08 e5f12d4b-bb3c-4158-b98e-8af3579bd2cc 5 t f
+1943 range 量程 Constant \N (0,200) 0 mm 2018-01-24 11:34:50.407+08 2018-01-24 11:35:50.56+08 362018b7-e626-4eab-a6ad-214d85cfcc03 5 t f
+1960 lng 经度 Variable \N \N \N 6 180 0 \N 2018-01-24 22:05:34.245+08 2018-01-24 22:05:34.245+08 7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4 2 t f
+1961 lat 纬度 Variable \N \N \N 6 90 0 2018-01-24 22:05:34.249+08 2018-01-24 22:05:34.249+08 7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4 2 t f
+1962 speed 车速 Variable \N \N \N 2 220 0 km/h 2018-01-24 22:05:34.254+08 2018-01-24 22:05:34.254+08 7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4 2 t f
+1963 电压 电压 Variable \N \N true \N \N \N 伏特 2018-01-26 09:39:05.325+08 2018-01-26 09:39:05.325+08 7697d048-c21e-4b28-8c88-a59de01bae96 3 t f
+1964 1 1 Variable \N 1 \N \N \N \N \N 2018-01-26 12:00:59.939+08 2018-01-26 12:00:59.939+08 7697d048-c21e-4b28-8c88-a59de01bae96 4 t f
+1965 2 Variable \N \N 1 \N \N \N 2018-01-26 12:01:10.736+08 2018-01-26 12:01:10.736+08 7697d048-c21e-4b28-8c88-a59de01bae96 6 t f
+1967 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-30 17:26:52.489+08 2018-01-30 17:26:52.489+08 67becf68-18c7-4ab3-83b2-d306f89bd25d 5 t f
+1968 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-01-30 17:38:49.933+08 2018-01-30 17:38:49.933+08 745e1f26-ee66-45dd-9606-052a34a944fc 5 t f
+1982 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-05 14:54:12.683+08 2018-02-05 14:54:12.683+08 d148ae2e-c0dd-4e57-a0e8-833d32107f31 5 t f
+1983 test test Variable \N \N 50 \N 100 10 aaa aaaaa 2018-02-06 16:34:19.424+08 2018-02-06 16:34:19.424+08 9497edfc-bee0-4aac-b65d-2f1af60cc760 1 t f
+1984 test2 test2 Variable \N \N aaa \N \N \N aaaaa aaaaaa 2018-02-06 16:34:19.431+08 2018-02-06 16:34:19.431+08 9497edfc-bee0-4aac-b65d-2f1af60cc760 5 t f
+1981 devicetype 设备类型 Constant \N sensor 0 2018-02-05 11:22:03.801+08 2018-04-09 15:09:59.656+08 2e2456a6-9738-456c-abf1-94d5ebad124a 5 t f
+1986 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-06 17:17:32.205+08 2018-02-06 17:17:32.205+08 7fefd73e-8fd9-48a6-8d7a-76f5796a8197 5 t f
+1987 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-06 17:32:56.532+08 2018-02-06 17:32:56.532+08 9137c92c-6de6-4b00-bafc-a995288280f7 5 t f
+1988 test2 \N Variable \N \N \N \N 111 50 \N 2018-02-06 17:44:49.273+08 2018-02-06 17:44:49.273+08 edcdb4a2-9f82-46d7-bba1-3ebb4f69483e 1 t f
+1989 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-07 09:45:44.219+08 2018-02-07 09:45:44.219+08 5ecfc751-afb0-4596-a6f7-85a31eca40c3 5 t f
+1990 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-07 16:40:02.724+08 2018-02-07 16:40:02.724+08 aaa7d270-43dc-4864-bb0a-967c33658698 5 t f
+1991 channelId 通道号 Variable \N \N 1 \N \N \N 2018-02-07 16:40:02.73+08 2018-02-07 16:40:02.73+08 aaa7d270-43dc-4864-bb0a-967c33658698 5 t f
+1992 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-09 14:00:33.319+08 2018-02-09 14:00:33.319+08 ee8205dc-c9b0-4c29-b85f-9a54216ab198 5 t f
+1994 channelId 通道号 Variable \N \N 1 \N \N \N \N 2018-02-11 16:58:22.027+08 2018-02-11 16:58:22.027+08 c98659b5-30ec-471f-9654-41f5f8df47b0 5 t f
+1995 moduleId 模块号 Variable \N \N 1 \N \N \N 2018-02-11 16:58:22.031+08 2018-02-11 16:58:22.031+08 c98659b5-30ec-471f-9654-41f5f8df47b0 5 t f
+1996 channelId 通道号 Variable \N \N 1 \N \N \N \N 2018-02-11 16:59:37.27+08 2018-02-11 16:59:37.27+08 d87be87a-12ba-4e65-97ba-816bcb3e2e62 5 t f
+1997 channelId 通道号 Variable \N \N 1 \N \N \N \N 2018-02-11 17:02:18.535+08 2018-02-11 17:02:18.535+08 9137c92c-6de6-4b00-bafc-a995288280f7 5 t f
+1993 channelId 通道号 Variable \N 1 0 \N 2018-02-11 16:51:13.583+08 2018-02-11 17:02:38.884+08 7fefd73e-8fd9-48a6-8d7a-76f5796a8197 5 t f
+1998 channelId 通道号 Variable \N \N 1 \N \N \N \N 2018-02-11 17:07:24.786+08 2018-02-11 17:07:24.786+08 fdf34922-d64e-4616-9313-96d7d94b8412 5 t f
+1976 devicetype 设备类型 Constant \N sensor 0 2018-02-05 11:21:49.807+08 2018-04-09 15:11:04.772+08 0f4f59de-cde7-4aec-a402-703e5426bb76 5 t f
+1974 devicetype 设备类型 Constant \N sensor 0 2018-02-05 11:21:34.57+08 2018-04-09 15:11:34.831+08 cef1d2a2-c44e-4143-84bd-2a65140e33d0 5 t f
+1971 devicetype 设备类型 Constant \N sensor 0 2018-02-05 11:21:19.497+08 2018-04-09 15:12:21.336+08 9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8 5 t f
+2532 sensortype 设备类型 Constant \N 485 0 \N 2018-08-03 07:13:57.976+08 2018-08-03 07:33:47.903+08 cd27d23f-a55d-4ce0-8c59-33675bb5ad62 5 t f
+2684 ranges \N Constant \N -180,180 0 ° 2018-12-24 11:48:02.134+08 2018-12-24 11:49:11.816+08 fc561f5f-92c8-4549-8e02-dd01dd276aef 5 t f
+2768 moduleId 模块号 Variable \N 1 0 \N \N \N 2019-02-25 13:32:42.954+08 2019-02-25 13:32:42.954+08 c952a71d-a917-40a7-aecc-cf2dc40c238a 5 t f
+2769 deviceType 设备类型 Constant \N \N sensor \N \N \N 2019-02-25 13:32:42.957+08 2019-02-25 13:32:42.957+08 c952a71d-a917-40a7-aecc-cf2dc40c238a 5 t f
+2770 channelId 通道号 Variable \N \N 1 \N 128 1 2019-02-25 13:32:42.96+08 2019-02-25 13:32:42.96+08 c952a71d-a917-40a7-aecc-cf2dc40c238a 1 t f
+2772 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-02-25 13:32:42.965+08 2019-02-25 13:32:42.965+08 c952a71d-a917-40a7-aecc-cf2dc40c238a 5 t f
+1999 moduleId 模块号 Variable \N \N 1 \N \N \N 2018-02-11 17:07:24.789+08 2018-02-11 17:07:24.789+08 fdf34922-d64e-4616-9313-96d7d94b8412 5 t f
+2000 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-11 17:16:18.672+08 2018-02-11 17:16:18.672+08 b53146b9-7737-46cd-a305-e2c9cb286d3d 5 t f
+2001 channelId 通道号 Variable \N \N 1 \N \N \N 2018-02-11 17:16:18.674+08 2018-02-11 17:16:18.674+08 b53146b9-7737-46cd-a305-e2c9cb286d3d 5 t f
+2002 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-27 09:46:30.779+08 2018-02-27 09:46:30.779+08 a8e0db23-0d35-4eb1-a5b8-deadd9c3d80d 5 t f
+2004 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-28 16:01:53.185+08 2018-02-28 16:01:53.185+08 12adcb99-432b-46f5-9240-dad30ec75ea6 5 t f
+2005 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-28 16:21:12.186+08 2018-02-28 16:21:12.186+08 bcc5cadb-0395-464b-8ead-ac3917b49e30 5 t f
+2006 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-28 16:21:13.132+08 2018-02-28 16:21:13.132+08 8e752366-9256-4bab-a79b-276a89aea484 5 t f
+2007 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-28 16:21:13.703+08 2018-02-28 16:21:13.703+08 87bf38c3-0b08-4bcf-98b4-12060fd9a345 5 t f
+2008 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-28 16:21:14.336+08 2018-02-28 16:21:14.336+08 167d20c6-d128-4532-9974-d4a55788823e 5 t f
+2009 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-28 16:48:43.064+08 2018-02-28 16:48:43.064+08 10ac4010-ff56-4d05-9e45-55f84f4292aa 5 t f
+2010 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-28 16:48:44.8+08 2018-02-28 16:48:44.8+08 1f16c362-1f8e-4cbc-8b2c-8f43dd306390 5 t f
+2011 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-28 16:48:45.394+08 2018-02-28 16:48:45.394+08 8571c1b0-8472-45b5-955f-5a7614a2f08c 5 t f
+2012 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-28 16:48:46.028+08 2018-02-28 16:48:46.028+08 a570a2de-ca66-488a-a078-6c6b14b71f2a 5 t f
+2013 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-02-28 16:48:46.695+08 2018-02-28 16:48:46.695+08 d54f6d25-04dc-4847-8dda-9c54d54b2d8f 5 t f
+2287 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 13:34:32.969+08 2018-03-26 13:34:32.969+08 0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1 1 t f
+2292 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 13:52:53.778+08 2018-03-26 13:52:53.778+08 73a7b800-25d7-41ad-872d-96cc4f9430de 5 t f
+2299 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 14:21:10.737+08 2018-03-26 14:21:10.737+08 ccb72dc5-f9bc-424d-a3ec-e6e9121bc534 1 t f
+2306 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 14:44:34.677+08 2018-03-26 14:44:34.677+08 5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8 5 t f
+2023 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2018-03-01 14:29:42.739+08 2018-03-01 14:29:42.739+08 c69575ab-795c-45ec-8901-f370255beff1 5 t f
+2024 channelId 通道号 Variable \N \N 1 \N 128 1 2018-03-01 14:29:42.743+08 2018-03-01 14:29:42.743+08 c69575ab-795c-45ec-8901-f370255beff1 1 t f
+952 range 量程 Constant \N (-105,105) 0 kN 正值是张拉力,负值是承压力 2018-01-05 15:17:15.15+08 2018-03-02 10:45:33.371+08 473aee20-7c00-41cd-bd6e-b44c35c758ea 5 t f
+2309 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 15:01:49.752+08 2018-03-26 15:01:49.752+08 5e7775c1-0766-436e-b701-b1102833b98d 1 t f
+2310 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 15:07:47.836+08 2018-03-26 15:07:47.836+08 099c6283-519f-4946-aa9d-f0059a76b832 5 t f
+2311 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 15:08:24.496+08 2018-03-26 15:08:24.496+08 099c6283-519f-4946-aa9d-f0059a76b832 1 t f
+2313 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 15:12:58.27+08 2018-03-26 15:12:58.27+08 c0cde67c-9734-4a3c-bb52-0caba0ae8724 1 t f
+2314 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2018-03-26 15:17:00.475+08 2018-03-26 15:17:00.475+08 bbfa13d3-fd42-4230-97e6-792463dbaf85 5 t f
+2321 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 15:35:21.33+08 2018-03-26 15:35:21.33+08 8bab3e11-dc23-4082-97ec-a04e78fa19c3 1 t f
+2325 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2018-03-26 15:46:20.884+08 2018-03-26 15:46:20.884+08 c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d 1 t f
+2685 ranges \N Constant \N -60,60 0 ° 2018-12-24 11:53:24.895+08 2018-12-24 14:15:39.179+08 6f051a40-1c14-47c6-8124-3077f27facc5 5 t f
+2773 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-02-25 13:32:42.968+08 2019-02-25 13:32:42.968+08 c952a71d-a917-40a7-aecc-cf2dc40c238a 1 t f
+2922 sensortype 设备类型 Constant \N \N ZX \N \N \N \N 2019-03-15 14:35:35.888+08 2019-03-15 14:35:35.888+08 df22cddf-5a50-41f7-980a-0bbef6aeb763 5 t f
+2975 weakupdelay 唤醒延迟 Variable \N 20 0 65535 1 s 2019-03-27 20:10:04.436+08 2019-03-27 20:10:59.954+08 d8de8739-f146-41e0-877e-747f30ac59a7 1 t f
+3002 k 模量系数 Variable \N \N 1 16 99999 -99999 \N 2019-03-28 17:24:57.528+08 2019-03-28 17:24:57.528+08 fde20cf0-6bb6-4987-8830-dec5aa5874f2 2 t f
+3008 electricity 电量 Variable \N \N 50 \N 100 0 % 2019-04-04 11:01:54.211+08 2019-04-04 11:01:54.211+08 fde20cf0-6bb6-4987-8830-dec5aa5874f2 1 t f
+3009 value 参数值 Variable \N \N 6 99999 0 2019-04-04 11:32:30.475+08 2019-04-04 11:32:30.475+08 cecf35d0-533a-45cd-b740-42f93c4f3df2 2 t f
+3010 num 参数编号 Variable \N PM2.5系数A,PM2.5系数B,PM10系数A,PM10系数B,噪声系数A,噪声系数B,温度系数B,湿度系数B,风速系数B,联动阈值,控制回差 PM2.5系数A 0 \N \N \N 2019-04-04 11:32:30.478+08 2019-04-04 11:32:30.478+08 cecf35d0-533a-45cd-b740-42f93c4f3df2 4 t f
+3011 sensortype 设备类型 Constant \N \N QZY \N \N \N \N 2019-04-08 13:51:42.519+08 2019-04-08 13:51:42.519+08 7f81d1d0-150c-49d4-9b52-4eda0387c996 5 t f
+2980 aqi_p2 系数-O3 Variable \N 1 16 9999 -9999 2019-03-27 20:23:08.338+08 2019-04-08 13:52:17.001+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 2 t t
+2977 pm10_p1 系数-PM2.5 Variable \N 1 16 9999 -9999 2019-03-27 20:17:41.278+08 2019-04-08 13:52:19.958+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 2 t t
+2986 aqi_p8 系数-交叉干扰K3 Variable \N 0.4 16 9999 -9999 2019-03-27 20:46:39.33+08 2019-04-08 13:52:27.543+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 2 t t
+2979 aqi_p1 系数-CO Variable \N 1 16 9999 -9999 2019-03-27 20:19:12.285+08 2019-04-08 13:52:46.088+08 0f3aa84f-d64b-4135-8ce1-f3a704751a4c 2 t t
+3012 sensortype 设备类型 Constant \N \N prism_L \N \N \N \N 2019-04-08 14:21:05.473+08 2019-04-08 14:21:05.473+08 b73a2e67-7654-49ce-890a-7c2dfec89a03 5 t f
+3013 sensortype 设备类型 Constant \N bj 0 \N 2019-04-16 11:25:00.683+08 2019-04-16 11:25:04.649+08 85e05ea0-94ca-4806-9393-78780b771a4b 5 t f
+3014 sensortype 设备类型 Constant \N \N laser \N \N \N \N 2019-04-16 11:25:50.032+08 2019-04-16 11:25:50.032+08 82e60098-d956-499c-97c8-810ba64a8589 5 t f
+3016 sensortype 传感器类型 Constant \N gnss 0 \N 2019-04-18 17:15:46.695+08 2019-04-18 17:18:54.634+08 a1923ce2-b8a5-45cb-9d98-6a42901cee7c 5 t f
+3017 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-04-18 17:58:14.599+08 2019-04-18 17:58:14.599+08 6bc95aa6-88cd-4473-98fc-7f4a1d76fc4a 5 t f
+3018 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2019-04-18 17:58:14.602+08 2019-04-18 17:58:14.602+08 6bc95aa6-88cd-4473-98fc-7f4a1d76fc4a 1 t f
+3019 sensortype 设备类型 Constant \N \N yc \N \N \N \N 2019-04-18 18:47:42.239+08 2019-04-18 18:47:42.239+08 f929d6c9-de63-4cb0-89f9-f9e7a22cbadb 5 t f
+3020 protocolcode 协议号 Constant \N \N 9002 \N \N \N 2019-04-18 18:47:42.243+08 2019-04-18 18:47:42.243+08 f929d6c9-de63-4cb0-89f9-f9e7a22cbadb 5 t f
+3021 mouduleId 模块号 Variable \N \N 1 \N \N \N \N 2019-04-19 13:38:21.231+08 2019-04-19 13:38:21.231+08 efdfb5bf-1488-40b5-825f-629d60ebe7f7 5 t f
+3023 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2019-04-22 13:13:08.926+08 2019-04-22 13:13:08.926+08 5d98962d-dbd8-4688-ae48-dbebdce861f6 5 t f
+3024 range 量程 Variable \N (0,1000) 0 mm 2019-04-22 13:13:08.93+08 2019-04-22 13:15:07.69+08 5d98962d-dbd8-4688-ae48-dbebdce861f6 5 t f
+3025 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2019-04-23 14:22:13.677+08 2019-04-23 14:22:13.677+08 fb1aa362-5048-47df-a1b3-89bc55bfe786 5 t f
+3026 range 量程 Variable \N (0,2500) 0 mm 2019-04-23 14:22:13.68+08 2019-04-23 14:23:11.711+08 fb1aa362-5048-47df-a1b3-89bc55bfe786 5 t f
+3027 sensortype 输出类型 Constant \N V1 0 \N 2019-04-23 16:05:41.916+08 2019-04-23 16:06:07.911+08 2698c5d7-398d-41ad-bdea-68e26f77a6bd 5 t f
+3028 sensortype 输出类型 Constant \N \N V1 \N \N \N \N 2019-04-23 16:06:28.893+08 2019-04-23 16:06:28.893+08 272894c2-dcd9-4a14-8205-f1e9a093f3cd 5 t f
+3029 sensortype 输出类型 Constant \N \N V1 \N \N \N \N 2019-04-24 17:07:37.293+08 2019-04-24 17:07:37.293+08 29a8cde9-51c6-4647-8153-de06449e2ba2 5 t f
+3030 sensortype 输出类型 Constant \N \N V1 \N \N \N \N 2019-04-24 17:07:56.656+08 2019-04-24 17:07:56.656+08 0ffa5291-87ea-4e05-b031-ef948c53b474 5 t f
+3033 属性A 属性A Variable \N \N true \N \N \N \N 2019-04-26 13:07:35.57+08 2019-04-26 13:07:35.57+08 d59a244e-554e-478d-b874-b75dc0dff2b5 3 t f
+3038 deviceSerial 序列号 Variable \N \N \N \N \N 2019-04-30 09:49:47.713+08 2019-04-30 09:49:47.713+08 a9dc9dd4-9a62-4dfa-968a-69e2c4472a0a 5 t f
+3040 环境 \N Variable \N \N \N 2 99.99 0.00 \N 2019-05-06 10:14:28.467+08 2019-05-06 10:14:28.467+08 9ac9f312-0f0e-45d4-8d00-8420be016826 2 t f
+3037 tokenUrl URL Variable \N 0 \N 2019-04-30 09:49:47.705+08 2019-05-06 14:55:49.806+08 a9dc9dd4-9a62-4dfa-968a-69e2c4472a0a 5 t f
+3042 secret 密码 Variable \N \N \N \N \N 2019-05-06 14:57:11.472+08 2019-05-06 14:57:11.472+08 a9dc9dd4-9a62-4dfa-968a-69e2c4472a0a 5 t f
+3041 username 用户名 Variable \N 0 \N 2019-05-06 14:56:10.407+08 2019-05-06 15:21:08.63+08 a9dc9dd4-9a62-4dfa-968a-69e2c4472a0a 5 t f
+3075 temps Temperature zone Constant \N \N 1 \N \N \N \N 2019-05-20 14:00:03.739+08 2019-05-20 14:00:03.739+08 ecad4b77-ab58-460f-8469-b89b3c77d796 1 t f
+3048 K1 K1一次项系数 Variable \N 1 16 999999999999999 -99999999999999 \N 2019-05-07 10:31:26.487+08 2019-05-07 10:57:42.853+08 ef966a9a-d938-4526-af04-cee74ea9b600 2 t f
+3049 K2 K2二次项系数 Variable \N 0 16 9999999999999999 -99999999999999999999 2019-05-07 10:31:52.779+08 2019-05-07 10:57:52.361+08 ef966a9a-d938-4526-af04-cee74ea9b600 2 t f
+3050 K3 K3三次项系数 Variable \N 0 16 99999999999999999 -999999999999999999999 2019-05-07 10:32:21.247+08 2019-05-07 10:58:00.553+08 ef966a9a-d938-4526-af04-cee74ea9b600 2 t f
+3051 Fo Fo基准读数 Variable \N 0 3 99999999999999999 -99999999999999 2019-05-07 10:33:11.734+08 2019-05-07 11:22:03.09+08 ef966a9a-d938-4526-af04-cee74ea9b600 2 t f
+3054 channel Channel Variable \N 1,2,3,4 4 \N \N \N \N 2019-05-08 17:53:13.493+08 2019-05-08 17:53:13.493+08 1c6ea7b5-ffd8-4e6c-b190-c2cbdbe65a17 4 t f
+3058 devType DeviceType Constant \N REFRIGERATOR 0 \N 2019-05-08 18:21:35.997+08 2019-05-08 18:22:15.85+08 ecad4b77-ab58-460f-8469-b89b3c77d796 5 t f
+3061 channel Channel Variable \N 1,2,3,4 1 \N \N \N \N 2019-05-08 19:46:22.176+08 2019-05-08 19:46:22.176+08 ecad4b77-ab58-460f-8469-b89b3c77d796 4 t f
+3070 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2019-05-15 10:32:01.181+08 2019-05-15 10:32:01.181+08 6474815f-e86c-4909-966f-5fb6efc5c674 5 t f
+3091 account 账号 Variable \N \N \N \N \N \N 2019-05-30 11:20:53.245+08 2019-05-30 11:20:53.245+08 7f382df2-35f7-4128-9276-d2a3a40d6547 5 t f
+3071 interval 采集间隔 Variable \N 60 0 120 0 s 2019-05-16 17:40:04.222+08 2019-05-16 17:56:15.053+08 ff67a769-94ed-4f3d-b944-b1f4d4468eec 1 t f
+3092 pw 密码 Variable \N \N \N \N \N 2019-05-30 11:20:53.247+08 2019-05-30 11:20:53.247+08 7f382df2-35f7-4128-9276-d2a3a40d6547 5 t f
+3055 devType DeviceType Constant \N INDOORTEMPSENSOR 0 2019-05-08 17:56:10.915+08 2019-05-20 14:09:07.28+08 1c6ea7b5-ffd8-4e6c-b190-c2cbdbe65a17 5 t f
+3077 initConsumption Init Consumption Variable \N \N 0 3 9999999 0.000 kWh Initial Power Consumption 2019-05-20 21:52:06.088+08 2019-05-20 21:52:06.088+08 ecad4b77-ab58-460f-8469-b89b3c77d796 2 t f
+3072 k 系数 Variable \N 1 6 99999 -99999 KN/Hz^2 2019-05-17 10:03:54.369+08 2019-05-17 16:10:39.725+08 82c4e869-135f-466b-af92-27b7979b1fd2 2 t f
+3073 f0 初始频率 Variable \N 0 6 99999 -99999 HZ 2019-05-17 10:04:52.928+08 2019-05-17 17:24:02.813+08 82c4e869-135f-466b-af92-27b7979b1fd2 2 t f
+3078 phaseVoltage Phase Voltage Variable \N 220,380 220 \N \N \N V 2019-05-22 13:16:07.517+08 2019-05-22 13:16:07.517+08 0a9ddd56-9373-42fc-b426-17797eeee64a 4 t f
+3079 phaseVoltage Phase Voltage Variable \N 220,380 220 \N \N \N V Phase Voltage 2019-05-22 15:21:44.232+08 2019-05-22 15:21:44.232+08 ecad4b77-ab58-460f-8469-b89b3c77d796 4 t f
+3093 boxId 云盒编号 Variable \N \N \N \N \N 2019-05-30 11:20:53.249+08 2019-05-30 11:20:53.249+08 7f382df2-35f7-4128-9276-d2a3a40d6547 5 t f
+3052 devType DeviceType Constant \N CDUENERGY 0 2019-05-08 11:17:27.695+08 2019-05-22 15:40:43.729+08 0a9ddd56-9373-42fc-b426-17797eeee64a 5 t f
+3056 doors Doors Constant \N 2 0 Doors count 2019-05-08 18:17:31.613+08 2019-05-19 01:23:02.143+08 ecad4b77-ab58-460f-8469-b89b3c77d796 1 t f
+3074 cycletime 采集周期 Variable \N \N 3600 \N 4294967295 0 秒 2019-05-20 10:06:23.377+08 2019-05-20 10:06:23.377+08 573fb497-e583-41c4-ba6b-ecf548921eaf 1 t f
+3076 initConsumption Init Consumption Variable \N 0.00 3 99999 -99999 KWh Initial Consumption 2019-05-20 21:46:10.186+08 2019-05-23 19:41:54.212+08 0a9ddd56-9373-42fc-b426-17797eeee64a 2 t f
+3081 channelId 通道号 Variable \N \N 1 \N 255 1 \N 2019-05-24 08:45:17+08 2019-05-24 08:45:17+08 6474815f-e86c-4909-966f-5fb6efc5c674 1 t f
+3094 tokenUrl tokenUrl Variable \N \N \N \N \N 2019-05-30 11:20:53.251+08 2019-05-30 11:20:53.251+08 7f382df2-35f7-4128-9276-d2a3a40d6547 5 t f
+3095 dataUrl dataUrl Variable \N \N \N \N \N 2019-05-30 11:20:53.253+08 2019-05-30 11:20:53.253+08 7f382df2-35f7-4128-9276-d2a3a40d6547 5 t f
+3085 sensortype 设备类型 Constant \N 485 0 2019-05-28 18:02:18.458+08 2019-05-29 15:24:59.019+08 290bae7d-a183-4af8-be82-963486855761 5 t f
+3100 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-06-11 15:50:05.715+08 2019-06-11 15:50:05.715+08 888fb650-543d-4141-a70e-7dff25dfffe7 5 t f
+3101 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-06-11 15:55:27.39+08 2019-06-11 15:55:27.39+08 2f885022-839d-4c38-ae7a-b4c9881ca394 5 t f
+3102 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-06-11 15:59:09.869+08 2019-06-11 15:59:09.869+08 c12a0cbf-c2fa-4f1e-a52e-e371df51e0fb 5 t f
+3104 sensortype 传感器类型 Constant \N \N standard \N \N \N \N 2019-06-11 16:14:17.1+08 2019-06-11 16:14:17.1+08 f93393d2-0bfd-4685-b6d9-31287c466007 5 t f
+3107 sensortype 传感器类型 Constant \N \N dy \N \N \N \N 2019-06-11 17:13:27.519+08 2019-06-11 17:13:27.519+08 6c6b5c79-b408-447c-b2b1-3ff7bf122a19 5 t f
+3108 sensortype 传感器类型 Constant \N \N dy \N \N \N \N 2019-06-11 17:18:00.742+08 2019-06-11 17:18:00.742+08 67f6e3ca-2368-45ff-a678-53f942e71caa 5 t f
+3109 sensortype 传感器类型 Constant \N \N dy \N \N \N \N 2019-06-11 17:20:41.981+08 2019-06-11 17:20:41.981+08 4f72b98e-690d-429f-9b64-ab8de1c41a0b 5 t f
+3110 sensortype 传感器类型 Constant \N \N dy \N \N \N \N 2019-06-11 17:24:10.325+08 2019-06-11 17:24:10.325+08 96e0e6a4-fb0a-4e01-ba5b-1ab1feff3aee 5 t f
+3111 sensortype 传感器类型 Constant \N \N standard \N \N \N \N 2019-06-11 17:28:58.637+08 2019-06-11 17:28:58.637+08 14068f43-74c6-48e8-b004-29eefa28fd36 5 t f
+3112 sensortype 传感器类型 Constant \N \N standard \N \N \N \N 2019-06-11 17:32:28.586+08 2019-06-11 17:32:28.586+08 958debc4-8460-4237-a960-d51a6a866071 5 t f
+3113 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-06-18 18:15:57.568+08 2019-06-18 18:15:57.568+08 d3c271ff-22cb-4938-8c5f-c63484107a38 5 t f
+3114 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-06-18 18:16:41.625+08 2019-06-18 18:16:41.625+08 dc1f2a7f-e0b1-4894-852c-6eaa5c66ef83 5 t f
+3115 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-06-18 18:17:37.223+08 2019-06-18 18:17:37.223+08 b8061f6d-fe6e-443d-bed9-8b4e7fb81a71 5 t f
+3116 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-06-18 18:31:21.701+08 2019-06-18 18:31:21.701+08 3636e235-3352-4944-8092-c0b68a659ef1 5 t f
+3117 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-06-18 18:32:05.236+08 2019-06-18 18:32:05.236+08 7fae0d43-0664-4c19-9d35-db80a97b6da2 5 t f
+3118 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-06-18 18:32:42.478+08 2019-06-18 18:32:42.478+08 c06263f7-c818-41f4-949a-4a526770fa9b 5 t f
+3119 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-06-18 18:33:16.504+08 2019-06-18 18:33:16.504+08 2142db9e-293b-43a9-9883-3d41391ba533 5 t f
+3120 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-06-18 18:35:38.864+08 2019-06-18 18:35:38.864+08 57df002c-3fa7-4684-a2b3-f46f54b7f87b 5 t f
+3122 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-06-18 18:38:08.026+08 2019-06-18 18:38:08.026+08 6daadb42-2ee7-41fa-a6bd-85d9c0d77383 5 t f
+3123 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-06-18 18:39:09.127+08 2019-06-18 18:39:09.127+08 c70bf363-fc19-41f9-80df-27a231a1a2bd 5 t f
+3124 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-06-18 18:46:11.208+08 2019-06-18 18:46:11.208+08 f70240a0-3384-4984-a854-65fe5b16dc0a 5 t f
+3125 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-06-18 18:47:13.433+08 2019-06-18 18:47:13.433+08 3d182049-68c9-440d-adde-b62b71abee38 5 t f
+3127 model 型号 Constant \N \N RN620 \N \N \N \N 2019-06-20 09:20:53.347+08 2019-06-20 09:20:53.347+08 1b795716-096c-409d-8b43-290e31a0d4d5 5 t f
+3128 model 型号 Constant \N \N RN630 \N \N \N \N 2019-06-20 09:22:50.982+08 2019-06-20 09:22:50.982+08 b10f2486-b1e8-48d6-8683-216a40bcb3bb 5 t f
+3129 module 模块号 Variable \N \N \N \N \N \N 2019-06-21 13:54:04.842+08 2019-06-21 13:54:04.842+08 2ea1c0ff-9d04-4a29-addb-ceaf8b4c1744 5 t f
+3130 moduleId 模块号 Variable \N \N 1 \N \N \N \N 2019-06-24 16:49:45.144+08 2019-06-24 16:49:45.144+08 ec7b0da8-24a8-48ad-b64a-0ea416189d8a 5 t f
+3131 1 232 Variable \N \N true \N \N \N 565 62 2019-06-25 15:49:19.32+08 2019-06-25 15:49:19.32+08 239fdc2a-bd0a-4cd6-b0c4-f7371f99f620 3 t f
+3133 sensortype 设备类型 Constant \N \N gdgs \N \N \N \N 2019-06-27 09:35:21.043+08 2019-06-27 09:35:21.043+08 4b13a538-ac93-4bc0-8515-4181c57b8650 5 t f
+3134 sensortype 设备类型 Constant \N \N gdgs \N \N \N \N 2019-06-27 09:35:29.156+08 2019-06-27 09:35:29.156+08 d1d8105f-3b3d-4c89-a378-2e76afbb6f36 5 t f
+3136 deviceType 设备类型 Constant \N sensor 0 \N \N 2019-06-27 13:03:58.367+08 2019-06-27 13:03:58.367+08 1c182e32-a4cb-4882-991a-be791c200d73 5 t f
+3137 ieeeAddr \N Variable \N \N \N \N \N \N 2019-07-06 16:55:42.77+08 2019-07-06 16:55:42.77+08 6980d68e-b6b4-4ab2-a048-042672a46cef 5 t f
+3138 ieeeAddr \N Variable \N \N \N \N \N \N 2019-07-06 17:22:08.758+08 2019-07-06 17:22:08.758+08 7b879c12-2bc2-4ff7-a2ba-b730169c30c9 5 t f
+3139 deviceType 设备类型 Constant \N \N gateway \N \N \N \N 2019-07-08 18:21:40.584+08 2019-07-08 18:21:40.584+08 54335927-f86b-44bd-aebe-f07fc9cddaed 5 t f
+3142 sensortype 设备类型 Constant \N gdgszx 0 无 协议用关键字 2019-07-09 15:10:12.119+08 2019-07-09 15:13:34.911+08 4fa8750d-807d-4c0c-9526-2662418f6f2f 5 t f
+3144 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2019-07-09 15:36:01.965+08 2019-07-09 15:36:01.965+08 6def140f-5189-490c-ab4c-57e84dfcd3bf 5 t f
+3145 devType \N Constant \N \N REFRIGERATOR \N \N \N \N 2019-07-15 13:27:37.581+08 2019-07-15 13:27:37.581+08 01da29ac-f803-4381-ae7f-28264effac4f 5 t f
+3146 devType \N Constant \N \N REFRIGERATOR \N \N \N \N 2019-07-15 14:04:02.974+08 2019-07-15 14:04:02.974+08 151950ee-2a96-4cb7-a2c7-8b8e15dcae36 5 t f
+3148 devType \N Constant \N \N REFRIGERATOR \N \N \N \N 2019-07-15 14:31:13.757+08 2019-07-15 14:31:13.757+08 7b8591c6-00a5-4a8f-9da0-f325fc60e8fa 5 t f
+3149 am2305_pre 前延迟-AM2305 Variable \N \N 25 \N 600 0 百毫秒 2019-07-17 14:41:29.811+08 2019-07-17 14:41:29.811+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 1 t f
+3150 aqi_p1 系数-CO Variable \N \N 1 16 9999 -9999 2019-07-17 14:43:17.275+08 2019-07-17 14:43:17.275+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 2 t f
+3151 aqi_p8 系数-交叉干扰K3 Variable \N \N 1 16 9999 -9999 2019-07-17 14:43:43.354+08 2019-07-17 14:43:43.354+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 2 t f
+3152 aqi_p2 系数-O3 Variable \N \N 1 16 9999 -9999 2019-07-17 14:44:12.567+08 2019-07-17 14:44:12.567+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 2 t f
+3153 pm10_post 后延迟-PM10 Variable \N \N 1 16 9999 -9999 2019-07-17 14:44:37.995+08 2019-07-17 14:44:37.995+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 2 t f
+3154 aqi_p7 系数-交叉干扰K2 Variable \N \N 1 16 9999 -9999 2019-07-17 14:49:15.034+08 2019-07-17 14:49:15.034+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 2 t f
+3155 pm100_pc 协议号-PM100 Constant \N \N 5003 \N \N \N 2019-07-17 14:49:41.812+08 2019-07-17 14:49:41.812+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 5 t f
+3156 gps_rd 是否启用-gps模组 Variable \N \N true \N \N \N 2019-07-17 14:50:52.548+08 2019-07-17 14:50:52.548+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 3 t f
+3157 am2305_pc 协议-AM2305 Constant \N \N 5004 \N \N \N 2019-07-17 14:51:12.384+08 2019-07-17 14:51:12.384+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 5 t f
+3158 aqi_pre 前延迟-AQI Variable \N \N 25 \N 600 0 百毫秒 2019-07-17 14:51:35.155+08 2019-07-17 14:51:35.155+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 1 t f
+3159 pm100_rd 是否启用-PM100模组 Variable \N \N true \N \N \N 2019-07-17 14:52:07.154+08 2019-07-17 14:52:07.154+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 3 t f
+3160 pm100_pre 执行前延迟-PM100 Variable \N \N 25 \N 600 0 百毫秒 2019-07-17 14:52:34.461+08 2019-07-17 14:52:34.461+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 1 t f
+3161 aqi_p5 系数-VOC Variable \N \N 1 16 9999 -9999 2019-07-17 14:52:56.793+08 2019-07-17 14:52:56.793+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 2 t f
+3162 sensortype 传感器类型 Variable \N \N kq \N \N \N 2019-07-17 14:54:17.658+08 2019-07-17 14:54:17.658+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 5 t f
+3163 aqi_rd 是否启用-AQI模组 Variable \N \N true \N \N \N 2019-07-17 14:54:38.113+08 2019-07-17 14:54:38.113+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 3 t f
+3164 am2305_post 后延迟-AM2305 Variable \N \N 35 \N 600 0 百毫秒 2019-07-17 14:55:09.761+08 2019-07-17 14:55:09.761+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 1 t f
+3165 aqi_p6 系数-交叉干扰K1 Variable \N \N 1 16 9999 -9999 2019-07-17 14:55:53.628+08 2019-07-17 14:55:53.628+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 2 t f
+3166 gps_post 后延迟-GPS Variable \N \N 35 \N 600 0 百毫秒 2019-07-17 14:56:27.862+08 2019-07-17 14:56:27.862+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 1 t f
+3167 aqi_p4 系数-SO2 Variable \N \N 1 16 9999 -9999 2019-07-17 14:56:50.912+08 2019-07-17 14:56:50.912+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 2 t f
+3168 pm10_p2 系数-PM10 Variable \N \N 1 16 9999 -9999 2019-07-17 14:57:19.266+08 2019-07-17 14:57:19.266+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 2 t f
+3169 gps_pre 前延迟-GPS Variable \N \N 25 \N 600 0 百毫秒 2019-07-17 14:57:44.228+08 2019-07-17 14:57:44.228+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 1 t f
+3170 pm100_p1 系数-PM100 Variable \N \N 1 16 9999 -9999 百毫秒 2019-07-17 14:58:08.228+08 2019-07-17 14:58:08.228+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 2 t f
+3171 pm100_post 后延迟-PM100 Variable \N \N 35 \N 600 0 百毫秒 2019-07-17 14:58:55.33+08 2019-07-17 14:58:55.33+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 1 t f
+3172 pm100_st 模组型号-PM100 Constant \N \N pm100 \N \N \N 2019-07-17 14:59:44.019+08 2019-07-17 14:59:44.019+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 5 t f
+3173 aqi_p3 系数-NO2 Variable \N \N 1 16 9999 -9999 2019-07-17 15:00:10.319+08 2019-07-17 15:00:10.319+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 2 t f
+3174 pm10_rd 是否启用PM2.5模组 Variable \N \N true \N \N \N 2019-07-17 15:00:51.398+08 2019-07-17 15:00:51.398+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 3 t f
+3175 pm10_pc 协议-PM2.5,PM10 Constant \N \N 5002 \N \N \N 2019-07-17 15:01:23.838+08 2019-07-17 15:01:23.838+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 5 t f
+3176 aqi_post 后延迟-AQI Variable \N \N 35 \N 600 0 百毫秒 2019-07-17 15:02:01.288+08 2019-07-17 15:02:01.288+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 1 t f
+3177 aqi_pc 协议-AQI Constant \N \N 5000 \N \N \N 2019-07-17 15:02:24.272+08 2019-07-17 15:02:24.272+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 5 t f
+3178 aqi_st 模组类型-AQI Constant \N \N aqi \N \N \N 2019-07-17 15:03:11.967+08 2019-07-17 15:03:11.967+08 a16a5d8d-9c8b-4bc0-aed1-c7736f212c17 5 t f
+3180 3 r Variable \N \N \N \N 3 1 \N 2019-07-22 10:33:56.64+08 2019-07-22 10:33:56.64+08 6d2dad31-9715-4522-a382-9b1b99f9bebc 1 t f
+3140 SIMNum SIM卡号 Variable \N 13912345678 0 2019-07-08 18:21:40.587+08 2019-07-25 09:52:25.752+08 54335927-f86b-44bd-aebe-f07fc9cddaed 5 t f
+3181 sensortype 传感器类型 Constant \N yc 0 2019-07-23 21:20:35.029+08 2019-07-23 22:22:18.982+08 7efbc3e8-ff6b-433b-9041-c76b9df89644 5 t f
+3182 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2019-07-23 22:23:33.268+08 2019-07-23 22:23:33.268+08 7efbc3e8-ff6b-433b-9041-c76b9df89644 5 t f
+3183 addr Address Variable \N 0 \N 2019-07-25 12:55:45.595+08 2019-07-25 12:55:52.635+08 64af86ba-2ede-48c5-b410-7e40264cdd8a 5 t f
+3184 devType \N Variable \N \N \N \N \N \N 2019-08-01 13:40:55.669+08 2019-08-01 13:40:55.669+08 7b879c12-2bc2-4ff7-a2ba-b730169c30c9 5 f f
+3186 sensortype 传感器类型 Constant \N \N weight \N \N \N \N 2019-08-05 09:21:24.241+08 2019-08-05 09:21:24.241+08 32349c76-d117-4331-8a10-9b7ea057c2ab 5 t f
+3196 sensortype 设备类型 Constant \N \N gdgs \N \N \N \N 2019-08-12 17:18:06.64+08 2019-08-12 17:18:06.64+08 d77b7e20-7877-47dc-aef4-37a663bac660 5 t f
+3197 sensortype 设备类型 Constant \N \N standard485 \N \N \N \N 2019-08-12 17:26:37.843+08 2019-08-12 17:26:37.843+08 53070eae-7839-46df-9492-f1b4c0b0b101 5 t f
+3195 upper 频率上限 Variable \N 2000 0 Hz 2019-08-12 17:17:56.854+08 2019-08-13 09:32:31.716+08 d3763c4f-94ba-4ae4-b35e-ccff2340c16a 5 t f
+3194 downer 频率下限 Variable \N 1000 0 Hz 2019-08-12 17:17:33.612+08 2019-08-13 09:32:36.814+08 d3763c4f-94ba-4ae4-b35e-ccff2340c16a 5 t f
+3191 upper 频率上限 Variable \N 2000 0 Hz 2019-08-12 17:15:40.522+08 2019-08-13 09:32:54.725+08 aab61193-270e-4d06-9bdf-9da5194c744a 5 t f
+3190 downer 频率下限 Variable \N 1000 0 Hz 2019-08-12 17:15:18.812+08 2019-08-13 09:32:58.309+08 aab61193-270e-4d06-9bdf-9da5194c744a 5 t f
+3189 upper 频率上限 Variable \N 2000 0 Hz 2019-08-12 17:12:00.762+08 2019-08-13 09:35:14.835+08 0b09cbd9-3881-4b4a-8910-0e8730d5d935 5 t f
+3188 downer 频率下限 Variable \N 1000 0 Hz 2019-08-12 17:11:33.207+08 2019-08-13 09:35:17.905+08 0b09cbd9-3881-4b4a-8910-0e8730d5d935 5 t f
+3193 upper 频率上限 Variable \N 2000 0 Hz 2019-08-12 17:16:36.564+08 2019-08-13 09:35:37.088+08 ca6af9e3-f1dc-4992-8029-d0e438ef99b5 5 t f
+3192 downer 频率下限 Variable \N 1000 0 Hz 2019-08-12 17:16:14.55+08 2019-08-13 09:35:40.373+08 ca6af9e3-f1dc-4992-8029-d0e438ef99b5 5 t f
+3199 downer 频率下限 Variable \N 1000 0 Hz 2019-08-12 17:34:44.731+08 2019-08-13 09:42:26.563+08 f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17 5 t f
+3198 upper 频率上限 Variable \N 2000 0 Hz 2019-08-12 17:34:15.951+08 2019-08-13 09:42:29.906+08 f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17 5 t f
+3201 upper 频率上限 Variable \N 2000 0 Hz 2019-08-13 09:14:43.259+08 2019-08-13 09:42:47.979+08 8fcb81d8-34ce-41b8-93c9-69d15060fa40 5 t f
+3200 downer 频率下限 Variable \N 1000 0 Hz 2019-08-12 17:35:40.809+08 2019-08-13 09:42:50.955+08 8fcb81d8-34ce-41b8-93c9-69d15060fa40 5 t f
+3203 downer 频率下限 Variable \N 1000 0 Hz 2019-08-13 09:16:26.198+08 2019-08-13 09:43:04.02+08 20ff998d-3014-4f62-ad12-37b56883c435 5 t f
+3202 upper 频率上限 Variable \N 2000 0 Hz 2019-08-13 09:15:15.973+08 2019-08-13 09:43:08.152+08 20ff998d-3014-4f62-ad12-37b56883c435 5 t f
+3205 downer 频率下限 Variable \N 1000 0 Hz 2019-08-13 09:17:09.429+08 2019-08-13 09:43:22.188+08 c60cc02d-8c37-447a-9f9d-947aa66b7f39 5 t f
+3204 upper 频率上限 Variable \N 2000 0 Hz 2019-08-13 09:16:52.623+08 2019-08-13 09:43:25.231+08 c60cc02d-8c37-447a-9f9d-947aa66b7f39 5 t f
+3206 upper 频率上限 Variable \N 2000 0 Hz 2019-08-13 09:17:45.097+08 2019-08-13 09:43:51.475+08 df68d6a9-c963-4bc4-a122-332e3d1435ac 5 t f
+3207 downer 频率下限 Variable \N 1000 0 Hz 2019-08-13 09:18:04.803+08 2019-08-13 09:43:55.207+08 df68d6a9-c963-4bc4-a122-332e3d1435ac 5 t f
+3209 downer 频率下限 Variable \N 1000 0 Hz 2019-08-13 09:18:59.417+08 2019-08-13 09:44:12.452+08 84deac79-cd1d-4320-bcc6-3a0cdd4451da 5 t f
+3208 upper 频率上限 Variable \N 2000 0 Hz 2019-08-13 09:18:43.955+08 2019-08-13 09:44:15.709+08 84deac79-cd1d-4320-bcc6-3a0cdd4451da 5 t f
+3210 sensortype 设备类型 Constant \N \N standard485 \N \N \N \N 2019-08-13 17:52:48.321+08 2019-08-13 17:52:48.321+08 a7c51497-66e3-4e63-aa6f-7b243fb8ea77 5 t f
+3211 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2019-08-22 08:50:13.687+08 2019-08-22 08:50:13.687+08 5b40bb69-7692-4cee-b6df-bd7871764131 5 t f
+3212 sensortype 传感器类型 Constant \N \N wsd \N \N \N 2019-08-22 08:51:02.726+08 2019-08-22 08:51:02.726+08 5b40bb69-7692-4cee-b6df-bd7871764131 5 t f
+3213 protocolcode 协议号 Constant \N \N 1102 \N \N \N 2019-08-22 08:51:55.185+08 2019-08-22 08:51:55.185+08 5b40bb69-7692-4cee-b6df-bd7871764131 1 t f
+3214 range 量程 Constant \N (-40,120),(0,100) 0 ℃,%RH 2019-08-22 08:52:59.828+08 2019-08-22 08:53:19.322+08 5b40bb69-7692-4cee-b6df-bd7871764131 5 t f
+2607 minute 间隔触发启动时间分钟 Variable \N 0 59 0 min 2018-09-25 15:45:24.03+08 2019-08-22 09:43:44.352+08 d929c576-62dd-4f0c-a2cc-15120347b903 1 f f
+2604 triggerint 采样触发间隔(s) Variable \N 1800 0 86400 0 s 2018-09-25 15:45:24.023+08 2019-08-22 09:43:56.948+08 d929c576-62dd-4f0c-a2cc-15120347b903 1 t f
+3215 uploadprocess 配置上传后处理 Variable \N restart,stop,start restart \N \N \N \N 2019-08-22 09:53:54.778+08 2019-08-22 09:53:54.778+08 d6189068-bb18-4c68-a359-8e3139ab22e5 4 t f
+3216 triggermode 触发方式 Variable \N 软件触发,模拟硬件触发,数字硬件触发,硬件模拟数字触发 软件触发 \N \N \N 2019-08-22 10:04:33.491+08 2019-08-22 10:04:33.491+08 d6189068-bb18-4c68-a359-8e3139ab22e5 4 t f
+3217 devicermode 设备工作模式 Variable \N 从设备异步,主设备异步,主设备同步 主设备异步 \N \N \N 2019-08-22 10:06:42.458+08 2019-08-22 10:06:42.458+08 d6189068-bb18-4c68-a359-8e3139ab22e5 4 t f
+3218 hour 间隔触发启动时间小时 Variable \N \N \N \N 23 0 2019-08-22 10:10:08.182+08 2019-08-22 10:10:08.182+08 d6189068-bb18-4c68-a359-8e3139ab22e5 1 f f
+3219 second 间隔触发启动时间秒 Variable \N \N \N \N 59 0 \N 2019-08-22 10:19:56.694+08 2019-08-22 10:19:56.694+08 d6189068-bb18-4c68-a359-8e3139ab22e5 1 f f
+3220 startiming5 定时触发启动时间5 Variable \N \N \N \N \N 2019-08-22 10:20:52.298+08 2019-08-22 10:20:52.298+08 d6189068-bb18-4c68-a359-8e3139ab22e5 5 f f
+3221 startiming4 定时触发启动时间4 Variable \N \N \N \N \N 2019-08-22 10:21:28.737+08 2019-08-22 10:21:28.737+08 d6189068-bb18-4c68-a359-8e3139ab22e5 5 f f
+3222 startiming3 定时触发启动时间3 Variable \N \N \N \N \N 2019-08-22 10:22:08.722+08 2019-08-22 10:22:08.722+08 d6189068-bb18-4c68-a359-8e3139ab22e5 5 f f
+3223 startiming2 定时触发启动时间2 Variable \N \N \N \N \N 2019-08-22 10:22:43.491+08 2019-08-22 10:22:43.491+08 d6189068-bb18-4c68-a359-8e3139ab22e5 5 f f
+3224 startiming1 定时触发启动时间1 Variable \N \N \N \N \N 2019-08-22 10:23:24.442+08 2019-08-22 10:23:24.442+08 d6189068-bb18-4c68-a359-8e3139ab22e5 5 f f
+3225 acqtimeint 间隔触发采样时长 Variable \N \N \N \N 50 1 s 2019-08-22 10:24:31.936+08 2019-08-22 10:24:31.936+08 d6189068-bb18-4c68-a359-8e3139ab22e5 1 f f
+3226 startiming6 定时触发启动时间6 Variable \N \N \N \N \N 2019-08-22 10:25:05.652+08 2019-08-22 10:25:05.652+08 d6189068-bb18-4c68-a359-8e3139ab22e5 5 f f
+3228 minute 间隔触发启动时间分钟 Variable \N \N \N \N 59 0 min 2019-08-22 10:35:22.501+08 2019-08-22 10:35:22.501+08 d6189068-bb18-4c68-a359-8e3139ab22e5 1 f f
+3229 triggerint 采样触发间隔(s) Variable \N \N 1800 \N 86400 0 s 2019-08-22 10:37:06.243+08 2019-08-22 10:37:06.243+08 d6189068-bb18-4c68-a359-8e3139ab22e5 1 t f
+3230 sensortype 类型 Constant \N \N standard485 \N \N \N \N 2019-08-27 16:38:25.588+08 2019-08-27 16:38:25.588+08 8c23f875-86cf-4fe7-a315-526c7a1d0187 5 t f
+515 sensortype 设备类型 Constant \N standard485 0 无 无 2017-12-20 09:11:42.456+08 2019-08-27 17:40:35.144+08 6039a6d8-af54-411e-a520-451b20b6d089 5 t f
+509 sensortype 设备类型 Constant \N standard485 0 无 无 2017-12-19 17:58:52.292+08 2019-08-27 17:41:03.48+08 dfffdb75-6ad1-4092-95d2-ac6596b3c4ce 5 t f
+3227 acqtiming 定时触发采样时长 Variable \N \N 0 50 1 s 2019-08-22 10:34:07.508+08 2019-08-29 11:03:36.683+08 d6189068-bb18-4c68-a359-8e3139ab22e5 1 f f
+3232 deviceType 设备类型 Constant \N \N gateway \N \N \N \N 2019-08-30 14:28:31.132+08 2019-08-30 14:28:31.132+08 421933bd-e149-4d7c-ad95-ef8aa2a2692c 5 t f
+3233 SIMNum SIM卡号 Variable \N \N 13912345678 \N \N \N 2019-08-30 14:28:31.135+08 2019-08-30 14:28:31.135+08 421933bd-e149-4d7c-ad95-ef8aa2a2692c 5 t f
+3234 pointId 监测点ID Variable \N \N 1 \N \N \N 2019-09-04 13:53:37.985+08 2019-09-04 13:53:37.985+08 c3ed0f20-828b-46bd-b8ef-b7821cd0fcce 5 t f
+3235 beginTime 初始时间 Variable \N \N 20180102030405 \N \N \N 2019-09-04 13:53:37.988+08 2019-09-04 13:53:37.988+08 c3ed0f20-828b-46bd-b8ef-b7821cd0fcce 5 t f
+3236 sensortype 传感器类型 Constant \N \N gnss \N \N \N 2019-09-04 13:53:37.991+08 2019-09-04 13:53:37.991+08 c3ed0f20-828b-46bd-b8ef-b7821cd0fcce 5 t f
+3251 sensortype 传感器类型 Constant \N \N fs \N \N \N 2019-09-19 14:08:46.196+08 2019-09-19 14:08:46.196+08 8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea 5 t f
+3237 protocolcode 协议号 Constant \N 9030 0 \N 齐兴自研协议 2019-09-04 15:09:30.102+08 2019-09-04 15:10:11.384+08 7efbc3e8-ff6b-433b-9041-c76b9df89644 1 t f
+3238 protocolcode 协议号 Constant \N \N 1992 \N \N \N \N 2019-09-04 15:40:23.403+08 2019-09-04 15:40:23.403+08 aa630d67-b466-4f6a-9a04-fe5744954d20 1 t f
+3239 protocolcode 协议号 Constant \N \N 1992 \N \N \N \N 2019-09-04 15:48:38.154+08 2019-09-04 15:48:38.154+08 e600502e-b2ff-466a-9fa6-b9e9e554647c 1 t f
+3240 sensortype 传感器类型 Constant \N \N 485 \N \N \N \N 2019-09-06 11:33:44.911+08 2019-09-06 11:33:44.911+08 e600502e-b2ff-466a-9fa6-b9e9e554647c 5 t f
+3241 cycletime 采集周期 Variable \N \N 30 \N 99999 1 分钟 2019-09-10 16:42:10.7+08 2019-09-10 16:42:10.7+08 70c53b9c-f7ec-48ce-b790-bd96754d2d3b 1 t f
+3246 sensortype 传感器类型 Constant \N JLSZ 0 无 无 2019-09-10 16:52:37.778+08 2019-09-10 16:55:26.793+08 42eb2303-14bd-4431-9ca6-d5b8b2590d1d 5 t f
+3245 protocolcode 协议号 Constant \N 9030 0 无 无 2019-09-10 16:52:37.776+08 2019-09-10 16:55:34.323+08 42eb2303-14bd-4431-9ca6-d5b8b2590d1d 1 t f
+3249 pointId 设备IMEI Variable \N \N \N \N \N \N 2019-09-17 09:35:22.053+08 2019-09-17 09:35:22.053+08 69f9043f-2ce4-4d39-97fe-94f6c2f6185c 5 t f
+3250 cycletime 采集周期 Variable \N \N 3600 \N 4294967295 0 秒 2019-09-19 09:37:37.208+08 2019-09-19 09:37:37.208+08 6225c8bb-1497-4354-ad28-e5eb698de9f0 1 t f
+3253 devicetype 设备类型 Constant \N \N sensor \N \N \N 2019-09-19 14:09:51.113+08 2019-09-19 14:09:51.113+08 8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea 5 t f
+3252 protocolcode 协议号 Constant \N 9218 0 2019-09-19 14:09:20.913+08 2019-09-19 16:34:46.102+08 8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea 1 t f
+3255 sensortype 传感器类型 Constant \N fx 0 2019-09-19 16:36:32.223+08 2019-09-19 16:40:07.059+08 a6d30b7e-a718-4cbf-80be-2ddefa2445ab 5 t f
+3254 protocolcode 协议号 Constant \N 9219 0 2019-09-19 16:35:23.151+08 2019-09-19 16:38:52.291+08 a6d30b7e-a718-4cbf-80be-2ddefa2445ab 1 t f
+3256 devicetype 设备类型 Constant \N \N sensor \N \N \N \N 2019-09-19 16:39:41.695+08 2019-09-19 16:39:41.695+08 a6d30b7e-a718-4cbf-80be-2ddefa2445ab 5 t f
+3257 sensortype 传感器类型 Constant \N dy 0 \N 2019-09-25 10:40:00.752+08 2019-09-25 10:40:34.611+08 fe3a614d-329c-4b70-99ff-f95ccb28ab79 5 t f
+3258 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-09-25 11:08:38.903+08 2019-09-25 11:08:38.903+08 d756ead6-3c0a-4d1e-be3f-dde6e031a048 5 t f
+3261 sensortype 传感器类型 Constant \N \N standard \N \N \N \N 2019-09-25 11:24:05.412+08 2019-09-25 11:24:05.412+08 50fc0df9-2b02-445b-b04e-17209e8c69ee 5 t f
+3265 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2019-09-25 11:54:59.675+08 2019-09-25 11:54:59.675+08 73ac8e46-173b-4f23-bb89-edd506496e34 5 t f
+3267 sensortype 传感器类型 Constant \N dm 0 \N 2019-09-25 16:15:07.536+08 2019-09-25 16:15:24.738+08 f7374ca5-78cb-4578-bfe3-df32eb350d05 5 t f
+3268 sensortype 传感器类型 Constant \N \N dz \N \N \N \N 2019-09-25 16:17:50.71+08 2019-09-25 16:17:50.71+08 37bc2c29-264c-4366-8fe1-9c2984702b94 5 t f
+3269 sensortype 传感器类型 Constant \N \N db \N \N \N \N 2019-09-25 16:24:59.808+08 2019-09-25 16:24:59.808+08 5102e0bc-4778-43b6-80d3-fd71e4032088 5 t f
+3270 sensortype 传感器类型 Constant \N \N db \N \N \N \N 2019-09-25 16:25:36.57+08 2019-09-25 16:25:36.57+08 f535897b-dc69-4835-b0d7-b4a6062db938 5 t f
+3271 sensortype 传感器类型 Constant \N \N db \N \N \N \N 2019-09-25 17:25:19.291+08 2019-09-25 17:25:19.291+08 f29e4bb2-0e42-4016-b27e-f2377c115ff1 5 t f
+3272 sensortype 传感器类型 Constant \N \N dt \N \N \N \N 2019-09-26 11:36:30.268+08 2019-09-26 11:36:30.268+08 005826c9-dd60-4013-99bc-da28bc0d9c93 5 t f
+3273 sensortype 传感器类型 Constant \N \N db \N \N \N \N 2019-09-27 17:23:24.157+08 2019-09-27 17:23:24.157+08 8392cdb0-52c7-4fee-8ace-a64e5cf86240 5 t f
+3274 url URL Variable \N \N \N \N \N \N 2019-09-29 14:37:47.044+08 2019-09-29 14:37:47.044+08 569fbb47-7ddc-4dd9-a1d0-e9e15d4ac448 5 t f
+3275 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2019-09-29 17:52:05.109+08 2019-09-29 17:52:05.109+08 0edf8e7f-0f5f-440a-a83a-333e5d90a2ef 5 t f
+3276 sensortype 设备类型 Constant \N \N gdgszx \N \N \N \N 2019-10-08 16:13:13.815+08 2019-10-08 16:13:13.815+08 66d2c15b-394a-4b84-b7d3-b991be41d9b0 5 t f
+3105 sensortype 传感器类型 Constant \N standard 0 2019-06-11 16:18:29.013+08 2019-10-09 11:08:50.631+08 acd9ad51-99a5-4b2c-98ce-0d2d6c4dd848 5 t f
+3280 sensortype 传感器类型 Constant \N \N standard \N \N \N \N 2019-10-09 11:52:32.522+08 2019-10-09 11:52:32.522+08 28463128-4e0e-4167-8aa6-3c6f5accc368 5 t f
+3281 sensortype 传感器类型 Constant \N \N dy \N \N \N \N 2019-10-09 15:08:23.161+08 2019-10-09 15:08:23.161+08 d52023ca-77dc-4b31-941a-5cb6d2b1a297 5 t f
+3277 deviceid 设备编号 Variable \N 0 2019-10-08 16:14:35.311+08 2019-10-11 13:17:40.767+08 66d2c15b-394a-4b84-b7d3-b991be41d9b0 5 t f
+3282 deviceid 设备编号 Variable \N \N \N \N \N \N 2019-10-11 14:16:27.007+08 2019-10-11 14:16:27.007+08 1fff247a-6494-4752-91b7-74565fa1f314 5 t f
+3301 k 转换系数 Variable \N \N 1 16 99999 -99999 \N 2019-10-30 10:06:34.491+08 2019-10-30 10:06:34.491+08 56c84083-d705-4aa0-94d2-34b731f75f97 2 t f
+3302 sensortype 设备类型 Constant \N \N prism_L_FS \N \N \N \N 2019-11-05 14:06:15.049+08 2019-11-05 14:06:15.049+08 6431292f-5b95-41f0-8291-ff902e58b376 5 t f
+3289 organcode 机构编码 Variable \N \N \N \N \N \N 2019-10-16 15:16:12.227+08 2019-10-16 15:16:12.227+08 30cf2191-2a9e-40dd-a83f-969d2f053e1e 5 t f
+3290 unitcode 单位编码 Variable \N \N \N \N \N 2019-10-16 15:16:12.23+08 2019-10-16 15:16:12.23+08 30cf2191-2a9e-40dd-a83f-969d2f053e1e 5 t f
+3291 ttype 垃圾桶类型 Variable \N 厨余,纸张,金属,塑料,玻璃,其他,回收,有害,织物,感染,损伤,化学,病理,大件,建筑,书报,塑料瓶,电子垃圾,干垃圾,湿垃圾,易腐垃圾 回收 \N \N \N \N 2019-10-16 15:20:46.757+08 2019-10-16 15:20:46.757+08 213e2ff2-285b-445d-8661-24f6f91bf7b8 4 t f
+3303 sensortype 设备类型 Constant \N \N QZY \N \N \N \N 2019-11-05 14:15:48.124+08 2019-11-05 14:15:48.124+08 1e6fc551-3ad9-4963-9754-142f9c470c9c 5 t f
+3292 deviceid 设备编号 Variable \N \N \N \N \N \N 2019-10-21 14:29:18.066+08 2019-10-21 14:29:18.066+08 a8607ea4-e6db-4dc6-9e64-3e8db3628ba0 5 t f
+3294 matchName 匹配灯具名称 Variable \N \N \N \N \N \N 2019-10-22 14:21:01.998+08 2019-10-22 14:21:01.998+08 f19f1e04-8739-4652-9869-5fe16698e82e 5 t f
+3297 start 起始时间 Variable \N 0 0 \N 2019-10-28 14:56:23.628+08 2019-10-28 14:57:09.375+08 2b04a6d8-4af7-428f-95c9-325800c4b59d 5 f f
+3298 stop 结束时间 Variable \N 0 0 2019-10-28 14:56:55.364+08 2019-10-28 14:57:13.627+08 2b04a6d8-4af7-428f-95c9-325800c4b59d 5 f f
+3300 k 转换系数 Variable \N 1 16 99999 -99999 \N 2019-10-30 09:39:28.833+08 2019-10-30 09:39:59.939+08 09252236-560b-47e1-bf81-f774d303ba26 2 t f
+3319 sensortype 传感器类型 Constant \N cx 0 \N \N 2019-11-21 11:47:17.672+08 2019-11-21 11:47:17.672+08 a0d06bbf-dedc-47dc-8d1e-52e2a282a93a 5 t f
+3320 devicetype 设备类型 Constant \N sensor 0 \N \N 2019-11-21 11:47:17.674+08 2019-11-21 11:47:17.674+08 a0d06bbf-dedc-47dc-8d1e-52e2a282a93a 5 t f
+3321 range 量程 Constant \N (-30,30),(-30,30),(-25,70) 0 \N \N °,°,℃ 2019-11-21 11:47:17.676+08 2019-11-21 11:47:17.676+08 a0d06bbf-dedc-47dc-8d1e-52e2a282a93a 5 t f
+3322 protocolcode 协议号 Constant \N 1503 0 \N \N \N Modbus杆式测斜协议 2019-11-21 11:47:17.678+08 2019-11-21 11:47:17.678+08 a0d06bbf-dedc-47dc-8d1e-52e2a282a93a 5 t f
+3323 sensortype 传感器类型 Constant \N cx 0 \N \N 2019-11-21 11:47:19.245+08 2019-11-21 11:47:19.245+08 868f47ed-fe83-49c4-be2c-70731b436220 5 t f
+3324 devicetype 设备类型 Constant \N sensor 0 \N \N 2019-11-21 11:47:19.249+08 2019-11-21 11:47:19.249+08 868f47ed-fe83-49c4-be2c-70731b436220 5 t f
+3326 protocolcode 协议号 Constant \N 1503 0 \N \N \N Modbus杆式测斜协议 2019-11-21 11:47:19.255+08 2019-11-21 11:47:19.255+08 868f47ed-fe83-49c4-be2c-70731b436220 5 t f
+3325 range 量程 Constant \N (-30,30),(-25,70) 0 °,℃ 2019-11-21 11:47:19.252+08 2019-11-21 11:50:01.786+08 868f47ed-fe83-49c4-be2c-70731b436220 5 t f
+3353 moduleid 模块号 Variable \N 0 2020-01-02 14:28:42.887+08 2020-08-24 15:10:11.685+08 98e6aaea-a6e2-449e-8b46-47fa016b1b96 5 t f
+3327 start 启动时间 Variable \N 0 0 \N 2019-11-26 14:08:45.409+08 2019-11-26 14:09:08.599+08 c150497e-123d-4ce0-bc80-9a537ee84489 5 t f
+3332 sensortype 传感器类型 Constant \N \N weight \N \N \N \N 2019-11-27 14:14:56.585+08 2019-11-27 14:14:56.585+08 ba311e19-eea2-4eff-8674-1a146dab66c3 5 t f
+3337 module 模块号 Variable \N \N \N \N 10000 0 \N 2019-12-06 15:19:07.088+08 2019-12-06 15:19:07.088+08 31be3fb7-3369-4966-8e26-b561dc31b6fd 1 t f
+3339 SpeedLimitDown 车速下限 Variable \N \N 0 \N 200 0 km/h 2019-12-06 15:24:19.995+08 2019-12-06 15:24:19.995+08 ba311e19-eea2-4eff-8674-1a146dab66c3 1 t f
+3351 sensortype 传感器类型 Constant \N gscx 0 2019-12-26 13:50:05.521+08 2020-11-16 14:54:58.212+08 d2e74fbe-59fe-420d-b127-c61ba8236f42 5 t f
+3330 unitType 测斜类型 Variable \N 0 0 2019-11-26 17:02:36.368+08 2019-12-09 10:45:31.488+08 61a4ad5e-774e-40d2-9ea6-937da62db64b 5 t f
+3340 returnTime 回传时间(分钟) Variable \N \N 0 \N \N \N \N 2019-12-09 11:15:43.281+08 2019-12-09 11:15:43.281+08 61a4ad5e-774e-40d2-9ea6-937da62db64b 5 t f
+3331 ceMoudle 测斜编号(逗号隔开,底部为第一根) Variable \N 1,2,3 0 2019-11-26 17:05:41.352+08 2019-12-09 11:23:35.79+08 61a4ad5e-774e-40d2-9ea6-937da62db64b 5 t f
+3341 direction 方向 Variable \N 上桥,下桥 上桥 \N \N \N \N 2019-12-11 10:41:52.089+08 2019-12-11 10:41:52.089+08 ba311e19-eea2-4eff-8674-1a146dab66c3 4 t f
+3338 SpeedLimitUp 车速上限 Variable \N 150 0 300 0 km/h 2019-12-06 15:22:35.477+08 2019-12-16 11:25:57.145+08 ba311e19-eea2-4eff-8674-1a146dab66c3 1 t f
+3344 devType Constant \N DOOR 0 2019-12-16 11:28:20.105+08 2019-12-16 11:29:40.93+08 fbb11421-cbb6-435e-b9f0-4bf1e056016c 5 t f
+3336 WeightLimitDown 车重下限 Variable \N 0 0 200000 0 Kg 2019-12-06 15:19:00.685+08 2019-12-16 11:36:20.954+08 ba311e19-eea2-4eff-8674-1a146dab66c3 1 t f
+3335 WeightLimitUp 车重上限 Variable \N 100000 0 100000 0 Kg 2019-12-06 15:17:32.486+08 2019-12-16 11:36:39.215+08 ba311e19-eea2-4eff-8674-1a146dab66c3 1 t f
+3345 ieeeAddr \N Variable \N \N \N \N \N \N 2019-12-16 11:39:53.123+08 2019-12-16 11:39:53.123+08 fbb11421-cbb6-435e-b9f0-4bf1e056016c 5 t f
+3346 ieeeAddr \N Variable \N \N \N \N \N \N 2019-12-17 15:53:57.63+08 2019-12-17 15:53:57.63+08 0fbc8f32-4f32-4e21-bbba-34023ac70ff4 5 t f
+3347 devType \N Constant \N \N TEMPERATURE \N \N \N \N 2019-12-17 15:56:17.682+08 2019-12-17 15:56:17.682+08 0fbc8f32-4f32-4e21-bbba-34023ac70ff4 5 t f
+3348 k 转换系数 Variable \N \N 1 16 99999 -99999 \N 2019-12-20 18:07:22.86+08 2019-12-20 18:07:22.86+08 cc36cffd-a5ac-44e5-8fe7-c2ad64a3e55b 2 t f
+3352 mode 模式 Variable \N 0 \N 2020-01-02 14:28:12.809+08 2020-01-02 14:28:29.653+08 98e6aaea-a6e2-449e-8b46-47fa016b1b96 5 t f
+3354 sentype 设备类型 Constant \N \N rainfall \N \N \N \N 2020-01-06 16:12:31.69+08 2020-01-06 16:12:31.69+08 8c23f875-86cf-4fe7-a315-526c7a1d0187 5 t f
+3355 sensortype 设备类型 Constant \N \N noise \N \N \N \N 2020-01-07 14:23:43.169+08 2020-01-07 14:23:43.169+08 afba576d-0e5e-48cf-a9fa-18a3f986d812 5 t f
+3356 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2020-01-07 15:57:14.017+08 2020-01-07 15:57:14.017+08 b1ce7bb7-4d25-468a-ab2b-22347d65b166 5 t f
+3363 sensortype 设备型号 Variable \N \N noise \N \N \N \N 2020-01-17 16:10:12.493+08 2020-01-17 16:10:12.493+08 20d96ea0-8995-453b-aa12-191acb05eced 5 t f
+3360 protocolcode 协议号 Constant \N 9602 0 ”“ ”“ 2020-01-09 16:29:24.196+08 2020-01-10 14:01:26.026+08 afba576d-0e5e-48cf-a9fa-18a3f986d812 5 t f
+3364 devType \N Constant \N \N NaN \N \N \N \N 2020-02-11 18:45:30.292+08 2020-02-11 18:45:30.292+08 c7c40505-1247-43ea-a898-e767eeae6943 5 t f
+3365 protocolcode 协议号 Constant \N \N 9101 \N \N \N \N 2020-02-21 13:10:24.676+08 2020-02-21 13:10:24.676+08 31be3fb7-3369-4966-8e26-b561dc31b6fd 5 t f
+3366 devType \N Constant \N \N NASCONTROLLER \N \N \N \N 2020-02-27 20:53:48.464+08 2020-02-27 20:53:48.464+08 2f966726-181d-4301-8415-5987393db114 5 t f
+3367 gpio GPIO Variable \N \N \N \N 40 1 GPIO口 2020-02-27 20:55:11.887+08 2020-02-27 20:55:11.887+08 2f966726-181d-4301-8415-5987393db114 1 t f
+3368 ip IP地址 Variable \N \N 10.8.30.2 \N \N \N NAS 服务器地址 2020-02-27 20:55:39.511+08 2020-02-27 20:55:39.511+08 2f966726-181d-4301-8415-5987393db114 5 t f
+3369 ieeeAddr \N Variable \N \N \N \N \N \N 2020-02-27 22:26:35.061+08 2020-02-27 22:26:35.061+08 80f33249-c402-4942-8c91-15f19638dce4 5 t f
+3370 ieeeAddr \N Variable \N \N \N \N \N \N 2020-03-07 16:35:47.324+08 2020-03-07 16:35:47.324+08 c82a7f0e-848f-4659-9555-8b275c33036e 5 t f
+3371 sensortype 传感器类型 Constant \N \N lx \N \N \N \N 2020-03-10 13:58:11.818+08 2020-03-10 13:58:11.818+08 43060aae-0e85-4ec6-9fc9-b05216b11e13 5 t f
+3372 protocolcode 协议号 Constant \N \N 1663 \N \N \N 2020-03-10 13:58:42.938+08 2020-03-10 13:58:42.938+08 43060aae-0e85-4ec6-9fc9-b05216b11e13 1 t f
+3373 sensortype 传感器类型 Constant \N \N wsd \N \N \N \N 2020-03-10 14:00:00.117+08 2020-03-10 14:00:00.117+08 6f6f83fa-1af9-4e4c-8d3f-53c2a4d1b4ca 5 t f
+3374 protocolcode 协议号 Constant \N \N 1201 \N \N \N 2020-03-10 14:00:24.851+08 2020-03-10 14:00:24.851+08 6f6f83fa-1af9-4e4c-8d3f-53c2a4d1b4ca 1 t f
+3375 pointId 监测点ID Variable \N \N 1 \N \N \N \N 2020-03-12 15:38:21.509+08 2020-03-12 15:38:21.509+08 e92738ba-66bf-4ec9-85c5-c1f2b4d7780e 5 t f
+3376 beginTime 初始时间 Variable \N \N 20180102030405 \N \N \N 2020-03-12 15:38:44.441+08 2020-03-12 15:38:44.441+08 e92738ba-66bf-4ec9-85c5-c1f2b4d7780e 5 t f
+3406 moduleId 模块号 Variable \N \N 1 \N \N \N 2020-04-08 15:56:47.858+08 2020-04-08 15:56:47.858+08 385b0bd6-f460-40fc-9a65-78aaba84aaf3 5 t f
+3377 sensortype 传感器类型 Constant \N gnss 0 2020-03-12 15:39:06.664+08 2020-03-12 15:39:25.672+08 e92738ba-66bf-4ec9-85c5-c1f2b4d7780e 5 t f
+3379 protocolcode 协议号 Constant \N 1401 0 2020-03-12 17:19:03.929+08 2020-03-13 17:39:42.229+08 2ea1c0ff-9d04-4a29-addb-ceaf8b4c1744 5 t f
+3407 SIMNum SIM卡号 Variable \N \N 13212345678 \N \N \N \N 2020-04-09 10:46:39.411+08 2020-04-09 10:46:39.411+08 bfa2c35f-19d1-450b-a04a-b0e211b43bf5 5 t f
+3408 deviceType 设备类型 Constant \N \N gateway \N \N \N 2020-04-09 10:47:09.793+08 2020-04-09 10:47:09.793+08 bfa2c35f-19d1-450b-a04a-b0e211b43bf5 5 t f
+3378 sensortype 传感器类型 Constant \N zxwd 0 2020-03-12 17:18:32.713+08 2020-03-16 15:17:15.97+08 2ea1c0ff-9d04-4a29-addb-ceaf8b4c1744 5 t f
+3380 protocolcode 协议号 Constant \N \N 9031 \N \N \N \N 2020-03-18 14:13:11.94+08 2020-03-18 14:13:11.94+08 1e4fb0f1-79a1-4246-a85c-478b55f8df95 1 t f
+3381 sensortype 传感器型号 Constant \N \N JLSZ \N \N \N 2020-03-18 14:13:50.983+08 2020-03-18 14:13:50.983+08 1e4fb0f1-79a1-4246-a85c-478b55f8df95 5 t f
+3382 数据 mqtt Variable \N \N \N 2 3000 0 \N 2020-03-20 10:56:08.941+08 2020-03-20 10:56:08.941+08 1131f328-b9a1-4361-beae-547a1acb032d 2 t f
+3383 sensortype 传感器类型 Constant \N \N duowei \N \N \N \N 2020-03-25 16:43:26.918+08 2020-03-25 16:43:26.918+08 47de1028-1b35-4a17-b78e-f66178ecb4e6 5 t f
+3384 deviceSerial 设备序列号 Variable \N \N \N \N \N \N 2020-04-01 10:09:24.309+08 2020-04-01 10:09:24.309+08 f070a6a5-406b-4567-ab70-0ba9cc204545 5 t f
+3385 sensortype 传感器类型 Constant \N \N cx \N \N \N \N 2020-04-03 17:19:01.229+08 2020-04-03 17:19:01.229+08 ca2fe08c-b600-4472-8de2-3c549ea7d150 5 t f
+3386 devicetype 设备类型 Constant \N \N sensor \N \N \N 2020-04-03 17:19:01.234+08 2020-04-03 17:19:01.234+08 ca2fe08c-b600-4472-8de2-3c549ea7d150 5 t f
+3387 protocolcode 协议号 Constant \N \N 1503 \N \N \N Modbus杆式测斜协议 2020-04-03 17:19:01.238+08 2020-04-03 17:19:01.238+08 ca2fe08c-b600-4472-8de2-3c549ea7d150 5 t f
+3388 range 量程 Constant \N \N (-30,30),(-25,70) \N \N \N °,℃ 2020-04-03 17:19:01.241+08 2020-04-03 17:19:01.241+08 ca2fe08c-b600-4472-8de2-3c549ea7d150 5 t f
+3389 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2020-04-08 13:19:27.047+08 2020-04-08 13:19:27.047+08 0796dca5-8068-4bc2-a73f-99160576a988 1 t f
+3390 sensortype 传感器类型 Constant \N \N zx \N \N \N 2020-04-08 13:20:09.406+08 2020-04-08 13:20:09.406+08 0796dca5-8068-4bc2-a73f-99160576a988 5 t f
+3391 range 量程 Constant \N \N (-5000,5000) \N \N \N kN 2020-04-08 13:21:09.264+08 2020-04-08 13:21:09.264+08 0796dca5-8068-4bc2-a73f-99160576a988 5 t f
+3392 deviceType 设备类型 Constant \N \N sensor \N \N \N 2020-04-08 13:22:01.628+08 2020-04-08 13:22:01.628+08 0796dca5-8068-4bc2-a73f-99160576a988 5 t f
+3393 channelId 通道号 Variable \N \N 1 \N 128 1 2020-04-08 13:22:39.545+08 2020-04-08 13:22:39.545+08 0796dca5-8068-4bc2-a73f-99160576a988 1 t f
+3394 moduleId 模块号 Variable \N \N 1 \N \N \N 2020-04-08 13:23:28.144+08 2020-04-08 13:23:28.144+08 0796dca5-8068-4bc2-a73f-99160576a988 5 t f
+3395 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2020-04-08 15:18:35.61+08 2020-04-08 15:18:35.61+08 c5a82ea8-374b-4efd-b9e9-716b216d8ee4 5 t f
+3396 moduleId 模块号 Variable \N \N 1 \N \N \N 2020-04-08 15:18:35.613+08 2020-04-08 15:18:35.613+08 c5a82ea8-374b-4efd-b9e9-716b216d8ee4 5 t f
+3397 deviceType 设备类型 Constant \N \N sensor \N \N \N 2020-04-08 15:18:35.615+08 2020-04-08 15:18:35.615+08 c5a82ea8-374b-4efd-b9e9-716b216d8ee4 5 t f
+3398 range 量程 Constant \N (0,0.6) 0 MPa 2020-04-08 15:18:35.617+08 2020-04-08 15:19:01.632+08 c5a82ea8-374b-4efd-b9e9-716b216d8ee4 5 t f
+3399 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2020-04-08 15:19:39.691+08 2020-04-08 15:19:39.691+08 c5a82ea8-374b-4efd-b9e9-716b216d8ee4 1 t f
+3400 channelId 通道号 Variable \N \N 1 \N 128 1 2020-04-08 15:20:27.051+08 2020-04-08 15:20:27.051+08 c5a82ea8-374b-4efd-b9e9-716b216d8ee4 1 t f
+3401 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2020-04-08 15:53:51.42+08 2020-04-08 15:53:51.42+08 385b0bd6-f460-40fc-9a65-78aaba84aaf3 5 t f
+3402 channelId 通道号分类 Variable \N \N 1 \N 128 1 2020-04-08 15:54:30.263+08 2020-04-08 15:54:30.263+08 385b0bd6-f460-40fc-9a65-78aaba84aaf3 1 t f
+3403 deviceType 设备类型 Constant \N \N sensor \N \N \N 2020-04-08 15:55:01.552+08 2020-04-08 15:55:01.552+08 385b0bd6-f460-40fc-9a65-78aaba84aaf3 5 t f
+3404 range 量程 Constant \N \N (0,6) \N \N \N MPa 2020-04-08 15:55:47.972+08 2020-04-08 15:55:47.972+08 385b0bd6-f460-40fc-9a65-78aaba84aaf3 5 t f
+3405 protocolcode 协议号 Constant \N \N 1401 \N \N \N 2020-04-08 15:56:23.383+08 2020-04-08 15:56:23.383+08 385b0bd6-f460-40fc-9a65-78aaba84aaf3 1 t f
+3409 range 量程 Constant \N \N (-30,30),(-25,70) \N \N \N °,℃ 2020-04-09 11:45:01.373+08 2020-04-09 11:45:01.373+08 cf08e20c-2c85-4a1d-84a6-b773c3291124 5 t f
+3410 protocolcode 协议号 Constant \N \N 1503 \N \N \N 2020-04-09 11:48:04.23+08 2020-04-09 11:48:04.23+08 cf08e20c-2c85-4a1d-84a6-b773c3291124 5 t f
+3411 devicetype 设备类型 Constant \N \N sensor \N \N \N 2020-04-09 11:49:04.035+08 2020-04-09 11:49:04.035+08 cf08e20c-2c85-4a1d-84a6-b773c3291124 5 t f
+3412 sensortype 传感器类型 Constant \N \N cx \N \N \N 2020-04-09 11:49:37.674+08 2020-04-09 11:49:37.674+08 cf08e20c-2c85-4a1d-84a6-b773c3291124 5 t f
+3413 sensortype 传感器类型 Variable \N \N cx \N \N \N \N 2020-04-10 14:35:20.909+08 2020-04-10 14:35:20.909+08 854b696f-3001-4d7f-bffc-1e78e73b7d31 5 t f
+3414 devicetype 设备类型 Constant \N \N sensor \N \N \N 2020-04-10 14:35:20.917+08 2020-04-10 14:35:20.917+08 854b696f-3001-4d7f-bffc-1e78e73b7d31 5 t f
+3415 protocolcode 协议号 Constant \N \N 1503 \N \N \N 2020-04-10 14:35:20.922+08 2020-04-10 14:35:20.922+08 854b696f-3001-4d7f-bffc-1e78e73b7d31 5 t f
+3416 range 量程 Variable \N \N (-30,30),(-25,70) \N \N \N °,℃ 2020-04-10 14:35:20.93+08 2020-04-10 14:35:20.93+08 854b696f-3001-4d7f-bffc-1e78e73b7d31 5 t f
+3417 range 量程 Variable \N \N (-30,30),(-25,70) \N \N \N °,℃ 2020-04-13 10:48:03.089+08 2020-04-13 10:48:03.089+08 2f588726-18df-4ab2-b677-5c4479cef768 5 t f
+3418 protocolcode 协议号 Constant \N \N 1503 \N \N \N 2020-04-13 10:48:03.092+08 2020-04-13 10:48:03.092+08 2f588726-18df-4ab2-b677-5c4479cef768 5 t f
+3419 devicetype 设备类型 Constant \N \N sensor \N \N \N 2020-04-13 10:48:03.094+08 2020-04-13 10:48:03.094+08 2f588726-18df-4ab2-b677-5c4479cef768 5 t f
+3420 sensortype 传感器类型 Variable \N \N cx \N \N \N 2020-04-13 10:48:03.096+08 2020-04-13 10:48:03.096+08 2f588726-18df-4ab2-b677-5c4479cef768 5 t f
+3421 sensortype 传感器类型 Constant \N \N cx \N \N \N \N 2020-04-13 11:44:59.535+08 2020-04-13 11:44:59.535+08 b3c05fb2-59b8-4bf7-b85d-7823a6781395 5 t f
+3422 protocolcode 协议号 Constant \N \N 1502 \N \N \N 2020-04-13 11:44:59.538+08 2020-04-13 11:44:59.538+08 b3c05fb2-59b8-4bf7-b85d-7823a6781395 5 t f
+3423 range 量程 Constant \N (-30,30),(-30,30),(-25,70) 0 °,°,℃ 2020-04-13 11:44:59.541+08 2020-04-13 11:45:26.621+08 b3c05fb2-59b8-4bf7-b85d-7823a6781395 5 t f
+3424 devicetype 设备类型 Variable \N \N sensor \N \N \N \N 2020-04-13 11:46:03.968+08 2020-04-13 11:46:03.968+08 b3c05fb2-59b8-4bf7-b85d-7823a6781395 5 t f
+3425 protocolcode 协议号 Constant \N \N 1503 \N \N \N \N 2020-04-13 13:05:47.958+08 2020-04-13 13:05:47.958+08 71c10138-4c73-4682-af9b-a904323eeac2 5 t f
+3426 sensortype 传感器类型 Constant \N \N cx \N \N \N 2020-04-13 13:05:47.963+08 2020-04-13 13:05:47.963+08 71c10138-4c73-4682-af9b-a904323eeac2 5 t f
+3427 devicetype 设备类型 Constant \N \N sensor \N \N \N 2020-04-13 13:05:47.967+08 2020-04-13 13:05:47.967+08 71c10138-4c73-4682-af9b-a904323eeac2 5 t f
+3428 range 量程 Constant \N \N (-30,30),(-30,30),(-25,70) \N \N \N 2020-04-13 13:05:47.97+08 2020-04-13 13:05:47.97+08 71c10138-4c73-4682-af9b-a904323eeac2 5 t f
+3429 protocolcode 协议号 Constant \N \N 9030 \N \N \N \N 2020-04-13 13:25:53.459+08 2020-04-13 13:25:53.459+08 9699ac1e-3bc8-4a9a-960f-4c82cc2507ff 5 t f
+3430 protocolcode 协议号 Constant \N \N 9030 \N \N \N \N 2020-04-13 13:29:23.768+08 2020-04-13 13:29:23.768+08 cbdb48d6-afd7-4322-884a-d37d56f96176 5 t f
+3431 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2020-04-13 16:31:25.306+08 2020-04-13 16:31:25.306+08 0df31ce5-f6b4-4f95-a5f8-07c4ccc52346 5 t f
+3432 moduleId 模块号 Variable \N \N 1 \N \N \N 2020-04-13 16:31:25.31+08 2020-04-13 16:31:25.31+08 0df31ce5-f6b4-4f95-a5f8-07c4ccc52346 5 t f
+3434 sensortype 传感器类型 Constant \N \N cj \N \N \N \N 2020-04-13 16:42:59.176+08 2020-04-13 16:42:59.176+08 8fd9d375-1389-43b9-9423-654a4dd5af44 5 t f
+3435 deviceType 设备类型 Constant \N \N sensor \N \N \N 2020-04-13 16:42:59.179+08 2020-04-13 16:42:59.179+08 8fd9d375-1389-43b9-9423-654a4dd5af44 5 t f
+3436 range 量程 Constant \N \N (0.5,80) \N \N \N mm 2020-04-13 16:42:59.182+08 2020-04-13 16:42:59.182+08 8fd9d375-1389-43b9-9423-654a4dd5af44 5 t f
+3437 protocolcode 协议号 Constant \N \N 9509 \N \N \N 2020-04-13 16:42:59.185+08 2020-04-13 16:42:59.185+08 8fd9d375-1389-43b9-9423-654a4dd5af44 5 t f
+3438 k 转换系数 Variable \N \N 1 16 99999 -99999 \N 2020-04-13 17:20:54.427+08 2020-04-13 17:20:54.427+08 a81d1a62-5c7f-4c96-8abe-fe4a0bca5dcc 2 t f
+2771 range 量程 Constant \N (-500,500) 0 t 2019-02-25 13:32:42.963+08 2020-04-14 09:51:30.301+08 c952a71d-a917-40a7-aecc-cf2dc40c238a 5 t f
+3439 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2020-04-14 10:23:58.886+08 2020-04-14 10:23:58.886+08 6e79c080-ecb3-4222-927e-f2dfcd85683a 5 t f
+3440 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2020-04-14 10:32:45.13+08 2020-04-14 10:32:45.13+08 2b960cb5-8b22-4a35-b811-2a74b8f47196 5 t f
+3441 sensortype 传感器类型 Constant \N \N ZX \N \N \N \N 2020-04-14 10:39:24.289+08 2020-04-14 10:39:24.289+08 2e98107c-2635-43a9-a89f-872152bac901 5 t f
+3442 sensortype 传感器类型 Constant \N \N zx \N \N \N \N 2020-04-14 10:44:39.274+08 2020-04-14 10:44:39.274+08 2de0b18f-a13a-48a9-8e34-6bfeff609972 5 t f
+3443 protocolcode 协议号 Constant \N \N 1102 \N \N \N \N 2020-04-14 10:52:48.228+08 2020-04-14 10:52:48.228+08 0df31ce5-f6b4-4f95-a5f8-07c4ccc52346 1 t f
+3433 range 量程 Variable \N (‐40,120) 0 2020-04-13 16:31:25.313+08 2020-04-14 10:56:09.103+08 0df31ce5-f6b4-4f95-a5f8-07c4ccc52346 5 t f
+3444 kt 温补系数 Variable \N \N 0 3 1000 -1000 \N 2020-04-21 14:04:39.535+08 2020-04-21 14:04:39.535+08 8cee37a9-d972-4d3b-97eb-53c9a87dbe9c 2 t f
+3445 t0 温度初值 Variable \N \N 0 2 100 -100 ℃ 2020-04-21 14:05:22.453+08 2020-04-21 14:05:22.453+08 8cee37a9-d972-4d3b-97eb-53c9a87dbe9c 2 t f
+3447 sno \N Tag \N \N \N \N \N \N \N 2020-04-22 19:14:33.289+08 2020-04-22 19:14:33.289+08 f9304770-9fc6-4203-a75a-2759b659a4d7 5 t f
+3448 moduleId 探头编号 Variable \N \N \N \N \N \N 2020-05-11 10:58:14.701+08 2020-05-11 10:58:14.701+08 57b88830-72c4-4739-8d3b-3754fb371135 5 t f
+3449 deviceType 设备类型 Constant \N \N sensor \N \N \N \N 2020-05-14 11:39:53.452+08 2020-05-14 11:39:53.452+08 82d6439d-e647-44e7-ba65-2de818baea7f 5 t f
+3450 sensortype 传感器类型 Constant \N \N gdgs \N \N \N \N 2020-05-20 09:22:50.323+08 2020-05-20 09:22:50.323+08 9c12215f-afab-45e9-8341-1e487df6d020 5 t f
+3451 sensortype 设备类型 Constant \N \N gdgs \N \N \N \N 2020-05-20 09:26:32.549+08 2020-05-20 09:26:32.549+08 06cc1b7c-e6a3-4caf-9b5a-0e7ab8800ec2 5 t f
+3452 cycletime 采集间隔 Variable \N \N \N \N \N \N 2020-05-26 10:15:05.235+08 2020-05-26 10:15:05.235+08 94e0657d-9d34-4baf-bac1-34cb6610e051 5 t f
+3462 registerCount 寄存器个数 Variable \N \N 14 \N \N \N \N 2020-07-01 13:42:36.184+08 2020-07-01 13:42:36.184+08 5865ba02-99d8-4649-a200-c40dfa917982 5 t f
+3455 G 直线系数G Variable \N 1 2 9999999999999999 -999999999999999 2020-06-11 14:33:34.373+08 2020-06-11 15:25:21.676+08 59ffec5d-7c08-417e-bddc-8483466e1d66 2 t f
+3456 K 温度系数K Variable \N 1 2 9999999999999999 -999999999999999 2020-06-11 14:34:16.954+08 2020-06-11 15:25:39.704+08 59ffec5d-7c08-417e-bddc-8483466e1d66 2 t f
+3457 ceMoudle 测斜编号(逗号隔开,底部为第一根) Variable \N \N 1,2,3 \N \N \N \N 2020-06-12 09:44:09.784+08 2020-06-12 09:44:09.784+08 c8c925b5-d496-4eb8-a0c7-189ce391ff1a 5 t f
+3461 uploadinteral 上传间隔 Variable \N 0 s 2020-06-30 08:39:03.076+08 2020-06-30 09:07:31.999+08 c3507ba4-b2b5-45b8-aecb-84079c90649d 5 t f
+3453 T0 温度初值T0 Variable \N 0 2 99999999999999999999 -9999999999999999 ℃ 2020-06-11 14:31:14.898+08 2020-06-11 15:24:39.372+08 59ffec5d-7c08-417e-bddc-8483466e1d66 2 t f
+3458 returnTime 回传时间 Variable \N \N 0 \N \N \N min 2020-06-12 09:45:28.108+08 2020-06-12 09:45:28.108+08 c8c925b5-d496-4eb8-a0c7-189ce391ff1a 5 t f
+3459 unitType 测斜类型 Variable \N \N 0 \N \N \N 2020-06-12 09:46:20.307+08 2020-06-12 09:46:20.307+08 c8c925b5-d496-4eb8-a0c7-189ce391ff1a 5 t f
+3454 R0 模数初值R0 Variable \N 0 2 99999999999999 -9999999999999999 Dig 2020-06-11 14:32:35.844+08 2020-06-18 11:49:48.039+08 59ffec5d-7c08-417e-bddc-8483466e1d66 2 t f
+456 range 量程 Constant \N (0,2000) 0 mm 2017-12-12 10:23:59.564+08 2020-07-14 17:01:49.735+08 24064f03-7c7e-493b-99f2-c926717d28fc 5 t f
+3466 sensortype 传感器类型 Constant \N \N gnss \N \N \N \N 2020-07-20 09:49:47.236+08 2020-07-20 09:49:47.236+08 069e9c4f-794e-4b89-abc9-d53ab5d5cf7a 5 t f
+3460 acqinteral 采集间隔 Variable \N 0 s 2020-06-30 08:38:31.459+08 2020-06-30 09:07:37.637+08 c3507ba4-b2b5-45b8-aecb-84079c90649d 5 t f
+3467 beginTime 初始时间 Variable \N \N 20180102030405 \N \N \N \N 2020-07-20 09:50:30.535+08 2020-07-20 09:50:30.535+08 069e9c4f-794e-4b89-abc9-d53ab5d5cf7a 5 t f
+3468 pointId 监测点ID Variable \N \N 1 \N \N \N 2020-07-20 09:50:56.64+08 2020-07-20 09:50:56.64+08 069e9c4f-794e-4b89-abc9-d53ab5d5cf7a 5 t f
+3469 address 设备地址 Variable \N \N \N \N \N \N 2020-07-20 16:30:43.051+08 2020-07-20 16:30:43.051+08 f54dc0a0-6317-4a46-9f09-4d8024ff6959 5 t f
+3470 code 项目编码 Variable \N \N \N \N \N 2020-07-20 16:31:15.209+08 2020-07-20 16:31:15.209+08 f54dc0a0-6317-4a46-9f09-4d8024ff6959 5 t f
+3471 dataUrl dataUrl Variable \N \N http://123.57.47.163:8008/eelink/api/getGHDatas \N \N \N 2020-07-20 16:32:14.198+08 2020-07-20 16:32:14.198+08 f54dc0a0-6317-4a46-9f09-4d8024ff6959 5 t f
+3476 nodenum 节点数 Variable \N \N \N \N \N \N 2020-08-10 08:55:15.583+08 2020-08-10 08:55:15.583+08 8581898c-d047-4cdc-8ccc-ef33a1567435 5 t f
+3477 initial 初值 Variable \N \N 0 3 1000000 0 kWh 2020-08-13 09:25:55.331+08 2020-08-13 09:25:55.331+08 11b16ed9-a251-4907-b941-5a31ea559da1 2 t f
+3479 sensortype 设备类型 Constant \N \N prism_L_0 \N \N \N \N 2020-08-14 16:26:35.678+08 2020-08-14 16:26:35.678+08 7599bfb7-18fc-40c7-be52-ff9fd0d1519e 5 t f
+3478 K 互感系数 Variable \N 50 0 100 1 2020-08-13 09:25:55.335+08 2020-08-13 10:01:31.707+08 11b16ed9-a251-4907-b941-5a31ea559da1 1 t f
+3480 registersNum 寄存器数量 Variable \N \N \N \N \N \N 2020-08-26 14:07:08.141+08 2020-08-26 14:07:08.141+08 945563fe-656a-461e-8dca-7a4b2edbf9d0 5 t f
+3486 sentype 设备类型 Constant \N \N rainfall \N \N \N \N 2020-08-27 16:22:16.998+08 2020-08-27 16:22:16.998+08 35e7c6a8-9125-4612-889d-259e09a24735 5 t f
+3487 sensortype 类型 Constant \N \N standard485 \N \N \N 2020-08-27 16:22:17+08 2020-08-27 16:22:17+08 35e7c6a8-9125-4612-889d-259e09a24735 5 t f
+3488 sensortype 传感器类型 Constant \N \N cx \N \N \N \N 2020-08-27 16:38:22.115+08 2020-08-27 16:38:22.115+08 899def98-516b-4c5f-a7e8-2fd48018bf12 5 t f
+3489 sensorType 设备类型 Variable \N \N CGQ \N \N \N \N 2020-09-01 10:29:11.22+08 2020-09-01 10:29:11.22+08 8f3e91ce-4354-4d6a-826a-c727aaabaa58 5 t f
+3493 sensortype 传感器类型 Constant \N \N pic \N \N \N \N 2020-09-10 11:15:15.557+08 2020-09-10 11:15:15.557+08 207df42a-f8cf-47d0-a4bc-d1d5d9114928 5 t f
+3494 dataUrl dataUrl Variable \N \N http://182.92.232.25:6830/partner/channel \N \N \N \N 2020-09-11 10:25:19.027+08 2020-09-11 10:25:19.027+08 f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43 5 t f
+3495 tokenUrl tokenUrl Variable \N \N http://182.92.232.25:6830/sys/login \N \N \N 2020-09-11 10:25:48.367+08 2020-09-11 10:25:48.367+08 f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43 5 t f
+3497 username 账号 Variable \N \N \N \N \N 2020-09-11 10:30:43.754+08 2020-09-11 10:30:43.754+08 f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43 5 t f
+3498 password 密码 Variable \N \N \N \N \N 2020-09-11 10:31:14.611+08 2020-09-11 10:31:14.611+08 f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43 5 t f
+3499 sensortype 传感器类型 Constant \N gnss_t500 0 无 2020-09-11 14:36:39.669+08 2020-09-11 14:50:06.338+08 2a7828f8-5044-43fb-9435-9a59ec4d769a 5 t f
+3501 sensortype 设备类型 Constant \N \N prism_L_0 \N \N \N \N 2020-09-18 11:09:37.834+08 2020-09-18 11:09:37.834+08 8523278f-0788-4ef6-8669-64d28b348c59 5 t f
+3504 sensorType 设备类型 Constant \N \N 257 \N \N \N \N 2020-09-21 11:51:45.863+08 2020-09-21 11:51:45.863+08 dc3e2b45-f9db-4aec-993a-d8369918a67e 1 t f
+3506 device_id 设备ID Variable \N \N \N \N \N \N 2020-09-21 13:34:34.324+08 2020-09-21 13:34:34.324+08 b6d47de4-d27f-45de-a8b2-adfedc7f0f6a 5 t f
+3507 device_id 设备ID Variable \N \N \N \N \N \N 2020-09-21 13:35:04.624+08 2020-09-21 13:35:04.624+08 dc3e2b45-f9db-4aec-993a-d8369918a67e 5 t f
+3505 device_id 设备ID Variable \N 0 . 无 2020-09-21 13:34:01.043+08 2020-09-27 10:30:13.396+08 55f72e62-0922-4975-9714-058decf7a14d 5 t f
+3509 devicetype 设备类型 Constant \N \N sensor \N \N \N 2020-09-28 10:33:27.954+08 2020-09-28 10:33:27.954+08 e6b4e767-9ae2-459f-99fc-042b9d6af678 5 t f
+3510 sensortype 传感器类型 Constant \N \N fs \N \N \N 2020-09-28 10:33:27.956+08 2020-09-28 10:33:27.956+08 e6b4e767-9ae2-459f-99fc-042b9d6af678 5 t f
+3511 devicetype 设备类型 Constant \N \N sensor \N \N \N \N 2020-09-28 10:45:02.919+08 2020-09-28 10:45:02.919+08 455f2a29-2660-4cfa-97f9-ef7f357d59d6 5 t f
+3512 protocolcode 协议号 Constant \N \N 9219 \N \N \N 2020-09-28 10:45:02.922+08 2020-09-28 10:45:02.922+08 455f2a29-2660-4cfa-97f9-ef7f357d59d6 1 t f
+3513 sensortype 传感器类型 Constant \N \N fx \N \N \N 2020-09-28 10:45:02.925+08 2020-09-28 10:45:02.925+08 455f2a29-2660-4cfa-97f9-ef7f357d59d6 5 t f
+3508 protocolcode 协议号 Constant \N 9218 0 2020-09-28 10:33:27.951+08 2020-09-28 10:50:31.502+08 e6b4e767-9ae2-459f-99fc-042b9d6af678 1 t f
+3503 sensorType 设备类型 Constant \N 513 0 . 无 2020-09-21 11:50:24.73+08 2020-09-28 15:08:13.365+08 55f72e62-0922-4975-9714-058decf7a14d 1 t f
+3502 sensorType 设备类型 Constant \N 514 0 . 无 2020-09-21 11:49:24.452+08 2020-09-28 15:10:22.682+08 b6d47de4-d27f-45de-a8b2-adfedc7f0f6a 1 t f
+3516 device_id 设备ID Variable \N \N \N \N \N \N 2020-10-10 10:46:03.702+08 2020-10-10 10:46:03.702+08 fa3e1751-abcf-43d6-89d5-ad9bc9a979b6 5 t f
+3517 sensorType 设备类型 Constant \N 514 0 \N \N . 无 2020-10-10 10:46:03.706+08 2020-10-10 10:46:03.706+08 fa3e1751-abcf-43d6-89d5-ad9bc9a979b6 1 t f
+3518 sensorType 设备类型 Constant \N 513 0 \N \N . 无 2020-10-10 10:46:11.535+08 2020-10-10 10:46:11.535+08 f0d5077b-4260-422c-87e3-92d13d136ebf 1 t f
+3519 device_id 设备ID Variable \N 0 \N \N . 无 2020-10-10 10:46:11.541+08 2020-10-10 10:46:11.541+08 f0d5077b-4260-422c-87e3-92d13d136ebf 5 t f
+3532 deviceSerial 设备号 Variable \N \N \N \N \N \N 2020-10-20 16:21:29.063+08 2020-10-20 16:21:29.063+08 f89c588a-f68a-4208-857b-555022da9f9e 5 t f
+3533 sensortype 传感器类型 Constant \N \N standard \N \N \N \N 2020-10-23 17:03:59.972+08 2020-10-23 17:03:59.972+08 d26881e7-f69e-4b7d-9041-47009bd2c298 5 t f
+3523 loraid LoraID Variable \N \N 0 \N \N \N \N 2020-10-15 14:25:11.424+08 2020-10-15 14:25:11.424+08 4452ff6a-859b-45e6-9e9c-c6b59ee3667b 5 t f
+3524 hard 硬件版本 Constant \N \N 16 \N \N \N \N 0x10 2020-10-15 14:33:56.796+08 2020-10-15 14:33:56.796+08 b6d47de4-d27f-45de-a8b2-adfedc7f0f6a 1 t f
+3525 hard 硬件版本 Constant \N \N 16 \N \N \N \N 0x10 2020-10-15 14:34:27.939+08 2020-10-15 14:34:27.939+08 55f72e62-0922-4975-9714-058decf7a14d 1 t f
+3526 hard 硬件版本 Constant \N \N 16 \N \N \N \N 0x10 2020-10-15 14:34:56.232+08 2020-10-15 14:34:56.232+08 dc3e2b45-f9db-4aec-993a-d8369918a67e 1 t f
+3521 hard 硬件版本 Constant \N 16 0 . 0x10 2020-10-10 10:53:50.914+08 2020-10-15 16:25:41.954+08 fa3e1751-abcf-43d6-89d5-ad9bc9a979b6 1 t f
+3530 sensortype 设备类型 Constant \N 声光报警 0 无 无 2020-10-16 14:22:53.599+08 2020-11-24 15:49:31.732+08 1450b04e-214d-47b0-8e32-def5a361cc48 5 t f
+3527 sensortype 传感器类型 Constant \N \N cj \N \N \N \N 2020-10-16 11:41:30.101+08 2020-10-16 11:41:30.101+08 0b84defc-2160-4d4a-8d71-6f350b4d6666 5 t f
+3520 hard 硬件版本 Constant \N 17 0 . 0x10 2020-10-10 10:53:02.194+08 2020-10-30 16:01:28.71+08 f0d5077b-4260-422c-87e3-92d13d136ebf 1 t f
+3534 sensortype 传感器型号 Constant \N \N wsd \N \N \N \N 2020-11-04 09:56:29.882+08 2020-11-04 09:56:29.882+08 e3e8ca1e-1676-4b76-96ed-131ba8516599 5 t f
+3535 sensortype 传感器类型 Constant \N \N lx \N \N \N \N 2020-11-04 10:06:19.428+08 2020-11-04 10:06:19.428+08 2d0ff832-a7e0-4029-94bf-d7203c1fa793 5 t f
+3538 acqinterval 采集间隔 Variable \N \N \N \N \N min 2020-11-10 15:16:48.493+08 2020-11-10 15:16:48.493+08 fb922722-9262-470f-8064-4b78234fa802 5 f f
+3537 returnTime 回传时间间隔 Variable \N 0 min 2020-11-10 15:15:29.527+08 2020-11-10 15:16:54.882+08 fb922722-9262-470f-8064-4b78234fa802 5 f f
+3540 bps 采集波特率 Variable \N \N \N \N \N 2020-11-10 15:19:20.788+08 2020-11-10 15:19:20.788+08 fb922722-9262-470f-8064-4b78234fa802 5 f f
+3541 sa 服务器地址 Variable \N \N 218.3.126.49 \N \N \N 2020-11-10 15:20:29.567+08 2020-11-10 15:20:29.567+08 fb922722-9262-470f-8064-4b78234fa802 5 f f
+3542 port 端口 Variable \N \N 19800 \N \N \N 2020-11-10 15:21:14.254+08 2020-11-10 15:21:14.254+08 fb922722-9262-470f-8064-4b78234fa802 5 f f
+3544 sensortype 传感器类型 Constant \N \N cx \N \N \N \N 2020-11-11 09:55:32.35+08 2020-11-11 09:55:32.35+08 c991c138-3b47-4a21-af81-9ba1df554176 5 t f
+3529 sensortype 传感器类型 Constant \N kx 0 2020-10-16 13:52:59.067+08 2020-11-16 10:23:14.29+08 b7dd781d-dba7-4228-b49f-8aee75e42625 5 t f
+3536 sensortype 传感器类型 Constant \N rainfall 0 2020-11-04 10:10:46.631+08 2020-11-19 15:51:58.522+08 c51512a6-3e90-4b6e-8a21-987464b10ca9 5 t f
+3582 password 密码 Variable \N \N TJU123456 \N \N \N 2020-12-31 13:44:15.46+08 2020-12-31 13:44:15.46+08 1dae2ae1-5be8-4cd2-824f-cc4948f75959 5 t f
+3554 hard 硬件版本 Constant \N \N 16 \N \N \N \N 0x10 2020-11-11 17:46:32.112+08 2020-11-11 17:46:32.112+08 92bbac70-53a3-4d25-b8ab-b4287c52359d 1 t f
+3555 device_id 设备ID Variable \N \N \N \N \N \N 2020-11-11 17:46:32.115+08 2020-11-11 17:46:32.115+08 92bbac70-53a3-4d25-b8ab-b4287c52359d 5 t f
+3556 sensorType 设备类型 Constant \N \N 257 \N \N \N \N 2020-11-11 17:46:32.117+08 2020-11-11 17:46:32.117+08 92bbac70-53a3-4d25-b8ab-b4287c52359d 1 t f
+3557 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2020-11-16 09:26:32.47+08 2020-11-16 09:26:32.47+08 90e48651-6ab9-4f11-95e9-c2c7eb4c3c15 1 t f
+3558 sensortype 传感器类型 Constant \N \N ty \N \N \N \N 2020-11-16 09:26:32.474+08 2020-11-16 09:26:32.474+08 90e48651-6ab9-4f11-95e9-c2c7eb4c3c15 5 t f
+3559 DefaultFormulaId 默认公式 Constant \N \N 927f1c11-f9a3-4c84-a565-57ee9245e41f \N \N \N \N 2020-11-18 09:39:13.236+08 2020-11-18 09:39:13.236+08 90e48651-6ab9-4f11-95e9-c2c7eb4c3c15 5 t f
+3560 DefaultFormulaId 默认公式 Constant \N \N c5378a9c-9406-4583-9ae8-5fddb5a5d65e \N \N \N \N 2020-11-18 09:40:40.96+08 2020-11-18 09:40:40.96+08 c991c138-3b47-4a21-af81-9ba1df554176 5 t f
+3561 DefaultFormulaId 默认公式 Constant \N \N b545defc-450b-4986-83ef-445423df6f98 \N \N \N \N 2020-11-18 09:53:52.96+08 2020-11-18 09:53:52.96+08 c51512a6-3e90-4b6e-8a21-987464b10ca9 5 t f
+3564 DefaultFormulaId 默认公式 Constant \N \N b545defc-450b-4986-83ef-445423df6f98 \N \N \N \N 2020-11-18 09:58:31.566+08 2020-11-18 09:58:31.566+08 1450b04e-214d-47b0-8e32-def5a361cc48 5 t f
+3565 DefaultFormulaId 默认公式 Constant \N \N d71a2a8d-5ad2-4cbe-b8d0-3edf77a1037a \N \N \N \N 2020-11-18 10:03:41.232+08 2020-11-18 10:03:41.232+08 b7dd781d-dba7-4228-b49f-8aee75e42625 5 t f
+3566 DefaultFormulaId 默认公式 Constant \N \N 68180c88-8643-47ba-815c-90668639e80f \N \N \N \N 2020-11-18 10:04:48.989+08 2020-11-18 10:04:48.989+08 0b84defc-2160-4d4a-8d71-6f350b4d6666 5 t f
+3567 DefaultFormulaId 默认公式 Variable \N \N b545defc-450b-4986-83ef-445423df6f98 \N \N \N \N 2020-11-18 10:09:14.494+08 2020-11-18 10:09:14.494+08 e92738ba-66bf-4ec9-85c5-c1f2b4d7780e 5 t f
+3568 DefaultFormulaId 默认公式 Constant \N \N bdb43886-e71d-4135-ad42-6e296635b02e \N \N \N \N 2020-11-18 10:10:51.751+08 2020-11-18 10:10:51.751+08 d2e74fbe-59fe-420d-b127-c61ba8236f42 5 t f
+3569 protocolcode 协议号 Constant \N \N 1401 \N \N \N \N 2020-11-20 08:58:54.974+08 2020-11-20 08:58:54.974+08 af9ec966-1c73-4e23-bae8-5ffcb4661942 5 t f
+3570 sensortype 传感器类型 Constant \N \N zx \N \N \N 2020-11-20 08:59:43.003+08 2020-11-20 08:59:43.003+08 af9ec966-1c73-4e23-bae8-5ffcb4661942 5 t f
+3571 DefaultFormulaId 默认公式 Constant \N \N b545defc-450b-4986-83ef-445423df6f98 \N \N \N \N 2020-11-20 10:08:49.247+08 2020-11-20 10:08:49.247+08 207df42a-f8cf-47d0-a4bc-d1d5d9114928 5 t f
+3563 DefaultFormulaId 默认公式 Constant \N 898c3c4f-ecab-4aa9-9a95-accd00e26193 0 2020-11-18 09:57:36.473+08 2020-11-20 10:57:52.133+08 2d0ff832-a7e0-4029-94bf-d7203c1fa793 5 t f
+3585 moduleNo 设备号 Variable \N \N \N \N \N \N 2020-12-31 14:44:56.77+08 2020-12-31 14:44:56.77+08 1dae2ae1-5be8-4cd2-824f-cc4948f75959 5 t f
+3562 DefaultFormulaId 默认公式 Constant \N fae5e233-4034-4ebe-8e7b-0bf35a648ec9 0 2020-11-18 09:56:24.607+08 2020-11-20 11:20:29.833+08 e3e8ca1e-1676-4b76-96ed-131ba8516599 5 t f
+3572 sensortype 传感器类型 Constant \N \N standard485 \N \N \N \N 2020-11-26 11:43:44.645+08 2020-11-26 11:43:44.645+08 86aa83da-35f2-4247-8660-4d23b9c30a1c 5 t f
+3573 sensortype 传感器类型 Constant \N \N standard485 \N \N \N \N 2020-11-26 11:47:01.528+08 2020-11-26 11:47:01.528+08 c02e4b7c-e6b7-4d83-969c-34059f84af1f 5 t f
+3574 interval 粒度 Variable \N \N \N \N 1440 0 min 2020-12-03 17:40:46.601+08 2020-12-03 17:40:46.601+08 085307b7-181b-4059-9e81-1cbfff8fa061 1 t f
+3575 direction 方向 Variable \N 左进右出,右进左出 左进右出 \N \N \N 2020-12-03 17:40:46.605+08 2020-12-03 17:40:46.605+08 085307b7-181b-4059-9e81-1cbfff8fa061 4 t f
+3576 device_id 基站ID Variable \N \N \N \N \N \N 2020-12-09 13:54:25.977+08 2020-12-09 13:54:25.977+08 8001366f-40a9-4e0c-affa-d050c5eacf17 5 t f
+3577 closTime 闭合时间 Variable \N \N 2 \N \N \N s 2020-12-24 09:23:58.513+08 2020-12-24 09:23:58.513+08 7b536454-20a7-4c1b-bfeb-4a0f018d2673 5 t f
+3578 cycle 周期 Variable \N \N 300000 \N \N \N ms 2020-12-24 16:03:29.503+08 2020-12-24 16:03:29.503+08 d67fea40-a63c-4087-b5fd-5e5f0c387893 5 t f
+3579 sensortype 传感器类型 Constant \N \N 多点位移 \N \N \N \N 2020-12-30 15:52:41.406+08 2020-12-30 15:52:41.406+08 d9aab088-57f5-43ba-b30b-3342219a4b75 5 t f
+3580 dataUrl dataUrl Variable \N http://gtd.vp.cn/dataChart/queryShareDataList.do 0 \N 2020-12-31 13:41:41.63+08 2020-12-31 13:42:29.232+08 1dae2ae1-5be8-4cd2-824f-cc4948f75959 5 t f
+3581 username 用户名 Variable \N \N tdjgjkjc \N \N \N 2020-12-31 13:43:37.962+08 2020-12-31 13:43:37.962+08 1dae2ae1-5be8-4cd2-824f-cc4948f75959 5 t f
+3588 sensortype 设备类型 Constant \N \N prism_L_0 \N \N \N 2021-01-08 17:44:35.801+08 2021-01-08 17:44:35.801+08 daaea98a-a1a5-40c5-b34f-108d16d94b12 5 t f
+3589 sensortype 设备类型 Constant \N \N prism_L \N \N \N \N 2021-01-08 17:46:14.768+08 2021-01-08 17:46:14.768+08 2d2bb5aa-7dae-4123-bf05-5cdc08d7480f 5 t f
+3591 sensortype 传感器类型 Constant \N js 0 2021-01-18 12:37:46.562+08 2021-01-18 12:38:16.136+08 7d999707-8940-47f8-995e-f50b44e48ede 5 t f
+3596 sensortype 传感器类型 Constant \N \N hs \N \N \N \N 2021-01-18 14:09:49.984+08 2021-01-18 14:09:49.984+08 c677c2a2-bc09-4171-ad9c-f9ddfbf3d046 5 t f
+3590 DefaultFormulaId 默认公式 Constant \N b545defc-450b-4986-83ef-445423df6f98 0 2021-01-18 12:37:46.559+08 2021-01-18 13:57:55.962+08 7d999707-8940-47f8-995e-f50b44e48ede 5 t f
+3592 sensortype 传感器类型 Constant \N \N qj \N \N \N \N 2021-01-18 14:02:08.274+08 2021-01-18 14:02:08.274+08 ecf4b234-2797-4fbc-bf0d-0f3f41dbd017 5 t f
+3593 DefaultFormulaId 默认公式 Constant \N \N b545defc-450b-4986-83ef-445423df6f98 \N \N \N 2021-01-18 14:02:08.279+08 2021-01-18 14:02:08.279+08 ecf4b234-2797-4fbc-bf0d-0f3f41dbd017 5 t f
+3594 sensortype 传感器类型 Constant \N \N tw \N \N \N \N 2021-01-18 14:04:59.681+08 2021-01-18 14:04:59.681+08 d1b7163a-96fb-4364-a1ec-73b29be3dbc0 5 t f
+3595 DefaultFormulaId 默认公式 Constant \N \N ed141cf4-ca2c-49a1-9704-afee24dc9c71 \N \N \N 2021-01-18 14:04:59.684+08 2021-01-18 14:04:59.684+08 d1b7163a-96fb-4364-a1ec-73b29be3dbc0 5 t f
+3597 DefaultFormulaId 默认公式 Constant \N \N ed141cf4-ca2c-49a1-9704-afee24dc9c71 \N \N \N 2021-01-18 14:09:49.99+08 2021-01-18 14:09:49.99+08 c677c2a2-bc09-4171-ad9c-f9ddfbf3d046 5 t f
+3598 sensortype 传感器类型 Constant \N \N nw \N \N \N \N 2021-01-18 14:14:29.682+08 2021-01-18 14:14:29.682+08 e2ad2fb6-75a3-490f-82ae-eac117102885 5 t f
+3599 DefaultFormulaId 默认公式 Constant \N \N ed141cf4-ca2c-49a1-9704-afee24dc9c71 \N \N \N 2021-01-18 14:14:29.695+08 2021-01-18 14:14:29.695+08 e2ad2fb6-75a3-490f-82ae-eac117102885 5 t f
+3602 sensortype 传感器类型 Constant \N \N cj \N \N \N \N 2021-01-26 15:59:08.599+08 2021-01-26 15:59:08.599+08 dadaf677-ed6c-4f61-ba61-d030f157dd14 5 t f
+3603 deviceType 设备类型 Constant \N \N sensor \N \N \N 2021-01-26 15:59:08.685+08 2021-01-26 15:59:08.685+08 dadaf677-ed6c-4f61-ba61-d030f157dd14 5 t f
+3604 protocolcode 协议号 Constant \N \N 9509 \N \N \N 2021-01-26 15:59:08.691+08 2021-01-26 15:59:08.691+08 dadaf677-ed6c-4f61-ba61-d030f157dd14 5 t f
+3605 accelerationrange 加速度量程 Variable \N 2,4,8 2 \N \N \N g 2021-01-29 10:12:04.682+08 2021-01-29 10:12:04.682+08 c51a8eb3-9068-456f-9922-5934de559a71 4 t f
+3606 lagpoint 滞后点数 Variable \N \N 0 \N 2048 0 2021-01-29 10:12:04.969+08 2021-01-29 10:12:04.969+08 c51a8eb3-9068-456f-9922-5934de559a71 1 t f
+3607 triggermode 触发方式 Variable \N 绝对值,上升沿,下降沿,峰值 绝对值 \N \N \N 2021-01-29 10:12:04.974+08 2021-01-29 10:12:04.974+08 c51a8eb3-9068-456f-9922-5934de559a71 4 t f
+3608 duration 定时采集粒度 Variable \N \N 5 \N 999999 0 min 2021-01-29 10:12:04.977+08 2021-01-29 10:12:04.977+08 c51a8eb3-9068-456f-9922-5934de559a71 1 t f
+3610 sduration 定时采集时长 Variable \N \N 5 \N 99999 0 s 2021-01-29 10:12:05.26+08 2021-01-29 10:12:05.26+08 c51a8eb3-9068-456f-9922-5934de559a71 1 t f
+3611 das 去直流 Variable \N \N true \N \N \N 2021-01-29 10:12:05.263+08 2021-01-29 10:12:05.263+08 c51a8eb3-9068-456f-9922-5934de559a71 3 t f
+3612 amplification 放大倍数 Variable \N 1,10,100,1000 1 \N \N \N 2021-01-29 10:12:05.266+08 2021-01-29 10:12:05.266+08 c51a8eb3-9068-456f-9922-5934de559a71 4 t f
+3613 amplitudeadj 幅值修正参数 Variable \N \N 0 2 51241 0 2021-01-29 10:12:05.268+08 2021-01-29 10:12:05.268+08 c51a8eb3-9068-456f-9922-5934de559a71 2 t f
+3614 tduration 加速度触发采集时长 Variable \N \N 5 \N 999999 0 s 2021-01-29 10:12:05.271+08 2021-01-29 10:12:05.271+08 c51a8eb3-9068-456f-9922-5934de559a71 1 t f
+3615 triglevel 触发电平 Variable \N \N 30 2 300 5 mv 2021-01-29 10:12:05.274+08 2021-01-29 10:12:05.274+08 c51a8eb3-9068-456f-9922-5934de559a71 2 t f
+3616 triggerjoin 参与触发方式 Variable \N 不参与,参与 参与 \N \N \N 2021-01-29 10:12:05.276+08 2021-01-29 10:12:05.276+08 c51a8eb3-9068-456f-9922-5934de559a71 4 t f
+3617 samplefreq 采样频率 Variable \N 100,200 100 \N \N \N Hz 2021-01-29 10:12:05.279+08 2021-01-29 10:12:05.279+08 c51a8eb3-9068-456f-9922-5934de559a71 4 t f
+3618 filterfreq 过滤频率 Variable \N \N 128 \N 2048 64 Hz 2021-01-29 10:12:05.281+08 2021-01-29 10:12:05.281+08 c51a8eb3-9068-456f-9922-5934de559a71 1 t f
+3619 dcdriftadj 直流漂移校准参数 Variable \N \N 0 2 6255 0 2021-01-29 10:12:05.283+08 2021-01-29 10:12:05.283+08 c51a8eb3-9068-456f-9922-5934de559a71 2 t f
+3621 duration 定时采集 Variable \N \N 5 \N 999999 0 min 2021-02-01 11:49:22.386+08 2021-02-01 11:49:22.386+08 cce5d34b-3464-4566-81e6-3ff2540af13e 1 t f
+3622 moduleid 模块号 Variable \N \N \N \N \N \N 2021-02-04 16:04:59.969+08 2021-02-04 16:04:59.969+08 408d0732-eb70-4420-89b3-8f5ab433528f 5 t f
+3623 disport 地灾端口 Variable \N 0 2021-02-19 10:13:17.524+08 2021-02-19 10:15:19.091+08 a1923ce2-b8a5-45cb-9d98-6a42901cee7c 5 f f
+3624 password 密码 Variable \N \N \N \N \N \N 2021-02-19 10:53:23.458+08 2021-02-19 10:53:23.458+08 a1923ce2-b8a5-45cb-9d98-6a42901cee7c 5 f f
+3625 sensortype 传感器类型 Constant \N \N LF \N \N \N \N 2021-02-20 15:54:20.578+08 2021-02-20 15:54:20.578+08 ff8195ce-78e0-4668-81bb-8f26e83411a9 5 t f
+3627 loraid LoraID Variable \N \N 0 \N \N \N \N 2021-02-24 11:18:06.869+08 2021-02-24 11:18:06.869+08 5b625df3-f714-4971-94a8-625e9c8812fc 5 t f
+1777 range 量程 Constant \N (-2000,2000) 0 kN 2018-01-23 14:53:15.42+08 2021-03-02 13:53:02.387+08 f6b98e0f-0bfe-4a95-808c-d6d10b4c803b 5 t f
+1795 range 量程 Constant \N (-4000,4000) 0 kN 2018-01-23 14:53:16.006+08 2021-03-02 13:58:14.991+08 8bab3e11-dc23-4082-97ec-a04e78fa19c3 5 t f
+\.
+
+
+--
+-- Name: DeviceProperty_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public."DeviceProperty_id_seq"', 3627, true);
+
+
+--
+-- Data for Name: Dimension; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Dimension" (id, name, "desc", "createdAt", "updatedAt", "thingId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: DimensionCapability; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."DimensionCapability" (id, repeats, "interval", qos, timeout, "createdAt", "updatedAt", "deviceCapabilityId", "dimensionId", "errTimesToDrop") FROM stdin;
+\.
+
+
+--
+-- Data for Name: FeedBack; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."FeedBack" (id, email, mobile, title, "desc", status, "operatorId", "operatorName", remark, "createdAt", "updatedAt") FROM stdin;
+\.
+
+
+--
+-- Data for Name: FilteredResource; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."FilteredResource" (id, name, "desc", type, key, "createBy", "belongTo", properties, "createdAt", "updatedAt") FROM stdin;
+\.
+
+
+--
+-- Data for Name: FormulaMeta; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."FormulaMeta" (id, name, formula, key, "desc", "createdAt", "updatedAt", "deviceMetaId") FROM stdin;
+ea7f8dfb-96fe-4a26-90bc-1b51c9cae11b 减初值公式 \N \N 2018-03-01 14:32:31.496+08 2018-03-01 14:32:31.496+08 c69575ab-795c-45ec-8901-f370255beff1
+9237d478-75b4-48a0-a403-98172bf6c694 基泰通用公式 P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To) \N 2018-03-06 16:53:45.741+08 2018-03-19 16:32:14.219+08 4e281788-df68-4193-bbe0-9159eee1f24e
+155ebc9a-097d-4567-baf4-6271f43c2669 模拟量线性转换数字量公式 P = (dH - dL) / (aH-aL) *(value-aL) + dL \N 2018-03-14 08:04:46.726+08 2018-03-29 17:29:31.844+08 77d8ba09-082d-405d-aeca-9a0d66f902c3
+3e38a57f-b980-45b4-8f8f-1929160edfaa 振弦通用公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2018-07-23 11:11:42.56+08 2018-07-23 11:11:42.56+08 b0a93683-5c88-4f1d-81de-5e41fed44566
+df6a9e9a-ecfa-46b2-9244-698035b23dfa 基泰角度多项式转换 P = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3) \N 2018-03-14 08:12:30.863+08 2018-03-29 17:30:04.216+08 77d8ba09-082d-405d-aeca-9a0d66f902c3
+1ec1750e-a4b7-4f6f-99ba-30cbc1df3f6a 振弦公式 ε=K*(Fi^2-Fo^2) \N 无温度计算 2018-03-12 16:31:26.794+08 2018-07-23 17:50:55.868+08 cad4657b-dba7-4ad9-990c-bf0ce3ee1e6f
+749b1167-3ce5-41a1-a434-9102a9e3f387 公式1 \N \N 2018-03-07 14:13:37.317+08 2018-03-07 14:13:37.317+08 7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4
+209ff0d2-7a85-4997-804a-d64bb04ba531 振弦公式 ε=K*(Fi^2-Fo^2) \N 无温补 2018-03-29 18:48:07.577+08 2018-03-29 18:48:24.796+08 4866de4e-56ad-435f-a21b-0f2b00011e12
+96edcaa5-a909-4ecf-99c4-71cbe4b7b0d7 公式无 \N \N 2018-03-12 15:11:05.756+08 2018-03-12 15:11:05.756+08 4866de4e-56ad-435f-a21b-0f2b00011e12
+0e03ebe4-bdad-4a8f-840c-ba09293c2488 模拟量转换公式 P=(Ii-Io)/K \N 2018-08-03 10:44:55.736+08 2018-08-03 10:44:55.736+08 f556a96a-5649-49c8-beae-aa08f2faa752
+5ca2d973-f401-451a-a9dd-6a17e2ac3a92 公式无 \N \N 公式无 2018-03-12 16:34:46.28+08 2018-03-12 16:35:34.097+08 cad4657b-dba7-4ad9-990c-bf0ce3ee1e6f
+b3ba8400-5a93-4fee-a990-e2623acda7f0 通用振弦公式 P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To) \N 2018-08-15 13:50:49.819+08 2018-08-15 13:50:49.819+08 0b9ab6dc-b8e5-4f20-a507-567be8892e4f
+579e1467-b18d-4cbf-98d4-6d3602b6dfb5 123456 \N \N 2018-05-28 17:34:48.214+08 2018-05-28 17:34:48.214+08 899dde06-bd1d-4215-963e-23596c3fda7f
+72133db4-abf6-4073-bc7f-b99c12aca33c 基泰通用公式 P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To) \N 2018-04-02 17:22:44.718+08 2018-05-10 09:06:03.473+08 8b83567e-d874-40f2-a7e4-f78d6cb5415c
+0ca79346-8d3a-4aca-ba68-833fce60cbf8 基泰通用公式 P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To) \N 2018-03-06 15:06:57.277+08 2018-03-19 16:31:56.801+08 cf03d97a-0c99-494f-821d-da2dc02126dc
+6f3f738c-fcc3-4ebf-9695-6d0275cbc3ff 振弦公式 P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To) \N 2018-03-13 17:34:07.471+08 2018-03-20 16:39:16.24+08 e60e191c-767a-479d-a33e-589622634060
+60039eec-76e3-47ec-9024-32d1bbd55287 振弦公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2018-03-06 11:32:37.813+08 2018-03-21 13:39:32.573+08 2574b00e-2491-471c-925a-5b713afa9561
+407c070f-d757-448d-8d63-9fe3a26293ef 差阻计算应变公式 ε=f*(R1/r1 -Zo)+b*[α*(R1+r1-Ro)] \N 2018-03-22 15:11:08.195+08 2018-03-22 15:11:08.195+08 4e281788-df68-4193-bbe0-9159eee1f24e
+3716716b-c893-45f6-8566-e285dec7ddd0 转换公式 ε=k*(fi^2-f0^2)+kt*(ti-to) \N 2018-03-26 10:43:18.805+08 2018-03-26 10:43:18.805+08 2d9520e9-143b-48c2-960f-5c9dca7a21b4
+c6df07ed-3777-4e2b-aba1-d4cfbab61e06 基泰通用公式 P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To) \N 2018-03-06 15:47:59.154+08 2018-05-10 09:06:34.359+08 f65db984-9da0-4cef-a9ea-7de5e02ef42f
+4a3e1673-0bb5-4cb0-b7a1-1e03b4e1bdf2 振弦公式 p=()()() \N 2018-05-10 17:58:16.82+08 2018-05-10 17:58:16.82+08 67b821eb-caf8-4352-a59b-360e7c9a3ad9
+82211766-487b-4e8d-9b03-bc288381880d 振弦公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2018-03-07 16:37:53.109+08 2018-03-28 16:18:51.798+08 1e0d3ad9-26a9-427e-be48-685ffe3e84b7
+9010ed47-fe9a-494d-8805-c42604e61bdd 振弦公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2018-03-28 23:18:54.766+08 2018-03-28 23:18:54.766+08 72fb9e20-7c7b-4ccb-9da1-d8600223beca
+121058ad-ddc3-41a9-bd75-36e58162a204 基康倾角仪转换公式 D(mm) = G×L (R1 -R0) \N 2018-03-29 14:25:23.415+08 2018-03-29 14:25:23.415+08 2574b00e-2491-471c-925a-5b713afa9561
+1a7e610f-1da2-4a2c-bbce-2faa2ead0ba9 模拟量转换数字量公式 P=(dH - dL) / (aH-aL) *(value-aL) +dL \N 2018-03-29 14:53:46.392+08 2018-03-29 14:53:46.392+08 2574b00e-2491-471c-925a-5b713afa9561
+1c900f29-83ed-4ef1-95af-5ac4338f8c08 振弦公式 ε=K*(Fi^2-Fo^2) \N 无温补 2018-05-17 14:55:50.718+08 2018-05-17 14:55:50.718+08 82db02f1-7f86-44cf-b9a4-d32e28672a84
+5c22c26c-2a9e-439f-b585-2d5e1031fc23 基康通用公式 P=K2*(R1-R0)^2+K1*(R1-R0)+C \N P=K2*(R1-R0)^2+K1*(R1-R0)+C 2018-05-28 15:15:46.37+08 2018-05-28 15:17:46.692+08 2574b00e-2491-471c-925a-5b713afa9561
+449d0a01-4fc8-4479-8c73-3d96d07b130d test c=a+b \N 2018-07-03 19:14:32.19+08 2018-07-03 19:14:32.19+08 5838090c-ced5-4fb2-9320-53c516ee9b33
+18760c89-e1c8-416d-a74e-8e273f8329a7 振弦公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)+B \N ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)+B 2018-03-08 16:52:11.318+08 2018-07-09 11:49:11.466+08 2fd2ebfb-7858-40db-91a8-d933269ccf64
+c350170b-1b26-41db-9aa2-011c75365424 11112 1 \N 3 2018-07-12 11:08:19.753+08 2018-07-12 11:08:19.753+08 e442b9a5-066f-4cde-b5f3-9709a193c328
+3abb17e6-e48f-467d-840e-87a6666ee188 ModBus磁通量公式 F=C2*U^2+C1*U+C0;U=Vi-(Ti-T0)*Kt-(Tci-Tc0)*Ktm \N 2018-03-02 16:40:34.805+08 2018-07-19 17:11:24.723+08 ec223bfa-7244-4458-8180-4205fd31ac24
+71cb1135-1200-4d2f-ac70-c5973a66e49a 磁通量公式(old) F=C2*U^2+C1*U+C0;U=Vi-(Ti-T0)*Kt-(Tci-Tc0)*Ktm \N 2018-03-02 17:20:02.196+08 2018-07-19 17:12:08.528+08 a812ef4d-0c77-49e6-bad2-c74c79c50e49
+265b6e0c-ccfe-4cbd-bde2-362c37e12a44 振弦通用公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2018-03-01 10:44:31.942+08 2018-07-19 17:14:23.075+08 175e2759-ae38-4ac5-a62c-6ed4877f3863
+eca449f9-8e01-4a93-bb4d-0951e272b768 模拟量转换数字量公式 phy = (dH - dL) / (aH-aL) *(data1-aL) + dL \N 2018-03-14 00:29:54.332+08 2018-07-23 09:10:15.694+08 0dcb57e3-244f-44d3-8f9c-a50fc74481a8
+0170f4f5-2ed4-43e1-bd3a-d3f774359bf0 振弦公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2018-03-07 17:25:33.023+08 2018-07-23 09:24:10.944+08 99978bc0-b3c7-4ba1-9064-723c2c13b95f
+b9f886b0-757e-4654-b75c-425c6f1a8804 振弦通用公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2018-06-15 09:40:19.294+08 2018-07-23 11:16:18.44+08 88155a32-3321-4f89-86ba-c204d101cce7
+b697c668-ee32-4c39-b465-08d30a05ed1c y=ax+b y=ax+b \N 基泰转换公式 2018-03-06 16:19:00.848+08 2018-07-23 11:31:21.853+08 2dfa1f51-0e5a-4e11-a86d-f8487d602ebf
+d7ca67ec-0077-4e81-8f64-4642f1d94fce 振弦公式 P=k*(Fi^2-F0^2) \N 2018-03-13 23:11:17.996+08 2018-07-24 18:04:56.305+08 930f1b29-d056-40a8-9b86-62829634874c
+ecae192b-0460-431c-bb0e-fb64358a6ac0 振弦公式 ε=K*(Fi^2-Fo^2) \N 2018-08-02 09:44:35.062+08 2018-08-02 09:44:35.062+08 82edfa3d-c080-4212-ad83-32be43b48841
+be4aed0f-76d0-43ba-b4f3-01a0229e817b 振弦通用公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2018-08-27 14:29:29.92+08 2018-08-27 14:29:29.92+08 99c61d5d-4b9d-4fca-9d8c-e6d530b15871
+2557b15d-db8f-4129-86b7-d04b8b5cd50f 水位公式 waterlevel=h+1000*[K*(Fo^2-Fi^2)+Kt*(Ti-To)]/9.8 \N 2018-08-27 14:35:56.478+08 2018-08-27 14:43:03.445+08 99c61d5d-4b9d-4fca-9d8c-e6d530b15871
+ed2744e0-eecf-42f0-8732-65fcd7e46d24 角度计算公式 α=K(Vi-V0) \N 数泰角度计算公式 2018-09-07 09:28:39.433+08 2018-09-07 09:33:44.588+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488
+ff2de59e-fd95-42c6-93cc-d827da25dd0c DT振弦公式 µ=K*(Fi^2-F0^2)+Kt(Ti-To) \N 振弦公式 2018-09-07 11:32:11.945+08 2018-09-07 11:32:11.945+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488
+a6bc41f8-f061-4714-acd6-7b839a4559fc 角度计算公式 y=(x*10-125000)/3600 \N 2018-09-21 15:25:55.749+08 2018-09-21 15:25:55.749+08 0b9ab6dc-b8e5-4f20-a507-567be8892e4f
+37f306ac-245e-4f3b-af76-4fe38cf3a8f7 通用公式 P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)+Po \N 2018-09-29 15:50:14.368+08 2018-09-29 15:52:25.432+08 477ce1aa-aaae-40d3-a55e-2d3ef3a38e23
+c4f1e8d6-82f3-4436-b65e-4d1a8474612e 波长转温度公式 T=1000.0*(wavelength - WTo)/KT+To \N 2018-10-24 13:57:16.085+08 2018-10-24 16:00:54.667+08 7febae4c-c706-48a8-9f99-e546f48e338b
+f4e36088-8943-4147-b898-324dafb20220 应变公式 µ=K*(X-X0)+K1*(Y-Y0) \N 2019-09-25 15:42:34.33+08 2019-09-25 15:43:04.042+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488
+fe13db66-da09-464c-89af-e9d080352d7d 通用公式 P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To) \N 2018-11-23 17:04:01.388+08 2018-11-23 17:04:01.388+08 3b796285-ef41-4963-9304-f0909623f5c7
+6eadaa20-f803-4859-8ed0-3bd1afa830cb 转换公式 p=K*(Fi-Fo)+Co \N 转化公式:(测量值-初始值)标定系数+标定常数 2018-12-20 16:00:17.368+08 2018-12-20 16:00:17.368+08 4c79d9ed-386d-4540-bff3-82caf4d9d329
+83c9a688-5f70-472f-abce-c1c127ce189b 波长转应变公式 ε= [(W - Wo)-(WT-WTo)*Kt/Kwt]*1000.0/K \N 2018-10-24 15:38:59.927+08 2019-01-25 11:26:58.258+08 7febae4c-c706-48a8-9f99-e546f48e338b
+0b32473a-7ac5-4c09-8cfa-30f3300313e9 无 \N \N 2019-02-22 15:26:15.378+08 2019-02-22 15:26:15.378+08 2b04a6d8-4af7-428f-95c9-325800c4b59d
+0d1ad29d-fa86-4af0-bf45-16a19f2fd8d9 DT振弦公式 µ=K*(Fi^2-F0^2)+Kt(Ti-To) \N 2019-02-22 15:26:27.328+08 2019-02-22 15:26:27.328+08 2b04a6d8-4af7-428f-95c9-325800c4b59d
+5116bca0-de6b-4f0b-b995-31c9801ee401 模拟量电压换算公式 α=K(Vi-V0) \N 2019-02-22 15:35:40.367+08 2019-02-22 15:35:40.367+08 2b04a6d8-4af7-428f-95c9-325800c4b59d
+73db0431-7f3c-451d-9852-38c75cdf1b79 振弦通用公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2019-02-25 16:39:12.313+08 2019-02-25 16:39:12.313+08 3c72a231-83a6-4d92-88d3-d58e0660cef9
+904ee015-6df9-4626-90bd-2c3cc6e78f63 通用振弦公式 P=K1*(Fi-Fo)+Kt(Ti-To)+Po \N 2019-02-13 09:27:00.207+08 2019-02-26 16:13:10.86+08 c9459443-e9d6-48eb-b37d-d25dfb8faaac
+cf1251b1-bf67-4ed5-9287-70ff21c4ea2f 上线公式 1+1=2 \N 2019-03-07 11:29:22.851+08 2019-03-07 11:29:22.851+08 a0803ec9-69c4-41dd-9531-2de25b6274b3
+75a20e66-91ae-4d62-8f69-faef769091b1 电压换算公式 P=K*Um/W \N 2019-03-12 14:04:55.111+08 2019-03-12 14:04:55.111+08 61e3c33e-85cf-4894-9fc6-70fc3fd7a522
+96e821da-a5f5-448b-9a60-b4e83202b252 线性公式 P=K*Um+Po \N 2019-03-13 13:50:10.35+08 2019-03-13 13:50:10.35+08 61e3c33e-85cf-4894-9fc6-70fc3fd7a522
+02079e63-b1de-4da9-8424-ebded758b627 波长转温度公式 (wavelength - WTo)/KT+To \N 2019-03-25 11:34:17.793+08 2019-03-25 11:34:17.793+08 765f6712-b911-4681-9d31-ce9ee3a45702
+a9bc6a3e-3aae-4ee7-a354-c174ea0577f5 波长转应变公式 ε= [(W - Wo)-(WT-WTo)*Kt/Kwt]/K \N 2019-03-25 13:42:36.424+08 2019-03-25 13:42:36.424+08 765f6712-b911-4681-9d31-ce9ee3a45702
+5ffcc514-3e04-44e3-824a-c732c656a8c7 振弦公式 P=K(fo^2-fi^2) \N 2019-04-25 15:14:13.239+08 2019-04-25 15:14:45.779+08 83960893-0d31-4f1e-a576-69a4e7bce94c
+acb091fb-01aa-4316-9406-e52f4d5d84bd 公式A \N \N 2019-04-26 13:07:51.118+08 2019-04-26 13:07:51.118+08 d59a244e-554e-478d-b874-b75dc0dff2b5
+aa5798ad-a0d5-4e40-93b6-af8ae2dfe86c 振弦公式 Phy =K * (Fi ^ 2 - Fo ^ 2) \N 2019-05-22 10:39:40.146+08 2019-05-22 10:39:40.146+08 721eaa20-a7b1-457b-a5b3-f5eb9b313129
+b9168d49-7bd9-4a0a-8089-b7b13f0b33e5 SOIL通用公式 P=K2*(R1-R0)^2+K1*(R1-R0)+C \N P=K2*(R1-R0)^2+K1*(R1-R0)+C 2019-05-23 14:04:04.683+08 2019-05-23 14:04:04.683+08 b69e622c-7f6b-4539-8ff3-f3027cb3a592
+e74b9abf-dce9-435c-b500-e9060e048fb9 振弦公式 P=K*(Fi^2-Fo^2)+Kt*(Ti-To)+B \N 2019-06-05 11:00:15.536+08 2020-09-15 09:24:00.15+08 d9b333ed-096a-405a-9c9a-905cd04d2368
+f7c7c02c-833e-4c2c-9119-492d7a340331 test 1 \N 1 2019-05-10 15:53:38.289+08 2019-05-10 15:53:38.289+08 f0c41435-ecaf-4e42-b592-b53aaa72f721
+6b2e8948-20f3-4655-a1b2-4b14a7a79853 振弦公式 \N \N 2019-05-10 17:55:53.464+08 2019-05-10 17:55:53.464+08 43bea8b9-c871-432f-90d5-414d9d907254
+beeaa0c3-fc06-4684-a771-8434726179cf 振弦公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2019-05-14 14:23:05.587+08 2019-05-14 14:23:05.587+08 d634c358-000d-4c53-8c4b-0f411b4a52c3
+2edaa49c-0668-41cd-a987-a3f64cf9c81c 模拟量转换数字量 P=(dH - dL) / (aH-aL) *(value-aL) +dL \N 2019-05-14 14:32:02.786+08 2019-05-14 14:32:02.786+08 d634c358-000d-4c53-8c4b-0f411b4a52c3
+bee9dea8-27e2-4698-9202-885b4b2a0bbd SOIL倾角仪转换公式 D(mm) = G×L (R1 -R0) \N 2019-05-14 14:27:53.825+08 2019-05-14 15:55:43.623+08 d634c358-000d-4c53-8c4b-0f411b4a52c3
+5b5f6379-cb2f-49e4-bf4f-92c230604fda SOIL通用公式 P=K2*(R1-R0)^2+K1*(R1-R0)+C \N P=K2*(R1-R0)^2+K1*(R1-R0)+C 2019-05-14 14:16:43.308+08 2019-05-14 15:58:11.543+08 d634c358-000d-4c53-8c4b-0f411b4a52c3
+7be774d7-af98-47fa-b941-286639c151e9 振弦公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2019-05-23 14:13:14.471+08 2019-05-23 14:13:14.471+08 b69e622c-7f6b-4539-8ff3-f3027cb3a592
+630b1eca-f335-4da0-90fb-c21f58f32798 SOIL倾角仪转换 D(mm) = G×L (R1 -R0) \N 2019-05-23 14:17:16.146+08 2019-05-23 14:17:16.146+08 b69e622c-7f6b-4539-8ff3-f3027cb3a592
+65ca4fef-0880-442f-938e-da24d950557d 模拟量转换数字量 P=(dH - dL) / (aH-aL) *(value-aL) +dL \N 2019-05-23 14:21:27.257+08 2019-05-23 14:21:27.257+08 b69e622c-7f6b-4539-8ff3-f3027cb3a592
+5a40c554-1256-4aec-b591-0202fc0f267a 温度计算 y=a*ln(x)+b \N 2019-05-28 16:01:22.753+08 2019-05-28 16:01:50.688+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488
+63aa490f-c8ba-4b11-b890-18cfee871d70 DT振弦公式 µ=K*(Fi^2-F0^2)+Kt(Ti-To) \N 2019-06-11 15:07:38.545+08 2019-06-11 15:07:38.545+08 5a3bf41b-78ef-45fa-96e2-ac2a42767d71
+871940ec-0348-4f4c-942e-8785322e66f4 电阻温度计算公式 y=a*ln(x)+b \N 2019-05-29 15:39:42.893+08 2019-05-29 15:39:42.893+08 f556a96a-5649-49c8-beae-aa08f2faa752
+d062cb83-d762-42e2-a2dc-37d75f24bf18 模拟量电压换算公式 α=K(Vi-V0) \N 2019-06-11 15:14:40.062+08 2019-06-11 15:14:40.062+08 5a3bf41b-78ef-45fa-96e2-ac2a42767d71
+583a326f-d743-4f66-b60d-89b60c35e439 振弦公式 P=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2019-04-10 15:14:03.767+08 2019-05-30 16:01:19+08 53efa30f-f738-43ef-9600-0963b6b108fd
+ac0133f4-cdfd-424a-aae0-598e71b861a6 振弦公式 P=K*(Fi^2-Fo^2) \N 2019-05-10 15:25:59.984+08 2019-05-31 17:58:00.507+08 dc3255a4-0fb9-4ab9-85cd-714e6c5d70d0
+6cea049d-f41a-43f9-9e88-d8aeea9aca7f 振弦公式 P=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2019-06-03 10:44:50.805+08 2019-06-03 10:44:50.805+08 85e07675-26a2-435b-8ee9-6c790ffe7463
+2bd2a601-c351-4e47-bbbe-9a787efd6026 振弦公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2019-06-24 16:50:58.613+08 2019-06-24 16:50:58.613+08 ec7b0da8-24a8-48ad-b64a-0ea416189d8a
+bd266924-534e-4f2b-84a9-5e7b7c8f61de 振弦公式 P=K*(Fi^2-Fo^2)+Kt*(Ti-To)+B \N 2019-06-05 10:44:32.896+08 2020-09-15 09:25:36.907+08 fd43ad33-b4b0-46a5-b48c-5a4fa76e0aed
+d157f3b3-41c1-4e8b-8141-76c56d56b8ed 振弦公式 Phy =K * (Fi ^ 2 - Fo ^ 2) \N 2019-08-01 15:01:18.178+08 2019-08-01 15:01:18.178+08 f75a7b9a-2288-4f05-b3ec-5f17a297e53c
+be45ef93-4eef-44e3-a4af-c6499d52929b 巡天科技通用公式 P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To) \N 2019-08-27 09:55:31.849+08 2019-08-27 09:55:31.849+08 ec8018e2-1de6-4384-ac85-01405362dc83
+9babcc5f-fa86-4544-b1e1-ef6fe80c1a38 振弦公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)+B \N 2019-06-05 11:09:10.444+08 2020-09-14 10:46:08.714+08 d8d4cee4-3e1d-4d43-8861-53ccd536112e
+9f84b4f7-7860-47a6-9dc9-f066fb873dff 振弦公式 P=K*(Fi^2-Fo^2) \N 2020-06-05 15:11:01.364+08 2020-06-08 11:16:11.688+08 ee98ef38-7fda-425a-9fae-5000c658a83e
+5daeb319-4f65-4e98-b0d6-06dd3eb2575d 电阻转换温度 T=1/(A+B*LnR+C*LnR^3)-273.2 \N 2019-08-28 16:12:07.121+08 2019-08-28 16:12:07.121+08 573fb497-e583-41c4-ba6b-ecf548921eaf
+4cf90a17-8779-4902-9e06-2c4c75e37fec 电阻转换温度 (系统不支持自动计算): T=1/(A+B*LnR+C*LnR^3)-273.2 \N 2019-09-19 09:42:10.781+08 2019-09-19 09:42:10.781+08 6225c8bb-1497-4354-ad28-e5eb698de9f0
+2d30190b-bf0a-49ee-9c8c-ce67465de1bb 钢结构应变公式 (系统不支持自动计算): ε=E*{G*C0*(R1-R0)+[1/(A+B*LnR+C*LnR^3)-273.2-T0]*(Y1-Y2)} \N 2019-09-19 09:49:49.402+08 2019-09-19 09:49:49.402+08 6225c8bb-1497-4354-ad28-e5eb698de9f0
+04d11a24-68c7-4a80-bfc1-ffb924f24296 混凝土结构应变 (系统不支持自动计算): ε=E*{G*C0*(R1-R0)+K*[1/(A+B*LnR+C*LnR^3)-273.2-T0]} \N 2019-09-19 10:34:23.817+08 2019-09-19 10:34:23.817+08 6225c8bb-1497-4354-ad28-e5eb698de9f0
+86dd2c3f-ab82-4e7a-8766-5f8af99c2de9 裂缝公式 (系统不支持自动计算): (系统不支持自动计算): L=G1(R1-R0)+k(T1-T0) \N 2019-09-20 15:45:46.101+08 2019-09-20 15:45:46.101+08 6225c8bb-1497-4354-ad28-e5eb698de9f0
+dc0acbb1-de4d-4fd3-af87-c61d4b7bdf52 土压力振弦式计算公式 µ=K*((X^2)/1000-X0)+K1*(Y-Y0) \N 2019-09-25 15:25:40.061+08 2019-09-25 15:25:59.19+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488
+5773316d-3a54-4974-86d6-eff99007cf04 土压力模拟量公式 µ=K*(X-4) \N 2019-09-25 15:37:49.584+08 2019-09-25 15:37:49.584+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488
+eb23e709-ad84-4257-a0a7-e7bc44e81f29 新ModBus磁通量公式 F=C2*U^2+C1*U+C0+F0;U=V0-(Vi-(Ti-TO)*Kt-(Tci-Tco)*Ktm) \N 2019-09-26 15:26:23.322+08 2019-09-26 15:26:23.322+08 ec223bfa-7244-4458-8180-4205fd31ac24
+5b391db9-96c6-4ebe-88f0-75aea18bd5df 通用振弦公式 (系统不支持自动计算): P=K1*(Fi-Fo)+Kt(Ti-To)+Po \N 2019-09-29 16:28:54.739+08 2019-09-29 16:28:54.739+08 f190bf5a-78ab-4963-aac1-2fda921f2507
+51618f61-48a1-4680-9485-1b5f353ee3f7 振弦公式 F=K*(Fi^2 - F0^2) + Kt*(Ti-T0) \N 2019-10-14 09:34:22.142+08 2019-10-14 09:34:22.142+08 6b90f580-9b05-42a8-ba6a-113143823d44
+abc52bef-269a-4be1-82f0-5d3626a3ca44 钢结构应变公式 ε=E*G*(Fi^2-Fo^2) \N 2019-08-28 09:52:25.798+08 2021-01-15 13:13:21.806+08 573fb497-e583-41c4-ba6b-ecf548921eaf
+e217b93e-d22e-40ec-a8ca-5fccb0db6819 通用振弦公式 P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To) \N 2019-11-11 14:54:21.29+08 2019-11-11 14:54:21.29+08 c2c9fa03-e2cf-45f7-ae3f-5cb586ab5a77
+9091e551-9ef7-4867-9cad-ea5e8c25f39b 振弦通用公式 ε=K*(Fi^2 - F0^2) + Kt*(Ti-T0) \N 2019-11-15 13:23:12.244+08 2019-11-15 13:23:12.244+08 e95109a9-cf5a-4e13-b52b-1f85101fd99a
+9784b5cb-8a88-4c6a-86c8-51afd961b78d 通用公式 PΔ=A(F2-F02)+B(F-F0) \N 金帆的通用公式 2019-11-20 09:50:03.993+08 2019-11-20 09:50:03.993+08 40c3cf7a-91d6-4c0e-aa48-4839dd6815cc
+5997f9c1-c604-4035-ade3-6ed5b18559bb 振弦通用公式 ε=K*(Fi^2 - F0^2) + Kt*(Ti-T0) \N 2019-11-21 13:04:31.07+08 2019-11-21 13:04:31.07+08 61a4ad5e-774e-40d2-9ea6-937da62db64b
+7db881d1-76ee-4a11-b932-c658d8d0eaed 无 \N \N 2019-12-13 10:39:49.257+08 2019-12-13 10:39:49.257+08 175e2759-ae38-4ac5-a62c-6ed4877f3863
+5bbfb838-05a1-4957-bfa7-b5a8af1a0beb 无 无 \N 2019-12-13 10:15:14.046+08 2019-12-13 10:52:51.716+08 61a4ad5e-774e-40d2-9ea6-937da62db64b
+93c9ce42-f58d-4b35-83f5-df5f1c06411b 倾角计算公式 K*(X-X0)/1000 \N 这个是wu 2020-01-10 16:51:39.164+08 2020-01-10 16:51:39.164+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488
+a999457c-b28e-4168-9d60-0db37c72ad23 裂缝计计算公式 K*(X^2-X0^2)/1000 \N DTC-LF 2020-01-13 10:29:55.365+08 2020-01-13 10:30:22.438+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488
+c7cc1565-33ee-46fb-ac94-a93f093ddd73 多点沉降计计算公式 K*(X-X0) \N DTC-SYL wu 2020-01-13 10:39:42.138+08 2020-01-13 10:39:42.138+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488
+0e9dfb4b-a83b-4970-91c3-57d3b0ce9ef6 混凝土应变计 k*(X^2-X0^2)/1000+k1*(Y-Y0) \N DTC-YB-SC wu 2020-01-13 10:45:45.014+08 2020-01-13 10:45:45.014+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488
+3207c7a3-db9b-40cf-ab1b-6949a3122239 土壤水分传感器 0:144.8|3:279.7|6:365.9|9:531.5|12:663.2|15:874.9 \N DTC-SD 2020-01-13 10:53:55.571+08 2020-01-13 10:53:55.571+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488
+5b473f0a-e785-42b1-bbeb-5e3530c41422 温度计算公式 X \N 这个公式不参与计算 2020-01-14 15:21:23.112+08 2020-01-14 15:21:23.112+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488
+611dc5c5-fa03-458b-bd65-3e24c593855d 湿度计算公式 kx \N 2020-01-15 16:49:27.6+08 2020-01-15 16:49:27.6+08 32cd67be-b8f0-42fe-9ef4-79ad8fbed488
+9024228a-4e22-47cd-b2b7-2c579649330a 振弦通用公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2020-04-08 16:13:08.754+08 2020-04-08 16:13:20.037+08 33215263-67ff-4ca8-9cec-d4c05068b412
+1af7b597-73ac-4002-b7f9-885ba65dc41d 振弦通用公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2020-04-08 16:19:26.702+08 2020-04-08 16:19:26.702+08 f54c9b05-e722-4677-9e19-4fbbeeee0938
+63e815fd-ec3a-490b-8734-eb91e37ba781 振弦通用公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2020-04-08 16:25:16.841+08 2020-04-08 16:25:16.841+08 718d8823-39a8-40fd-b726-76fde0fd8094
+8102b4e7-9f04-43f0-a644-5b89c281f52f 转换公式 E=G*(R-R0) \N 2020-05-13 11:36:44.904+08 2020-05-13 11:36:44.904+08 ec7b0da8-24a8-48ad-b64a-0ea416189d8a
+1cb1bdc4-03eb-47f6-bde4-992f0c899269 通用公式 ε=K*(Fi^2 - F0^2)/Aj \N 2020-06-12 09:47:26.718+08 2020-06-15 10:05:39.363+08 c8c925b5-d496-4eb8-a0c7-189ce391ff1a
+c92fb572-f818-488a-a012-e615d38abbf2 振弦通用公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2020-06-16 13:51:21.352+08 2020-06-16 13:51:21.352+08 a999f92a-a9c4-4b33-a805-9bbb221f1935
+b2c21e4b-a55d-4393-ab15-8906088b94fa 无 无 \N 无公式计算 2020-06-16 13:55:15.744+08 2020-06-16 13:55:15.744+08 a999f92a-a9c4-4b33-a805-9bbb221f1935
+0f44be27-ca09-4e9c-bd86-10d82e752723 公式 ε=(λ-A)/B \N 2020-06-18 14:08:10.959+08 2020-06-18 14:08:10.959+08 9c12215f-afab-45e9-8341-1e487df6d020
+9525b166-34e1-4182-95a9-644a8f98a2d8 振弦公式 P=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2020-08-03 09:57:23.168+08 2020-08-03 09:57:23.168+08 c283a48d-8843-4cb6-9c01-336738a8137a
+490563df-dd29-4c58-9546-7a8716222d00 振弦公式 ε=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2020-06-29 09:50:03.949+08 2020-06-29 09:50:03.949+08 c3507ba4-b2b5-45b8-aecb-84079c90649d
+be82ba24-d38b-4da1-aac3-2fb222e2012f 无 \N 2020-06-29 09:56:15.694+08 2020-06-29 09:56:15.694+08 c3507ba4-b2b5-45b8-aecb-84079c90649d
+55b9e150-f78d-4cbd-a353-f99c4df93cb6 地应力公式 P=A*(Fi^2-Fo^2)-B*(Fi-Fo) \N 2020-10-13 16:56:29.659+08 2020-10-13 16:56:29.659+08 c283a48d-8843-4cb6-9c01-336738a8137a
+bdb43886-e71d-4135-ad42-6e296635b02e 测斜公式 Δl=c*[sin(αi)-sin(α0)] \N 2020-11-11 15:32:21.582+08 2020-11-11 15:32:21.582+08 98e6aaea-a6e2-449e-8b46-47fa016b1b96
+c5378a9c-9406-4583-9ae8-5fddb5a5d65e 减初值公式 phy=DAQi-DAQ0 \N 2020-11-11 15:39:39.776+08 2020-11-11 15:39:39.776+08 98e6aaea-a6e2-449e-8b46-47fa016b1b96
+d71a2a8d-5ad2-4cbe-b8d0-3edf77a1037a 水位公式 waterlevel=h+1000*k*(f0^2-fi^2)/9.8 \N 2020-11-11 15:43:16.337+08 2020-11-11 15:43:16.337+08 98e6aaea-a6e2-449e-8b46-47fa016b1b96
+14c1729f-4851-411d-9828-84fb5b11f593 初值减测值 phy=C0-Ci \N 2020-11-11 15:46:21.875+08 2020-11-11 15:46:21.875+08 98e6aaea-a6e2-449e-8b46-47fa016b1b96
+68180c88-8643-47ba-815c-90668639e80f 激光测距 Δh=(len0-leni)*H/len0 \N 2020-11-11 15:47:37.836+08 2020-11-11 15:47:37.836+08 98e6aaea-a6e2-449e-8b46-47fa016b1b96
+b545defc-450b-4986-83ef-445423df6f98 无 无 \N 2020-11-11 15:54:24.82+08 2020-11-11 15:54:24.82+08 98e6aaea-a6e2-449e-8b46-47fa016b1b96
+927f1c11-f9a3-4c84-a565-57ee9245e41f 振弦公式 ε=k*(fi^2-f0^2)+kt*(ti-to) \N 2020-11-16 14:03:23.764+08 2020-11-16 14:03:23.764+08 98e6aaea-a6e2-449e-8b46-47fa016b1b96
+898c3c4f-ecab-4aa9-9a95-accd00e26193 减初值 phy=DAQi-DAQ0 \N 2020-11-16 16:19:51.677+08 2020-11-16 16:19:51.677+08 98e6aaea-a6e2-449e-8b46-47fa016b1b96
+fae5e233-4034-4ebe-8e7b-0bf35a648ec9 土壤温湿度公式 无 \N 2020-11-20 11:13:59.799+08 2020-11-20 11:13:59.799+08 98e6aaea-a6e2-449e-8b46-47fa016b1b96
+cb006abf-3e22-4ead-830c-5a0a427c4024 地应力公式 P=A*(Fi^2-Fo^2)-B*(Fi-Fo) \N 2020-11-24 11:47:45.885+08 2020-11-24 11:47:45.885+08 f963b588-8c55-4b9b-b455-8e7302d88408
+057d8b2b-fafc-4937-897d-deff727f1032 振弦公式 P=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2020-11-24 11:52:43.869+08 2020-11-24 11:52:43.869+08 f963b588-8c55-4b9b-b455-8e7302d88408
+41d90649-a6bb-4671-b100-c37a75836437 振弦公式 P=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2020-12-11 16:03:19.403+08 2020-12-11 16:03:19.403+08 8c5826bc-d7e6-4506-9dab-ded01f4c2346
+61c4b4b9-028e-4788-8af4-c97e1084d1c8 振弦公式 P=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2020-12-16 15:46:31.084+08 2020-12-16 15:46:31.084+08 1a190e1d-27a0-4b3a-8635-8737f24de024
+21d229f6-5f74-405a-a06e-1f7dc84dbcb3 振弦公式 P=K*(Fi^2-Fo^2)+Kt*(Ti-To) \N 2020-12-16 17:15:01.434+08 2020-12-16 17:15:01.434+08 4f041931-dc1f-4868-985b-e5f1d27b1d38
+d3c03d95-0625-44e5-a097-d371daa46150 混凝土结构应变 ε=E*G*(Fi^2-Fo^2)+K*[1/(A+B*LnR+C*LnR^3)-273.2-T0] \N 2019-08-28 09:53:52.824+08 2021-01-15 13:06:58.032+08 573fb497-e583-41c4-ba6b-ecf548921eaf
+ed141cf4-ca2c-49a1-9704-afee24dc9c71 单值阈值下发 无 \N 2021-01-18 09:55:07.086+08 2021-01-18 09:55:07.086+08 98e6aaea-a6e2-449e-8b46-47fa016b1b96
+\.
+
+
+--
+-- Data for Name: FormulaProperty; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."FormulaProperty" (id, name, "showName", category, image, enum, "defaultValue", "precision", max, min, unit, "desc", required, "createdAt", "updatedAt", "formulaMetaId", "propertyTypeId", "isOtherParameter") FROM stdin;
+164 Fo Fo基准读数 Variable \N \N 0 3 100000000 -100000000 t 2018-04-02 17:25:11.425+08 2018-04-02 17:25:11.432+08 72133db4-abf6-4073-bc7f-b99c12aca33c 2 f
+166 To To温度初值 Variable \N \N 0 3 100 -100 ℃ t 2018-04-02 17:26:59.89+08 2018-04-02 17:26:59.896+08 72133db4-abf6-4073-bc7f-b99c12aca33c 2 f
+202 K 模量系数K Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-08-27 14:36:48.027+08 2018-08-27 14:36:48.027+08 2557b15d-db8f-4129-86b7-d04b8b5cd50f 2 f
+102 Kt 温补系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-08 16:53:18.874+08 2018-03-08 16:53:18.88+08 18760c89-e1c8-416d-a74e-8e273f8329a7 2 f
+103 Fo 频率初值 Variable \N \N 0 3 100000 -100000 HZ t 2018-03-08 16:54:00.879+08 2018-03-08 16:54:00.884+08 18760c89-e1c8-416d-a74e-8e273f8329a7 2 f
+169 K1 一次项系数K1 Variable \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-05-28 15:17:32.795+08 2018-05-28 15:18:54.74+08 5c22c26c-2a9e-439f-b585-2d5e1031fc23 2 f
+104 To 温度初值 Variable \N \N 0 2 100 -100 ℃ t 2018-03-08 16:54:31.712+08 2018-03-08 16:54:31.719+08 18760c89-e1c8-416d-a74e-8e273f8329a7 2 f
+207 Kx X轴角度转换系数 Variable \N 1 3 100000 -100000 \N t 2018-09-07 09:29:54.005+08 2018-09-07 09:32:43.774+08 ed2744e0-eecf-42f0-8732-65fcd7e46d24 2 f
+178 To 初始温度 Variable \N \N 0 3 100 -100 ℃ t 2018-06-15 09:41:46.416+08 2018-06-15 09:41:46.424+08 b9f886b0-757e-4654-b75c-425c6f1a8804 2 f
+208 Ky Y轴角度转换系数 Variable \N \N 1 3 100000 -100000 t 2018-09-07 09:33:13.993+08 2018-09-07 09:33:13.993+08 ed2744e0-eecf-42f0-8732-65fcd7e46d24 2 f
+188 K 转换系数K Variable \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-08-02 09:46:16.983+08 2018-08-02 09:46:24.029+08 ecae192b-0460-431c-bb0e-fb64358a6ac0 2 f
+99 Fo Fo频率初值 Variable \N \N 0 3 100000 -100000 HZ t 2018-03-07 17:32:57.254+08 2018-03-07 17:32:57.261+08 0170f4f5-2ed4-43e1-bd3a-d3f774359bf0 2 f
+191 K 转转系数K Variable \N \N 1 6 100000000 -100000000 t 2018-08-03 10:46:24.113+08 2018-08-03 10:46:24.113+08 0e03ebe4-bdad-4a8f-840c-ba09293c2488 2 f
+195 K3 K3三次项系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-08-15 13:57:03.758+08 2018-08-15 13:57:03.758+08 b3ba8400-5a93-4fee-a990-e2623acda7f0 2 f
+101 K 模量系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-08 16:52:50.895+08 2018-03-08 16:52:50.903+08 18760c89-e1c8-416d-a74e-8e273f8329a7 2 f
+200 Kt 温补系数Kt Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-08-27 14:33:36.685+08 2018-08-27 14:33:36.685+08 be4aed0f-76d0-43ba-b4f3-01a0229e817b 2 f
+105 B 初值 Variable \N \N 0 5 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-12 09:36:15.918+08 2018-03-12 09:36:15.925+08 18760c89-e1c8-416d-a74e-8e273f8329a7 2 f
+198 K 模量系数K Variable \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-08-27 14:32:01.225+08 2018-08-27 14:33:46.679+08 be4aed0f-76d0-43ba-b4f3-01a0229e817b 2 f
+211 Kt 温补系数Kt Variable \N \N 0 16 99999999 -99999999 t 2018-09-07 11:37:03.947+08 2018-09-07 11:37:03.947+08 ff2de59e-fd95-42c6-93cc-d827da25dd0c 2 f
+214 K1 K1一次项系数 Variable \N \N 1 16 1000000000000 -1000000000000 \N t 2018-09-29 15:53:11.089+08 2018-09-29 15:53:11.089+08 37f306ac-245e-4f3b-af76-4fe38cf3a8f7 2 f
+217 K3 K3三次项系数 Variable \N \N 0 16 1000000000000 -1000000000000 t 2018-09-29 15:56:11.675+08 2018-09-29 15:56:11.675+08 37f306ac-245e-4f3b-af76-4fe38cf3a8f7 2 f
+220 Po 修正值(常数项) Variable \N \N 0 5 1000000000 -1000000000 t 2018-09-29 15:58:37.339+08 2018-09-29 15:58:37.339+08 37f306ac-245e-4f3b-af76-4fe38cf3a8f7 2 f
+224 To 温度初值To Variable \N \N 0 2 100 -100 ℃ t 2018-10-24 13:58:06.122+08 2018-10-24 13:58:06.122+08 c4f1e8d6-82f3-4436-b65e-4d1a8474612e 2 f
+237 Fo 初始频率Fo Variable \N \N 0 3 100000 -100000 HZ t 2018-11-23 17:07:37.502+08 2018-11-23 17:07:37.502+08 fe13db66-da09-464c-89af-e9d080352d7d 2 f
+234 K1 一次项系数K1 Variable \N 1 10 100000 -100000 \N t 2018-11-23 17:04:50.397+08 2018-11-23 17:06:40.932+08 fe13db66-da09-464c-89af-e9d080352d7d 2 f
+240 K 标定系数 Variable \N \N 1 12 10000000000 -1000000000 \N t 2018-12-20 16:01:10.234+08 2018-12-20 16:01:10.234+08 6eadaa20-f803-4859-8ed0-3bd1afa830cb 2 f
+243 To To温度初值 Variable \N \N 0 3 100 -100 ℃ t 2019-02-13 09:27:53.011+08 2019-02-13 09:27:53.011+08 904ee015-6df9-4626-90bd-2c3cc6e78f63 2 f
+227 K 应变系数K Variable \N 1 16 1000000000000 -100000000000 \N t 2018-10-24 15:50:00.505+08 2019-01-25 11:36:53.49+08 83c9a688-5f70-472f-abce-c1c127ce189b 2 f
+230 Kwt 温度的温度系数Kwt Variable \N 1 16 100000000000 -100000000000 t 2018-10-24 15:58:08.469+08 2019-03-25 13:50:21.44+08 83c9a688-5f70-472f-abce-c1c127ce189b 2 f
+249 K 模量系数K Variable \N \N 1 16 1000000000 -1000000000 \N t 2019-02-22 15:27:06.675+08 2019-02-22 15:27:06.675+08 0d1ad29d-fa86-4af0-bf45-16a19f2fd8d9 2 f
+34 F0 初值 Variable \N \N 1.12 2 100 0 \N t 2018-03-01 14:32:55.825+08 2018-03-01 14:32:55.832+08 ea7f8dfb-96fe-4a26-90bc-1b51c9cae11b 2 f
+21 Kt 温度补偿系数 Variable \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-01 10:47:46.834+08 2018-03-02 10:15:09.257+08 265b6e0c-ccfe-4cbd-bde2-362c37e12a44 2 f
+19 K 模量系数 Variable \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-01 10:46:08.51+08 2018-03-02 10:15:48.739+08 265b6e0c-ccfe-4cbd-bde2-362c37e12a44 2 f
+20 Fo 初始频率 Variable \N 0 5 99999 -99999 HZ t 2018-03-01 10:47:03.216+08 2018-03-02 10:16:16.889+08 265b6e0c-ccfe-4cbd-bde2-362c37e12a44 2 f
+22 To 初始温度 Variable \N 0 3 100 -100 ℃ t 2018-03-01 10:48:43.499+08 2018-03-02 10:16:43.603+08 265b6e0c-ccfe-4cbd-bde2-362c37e12a44 2 f
+47 C1 C1线性拟合系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-02 16:42:39.105+08 2018-03-02 16:42:39.112+08 3abb17e6-e48f-467d-840e-87a6666ee188 2 f
+107 K K系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-12 16:34:18.912+08 2018-03-12 16:34:18.919+08 1ec1750e-a4b7-4f6f-99ba-30cbc1df3f6a 2 f
+106 Fo Fo初值 Variable \N 0 3 1000000 -1000000 HZ t 2018-03-12 16:33:45.211+08 2018-03-12 16:34:27.981+08 1ec1750e-a4b7-4f6f-99ba-30cbc1df3f6a 2 f
+108 K1 K1一次项系数 Variable \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-13 17:34:50.013+08 2018-03-20 16:38:10.226+08 6f3f738c-fcc3-4ebf-9695-6d0275cbc3ff 2 f
+110 Fo Fo基准读数 Variable \N 0 3 100000 -100000 t 2018-03-13 17:36:40.187+08 2018-03-20 16:40:17.559+08 6f3f738c-fcc3-4ebf-9695-6d0275cbc3ff 2 f
+48 C2 C2二次项拟合系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-02 16:44:01.746+08 2018-03-02 16:44:01.753+08 3abb17e6-e48f-467d-840e-87a6666ee188 2 f
+46 C0 C0线性拟合常数 Variable \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-02 16:41:55.874+08 2018-03-02 16:44:09.195+08 3abb17e6-e48f-467d-840e-87a6666ee188 2 f
+49 T0 T0温度初值 Variable \N \N 0 3 100 -100 ℃ t 2018-03-02 16:45:42.729+08 2018-03-02 16:45:42.735+08 3abb17e6-e48f-467d-840e-87a6666ee188 2 f
+50 Kt Kt温补系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-02 16:46:19.752+08 2018-03-02 16:46:19.76+08 3abb17e6-e48f-467d-840e-87a6666ee188 2 f
+51 vol vol激励电压(V) Variable \N \N 0 6 10000 -10000 V t 2018-03-02 16:47:56.584+08 2018-03-02 16:47:56.592+08 3abb17e6-e48f-467d-840e-87a6666ee188 2 f
+53 Deg 是否消磁(Deg;1:消磁,0:不消磁) Variable \N \N 1 \N 1 0 t 2018-03-02 16:49:24.488+08 2018-03-02 16:49:24.494+08 3abb17e6-e48f-467d-840e-87a6666ee188 1 f
+54 Tc0 Tc0采集仪温度初值 Variable \N \N 0 3 100 -100 ℃ t 2018-03-02 16:50:10.662+08 2018-03-02 16:50:10.679+08 3abb17e6-e48f-467d-840e-87a6666ee188 2 f
+55 reg reg理论电阻值(Ω) Variable \N \N 0 3 10000 -10000 Ω t 2018-03-02 16:51:18.506+08 2018-03-02 16:51:18.516+08 3abb17e6-e48f-467d-840e-87a6666ee188 2 f
+56 Des 是否判断采集(Des;1:是,0:否) Variable \N \N 0 \N 1 0 t 2018-03-02 16:51:53.665+08 2018-03-02 16:51:53.672+08 3abb17e6-e48f-467d-840e-87a6666ee188 1 f
+58 C1 C1线性拟合系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-02 17:22:03.75+08 2018-03-02 17:22:03.758+08 71cb1135-1200-4d2f-ac70-c5973a66e49a 2 f
+62 C0 C0线性拟合常数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-02 17:25:56.144+08 2018-03-02 17:25:56.153+08 71cb1135-1200-4d2f-ac70-c5973a66e49a 2 f
+63 V0 V0零点电压 Variable \N \N 0 3 1000 -1000 V t 2018-03-02 17:26:59.379+08 2018-03-02 17:26:59.385+08 71cb1135-1200-4d2f-ac70-c5973a66e49a 2 f
+165 Kt Kt温补系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-04-02 17:26:14.228+08 2018-04-02 17:26:14.232+08 72133db4-abf6-4073-bc7f-b99c12aca33c 2 f
+170 K2 二次项系数K2 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-05-28 15:19:26.622+08 2018-05-28 15:19:26.629+08 5c22c26c-2a9e-439f-b585-2d5e1031fc23 2 f
+171 R0 基准值R0 Variable \N \N 0 5 1000000 -1000000 t 2018-05-28 15:23:46.203+08 2018-05-28 15:23:46.211+08 5c22c26c-2a9e-439f-b585-2d5e1031fc23 2 f
+231 Kt 应变的温度系数Kt Variable \N 1 16 100000000000 -100000000000 应变计的温度系数Kt t 2018-10-24 15:59:43.806+08 2019-03-25 13:47:32.559+08 83c9a688-5f70-472f-abce-c1c127ce189b 2 f
+179 Fo 初始频率 Variable \N \N 0 5 99999 -99999 HZ t 2018-06-15 09:42:36.576+08 2018-06-15 09:42:36.581+08 b9f886b0-757e-4654-b75c-425c6f1a8804 2 f
+181 Kt 温度补偿系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-06-15 09:44:38.793+08 2018-06-15 09:44:38.818+08 b9f886b0-757e-4654-b75c-425c6f1a8804 2 f
+184 To 初始温度 Variable \N \N 0 3 100 -100 ℃ t 2018-07-23 11:12:25.812+08 2018-07-23 11:12:25.822+08 3e38a57f-b980-45b4-8f8f-1929160edfaa 2 f
+189 Fo 初始频率 Variable \N \N 0 3 999999 -999999 HZ t 2018-08-02 09:47:37.783+08 2018-08-02 09:47:37.783+08 ecae192b-0460-431c-bb0e-fb64358a6ac0 2 f
+192 Fo Fo基准读数 Variable \N \N 0 3 100000 -100000 \N t 2018-08-15 13:52:22.564+08 2018-08-15 13:52:22.564+08 b3ba8400-5a93-4fee-a990-e2623acda7f0 2 f
+194 K2 K2二次项系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-08-15 13:55:27.449+08 2018-08-15 13:55:27.449+08 b3ba8400-5a93-4fee-a990-e2623acda7f0 2 f
+196 Kt Kt温补系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-08-15 13:59:05.106+08 2018-08-15 13:59:05.106+08 b3ba8400-5a93-4fee-a990-e2623acda7f0 2 f
+199 Fo 频率初值Fo Variable \N 0 3 100000 -100000 HZ t 2018-08-27 14:32:58.598+08 2018-08-27 14:33:53.84+08 be4aed0f-76d0-43ba-b4f3-01a0229e817b 2 f
+203 频率初值Fo 频率初值Fo Variable \N \N 0 3 100000 -100000 HZ t 2018-08-27 14:37:40.709+08 2018-08-27 14:37:40.709+08 2557b15d-db8f-4129-86b7-d04b8b5cd50f 2 f
+206 h 深度初值(m) Variable \N \N 0 5 10000 -10000 m t 2018-08-27 14:45:37.428+08 2018-08-27 14:45:37.428+08 2557b15d-db8f-4129-86b7-d04b8b5cd50f 2 f
+209 Vo 电压初值Vo Variable \N \N 0 3 20 0 V t 2018-09-07 09:41:34.49+08 2018-09-07 09:41:34.49+08 ed2744e0-eecf-42f0-8732-65fcd7e46d24 2 f
+212 Fo 初始频率 Variable \N \N 0 3 10000000 -10000000 HZ t 2018-09-07 11:38:13.301+08 2018-09-07 11:38:13.301+08 ff2de59e-fd95-42c6-93cc-d827da25dd0c 2 f
+213 To 温度初值 Variable \N \N 0 2 100 -100 ℃ t 2018-09-07 11:40:48.113+08 2018-09-07 11:40:48.113+08 ff2de59e-fd95-42c6-93cc-d827da25dd0c 2 f
+215 Fo Fo基准读数 Variable \N \N 0 3 100000 -100000 t 2018-09-29 15:54:33.77+08 2018-09-29 15:54:33.77+08 37f306ac-245e-4f3b-af76-4fe38cf3a8f7 2 f
+218 Kt Kt温补系数 Variable \N \N 0 16 1000000000000 -1000000000000 t 2018-09-29 15:56:43.573+08 2018-09-29 15:56:43.573+08 37f306ac-245e-4f3b-af76-4fe38cf3a8f7 2 f
+228 Wo 应变波长初值Wo Variable \N 0 16 1000000000000 -100000000000 T0温度下的应变波长值Wo t 2018-10-24 15:51:06.893+08 2019-01-25 11:37:01.107+08 83c9a688-5f70-472f-abce-c1c127ce189b 2 f
+235 K2 二次项系数K2 Variable \N \N 0 10 100000 -100000 t 2018-11-23 17:05:30.754+08 2018-11-23 17:05:30.754+08 fe13db66-da09-464c-89af-e9d080352d7d 2 f
+238 To 温度初值To Variable \N \N 0 2 100 -100 ℃ t 2018-11-23 17:08:05.393+08 2018-11-23 17:08:05.393+08 fe13db66-da09-464c-89af-e9d080352d7d 2 f
+241 Fo 初始值 Variable \N \N 0 10 100000000 -10000000 t 2018-12-20 16:01:38.771+08 2018-12-20 16:01:38.771+08 6eadaa20-f803-4859-8ed0-3bd1afa830cb 2 f
+250 To 温度初值 Variable \N \N 0 2 100 -100 ℃ t 2019-02-22 15:32:42.029+08 2019-02-22 15:32:42.029+08 0d1ad29d-fa86-4af0-bf45-16a19f2fd8d9 2 f
+244 K1 K1一次项系数 Variable \N 1 16 1000000000000 -100000000000 t 2019-02-13 09:28:58.144+08 2019-02-13 09:29:11.961+08 904ee015-6df9-4626-90bd-2c3cc6e78f63 2 f
+247 Fo Fo基准读数 Variable \N \N 0 3 1000000 -100000 t 2019-02-13 09:33:41.45+08 2019-02-13 09:33:41.45+08 904ee015-6df9-4626-90bd-2c3cc6e78f63 2 f
+252 Kt 温补系数Kt Variable \N \N 0 16 10000000 -10000000 t 2019-02-22 15:34:35.51+08 2019-02-22 15:34:35.51+08 0d1ad29d-fa86-4af0-bf45-16a19f2fd8d9 2 f
+254 Ky Ky转换系数 Variable \N 1 3 100000 -100000 t 2019-02-22 15:38:39.367+08 2019-02-22 15:40:16.634+08 5116bca0-de6b-4f0b-b995-31c9801ee401 2 f
+256 To 初始温度To Variable \N \N 0 3 100 -100 ℃ t 2019-02-25 16:39:53.679+08 2019-02-25 16:39:53.679+08 73db0431-7f3c-451d-9852-38c75cdf1b79 2 f
+258 K 模量系数K Variable \N \N 1 16 1000000000 -1000000000 t 2019-02-25 16:43:39.969+08 2019-02-25 16:43:39.969+08 73db0431-7f3c-451d-9852-38c75cdf1b79 2 f
+246 Po Po初值 Variable \N 0 5 100000000 -100000000 t 2019-02-13 09:31:27.946+08 2019-02-26 16:13:56.393+08 904ee015-6df9-4626-90bd-2c3cc6e78f63 2 f
+225 Kwt 温度系数Kwt Variable \N 1 6 10000000 -10000000 t 2018-10-24 13:58:36.716+08 2019-03-25 11:36:03.711+08 c4f1e8d6-82f3-4436-b65e-4d1a8474612e 2 f
+52 Ktm Ktm采集仪补偿系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-02 16:48:56.005+08 2018-03-02 16:48:56.011+08 3abb17e6-e48f-467d-840e-87a6666ee188 2 f
+57 Kt Kt温补系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-02 17:21:13.09+08 2018-03-02 17:21:13.098+08 71cb1135-1200-4d2f-ac70-c5973a66e49a 2 f
+59 T0 T0温度初值 Variable \N \N 0 3 100 -100 ℃ t 2018-03-02 17:23:09.665+08 2018-03-02 17:23:09.673+08 71cb1135-1200-4d2f-ac70-c5973a66e49a 2 f
+60 V0B V0B零点标定电压 Variable \N \N 0 3 1000 -1000 V t 2018-03-02 17:24:06.105+08 2018-03-02 17:24:06.111+08 71cb1135-1200-4d2f-ac70-c5973a66e49a 2 f
+61 C2 C2二次项拟合系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-02 17:24:53.959+08 2018-03-02 17:24:53.965+08 71cb1135-1200-4d2f-ac70-c5973a66e49a 2 f
+64 Uj Uj激励电压(V) Variable \N \N 0 3 1000 -1000 V t 2018-03-05 17:24:24.793+08 2018-03-05 17:24:24.801+08 71cb1135-1200-4d2f-ac70-c5973a66e49a 2 f
+167 Fo 频率初值 Variable \N \N 0 5 100000000 -100000000 HZ t 2018-05-17 14:57:35.109+08 2018-05-17 14:57:35.676+08 1c900f29-83ed-4ef1-95af-5ac4338f8c08 2 f
+172 C 修正值C Variable \N \N 0 5 1000000 -1000000 t 2018-05-28 15:26:30.375+08 2018-05-28 15:26:30.383+08 5c22c26c-2a9e-439f-b585-2d5e1031fc23 2 f
+180 K 模量系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-06-15 09:43:59.362+08 2018-06-15 09:43:59.368+08 b9f886b0-757e-4654-b75c-425c6f1a8804 2 f
+94 K K模量系数 Variable \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-07 16:39:24.659+08 2018-03-28 16:19:20.373+08 82211766-487b-4e8d-9b03-bc288381880d 2 f
+69 K K模量系数 Variable \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-06 11:34:14.013+08 2018-03-20 18:08:33.68+08 60039eec-76e3-47ec-9024-32d1bbd55287 2 f
+70 Kt Kt温补系数 Variable \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-06 11:35:07.324+08 2018-03-20 18:08:19.011+08 60039eec-76e3-47ec-9024-32d1bbd55287 2 f
+71 Fo Fo频率初值 Variable \N 0 3 100000 -100000 HZ t 2018-03-06 11:36:04.186+08 2018-03-20 18:08:13.067+08 60039eec-76e3-47ec-9024-32d1bbd55287 2 f
+73 K1 K1一次项系数 Variable \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-06 15:07:32.587+08 2018-03-06 15:08:44.603+08 0ca79346-8d3a-4aca-ba68-833fce60cbf8 2 f
+80 K2 K2二次项系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-06 15:49:18.518+08 2018-03-06 15:49:18.525+08 c6df07ed-3777-4e2b-aba1-d4cfbab61e06 2 f
+74 K2 K2二次项系数 Variable \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-06 15:10:53.665+08 2018-03-06 15:11:36.374+08 0ca79346-8d3a-4aca-ba68-833fce60cbf8 2 f
+76 Kt Kt温补系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-06 15:12:53.138+08 2018-03-06 15:12:53.143+08 0ca79346-8d3a-4aca-ba68-833fce60cbf8 2 f
+75 K3 K3三次项系数 Variable \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-06 15:11:30.05+08 2018-03-06 15:13:01.19+08 0ca79346-8d3a-4aca-ba68-833fce60cbf8 2 f
+91 Fo Fo基准读数 Variable \N 0 3 100000 -100000 t 2018-03-06 16:56:24.083+08 2018-03-20 16:42:40.186+08 9237d478-75b4-48a0-a403-98172bf6c694 2 f
+78 To To温度初值 Variable \N \N 0 3 100 -100 ℃ t 2018-03-06 15:15:05.885+08 2018-03-06 15:15:06.376+08 0ca79346-8d3a-4aca-ba68-833fce60cbf8 2 f
+79 K1 K1一次项系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-06 15:48:31.85+08 2018-03-06 15:48:31.86+08 c6df07ed-3777-4e2b-aba1-d4cfbab61e06 2 f
+81 K3 K3三次项系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-06 15:49:45.964+08 2018-03-06 15:49:45.974+08 c6df07ed-3777-4e2b-aba1-d4cfbab61e06 2 f
+82 Kt Kt温补系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-06 15:50:23.441+08 2018-03-06 15:50:23.448+08 c6df07ed-3777-4e2b-aba1-d4cfbab61e06 2 f
+86 b 转换初值 Variable \N \N 5 9999999999 -9999999999 N = Ya + b ,计算出b t 2018-03-06 16:19:56.13+08 2018-03-06 16:34:31.799+08 b697c668-ee32-4c39-b465-08d30a05ed1c 2 f
+87 K1 K1一次项系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-06 16:54:16.76+08 2018-03-06 16:54:16.767+08 9237d478-75b4-48a0-a403-98172bf6c694 2 f
+83 Fo Fo基准初值 Variable \N 0 3 1000000 -100000 t 2018-03-06 15:50:58.843+08 2018-03-06 15:58:40.224+08 c6df07ed-3777-4e2b-aba1-d4cfbab61e06 2 f
+84 To To温度初值 Variable \N 0 3 100 -100 ℃ t 2018-03-06 15:51:41.015+08 2018-03-06 15:58:43.901+08 c6df07ed-3777-4e2b-aba1-d4cfbab61e06 2 f
+88 K2 K2二次项系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-06 16:54:52.366+08 2018-03-06 16:54:52.373+08 9237d478-75b4-48a0-a403-98172bf6c694 2 f
+85 a 转换系数 Variable \N \N 5 9999999999 -9999999999 \N a = (N - M)/ (Y - X),客户的测量范围是M—N(M < N),精度范围X—Y(X < Y) t 2018-03-06 16:19:33.32+08 2018-03-06 16:34:21.591+08 b697c668-ee32-4c39-b465-08d30a05ed1c 2 f
+89 K3 K3三次项系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-06 16:55:24.701+08 2018-03-06 16:55:24.708+08 9237d478-75b4-48a0-a403-98172bf6c694 2 f
+90 Kt Kt温补系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-06 16:55:53.241+08 2018-03-06 16:55:53.248+08 9237d478-75b4-48a0-a403-98172bf6c694 2 f
+72 To To温度初值 Variable \N 0 3 100 -100 ℃ t 2018-03-06 11:36:42.07+08 2018-03-20 18:08:05.883+08 60039eec-76e3-47ec-9024-32d1bbd55287 2 f
+92 To To温度初值 Variable \N \N 0 3 100 -100 ℃ t 2018-03-06 16:57:09.586+08 2018-03-06 16:57:09.594+08 9237d478-75b4-48a0-a403-98172bf6c694 2 f
+95 Kt Kt温补系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-07 16:40:23.252+08 2018-03-07 16:40:23.261+08 82211766-487b-4e8d-9b03-bc288381880d 2 f
+93 Fo Fo频率初值 Variable \N 0 3 1000000 -1000000 HZ t 2018-03-07 16:38:42.459+08 2018-03-07 16:40:36.313+08 82211766-487b-4e8d-9b03-bc288381880d 2 f
+96 To To温度初值 Variable \N \N 0 2 100 -100 ℃ t 2018-03-07 16:41:56.92+08 2018-03-07 16:41:56.927+08 82211766-487b-4e8d-9b03-bc288381880d 2 f
+97 K K模量系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-07 17:30:46.367+08 2018-03-07 17:30:46.374+08 0170f4f5-2ed4-43e1-bd3a-d3f774359bf0 2 f
+98 Kt Kt温补系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-07 17:32:15.628+08 2018-03-07 17:32:15.634+08 0170f4f5-2ed4-43e1-bd3a-d3f774359bf0 2 f
+185 Fo 初始频率 Variable \N 0 5 99999999999999 -99999999999999 Hz t 2018-07-23 11:13:10.206+08 2018-07-23 11:13:44.549+08 3e38a57f-b980-45b4-8f8f-1929160edfaa 2 f
+100 To To温度初值 Variable \N \N 0 2 100 -100 ℃ t 2018-03-07 17:33:27.779+08 2018-03-07 17:33:27.785+08 0170f4f5-2ed4-43e1-bd3a-d3f774359bf0 2 f
+111 To To温度初值 Variable \N \N 0 2 100 -100 ℃ t 2018-03-13 17:37:12.71+08 2018-03-13 17:37:12.715+08 6f3f738c-fcc3-4ebf-9695-6d0275cbc3ff 2 f
+109 Kt Kt温补系数 Variable \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-13 17:35:26.412+08 2018-03-13 17:37:21.904+08 6f3f738c-fcc3-4ebf-9695-6d0275cbc3ff 2 f
+112 K K模量系数 Variable \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-13 23:12:33.333+08 2018-03-29 15:44:10.042+08 d7ca67ec-0077-4e81-8f64-4642f1d94fce 2 f
+138 a a零上温度系数 Variable \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 ℃/Ω t 2018-03-22 15:22:15.845+08 2018-03-22 15:25:15.824+08 407c070f-d757-448d-8d63-9fe3a26293ef 2 f
+115 aL 模拟量下限 Variable \N \N 4 3 20 0 t 2018-03-14 00:31:28.264+08 2018-03-14 00:31:28.273+08 eca449f9-8e01-4a93-bb4d-0951e272b768 2 f
+114 aH 模拟量上限 Variable \N 20 3 20 0 t 2018-03-14 00:30:51.554+08 2018-03-14 00:31:37.009+08 eca449f9-8e01-4a93-bb4d-0951e272b768 2 f
+116 dH 数字量上限 Variable \N \N \N 3 100000000 -100000000 t 2018-03-14 00:32:51.481+08 2018-03-14 00:32:51.488+08 eca449f9-8e01-4a93-bb4d-0951e272b768 2 f
+117 dL 数字量下限 Variable \N \N \N 3 100000000 -100000000 t 2018-03-14 00:33:44.487+08 2018-03-14 00:33:44.495+08 eca449f9-8e01-4a93-bb4d-0951e272b768 2 f
+118 dL dL数字量下限 Variable \N \N 0 3 1000000 -1000000 \N t 2018-03-14 08:06:25.22+08 2018-03-14 08:06:25.743+08 155ebc9a-097d-4567-baf4-6271f43c2669 2 f
+119 dH dH数字量上限 Variable \N \N 0 3 1000000 -1000000 t 2018-03-14 08:07:52.302+08 2018-03-14 08:07:52.309+08 155ebc9a-097d-4567-baf4-6271f43c2669 2 f
+120 aL aL模拟量下限 Variable \N \N 4 \N 20 0 t 2018-03-14 08:09:14.613+08 2018-03-14 08:09:14.62+08 155ebc9a-097d-4567-baf4-6271f43c2669 1 f
+121 aH aH模拟量上限 Variable \N \N 20 \N 20 0 t 2018-03-14 08:10:10.845+08 2018-03-14 08:10:10.853+08 155ebc9a-097d-4567-baf4-6271f43c2669 1 f
+122 Fo Fo基准初值 Variable \N \N 0 6 100000000 -10000000 \N t 2018-03-14 08:13:17.181+08 2018-03-14 08:13:17.186+08 df6a9e9a-ecfa-46b2-9244-698035b23dfa 2 f
+123 K1 K1一次项系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-14 08:14:00.865+08 2018-03-14 08:14:00.87+08 df6a9e9a-ecfa-46b2-9244-698035b23dfa 2 f
+125 K3 K3三次项系数 Variable \N \N 1 16 10000000 -100000000 t 2018-03-14 08:15:50.858+08 2018-03-14 08:15:50.864+08 df6a9e9a-ecfa-46b2-9244-698035b23dfa 2 f
+124 K2 K2二次项系数 Variable \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-14 08:14:58.485+08 2018-03-14 08:16:00.051+08 df6a9e9a-ecfa-46b2-9244-698035b23dfa 2 f
+133 K2 K2二次项系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-20 16:38:48.16+08 2018-03-20 16:38:48.17+08 6f3f738c-fcc3-4ebf-9695-6d0275cbc3ff 2 f
+140 k 模量系数 Variable \N \N 1 16 9999999999 -9999999999 \N t 2018-03-26 10:45:15.297+08 2018-03-26 10:45:15.31+08 3716716b-c893-45f6-8566-e285dec7ddd0 2 f
+134 K3 K3三次项系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-20 16:39:57.199+08 2018-03-20 16:39:57.209+08 6f3f738c-fcc3-4ebf-9695-6d0275cbc3ff 2 f
+77 Fo Fo基准读数 Variable \N 0 3 100000 -100000 t 2018-03-06 15:14:18.783+08 2018-03-20 16:41:12.274+08 0ca79346-8d3a-4aca-ba68-833fce60cbf8 2 f
+141 f0 频率初值 Variable \N \N 1 16 999999999 -100000 Hz t 2018-03-26 10:46:04.944+08 2018-03-26 10:46:04.955+08 3716716b-c893-45f6-8566-e285dec7ddd0 2 f
+136 Zo Zo电阻比基准值 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-22 15:16:37.104+08 2018-03-22 15:16:37.108+08 407c070f-d757-448d-8d63-9fe3a26293ef 2 f
+137 b b温度修正系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-22 15:17:40.831+08 2018-03-22 15:17:40.839+08 407c070f-d757-448d-8d63-9fe3a26293ef 2 f
+139 Ro Ro计算0℃电阻值 Variable \N 0 3 1000 -1000 Ω t 2018-03-22 15:24:14.803+08 2018-03-22 15:24:55.723+08 407c070f-d757-448d-8d63-9fe3a26293ef 2 f
+135 f f最小读数 Variable \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-22 15:12:27.542+08 2018-03-22 15:25:06.891+08 407c070f-d757-448d-8d63-9fe3a26293ef 2 f
+142 kt 温度补偿系数 Variable \N \N 1 16 100000 -100000 t 2018-03-26 10:46:32.897+08 2018-03-26 10:46:32.91+08 3716716b-c893-45f6-8566-e285dec7ddd0 2 f
+143 t0 初始温度 Variable \N \N 1 16 100000000 -100000000 ℃ t 2018-03-26 10:47:23.578+08 2018-03-26 10:47:23.584+08 3716716b-c893-45f6-8566-e285dec7ddd0 2 f
+147 Fo Fo频率初值 Variable \N \N 0 3 100000000 -100000000 HZ t 2018-03-28 23:20:50.926+08 2018-03-28 23:20:50.933+08 9010ed47-fe9a-494d-8805-c42604e61bdd 2 f
+146 K K模量系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-28 23:19:35.978+08 2018-03-28 23:19:35.983+08 9010ed47-fe9a-494d-8805-c42604e61bdd 2 f
+148 Kt Kt温补系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-28 23:21:25.87+08 2018-03-28 23:21:25.879+08 9010ed47-fe9a-494d-8805-c42604e61bdd 2 f
+149 To To温度初值 Variable \N \N 0 2 100 -100 t 2018-03-28 23:21:59.498+08 2018-03-28 23:21:59.503+08 9010ed47-fe9a-494d-8805-c42604e61bdd 2 f
+150 G G(直线系数) Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-29 14:27:06.409+08 2018-03-29 14:27:06.415+08 121058ad-ddc3-41a9-bd75-36e58162a204 2 f
+151 L L(间距) Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 mm t 2018-03-29 14:27:41.997+08 2018-03-29 14:27:42.01+08 121058ad-ddc3-41a9-bd75-36e58162a204 2 f
+152 Rx0 Rx0(x方向初值) Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-29 14:28:32.67+08 2018-03-29 14:28:32.685+08 121058ad-ddc3-41a9-bd75-36e58162a204 2 f
+153 Ry0 Ry0(Y方向初值) Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-29 14:29:07.859+08 2018-03-29 14:29:07.871+08 121058ad-ddc3-41a9-bd75-36e58162a204 2 f
+155 aH 模拟量上限 Variable \N \N 20 \N 20 0 t 2018-03-29 14:55:30.434+08 2018-03-29 14:55:30.441+08 1a7e610f-1da2-4a2c-bbce-2faa2ead0ba9 1 f
+154 aL 模拟量下限 Variable \N 4 0 20 0 \N t 2018-03-29 14:54:53.964+08 2018-03-29 14:55:36.579+08 1a7e610f-1da2-4a2c-bbce-2faa2ead0ba9 1 f
+156 dL dL数字量下限 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-29 14:57:41.906+08 2018-03-29 14:57:41.913+08 1a7e610f-1da2-4a2c-bbce-2faa2ead0ba9 2 f
+157 dH 数字量上限 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-03-29 14:58:19.429+08 2018-03-29 14:58:19.436+08 1a7e610f-1da2-4a2c-bbce-2faa2ead0ba9 2 f
+113 Fo Fo频率初值 Variable \N 0 3 100000 -100000 HZ t 2018-03-13 23:13:48.141+08 2018-03-29 15:44:05.154+08 d7ca67ec-0077-4e81-8f64-4642f1d94fce 2 f
+158 K 模量系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-03-29 18:48:49.042+08 2018-03-29 18:48:49.05+08 209ff0d2-7a85-4997-804a-d64bb04ba531 2 f
+168 K 模量系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-05-17 14:58:17.779+08 2018-05-17 14:58:17.792+08 1c900f29-83ed-4ef1-95af-5ac4338f8c08 2 f
+159 Fo 频率初值 Variable \N 0 5 100000000 -100000000 HZ t 2018-03-29 18:49:31.676+08 2018-03-29 18:49:38.737+08 209ff0d2-7a85-4997-804a-d64bb04ba531 2 f
+264 WTo 初始波长WTo Variable \N \N 0 6 100000000 -100000000 \N t 2019-03-25 11:35:08.387+08 2019-03-25 11:35:08.387+08 02079e63-b1de-4da9-8424-ebded758b627 2 f
+161 K1 K1一次项系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2018-04-02 17:23:10.427+08 2018-04-02 17:23:10.434+08 72133db4-abf6-4073-bc7f-b99c12aca33c 2 f
+162 K2 K2二次项系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-04-02 17:23:55.568+08 2018-04-02 17:23:55.576+08 72133db4-abf6-4073-bc7f-b99c12aca33c 2 f
+163 K3 K3三次项系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-04-02 17:24:25.893+08 2018-04-02 17:24:25.9+08 72133db4-abf6-4073-bc7f-b99c12aca33c 2 f
+173 P 原始值指数P Variable \N 1 0 10 -10 \N t 2018-05-28 17:05:29.296+08 2018-05-28 18:07:59.243+08 5c22c26c-2a9e-439f-b585-2d5e1031fc23 1 f
+182 aa a Variable \N \N \N 2 400 99 \N t 2018-07-03 19:24:26.826+08 2018-07-03 19:24:26.847+08 449d0a01-4fc8-4479-8c73-3d96d07b130d 2 f
+186 K 模量系数 Variable \N \N 1 16 99999999999999 -99999999999999 t 2018-07-23 11:14:24.587+08 2018-07-23 11:14:24.591+08 3e38a57f-b980-45b4-8f8f-1929160edfaa 2 f
+187 Kt 温度补偿系数 Variable \N \N 1 16 99999999999999 -99999999999999 t 2018-07-23 11:14:56.407+08 2018-07-23 11:14:56.415+08 3e38a57f-b980-45b4-8f8f-1929160edfaa 2 f
+190 Io 模拟量初值Io Variable \N 0 3 10000 -10000 mA t 2018-08-03 10:45:46.924+08 2018-08-03 10:49:05.552+08 0e03ebe4-bdad-4a8f-840c-ba09293c2488 2 f
+193 K1 K1一次项系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-08-15 13:54:23.515+08 2018-08-15 13:54:23.515+08 b3ba8400-5a93-4fee-a990-e2623acda7f0 2 f
+197 To To温度初值 Variable \N \N 0 3 100 -100 ℃ t 2018-08-15 14:08:57.433+08 2018-08-15 14:08:57.433+08 b3ba8400-5a93-4fee-a990-e2623acda7f0 2 f
+201 To 温度初值To Variable \N \N 0 3 100 -100 ℃ t 2018-08-27 14:34:33.116+08 2018-08-27 14:34:33.116+08 be4aed0f-76d0-43ba-b4f3-01a0229e817b 2 f
+204 Kt 温补系数Kt Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2018-08-27 14:38:14.897+08 2018-08-27 14:38:14.897+08 2557b15d-db8f-4129-86b7-d04b8b5cd50f 2 f
+205 To 温度初值To Variable \N \N 0 3 100 -100 ℃ t 2018-08-27 14:44:30.7+08 2018-08-27 14:44:30.7+08 2557b15d-db8f-4129-86b7-d04b8b5cd50f 2 f
+210 K 模量系数K Variable \N \N 1 16 1000000000 -1000000000 \N t 2018-09-07 11:33:24.704+08 2018-09-07 11:33:24.704+08 ff2de59e-fd95-42c6-93cc-d827da25dd0c 2 f
+216 K2 K2二次项系数 Variable \N \N 0 16 10000000000 -10000000000 t 2018-09-29 15:55:25.458+08 2018-09-29 15:55:25.458+08 37f306ac-245e-4f3b-af76-4fe38cf3a8f7 2 f
+219 To To温度初值 Variable \N \N 0 2 100 -100 t 2018-09-29 15:57:14.004+08 2018-09-29 15:57:14.004+08 37f306ac-245e-4f3b-af76-4fe38cf3a8f7 2 f
+245 Kt Kt温补系数 Variable \N 0 16 1000000000000 -1000000000000 t 2019-02-13 09:30:10.871+08 2019-02-13 09:30:25.892+08 904ee015-6df9-4626-90bd-2c3cc6e78f63 2 f
+236 K3 三次项次数K3 Variable \N \N 0 10 100000 -100000 t 2018-11-23 17:06:25.401+08 2018-11-23 17:06:25.401+08 fe13db66-da09-464c-89af-e9d080352d7d 2 f
+239 Kt 温补系数Kt Variable \N 0 10 100000 -100000 \N t 2018-11-23 17:49:12.606+08 2018-11-23 17:52:19.656+08 fe13db66-da09-464c-89af-e9d080352d7d 2 f
+242 Co 标定常数 Variable \N 0 6 10000000 -1000000 t 2018-12-20 16:02:14.967+08 2018-12-20 16:08:47.195+08 6eadaa20-f803-4859-8ed0-3bd1afa830cb 2 f
+265 Kwt 温度系数Kwt Variable \N \N 1 6 100000000 -100000000 t 2019-03-25 11:35:50.913+08 2019-03-25 11:35:50.913+08 02079e63-b1de-4da9-8424-ebded758b627 2 f
+251 Fo 初始频率 Variable \N \N 0 3 10000000 -10000000 HZ t 2019-02-22 15:33:37.007+08 2019-02-22 15:33:37.007+08 0d1ad29d-fa86-4af0-bf45-16a19f2fd8d9 2 f
+232 cn 关联的温度通道与节点如5,12 Variable \N 1,1 0 \N 形如5,12 代表通道5下面节点12的温度计 t 2018-10-24 16:10:10.462+08 2019-01-25 11:18:50.114+08 83c9a688-5f70-472f-abce-c1c127ce189b 5 f
+253 Vo 电压初值Vo Variable \N \N 0 3 20 0 V t 2019-02-22 15:36:27.656+08 2019-02-22 15:36:27.656+08 5116bca0-de6b-4f0b-b995-31c9801ee401 2 f
+268 Wo 应变波长初值Wo Variable \N \N 0 16 1000000000000 -1000000000000 T0温度下的应变波长值Wo t 2019-03-25 13:45:47.627+08 2019-03-25 13:45:47.627+08 a9bc6a3e-3aae-4ee7-a354-c174ea0577f5 2 f
+255 Kx Ky转换系数 Variable \N 1 3 100000 -100000 t 2019-02-22 15:39:44.06+08 2019-02-22 15:40:24.799+08 5116bca0-de6b-4f0b-b995-31c9801ee401 2 f
+257 Fo 初始频率Fo Variable \N \N 0 5 100000 -100000 HZ t 2019-02-25 16:42:52.11+08 2019-02-25 16:42:52.11+08 73db0431-7f3c-451d-9852-38c75cdf1b79 2 f
+259 Kt 温补系数Kt Variable \N \N 0 16 1000000 -1000000 \N t 2019-02-25 16:45:48.121+08 2019-02-25 16:45:48.121+08 73db0431-7f3c-451d-9852-38c75cdf1b79 2 f
+262 K 系数K Variable \N 1 8 10000000 -10000000 \N t 2019-03-13 13:51:04.378+08 2019-03-13 13:51:23.647+08 96e821da-a5f5-448b-9a60-b4e83202b252 2 f
+260 K 系数K Variable \N 1 8 10000000 -1000000 \N t 2019-03-12 14:05:31.01+08 2019-03-13 13:51:35.187+08 75a20e66-91ae-4d62-8f69-faef769091b1 2 f
+261 W 放大倍数W Variable \N 1 8 10000000 -10000000 t 2019-03-12 14:06:07.774+08 2019-03-13 13:51:41.31+08 75a20e66-91ae-4d62-8f69-faef769091b1 2 f
+263 Po 修正值Po Variable \N \N 0 8 100000000 -100000000 t 2019-03-13 13:52:39.302+08 2019-03-13 13:52:39.302+08 96e821da-a5f5-448b-9a60-b4e83202b252 2 f
+226 WTo 初始波长WTo Variable \N 0 6 100000000 -100000000 t 2018-10-24 13:59:05.589+08 2019-03-25 11:34:54.732+08 c4f1e8d6-82f3-4436-b65e-4d1a8474612e 2 f
+266 To 温度修正值To Variable \N \N 0 2 100 -100 ℃ t 2019-03-25 11:38:08.985+08 2019-03-25 11:38:08.985+08 02079e63-b1de-4da9-8424-ebded758b627 2 f
+269 Kt 应变的温度系数Kt Variable \N \N 1 16 100000000000 -100000000000 应变计的温度系数Kt t 2019-03-25 13:47:23.937+08 2019-03-25 13:47:23.937+08 a9bc6a3e-3aae-4ee7-a354-c174ea0577f5 2 f
+229 WTo 温度波长初值WTo Variable \N 0 16 100000000000 -100000000000 温度传感器在T0温度下的波长值(nm) t 2018-10-24 15:54:17.118+08 2019-03-25 13:43:30.554+08 83c9a688-5f70-472f-abce-c1c127ce189b 2 f
+267 WTo 温度波长初值WTo Variable \N \N 0 16 100000000000 -100000000000 温度传感器在T0温度下的波长值(nm) t 2019-03-25 13:44:47.751+08 2019-03-25 13:44:47.751+08 a9bc6a3e-3aae-4ee7-a354-c174ea0577f5 2 f
+270 Kwt 温度的温度系数Kwt Variable \N \N 1 16 100000000000 -100000000000 t 2019-03-25 13:51:16.195+08 2019-03-25 13:51:16.195+08 a9bc6a3e-3aae-4ee7-a354-c174ea0577f5 2 f
+271 K 应变系数K Variable \N \N 1 16 1000000000000 -1000000000000 t 2019-03-25 13:52:07.893+08 2019-03-25 13:52:07.893+08 a9bc6a3e-3aae-4ee7-a354-c174ea0577f5 2 f
+272 cn 关联的温度通道与节点如5,12 Variable \N 1,1 0 如5,12 代表通道5下面节点12的温度计 t 2019-03-25 13:53:01.42+08 2019-03-25 14:03:44.553+08 a9bc6a3e-3aae-4ee7-a354-c174ea0577f5 5 f
+275 Fo 初始频率Fo Variable \N \N 0 3 100000000 -100000000 t 2019-04-10 15:19:53.488+08 2019-04-10 15:19:53.488+08 583a326f-d743-4f66-b60d-89b60c35e439 2 f
+273 K 模量系数K Variable \N 1 10 100000000000 -100000000000 \N t 2019-04-10 15:14:46.721+08 2019-04-10 15:21:40.901+08 583a326f-d743-4f66-b60d-89b60c35e439 2 f
+276 K 模量系数K Variable \N \N 1 3 1000000 -1000000 \N t 2019-04-25 15:15:27.989+08 2019-04-25 15:15:27.989+08 5ffcc514-3e04-44e3-824a-c732c656a8c7 2 f
+277 fo 频率初值fo Variable \N \N 0 3 10000000 -1000000 HZ t 2019-04-25 15:16:09.434+08 2019-04-25 15:16:09.434+08 5ffcc514-3e04-44e3-824a-c732c656a8c7 2 f
+278 参数A 参数A Tag \N \N \N \N \N \N \N t 2019-04-26 13:08:13.872+08 2019-04-26 13:08:13.872+08 acb091fb-01aa-4316-9406-e52f4d5d84bd 1 f
+285 1 1 Variable \N \N \N \N 1 1 t 2019-05-10 16:00:24.23+08 2019-05-10 16:00:24.23+08 f7c7c02c-833e-4c2c-9119-492d7a340331 1 f
+287 F0 初始频率 Variable \N \N 0 6 99999 -99999 Hz t 2019-05-10 16:01:41.786+08 2019-05-10 16:01:41.786+08 ac0133f4-cdfd-424a-aae0-598e71b861a6 2 f
+286 K 系数 Variable \N 1 6 99999 -99999 t 2019-05-10 16:00:52.476+08 2019-05-10 16:01:48.346+08 ac0133f4-cdfd-424a-aae0-598e71b861a6 2 f
+288 K1 一次项系数K1 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2019-05-14 14:18:56.749+08 2019-05-14 14:18:56.749+08 5b5f6379-cb2f-49e4-bf4f-92c230604fda 2 f
+289 K2 二次项系数K2 Variable \N \N 0 16 999999999999999 -999999999999999 t 2019-05-14 14:20:01.505+08 2019-05-14 14:20:01.505+08 5b5f6379-cb2f-49e4-bf4f-92c230604fda 2 f
+290 R0 基准值R0 Variable \N \N 0 5 1000000 -1000000 t 2019-05-14 14:20:45.428+08 2019-05-14 14:20:45.428+08 5b5f6379-cb2f-49e4-bf4f-92c230604fda 2 f
+291 C 修正值C Variable \N \N 0 5 1000000 -1000000 t 2019-05-14 14:21:28.371+08 2019-05-14 14:21:28.371+08 5b5f6379-cb2f-49e4-bf4f-92c230604fda 2 f
+292 P 原始值指数P Variable \N \N 1 \N 10 -10 t 2019-05-14 14:22:04.394+08 2019-05-14 14:22:04.394+08 5b5f6379-cb2f-49e4-bf4f-92c230604fda 1 f
+293 K K模量系数 Variable \N \N 1 16 99999999999999 -99999999999999 \N t 2019-05-14 14:24:31.81+08 2019-05-14 14:24:31.81+08 beeaa0c3-fc06-4684-a771-8434726179cf 2 f
+294 Kt Kt温补系数 Variable \N \N 0 16 99999999999999 -99999999999999 t 2019-05-14 14:25:25.177+08 2019-05-14 14:25:25.177+08 beeaa0c3-fc06-4684-a771-8434726179cf 2 f
+295 Fo Fo频率初值 Variable \N \N 0 3 100000 -100000 HZ t 2019-05-14 14:26:37.981+08 2019-05-14 14:26:37.981+08 beeaa0c3-fc06-4684-a771-8434726179cf 2 f
+296 To To温度初值 Variable \N \N 0 3 100 -100 ℃ t 2019-05-14 14:27:25.516+08 2019-05-14 14:27:25.516+08 beeaa0c3-fc06-4684-a771-8434726179cf 2 f
+297 G G(直线系数) Variable \N \N 1 16 9999999999999999 -9999999999999999 \N t 2019-05-14 14:28:40.827+08 2019-05-14 14:28:40.827+08 bee9dea8-27e2-4698-9202-885b4b2a0bbd 2 f
+298 L L(间距) Variable \N \N 1 16 99999999999999 -99999999999999 mm t 2019-05-14 14:29:54.113+08 2019-05-14 14:29:54.113+08 bee9dea8-27e2-4698-9202-885b4b2a0bbd 2 f
+299 Rx0 Rx0(x方向初值) Variable \N \N 0 16 9999999999999999999 -9999999999999999999 t 2019-05-14 14:30:41.335+08 2019-05-14 14:30:41.335+08 bee9dea8-27e2-4698-9202-885b4b2a0bbd 2 f
+300 Ry0 Ry0(Y方向初值) Variable \N \N 0 16 999999999999999999 -999999999999999999 t 2019-05-14 14:31:25.155+08 2019-05-14 14:31:25.155+08 bee9dea8-27e2-4698-9202-885b4b2a0bbd 2 f
+301 aH 模拟量上限 Variable \N \N 20 \N 20 0 \N t 2019-05-14 14:33:01.299+08 2019-05-14 14:33:01.299+08 2edaa49c-0668-41cd-a987-a3f64cf9c81c 1 f
+302 aL 模拟量下限 Variable \N \N 4 \N 20 0 t 2019-05-14 14:33:37.501+08 2019-05-14 14:33:37.501+08 2edaa49c-0668-41cd-a987-a3f64cf9c81c 1 f
+303 dL dL数字量下限 Variable \N \N 0 16 99999999999999 -99999999999999 t 2019-05-14 14:34:24.777+08 2019-05-14 14:34:24.777+08 2edaa49c-0668-41cd-a987-a3f64cf9c81c 2 f
+304 dH 数字量上限 Variable \N \N 1 16 99999999999999 -99999999999999 t 2019-05-14 14:35:11.082+08 2019-05-14 14:35:11.082+08 2edaa49c-0668-41cd-a987-a3f64cf9c81c 2 f
+307 K 模量系数K Variable \N \N 1 10 10000000 -10000000 \N t 2019-05-22 10:48:50.692+08 2019-05-22 10:48:50.692+08 aa5798ad-a0d5-4e40-93b6-af8ae2dfe86c 2 f
+308 Fo 频率初值Fo Variable \N \N 0 5 10000000 -10000000 HZ t 2019-05-22 10:49:41.679+08 2019-05-22 10:49:41.679+08 aa5798ad-a0d5-4e40-93b6-af8ae2dfe86c 2 f
+309 K1 一次项系数K1 Variable \N \N 1 16 9999999999999999 -9999999999999999 \N t 2019-05-23 14:04:59.493+08 2019-05-23 14:04:59.493+08 b9168d49-7bd9-4a0a-8089-b7b13f0b33e5 2 f
+310 K2 二次项系数K2 Variable \N \N 0 16 999999999999999 -999999999999999 t 2019-05-23 14:06:20.852+08 2019-05-23 14:06:20.852+08 b9168d49-7bd9-4a0a-8089-b7b13f0b33e5 2 f
+311 R0 基准值R0 Variable \N \N 0 5 1000000 -1000000 t 2019-05-23 14:07:20.556+08 2019-05-23 14:07:20.556+08 b9168d49-7bd9-4a0a-8089-b7b13f0b33e5 2 f
+312 C 修正值C Variable \N \N 0 5 1000000 -1000000 t 2019-05-23 14:11:29.891+08 2019-05-23 14:11:29.891+08 b9168d49-7bd9-4a0a-8089-b7b13f0b33e5 2 f
+313 P 原始值指数P Variable \N \N 1 \N 10 -10 t 2019-05-23 14:12:23.585+08 2019-05-23 14:12:23.585+08 b9168d49-7bd9-4a0a-8089-b7b13f0b33e5 1 f
+314 K K模量系数 Variable \N \N 1 16 99999999999999 -99999999999999 \N t 2019-05-23 14:14:09.416+08 2019-05-23 14:14:09.416+08 7be774d7-af98-47fa-b941-286639c151e9 2 f
+315 Kt Kt温补系数 Variable \N \N 0 16 99999999999999 -99999999999999 t 2019-05-23 14:15:02.783+08 2019-05-23 14:15:02.783+08 7be774d7-af98-47fa-b941-286639c151e9 2 f
+316 Fo Fo频率初值 Variable \N \N 0 3 100000 -100000 HZ t 2019-05-23 14:16:00.44+08 2019-05-23 14:16:00.44+08 7be774d7-af98-47fa-b941-286639c151e9 2 f
+317 To To温度初值 Variable \N \N 0 3 100 -100 ℃ t 2019-05-23 14:16:44.267+08 2019-05-23 14:16:44.267+08 7be774d7-af98-47fa-b941-286639c151e9 2 f
+318 G G(直线系数) Variable \N \N 1 16 9999999999999999 -9999999999999999 \N t 2019-05-23 14:18:19.921+08 2019-05-23 14:18:19.921+08 630b1eca-f335-4da0-90fb-c21f58f32798 2 f
+319 L L(间距) Variable \N \N 1 16 99999999999999 -99999999999999 mm t 2019-05-23 14:19:15.419+08 2019-05-23 14:19:15.419+08 630b1eca-f335-4da0-90fb-c21f58f32798 2 f
+320 Rx0 Rx0(x方向初值) Variable \N \N 0 16 9999999999999999999 -9999999999999999999 t 2019-05-23 14:20:06.688+08 2019-05-23 14:20:06.688+08 630b1eca-f335-4da0-90fb-c21f58f32798 2 f
+321 Ry0 Ry0(Y方向初值) Variable \N \N 0 16 99999999999999 -99999999999999 t 2019-05-23 14:20:53.085+08 2019-05-23 14:20:53.085+08 630b1eca-f335-4da0-90fb-c21f58f32798 2 f
+322 aH 模拟量上限 Variable \N \N 20 \N 20 0 \N t 2019-05-23 14:22:06.741+08 2019-05-23 14:22:06.741+08 65ca4fef-0880-442f-938e-da24d950557d 1 f
+323 aL 模拟量下限 Variable \N \N 4 \N 20 0 t 2019-05-23 14:22:40.671+08 2019-05-23 14:22:40.671+08 65ca4fef-0880-442f-938e-da24d950557d 1 f
+324 dL dL数字量下限 Variable \N \N 0 16 99999999999999 -99999999999999 t 2019-05-23 14:23:45.567+08 2019-05-23 14:23:45.567+08 65ca4fef-0880-442f-938e-da24d950557d 2 f
+325 dH 数字量上限 Variable \N \N 1 16 99999999999999 -99999999999999 t 2019-05-23 14:24:28.774+08 2019-05-23 14:24:28.774+08 65ca4fef-0880-442f-938e-da24d950557d 2 f
+327 b 初值 Variable \N \N 16 99999999 -99999999 t 2019-05-28 16:21:17.888+08 2019-05-28 16:21:37.333+08 5a40c554-1256-4aec-b591-0202fc0f267a 2 f
+326 a 系数 Variable \N 0 16 99999999 -99999999 \N t 2019-05-28 16:20:05.352+08 2019-05-28 16:23:06.21+08 5a40c554-1256-4aec-b591-0202fc0f267a 2 f
+332 a a Variable \N \N 1 6 100000000 -100000000 \N t 2019-05-29 15:48:33.416+08 2019-05-29 15:48:33.416+08 871940ec-0348-4f4c-942e-8785322e66f4 2 f
+333 b b Variable \N \N 1 6 100000000 -100000000 t 2019-05-29 15:51:21.761+08 2019-05-29 15:51:21.761+08 871940ec-0348-4f4c-942e-8785322e66f4 2 f
+334 T0 初始温度 Variable \N \N 1 99999 -99999 ℃ t 2019-05-30 16:04:05.333+08 2019-05-30 16:04:05.333+08 583a326f-d743-4f66-b60d-89b60c35e439 2 f
+338 K 模量系数K Variable \N \N \N 10 100000000000 -100000000000 t 2019-06-03 10:47:44.324+08 2019-06-03 10:47:44.324+08 6cea049d-f41a-43f9-9e88-d8aeea9aca7f 2 f
+335 Kt 系数 Variable \N \N \N 6 99999 -99999 t 2019-05-30 16:07:17.947+08 2019-05-30 16:07:17.947+08 583a326f-d743-4f66-b60d-89b60c35e439 2 f
+336 Kt 温补系数Kt Variable \N \N 6 99999 -99999 \N t 2019-06-03 10:45:54.932+08 2019-06-03 10:49:12.237+08 6cea049d-f41a-43f9-9e88-d8aeea9aca7f 2 f
+340 Kt 温补系数 Variable \N \N \N 6 99999 -99999 \N t 2019-06-05 10:45:38.169+08 2019-06-05 10:45:38.169+08 bd266924-534e-4f2b-84a9-5e7b7c8f61de 2 f
+337 To 初始温度To Variable \N \N 2 99999 -99999 ℃ t 2019-06-03 10:46:51.943+08 2019-06-05 16:36:14.923+08 6cea049d-f41a-43f9-9e88-d8aeea9aca7f 2 f
+342 K 模量系数K Variable \N \N \N 6 9999999 -9999999 t 2019-06-05 10:47:51.521+08 2019-06-05 10:47:51.521+08 bd266924-534e-4f2b-84a9-5e7b7c8f61de 2 f
+343 Fo 初始频率Fo Variable \N \N \N 3 9999999 -9999999 t 2019-06-05 10:48:56.236+08 2019-06-05 10:48:56.236+08 bd266924-534e-4f2b-84a9-5e7b7c8f61de 2 f
+347 Fo 初始频率Fo Variable \N \N \N 3 9999999 -9999999 t 2019-06-05 11:03:15.312+08 2019-06-05 11:03:15.312+08 e74b9abf-dce9-435c-b500-e9060e048fb9 2 f
+341 To 初始温度To Variable \N \N 1 999999 -999999 ℃ t 2019-06-05 10:46:56.963+08 2019-06-05 10:49:08.613+08 bd266924-534e-4f2b-84a9-5e7b7c8f61de 2 f
+344 Kt 温补系数 Variable \N \N \N 6 99999 -99999 \N t 2019-06-05 11:01:08.078+08 2019-06-05 11:01:08.078+08 e74b9abf-dce9-435c-b500-e9060e048fb9 2 f
+345 To 初始温度To Variable \N \N \N 1 999999 -999999 ℃ t 2019-06-05 11:01:52.384+08 2019-06-05 11:01:52.384+08 e74b9abf-dce9-435c-b500-e9060e048fb9 2 f
+346 K 模量系数K Variable \N \N \N 6 9999999 -9999999 t 2019-06-05 11:02:33.818+08 2019-06-05 11:02:33.818+08 e74b9abf-dce9-435c-b500-e9060e048fb9 2 f
+348 Kt 温补系数 Variable \N \N \N 6 99999 -99999 \N t 2019-06-05 11:10:53.815+08 2019-06-05 11:10:53.815+08 9babcc5f-fa86-4544-b1e1-ef6fe80c1a38 2 f
+339 Fo 初始频率Fo Variable \N 3 100000000 -100000000 t 2019-06-03 10:48:41.976+08 2019-06-05 16:35:56.182+08 6cea049d-f41a-43f9-9e88-d8aeea9aca7f 2 f
+352 K 模量系数K Variable \N \N 1 16 1000000000 -1000000000 \N t 2019-06-11 15:08:26.562+08 2019-06-11 15:08:26.562+08 63aa490f-c8ba-4b11-b890-18cfee871d70 2 f
+353 To 温度初值 Variable \N \N 0 2 100 -100 ℃ t 2019-06-11 15:11:55.866+08 2019-06-11 15:11:55.866+08 63aa490f-c8ba-4b11-b890-18cfee871d70 2 f
+354 Kt 温补系数Kt Variable \N \N 0 16 10000000 -10000000 t 2019-06-11 15:13:29.701+08 2019-06-11 15:13:29.701+08 63aa490f-c8ba-4b11-b890-18cfee871d70 2 f
+355 Fo 初始频率 Variable \N \N 0 3 10000000 -10000000 HZ t 2019-06-11 15:14:20.768+08 2019-06-11 15:14:20.768+08 63aa490f-c8ba-4b11-b890-18cfee871d70 2 f
+356 Ky Ky转换系数 Variable \N \N 1 3 100000 -100000 \N t 2019-06-11 15:15:21.429+08 2019-06-11 15:15:21.429+08 d062cb83-d762-42e2-a2dc-37d75f24bf18 2 f
+357 Vo 电压初值Vo Variable \N \N 0 3 20 0 V t 2019-06-11 15:16:06.014+08 2019-06-11 15:16:06.014+08 d062cb83-d762-42e2-a2dc-37d75f24bf18 2 f
+358 Kx Ky转换系数 Variable \N \N 1 3 100000 -100000 t 2019-06-11 15:16:46.262+08 2019-06-11 15:16:46.262+08 d062cb83-d762-42e2-a2dc-37d75f24bf18 2 f
+360 Kt Kt温补系数 Variable \N \N 0 16 9999999999999999999 -9999999999999999999 t 2019-06-24 16:53:26.406+08 2019-06-24 16:53:26.406+08 2bd2a601-c351-4e47-bbbe-9a787efd6026 2 f
+361 K K模量系数 Variable \N \N 1 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2019-06-24 16:54:19.93+08 2019-06-24 16:54:19.93+08 2bd2a601-c351-4e47-bbbe-9a787efd6026 2 f
+362 Fo Fo频率初值 Variable \N \N 0 3 100000000 -100000000 HZ t 2019-06-24 16:55:56.505+08 2019-06-24 16:55:56.505+08 2bd2a601-c351-4e47-bbbe-9a787efd6026 2 f
+359 To To温度初值 Variable \N 0 2 100 -100 ℃ t 2019-06-24 16:52:06.36+08 2019-06-24 16:56:19.175+08 2bd2a601-c351-4e47-bbbe-9a787efd6026 2 f
+350 K 模量系数K Variable \N 1 16 9999999999999999999 -999999999999999999 t 2019-06-05 11:12:27.298+08 2019-07-09 09:49:40.506+08 9babcc5f-fa86-4544-b1e1-ef6fe80c1a38 2 f
+351 Fo 初始频率Fo Variable \N 0 5 100000 -100000 HZ t 2019-06-05 11:13:28.561+08 2019-07-09 09:49:49.925+08 9babcc5f-fa86-4544-b1e1-ef6fe80c1a38 2 f
+349 To 初始温度To Variable \N 3 999999 -999999 ℃ t 2019-06-05 11:11:47.027+08 2019-07-09 09:50:05.531+08 9babcc5f-fa86-4544-b1e1-ef6fe80c1a38 2 f
+363 Fo 频率初值Fo Variable \N \N 0 5 10000000 -10000000 HZ t 2019-08-01 15:03:13.664+08 2019-08-01 15:03:13.664+08 d157f3b3-41c1-4e8b-8141-76c56d56b8ed 2 f
+364 K 模量系数K Variable \N \N 1 10 10000000 -10000000 t 2019-08-01 15:04:29.041+08 2019-08-01 15:04:29.041+08 d157f3b3-41c1-4e8b-8141-76c56d56b8ed 2 f
+365 Fo Fo基准读数 Variable \N 0 3 10000 -10000 \N t 2019-08-27 09:57:07.819+08 2019-08-27 09:57:25.438+08 be45ef93-4eef-44e3-a4af-c6499d52929b 2 f
+366 To To温度初值 Variable \N \N 0 3 100 -100 ℃ t 2019-08-27 09:58:14.158+08 2019-08-27 09:58:14.158+08 be45ef93-4eef-44e3-a4af-c6499d52929b 2 f
+367 K1 K1一次项系数 Variable \N \N 1 16 999999999999999999999999 -9999999999999999999999 t 2019-08-27 09:59:59.988+08 2019-08-27 09:59:59.988+08 be45ef93-4eef-44e3-a4af-c6499d52929b 2 f
+368 K2 K2二次项系数 Variable \N \N 0 16 99999999999999999999 -999999999999999999999999 t 2019-08-27 10:00:37.751+08 2019-08-27 10:00:37.751+08 be45ef93-4eef-44e3-a4af-c6499d52929b 2 f
+369 K3 K3三次项系数 Variable \N \N 0 16 9999999999999999999 -999999999999999999 t 2019-08-27 10:01:25.258+08 2019-08-27 10:01:25.258+08 be45ef93-4eef-44e3-a4af-c6499d52929b 2 f
+370 Kt Kt温补系数 Variable \N \N 0 16 99999999999999999999 -99999999999999999999 t 2019-08-27 10:02:12.56+08 2019-08-27 10:02:12.56+08 be45ef93-4eef-44e3-a4af-c6499d52929b 2 f
+376 E 弹模 Variable \N \N \N 8 999999999 -999999999 \N t 2019-08-28 10:29:59.911+08 2019-08-28 10:29:59.911+08 abc52bef-269a-4be1-82f0-5d3626a3ca44 2 f
+383 A 系数A Variable \N \N 0.0014051 8 100000 -100000 \N t 2019-08-28 15:14:03.613+08 2019-08-28 15:14:03.613+08 d3c03d95-0625-44e5-a097-d371daa46150 2 f
+384 B 系数B Variable \N \N 0.0002369 8 100000 -100000 t 2019-08-28 15:14:55.169+08 2019-08-28 15:14:55.169+08 d3c03d95-0625-44e5-a097-d371daa46150 2 f
+385 C 系数c Variable \N 0.0000001019 12 100000 -100000 t 2019-08-28 15:16:34.511+08 2021-01-15 13:07:33.896+08 d3c03d95-0625-44e5-a097-d371daa46150 2 f
+389 A 系数A Variable \N \N 0.0014051 8 100000 -100000 \N t 2019-08-28 16:13:41.149+08 2019-08-28 16:13:41.149+08 5daeb319-4f65-4e98-b0d6-06dd3eb2575d 2 f
+390 B 系数B Variable \N \N 0.0002369 8 100000 -100000 t 2019-08-28 16:15:00.556+08 2019-08-28 16:15:00.556+08 5daeb319-4f65-4e98-b0d6-06dd3eb2575d 2 f
+375 T0 T0初值 Variable \N 0 2 9999999999 -999999999 t 2019-08-28 10:28:30.352+08 2019-08-28 16:18:14.69+08 d3c03d95-0625-44e5-a097-d371daa46150 2 f
+377 G 系数 Variable \N 0 8 999999999999 -99999999999999 t 2019-08-28 10:31:16.152+08 2019-08-28 16:18:59.444+08 abc52bef-269a-4be1-82f0-5d3626a3ca44 2 f
+392 C 系数C Variable \N \N 0.0002369 12 100000 -100000 \N t 2019-09-19 09:43:22.522+08 2019-09-19 09:43:22.522+08 4cf90a17-8779-4902-9e06-2c4c75e37fec 2 f
+393 B 系数B Variable \N \N 0.0002369 8 100000 -100000 t 2019-09-19 09:44:49.048+08 2019-09-19 09:44:49.048+08 4cf90a17-8779-4902-9e06-2c4c75e37fec 2 f
+394 A 系数A Variable \N \N 0.0014051 8 100000 -100000 t 2019-09-19 09:49:19.532+08 2019-09-19 09:49:19.532+08 4cf90a17-8779-4902-9e06-2c4c75e37fec 2 f
+395 Y2 混凝土结构的热膨胀系数Y2 Variable \N \N 0 8 999999999999 -99999999999999 \N t 2019-09-19 10:20:19.798+08 2019-09-19 10:20:19.798+08 2d30190b-bf0a-49ee-9c8c-ce67465de1bb 2 f
+396 R0 R0初值 Variable \N \N 0 2 999999999999 -999999999999 t 2019-09-19 10:21:14.755+08 2019-09-19 10:21:14.755+08 2d30190b-bf0a-49ee-9c8c-ce67465de1bb 2 f
+397 G 系数 Variable \N \N 0 8 999999999999 -99999999999999 t 2019-09-19 10:24:02.966+08 2019-09-19 10:24:02.966+08 2d30190b-bf0a-49ee-9c8c-ce67465de1bb 2 f
+398 Y1 振弦材料的膨胀系数Y1 Variable \N \N 0 8 999999999999 -99999999999 t 2019-09-19 10:25:34.621+08 2019-09-19 10:25:34.621+08 2d30190b-bf0a-49ee-9c8c-ce67465de1bb 2 f
+399 T0 T0初值 Variable \N \N 0 2 9999999999 -9999999999 t 2019-09-19 10:26:50.149+08 2019-09-19 10:26:50.149+08 2d30190b-bf0a-49ee-9c8c-ce67465de1bb 2 f
+400 C 系数C Variable \N \N 0.0000001019 12 100000 -100000 t 2019-09-19 10:27:48.373+08 2019-09-19 10:27:48.373+08 2d30190b-bf0a-49ee-9c8c-ce67465de1bb 2 f
+401 B 系数B Variable \N \N 0.0002369 8 100000 -100000 t 2019-09-19 10:28:43.69+08 2019-09-19 10:28:43.69+08 2d30190b-bf0a-49ee-9c8c-ce67465de1bb 2 f
+402 A 系数A Variable \N \N 0.0014051 8 100000 -100000 t 2019-09-19 10:31:39.678+08 2019-09-19 10:31:39.678+08 2d30190b-bf0a-49ee-9c8c-ce67465de1bb 2 f
+403 C0 平均修正系数 Variable \N \N \N 8 999999999999 -999999999999 t 2019-09-19 10:32:47.193+08 2019-09-19 10:32:47.193+08 2d30190b-bf0a-49ee-9c8c-ce67465de1bb 2 f
+404 E 弹模 Variable \N \N \N 8 999999999 -999999999 t 2019-09-19 10:33:45.28+08 2019-09-19 10:33:45.28+08 2d30190b-bf0a-49ee-9c8c-ce67465de1bb 2 f
+405 C0 平均修正系数 Variable \N \N 0 8 99999999 -999999999 \N t 2019-09-19 10:36:11.496+08 2019-09-19 10:36:11.496+08 04d11a24-68c7-4a80-bfc1-ffb924f24296 2 f
+406 T0 T0初值 Variable \N \N 0 2 9999999999 -999999999 t 2019-09-19 10:37:02.6+08 2019-09-19 10:37:02.6+08 04d11a24-68c7-4a80-bfc1-ffb924f24296 2 f
+407 R0 R0初值 Variable \N \N 0 2 9999999 -9999999 t 2019-09-19 10:41:02.246+08 2019-09-19 10:41:02.246+08 04d11a24-68c7-4a80-bfc1-ffb924f24296 2 f
+408 G 系数 Variable \N \N 0 8 999999999 -999999999 t 2019-09-19 10:41:49.257+08 2019-09-19 10:41:49.257+08 04d11a24-68c7-4a80-bfc1-ffb924f24296 2 f
+409 C 系数c Variable \N \N 0.0000001019 12 100000 -100000 t 2019-09-19 10:42:54.991+08 2019-09-19 10:42:54.991+08 04d11a24-68c7-4a80-bfc1-ffb924f24296 2 f
+410 B 系数B Variable \N \N 0.0002369 8 100000 -100000 t 2019-09-19 10:43:43.619+08 2019-09-19 10:43:43.619+08 04d11a24-68c7-4a80-bfc1-ffb924f24296 2 f
+411 A 系数A Variable \N \N 0.0014051 8 100000 -100000 t 2019-09-19 10:45:33.922+08 2019-09-19 10:45:33.922+08 04d11a24-68c7-4a80-bfc1-ffb924f24296 2 f
+412 E 弹模系数 Variable \N \N \N 8 99999999 -99999999 t 2019-09-19 10:46:27.401+08 2019-09-19 10:46:27.401+08 04d11a24-68c7-4a80-bfc1-ffb924f24296 2 f
+413 G 直线系数 Variable \N \N 0.018151 8 9999999999999 -999999999999 mm t 2019-09-20 15:48:22.002+08 2019-09-20 15:48:22.002+08 86dd2c3f-ab82-4e7a-8766-5f8af99c2de9 2 f
+414 K 温度系数 Variable \N \N 0.015882 8 999999999 -9999999999 t 2019-09-20 15:50:03.555+08 2019-09-20 15:50:03.555+08 86dd2c3f-ab82-4e7a-8766-5f8af99c2de9 2 f
+416 R0 R0初值 Variable \N \N 0 4 999999999999 -999999999999 t 2019-09-20 15:59:05.613+08 2019-09-20 15:59:05.613+08 86dd2c3f-ab82-4e7a-8766-5f8af99c2de9 2 f
+415 T0 T0初值 Variable \N 0 4 9999999999 -9999999999 t 2019-09-20 15:53:04.739+08 2019-09-20 15:59:14.224+08 86dd2c3f-ab82-4e7a-8766-5f8af99c2de9 2 f
+417 A 系数A Variable \N \N 0.0014051 8 100000 -100000 \N t 2019-09-23 14:42:28.266+08 2019-09-23 14:42:28.266+08 86dd2c3f-ab82-4e7a-8766-5f8af99c2de9 2 f
+418 B 系数B Variable \N \N 0.0002369 8 100000 -100000 t 2019-09-23 14:46:05.603+08 2019-09-23 14:46:05.603+08 86dd2c3f-ab82-4e7a-8766-5f8af99c2de9 2 f
+419 C 系数C Variable \N \N 0.0002369 12 100000 -100000 t 2019-09-23 14:47:00.414+08 2019-09-23 14:47:00.414+08 86dd2c3f-ab82-4e7a-8766-5f8af99c2de9 2 f
+422 K1 系数K1 Variable \N \N 0 2 100000000000000000000 -100000000000000000000 t 2019-09-25 15:30:46.595+08 2019-09-25 15:30:46.595+08 dc0acbb1-de4d-4fd3-af87-c61d4b7bdf52 2 f
+421 X0 X0初值 Variable \N 0 2 100000000000000000000 -100000000000000000000 t 2019-09-25 15:28:41.287+08 2019-09-25 15:29:41.475+08 dc0acbb1-de4d-4fd3-af87-c61d4b7bdf52 2 f
+420 K 系数K Variable \N 1 2 100000000000000 -100000000000000 \N t 2019-09-25 15:27:48.622+08 2019-09-25 15:29:47.999+08 dc0acbb1-de4d-4fd3-af87-c61d4b7bdf52 2 f
+423 Y0 初值Y0 Variable \N \N 0 2 1000000000000000 -1000000000000000 t 2019-09-25 15:31:49.435+08 2019-09-25 15:31:49.435+08 dc0acbb1-de4d-4fd3-af87-c61d4b7bdf52 2 f
+424 K 系数K Variable \N \N 1 2 10000000000000000000 -10000000000000000000 \N t 2019-09-25 15:40:22.982+08 2019-09-25 15:40:22.982+08 5773316d-3a54-4974-86d6-eff99007cf04 2 f
+425 K 系数K Variable \N \N 1 2 1000000000 -10000000000 \N t 2019-09-25 15:44:06.952+08 2019-09-25 15:44:06.952+08 f4e36088-8943-4147-b898-324dafb20220 2 f
+374 Fo Fo初值 Variable \N 0 2 9999999 -9999999 t 2019-08-28 10:27:43.21+08 2021-01-15 13:09:30.049+08 d3c03d95-0625-44e5-a097-d371daa46150 2 f
+391 C 系数C Variable \N 0.0000001019 12 100000 -100000 t 2019-08-28 16:15:51.792+08 2021-01-15 11:48:22.763+08 5daeb319-4f65-4e98-b0d6-06dd3eb2575d 2 f
+372 G 系数G Variable \N 0 8 999999999 -999999999 t 2019-08-28 10:24:25.218+08 2021-01-15 13:12:22.398+08 d3c03d95-0625-44e5-a097-d371daa46150 2 f
+373 E 系数E Variable \N 0 8 99999999 -999999999 t 2019-08-28 10:25:53.731+08 2021-01-15 13:12:08.662+08 d3c03d95-0625-44e5-a097-d371daa46150 2 f
+379 Fo Fo初值 Variable \N 0 2 999999999999 -999999999999 t 2019-08-28 10:32:38.91+08 2021-01-15 13:13:56.168+08 abc52bef-269a-4be1-82f0-5d3626a3ca44 2 f
+427 K1 系数K1 Variable \N \N 0 2 100000000000 -1000000000000 t 2019-09-25 15:45:27.401+08 2019-09-25 15:45:27.401+08 f4e36088-8943-4147-b898-324dafb20220 2 f
+426 X0 初值X0 Variable \N 0 2 1000000000000 -1000000000000 t 2019-09-25 15:44:36.807+08 2019-09-25 15:45:36.545+08 f4e36088-8943-4147-b898-324dafb20220 2 f
+428 Y0 初值Y0 Variable \N \N 0 2 10000000000 -100000000000 t 2019-09-25 15:46:23.361+08 2019-09-25 15:46:23.361+08 f4e36088-8943-4147-b898-324dafb20220 2 f
+429 Ktm Ktm采集仪补偿系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 \N t 2019-09-26 15:27:46.755+08 2019-09-26 15:27:46.755+08 eb23e709-ad84-4257-a0a7-e7bc44e81f29 2 f
+430 Des 是否判断采集(Des;1:是,0:否) Variable \N \N 0 \N 1 0 t 2019-09-26 15:28:45.959+08 2019-09-26 15:28:45.959+08 eb23e709-ad84-4257-a0a7-e7bc44e81f29 1 f
+431 reg reg理论电阻值(Ω) Variable \N \N 0 3 10000 -10000 Ω t 2019-09-26 15:30:02.511+08 2019-09-26 15:30:02.511+08 eb23e709-ad84-4257-a0a7-e7bc44e81f29 2 f
+432 Tc0 Tc0采集仪温度初值 Variable \N \N 0 3 100 -100 ℃ t 2019-09-26 15:30:42.832+08 2019-09-26 15:30:42.832+08 eb23e709-ad84-4257-a0a7-e7bc44e81f29 2 f
+433 Deg 是否消磁(Deg;1:消磁,0:不消磁) Variable \N \N 1 \N 1 0 t 2019-09-26 15:31:45.278+08 2019-09-26 15:31:45.278+08 eb23e709-ad84-4257-a0a7-e7bc44e81f29 1 f
+434 vol vol激励电压(V) Variable \N \N 0 6 10000 -10000 V t 2019-09-26 15:32:36.22+08 2019-09-26 15:32:36.22+08 eb23e709-ad84-4257-a0a7-e7bc44e81f29 2 f
+435 Kt Kt温补系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2019-09-26 15:34:41.941+08 2019-09-26 15:34:41.941+08 eb23e709-ad84-4257-a0a7-e7bc44e81f29 2 f
+436 T0 T0温度初值 Variable \N \N 0 3 100 -100 ℃ t 2019-09-26 15:35:26.002+08 2019-09-26 15:35:26.002+08 eb23e709-ad84-4257-a0a7-e7bc44e81f29 2 f
+437 C0 C0线性拟合常数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2019-09-26 15:37:24.182+08 2019-09-26 15:37:24.182+08 eb23e709-ad84-4257-a0a7-e7bc44e81f29 2 f
+438 C2 C2二次项拟合系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2019-09-26 15:38:02.459+08 2019-09-26 15:38:02.459+08 eb23e709-ad84-4257-a0a7-e7bc44e81f29 2 f
+439 C1 C1线性拟合系数 Variable \N \N 0 16 99999999999999999999999999999999 -99999999999999999999999999999999 t 2019-09-26 15:38:45.472+08 2019-09-26 15:38:45.472+08 eb23e709-ad84-4257-a0a7-e7bc44e81f29 2 f
+440 F0 F0零点受力值 Variable \N \N 0 3 1000000000 -1000000000 KN t 2019-09-26 15:40:01.502+08 2019-09-26 15:40:01.502+08 eb23e709-ad84-4257-a0a7-e7bc44e81f29 2 f
+441 V0 V0零点积分电压值 Variable \N \N 0 3 100000 -100000 V t 2019-09-26 15:41:10.91+08 2019-09-26 15:41:10.91+08 eb23e709-ad84-4257-a0a7-e7bc44e81f29 2 f
+442 Kt Kt温补系数 Variable \N \N 0 16 1000000000000 -1000000000000 \N t 2019-09-29 16:58:25.682+08 2019-09-29 16:58:25.682+08 5b391db9-96c6-4ebe-88f0-75aea18bd5df 2 f
+443 Po Po初值 Variable \N \N 0 5 100000000 -100000000 t 2019-09-29 16:59:15.111+08 2019-09-29 16:59:15.111+08 5b391db9-96c6-4ebe-88f0-75aea18bd5df 2 f
+444 Fo Fo基准读数 Variable \N \N 0 3 1000000 -100000 t 2019-09-29 17:12:21.344+08 2019-09-29 17:12:21.344+08 5b391db9-96c6-4ebe-88f0-75aea18bd5df 2 f
+445 K1 K1一次项系数 Variable \N \N 1 16 1000000000000 -100000000000 t 2019-09-29 17:14:11.437+08 2019-09-29 17:14:11.437+08 5b391db9-96c6-4ebe-88f0-75aea18bd5df 2 f
+446 To To温度初值 Variable \N \N \N 3 100 -100 t 2019-09-29 17:15:20.807+08 2019-09-29 17:15:20.807+08 5b391db9-96c6-4ebe-88f0-75aea18bd5df 2 f
+447 K 模数系数 Variable \N \N 1 2 999999999999999 -999999999999999 \N t 2019-10-14 09:37:51.718+08 2019-10-14 09:37:51.718+08 51618f61-48a1-4680-9485-1b5f353ee3f7 2 f
+448 F0 初值 Variable \N \N 2 99999999999999 -99999999999999 t 2019-10-14 09:39:35.905+08 2019-10-14 09:39:35.905+08 51618f61-48a1-4680-9485-1b5f353ee3f7 2 f
+449 Kt 温补系数 Variable \N \N \N 2 99999999999 -99999999999 t 2019-10-14 09:40:30.135+08 2019-10-14 09:40:30.135+08 51618f61-48a1-4680-9485-1b5f353ee3f7 2 f
+450 T0 初值 Variable \N \N \N 2 999999999999 -999999999999 t 2019-10-14 09:41:02.835+08 2019-10-14 09:41:02.835+08 51618f61-48a1-4680-9485-1b5f353ee3f7 2 f
+451 To To温度初值 Variable \N \N 0 3 100 -100 ℃ t 2019-11-11 14:55:16.299+08 2019-11-11 14:55:16.299+08 e217b93e-d22e-40ec-a8ca-5fccb0db6819 2 f
+452 K1 K1一次项系数 Variable \N 0 16 99999999999999999 -99999999999999999 t 2019-11-11 14:56:23.637+08 2019-11-11 14:56:35.448+08 e217b93e-d22e-40ec-a8ca-5fccb0db6819 2 f
+453 Kt Kt温补系数 Variable \N \N 0 16 99999999999999999 -99999999999999999 t 2019-11-11 14:57:33.45+08 2019-11-11 14:57:33.45+08 e217b93e-d22e-40ec-a8ca-5fccb0db6819 2 f
+454 K2 K2二次项系数 Variable \N \N 0 16 999999999999999999 -999999999999999999 t 2019-11-11 14:59:05.501+08 2019-11-11 14:59:05.501+08 e217b93e-d22e-40ec-a8ca-5fccb0db6819 2 f
+455 Fo Fo基准读数 Variable \N \N 0 3 100000 -100000 t 2019-11-11 14:59:55.354+08 2019-11-11 14:59:55.354+08 e217b93e-d22e-40ec-a8ca-5fccb0db6819 2 f
+456 K3 K3三次项系数 Variable \N \N 0 16 99999999999999999 -9999999999999999 t 2019-11-11 15:00:45.338+08 2019-11-11 15:00:45.338+08 e217b93e-d22e-40ec-a8ca-5fccb0db6819 2 f
+457 K 系数 Variable \N \N 0 2 10000000000000 -1000000000000 \N t 2019-11-15 13:24:22.617+08 2019-11-15 13:24:22.617+08 9091e551-9ef7-4867-9cad-ea5e8c25f39b 2 f
+458 F0 频率初值 Variable \N \N 0 2 10000000000000000000000 -10000000000000000000000 t 2019-11-15 13:25:32.029+08 2019-11-15 13:25:32.029+08 9091e551-9ef7-4867-9cad-ea5e8c25f39b 2 f
+459 Kt 温补系数 Variable \N \N 0 2 100000000000000 -100000000000000 t 2019-11-15 13:26:07.662+08 2019-11-15 13:26:07.662+08 9091e551-9ef7-4867-9cad-ea5e8c25f39b 2 f
+460 T0 温度初值 Variable \N 0 2 100000000000000000 -1000000000000000000 t 2019-11-15 13:26:47.088+08 2019-11-15 15:55:11.758+08 9091e551-9ef7-4867-9cad-ea5e8c25f39b 2 f
+461 A 模量系数 Variable \N \N 1 16 99999999999999 -99999999999999 \N t 2019-11-20 09:51:37.225+08 2019-11-20 09:51:37.225+08 9784b5cb-8a88-4c6a-86c8-51afd961b78d 2 f
+463 Fo 初始频率 Variable \N \N 0 8 99999999999999 -99999999999999 Hz t 2019-11-20 09:55:33.628+08 2019-11-20 09:55:33.628+08 9784b5cb-8a88-4c6a-86c8-51afd961b78d 2 f
+462 B 模量系数 Variable \N 1 16 99999999999999 -99999999999999 t 2019-11-20 09:54:24.137+08 2019-11-20 09:56:06.277+08 9784b5cb-8a88-4c6a-86c8-51afd961b78d 2 f
+464 T0 温度初值 Variable \N 0 2 1000000000000000000000000 -1000000000000000000000000 \N t 2019-11-21 13:05:24.056+08 2019-11-21 13:05:37.886+08 5997f9c1-c604-4035-ade3-6ed5b18559bb 2 f
+465 Kt 温补系数 Variable \N \N 0 2 1000000000000000000000 -1000000000000000000000 t 2019-11-21 13:06:21.794+08 2019-11-21 13:06:21.794+08 5997f9c1-c604-4035-ade3-6ed5b18559bb 2 f
+466 F0 频率初值 Variable \N \N 0 2 100000000000000000000000 -100000000000000000000000 t 2019-11-21 13:06:56.987+08 2019-11-21 13:06:56.987+08 5997f9c1-c604-4035-ade3-6ed5b18559bb 2 f
+563 v2_x 初值1 Variable \N 0 6 9999 -9999 ° t 2020-11-11 15:40:20.216+08 2020-11-17 11:01:07.75+08 c5378a9c-9406-4583-9ae8-5fddb5a5d65e 2 f
+564 v2_y 初值2 Variable \N 0 6 9999 -9999 ° t 2020-11-11 15:40:48.969+08 2020-11-17 11:01:15.733+08 c5378a9c-9406-4583-9ae8-5fddb5a5d65e 2 f
+562 cx_thresholdx 位移阈值 Variable \N 0 6 9999 -9999 mm t 2020-11-11 15:39:10.412+08 2020-11-17 11:31:14.787+08 bdb43886-e71d-4135-ad42-6e296635b02e 2 f
+467 K 系数 Variable \N \N 0 2 9999999999999999999999999999 -9999999999999999999999999999 t 2019-11-21 13:07:40.41+08 2019-11-21 13:07:40.41+08 5997f9c1-c604-4035-ade3-6ed5b18559bb 2 f
+468 K 系数 Variable \N \N 0 6 1000000000000 -1000000000000 \N t 2020-01-10 17:00:30.812+08 2020-01-10 17:00:30.812+08 93c9ce42-f58d-4b35-83f5-df5f1c06411b 2 f
+469 X0 初值X0 Variable \N \N \N 6 1000000000000 -1000000000000 t 2020-01-10 17:02:15.034+08 2020-01-10 17:02:15.034+08 93c9ce42-f58d-4b35-83f5-df5f1c06411b 2 f
+470 K 系数K Variable \N \N 1 2 1000000000000 -100000000000 \N t 2020-01-13 10:33:57.477+08 2020-01-13 10:33:57.477+08 a999457c-b28e-4168-9d60-0db37c72ad23 2 f
+471 X0 X0初值 Variable \N \N 0 2 100000000000 -100000000000 t 2020-01-13 10:36:32.504+08 2020-01-13 10:36:32.504+08 a999457c-b28e-4168-9d60-0db37c72ad23 2 f
+472 K 系数K Variable \N \N 1 2 1000000000000 -1000000000000 \N t 2020-01-13 10:42:29.981+08 2020-01-13 10:42:29.981+08 c7cc1565-33ee-46fb-ac94-a93f093ddd73 2 f
+473 X0 X0初值 Variable \N \N 0 2 100000000000 -100000000000 t 2020-01-13 10:43:39.733+08 2020-01-13 10:43:39.733+08 c7cc1565-33ee-46fb-ac94-a93f093ddd73 2 f
+474 K 系数K Variable \N \N 1 2 1000000000 -10000000000 \N t 2020-01-13 10:50:08.166+08 2020-01-13 10:50:08.166+08 0e9dfb4b-a83b-4970-91c3-57d3b0ce9ef6 2 f
+475 K1 系数K1 Variable \N \N 0 2 100000000000 -1000000000000 t 2020-01-13 10:51:21.24+08 2020-01-13 10:51:21.24+08 0e9dfb4b-a83b-4970-91c3-57d3b0ce9ef6 2 f
+476 X0 初值X0 Variable \N \N 0 2 1000000000000 -1000000000000 t 2020-01-13 10:52:20.236+08 2020-01-13 10:52:20.236+08 0e9dfb4b-a83b-4970-91c3-57d3b0ce9ef6 2 f
+477 Y0 初值Y0 Variable \N \N 0 2 10000000000 -100000000000 t 2020-01-13 10:53:02.914+08 2020-01-13 10:53:02.914+08 0e9dfb4b-a83b-4970-91c3-57d3b0ce9ef6 2 f
+479 X 温度 Variable \N \N \N 2 99999999 -99999999 \N t 2020-01-14 15:22:31.462+08 2020-01-14 15:22:31.462+08 5b473f0a-e785-42b1-bbeb-5e3530c41422 2 f
+510 dataArea 数据样本区间 Variable \N 0:144.8|3:279.7|6:365.9|9:531.5|12:663.2|15:874.9 0 注意格式保持一致 t 2020-01-14 16:35:45.322+08 2020-01-15 10:53:19.374+08 3207c7a3-db9b-40cf-ab1b-6949a3122239 5 f
+511 K 系数K Variable \N 1 2 1000000000 -1000000000 \N t 2020-01-15 16:50:34.138+08 2020-01-15 16:50:47.669+08 611dc5c5-fa03-458b-bd65-3e24c593855d 2 f
+512 Kt 温补系数Kt Variable \N 0 16 1000000 -1000000 \N t 2020-04-08 16:14:35.174+08 2020-04-08 16:14:46.35+08 9024228a-4e22-47cd-b2b7-2c579649330a 2 f
+513 Fo 初始频率Fo Variable \N \N 0 5 100000 -100000 HZ t 2020-04-08 16:15:40.464+08 2020-04-08 16:15:40.464+08 9024228a-4e22-47cd-b2b7-2c579649330a 2 f
+514 K 模量系数K Variable \N \N 1 16 1000000000 -1000000000 t 2020-04-08 16:16:24.283+08 2020-04-08 16:16:24.283+08 9024228a-4e22-47cd-b2b7-2c579649330a 2 f
+515 To 初始温度To Variable \N \N 0 3 100 -100 ℃ t 2020-04-08 16:17:14.037+08 2020-04-08 16:17:14.037+08 9024228a-4e22-47cd-b2b7-2c579649330a 2 f
+516 Kt 温补系数Kt Variable \N \N 0 16 1000000000000 -1000000000000 \N t 2020-04-08 16:20:05.391+08 2020-04-08 16:20:05.391+08 1af7b597-73ac-4002-b7f9-885ba65dc41d 2 f
+517 Fo 初始频率Fo Variable \N \N 0 5 100000 -100000 HZ t 2020-04-08 16:20:53.302+08 2020-04-08 16:20:53.302+08 1af7b597-73ac-4002-b7f9-885ba65dc41d 2 f
+518 K 模量系数K Variable \N \N 1 16 1000000000 -1000000000 t 2020-04-08 16:21:31.08+08 2020-04-08 16:21:31.08+08 1af7b597-73ac-4002-b7f9-885ba65dc41d 2 f
+519 To 初始温度To Variable \N \N 0 3 100 -100 ℃ t 2020-04-08 16:22:10.181+08 2020-04-08 16:22:10.181+08 1af7b597-73ac-4002-b7f9-885ba65dc41d 2 f
+520 Kt 温补系数Kt Variable \N \N 0 16 1000000 -1000000 \N t 2020-04-08 16:26:03.209+08 2020-04-08 16:26:03.209+08 63e815fd-ec3a-490b-8734-eb91e37ba781 2 f
+521 Fo 初始频率Fo Variable \N \N 0 5 100000 -100000 HZ t 2020-04-08 16:26:50.965+08 2020-04-08 16:26:50.965+08 63e815fd-ec3a-490b-8734-eb91e37ba781 2 f
+522 K 模量系数K Variable \N \N 1 16 1000000000 -1000000000 t 2020-04-08 16:27:37.82+08 2020-04-08 16:27:37.82+08 63e815fd-ec3a-490b-8734-eb91e37ba781 2 f
+523 To 初始温度To Variable \N \N 0 5 100 -100 ℃ t 2020-04-08 16:28:13.577+08 2020-04-08 16:28:13.577+08 63e815fd-ec3a-490b-8734-eb91e37ba781 2 f
+524 G 系数 Variable \N 1 16 999999999999999999 -999999999999999999 \N t 2020-05-13 11:39:19.538+08 2020-05-13 11:39:40.613+08 8102b4e7-9f04-43f0-a644-5b89c281f52f 2 f
+525 R0 初值 Variable \N \N 0 2 9999999999999999999999 -9999999999999999999999 t 2020-05-13 11:40:57.195+08 2020-05-13 11:40:57.195+08 8102b4e7-9f04-43f0-a644-5b89c281f52f 2 f
+543 B 系数B Variable \N \N 1 16 9999999999999999999999 -999999999999999999999 t 2020-06-18 16:26:35.676+08 2020-06-18 16:26:35.676+08 0f44be27-ca09-4e9c-bd86-10d82e752723 2 f
+552 K 模量系数K Variable \N \N 1 19 9999999999999999 -99999999999999 t 2020-08-03 10:09:20.047+08 2020-08-03 10:09:20.047+08 9525b166-34e1-4182-95a9-644a8f98a2d8 2 f
+527 K 系数K Variable \N 1 16 999999999999999999999 -999999999999999999999 t 2020-06-08 11:10:49.368+08 2020-06-23 11:00:22.324+08 9f84b4f7-7860-47a6-9dc9-f066fb873dff 2 f
+553 B 位移计计算修正值 Variable \N \N 0 16 9999999999999999999 -99999999999999999999999 mm t 2020-09-14 10:48:09.15+08 2020-09-14 10:48:09.15+08 9babcc5f-fa86-4544-b1e1-ef6fe80c1a38 2 f
+532 K 系数 Variable \N \N 1 2 99999999999999999 -999999999999999999 \N t 2020-06-12 09:48:01.394+08 2020-06-12 09:48:01.394+08 1cb1bdc4-03eb-47f6-bde4-992f0c899269 2 f
+533 F0 频率初值 Variable \N \N 0 2 9999999999999999999 -999999999999999999999 HZ t 2020-06-12 09:48:54.121+08 2020-06-12 09:48:54.121+08 1cb1bdc4-03eb-47f6-bde4-992f0c899269 2 f
+534 Aj 单根钢筋截面面积 Variable \N \N 1 2 99999999999999999 -9999999999999999999 mm² t 2020-06-15 10:07:52.018+08 2020-06-15 10:07:52.018+08 1cb1bdc4-03eb-47f6-bde4-992f0c899269 2 f
+535 Kt 温度补偿系数 Variable \N \N 0 16 1000000000000 -1000000000000 \N t 2020-06-16 13:52:09.927+08 2020-06-16 13:52:09.927+08 c92fb572-f818-488a-a012-e615d38abbf2 2 f
+536 K 模量系数 Variable \N \N 1 16 10000000000 -10000000000 t 2020-06-16 13:53:22.763+08 2020-06-16 13:53:22.763+08 c92fb572-f818-488a-a012-e615d38abbf2 2 f
+537 Fo 初始频率 Variable \N \N 0 5 1000000 -1000000 HZ t 2020-06-16 13:54:00.178+08 2020-06-16 13:54:00.178+08 c92fb572-f818-488a-a012-e615d38abbf2 2 f
+538 To 初始温度 Variable \N \N 0 3 100 -100 t 2020-06-16 13:54:29.289+08 2020-06-16 13:54:29.289+08 c92fb572-f818-488a-a012-e615d38abbf2 2 f
+554 B 位移计算修正值 Variable \N \N 0 12 999999999999999 -999999999999999 mm t 2020-09-15 09:24:51.657+08 2020-09-15 09:24:51.657+08 e74b9abf-dce9-435c-b500-e9060e048fb9 2 f
+542 A 常数项A Variable \N 0 16 9999999999999999999 -999999999999999999999 \N t 2020-06-18 16:25:27.481+08 2020-06-18 16:25:48.399+08 0f44be27-ca09-4e9c-bd86-10d82e752723 2 f
+526 Fo 频率初值Fo Variable \N 0 5 999999999999999999 -999999999999999999 HZ t 2020-06-08 11:10:11.36+08 2020-06-23 11:00:33.562+08 9f84b4f7-7860-47a6-9dc9-f066fb873dff 2 f
+545 F0 频率初值F0 Variable \N 0 2 9999999999999999 -9999999999999999999 HZ t 2020-06-29 09:53:29.827+08 2020-06-30 10:46:55.104+08 490563df-dd29-4c58-9546-7a8716222d00 2 f
+544 T0 温度初值T0 Variable \N 0 3 99999999999999 -9999999999999999999 ℃ t 2020-06-29 09:51:01.339+08 2020-06-30 10:47:19.031+08 490563df-dd29-4c58-9546-7a8716222d00 2 f
+546 K 模量系数K Variable \N 1 16 999999999999999999999 -99999999999999999999999 t 2020-06-29 09:54:06.074+08 2020-06-30 10:47:35.582+08 490563df-dd29-4c58-9546-7a8716222d00 2 f
+547 Kt 温补系数Kt Variable \N 0 16 9999999999999999999 -999999999999999999999 t 2020-06-29 09:54:59.942+08 2020-06-30 10:47:47.895+08 490563df-dd29-4c58-9546-7a8716222d00 2 f
+548 Aj 钢筋截面积Aj Variable \N \N 1 2 99999999999999999999999 -9999999999999999999999999 mm² t 2020-07-01 09:05:43.656+08 2020-07-01 09:05:43.656+08 9f84b4f7-7860-47a6-9dc9-f066fb873dff 2 f
+549 Fo 初始频率Fo Variable \N \N 0 3 100000000 -100000000 \N t 2020-08-03 09:58:16.53+08 2020-08-03 09:58:16.53+08 9525b166-34e1-4182-95a9-644a8f98a2d8 2 f
+550 To 初始温度To Variable \N \N 0 3 9999999999999 -99999999999999 t 2020-08-03 10:07:43.042+08 2020-08-03 10:07:43.042+08 9525b166-34e1-4182-95a9-644a8f98a2d8 2 f
+551 Kt 温补系数Kt Variable \N \N 1 16 9999999999999999999 -999999999999999999 t 2020-08-03 10:08:24.183+08 2020-08-03 10:08:24.183+08 9525b166-34e1-4182-95a9-644a8f98a2d8 2 f
+555 B 位移计算修正值 Variable \N \N 0 12 9999999999999999 -99999999999999999 mm t 2020-09-15 09:26:17+08 2020-09-15 09:26:17+08 bd266924-534e-4f2b-84a9-5e7b7c8f61de 2 f
+556 A 系数A Variable \N \N 1 16 9999999999999999999999999 -99999999999999999999999 \N t 2020-10-13 16:57:59.169+08 2020-10-13 16:57:59.169+08 55b9e150-f78d-4cbd-a353-f99c4df93cb6 2 f
+557 Fo 初始频率Fo Variable \N \N 0 3 999999999999999999 -999999999999999999 HZ t 2020-10-13 16:59:34.425+08 2020-10-13 16:59:34.425+08 55b9e150-f78d-4cbd-a353-f99c4df93cb6 2 f
+558 B 系数B Variable \N \N 1 16 999999999999999999999 -999999999999999999999 t 2020-10-13 17:00:22.088+08 2020-10-13 17:00:22.088+08 55b9e150-f78d-4cbd-a353-f99c4df93cb6 2 f
+559 cx_v1 x方向角度初值 Variable \N 0 6 9999 -9999 ° t 2020-11-11 15:35:01.543+08 2020-11-17 11:15:53.256+08 bdb43886-e71d-4135-ad42-6e296635b02e 2 f
+561 cx_l 测斜杆间距离长 Variable \N 0 6 9999 -9999 mm t 2020-11-11 15:37:02.924+08 2020-11-17 11:15:58.627+08 bdb43886-e71d-4135-ad42-6e296635b02e 2 f
+568 f0_wl 初始频率 Variable \N 0 6 9999 -9999 Hz t 2020-11-11 15:44:14.907+08 2020-11-17 10:56:12.091+08 d71a2a8d-5ad2-4cbe-b8d0-3edf77a1037a 2 f
+569 h_wl 初始水位值 Variable \N 0 6 9999 -9999 m t 2020-11-11 15:44:34.877+08 2020-11-17 10:56:19.486+08 d71a2a8d-5ad2-4cbe-b8d0-3edf77a1037a 2 f
+593 Fo 初始频率Fo Variable \N \N 0 16 999999999999999999999999999 -99999999999999999999999999999 HZ t 2020-11-24 11:55:45.039+08 2020-11-24 11:55:45.039+08 057d8b2b-fafc-4937-897d-deff727f1032 2 f
+594 K 模量系数K Variable \N \N 1 16 99999999999999999999999999999999 -9999999999999999999999999999999 t 2020-11-24 11:56:43.003+08 2020-11-24 11:56:43.003+08 057d8b2b-fafc-4937-897d-deff727f1032 2 f
+595 K 模量系数K Variable \N \N 1 16 9999999999999999999999 -99999999999999999999 \N t 2020-12-11 16:09:13.154+08 2020-12-11 16:09:13.154+08 41d90649-a6bb-4671-b100-c37a75836437 2 f
+565 v2_x_thresholdx X轴倾斜阈值 Variable \N 0 6 9999 -9999 t 2020-11-11 15:41:37.707+08 2020-11-17 11:01:33.982+08 c5378a9c-9406-4583-9ae8-5fddb5a5d65e 2 f
+560 cx_v2 y方向角度初值 Variable \N 0 6 9999 -9999 ° t 2020-11-11 15:35:39.126+08 2020-11-17 11:05:55.924+08 bdb43886-e71d-4135-ad42-6e296635b02e 2 f
+576 phy_thresholdx 物理量阈值 Variable \N 0 6 9999 -9999 t 2020-11-16 14:04:32.915+08 2020-11-17 11:32:33.329+08 927f1c11-f9a3-4c84-a565-57ee9245e41f 2 f
+566 v2_y_thresholdy Y轴倾斜阈值 Variable \N 0 6 9999 -9999 t 2020-11-11 15:42:12.538+08 2020-11-17 16:32:59.216+08 c5378a9c-9406-4583-9ae8-5fddb5a5d65e 2 f
+597 Kt 温补系数Kt Variable \N \N 1 16 99999999999999999999999 -99999999999999999999999999 t 2020-12-11 16:10:38.893+08 2020-12-11 16:10:38.893+08 41d90649-a6bb-4671-b100-c37a75836437 2 f
+581 v1_x 初值 Variable \N 0 6 9999 -9999 t 2020-11-16 16:21:00.679+08 2020-11-17 10:45:45.587+08 898c3c4f-ecab-4aa9-9a95-accd00e26193 2 f
+582 v1_x_thresholdx 阈值 Variable \N 0 6 9999 -9999 t 2020-11-16 16:21:34.87+08 2020-11-17 10:45:57.277+08 898c3c4f-ecab-4aa9-9a95-accd00e26193 2 f
+577 k 模量系数 Variable \N 0 6 99999 -99999 t 2020-11-16 14:06:41.158+08 2020-11-17 10:46:16.99+08 927f1c11-f9a3-4c84-a565-57ee9245e41f 2 f
+578 f0 频率初值 Variable \N 0 6 9999 -9999 Hz t 2020-11-16 14:07:04.754+08 2020-11-17 10:46:26.18+08 927f1c11-f9a3-4c84-a565-57ee9245e41f 2 f
+579 kt 温度系数 Variable \N 0 6 9999 -9999 t 2020-11-16 14:07:40.98+08 2020-11-17 10:46:37.342+08 927f1c11-f9a3-4c84-a565-57ee9245e41f 2 f
+580 t0 温度初值 Variable \N 0 6 9999 -9999 ℃ t 2020-11-16 14:08:02.173+08 2020-11-17 10:46:45.812+08 927f1c11-f9a3-4c84-a565-57ee9245e41f 2 f
+573 len0 初始长度 Variable \N 0 6 9999 -9999 m t 2020-11-11 15:48:12.497+08 2020-11-17 10:49:30.699+08 68180c88-8643-47ba-815c-90668639e80f 2 f
+574 H 初始高 Variable \N 0 6 9999 -9999 m t 2020-11-11 15:48:27.908+08 2020-11-17 10:49:59.398+08 68180c88-8643-47ba-815c-90668639e80f 2 f
+575 h_thresholdx 高度阈值 Variable \N 0 6 9999 -9999 m t 2020-11-11 15:48:48.996+08 2020-11-17 10:50:37.138+08 68180c88-8643-47ba-815c-90668639e80f 2 f
+571 C0 初值 Variable \N 0 6 9999 -9999 m t 2020-11-11 15:46:45.406+08 2020-11-17 10:51:00.816+08 14c1729f-4851-411d-9828-84fb5b11f593 2 f
+604 Fo 频率初值Fo Variable \N \N 0 2 9999999999999999999999999 -9999999999999999999999 HZ t 2020-12-16 17:17:13.189+08 2020-12-16 17:17:13.189+08 21d229f6-5f74-405a-a06e-1f7dc84dbcb3 2 f
+572 c_thresholdx 位移阈值 Variable \N 0 6 9999 -9999 m t 2020-11-11 15:47:08.956+08 2020-11-17 10:51:21.708+08 14c1729f-4851-411d-9828-84fb5b11f593 2 f
+567 k_wl 水位模量系数 Variable \N 0 6 9999 -9999 t 2020-11-11 15:43:51.9+08 2020-11-17 10:54:31.952+08 d71a2a8d-5ad2-4cbe-b8d0-3edf77a1037a 2 f
+570 wl_thresholdx 水位阈值 Variable \N 0 6 9999 -9999 m t 2020-11-11 15:45:15.976+08 2020-11-17 10:54:39.517+08 d71a2a8d-5ad2-4cbe-b8d0-3edf77a1037a 2 f
+596 Fo 频率初值Fo Variable \N 0 2 999999999999999999999 -9999999999999999999999 HZ t 2020-12-11 16:09:53.797+08 2020-12-11 16:11:03.786+08 41d90649-a6bb-4671-b100-c37a75836437 2 f
+598 To 温度初值To Variable \N \N 0 2 9999999999999999999 -99999999999999999999 ℃ t 2020-12-11 16:13:10.706+08 2020-12-11 16:13:10.706+08 41d90649-a6bb-4671-b100-c37a75836437 2 f
+599 K 模量系数K Variable \N \N 1 16 9999999999999999 -9999999999999999 \N t 2020-12-16 15:55:43.522+08 2020-12-16 15:55:43.522+08 61c4b4b9-028e-4788-8af4-c97e1084d1c8 2 f
+600 Fo 频率初值Fo Variable \N \N 0 2 999999999999999999999 -999999999999999999 HZ t 2020-12-16 15:56:22.245+08 2020-12-16 15:56:22.245+08 61c4b4b9-028e-4788-8af4-c97e1084d1c8 2 f
+585 n_thresholdz 阈值3 Variable \N \N 0 3 99999 -99999 \N f 2020-11-20 11:11:49.808+08 2020-11-20 11:11:49.808+08 b545defc-450b-4986-83ef-445423df6f98 2 f
+584 n_thresholdy 阈值2 Variable \N 0 3 9999 -9999 f 2020-11-20 10:29:47.221+08 2020-11-20 11:11:58.853+08 b545defc-450b-4986-83ef-445423df6f98 2 f
+583 n_thresholdx 阈值1 Variable \N 0 3 9999 -9999 f 2020-11-20 10:28:44.006+08 2020-11-20 11:12:09.393+08 b545defc-450b-4986-83ef-445423df6f98 2 f
+586 wsd_thresholdx 温度阈值 Variable \N \N 0 3 9999 -9999 ℃ t 2020-11-20 11:15:10.555+08 2020-11-20 11:15:10.555+08 fae5e233-4034-4ebe-8e7b-0bf35a648ec9 2 f
+587 wsd_thresholdy 湿度阈值 Variable \N \N 0 6 9999 -9999 %RH t 2020-11-20 11:15:37.537+08 2020-11-20 11:15:37.537+08 fae5e233-4034-4ebe-8e7b-0bf35a648ec9 2 f
+588 B 系数B Variable \N \N 1 16 99999999999999999999999999 -99999999999999999999999 \N t 2020-11-24 11:50:20.876+08 2020-11-24 11:50:20.876+08 cb006abf-3e22-4ead-830c-5a0a427c4024 2 f
+589 Fo 初始频率Fo Variable \N \N 0 3 99999999999999999999999 -9999999999999999999999999 HZ t 2020-11-24 11:51:30.719+08 2020-11-24 11:51:30.719+08 cb006abf-3e22-4ead-830c-5a0a427c4024 2 f
+590 A 系数A Variable \N \N 1 16 9999999999999999999999999999 -999999999999999999999999999 t 2020-11-24 11:52:05.354+08 2020-11-24 11:52:05.354+08 cb006abf-3e22-4ead-830c-5a0a427c4024 2 f
+591 Kt 温补系数Kt Variable \N \N 1 16 9999999999999999999999999 -9999999999999999999999999 \N t 2020-11-24 11:53:35.382+08 2020-11-24 11:53:35.382+08 057d8b2b-fafc-4937-897d-deff727f1032 2 f
+592 To 初始温度To Variable \N \N 0 3 9999999999999999999999999999 -99999999999999999999999999999999 ℃ t 2020-11-24 11:54:41.665+08 2020-11-24 11:54:41.665+08 057d8b2b-fafc-4937-897d-deff727f1032 2 f
+602 To 温度初值To Variable \N \N 0 2 999999999999999999999 -99999999999999999999 t 2020-12-16 16:10:39.625+08 2020-12-16 16:10:39.625+08 61c4b4b9-028e-4788-8af4-c97e1084d1c8 2 f
+603 K 模量系数 Variable \N \N 1 16 999999999999999999999 -99999999999999999999 \N t 2020-12-16 17:15:35.958+08 2020-12-16 17:15:35.958+08 21d229f6-5f74-405a-a06e-1f7dc84dbcb3 2 f
+606 To 温度初值To Variable \N \N 0 2 999999999999999999999 -99999999999999999999 ℃ t 2020-12-16 17:18:39.334+08 2020-12-16 17:18:39.334+08 21d229f6-5f74-405a-a06e-1f7dc84dbcb3 2 f
+605 Kt 温补系数Kt Variable \N 0 16 999999999999999999999999 -99999999999999999999 t 2020-12-16 17:17:56.369+08 2020-12-17 08:45:03.216+08 21d229f6-5f74-405a-a06e-1f7dc84dbcb3 2 f
+601 Kt 温补系数Kt Variable \N 0 2 999999999999999999999 -9999999999999999999 t 2020-12-16 15:58:11.602+08 2020-12-17 08:45:18.083+08 61c4b4b9-028e-4788-8af4-c97e1084d1c8 2 f
+607 K 系数K Variable \N \N 1 2 999999999999999999 -99999999999999999999 \N t 2021-01-15 13:11:54.131+08 2021-01-15 13:11:54.131+08 d3c03d95-0625-44e5-a097-d371daa46150 2 f
+608 n_thresholdx 阈值 Variable \N 0 6 9999 -9999 \N t 2021-01-18 09:56:29.359+08 2021-01-18 09:58:19.682+08 ed141cf4-ca2c-49a1-9704-afee24dc9c71 2 f
+\.
+
+
+--
+-- Name: FormulaProperty_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public."FormulaProperty_id_seq"', 608, true);
+
+
+--
+-- Data for Name: InterfaceMeta; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."InterfaceMeta" (id, name, "createBy", "belongTo", investor, public, image, "desc", "createdAt", "updatedAt", "interfaceTypeId") FROM stdin;
+54d9b5fc-1253-41af-80d2-b6bef8f04add jabez 2f7acedd-a1ed-4f90-9cf5-fef0898cff9b 2f7acedd-a1ed-4f90-9cf5-fef0898cff9b 2f7acedd-a1ed-4f90-9cf5-fef0898cff9b f \N 测试使用 2017-10-07 20:46:59.918+08 2017-10-07 20:46:59.918+08 1
+85384f06-e14c-4c28-a9e4-9ad955eb1eae 123 0bfe3624-2257-4e6b-821c-4065675cdd6e 0bfe3624-2257-4e6b-821c-4065675cdd6e 0bfe3624-2257-4e6b-821c-4065675cdd6e f \N 23123 2017-10-26 23:10:34.147+08 2017-10-26 23:10:34.147+08 2
+e4049f35-3902-4610-ac6e-45c01236a230 ST_DT 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 f \N 2018-09-07 09:14:23.379+08 2018-09-07 09:14:23.379+08 0
+10ee8413-1dfd-465b-9dfe-fc1a496a7fa5 JK_NJSY d8e712e8-731c-45ed-8c90-23504d4e7daf d8e712e8-731c-45ed-8c90-23504d4e7daf d8e712e8-731c-45ed-8c90-23504d4e7daf f \N 2018-09-13 16:59:13.676+08 2018-09-13 16:59:13.676+08 0
+b2d60094-05d4-473d-a62d-e1cd0ebd557b 213 e803485f-247f-4792-8d98-37b9a2a70d2e e803485f-247f-4792-8d98-37b9a2a70d2e e803485f-247f-4792-8d98-37b9a2a70d2e f \N 2018-01-25 16:18:55.058+08 2018-01-25 16:18:55.058+08 2
+6c047530-0656-4cb4-a416-f4ac00b015f9 channel_Interface 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 f \N 模块-通道-节点 2018-10-10 11:20:39.654+08 2018-10-10 11:23:15.442+08 0
+39356c21-ccbc-496f-b760-0eab61591c6a 串口-接口1 7a616e3e-fa02-4954-983f-947f27c4ffd5 7a616e3e-fa02-4954-983f-947f27c4ffd5 7a616e3e-fa02-4954-983f-947f27c4ffd5 f \N 2018-02-13 16:51:59.753+08 2018-02-13 16:51:59.753+08 1
+23b5d4f7-5be8-4e28-99a6-e797eaedb08a zdyMC ff67841c-7b79-4928-90b3-6782e69c14e9 ff67841c-7b79-4928-90b3-6782e69c14e9 ff67841c-7b79-4928-90b3-6782e69c14e9 f \N 2018-11-01 07:25:16.943+08 2018-11-01 07:25:16.943+08 0
+7273694e-484e-4f59-b7d6-03032fb343bb HTTP ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c f \N 2018-11-12 16:43:01.771+08 2018-11-12 16:43:01.771+08 5
+2b9a7428-49ab-4479-9487-539b6cf56fe0 FS-TCP ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2018-12-15 11:40:13.892+08 2018-12-15 11:40:13.892+08 10
+2b457429-02d8-4034-bf6b-a771ff578d64 千寻 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f \N 2017-12-14 14:42:58.774+08 2017-12-14 14:42:58.774+08 5
+a9e6ee3e-327c-49ad-a6b8-0f073bfdccd7 MQTT 6aecaca4-ae30-42e7-9963-28713a74a311 6aecaca4-ae30-42e7-9963-28713a74a311 6aecaca4-ae30-42e7-9963-28713a74a311 f \N 2017-12-20 15:31:35.405+08 2017-12-20 15:32:04.473+08 6
+39d0ef2f-4785-4747-92ef-7a261b609e9e 213 c1741e71-3a53-4591-9d4e-e0d626ccd022 c1741e71-3a53-4591-9d4e-e0d626ccd022 c1741e71-3a53-4591-9d4e-e0d626ccd022 f \N 2018-01-02 15:10:57.307+08 2018-01-02 15:10:57.307+08 1
+9c90124d-0230-4da1-be95-61ec1f25cd7a getCurrentConnNum e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d f \N 获取tomcat当前连接数 2018-01-09 10:02:15.006+08 2018-01-09 10:02:15.006+08 5
+06b0f2ee-1759-4e35-9c6f-724c06a28838 12 65f478f1-f37a-4b2d-9652-45e1a06ae0f0 65f478f1-f37a-4b2d-9652-45e1a06ae0f0 65f478f1-f37a-4b2d-9652-45e1a06ae0f0 f \N 2018-01-12 14:10:12.229+08 2018-01-12 14:10:12.229+08 1
+d48b4ddb-8b95-492c-abaf-339f6696c099 2323324 33cfce70-2dc8-4d0a-9ed1-8cd6e737117a 33cfce70-2dc8-4d0a-9ed1-8cd6e737117a 33cfce70-2dc8-4d0a-9ed1-8cd6e737117a f \N 2018-01-16 10:54:07.132+08 2018-01-16 10:54:07.132+08 2
+80284583-ddc4-4364-8399-b49e3289bbf3 的大神多 eb5a59f3-6098-4024-a27a-0b795cf9834f eb5a59f3-6098-4024-a27a-0b795cf9834f eb5a59f3-6098-4024-a27a-0b795cf9834f f http://images.theiota.cn/upload/meta_interfaces/eb5a59f3-6098-4024-a27a-0b795cf9834f/66e5d290-b631-46cb-83c5-eb824834a732/interface.png 2018-01-22 10:04:54.939+08 2018-01-22 10:04:54.939+08 1
+aa2a4177-ec0f-4375-aa7b-755461cfb402 我的接口 fbdcaf6b-c584-4b3b-8441-a8e1df52bc0f fbdcaf6b-c584-4b3b-8441-a8e1df52bc0f fbdcaf6b-c584-4b3b-8441-a8e1df52bc0f f \N 串口协议 2017-08-31 14:58:07.949+08 2017-08-31 14:58:07.949+08 1
+5ef40d3b-0094-45fb-9663-892c5c4e270d httpGet 36b70d6d-c974-4742-9257-b555027d36cd 36b70d6d-c974-4742-9257-b555027d36cd 36b70d6d-c974-4742-9257-b555027d36cd f \N get 2018-06-13 16:54:09.21+08 2018-06-13 16:54:09.21+08 5
+1490fd95-7804-4e0f-9afa-bdbe7bb7880f ZigBee f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f \N 2018-03-07 14:48:51.796+08 2018-03-07 14:48:51.796+08 8
+bb7d8ca9-1d07-48df-8d0f-b1439c0b990e BNC ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2018-03-07 17:44:47.674+08 2018-03-07 17:44:47.674+08 0
+118383e6-1b61-4e15-8dee-a1a2a61b531e MP_ZX ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 微功耗振弦 2018-07-17 16:27:01.296+08 2018-07-17 16:27:01.296+08 8
+816805e0-09d0-45d0-866f-b305bcb16111 DSC_SoIP c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f \N 2018-03-19 17:05:41.286+08 2018-03-19 17:05:41.286+08 4
+3dfadb0e-7608-49e1-aa43-24f7442b424a SoIP -1 -1 -1 t \N DTU, Serial Over IP. 2017-08-12 17:25:44.531+08 2017-09-27 15:44:51.416+08 4
+9a1540b6-fea8-4bc0-8090-296b05f87c4a RS485 -1 -1 -1 t \N 远端串口 RS485, RS232, RS422 等. 通常用作采集仪到传感器链接. 2017-08-12 17:24:45.49+08 2017-09-27 15:44:16.88+08 1
+ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5 CLAA_MSP -1 -1 -1 t \N CLAA联盟 MSP协议 2017-08-28 19:11:53.519+08 2017-08-28 19:11:53.519+08 3
+ad4f23f8-9213-4194-97ce-209a34596649 Extract c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f \N 提取方式接入 2018-03-23 14:58:59.394+08 2018-03-23 14:58:59.394+08 0
+cb26d851-bb8b-4390-9d70-75c74bef520a CV_SoIP ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 云振动使用 2018-04-08 23:15:31.236+08 2018-04-08 23:16:28.131+08 4
+d357249e-6ccf-4d1b-8546-c57c18fa121c 温湿度传感器 cb3f6958-fdbf-441d-8009-1fb1ecc61589 cb3f6958-fdbf-441d-8009-1fb1ecc61589 cb3f6958-fdbf-441d-8009-1fb1ecc61589 f \N 2018-04-24 15:22:29.333+08 2018-04-24 15:22:29.333+08 0
+2c95c010-e14a-4284-89d5-a69fc7f2ed37 yToC a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 f \N 云盒to采集仪 2018-08-09 16:12:18.153+08 2018-08-09 16:12:18.153+08 0
+d0ad76ed-4f11-4355-b876-7f1b04037ae1 ST_zigbee 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 f \N 数泰lora网关专用 2018-08-01 16:04:02.014+08 2018-08-01 16:11:23.936+08 2
+4b408fb8-a08f-429b-bbc4-003881a2a4e7 大大大 93ffff70-11c1-46a9-8810-612bd42172e2 93ffff70-11c1-46a9-8810-612bd42172e2 93ffff70-11c1-46a9-8810-612bd42172e2 f \N 嗯嗯 2018-08-30 14:15:27.964+08 2018-08-30 14:15:42.197+08 5
+63ebea66-1c0a-4206-a0b2-f86cb623f3ae wer 9469e349-5aa8-47fb-9d89-104f812285f5 9469e349-5aa8-47fb-9d89-104f812285f5 f51431a2-91b0-40d9-97a3-0d622b0203c8 f \N rere 2017-10-23 09:42:53.518+08 2017-10-23 09:42:53.518+08 3
+8280ccac-494e-4784-bd0c-5ffe97746993 kafka 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f \N 2018-08-17 11:34:51.601+08 2018-09-21 18:23:51.713+08 7
+439492bf-c1cd-4269-8f04-4ee1f3abd6dc 1 1566c2b1-7bc6-4163-8bfa-b245bf0fbc19 1566c2b1-7bc6-4163-8bfa-b245bf0fbc19 1566c2b1-7bc6-4163-8bfa-b245bf0fbc19 f \N 1 2017-11-03 13:18:14.298+08 2017-11-03 13:18:14.298+08 4
+c3feea31-4449-46fb-a1dc-2214d73c3935 Kafka fc6bae74-2409-47c4-8374-d3673978188a fc6bae74-2409-47c4-8374-d3673978188a fc6bae74-2409-47c4-8374-d3673978188a f \N 2017-11-30 14:59:42.166+08 2017-11-30 14:59:42.166+08 7
+63617b14-934a-4d23-8a95-6a76229fbb74 tesp b4b66b83-22ea-46ef-848b-967e90043cd0 b4b66b83-22ea-46ef-848b-967e90043cd0 b4b66b83-22ea-46ef-848b-967e90043cd0 f http://images.theiota.cn/upload/meta_interfaces/upload_ba315e764af518d2c5c185415a507c97.png test 2017-10-16 09:35:09.115+08 2017-10-16 09:35:09.115+08 2
+3ee5b7e3-e7ba-49ff-86eb-2d6498f67116 fire c1741e71-3a53-4591-9d4e-e0d626ccd022 c1741e71-3a53-4591-9d4e-e0d626ccd022 c1741e71-3a53-4591-9d4e-e0d626ccd022 f \N 2018-01-03 22:54:44.797+08 2018-01-03 22:55:42.931+08 5
+1ee846c7-db72-4961-b363-20c629cd5d22 interface 00445c3c-5766-4cb1-af8a-9aa4310d83ca 00445c3c-5766-4cb1-af8a-9aa4310d83ca 00445c3c-5766-4cb1-af8a-9aa4310d83ca f \N 2017-09-05 16:33:11.317+08 2017-09-05 16:33:11.317+08 3
+c96530d8-c5e2-4acd-a7fa-450e15e27ddb 123 a6791a14-ab8e-477e-aee9-4f340e7cf7bb a6791a14-ab8e-477e-aee9-4f340e7cf7bb a6791a14-ab8e-477e-aee9-4f340e7cf7bb f \N 113 2017-09-06 10:36:39.305+08 2017-09-06 10:36:39.305+08 1
+74e413a0-dd33-474d-bd1f-b7f71885dff3 getTotalConnNum e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d f \N 获取tomcat总连接数 2018-01-09 10:37:11.288+08 2018-01-09 10:37:11.288+08 5
+15d1322a-50a2-47ac-8926-33717df4c695 333 87067dc2-128a-48be-8257-a93c40c00140 87067dc2-128a-48be-8257-a93c40c00140 87067dc2-128a-48be-8257-a93c40c00140 f \N 2018-01-13 14:07:19.792+08 2018-01-13 14:07:19.792+08 3
+0af1af55-38cd-43c1-abe3-b71570342d40 node_interface 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 f \N 模块-通道-节点 2018-10-10 11:22:51.149+08 2018-10-10 11:23:10.401+08 0
+93f2d601-f46f-4361-ae92-431401bd869d 13 33cfce70-2dc8-4d0a-9ed1-8cd6e737117a 33cfce70-2dc8-4d0a-9ed1-8cd6e737117a 33cfce70-2dc8-4d0a-9ed1-8cd6e737117a f \N 2018-01-16 11:14:26.759+08 2018-01-16 11:14:26.759+08 2
+2d974b4e-c841-430c-8cbf-c92f7d6a890d 97 475d6577-d638-4b9c-a4de-35f6ddd51240 475d6577-d638-4b9c-a4de-35f6ddd51240 475d6577-d638-4b9c-a4de-35f6ddd51240 f \N 97协议 2018-01-24 14:19:28.757+08 2018-01-24 14:19:28.757+08 1
+5cc45782-5d73-4354-b2c1-4904e284c95b FS_toilet_Interface ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2018-10-26 16:33:28.045+08 2018-10-26 16:33:28.045+08 0
+8835d3fd-b82b-4de9-bd9f-a67f40a210fc http--server 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f \N 2018-11-13 13:35:18.438+08 2018-11-13 13:35:18.438+08 11
+8774b4f0-60c1-4c7d-940b-f3a847c2847a LORA_485 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2018-11-22 15:31:34.121+08 2018-11-22 17:32:40.598+08 1
+9f5c85e4-df62-4b17-bab9-92e5e1a419dc 12 475d6577-d638-4b9c-a4de-35f6ddd51240 475d6577-d638-4b9c-a4de-35f6ddd51240 475d6577-d638-4b9c-a4de-35f6ddd51240 f \N 4 2018-01-30 10:31:59.617+08 2018-01-30 10:31:59.617+08 4
+cdfe913f-9ff0-4801-b162-a5c3434e9630 2324 7a616e3e-fa02-4954-983f-947f27c4ffd5 7a616e3e-fa02-4954-983f-947f27c4ffd5 7a616e3e-fa02-4954-983f-947f27c4ffd5 f \N 2018-02-27 11:11:48.694+08 2018-02-27 11:11:48.694+08 5
+12cbda5e-cdad-4e5e-91b8-4489f816f00d SZYK485 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 f \N 三智盈科485采集仪接口 2018-12-20 14:54:02.049+08 2018-12-20 14:57:02.154+08 0
+f5115163-46ca-4e11-ac6e-d1be363871d1 111 a6791a14-ab8e-477e-aee9-4f340e7cf7bb a6791a14-ab8e-477e-aee9-4f340e7cf7bb a6791a14-ab8e-477e-aee9-4f340e7cf7bb f \N 2 2018-03-28 15:38:46.02+08 2018-03-28 15:38:46.02+08 1
+dfe5a4c0-1a35-48a4-9b20-e8c348a51f12 zigbee 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f \N 2018-03-07 14:55:17.477+08 2018-03-07 14:55:17.477+08 2
+0e98e5cb-6e50-4d85-940b-b538ce71dc14 test 2d6cc626-0499-4724-8803-602deb42bcb4 2d6cc626-0499-4724-8803-602deb42bcb4 2d6cc626-0499-4724-8803-602deb42bcb4 f \N 2018-04-27 16:04:31.651+08 2018-04-27 16:04:31.651+08 5
+0a80b74d-7acc-45c9-a06f-380d7d613626 DSC_SoIP ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 云采集链接 2018-03-08 18:11:49.887+08 2018-03-08 18:25:24.733+08 4
+d4f271b6-567a-4880-beb0-161b33ac2094 Node_RS485 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f \N 节点485接口 2018-03-15 11:39:21.652+08 2018-03-15 11:39:21.652+08 1
+6619c155-5a30-4c92-b738-816302f0c4ed tcp 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f \N 2018-06-15 17:06:35.817+08 2018-06-15 17:06:35.817+08 10
+936f5813-db0d-4a2a-a7bc-8d323024140b MP_ZD 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f \N 2019-03-15 15:38:31.034+08 2019-03-15 15:38:31.034+08 0
+ca45c7c2-42df-48cc-849c-c4cd01067e5d http a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 f \N 2018-06-19 09:46:21.958+08 2018-06-19 09:46:21.958+08 5
+4cbee03c-ad84-4c7a-a379-ed4bbbfaef22 MP_ZD ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 微功耗振动 2018-07-17 16:30:52.475+08 2018-07-17 16:30:52.475+08 0
+71458c57-c197-4b3c-9171-2cdc5658201e HTTP ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2018-07-26 16:30:09.798+08 2018-07-28 17:22:31.073+08 5
+c43e054f-dbeb-43c0-9702-4bc9bf7fdcd1 ST_Node_ZX 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 f \N 振弦 2018-08-01 16:18:08.699+08 2018-08-06 10:37:18.651+08 8
+6f8504db-8b86-4b33-a0c6-721249b63f46 cToS a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 f \N 采集仪to传感器 2018-08-09 16:15:32.341+08 2018-08-09 16:15:32.341+08 0
+8396ee22-73b6-4375-a8be-854a047aecbf BA_EXTRACT 1510d330-86c7-4950-ac34-695109bc07a8 1510d330-86c7-4950-ac34-695109bc07a8 1510d330-86c7-4950-ac34-695109bc07a8 f \N 2018-08-16 10:18:38.567+08 2018-08-16 10:18:38.567+08 0
+9aece67a-050e-41a4-9b7d-7d890212f385 BA_GDGS 1510d330-86c7-4950-ac34-695109bc07a8 1510d330-86c7-4950-ac34-695109bc07a8 1510d330-86c7-4950-ac34-695109bc07a8 f \N 2018-08-16 10:57:12.787+08 2018-08-16 10:57:12.787+08 0
+96b665c2-5314-4144-83d3-7db169ef9416 MQTT 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f \N 2018-08-17 11:20:48.296+08 2018-08-17 11:20:48.296+08 6
+66537b16-1e7d-4823-b03e-676459f5891d HTTP_SERVER f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 t \N 2018-10-29 16:03:01.632+08 2018-10-29 16:03:01.632+08 11
+1aa841f1-d3fb-4523-9b54-e601d350c745 LORA_ZX ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2018-11-22 17:39:33.526+08 2018-11-22 17:39:33.526+08 1
+c00008f7-06d9-4907-b2e7-619374116b36 FS-Extract ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2018-12-21 16:53:27.318+08 2018-12-21 16:53:27.318+08 0
+a8f77633-9fe3-4228-b557-34a9108b3d50 JD_SoIP ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2018-12-26 11:45:10.035+08 2018-12-26 11:45:10.035+08 4
+c6167a22-bb4f-4353-8ea1-5653c69e926b abc-SoIP 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f \N 2017-09-25 09:41:13.862+08 2017-10-31 17:57:57.319+08 4
+68ec42c1-c421-4294-8dc4-107dc7905cee abc-Serial 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f \N 2017-09-25 09:41:57.62+08 2017-10-31 18:15:07.701+08 1
+0f0c11cf-71ae-4bba-b9ba-95442f1fb714 Invented_SoIP ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2018-12-27 15:23:24.821+08 2018-12-27 15:23:34.84+08 4
+cf3cc1ef-8614-4d32-ba45-2ac5d387379b 我的接口 e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d f \N 也一样 2018-01-05 17:10:01.279+08 2018-01-05 17:10:01.279+08 5
+c7a17601-0a46-4901-889f-ce98a95731be 123 eb5a59f3-6098-4024-a27a-0b795cf9834f eb5a59f3-6098-4024-a27a-0b795cf9834f eb5a59f3-6098-4024-a27a-0b795cf9834f f \N asdasd 2018-01-19 17:05:47.161+08 2018-01-19 17:05:47.161+08 2
+be9d7f9a-cbe9-4033-b6b8-8920bd29fdbd http_czjtm d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 f \N 2019-03-15 11:43:17.738+08 2019-03-15 11:43:17.738+08 5
+d9e8186c-3346-431a-8577-b7b7ea1d0798 myInterface cc8dde53-d482-45d2-8216-78628899396a cc8dde53-d482-45d2-8216-78628899396a cc8dde53-d482-45d2-8216-78628899396a f \N 我的接口 2018-03-01 11:59:16.527+08 2018-03-01 11:59:16.527+08 3
+8cc1433a-4b40-4671-ba91-e0ddd2e7c13c AnalogSignal c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 t \N 非RS485/RS232/RS422 传输信号,用作采集仪到传感器链接. 2018-03-06 15:43:29.713+08 2018-03-06 15:43:29.713+08 0
+7697235e-a619-4da5-ac6e-9a76a6e59a78 zigbee ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2018-03-08 18:15:49.999+08 2018-03-08 18:15:49.999+08 2
+d0e8f529-c1bf-4146-beef-cd3056ea9787 Node_ZX ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2018-03-08 18:35:08.398+08 2018-03-08 18:35:08.398+08 8
+d07a1774-312c-4497-adbb-6e3da9410cb6 zigbee 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f \N zigbee 2018-03-15 11:44:17.783+08 2018-03-15 11:44:17.783+08 2
+c8eeed37-ec79-49a9-b3d8-68b7343e0334 sd 5080baff-a15e-42e5-ae75-58f9b31c4576 5080baff-a15e-42e5-ae75-58f9b31c4576 5080baff-a15e-42e5-ae75-58f9b31c4576 f \N 2018-04-05 19:54:14.328+08 2018-05-28 17:33:12.841+08 1
+452e3349-a87b-4b5b-97f9-7dc730f910fa RAW_TCP_CLIENT f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f \N 2018-06-15 17:08:09.972+08 2018-06-15 17:08:09.972+08 10
+73c3b65f-2eb1-4465-9ead-47e699326a86 测试 c5fbd9dd-297a-43f9-8d5d-343ec75239dc c5fbd9dd-297a-43f9-8d5d-343ec75239dc c5fbd9dd-297a-43f9-8d5d-343ec75239dc f \N 测试 2017-09-19 16:19:02.933+08 2017-09-19 16:19:02.933+08 1
+2d8a5feb-5c4a-49f1-b5cd-3770f2b8e090 Matt da122b7a-a86b-4e04-8e43-4a5b4978c8a4 da122b7a-a86b-4e04-8e43-4a5b4978c8a4 da122b7a-a86b-4e04-8e43-4a5b4978c8a4 f \N 2019-03-07 11:34:21.712+08 2019-03-07 11:34:21.712+08 0
+15b373b0-30f8-471e-8900-cb62e28d0e50 MP_485_YC ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 微功耗扬尘485 2019-01-21 11:43:37.872+08 2019-03-14 09:39:50.619+08 1
+b425fff8-940f-467d-81f7-b456d8ad0b22 anxin_485_CX c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f \N 2019-03-19 15:14:16.566+08 2019-03-19 15:15:58.809+08 1
+592592f9-ffc9-4ba5-b330-8dd7597524e1 lyzhu f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f \N test 2019-03-21 18:19:56.877+08 2019-03-21 18:19:56.877+08 2
+639a37c9-637b-46e7-97ac-7b5991155e02 MQTT c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f \N 2018-06-25 16:37:11.215+08 2018-06-25 16:37:11.215+08 6
+c3c19462-3221-4cca-8288-13f960d7ea5b zx_channel_Interface f6ce26a9-3ae2-4845-9e60-cbeae08428e4 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 f \N 2019-03-25 11:13:15.32+08 2019-03-25 11:13:15.32+08 0
+68238334-fea4-4bc0-b1cd-98456c41faab PLC_485 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e f \N 2019-03-27 10:01:32.066+08 2019-03-27 10:01:32.066+08 0
+7c5f8c54-870d-46fb-97fd-ffdf565e7e7e http 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe f \N 2018-07-23 15:15:47.478+08 2018-07-23 15:15:47.478+08 5
+7fd05290-f814-4049-812f-b8c7865ec221 http f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f \N 2018-07-27 17:05:12.19+08 2018-07-27 17:05:12.19+08 5
+876d87b1-cccb-4847-80ea-dabfc20a2175 ST_Node_485 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 f \N 2018-08-03 07:25:48.249+08 2018-08-03 07:25:48.249+08 0
+3d51e3f3-9e3c-4b50-973a-fa7f80af4ba5 zigbee 0235a43b-3369-4639-a955-05e9962ecc4c 0235a43b-3369-4639-a955-05e9962ecc4c 0235a43b-3369-4639-a955-05e9962ecc4c f \N 2018-08-14 16:17:09.853+08 2018-08-14 16:17:09.853+08 2
+dce5b87f-bf0a-4a14-adcc-4573035bdad9 ipjk 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 f \N 2018-08-22 10:04:16.751+08 2018-08-22 10:04:16.751+08 4
+b3cb9990-288c-4f0d-a91a-547254d1d9c6 LK_node 2831da9e-1815-47e1-a77e-67843477a527 2831da9e-1815-47e1-a77e-67843477a527 2831da9e-1815-47e1-a77e-67843477a527 f \N 2019-04-08 10:58:08.39+08 2019-04-08 10:58:08.39+08 0
+7bc18b0f-46d5-403a-893a-029eed333a46 SDGS_WJ 9b82d18b-98eb-4042-bb16-f05b923a0688 9b82d18b-98eb-4042-bb16-f05b923a0688 9b82d18b-98eb-4042-bb16-f05b923a0688 f \N json格式文件解析 2019-04-23 14:58:50.836+08 2019-04-23 15:03:55.417+08 0
+89b76f5e-c6dd-46db-a92f-a3335aeafa86 测试接口 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f \N 2019-04-26 12:50:20.116+08 2019-04-26 12:50:20.116+08 4
+66a06e5d-a436-4d37-806b-919d8fd1c564 MP_RS485 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f \N 2019-03-15 15:52:20.885+08 2020-09-29 10:13:20.022+08 1
+c60b6244-e9f6-467c-93f9-48bcc4c54f56 test-接口 32fed51e-ebe8-4cbe-978d-9e018288d245 32fed51e-ebe8-4cbe-978d-9e018288d245 32fed51e-ebe8-4cbe-978d-9e018288d245 f \N test 2018-11-23 14:41:37.244+08 2018-11-23 14:41:37.244+08 5
+43f97047-356c-41ba-aa38-ded0990a78cd 测试一 8a1e474f-1a95-4805-9c0c-7cf89f71cd43 8a1e474f-1a95-4805-9c0c-7cf89f71cd43 8a1e474f-1a95-4805-9c0c-7cf89f71cd43 f \N 2017-10-31 16:09:37.715+08 2017-10-31 16:09:37.715+08 2
+31f274cf-4345-4b4e-adbc-e7b05abf7453 HttpPost a971c084-cc83-4e41-80f6-c8de9df9b9d6 a971c084-cc83-4e41-80f6-c8de9df9b9d6 a971c084-cc83-4e41-80f6-c8de9df9b9d6 f \N 千寻 2017-12-13 13:53:29.263+08 2017-12-13 13:53:29.263+08 5
+fcfced24-ec69-4898-b965-a6fcc3fda47c snmp e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d f \N snmp数据采集 2018-01-08 09:36:33.312+08 2018-01-08 09:36:33.312+08 6
+0656e39e-ad05-4573-8a05-3c6f5dd01785 tt e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d f \N 2018-01-08 11:56:14.206+08 2018-01-08 11:56:14.206+08 1
+c6ca8894-3a00-4e68-9a8b-c55673bafd0b 我的接口A 00cf911c-3531-4665-a358-3d31d36f0bdd 00cf911c-3531-4665-a358-3d31d36f0bdd 00cf911c-3531-4665-a358-3d31d36f0bdd f \N 2018-01-09 21:39:41.647+08 2018-01-09 21:39:41.647+08 5
+6c0898f5-e8da-495b-8718-6efba367e3f1 Node_485_KQ ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 自研空气 2018-12-28 10:03:38.306+08 2018-12-28 10:03:38.306+08 1
+6f9486b4-6b22-4fbd-a73a-9334e711badb MP_SoIP 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f \N 2019-03-15 15:08:46.736+08 2019-03-15 15:08:46.736+08 4
+3d88a29a-ca10-482f-8643-4fd39d4b50e2 新建接口01 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 f \N A设备接口01 2018-01-22 10:14:49.231+08 2018-01-26 17:37:16.439+08 5
+34ab0b66-1ce3-4462-ad0c-520d349ca04c HttpGet ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N GNSS 2018-03-05 11:57:23.531+08 2018-03-05 11:57:40.215+08 5
+250ec8dc-2cd2-4056-88f4-863278485bba 我 f58d1dc4-346b-44b0-8151-837508852c77 f58d1dc4-346b-44b0-8151-837508852c77 f58d1dc4-346b-44b0-8151-837508852c77 f \N 2018-03-07 11:51:57.332+08 2018-03-07 11:51:57.332+08 0
+7667c2d9-3c04-4818-bfeb-42f43b60af77 Node_RS485 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 节点485接口 2018-03-08 18:24:07.559+08 2018-03-08 18:25:41.741+08 1
+d5f2066b-b4d8-4e26-8991-0c068495e2c9 Node_ZX 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f \N 振弦 2018-03-15 11:50:29.306+08 2018-03-15 11:50:29.306+08 8
+ca2e74c9-b28e-4826-b922-074f4f657e51 爱的色放 7584d654-5057-429f-bb89-a73446d572ee 7584d654-5057-429f-bb89-a73446d572ee 7584d654-5057-429f-bb89-a73446d572ee f http://images.theiota.cn/upload/meta_interfaces/7584d654-5057-429f-bb89-a73446d572ee/03cdc461-a919-44a8-b2cf-2c88a321fa26/interface.png 安师大发水电费 2018-04-06 12:23:30.464+08 2018-04-06 12:23:30.464+08 1
+ac94d09e-3893-4f3d-b42b-0825be96e0c7 anxinlin 82999c5b-1550-42e6-82fb-054c97191ff7 82999c5b-1550-42e6-82fb-054c97191ff7 82999c5b-1550-42e6-82fb-054c97191ff7 f \N 2019-03-19 16:42:30.258+08 2019-03-19 16:42:30.258+08 1
+0d963823-0c01-40c1-acc4-74d4eaaea996 zx_node_interface f6ce26a9-3ae2-4845-9e60-cbeae08428e4 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 f \N 2019-03-25 11:14:17.031+08 2019-03-25 11:14:17.031+08 0
+7b7c851b-8c01-4489-a3c7-fd2229f719a8 tcp 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe f \N 2018-07-23 15:22:03.062+08 2018-07-23 15:22:03.062+08 10
+4ad52552-2c20-4330-b6e4-b33cc5cc7ef1 MP_RS485 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 微功耗485 2018-07-17 16:26:08.547+08 2018-07-23 16:20:17.457+08 1
+6eeb1913-71e2-40b2-ae39-c8750cbdefd7 MP_SoIP ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2018-07-31 16:38:16.98+08 2018-07-31 16:38:16.98+08 4
+c5aa9f80-57da-45d4-972d-a9dee4854ab6 p 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f f \N 2018-08-09 08:29:44.442+08 2018-08-09 08:29:44.442+08 1
+9359f4a8-67a2-4354-b5e6-e7473d0a5268 http 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f \N 2018-08-17 11:15:21.718+08 2018-08-17 11:15:21.718+08 5
+30e6dca7-ede5-48be-9952-9fb056b2e9d1 ZigBee_sx ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2018-08-28 17:41:58.157+08 2018-08-28 17:41:58.157+08 2
+115dada1-714c-496e-b060-455f1ab2510c test 59f58657-7323-439f-b89d-f725bac557c6 59f58657-7323-439f-b89d-f725bac557c6 59f58657-7323-439f-b89d-f725bac557c6 f \N 2019-04-29 11:24:33.365+08 2019-04-29 11:24:33.365+08 10
+da330369-58e7-4bce-8bc1-3c0a062dd1a0 EdgeMQTT e199a753-2b5e-4d34-bd12-d76c9afe47d3 e199a753-2b5e-4d34-bd12-d76c9afe47d3 e199a753-2b5e-4d34-bd12-d76c9afe47d3 f \N 2019-08-09 13:13:09.809+08 2019-08-09 13:13:09.809+08 12
+971ef4ab-bbb7-41e2-a5a1-0111b3a9de99 SOIL_DT 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 f \N 2019-04-29 15:00:42.315+08 2019-04-29 16:02:53.566+08 0
+3f912f2c-18f1-4563-9043-dc271141fc55 HTTP_C ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2019-05-07 09:15:09.372+08 2019-05-07 09:15:09.372+08 5
+78fdd0b8-8d18-43a4-bd10-58ceee295bcc ZigMqtt a0524b8e-f69f-421e-b306-124dd37f4f1c a0524b8e-f69f-421e-b306-124dd37f4f1c a0524b8e-f69f-421e-b306-124dd37f4f1c f \N 2019-05-15 20:54:22.73+08 2019-05-15 20:54:22.73+08 6
+c41d198c-435b-4551-ae66-b74be2c022d6 Zigbee Up f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f \N 2019-07-06 16:46:25.424+08 2019-07-06 16:46:25.424+08 2
+f3eee31e-d2c2-481e-9d6a-93cd469e4c63 Zigbee Down f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f \N 2019-07-06 16:46:39.475+08 2019-07-06 16:46:39.475+08 2
+27a58884-75a3-4f5d-94f6-37cc15d419fb iOTA MQTT f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f \N 2019-07-06 16:47:26.269+08 2019-07-06 16:47:26.269+08 12
+f03c622c-30e7-47a4-a0de-cd681dc2fe61 TST_EXTRACT 6c3cbbd8-b774-4955-897d-3333586385c6 6c3cbbd8-b774-4955-897d-3333586385c6 6c3cbbd8-b774-4955-897d-3333586385c6 f \N 2019-08-05 17:44:12.651+08 2019-08-05 17:44:12.651+08 0
+efc73d5c-867e-4feb-82f6-2c5afb8c432f EdgeZigbee e199a753-2b5e-4d34-bd12-d76c9afe47d3 e199a753-2b5e-4d34-bd12-d76c9afe47d3 e199a753-2b5e-4d34-bd12-d76c9afe47d3 f \N 2019-08-09 13:13:44.079+08 2019-08-09 13:13:44.079+08 2
+6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500 BNCy 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f \N 2019-08-22 10:56:35.714+08 2019-08-22 10:56:35.714+08 0
+5afb303e-0963-4e23-91f7-2b41f543aaf6 MP_ZX 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f \N 2019-08-22 11:13:19.246+08 2019-08-22 11:25:08.736+08 8
+e498b9c2-546f-4bba-9ab6-0c575a49d452 HTTPGET 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f \N 访问电信nb平台 2019-09-12 16:29:41.76+08 2019-09-12 16:29:41.76+08 5
+0919de6f-bf9e-4ef6-85b4-108fee899605 qqqq 269c619d-0aad-4523-a770-9b2f752ed30e 269c619d-0aad-4523-a770-9b2f752ed30e 269c619d-0aad-4523-a770-9b2f752ed30e f \N 2019-09-24 11:32:56.592+08 2019-09-24 11:33:04.659+08 0
+4714efc4-d103-4619-9895-28e67d9100e2 BNC 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f \N 2019-10-24 11:15:20.43+08 2019-10-24 11:15:20.43+08 0
+5eab665d-75fe-4658-b16d-34afdf4ee62e DCS-MQTT 82f7ebbe-0138-4ac5-85ae-d607f60b7236 82f7ebbe-0138-4ac5-85ae-d607f60b7236 82f7ebbe-0138-4ac5-85ae-d607f60b7236 f \N 2020-03-20 10:50:47.722+08 2020-03-20 10:50:47.722+08 6
+6361ba5f-8588-4685-a107-b692e3592f17 FS_LDJK ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 路灯接口 2019-10-09 14:28:05.477+08 2019-10-28 14:26:13.585+08 0
+c5cc09bc-6e3b-44f6-a8c4-ec174ae18707 http_test b7a8e100-b8fb-4135-a1b5-00a91da6da3f b7a8e100-b8fb-4135-a1b5-00a91da6da3f b7a8e100-b8fb-4135-a1b5-00a91da6da3f f \N 测试http协议 2019-10-29 09:30:10.251+08 2019-10-29 09:30:10.251+08 5
+04248d51-0631-4712-8245-b937e6be8f49 temp_stress b7a8e100-b8fb-4135-a1b5-00a91da6da3f b7a8e100-b8fb-4135-a1b5-00a91da6da3f b7a8e100-b8fb-4135-a1b5-00a91da6da3f f \N 2019-10-30 15:31:08.732+08 2019-10-30 15:31:08.732+08 4
+5b75847d-a266-40ea-99f3-23cb45d9e576 mcu_test b7a8e100-b8fb-4135-a1b5-00a91da6da3f b7a8e100-b8fb-4135-a1b5-00a91da6da3f b7a8e100-b8fb-4135-a1b5-00a91da6da3f f \N 2019-11-01 11:29:43.769+08 2019-11-01 11:29:43.769+08 0
+8751bbb1-2603-44bd-aa33-a7ad5e31a3ba MP_ZD 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f \N 2019-11-08 16:53:36.575+08 2019-11-08 16:53:36.575+08 0
+0be63da7-6ab6-4d1f-830d-dd32add170c6 MP_SoIP 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f \N 2019-11-08 17:09:08.856+08 2019-11-08 17:09:08.856+08 4
+451db320-593b-4777-9848-9d778427dea5 Node_ZX 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f \N 2020-04-08 14:07:36.631+08 2020-04-08 14:07:36.631+08 8
+0236d6b7-7ed8-4c8b-89cf-c4b352d8ed61 LORA_ZX 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f \N 2020-04-08 15:28:30.907+08 2020-04-08 15:28:30.907+08 1
+25642488-1945-4865-81e7-e9593c12d208 MP_ZXy 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f \N 复制的工训 2019-11-08 16:22:31.161+08 2019-11-15 14:26:50.459+08 8
+919c20e0-674f-4a48-802d-9e63d6551a9a FS-LFXX-Z ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2019-12-05 15:43:36.894+08 2019-12-05 15:43:36.894+08 4
+e88f4b90-93c9-4a17-b425-b118ce4f4695 MQTT ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2019-12-20 09:49:45.674+08 2019-12-20 09:49:45.674+08 6
+c1b7ebc4-5a06-40c2-a231-f3fa95094a26 RTU_485 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2019-12-24 14:34:31.859+08 2019-12-24 14:34:31.859+08 1
+6e48d81c-5e9a-4e94-95b8-5e03d0823466 MP_ZXy 7883c07e-5754-4740-b90b-836def9cb38e 7883c07e-5754-4740-b90b-836def9cb38e 7883c07e-5754-4740-b90b-836def9cb38e f \N 复制的江西一芯的 2020-01-06 10:48:36.589+08 2020-01-06 10:48:36.589+08 8
+3d1a9d6a-ff6b-4b29-bb30-1c39079c1362 MQTT 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 f \N 2020-03-18 11:21:45.292+08 2020-03-18 11:21:45.292+08 6
+e4809d13-f016-47b0-8f2d-129502794def MQTT对接 d41427b1-5907-4063-88c6-422f4f478d1f d41427b1-5907-4063-88c6-422f4f478d1f d41427b1-5907-4063-88c6-422f4f478d1f f \N 2020-03-20 10:57:55.191+08 2020-03-20 10:57:55.191+08 6
+640f3d57-3789-4fc9-a69b-6175b4d3e384 MP_485_RZ370 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f \N 2020-03-27 16:45:06.712+08 2020-03-27 16:45:06.712+08 1
+80b06599-206f-411a-8965-2b4ccb6a3d59 http ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2020-04-02 15:19:09.284+08 2020-04-02 15:19:09.284+08 5
+2dd0e24e-8f6a-4171-8657-493de66868bd LORA_485 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f \N 2020-04-03 17:05:26.38+08 2020-04-03 17:05:26.38+08 1
+e65d6dc4-b239-4755-b83e-af11fa23fb70 Node_RS485 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f \N 节点485接口 2020-04-03 17:14:23.095+08 2020-04-03 17:14:23.095+08 1
+836f48be-3271-48ce-9df0-d8c9f35d9d35 MP_SoIP 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 f \N 2020-04-09 14:50:04.933+08 2020-04-09 14:50:04.933+08 4
+922031d2-ebc0-4fb4-a21a-0bbd78a09b80 MP_ZD 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 f \N 2020-04-09 14:57:30.856+08 2020-04-09 14:57:30.856+08 0
+74596cc6-9b6c-4386-8915-dd275e4dd101 MP_RS485 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 f \N 2020-04-09 15:21:22.016+08 2020-04-09 15:21:22.016+08 1
+ad167c7a-80b6-4a2b-960a-532352df8a3c MP_ZXy 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 f \N 2020-04-09 15:37:03.635+08 2020-04-09 15:37:03.635+08 8
+c34d10ca-5037-406b-bedb-1c9e93c0502c Node_RS485 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 f \N 节点485接口 2020-04-10 14:59:58.832+08 2020-04-10 14:59:58.832+08 1
+82e26215-779c-407d-8dcf-7aa293ac2f50 LORA_485 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 f \N 2020-04-10 15:36:10.207+08 2020-04-10 15:36:10.207+08 1
+de1d3ee0-008d-4b6c-be9e-a94740944e36 Gray f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f \N 2020-04-22 19:17:50.018+08 2020-04-22 19:17:50.018+08 0
+a53ae7a4-4432-4696-9af3-bbc514ecee6e ADC f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f \N 2020-04-22 19:17:11.73+08 2020-04-22 19:22:15.548+08 0
+139e622c-b7ec-45e4-9d31-862953487b92 DI f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f \N 2020-04-22 19:22:43.223+08 2020-04-22 19:22:43.223+08 0
+296ce231-ea55-48e7-90a3-4aea8879b66f DO f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f \N 2020-04-22 19:23:18.822+08 2020-04-22 19:23:18.822+08 0
+f6b4041e-0a8c-46cf-a8df-21621b01f953 RS232 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f \N 2020-04-22 19:24:45.532+08 2020-04-22 19:24:45.532+08 1
+2686f932-1a7d-4a02-a326-e06e0d92f30a onvif f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f \N 2020-04-22 19:26:40.177+08 2020-04-22 19:26:40.177+08 0
+b5a45e40-baae-424a-997b-ad5bdd7932b2 恋战天下 d04b9fa6-4ef6-47e9-9604-ed752f9d5281 d04b9fa6-4ef6-47e9-9604-ed752f9d5281 d04b9fa6-4ef6-47e9-9604-ed752f9d5281 f \N 2020-06-05 17:56:02.326+08 2020-06-05 17:56:02.326+08 5
+789cc633-6120-4c95-95a7-c7f15063488f WY_GDGS 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 f \N 2020-06-24 15:14:07.798+08 2020-06-24 15:14:07.798+08 0
+030bf3ed-bc8b-4460-8031-99370c393db6 WY_EXTRACT 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 f \N 2020-06-24 15:15:48.306+08 2020-06-24 15:15:48.306+08 0
+1c21f4ae-9f87-49b7-96f4-64f39a145e97 http 10b1641f-9368-4783-ab0f-85301fbe0b57 10b1641f-9368-4783-ab0f-85301fbe0b57 10b1641f-9368-4783-ab0f-85301fbe0b57 f \N 2020-07-03 11:57:03.907+08 2020-07-03 11:57:03.907+08 5
+b0b670ee-6fd7-4178-b684-08677b47ba30 HttpGet 2abdd5b8-eda7-4f9d-b63c-e16753db1ef1 2abdd5b8-eda7-4f9d-b63c-e16753db1ef1 2abdd5b8-eda7-4f9d-b63c-e16753db1ef1 f \N GNSS 2020-07-20 09:47:10.725+08 2020-07-20 09:47:10.725+08 5
+fd7433b9-9a8b-43c3-86e9-dab7d653da20 CDAJ_DT 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e f \N 2020-07-31 11:01:11.289+08 2020-07-31 11:01:11.289+08 0
+ed710604-9677-4ca7-9f7d-376135ae5cbf ICM ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 倾角仪接口 2020-12-28 16:51:48.555+08 2020-12-28 16:51:48.555+08 0
+dff00e7d-1fb2-443e-be6a-615214932ee6 YX_RS485 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f \N 2019-11-08 16:43:41.312+08 2020-08-05 14:14:17.015+08 1
+e8fa0f36-2606-4bc7-b594-ae3c3289ed63 NB_SoIP ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 2020-08-18 10:24:23.61+08 2020-08-18 10:24:23.61+08 4
+0d79aad8-d5e4-4ae1-8062-4bbf602713cf BST_GDGS dc9a58ac-add9-4e6b-8b9b-36a0b4866d47 dc9a58ac-add9-4e6b-8b9b-36a0b4866d47 dc9a58ac-add9-4e6b-8b9b-36a0b4866d47 f \N 2020-08-26 11:58:42.55+08 2020-08-26 11:58:42.55+08 0
+0237523c-9c1a-4c16-9fc8-7b8f9a369383 MQTT 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 f \N 2020-08-27 15:48:34.076+08 2020-08-27 15:48:34.076+08 6
+ceec3d38-6fcc-4e58-a430-c43b5e2291ff mqtt_rtu 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 f \N 2020-08-27 16:07:56.095+08 2020-09-02 17:48:29.759+08 1
+cd04713a-2775-4af9-94b3-89ddeca68f9a MQTT f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f \N 2020-09-07 16:06:49.179+08 2020-09-07 16:06:49.179+08 6
+099c1ce3-267d-41ed-a3ed-be979a58222e http 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 f \N 2020-09-11 10:17:01.838+08 2020-09-11 10:17:01.838+08 5
+2bef85fc-4b8c-4b06-aea3-c4309283871b DC_AS 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 f \N 2020-09-11 13:47:23.719+08 2020-09-11 13:47:23.719+08 0
+629e35b1-4ffb-46b6-a53d-b8fb31425fe8 http 256d53e2-0a91-4903-9753-736649588b98 256d53e2-0a91-4903-9753-736649588b98 256d53e2-0a91-4903-9753-736649588b98 f \N 2020-12-31 13:34:13.169+08 2020-12-31 13:34:13.169+08 5
+76039ea0-1ef9-4965-a90a-50e97497174a ZHTK_AS 10b1641f-9368-4783-ab0f-85301fbe0b57 10b1641f-9368-4783-ab0f-85301fbe0b57 10b1641f-9368-4783-ab0f-85301fbe0b57 f \N 2020-09-25 08:56:46.246+08 2020-09-25 08:56:46.246+08 0
+b705d87a-1c3b-4f73-b55f-6c184587c246 工讯 bdbbb9fa-82e8-4cc9-bf0d-3bc99c4fe65b bdbbb9fa-82e8-4cc9-bf0d-3bc99c4fe65b bdbbb9fa-82e8-4cc9-bf0d-3bc99c4fe65b f \N 工讯液位计 2020-11-13 13:48:30.495+08 2020-11-13 13:48:30.495+08 10
+6ef0562f-3378-453f-935e-8057c95048ae RYDW ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f \N 人员定位设备接口 2020-12-09 13:53:20.979+08 2020-12-09 13:53:20.979+08 0
+415b61a8-f54e-4e4b-a599-bf878220deab TD_ZD 256d53e2-0a91-4903-9753-736649588b98 256d53e2-0a91-4903-9753-736649588b98 256d53e2-0a91-4903-9753-736649588b98 f \N 2020-12-31 14:15:47.08+08 2020-12-31 14:15:47.08+08 0
+193f76a4-e706-4709-a54a-f6f08be3495c hd_node 611a5d96-e77e-4ca6-925d-30609b1f57df 611a5d96-e77e-4ca6-925d-30609b1f57df 611a5d96-e77e-4ca6-925d-30609b1f57df f \N 2021-01-07 08:48:13.873+08 2021-01-07 08:48:13.873+08 0
+\.
+
+
+--
+-- Data for Name: InterfaceProperty; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."InterfaceProperty" (id, name, "showName", category, enum, "defaultValue", "precision", max, min, unit, "desc", "createdAt", "updatedAt", "propertyTypeId", "interfaceMetaId", required, "isOtherParameter") FROM stdin;
+35 fadsf fds Variable \N afdsf \N \N \N 2017-10-23 09:42:53.53+08 2017-10-23 09:42:53.536+08 5 63ebea66-1c0a-4206-a0b2-f86cb623f3ae t f
+36 123 123 Variable \N 3434 \N \N \N x 2017-10-26 23:10:34.448+08 2017-10-26 23:10:34.733+08 5 85384f06-e14c-4c28-a9e4-9ad955eb1eae t f
+2 id ID Variable 12345678 0 SNO, ID等 2017-08-12 17:25:44.539+08 2017-09-27 15:39:27.537+08 5 3dfadb0e-7608-49e1-aa43-24f7442b424a t f
+3 port 端口 Variable 9000 0 65535 1025 服务侧监听端口 2017-08-12 17:25:44.566+08 2017-09-27 15:39:39.408+08 1 3dfadb0e-7608-49e1-aa43-24f7442b424a t f
+38 aa gffdsg Variable \N 12 1 60 10 2017-10-31 16:09:37.726+08 2017-10-31 16:09:37.731+08 2 43f97047-356c-41ba-aa38-ded0990a78cd t f
+12 foo FOO Variable \N true \N \N \N 2017-08-31 14:58:07.963+08 2017-08-31 14:58:07.969+08 3 aa2a4177-ec0f-4375-aa7b-755461cfb402 t f
+13 bar BAR Constant \N BAR+ \N \N \N 2017-08-31 14:58:07.975+08 2017-08-31 14:58:07.979+08 5 aa2a4177-ec0f-4375-aa7b-755461cfb402 t f
+14 var VAR Variable 风,决定,要,走,z 决定 \N \N \N 2017-08-31 14:58:07.984+08 2017-08-31 14:58:07.99+08 4 aa2a4177-ec0f-4375-aa7b-755461cfb402 t f
+15 fuck 法克 Constant \N 999 \N \N \N 摄氏度 2017-08-31 14:58:07.993+08 2017-08-31 14:58:07.997+08 1 aa2a4177-ec0f-4375-aa7b-755461cfb402 t f
+18 t ts Variable \N ts \N \N \N 2017-09-05 16:33:11.323+08 2017-09-05 16:33:11.329+08 5 1ee846c7-db72-4961-b363-20c629cd5d22 t f
+19 111 111 Variable \N 1 \N \N \N 2 2 2017-09-06 10:36:39.328+08 2017-09-06 10:36:39.337+08 5 c96530d8-c5e2-4acd-a7fa-450e15e27ddb t f
+39 1 2 Variable \N 3 \N \N \N 4 5 2017-11-03 13:18:14.672+08 2017-11-03 13:18:14.678+08 5 439492bf-c1cd-4269-8f04-4ee1f3abd6dc t f
+22 demo1 demo1 Variable \N demo1 \N \N \N 2017-09-19 16:19:02.951+08 2017-09-19 16:19:02.957+08 5 73c3b65f-2eb1-4465-9ead-47e699326a86 t f
+23 demo2 demo2 Constant \N demo2 \N \N \N demo2 2017-09-19 16:19:02.964+08 2017-09-19 16:19:02.967+08 5 73c3b65f-2eb1-4465-9ead-47e699326a86 t f
+24 demo3 demo3 Variable \N 1 \N 100 1 demo3 2017-09-19 16:19:02.97+08 2017-09-19 16:19:02.973+08 1 73c3b65f-2eb1-4465-9ead-47e699326a86 t f
+25 ip Variable \N 12341234 \N \N \N 2017-09-25 09:41:13.879+08 2017-09-25 09:41:13.886+08 5 c6167a22-bb4f-4353-8ea1-5653c69e926b t f
+26 port Variable 2222 0 2017-09-25 09:41:13.894+08 2017-11-03 16:31:38.783+08 5 c6167a22-bb4f-4353-8ea1-5653c69e926b t f
+32 model 型号 Variable 0 不同型号标识 2017-09-27 15:39:04.759+08 2017-09-27 15:40:46.373+08 5 3dfadb0e-7608-49e1-aa43-24f7442b424a t f
+33 软件 111 Variable \N 1212 \N 22222 111 1212 1212 2017-10-07 20:46:59.933+08 2017-10-07 20:46:59.94+08 1 54d9b5fc-1253-41af-80d2-b6bef8f04add t f
+34 add 增加 Variable \N test \N \N \N 2017-10-16 09:35:09.13+08 2017-10-16 09:35:09.136+08 5 63617b14-934a-4d23-8a95-6a76229fbb74 t f
+40 Output \N Variable \N \N \N \N \N 2017-11-30 15:00:07.098+08 2017-11-30 15:00:07.098+08 5 c3feea31-4449-46fb-a1dc-2214d73c3935 t f
+41 sik sik值 Variable \N 1 \N \N \N \N 2017-12-13 13:53:29.273+08 2017-12-13 13:53:29.279+08 5 31f274cf-4345-4b4e-adbc-e7b05abf7453 t f
+42 appsecret 密码 Variable \N 1 \N \N \N 2017-12-13 13:53:29.285+08 2017-12-13 13:53:29.289+08 5 31f274cf-4345-4b4e-adbc-e7b05abf7453 t f
+43 sik \N Variable \N \N \N \N \N 2017-12-14 14:42:59.138+08 2017-12-14 14:42:59.142+08 5 2b457429-02d8-4034-bf6b-a771ff578d64 t f
+44 appsecret Variable \N \N \N \N 2017-12-14 14:42:59.146+08 2017-12-14 14:42:59.148+08 5 2b457429-02d8-4034-bf6b-a771ff578d64 t f
+45 temp 温度 Variable \N 0 2 100 -30 ℃ 2017-12-20 15:31:35.696+08 2017-12-20 15:31:35.703+08 2 a9e6ee3e-327c-49ad-a6b8-0f073bfdccd7 t f
+46 humi 湿度 Variable \N \N 2 100 0 % 2017-12-20 15:31:35.711+08 2017-12-20 15:31:35.715+08 2 a9e6ee3e-327c-49ad-a6b8-0f073bfdccd7 t f
+47 123 \N Variable \N \N 2 1 0 \N 2018-01-02 15:10:57.88+08 2018-01-02 15:10:57.888+08 2 39d0ef2f-4785-4747-92ef-7a261b609e9e t f
+48 name name Variable \N \N \N \N 2018-01-03 22:54:44.812+08 2018-01-03 22:54:44.818+08 5 3ee5b7e3-e7ba-49ff-86eb-2d6498f67116 t f
+49 type Variable \N \N \N \N 2018-01-03 22:54:44.825+08 2018-01-03 22:54:44.829+08 5 3ee5b7e3-e7ba-49ff-86eb-2d6498f67116 t f
+50 属性1 属性1 Variable \N 哈哈 \N \N \N 秒 哈哈 2018-01-05 17:10:01.284+08 2018-01-05 17:10:01.288+08 5 cf3cc1ef-8614-4d32-ba45-2ac5d387379b t f
+51 端口 端口 Constant \N 161 \N \N \N \N 2018-01-08 09:36:33.322+08 2018-01-08 09:36:33.328+08 1 fcfced24-ec69-4898-b965-a6fcc3fda47c t f
+52 ip ip Variable \N \N \N \N 2018-01-08 09:36:33.334+08 2018-01-08 09:36:33.338+08 5 fcfced24-ec69-4898-b965-a6fcc3fda47c t f
+53 ip \N Tag \N \N \N \N \N \N 2018-01-08 11:56:14.215+08 2018-01-08 11:56:14.22+08 5 0656e39e-ad05-4573-8a05-3c6f5dd01785 t f
+54 port Constant \N 13 \N \N \N 2018-01-08 11:56:14.225+08 2018-01-08 11:56:14.228+08 1 0656e39e-ad05-4573-8a05-3c6f5dd01785 t f
+55 ip ip地址 Variable \N 172.16.10.152 \N \N \N \N Tomcat的ip地址 2018-01-09 10:02:15.012+08 2018-01-09 10:02:15.015+08 5 9c90124d-0230-4da1-be95-61ec1f25cd7a t f
+56 port 端口号 Variable \N 8080 \N 10000 2000 tomcat的http端口号 2018-01-09 10:02:15.018+08 2018-01-09 10:02:15.02+08 1 9c90124d-0230-4da1-be95-61ec1f25cd7a t f
+57 userName 用户名 Variable \N admin \N \N \N 用户名 2018-01-09 10:02:15.021+08 2018-01-09 10:02:15.024+08 5 9c90124d-0230-4da1-be95-61ec1f25cd7a t f
+58 password 密码 Variable \N \N \N \N 密码 2018-01-09 10:02:15.027+08 2018-01-09 10:02:15.031+08 6 9c90124d-0230-4da1-be95-61ec1f25cd7a t f
+59 ip ip地址 Variable \N 172.16.10.152 \N \N \N \N tomcat的IP地址 2018-01-09 10:37:11.3+08 2018-01-09 10:37:11.307+08 5 74e413a0-dd33-474d-bd1f-b7f71885dff3 t f
+60 port 端口号 Variable \N 8080 \N 10000 2000 tomcat的端口地址 2018-01-09 10:37:11.314+08 2018-01-09 10:37:11.317+08 1 74e413a0-dd33-474d-bd1f-b7f71885dff3 t f
+8 appkey APP Key Variable 0 CLAA 授权应用Key 2017-08-28 19:11:53.525+08 2017-09-27 15:46:27.191+08 5 ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5 t f
+1 module 模块号 Variable 1026 0 65535 1025 模块号, Modbus 地址 2017-08-12 17:24:45.51+08 2017-09-27 15:41:16.965+08 5 9a1540b6-fea8-4bc0-8090-296b05f87c4a t f
+9 appeui APP EUI Variable 0 应用ID 2017-08-28 19:11:53.536+08 2017-09-27 15:46:58.056+08 5 ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5 t f
+31 vendor 供应商 Variable 才茂,四信,宏电,众山,RTU 才茂 0 供应商, 会影响控制帧处理 2017-09-27 15:38:32.849+08 2017-09-27 15:44:59.346+08 4 3dfadb0e-7608-49e1-aa43-24f7442b424a t f
+10 msp MSP服务器 Variable msp01.claaiot.com:30002 0 MSP服务器地址 2017-08-28 19:11:53.543+08 2017-09-27 15:47:23.327+08 5 ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5 t f
+11 deveui 设备EUI Variable 0 设备ID 2017-08-28 19:11:53.549+08 2017-09-27 15:47:17.713+08 5 ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5 t f
+90 destid4 destid呀 Variable \N \N 7 777 7 2018-03-07 14:55:17.487+08 2018-03-07 14:55:17.49+08 2 dfe5a4c0-1a35-48a4-9b20-e8c348a51f12 t f
+64 名称 GE1/0/1 Variable \N \N \N \N \N 2018-01-09 21:39:41.658+08 2018-01-09 21:39:41.664+08 5 c6ca8894-3a00-4e68-9a8b-c55673bafd0b t f
+65 描述 描述 Variable \N \N \N \N 2018-01-09 21:39:41.67+08 2018-01-09 21:39:41.673+08 5 c6ca8894-3a00-4e68-9a8b-c55673bafd0b t f
+66 管理状态 管理状态 Constant 0,1 \N \N \N \N 2018-01-09 21:39:41.675+08 2018-01-09 21:39:41.678+08 4 c6ca8894-3a00-4e68-9a8b-c55673bafd0b t f
+104 vendor 监听类型 Variable 才茂,四信,宏电 才茂 0 2018-03-08 18:11:49.909+08 2018-03-21 16:47:05.851+08 4 0a80b74d-7acc-45c9-a06f-380d7d613626 t f
+67 12 \N Variable \N \N \N \N \N 2018-01-12 14:10:12.233+08 2018-01-12 14:10:12.238+08 5 06b0f2ee-1759-4e35-9c6f-724c06a28838 t f
+107 subnet 子网 Variable 25 0 9999 1 2018-03-08 18:15:50.012+08 2018-08-31 09:50:27.918+08 1 7697235e-a619-4da5-ac6e-9a76a6e59a78 t f
+70 34 343 Variable \N 3 2 5 2 \N 2018-01-16 11:14:26.765+08 2018-01-16 11:14:26.77+08 2 93f2d601-f46f-4361-ae92-431401bd869d t f
+71 353 5 Variable 35 \N \N \N \N 2018-01-16 11:14:26.773+08 2018-01-16 11:14:26.777+08 4 93f2d601-f46f-4361-ae92-431401bd869d t f
+72 6 3 Variable \N 4 \N \N \N 2018-01-16 11:14:26.78+08 2018-01-16 11:14:26.783+08 5 93f2d601-f46f-4361-ae92-431401bd869d t f
+73 1dasd asd Variable \N 1 \N 56564 1 a a 2018-01-19 17:05:47.165+08 2018-01-19 17:05:47.169+08 1 c7a17601-0a46-4901-889f-ce98a95731be t f
+75 asad asdasd Variable \N asdasd \N \N \N asdas asdas 2018-01-22 17:22:06.979+08 2018-01-22 17:22:06.979+08 5 3d88a29a-ca10-482f-8643-4fd39d4b50e2 t f
+76 电压 电压 Variable \N 0 2 100 0 V 电压 2018-01-24 14:19:28.762+08 2018-01-24 14:19:28.765+08 2 2d974b4e-c841-430c-8cbf-c92f7d6a890d t f
+79 erwe rew Variable \N \N \N 267 23 \N 2018-01-25 16:18:55.062+08 2018-01-25 16:18:55.066+08 1 b2d60094-05d4-473d-a62d-e1cd0ebd557b t f
+100 tj 关联 Variable false 0 2018-03-07 17:50:36.396+08 2018-03-29 14:21:34.146+08 3 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e t f
+92 channel 通道 Variable 1,2,3,4,5,6,7,8 1 0 2018-03-07 17:46:21.352+08 2018-03-30 10:54:53.809+08 4 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e t f
+74 name 名称 Variable 122323,dfgdfg 122323 0 111 11 2018-01-22 10:15:47.491+08 2018-02-05 16:29:14.956+08 4 3d88a29a-ca10-482f-8643-4fd39d4b50e2 t f
+80 测量值1 测量值温度 Variable \N \N 5 100 -100 。c 2018-02-13 16:52:00.052+08 2018-02-13 16:52:00.068+08 2 39356c21-ccbc-496f-b760-0eab61591c6a t f
+81 属性1 常量1 Constant \N 100 \N \N \N 单位 属性描述 2018-03-01 11:59:16.807+08 2018-03-01 11:59:16.817+08 1 d9e8186c-3346-431a-8577-b7b7ea1d0798 t f
+83 id 设备id Variable \N \N \N \N \N 2018-03-07 11:51:57.336+08 2018-03-07 11:51:57.339+08 5 250ec8dc-2cd2-4056-88f4-863278485bba t f
+84 data 数据 Variable \N \N \N \N 2018-03-07 11:51:57.341+08 2018-03-07 11:51:57.344+08 5 250ec8dc-2cd2-4056-88f4-863278485bba t f
+85 worktype 工作模式 Variable terminal,relay,host,terminal+relay terminal \N \N \N \N 2018-03-07 14:48:51.8+08 2018-03-07 14:48:51.803+08 4 1490fd95-7804-4e0f-9afa-bdbe7bb7880f t f
+86 subnet 子网 Variable \N 23 \N 127 1 2018-03-07 14:48:51.805+08 2018-03-07 14:48:51.807+08 1 1490fd95-7804-4e0f-9afa-bdbe7bb7880f t f
+87 netid 本机地址 Variable \N \N \N 4096 1 2018-03-07 14:48:51.808+08 2018-03-07 14:48:51.813+08 1 1490fd95-7804-4e0f-9afa-bdbe7bb7880f t f
+88 destid 目标主机 Variable \N \N \N 4096 1 2018-03-07 14:48:51.815+08 2018-03-07 14:48:51.816+08 1 1490fd95-7804-4e0f-9afa-bdbe7bb7880f t f
+89 destid \N Variable \N 4 \N 4 3 \N 2018-03-07 14:55:17.481+08 2018-03-07 14:55:17.484+08 1 dfe5a4c0-1a35-48a4-9b20-e8c348a51f12 t f
+99 das 去直流 Variable \N true \N \N \N 2018-03-07 17:50:18.577+08 2018-03-07 17:50:18.577+08 3 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e t f
+101 enable 启用 Variable \N true \N \N \N 2018-03-07 17:50:56.525+08 2018-03-07 17:50:56.525+08 3 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e t f
+93 filterfreq 滤波频率 Variable 128 0 2048 64 Hz 2018-03-07 17:47:09.414+08 2018-03-30 11:06:19.995+08 1 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e t f
+102 port 端口 Variable \N 40002 \N 65535 1025 \N 2018-03-08 18:11:49.894+08 2018-03-08 18:11:49.899+08 1 0a80b74d-7acc-45c9-a06f-380d7d613626 t f
+103 id DTU编号 Variable 0 2018-03-08 18:11:49.902+08 2018-03-13 13:28:02.211+08 5 0a80b74d-7acc-45c9-a06f-380d7d613626 t f
+105 protocol 工作方式 Variable normal,idau idau \N \N \N 2018-03-08 18:11:49.915+08 2018-03-08 18:11:49.918+08 4 0a80b74d-7acc-45c9-a06f-380d7d613626 t f
+106 worktype 工作模式 Variable terminal,relay,host,terminal+relay terminal \N \N \N \N 2018-03-08 18:15:50.004+08 2018-03-08 18:15:50.009+08 4 7697235e-a619-4da5-ac6e-9a76a6e59a78 t f
+109 destid 目标主机地址 Variable \N 0 9999 1 2018-03-08 18:15:50.024+08 2018-03-13 10:33:08.543+08 1 7697235e-a619-4da5-ac6e-9a76a6e59a78 t f
+96 triggermode 触发方式 Variable 绝对值,上升沿,下降沿,峰值 绝对值 0 2018-03-07 17:48:49.684+08 2018-03-30 11:10:05.707+08 4 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e t f
+110 module 模块号 Variable 0 \N 2018-03-08 18:24:07.564+08 2018-07-17 15:07:22.912+08 5 7667c2d9-3c04-4818-bfeb-42f43b60af77 f f
+113 schannel 二级通道 Variable \N 0 \N 32 0 2018-03-08 18:24:07.583+08 2018-03-08 18:24:07.586+08 1 7667c2d9-3c04-4818-bfeb-42f43b60af77 t f
+114 enabled 是否启用 Variable \N true \N \N \N 2018-03-08 18:24:07.588+08 2018-03-08 18:24:07.591+08 3 7667c2d9-3c04-4818-bfeb-42f43b60af77 t f
+108 netid 本机地址 Variable \N 0 9999 1 2018-03-08 18:15:50.019+08 2018-03-13 10:33:00.999+08 1 7697235e-a619-4da5-ac6e-9a76a6e59a78 t f
+98 duration 时长 Variable 2 0 30 1 s 2018-03-07 17:49:55.069+08 2018-03-30 11:13:51.058+08 1 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e t f
+97 lagpoint 滞后点数 Variable 0 0 2048 0 2018-03-07 17:49:22.158+08 2018-03-30 11:14:44.296+08 1 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e t f
+112 sensorid 传感器ID Variable 1234 0 2147483647 1 2018-03-08 18:24:07.577+08 2018-07-17 10:51:35.293+08 1 7667c2d9-3c04-4818-bfeb-42f43b60af77 t f
+140 subnet 子网 Variable 25 0 9999 1 \N 2018-03-15 11:44:17.786+08 2018-08-14 10:21:20.514+08 1 d07a1774-312c-4497-adbb-6e3da9410cb6 t f
+145 channel 通道 Variable 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1 0 2018-03-15 11:50:29.316+08 2018-10-26 17:29:23.467+08 4 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+117 sensorid 传感器ID Variable 1234 0 2147483647 1 \N 2018-03-08 18:35:08.404+08 2018-07-17 14:45:54.78+08 1 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+119 enable 是否启用 Variable \N true \N \N \N 2018-03-08 18:35:08.417+08 2018-03-08 18:35:08.42+08 3 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+120 predelay 执行前延迟 Variable \N 1 \N 6000 0 百毫秒 2018-03-08 18:35:08.422+08 2018-03-08 18:35:08.425+08 1 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+121 postdelay 读取前延时 Variable \N 1 \N 6000 1 百毫秒 2018-03-08 18:35:08.427+08 2018-03-08 18:35:08.43+08 1 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+122 fid 公式ID Constant \N 17 \N \N \N 2018-03-08 18:35:08.432+08 2018-03-08 18:35:08.435+08 1 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+123 k 模量系数 Variable \N 1 16 999999 -999999 2018-03-08 18:35:08.437+08 2018-03-08 18:35:08.44+08 2 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+124 f0 频率初值 Variable \N 0 4 99999 -9999 Hz 2018-03-08 18:35:08.442+08 2018-03-08 18:35:08.444+08 2 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+125 kt 温度补偿系数 Variable \N 0 4 9999 -9999 2018-03-08 18:35:08.446+08 2018-03-08 18:35:08.449+08 2 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+126 t0 温度初值 Variable \N 20 3 999 -999 2018-03-08 18:35:08.451+08 2018-03-08 18:35:08.453+08 2 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+141 worktype 工作模式 Variable terminal,relay,host,terminal+relay terminal \N \N \N 2018-03-15 11:44:17.793+08 2018-03-15 11:44:17.797+08 4 d07a1774-312c-4497-adbb-6e3da9410cb6 t f
+130 2 \N Variable \N 3.333 4 33 3 \N 2018-03-12 17:08:28.814+08 2018-03-12 17:08:28.814+08 2 c6167a22-bb4f-4353-8ea1-5653c69e926b t f
+131 channel 通道 Variable \N 1 \N 128 1 \N 2018-03-15 09:45:54.328+08 2018-03-15 09:45:54.328+08 1 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c t f
+91 samplefreq 采样频率 Variable 1024 0 2048 32 Hz 2018-03-07 17:45:29.328+08 2019-10-24 09:58:17.375+08 1 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e t f
+94 triglevel 触发电平 Variable 30 2 300 5 mV 2018-03-07 17:47:49.699+08 2020-12-01 15:38:23.633+08 2 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e t f
+82 url 接口地址 Variable http://10.8.25.254:7005/gnss/ 0 2018-03-06 11:15:39.594+08 2020-08-10 09:05:59.379+08 5 34ab0b66-1ce3-4462-ad0c-520d349ca04c t f
+95 amplification 放大倍数 Variable 1,10,100,1000 1 0 2018-03-07 17:48:19.77+08 2020-12-28 16:28:05.08+08 4 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e t f
+142 destid 目标主机地址 Variable \N \N \N 9999 1 2018-03-15 11:44:17.8+08 2018-03-15 11:44:17.804+08 1 d07a1774-312c-4497-adbb-6e3da9410cb6 t f
+159 module 模块号 Variable \N \N \N \N \N 2018-03-23 14:58:59.671+08 2018-03-23 14:58:59.686+08 5 ad4f23f8-9213-4194-97ce-209a34596649 t f
+132 module 模块号 Variable 0 \N 2018-03-15 09:46:22.474+08 2018-03-15 10:10:50.805+08 5 8cc1433a-4b40-4671-ba91-e0ddd2e7c13c f f
+133 module 模块号 Variable 0 \N 2018-03-15 11:39:21.655+08 2018-04-11 17:12:56.556+08 5 d4f271b6-567a-4880-beb0-161b33ac2094 t f
+118 channel 通道 Variable 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1 0 2018-03-08 18:35:08.411+08 2018-08-29 11:57:58.244+08 4 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+143 netid 本机地址 Variable \N \N \N 9999 1 2018-03-15 11:44:17.805+08 2018-03-15 11:44:17.807+08 1 d07a1774-312c-4497-adbb-6e3da9410cb6 t f
+136 schannel 二级通道 Variable \N 0 \N 32 0 2018-03-15 11:39:21.686+08 2018-03-15 11:39:21.689+08 1 d4f271b6-567a-4880-beb0-161b33ac2094 t f
+137 enabled 是否启用 Variable \N true \N \N \N 2018-03-15 11:39:21.692+08 2018-03-15 11:39:21.695+08 3 d4f271b6-567a-4880-beb0-161b33ac2094 t f
+139 postdelay 读取记录前延迟 Variable 35 0 600 0 2018-03-15 11:39:21.711+08 2018-07-31 15:41:37.156+08 1 d4f271b6-567a-4880-beb0-161b33ac2094 t f
+135 sensorid 传感器ID Variable 0 2147483647 1 2018-03-15 11:39:21.68+08 2018-03-15 11:39:47.175+08 1 d4f271b6-567a-4880-beb0-161b33ac2094 t f
+144 sensorid 传感器ID Variable \N \N \N 2147483647 1 \N 2018-03-15 11:50:29.31+08 2018-03-15 11:50:29.314+08 1 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+134 channel 通道号 Variable 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1 0 2018-03-15 11:39:21.672+08 2018-10-26 16:48:58.721+08 4 d4f271b6-567a-4880-beb0-161b33ac2094 t f
+146 enable 是否启用 Variable \N true \N \N \N 2018-03-15 11:50:29.324+08 2018-03-15 11:50:29.326+08 3 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+147 predelay 执行前延迟 Variable \N 1 \N 6000 0 百毫秒 2018-03-15 11:50:29.328+08 2018-03-15 11:50:29.33+08 1 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+155 id DTU编号 Variable \N \N \N \N 2018-03-19 17:05:41.298+08 2018-03-19 17:05:41.308+08 5 816805e0-09d0-45d0-866f-b305bcb16111 t f
+149 fid 公式ID Constant \N 17 \N \N \N 2018-03-15 11:50:29.337+08 2018-03-15 11:50:29.339+08 1 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+150 k 模量系数 Variable \N 1 16 999999 -999999 2018-03-15 11:50:29.341+08 2018-03-15 11:50:29.344+08 2 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+151 f0 频率初值 Variable \N 0 4 99999 -9999 Hz 2018-03-15 11:50:29.345+08 2018-03-15 11:50:29.348+08 2 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+152 kt 温度补偿系数 Variable \N 0 4 9999 -9999 2018-03-15 11:50:29.35+08 2018-03-15 11:50:29.355+08 2 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+153 t0 温度初值 Variable \N 20 3 999 -999 2018-03-15 11:50:29.359+08 2018-03-15 11:50:29.362+08 2 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+148 postdelay 读取前延时 Variable 1 0 6000 1 百毫秒 2018-03-15 11:50:29.333+08 2018-03-15 11:51:41.349+08 1 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+154 port \N Variable \N 40002 \N 40005 40000 \N 2018-03-19 17:05:41.291+08 2018-03-19 17:05:41.295+08 1 816805e0-09d0-45d0-866f-b305bcb16111 t f
+160 channel 通道 Variable \N 1 \N 128 1 2018-03-23 14:58:59.689+08 2018-03-23 14:58:59.693+08 1 ad4f23f8-9213-4194-97ce-209a34596649 t f
+156 protocol 工作方式 Variable modbus,idau idau 0 2018-03-19 17:05:41.31+08 2018-03-19 17:10:39.458+08 4 816805e0-09d0-45d0-866f-b305bcb16111 t f
+157 vendor 供应商 Variable 才茂,四信,宏电 才茂 0 2018-03-19 17:05:41.314+08 2018-03-20 10:36:16.015+08 4 816805e0-09d0-45d0-866f-b305bcb16111 t f
+158 protocol 协议 Variable Modbus,iDAU Modbus \N \N \N \N 应用协议 \N \N 4 3dfadb0e-7608-49e1-aa43-24f7442b424a f f
+162 1111111 1 Variable \N 125 1 133 122 \N 2018-03-28 15:38:46.027+08 2018-03-28 15:38:46.033+08 2 f5115163-46ca-4e11-ac6e-d1be363871d1 t f
+163 adsfasdfas adfasdf Tag \N \N \N \N \N 13 2018-04-06 12:23:30.473+08 2018-04-06 12:23:30.482+08 1 ca2e74c9-b28e-4826-b922-074f4f657e51 t f
+164 eqwrqw \N Variable \N \N \N 31 1 \N 2018-04-06 12:23:47.485+08 2018-04-06 12:23:47.485+08 1 ca2e74c9-b28e-4826-b922-074f4f657e51 t f
+138 predelay 执行前延迟 Variable 25 0 600 0 2018-03-15 11:39:21.707+08 2018-07-31 15:41:30.92+08 1 d4f271b6-567a-4880-beb0-161b33ac2094 t f
+166 port 端口 Variable \N \N \N 65535 1025 2018-04-08 23:15:31.258+08 2018-04-08 23:15:31.272+08 1 cb26d851-bb8b-4390-9d70-75c74bef520a t f
+167 vendor 供应商 Variable 才茂,四信,宏电 才茂 \N \N \N 2018-04-08 23:15:31.276+08 2018-04-08 23:15:31.282+08 4 cb26d851-bb8b-4390-9d70-75c74bef520a t f
+165 id DTUID Variable 0 \N 2018-04-08 23:15:31.245+08 2018-04-08 23:15:56.557+08 5 cb26d851-bb8b-4390-9d70-75c74bef520a t f
+168 escape 转义 Variable \N true \N \N \N 2018-04-08 23:15:31.285+08 2018-04-08 23:15:31.288+08 3 cb26d851-bb8b-4390-9d70-75c74bef520a t f
+169 protocol 协议 Variable Modbus,iDAU iDAU \N \N \N 2018-04-08 23:15:31.576+08 2018-04-08 23:15:31.589+08 4 cb26d851-bb8b-4390-9d70-75c74bef520a t f
+170 温湿度传感器 \N Variable \N \N 2 35.00 1.00 \N 2018-04-24 15:22:29.619+08 2018-04-24 15:22:29.632+08 2 d357249e-6ccf-4d1b-8546-c57c18fa121c t f
+171 test sss Variable \N \N \N 2222 1 \N 2018-04-27 16:04:31.657+08 2018-04-27 16:04:31.661+08 1 0e98e5cb-6e50-4d85-940b-b538ce71dc14 t f
+172 123456 hj Variable \N 12 \N 12 12 】、 】、 2018-05-28 17:33:01.153+08 2018-05-28 17:33:01.153+08 1 c8eeed37-ec79-49a9-b3d8-68b7343e0334 t f
+174 url 接口地址 Variable \N \N \N \N \N 2018-06-13 16:54:48.662+08 2018-06-13 16:54:48.662+08 5 5ef40d3b-0094-45fb-9663-892c5c4e270d t f
+203 k 模量系数 Variable \N 1 16 999999 -999999 2018-07-17 16:59:01.18+08 2018-07-17 16:59:01.18+08 2 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+178 URL 主机地址 Variable \N \N \N \N \N 2018-06-25 16:37:11.5+08 2018-06-25 16:37:11.505+08 5 639a37c9-637b-46e7-97ac-7b5991155e02 t f
+180 ClientID 客户端ID Variable \N \N \N \N 2018-06-25 16:37:11.526+08 2018-06-25 16:37:11.529+08 5 639a37c9-637b-46e7-97ac-7b5991155e02 f f
+183 Persistent 长连接 Variable \N true \N \N \N 2018-06-25 16:37:11.542+08 2018-06-25 16:37:11.545+08 3 639a37c9-637b-46e7-97ac-7b5991155e02 f f
+184 Username 用户 Variable \N \N \N \N 2018-06-25 16:37:11.547+08 2018-06-25 16:37:11.549+08 5 639a37c9-637b-46e7-97ac-7b5991155e02 f f
+185 Password 密码 Variable \N \N \N \N 2018-06-25 16:37:11.551+08 2018-06-25 16:37:11.554+08 5 639a37c9-637b-46e7-97ac-7b5991155e02 f f
+176 port port Variable \N 0 65525 1025 \N 2018-06-15 17:08:09.978+08 2018-07-03 14:35:32.78+08 1 452e3349-a87b-4b5b-97f9-7dc730f910fa t f
+205 kt 温度补偿系数 Variable \N 0 4 999 -999 2018-07-17 17:08:01.278+08 2018-07-17 17:08:01.278+08 2 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+188 channel 通道号 Variable \N 1 \N 128 1 2018-07-17 16:30:52.771+08 2018-07-17 16:30:52.775+08 1 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22 t f
+179 SubscribeTopic 订阅主题 Variable 0 2018-06-25 16:37:11.509+08 2019-12-06 17:23:40.552+08 5 639a37c9-637b-46e7-97ac-7b5991155e02 t f
+204 f0 频率初值 Variable 0 4 99999 0 Hz 2018-07-17 16:59:57.457+08 2019-09-19 14:45:21.781+08 2 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+181 PublishTopic 发布主题 Variable 0 2018-06-25 16:37:11.532+08 2019-12-06 17:29:56.459+08 5 639a37c9-637b-46e7-97ac-7b5991155e02 f f
+161 escape 转义 Variable true \N \N \N \N 是否转义 \N \N 3 3dfadb0e-7608-49e1-aa43-24f7442b424a f f
+190 channel 通道号 Variable \N 1 \N 64 1 2018-07-17 16:37:48.5+08 2018-07-17 16:37:48.5+08 1 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1 t f
+189 module 模块号 Variable 0 \N 2018-07-17 16:37:06.298+08 2018-07-17 16:45:53.372+08 5 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1 t f
+198 predelay 执行前延迟 Variable 25 0 6000 0 \N 2018-07-17 16:55:05.799+08 2018-07-23 16:55:49.954+08 1 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+197 schannel 子通道号 Variable 1 0 32 0 2018-07-17 16:52:51.827+08 2018-07-17 16:53:15.036+08 1 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1 t f
+201 channel 通道号 Variable \N 1 \N 64 1 2018-07-17 16:57:31.166+08 2018-07-17 16:57:31.166+08 1 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+206 t0 温度初值 Variable \N 20 3 999 -999 ℃ 2018-07-17 17:08:40.31+08 2018-07-17 17:08:40.31+08 2 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+207 triggerjion 定时采样间隔 Variable \N 0 \N 6000 0 s 2018-07-17 17:17:35.22+08 2018-07-17 17:17:35.22+08 1 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22 t f
+208 triggersample 定时采样时长 Variable \N 0 \N 6000 0 s 2018-07-17 17:18:29.572+08 2018-07-17 17:18:29.572+08 1 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22 t f
+209 sampleduration 加速度触发采样时长 Variable \N 0 \N 6000 0 s 2018-07-17 17:19:10.425+08 2018-07-17 17:19:10.425+08 1 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22 t f
+211 filterfreq 滤波频率 Variable \N 1 4 99999 -9999 Hz 2018-07-17 17:21:08.2+08 2018-07-17 17:21:08.2+08 2 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22 t f
+210 samplefreq 采样频率 Variable 1 4 99999 -9999 Hz 2018-07-17 17:20:12.132+08 2018-07-17 17:21:15.109+08 2 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22 t f
+214 triggerlevel 触发加速度 Variable \N 1.1 4 9999 -999 g 2018-07-17 17:27:17.071+08 2018-07-17 17:27:17.071+08 2 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22 t f
+199 postdelay 读取前延时 Variable 35 0 6000 0 2018-07-17 16:55:30.851+08 2018-07-23 16:55:56.014+08 1 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+212 lagpionts 滞后点数 Variable 1 3 1024 0 2018-07-17 17:22:45.138+08 2018-07-23 17:28:00.179+08 2 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22 t f
+225 switchinterval 485切换时间 Variable \N 5 \N 3600 0 \N ms 2018-07-24 10:33:32.313+08 2018-07-24 10:33:32.313+08 1 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1 t f
+216 postdelay 读取前延时 Variable 35 0 6000 1 百毫秒 2018-07-17 17:28:52.478+08 2018-07-26 09:53:21.588+08 1 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22 t f
+175 port \N Variable \N 0 51245 51230 \N 2018-06-15 17:06:35.826+08 2018-07-30 14:20:33.402+08 1 6619c155-5a30-4c92-b738-816302f0c4ed t f
+223 frequencyid 频谱ID Variable \N 1 \N \N \N 2018-07-24 10:29:19.935+08 2018-07-24 10:29:19.935+08 5 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+224 collectoption 采集选项 Variable 1,2,3 3 \N \N \N 1,只采集温度,2,只采集频率,3,采集频率与温度 2018-07-24 10:32:02.292+08 2018-07-24 10:32:02.292+08 4 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+215 predelay 执行前延迟 Variable 25 0 6000 0 百毫秒 2018-07-17 17:28:19.937+08 2018-07-26 09:52:50.016+08 1 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22 t f
+226 module 模块号 Variable \N \N \N \N \N 2018-07-26 09:54:46.297+08 2018-07-26 09:54:46.297+08 5 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22 t f
+227 username 用户名 Variable \N \N \N \N \N 2018-07-26 16:30:09.805+08 2018-07-26 16:30:09.813+08 5 71458c57-c197-4b3c-9171-2cdc5658201e t f
+228 password 密码 Variable \N \N \N \N 2018-07-26 16:30:09.818+08 2018-07-26 16:30:09.823+08 5 71458c57-c197-4b3c-9171-2cdc5658201e t f
+266 worktype 工作模式 Variable terminal,relay,host,terminal+relay terminal \N \N \N 2018-08-28 17:41:58.176+08 2018-08-28 17:41:58.178+08 4 30e6dca7-ede5-48be-9952-9fb056b2e9d1 t f
+230 module 模块号 Variable \N \N \N \N \N 2018-07-27 11:53:34.926+08 2018-07-27 11:53:34.926+08 5 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e t f
+231 url \N Variable \N 1 \N \N \N \N 2018-07-27 17:05:12.193+08 2018-07-27 17:05:12.196+08 5 7fd05290-f814-4049-812f-b8c7865ec221 t f
+232 moduleid 模块号 Variable 1000 0 \N 2018-07-31 16:38:16.983+08 2018-09-08 11:29:51.632+08 5 6eeb1913-71e2-40b2-ae39-c8750cbdefd7 f f
+233 port 端口 Variable \N 40001 \N 65535 1025 \N 服务侧监听端口 2018-07-31 16:41:27.159+08 2018-07-31 16:41:27.159+08 1 6eeb1913-71e2-40b2-ae39-c8750cbdefd7 t f
+234 vendor 供应商 Variable 才茂,四信,宏电 才茂 \N \N \N 供应商, 会影响控制帧 2018-07-31 16:42:07.888+08 2018-07-31 16:42:07.888+08 4 6eeb1913-71e2-40b2-ae39-c8750cbdefd7 t f
+235 escape 是否转义 Variable \N true \N \N \N 2018-07-31 16:42:32.196+08 2018-07-31 16:42:32.196+08 3 6eeb1913-71e2-40b2-ae39-c8750cbdefd7 t f
+236 protocol 协议 Variable Modbus,iDAU Modbus \N \N \N 2018-07-31 16:43:04.056+08 2018-07-31 16:43:04.056+08 4 6eeb1913-71e2-40b2-ae39-c8750cbdefd7 t f
+237 id ID Variable 12345678 0 \N 2018-08-01 10:13:44.62+08 2018-08-01 10:16:45.402+08 5 6eeb1913-71e2-40b2-ae39-c8750cbdefd7 t f
+240 ot DTU等待上线时间 Variable \N 60 \N 60000 0 2018-08-01 16:23:00.496+08 2018-08-01 16:23:00.496+08 1 6eeb1913-71e2-40b2-ae39-c8750cbdefd7 t f
+241 acq 等待应答时间 Variable \N 11 \N 60000 0 2018-08-01 16:23:39.258+08 2018-08-01 16:23:39.258+08 1 6eeb1913-71e2-40b2-ae39-c8750cbdefd7 t f
+242 delay 休眠延时 Variable \N 5 \N 6000 0 2018-08-01 16:24:10.718+08 2018-08-01 16:24:10.718+08 1 6eeb1913-71e2-40b2-ae39-c8750cbdefd7 t f
+200 fid 公式ID Variable 1 0 2018-07-17 16:56:57.402+08 2019-05-27 09:20:29.536+08 5 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+191 predelay 前延时 Variable 25 0 600 0 百毫秒 2018-07-17 16:38:48.251+08 2019-06-05 11:03:26.296+08 1 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1 t f
+192 postdelay 后延时 Variable 35 0 600 0 百毫秒 2018-07-17 16:39:21.201+08 2019-06-05 11:03:35.472+08 1 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1 t f
+253 url \N Variable \N \N \N \N \N 2018-08-17 11:15:21.723+08 2018-08-17 11:15:21.73+08 5 9359f4a8-67a2-4354-b5e6-e7473d0a5268 t f
+254 Persistent 登录用户 Variable \N \N \N \N \N 2018-08-17 11:21:51.744+08 2018-08-17 11:21:51.744+08 5 96b665c2-5314-4144-83d3-7db169ef9416 t f
+243 node_id 节点号 Variable \N \N \N \N \N 2018-08-01 17:42:56.963+08 2018-08-01 17:42:56.963+08 5 d0ad76ed-4f11-4355-b876-7f1b04037ae1 t f
+244 node_channelId 节点通道 Variable 1 0 32 0 \N 2018-08-03 07:26:29.247+08 2018-08-03 07:26:51.934+08 1 876d87b1-cccb-4847-80ea-dabfc20a2175 t f
+238 node_channelId 节点通道号 Variable 1 0 32 0 \N 2018-08-01 16:18:08.703+08 2018-08-03 07:27:05.984+08 1 c43e054f-dbeb-43c0-9702-4bc9bf7fdcd1 t f
+255 Password 登录密码 Variable 0 2018-08-17 11:22:45.791+08 2018-08-17 11:22:55.653+08 5 96b665c2-5314-4144-83d3-7db169ef9416 f f
+246 channel 通道号 Variable 1,2,3,4,5,6,7,8 1 \N \N \N \N 2018-08-09 16:15:32.344+08 2018-08-09 16:15:32.347+08 4 6f8504db-8b86-4b33-a0c6-721249b63f46 t f
+256 UserName 登录用户 Variable \N username \N \N \N 2018-08-17 11:23:26.958+08 2018-08-17 11:23:26.958+08 5 96b665c2-5314-4144-83d3-7db169ef9416 t f
+245 module 设备Id Variable 1 0 \N 2018-08-09 16:12:18.159+08 2018-08-09 16:29:18.739+08 5 2c95c010-e14a-4284-89d5-a69fc7f2ed37 t f
+247 module 节点号 Variable \N 1 \N 9999 1 \N 2018-08-14 16:17:09.862+08 2018-08-14 16:17:09.87+08 1 3d51e3f3-9e3c-4b50-973a-fa7f80af4ba5 t f
+258 PublishTopic 发布主题 Variable 0 2018-08-17 11:24:11.933+08 2018-08-17 11:24:17.509+08 5 96b665c2-5314-4144-83d3-7db169ef9416 t f
+257 PublishQos 发布Qos Variable 0,1,2 2 0 2018-08-17 11:23:54.826+08 2018-08-17 11:24:21.903+08 4 96b665c2-5314-4144-83d3-7db169ef9416 t f
+259 SubscribeTopic 订阅主题 Variable \N \N \N \N 2018-08-17 11:24:41.956+08 2018-08-17 11:24:41.956+08 5 96b665c2-5314-4144-83d3-7db169ef9416 t f
+260 clientId ClientID Variable \N IOTA_CLIENT \N \N \N 客户端ID(可选 2018-08-17 11:25:17.007+08 2018-08-17 11:25:17.007+08 5 96b665c2-5314-4144-83d3-7db169ef9416 t f
+261 url Variable \N tcp://localhost:1883 \N \N \N Mqtt Broker地址 2018-08-17 11:25:39.901+08 2018-08-17 11:25:39.901+08 5 96b665c2-5314-4144-83d3-7db169ef9416 t f
+262 topic 主题 Variable \N zhou \N \N \N \N 2018-08-17 11:34:51.605+08 2018-08-17 11:34:51.608+08 5 8280ccac-494e-4784-bd0c-5ffe97746993 t f
+263 brokers Brokers Variable \N \N \N \N 以英文逗号(,)分隔的Kafka Broker列表 2018-08-17 11:34:51.611+08 2018-08-17 11:34:51.613+08 5 8280ccac-494e-4784-bd0c-5ffe97746993 t f
+264 escapegw 网关转义 Variable \N false \N \N \N \N \N \N \N 3 3dfadb0e-7608-49e1-aa43-24f7442b424a f f
+265 subnet 子网 Variable \N 25 \N 9999 1 \N 2018-08-28 17:41:58.164+08 2018-08-28 17:41:58.168+08 1 30e6dca7-ede5-48be-9952-9fb056b2e9d1 t f
+267 destid 目标主机地址 Variable \N \N \N 9999 1 2018-08-28 17:41:58.183+08 2018-08-28 17:41:58.189+08 1 30e6dca7-ede5-48be-9952-9fb056b2e9d1 t f
+268 netid 本机地址 Variable \N \N \N 9999 1 2018-08-28 17:41:58.191+08 2018-08-28 17:41:58.194+08 1 30e6dca7-ede5-48be-9952-9fb056b2e9d1 t f
+269 mode 采集模式 Variable 0,1 0 \N \N \N 2018-08-28 17:41:58.202+08 2018-08-28 17:41:58.204+08 4 30e6dca7-ede5-48be-9952-9fb056b2e9d1 t f
+270 大大大 啊 Variable \N 啊 \N \N \N 12 大大 2018-08-30 14:15:27.967+08 2018-08-30 14:15:27.974+08 5 4b408fb8-a08f-429b-bbc4-003881a2a4e7 t f
+271 channel 关联通道 Variable \N 1 \N \N \N \N a,b,c 2018-09-07 09:14:23.401+08 2018-09-07 09:14:23.41+08 5 e4049f35-3902-4610-ac6e-45c01236a230 t f
+273 accerange 加速度范围 Variable \N 0 \N \N \N \N 2018-09-08 14:35:03.303+08 2018-09-08 14:35:03.303+08 5 4cbee03c-ad84-4c7a-a379-ed4bbbfaef22 t f
+274 dcdriftadj 直流漂移调整系数 Variable \N 0 2 6255 0 \N 2018-09-27 10:00:23.599+08 2018-09-27 10:00:23.599+08 2 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e t f
+275 amplitudeadj 幅值修正参数 Variable 0 2 51241 0 2018-09-27 10:01:21.326+08 2018-09-27 10:01:32.343+08 2 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e f f
+277 channel 通道 Variable \N 1 \N 8 1 \N 2018-10-10 11:20:39.661+08 2018-10-10 11:20:39.666+08 1 6c047530-0656-4cb4-a416-f4ac00b015f9 t f
+278 node 设备节点号 Variable 1 0 32 1 \N 2018-10-10 11:22:51.154+08 2018-10-16 14:10:13.967+08 1 0af1af55-38cd-43c1-abe3-b71570342d40 t f
+279 pmtpf 阈值上限 Variable \N 2 9999 -1999 \N 2018-10-25 15:26:12.317+08 2018-10-25 15:26:21.242+08 2 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1 f f
+311 method Variable POST,GET,DELETE \N \N \N \N 2018-11-13 13:35:18.457+08 2018-11-13 13:35:18.459+08 4 8835d3fd-b82b-4de9-bd9f-a67f40a210fc t f
+300 module 模块号 Variable \N 1 \N 62553 1 \N 2018-10-26 17:39:25.361+08 2018-10-26 17:39:25.361+08 1 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+301 id id Variable \N \N \N \N \N 2018-10-29 16:03:35.064+08 2018-10-29 16:03:35.064+08 5 66537b16-1e7d-4823-b03e-676459f5891d t f
+302 port port Variable 0 60009 60000 2018-10-29 16:03:51.407+08 2018-10-29 16:04:41.422+08 1 66537b16-1e7d-4823-b03e-676459f5891d t f
+304 url url Variable \N \N \N \N 2018-10-29 16:05:30.411+08 2018-10-29 16:05:30.411+08 5 66537b16-1e7d-4823-b03e-676459f5891d t f
+303 method method Variable POST,GET,DELETE \N 0 \N 2018-10-29 16:05:12.627+08 2018-10-29 16:07:05.071+08 4 66537b16-1e7d-4823-b03e-676459f5891d t f
+305 module 模块号 Variable \N 1 \N \N \N \N 2018-11-01 07:27:18.624+08 2018-11-01 07:27:18.624+08 5 23b5d4f7-5be8-4e28-99a6-e797eaedb08a t f
+306 channelNo 通道号 Variable \N 1 \N 255 1 2018-11-01 07:27:48.397+08 2018-11-01 07:27:48.397+08 1 23b5d4f7-5be8-4e28-99a6-e797eaedb08a t f
+314 k 模量系数 Variable \N 1 16 999999 -999999 \N 2018-11-22 17:39:33.529+08 2018-11-22 17:39:33.533+08 2 1aa841f1-d3fb-4523-9b54-e601d350c745 t f
+308 url \N Variable \N \N \N \N \N 2018-11-13 13:35:18.442+08 2018-11-13 13:35:18.445+08 5 8835d3fd-b82b-4de9-bd9f-a67f40a210fc t f
+309 id Variable \N \N \N 60009 60000 2018-11-13 13:35:18.448+08 2018-11-13 13:35:18.451+08 1 8835d3fd-b82b-4de9-bd9f-a67f40a210fc t f
+310 port Variable \N \N \N \N 2018-11-13 13:35:18.453+08 2018-11-13 13:35:18.455+08 5 8835d3fd-b82b-4de9-bd9f-a67f40a210fc t f
+315 f0 频率初值 Variable \N 0 4 99999 -99999 Hz 2018-11-22 17:39:33.535+08 2018-11-22 17:39:33.538+08 2 1aa841f1-d3fb-4523-9b54-e601d350c745 t f
+316 kt 温度补偿系数 Variable \N 0 4 9999 -9999 2018-11-22 17:39:33.54+08 2018-11-22 17:39:33.542+08 2 1aa841f1-d3fb-4523-9b54-e601d350c745 t f
+317 t0 温度初值 Variable \N 20 3 999 -999 2018-11-22 17:39:33.544+08 2018-11-22 17:39:33.546+08 2 1aa841f1-d3fb-4523-9b54-e601d350c745 t f
+318 温度 温度-show Variable \N 0.2 2 100 0 摄氏度 温度 2018-11-23 14:41:37.248+08 2018-11-23 14:41:37.252+08 2 c60b6244-e9f6-467c-93f9-48bcc4c54f56 t f
+299 pitid 编号 Variable pit_1 0 \N 2018-10-26 16:33:28.053+08 2018-12-06 09:49:17.038+08 5 5cc45782-5d73-4354-b2c1-4904e284c95b t f
+319 szyksensorid 传感器编号 Variable 0 \N 2018-12-20 14:54:02.335+08 2018-12-20 15:46:27.117+08 5 12cbda5e-cdad-4e5e-91b8-4489f816f00d t f
+327 dis 采集粒度 Variable \N 5 \N 600 0 2018-12-26 11:45:10.077+08 2018-12-26 11:45:10.08+08 1 a8f77633-9fe3-4228-b557-34a9108b3d50 t f
+252 channelid 通道 Variable 1 0 32 1 _ 2018-08-16 10:57:12.79+08 2019-05-23 17:28:11.259+08 1 9aece67a-050e-41a4-9b7d-7d890212f385 t f
+312 nodeid 通道下节点 Variable 1 0 32 1 _ 通道下的节点 2018-11-22 13:50:47.72+08 2019-05-23 17:29:04.07+08 1 9aece67a-050e-41a4-9b7d-7d890212f385 t f
+324 escape 是否转义 Constant false 0 2018-12-26 11:45:10.06+08 2019-06-04 19:40:28.972+08 3 a8f77633-9fe3-4228-b557-34a9108b3d50 t f
+280 pmten 阈值下限 Variable \N 2 1999 -9999 2018-10-25 15:26:49.666+08 2019-12-12 13:53:53.808+08 2 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1 f f
+276 triggerjoin 参与触发方式 Variable 不参与,参与 参与 0 2018-09-27 10:04:07.998+08 2020-12-28 17:33:28.178+08 4 bb7d8ca9-1d07-48df-8d0f-b1439c0b990e t f
+332 escape 转义 Variable false 0 是否转义 2018-12-27 15:23:24.87+08 2018-12-27 15:41:37.312+08 3 0f0c11cf-71ae-4bba-b9ba-95442f1fb714 t f
+323 vendor 供应商 Variable 才茂,四信,宏电 才茂 \N \N \N 供应商, 会影响控制帧 2018-12-26 11:45:10.054+08 2018-12-26 11:45:10.058+08 4 a8f77633-9fe3-4228-b557-34a9108b3d50 t f
+321 module 模块号 Variable 1102 0 9999 0 2018-12-21 16:53:27.331+08 2018-12-27 14:43:04.044+08 1 c00008f7-06d9-4907-b2e7-619374116b36 t f
+320 channel 通道 Variable 1 0 36 1 \N 2018-12-21 16:53:27.323+08 2018-12-27 14:43:08.6+08 1 c00008f7-06d9-4907-b2e7-619374116b36 t f
+328 id ID Variable \N 12345678 \N \N \N \N SNO, ID等 2018-12-27 15:23:24.836+08 2018-12-27 15:23:24.848+08 5 0f0c11cf-71ae-4bba-b9ba-95442f1fb714 t f
+329 port Variable \N 40005 \N 65535 1025 2018-12-27 15:23:24.855+08 2018-12-27 15:23:24.858+08 1 0f0c11cf-71ae-4bba-b9ba-95442f1fb714 t f
+330 model 型号 Variable \N \N \N \N 不同型号标识 2018-12-27 15:23:24.86+08 2018-12-27 15:23:24.863+08 5 0f0c11cf-71ae-4bba-b9ba-95442f1fb714 t f
+331 vendor 供应商 Variable 才茂,四信,宏电,众山,RTU 才茂 \N \N \N 供应商, 会影响控制帧处理 2018-12-27 15:23:24.864+08 2018-12-27 15:23:24.867+08 4 0f0c11cf-71ae-4bba-b9ba-95442f1fb714 t f
+337 enabled 是否启用 Variable \N true \N \N \N 2018-12-28 10:03:38.328+08 2018-12-28 10:03:38.33+08 3 6c0898f5-e8da-495b-8718-6efba367e3f1 t f
+333 protocol 协议 Variable Modbus,iDAU iDAU \N \N \N 应用协议 2018-12-27 15:23:24.874+08 2018-12-27 15:23:24.876+08 4 0f0c11cf-71ae-4bba-b9ba-95442f1fb714 t f
+334 channel 通道 Variable 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1 \N \N \N \N 2018-12-28 10:03:38.311+08 2018-12-28 10:03:38.316+08 4 6c0898f5-e8da-495b-8718-6efba367e3f1 t f
+335 module 模块号 Variable \N \N \N \N 2018-12-28 10:03:38.319+08 2018-12-28 10:03:38.322+08 5 6c0898f5-e8da-495b-8718-6efba367e3f1 t f
+336 schannel 二级通道 Variable \N 0 \N 32 0 2018-12-28 10:03:38.324+08 2018-12-28 10:03:38.326+08 1 6c0898f5-e8da-495b-8718-6efba367e3f1 t f
+326 id ID Variable 12345678 0 2018-12-26 11:45:10.071+08 2019-01-29 10:13:37.427+08 5 a8f77633-9fe3-4228-b557-34a9108b3d50 t f
+386 escape 是否转义 Variable \N true \N \N \N 2019-03-15 15:08:47.046+08 2019-03-15 15:08:47.049+08 3 6f9486b4-6b22-4fbd-a73a-9334e711badb t f
+387 protocol 协议 Variable Modbus,iDAU Modbus \N \N \N 2019-03-15 15:08:47.051+08 2019-03-15 15:08:47.054+08 4 6f9486b4-6b22-4fbd-a73a-9334e711badb t f
+388 id ID Variable \N 12345678 \N \N \N 2019-03-15 15:08:47.057+08 2019-03-15 15:08:47.06+08 5 6f9486b4-6b22-4fbd-a73a-9334e711badb t f
+356 schannel 子通道号 Variable \N 1 \N 32 0 \N 2019-01-21 11:43:37.879+08 2019-01-21 11:43:37.887+08 1 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+358 channel 通道号 Variable \N 1 \N 64 1 2019-01-21 11:43:37.901+08 2019-01-21 11:43:37.904+08 1 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+359 module 模块号 Variable \N \N \N \N 2019-01-21 11:43:37.907+08 2019-01-21 11:43:37.91+08 5 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+365 switchinterval 485切换时间 Variable \N 5 \N 3600 0 ms 2019-01-21 11:43:37.937+08 2019-01-21 11:43:37.939+08 1 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+366 pmtpf PM2.5联动阈值 Variable \N \N 2 9999 -1999 2019-01-21 11:43:37.941+08 2019-01-21 11:43:37.944+08 2 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+367 pmten PM10联动阈值 Variable \N \N 2 1999 -9999 2019-01-21 11:43:37.946+08 2019-01-21 11:43:37.949+08 2 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+374 noiseb 噪音参数B Variable 0 6 9999 -1999 \N 2019-01-21 17:44:31.335+08 2019-01-21 17:44:38.834+08 2 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+369 pm25b PM2.5参数B Variable \N 0 6 9999 -1999 2019-01-21 11:43:37.957+08 2019-01-21 11:43:37.96+08 2 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+368 pm25a PM2.5参数A Variable 1 6 9999 -1999 2019-01-21 11:43:37.951+08 2019-01-21 11:43:51.295+08 2 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+370 pm10a PM10参数A Variable \N 1 6 9999 -1999 \N 2019-01-21 11:44:49.786+08 2019-01-21 11:44:49.786+08 2 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+371 pm10b PM10参数B Variable \N 0 6 9999 -1999 2019-01-21 11:45:17.887+08 2019-01-21 11:45:17.887+08 2 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+372 noisea 噪音参数A Variable \N 1 6 9999 -1999 2019-01-21 11:46:49.306+08 2019-01-21 11:46:49.306+08 2 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+375 tempa 温度参数A Variable \N 1 6 9999 -1999 2019-01-21 17:45:09.368+08 2019-01-21 17:45:09.368+08 2 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+376 tempb 温度参数B Variable \N 0 6 9999 -1999 2019-01-21 17:45:37.924+08 2019-01-21 17:45:37.924+08 2 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+377 humia 湿度参数A Variable \N 1 6 9999 -1999 2019-01-21 17:46:00.049+08 2019-01-21 17:46:00.049+08 2 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+378 humib 湿度参数B Variable \N 0 6 9999 -1999 2019-01-21 17:46:25.787+08 2019-01-21 17:46:25.787+08 2 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+379 speeda 风速参数A Variable 1 6 9999 -1999 2019-01-21 17:46:49.055+08 2019-01-21 17:47:48.275+08 2 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+380 speedb 风速参数B Variable 0 6 9999 -1999 2019-01-21 17:47:06.865+08 2019-01-21 17:47:54.298+08 2 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+382 directionb 风向参数B Variable \N 0 6 9999 -1999 2019-01-21 17:48:22.206+08 2019-01-21 17:48:22.206+08 2 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+381 directiona 风向参数A Variable 1 6 9999 -1999 2019-01-21 17:47:39.879+08 2019-02-26 09:49:41.71+08 2 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+340 cd 冷起延迟 Variable 80 0 3600 0 s 2018-12-31 13:48:28.295+08 2019-04-08 13:57:23.25+08 1 a8f77633-9fe3-4228-b557-34a9108b3d50 t t
+361 predelay 前延时 Variable 25 0 600 0 百毫秒 2019-01-21 11:43:37.918+08 2019-06-05 11:02:29.228+08 1 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+342 dm 数据上传模式 Variable 文件,MOP MOP 0 2018-12-31 13:50:21.006+08 2019-04-08 13:57:13.283+08 4 a8f77633-9fe3-4228-b557-34a9108b3d50 t t
+341 wd 热起延迟 Variable 60 0 3600 0 s 2018-12-31 13:48:50.984+08 2019-04-08 13:57:29.591+08 1 a8f77633-9fe3-4228-b557-34a9108b3d50 t t
+339 predelay 前延时 Variable 25 0 600 0 百毫秒 2018-12-28 10:03:38.334+08 2019-06-05 11:01:57.146+08 1 6c0898f5-e8da-495b-8718-6efba367e3f1 t f
+343 diag 诊断 Variable true 0 2019-01-02 17:59:19.503+08 2019-05-22 14:30:40.985+08 3 a8f77633-9fe3-4228-b557-34a9108b3d50 t f
+362 postdelay 后延时 Variable 35 0 600 0 百毫秒 2019-01-21 11:43:37.923+08 2019-06-05 11:02:50.551+08 1 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+389 dis 采集粒度 Variable 5 0 9999 0 2019-03-15 15:08:47.062+08 2019-09-04 17:16:26.257+08 1 6f9486b4-6b22-4fbd-a73a-9334e711badb t f
+357 stopbits 停止位 Variable 1位,1.5位,2位 1位 0 停止位:0=1位,1=1.5位,2=2位 2019-01-21 11:43:37.894+08 2019-12-24 11:48:27.922+08 4 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+360 databits 数据位 Variable 7位,8位,9位 8位 0 0= 7位,1=8位,2=9位(STM32只支持8位和9位) 2019-01-21 11:43:37.912+08 2019-12-24 11:49:09.159+08 4 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+383 moduleid 模块号 Variable \N 1000 \N \N \N \N 2019-03-15 15:08:46.74+08 2019-03-15 15:08:47.032+08 5 6f9486b4-6b22-4fbd-a73a-9334e711badb t f
+384 port 端口 Variable \N 40001 \N 65535 1025 服务侧监听端口 2019-03-15 15:08:47.035+08 2019-03-15 15:08:47.038+08 1 6f9486b4-6b22-4fbd-a73a-9334e711badb t f
+385 vendor 供应商 Variable 才茂,四信,宏电 才茂 \N \N \N 供应商, 会影响控制帧 2019-03-15 15:08:47.04+08 2019-03-15 15:08:47.043+08 4 6f9486b4-6b22-4fbd-a73a-9334e711badb t f
+390 ot DTU等待上线时间 Variable \N 60 \N 60000 0 2019-03-15 15:08:47.068+08 2019-03-15 15:08:47.071+08 1 6f9486b4-6b22-4fbd-a73a-9334e711badb t f
+391 acq 等待应答时间 Variable \N 11 \N 60000 0 2019-03-15 15:08:47.073+08 2019-03-15 15:08:47.076+08 1 6f9486b4-6b22-4fbd-a73a-9334e711badb t f
+392 delay 休眠延时 Variable \N 5 \N 6000 0 \N 2019-03-15 15:09:16.459+08 2019-03-15 15:09:16.459+08 1 6f9486b4-6b22-4fbd-a73a-9334e711badb t f
+393 channel 通道号 Variable \N 1 \N 128 1 \N 2019-03-15 15:38:31.04+08 2019-03-15 15:38:31.043+08 1 936f5813-db0d-4a2a-a7bc-8d323024140b t f
+394 triggerjion 定时采样间隔 Variable \N 0 \N 6000 0 s 2019-03-15 15:38:31.047+08 2019-03-15 15:38:31.05+08 1 936f5813-db0d-4a2a-a7bc-8d323024140b t f
+395 triggersample 定时采样时长 Variable \N 0 \N 6000 0 s 2019-03-15 15:38:31.052+08 2019-03-15 15:38:31.054+08 1 936f5813-db0d-4a2a-a7bc-8d323024140b t f
+396 sampleduration 加速度触发采样时长 Variable \N 0 \N 6000 0 s 2019-03-15 15:38:31.056+08 2019-03-15 15:38:31.059+08 1 936f5813-db0d-4a2a-a7bc-8d323024140b t f
+397 filterfreq 滤波频率 Variable \N 1 4 99999 -99999 Hz 2019-03-15 15:38:31.061+08 2019-03-15 15:38:31.064+08 2 936f5813-db0d-4a2a-a7bc-8d323024140b t f
+398 samplefreq 采样频率 Variable \N 1 4 99999 -99999 Hz 2019-03-15 15:38:31.066+08 2019-03-15 15:38:31.068+08 2 936f5813-db0d-4a2a-a7bc-8d323024140b t f
+400 triggerlevel 触发加速度 Variable \N 1.1 4 9999 -9999 g 2019-03-15 15:38:31.074+08 2019-03-15 15:38:31.077+08 2 936f5813-db0d-4a2a-a7bc-8d323024140b t f
+401 lagpionts 滞后点数 Variable \N 1 3 1024 0 2019-03-15 15:38:31.357+08 2019-03-15 15:38:31.36+08 2 936f5813-db0d-4a2a-a7bc-8d323024140b t f
+402 postdelay 读取前延时 Variable \N 35 \N 6000 1 百毫秒 2019-03-15 15:38:31.362+08 2019-03-15 15:38:31.365+08 1 936f5813-db0d-4a2a-a7bc-8d323024140b t f
+403 predelay 执行前延迟 Variable \N 25 \N 6000 0 百毫秒 2019-03-15 15:38:31.367+08 2019-03-15 15:38:31.369+08 1 936f5813-db0d-4a2a-a7bc-8d323024140b t f
+404 module 模块号 Variable \N \N \N \N 2019-03-15 15:38:31.371+08 2019-03-15 15:38:31.374+08 5 936f5813-db0d-4a2a-a7bc-8d323024140b t f
+405 accerange 加速度范围 Variable \N 0 \N \N \N 2019-03-15 15:38:31.375+08 2019-03-15 15:38:31.379+08 5 936f5813-db0d-4a2a-a7bc-8d323024140b t f
+407 channel 通道号 Variable \N 1 \N 64 1 2019-03-15 15:52:20.898+08 2019-03-15 15:52:20.902+08 1 66a06e5d-a436-4d37-806b-919d8fd1c564 t f
+408 module 模块号 Variable \N \N \N \N 2019-03-15 15:52:20.904+08 2019-03-15 15:52:20.907+08 5 66a06e5d-a436-4d37-806b-919d8fd1c564 t f
+409 schannel 子通道号 Variable \N 1 \N 32 0 2019-03-15 15:52:20.909+08 2019-03-15 15:52:20.912+08 1 66a06e5d-a436-4d37-806b-919d8fd1c564 t f
+411 predelay 执行前延迟 Variable \N 25 \N 600 0 百毫秒 2019-03-15 15:52:20.918+08 2019-03-15 15:52:20.921+08 1 66a06e5d-a436-4d37-806b-919d8fd1c564 t f
+412 postdelay 读取记录前延迟 Variable \N 35 \N 600 0 百毫秒 2019-03-15 15:52:20.923+08 2019-03-15 15:52:20.925+08 1 66a06e5d-a436-4d37-806b-919d8fd1c564 t f
+415 switchinterval 485切换时间 Variable \N 5 \N 3600 0 ms 2019-03-15 15:52:20.935+08 2019-03-15 15:52:20.937+08 1 66a06e5d-a436-4d37-806b-919d8fd1c564 t f
+427 plcaddress PLC地址 Variable 40001 0 49999 40001 \N 2019-03-27 10:01:32.07+08 2019-03-27 10:15:18.786+08 1 68238334-fea4-4bc0-b1cd-98456c41faab t f
+422 mudule 模块号 Variable 1 0 256 1 \N 2019-03-19 15:14:16.571+08 2019-03-19 15:15:50.986+08 2 b425fff8-940f-467d-81f7-b456d8ad0b22 t f
+423 friyu \N Variable \N true \N \N \N \N 2019-03-19 16:42:30.265+08 2019-03-19 16:42:30.274+08 3 ac94d09e-3893-4f3d-b42b-0825be96e0c7 t f
+424 lyzhu gest Variable \N \N 2 10 0 \N 2019-03-21 18:19:57.154+08 2019-03-21 18:19:57.158+08 2 592592f9-ffc9-4ba5-b330-8dd7597524e1 t f
+322 port 端口 Variable 40004 0 65535 1025 \N 服务侧监听端口 2018-12-26 11:45:10.045+08 2019-04-03 11:37:36.353+08 1 a8f77633-9fe3-4228-b557-34a9108b3d50 t f
+325 protocol 协议 Variable Modbus,iDAU iDAU 0 2018-12-26 11:45:10.066+08 2019-04-03 14:28:48.971+08 4 a8f77633-9fe3-4228-b557-34a9108b3d50 t f
+428 node_id Point_ID Variable 1 0 \N 2019-04-08 10:58:08.397+08 2019-04-08 11:47:34.846+08 5 b3cb9990-288c-4f0d-a91a-547254d1d9c6 t f
+414 baudrate 波特率 Variable 2400,9600,19200,115200 9600 0 波特率:0=2400,1=9600,2=19200, 3=115200 2019-03-15 15:52:20.931+08 2019-09-06 11:48:22.745+08 4 66a06e5d-a436-4d37-806b-919d8fd1c564 t f
+338 postdelay 后延时 Variable 35 0 600 0 百毫秒 2018-12-28 10:03:38.331+08 2019-06-05 11:02:09.585+08 1 6c0898f5-e8da-495b-8718-6efba367e3f1 t f
+426 node 设备节点号 Variable 1 0 31 0 \N 2019-03-25 11:14:17.035+08 2019-04-09 10:10:21.224+08 1 0d963823-0c01-40c1-acc4-74d4eaaea996 t f
+425 channel 通道 Variable 1 0 31 0 \N 2019-03-25 11:13:15.331+08 2019-04-09 10:10:31.041+08 1 c3c19462-3221-4cca-8288-13f960d7ea5b t f
+430 node_id 节点号 Variable \N 1 \N 512 1 \N 2019-04-23 14:58:50.846+08 2019-04-23 14:58:50.857+08 1 7bc18b0f-46d5-403a-893a-029eed333a46 t f
+111 channel 通道 Variable 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1 0 2018-03-08 18:24:07.572+08 2019-04-23 17:21:20.805+08 4 7667c2d9-3c04-4818-bfeb-42f43b60af77 t f
+413 parity 校验位 Variable 无校验,奇校验,偶校验 无校验 0 校验位:0=无校验,1=奇校验,2=偶校验 2019-03-15 15:52:20.927+08 2019-09-06 11:48:43.414+08 4 66a06e5d-a436-4d37-806b-919d8fd1c564 t f
+433 1 \N Variable \N \N 3 300 0 \N 2019-04-29 11:24:33.643+08 2019-04-29 11:24:33.648+08 2 115dada1-714c-496e-b060-455f1ab2510c t f
+410 databits 数据位 Variable 7位,8位,9位 8位 0 数据位:0= 7位,1=8位,2=9位(STM32只支持8位和9位) 2019-03-15 15:52:20.914+08 2019-09-06 11:49:03.43+08 4 66a06e5d-a436-4d37-806b-919d8fd1c564 t f
+416 pmtpf 阈值上限 Variable \N 2 9999 -1999 2019-03-15 15:52:20.939+08 2020-04-05 10:58:07.435+08 2 66a06e5d-a436-4d37-806b-919d8fd1c564 f f
+417 pmten 阈值下限 Variable \N 2 1999 -9999 2019-03-15 15:52:20.943+08 2020-04-05 10:58:11.557+08 2 66a06e5d-a436-4d37-806b-919d8fd1c564 f f
+434 channel 关联通道 Variable 1 0 \N a,b,c 2019-04-29 15:00:42.319+08 2019-04-29 15:01:16.061+08 5 971ef4ab-bbb7-41e2-a5a1-0111b3a9de99 t f
+471 Stopbit 停止位 Variable 0.5位,1位,1.5位,2位 1位 \N \N \N 2019-07-02 10:01:12.311+08 2019-07-02 10:01:12.311+08 4 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+229 uri 接口地址 Variable 0 2018-07-26 16:30:09.827+08 2019-05-06 14:54:39.762+08 5 71458c57-c197-4b3c-9171-2cdc5658201e t f
+441 URL URL Variable \N tcp://10.8.25.21 \N \N \N \N 2019-05-15 20:58:47.812+08 2019-05-15 20:58:47.812+08 5 78fdd0b8-8d18-43a4-bd10-58ceee295bcc t f
+442 SubscribeTopic Topic Variable \N \N \N \N 2019-05-15 20:59:54.275+08 2019-05-15 20:59:54.275+08 5 78fdd0b8-8d18-43a4-bd10-58ceee295bcc t f
+443 PublishTopic \N Variable \N \N \N \N \N 2019-05-15 21:21:58.714+08 2019-05-15 21:21:58.714+08 5 78fdd0b8-8d18-43a4-bd10-58ceee295bcc t f
+444 persistent Persistent Variable \N true \N \N \N 2019-05-15 21:24:58.47+08 2019-05-15 21:24:58.47+08 3 78fdd0b8-8d18-43a4-bd10-58ceee295bcc t f
+473 password \N Variable \N \N \N \N \N 2019-07-18 12:04:05.655+08 2019-07-18 12:04:05.655+08 6 27a58884-75a3-4f5d-94f6-37cc15d419fb t f
+445 escapegw 网关转义 Constant false 0 2019-06-04 18:45:45.942+08 2019-06-04 20:38:02.505+08 3 a8f77633-9fe3-4228-b557-34a9108b3d50 t f
+116 postdelay 后延时 Variable 35 0 600 0 百毫秒 2018-03-08 18:24:07.879+08 2019-06-05 11:12:34.253+08 1 7667c2d9-3c04-4818-bfeb-42f43b60af77 t f
+115 predelay 前延时 Variable 25 0 600 0 百毫秒 2018-03-08 18:24:07.593+08 2019-06-05 11:12:54.604+08 1 7667c2d9-3c04-4818-bfeb-42f43b60af77 t f
+446 CheckOption 检测传感器状态 Variable \N true \N \N \N \N 2019-06-26 17:24:33.851+08 2019-06-26 17:24:33.851+08 3 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+447 VibratSamplFreq 振弦采样频率 Variable 8K,16K,32K 16K \N \N \N 2019-06-26 17:25:28.827+08 2019-06-26 17:25:28.827+08 4 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+448 AmplifierGain 放大器增益倍数 Variable 100倍,500倍 100倍 \N \N \N 2019-06-26 17:26:11.055+08 2019-06-26 17:26:11.055+08 4 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+449 Incentive 发送激励信号 Variable \N true \N \N \N 2019-06-26 17:26:37.51+08 2019-06-26 17:26:37.51+08 3 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+451 VibratSpectrum 上传振弦频谱 Variable \N false \N \N \N 2019-06-26 17:27:59.226+08 2019-06-26 17:27:59.226+08 3 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+487 triggermode 触发方式 Variable 绝对值,上升沿,下降沿,峰值 绝对值 \N \N \N 2019-08-22 11:10:43.442+08 2019-08-22 11:10:43.442+08 4 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500 t f
+452 Spectrumway 频谱历史位置 Variable 1 0 5 0 2019-06-26 17:28:58.566+08 2019-06-26 17:35:11.677+08 1 d0e8f529-c1bf-4146-beef-cd3056ea9787 t t
+454 Baudrate 波特率 Variable 9600,19200,115200 9600 \N \N \N 2019-06-26 17:37:20.03+08 2019-06-26 17:37:20.03+08 4 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+455 Databit 数据位 Variable 7,8,9 8 \N \N \N 2019-06-26 17:37:43.488+08 2019-06-26 17:37:43.488+08 4 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+456 Proofbit 校验位 Variable 无校验,奇校验,偶校验 无校验 \N \N \N 2019-06-26 17:38:28.535+08 2019-06-26 17:38:28.535+08 4 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+457 Stopbit 停止位 Variable 0.5位,1位,1.5位,2位 1位 \N \N \N 2019-06-26 17:39:12.206+08 2019-06-26 17:39:12.206+08 4 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+458 SwitchDelay 切换延迟时间 Variable 0ms,5ms,10ms,20ms 5ms \N \N \N 2019-06-26 17:40:05.689+08 2019-06-26 17:40:05.689+08 4 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+461 CheckOption 检测传感器状态 Variable \N true \N \N \N \N 2019-07-02 09:56:19.679+08 2019-07-02 09:56:19.679+08 3 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+460 VibratSamplFreq 振弦采样频率 Variable 8K,16K,32K 16K 0 2019-07-02 09:44:38.918+08 2019-07-02 09:56:51.531+08 4 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t t
+462 AmplifierGain 放大器增益倍数 Variable 100倍,500倍 100倍 \N \N \N 2019-07-02 09:57:33.615+08 2019-07-02 09:57:33.615+08 4 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+463 Incentive 发送激励信号 Variable \N true \N \N \N 2019-07-02 09:57:53.699+08 2019-07-02 09:57:53.699+08 3 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+464 IncentiveMethod 激励方式 Variable 单脉冲激励,多脉冲激励,共振激励 单脉冲激励 \N \N \N 2019-07-02 09:58:20.529+08 2019-07-02 09:58:20.529+08 4 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+465 VibratSpectrum 上传振弦频谱 Variable \N false \N \N \N 2019-07-02 09:58:46.882+08 2019-07-02 09:58:46.882+08 3 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+466 Spectrumway 频谱历史位置 Variable \N 1 \N 5 0 2019-07-02 09:58:59.285+08 2019-07-02 09:58:59.285+08 1 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+467 SensorValue 频谱初值 Variable \N 1500 \N 3800 380 Hz 2019-07-02 09:59:23.686+08 2019-07-02 09:59:23.686+08 1 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+468 Baudrate 波特率 Variable 9600,19200,115200 9600 \N \N \N 2019-07-02 09:59:45.104+08 2019-07-02 09:59:45.104+08 4 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+469 Databit 数据位 Variable 7,8,9 8 \N \N \N 2019-07-02 10:00:11.244+08 2019-07-02 10:00:11.244+08 4 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+470 Proofbit 校验位 Variable 无校验,奇校验,偶校验 无校验 \N \N \N 2019-07-02 10:00:45.546+08 2019-07-02 10:00:45.546+08 4 d5f2066b-b4d8-4e26-8991-0c068495e2c9 t f
+480 password \N Variable \N \N \N \N \N 2019-08-09 13:13:10.088+08 2019-08-09 13:13:10.092+08 5 da330369-58e7-4bce-8bc1-3c0a062dd1a0 t f
+488 duration 时长 Variable \N 2 \N 30 1 s 2019-08-22 11:12:26.146+08 2019-08-22 11:12:26.146+08 1 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500 t f
+489 lagpoint 滞后点数 Variable \N 0 \N 2048 0 2019-08-22 11:13:54.756+08 2019-08-22 11:13:54.756+08 1 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500 t f
+490 triglevel 触发电平 Variable \N 30 2 300 10 mV 2019-08-22 11:15:01.683+08 2019-08-22 11:15:01.683+08 2 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500 t f
+491 k 模量系数 Variable \N 1 16 999999 -999999 \N 2019-08-22 11:15:17.756+08 2019-08-22 11:15:17.756+08 2 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+481 tj 关联 Variable \N false \N \N \N \N 2019-08-22 10:57:05.739+08 2019-08-22 10:57:05.739+08 3 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500 t f
+482 channel 通道 Variable 1,2,3,4,5,6,7,8 1 \N \N \N 2019-08-22 10:57:59.496+08 2019-08-22 10:57:59.496+08 4 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500 t f
+483 das 去直流 Variable \N true \N \N \N 2019-08-22 10:58:27.367+08 2019-08-22 10:58:27.367+08 3 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500 t f
+484 enable 启用 Variable \N true \N \N \N 2019-08-22 10:59:05.843+08 2019-08-22 10:59:05.843+08 3 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500 t f
+485 filterfreq 滤波频率 Variable \N 128 \N 2048 64 Hz 2019-08-22 11:00:01.093+08 2019-08-22 11:00:01.093+08 1 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500 t f
+486 amplification 放大倍数 Variable 1,10,100,1000 1 \N \N \N 2019-08-22 11:01:17.577+08 2019-08-22 11:01:17.577+08 4 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500 t f
+492 f0 频率初值 Variable \N 0 4 9999 -9999 Hz 2019-08-22 11:15:53.108+08 2019-08-22 11:15:53.108+08 2 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+493 kt 温度补偿系数 Variable \N 0 4 999 -999 2019-08-22 11:16:18.861+08 2019-08-22 11:16:18.861+08 2 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+494 predelay 执行前延迟 Variable \N 25 \N 6000 0 百毫秒 2019-08-22 11:17:10.098+08 2019-08-22 11:17:10.098+08 1 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+495 postdelay 读取前延时 Variable \N 35 \N 6000 0 百毫秒 2019-08-22 11:17:34.942+08 2019-08-22 11:17:34.942+08 1 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+496 channel 通道号 Variable \N 1 \N 64 1 2019-08-22 11:17:58.349+08 2019-08-22 11:17:58.349+08 1 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+497 samplefreq 采样频率 Variable \N 1024 \N 2048 256 Hz 2019-08-22 11:18:15.783+08 2019-08-22 11:18:15.783+08 1 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500 t f
+498 t0 温度初值 Variable \N 20 4 999 -999 ℃ 2019-08-22 11:18:21.831+08 2019-08-22 11:18:21.831+08 2 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+502 module 模块号 Variable \N \N \N \N 2019-08-22 11:20:13.555+08 2019-08-22 11:20:13.555+08 5 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500 t f
+504 dcdriftadj 直流漂移调整系数 Variable \N 0 2 6255 0 2019-08-22 11:21:33.312+08 2019-08-22 11:21:33.312+08 2 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500 t f
+507 amplitudeadj 幅值修正参数 Variable \N 0 2 51241 0 2019-08-22 11:22:33.405+08 2019-08-22 11:22:33.405+08 2 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500 t f
+508 frequencyid 频谱ID Variable \N 1 \N \N \N 2019-08-22 11:23:07.881+08 2019-08-22 11:23:07.881+08 5 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+509 triggerjoin 参与触发方式 Variable 不参与,参与 参与 \N \N \N 2019-08-22 11:23:46.257+08 2019-08-22 11:23:46.257+08 4 6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500 t f
+510 collectoption 采集选项 Variable 1,2,3 3 \N \N \N 1,只采集温度,2,只采集频率,3,采集频率与温度 2019-08-22 11:23:51.211+08 2019-08-22 11:23:51.211+08 4 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+511 fid 公式ID Variable \N 1 \N \N \N 2019-08-22 11:24:36.285+08 2019-08-22 11:24:36.285+08 5 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+499 vibratsamplfreq 采样频率 Variable 8K,16K,32K 16K 0 0=8K,1 =16K,2=32K 2019-08-22 11:18:56.688+08 2019-09-06 11:51:14.632+08 4 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+500 checkoption 是否检测线状态 Variable 是,否 是 0 0=是,1=否(默认为0) 2019-08-22 11:19:24.116+08 2019-09-06 11:52:37.165+08 4 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+501 vibratspectrum 是否上传振弦频谱 Variable 是,否 否 0 0 =是,1 =否(默认为1) 2019-08-22 11:19:53.88+08 2019-09-06 11:52:52.706+08 4 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+503 colgain 放大增益倍数 Variable 100倍,500倍 100倍 0 0=100倍,1=500倍(默认0) 2019-08-22 11:20:39.361+08 2019-09-06 11:53:08.537+08 4 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+505 incentivemethod 激励方式 Variable 单脉冲激励,多脉冲激励,共振激励 多脉冲激励 0 0=单脉冲激励,1=多脉冲激励,2=共振激励(默认为1) 2019-08-22 11:21:36.235+08 2019-09-06 11:53:26.716+08 4 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+506 incentive 是否发激励信号 Variable 是,否 是 0 0=是,1=否(默认为0) 2019-08-22 11:22:04.498+08 2019-09-06 11:53:37.68+08 4 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+220 vibratspectrum 是否上传振弦频谱 Variable 是,否 否 0 0 =是,1 =否(默认为1) 2018-07-24 09:46:52.296+08 2019-09-04 16:52:21.477+08 4 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+217 colgain 放大增益倍数 Variable 100倍,500倍 100倍 0 0=100倍,1=500倍(默认0) 2018-07-24 09:44:05.284+08 2019-09-04 16:55:41.406+08 4 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+536 channel 通道 Variable 1,2,3,4,5,6,7,8 1 \N \N \N 2019-10-24 11:15:20.442+08 2019-10-24 11:15:20.445+08 4 4714efc4-d103-4619-9895-28e67d9100e2 t f
+218 incentive 是否发激励信号 Variable 是,否 是 0 0=是,1=否(默认为0) 2018-07-24 09:45:04.674+08 2019-09-04 16:56:24.228+08 4 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+219 checkoption 是否检测线状态 Variable 是,否 是 0 0=是,1=否(默认为0) 2018-07-24 09:45:57.549+08 2019-09-04 16:56:45.117+08 4 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+196 stopbits 停止位 Variable 1位,1.5位,2位 1位 0 停止位:0=1位,1=1.5位,2=2位 2018-07-17 16:52:22.51+08 2019-09-04 16:57:52.288+08 4 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1 t f
+194 databits 数据位 Variable 7位,8位,9位 8位 0 数据位:0= 7位,1=8位,2=9位(STM32只支持8位和9位) 2018-07-17 16:47:34.647+08 2019-09-04 16:58:16.812+08 4 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1 t f
+195 parity 校验位 Variable 无校验,奇校验,偶校验 无校验 0 校验位:0=无校验,1=奇校验,2=偶校验 2018-07-17 16:51:09.972+08 2019-09-04 16:58:32.626+08 4 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1 t f
+193 baudrate 波特率 Variable 2400,9600,19200,115200 9600 0 波特率:0=2400,1=9600,2=19200, 3=115200 2018-07-17 16:45:43.188+08 2019-09-04 16:58:52.427+08 4 4ad52552-2c20-4330-b6e4-b33cc5cc7ef1 t f
+222 incentivemethod 激励方式 Variable 单脉冲激励,多脉冲激励,共振激励 多脉冲激励 0 0=单脉冲激励,1=多脉冲激励,2=共振激励(默认为0) 2018-07-24 09:48:50.461+08 2019-09-04 17:00:15.146+08 4 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+239 dis 采集粒度 Variable 5 0 9999 0 2018-08-01 16:21:08.225+08 2019-09-04 17:18:15.547+08 1 6eeb1913-71e2-40b2-ae39-c8750cbdefd7 t f
+527 etime 指定时间 Variable \N 00:00:00 \N \N \N \N 2019-09-04 17:20:26.781+08 2019-09-04 17:20:26.781+08 5 6eeb1913-71e2-40b2-ae39-c8750cbdefd7 t f
+528 etime 指定时间 Variable \N 00:00:00 \N \N \N \N 2019-09-04 17:21:23.81+08 2019-09-04 17:21:23.81+08 5 6f9486b4-6b22-4fbd-a73a-9334e711badb t f
+406 stopbits 停止位 Variable 1位,1.5位,2位 1位 0 停止位:0=1位,1=1.5位,2=2位 2019-03-15 15:52:20.89+08 2019-09-06 11:50:00.953+08 4 66a06e5d-a436-4d37-806b-919d8fd1c564 t f
+530 moduleid 模块号 Constant \N 1000 \N \N \N \N 2019-09-16 14:39:50.687+08 2019-09-16 14:39:50.687+08 1 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+221 vibratsamplfreq 采样频率 Variable 8K,16K,32K 16K 0 0=8K,1 =16K,2=32K(默认为1) 2018-07-24 09:48:10.218+08 2019-09-19 11:28:30.152+08 4 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+531 frequency 配置频率 Variable \N 0 \N 99999 0 Hz 2019-09-19 14:44:12.396+08 2019-09-19 14:44:12.396+08 1 118383e6-1b61-4e15-8dee-a1a2a61b531e t f
+532 aaa \N Variable \N \N \N \N \N 2019-09-24 11:32:56.596+08 2019-09-24 11:32:56.599+08 5 0919de6f-bf9e-4ef6-85b4-108fee899605 t f
+533 qosofdatatopic \N Variable 0,1,2 0 \N \N \N \N 2019-09-25 16:03:11.256+08 2019-09-25 16:03:11.256+08 4 27a58884-75a3-4f5d-94f6-37cc15d419fb t f
+537 das 去直流 Variable \N true \N \N \N 2019-10-24 11:15:20.447+08 2019-10-24 11:15:20.449+08 3 4714efc4-d103-4619-9895-28e67d9100e2 t f
+538 enable 启用 Variable \N true \N \N \N 2019-10-24 11:15:20.451+08 2019-10-24 11:15:20.454+08 3 4714efc4-d103-4619-9895-28e67d9100e2 t f
+556 dataurl dataUrl Variable \N https://api.yespowering.cn/dev/data/ \N \N \N \N 2019-10-29 15:35:05.355+08 2019-10-29 15:35:05.355+08 5 c5cc09bc-6e3b-44f6-a8c4-ec174ae18707 t f
+535 tj 关联 Variable \N false \N \N \N \N 2019-10-24 11:15:20.434+08 2019-10-24 11:15:20.439+08 3 4714efc4-d103-4619-9895-28e67d9100e2 t f
+539 filterfreq 滤波频率 Variable \N 128 \N 2048 64 Hz 2019-10-24 11:15:20.456+08 2019-10-24 11:15:20.458+08 1 4714efc4-d103-4619-9895-28e67d9100e2 t f
+540 amplification 放大倍数 Variable 1,10,100,1000 1 \N \N \N 2019-10-24 11:15:20.459+08 2019-10-24 11:15:20.461+08 4 4714efc4-d103-4619-9895-28e67d9100e2 t f
+541 triggermode 触发方式 Variable 绝对值,上升沿,下降沿,峰值 绝对值 \N \N \N 2019-10-24 11:15:20.463+08 2019-10-24 11:15:20.465+08 4 4714efc4-d103-4619-9895-28e67d9100e2 t f
+542 duration 时长 Variable \N 2 \N 30 1 s 2019-10-24 11:15:20.467+08 2019-10-24 11:15:20.469+08 1 4714efc4-d103-4619-9895-28e67d9100e2 t f
+543 lagpoint 滞后点数 Variable \N 0 \N 2048 0 2019-10-24 11:15:20.47+08 2019-10-24 11:15:20.472+08 1 4714efc4-d103-4619-9895-28e67d9100e2 t f
+544 triglevel 触发电平 Variable \N 30 2 300 10 mV 2019-10-24 11:15:20.474+08 2019-10-24 11:15:20.476+08 2 4714efc4-d103-4619-9895-28e67d9100e2 t f
+545 samplefreq 采样频率 Variable \N 1024 \N 2048 32 Hz 2019-10-24 11:15:20.477+08 2019-10-24 11:15:20.479+08 1 4714efc4-d103-4619-9895-28e67d9100e2 t f
+546 module 模块号 Variable \N \N \N \N 2019-10-24 11:15:20.48+08 2019-10-24 11:15:20.482+08 5 4714efc4-d103-4619-9895-28e67d9100e2 t f
+547 dcdriftadj 直流漂移调整系数 Variable \N 0 2 6255 0 2019-10-24 11:15:20.484+08 2019-10-24 11:15:20.485+08 2 4714efc4-d103-4619-9895-28e67d9100e2 t f
+548 amplitudeadj 幅值修正参数 Variable \N 0 2 51241 0 2019-10-24 11:15:20.487+08 2019-10-24 11:15:20.488+08 2 4714efc4-d103-4619-9895-28e67d9100e2 f f
+549 triggerjoin 参与触发方式 Variable 不参与,参与 参与 \N \N \N 2019-10-24 11:15:20.49+08 2019-10-24 11:15:20.491+08 4 4714efc4-d103-4619-9895-28e67d9100e2 t f
+557 frequency 配置频率 Variable \N 0 6 99999 0 Hz 2019-10-31 16:58:40.417+08 2019-10-31 16:58:40.417+08 2 5afb303e-0963-4e23-91f7-2b41f543aaf6 t f
+554 pw 密码 Constant \N 88888888 \N \N \N 2019-10-29 10:39:29.521+08 2019-10-29 10:39:29.521+08 5 c5cc09bc-6e3b-44f6-a8c4-ec174ae18707 t f
+555 account 账号 Constant \N 18673077286 \N \N \N 2019-10-29 10:39:54.394+08 2019-10-29 10:39:54.394+08 5 c5cc09bc-6e3b-44f6-a8c4-ec174ae18707 t f
+558 k 模量系数 Variable \N 1 16 999999 -999999 \N 2019-11-08 16:23:57.798+08 2019-11-08 16:23:57.798+08 2 25642488-1945-4865-81e7-e9593c12d208 t f
+553 boxid 云盒编号 Constant 35E81PV032 0 2019-10-29 10:39:00.875+08 2019-10-29 15:09:29.529+08 5 c5cc09bc-6e3b-44f6-a8c4-ec174ae18707 t f
+552 tokenurl 获取tokenUrl Constant https://api.yespowering.cn/login/ 0 2019-10-29 10:38:13.199+08 2019-10-29 15:33:53.42+08 5 c5cc09bc-6e3b-44f6-a8c4-ec174ae18707 t f
+559 f0 频率初值 Variable \N 0 4 9999 -9999 Hz 2019-11-08 16:27:43.686+08 2019-11-08 16:27:43.686+08 2 25642488-1945-4865-81e7-e9593c12d208 t f
+560 kt 温度补偿系数 Variable \N 0 4 999 -999 2019-11-08 16:28:25.358+08 2019-11-08 16:28:25.358+08 2 25642488-1945-4865-81e7-e9593c12d208 t f
+561 predelay 执行前延迟 Variable \N 25 \N 6000 0 百毫秒 2019-11-08 16:29:14.483+08 2019-11-08 16:29:14.483+08 1 25642488-1945-4865-81e7-e9593c12d208 t f
+562 postdelay 读取前延时 Variable \N 35 \N 6000 0 百毫秒 2019-11-08 16:29:58.803+08 2019-11-08 16:29:58.803+08 1 25642488-1945-4865-81e7-e9593c12d208 t f
+563 channel 通道号 Variable \N 1 \N 64 1 2019-11-08 16:30:41.723+08 2019-11-08 16:30:41.723+08 1 25642488-1945-4865-81e7-e9593c12d208 t f
+564 t0 温度初值 Variable \N 20 4 999 -999 ℃ 2019-11-08 16:31:32.848+08 2019-11-08 16:31:32.848+08 2 25642488-1945-4865-81e7-e9593c12d208 t f
+565 frequencyid 频谱ID Variable \N 1 \N \N \N 2019-11-08 16:32:22.652+08 2019-11-08 16:32:22.652+08 5 25642488-1945-4865-81e7-e9593c12d208 t f
+566 collectoption 采集选项 Variable 1,2,3 3 \N \N \N 1,只采集温度,2,只采集频率,3,采集频率与温度 2019-11-08 16:33:21.527+08 2019-11-08 16:33:21.527+08 4 25642488-1945-4865-81e7-e9593c12d208 t f
+567 fid 公式ID Variable \N 1 \N \N \N 2019-11-08 16:34:06.944+08 2019-11-08 16:34:06.944+08 5 25642488-1945-4865-81e7-e9593c12d208 t f
+568 vibratsamplfreq 采样频率 Variable 8K,16K,32K 16K \N \N \N 0=8K,1 =16K,2=32K 2019-11-08 16:34:55.432+08 2019-11-08 16:34:55.432+08 4 25642488-1945-4865-81e7-e9593c12d208 t f
+569 checkoption 是否检测线状态 Variable 是,否 是 \N \N \N 0=是,1=否(默认为0) 2019-11-08 16:35:52.141+08 2019-11-08 16:35:52.141+08 4 25642488-1945-4865-81e7-e9593c12d208 t f
+570 vibratspectrum 是否上传振弦频谱 Variable 是,否 否 \N \N \N 0 =是,1 =否(默认为1) 2019-11-08 16:36:49.299+08 2019-11-08 16:36:49.299+08 4 25642488-1945-4865-81e7-e9593c12d208 t f
+571 colgain 放大增益倍数 Variable 100倍,500倍 100倍 \N \N \N 0=100倍,1=500倍(默认0) 2019-11-08 16:38:43.24+08 2019-11-08 16:38:43.24+08 4 25642488-1945-4865-81e7-e9593c12d208 t f
+572 incentivemethod 激励方式 Variable 单脉冲激励,多脉冲激励,共振激励 多脉冲激励 \N \N \N 0=单脉冲激励,1=多脉冲激励,2=共振激励(默认为1) 2019-11-08 16:39:40.932+08 2019-11-08 16:39:40.932+08 4 25642488-1945-4865-81e7-e9593c12d208 t f
+573 incentive 是否发激励信号 Variable 是,否 是 \N \N \N 0=是,1=否(默认为0) 2019-11-08 16:40:38.109+08 2019-11-08 16:40:38.109+08 4 25642488-1945-4865-81e7-e9593c12d208 t f
+574 frequency 配置频率 Variable \N 0 6 99999 0 Hz 2019-11-08 16:41:19.664+08 2019-11-08 16:41:19.664+08 2 25642488-1945-4865-81e7-e9593c12d208 t f
+575 channel 通道号 Variable \N 1 \N 64 1 \N 2019-11-08 16:44:19.06+08 2019-11-08 16:44:19.06+08 1 dff00e7d-1fb2-443e-be6a-615214932ee6 t f
+576 module 模块号 Variable \N \N \N \N 2019-11-08 16:44:38.642+08 2019-11-08 16:44:38.642+08 5 dff00e7d-1fb2-443e-be6a-615214932ee6 t f
+577 schannel 子通道号 Variable \N 1 \N 32 0 2019-11-08 16:45:09.704+08 2019-11-08 16:45:09.704+08 1 dff00e7d-1fb2-443e-be6a-615214932ee6 t f
+578 predelay 执行前延迟 Variable \N 25 \N 600 0 百毫秒 2019-11-08 16:45:48.199+08 2019-11-08 16:45:48.199+08 1 dff00e7d-1fb2-443e-be6a-615214932ee6 t f
+579 postdelay 读取记录前延迟 Variable \N 35 \N 600 0 百毫秒 2019-11-08 16:47:07.966+08 2019-11-08 16:47:07.966+08 1 dff00e7d-1fb2-443e-be6a-615214932ee6 t f
+580 switchinterval 485切换时间 Variable \N 5 \N 3600 0 ms 2019-11-08 16:47:47.646+08 2019-11-08 16:47:47.646+08 1 dff00e7d-1fb2-443e-be6a-615214932ee6 t f
+581 pmtpf 阈值上限 Variable \N \N 2 9999 -1999 2019-11-08 16:48:21.636+08 2019-11-08 16:48:21.636+08 2 dff00e7d-1fb2-443e-be6a-615214932ee6 t f
+582 pmten 阈值下限 Variable \N \N 2 1999 -9999 2019-11-08 16:48:58.549+08 2019-11-08 16:48:58.549+08 2 dff00e7d-1fb2-443e-be6a-615214932ee6 t f
+583 baudrate 波特率 Variable 2400,9600,19200,115200 9600 \N \N \N 波特率:0=2400,1=9600,2=19200, 3=115200 2019-11-08 16:49:39.106+08 2019-11-08 16:49:39.106+08 4 dff00e7d-1fb2-443e-be6a-615214932ee6 t f
+584 parity 校验位 Variable 无校验,奇校验,偶校验 无校验 \N \N \N 校验位:0=无校验,1=奇校验,2=偶校 2019-11-08 16:50:20.685+08 2019-11-08 16:50:20.685+08 4 dff00e7d-1fb2-443e-be6a-615214932ee6 t f
+706 Baudrate 波特率 Variable 9600,19200,115200 9600 \N \N \N 2020-04-08 14:07:37.019+08 2020-04-08 14:07:37.022+08 4 451db320-593b-4777-9848-9d778427dea5 t f
+585 databits 数据位 Variable 7位,8位,9位 8位 \N \N \N 数据位:0= 7位,1=8位,2=9位(STM32只支持8位和9位) 2019-11-08 16:51:04.226+08 2019-11-08 16:51:04.226+08 4 dff00e7d-1fb2-443e-be6a-615214932ee6 t f
+586 stopbits 停止位 Variable 1位,1.5位,2位 1位 \N \N \N 停止位:0=1位,1=1.5位,2=2位 2019-11-08 16:51:46.47+08 2019-11-08 16:51:46.47+08 4 dff00e7d-1fb2-443e-be6a-615214932ee6 t f
+587 channel 通道 Variable \N 1 \N 128 1 \N 2019-11-08 16:54:20.431+08 2019-11-08 16:54:20.431+08 1 8751bbb1-2603-44bd-aa33-a7ad5e31a3ba t f
+588 triggerjion 定时采样间隔 Variable \N 0 \N 6000 0 s 2019-11-08 16:54:54.276+08 2019-11-08 16:54:54.276+08 1 8751bbb1-2603-44bd-aa33-a7ad5e31a3ba t f
+589 triggersample 定时采样时长 Variable \N 0 \N 6000 0 s 2019-11-08 16:55:32.095+08 2019-11-08 16:55:32.095+08 1 8751bbb1-2603-44bd-aa33-a7ad5e31a3ba t f
+590 sampleduration 加速度触发采样时长 Variable \N 0 \N 6000 0 s 2019-11-08 16:56:09.112+08 2019-11-08 16:56:09.112+08 1 8751bbb1-2603-44bd-aa33-a7ad5e31a3ba t f
+591 filterfreq 滤波频率 Variable \N 1 4 99999 -99999 Hz 2019-11-08 16:56:50.851+08 2019-11-08 16:56:50.851+08 2 8751bbb1-2603-44bd-aa33-a7ad5e31a3ba t f
+592 samplefreq 采样频率 Variable \N 1 4 99999 -99999 Hz 2019-11-08 16:57:51.353+08 2019-11-08 16:57:51.353+08 2 8751bbb1-2603-44bd-aa33-a7ad5e31a3ba t f
+593 accelerationrange 加速度范围 Variable \N 1 4 1024 0 2019-11-08 16:58:42.269+08 2019-11-08 16:58:42.269+08 2 8751bbb1-2603-44bd-aa33-a7ad5e31a3ba t f
+596 triggerlevel 触发加速度 Variable \N 1.1 4 9999 -9999 g 2019-11-08 17:03:05.401+08 2019-11-08 17:03:05.401+08 2 8751bbb1-2603-44bd-aa33-a7ad5e31a3ba t f
+597 lagpionts 滞后点数 Variable \N 1 3 1024 0 2019-11-08 17:03:47.37+08 2019-11-08 17:03:47.37+08 2 8751bbb1-2603-44bd-aa33-a7ad5e31a3ba t f
+598 postdelay 读取前延时 Variable \N 35 \N 6000 1 百毫秒 2019-11-08 17:04:27.126+08 2019-11-08 17:04:27.126+08 1 8751bbb1-2603-44bd-aa33-a7ad5e31a3ba t f
+599 predelay 执行前延迟 Variable \N 25 \N 6000 0 百毫秒 2019-11-08 17:05:09.686+08 2019-11-08 17:05:09.686+08 1 8751bbb1-2603-44bd-aa33-a7ad5e31a3ba t f
+600 module 模块号 Variable \N \N \N \N 2019-11-08 17:06:02.075+08 2019-11-08 17:06:02.075+08 5 8751bbb1-2603-44bd-aa33-a7ad5e31a3ba t f
+601 accerange 加速度范围 Variable \N 0 \N \N \N 2019-11-08 17:06:29.129+08 2019-11-08 17:06:29.129+08 5 8751bbb1-2603-44bd-aa33-a7ad5e31a3ba t f
+602 triggerlevel 触发加速度 Variable \N 1.1 4 9999 -9999 g 2019-11-08 17:07:20.226+08 2019-11-08 17:07:20.226+08 2 8751bbb1-2603-44bd-aa33-a7ad5e31a3ba t f
+603 escape 是否转义 Variable \N true \N \N \N \N 2019-11-08 17:09:43.804+08 2019-11-08 17:09:43.804+08 3 0be63da7-6ab6-4d1f-830d-dd32add170c6 t f
+604 protocol 协议 Variable Modbus,iDAU Modbus \N \N \N 2019-11-08 17:10:12.186+08 2019-11-08 17:10:12.186+08 4 0be63da7-6ab6-4d1f-830d-dd32add170c6 t f
+605 id ID Variable \N 12345678 \N \N \N 2019-11-08 17:10:39.289+08 2019-11-08 17:10:39.289+08 5 0be63da7-6ab6-4d1f-830d-dd32add170c6 t f
+606 dis 采集粒度 Variable \N 5 \N 9999 0 2019-11-08 17:11:12.201+08 2019-11-08 17:11:12.201+08 1 0be63da7-6ab6-4d1f-830d-dd32add170c6 t f
+607 moduleid 模块号 Variable \N 1000 \N \N \N 2019-11-08 17:11:30.739+08 2019-11-08 17:11:30.739+08 5 0be63da7-6ab6-4d1f-830d-dd32add170c6 t f
+608 port 端口 Variable \N 40001 \N 65535 1025 服务侧监听端口 2019-11-08 17:12:21.228+08 2019-11-08 17:12:21.228+08 1 0be63da7-6ab6-4d1f-830d-dd32add170c6 t f
+609 vendor 供应商 Variable 才茂,四信,宏电 才茂 \N \N \N 供应商, 会影响控制帧 2019-11-08 17:13:01.979+08 2019-11-08 17:13:01.979+08 4 0be63da7-6ab6-4d1f-830d-dd32add170c6 t f
+610 ot DTU等待上线时间 Variable \N 60 \N 60000 0 2019-11-08 17:13:44.581+08 2019-11-08 17:13:44.581+08 1 0be63da7-6ab6-4d1f-830d-dd32add170c6 t f
+611 acq 等待应答时间 Variable \N 11 \N 60000 0 2019-11-08 17:14:12.882+08 2019-11-08 17:14:12.882+08 1 0be63da7-6ab6-4d1f-830d-dd32add170c6 t f
+612 delay 休眠延时 Variable \N 5 \N 6000 0 2019-11-08 17:14:43.176+08 2019-11-08 17:14:43.176+08 1 0be63da7-6ab6-4d1f-830d-dd32add170c6 t f
+613 etime 指定时间 Variable \N 00:00:00 \N \N \N 2019-11-08 17:15:08.097+08 2019-11-08 17:15:08.097+08 5 0be63da7-6ab6-4d1f-830d-dd32add170c6 t f
+614 interval 发送时延(ms) Variable \N 1000 0 5000 200 \N 发送时延,毫秒 2019-11-27 09:27:06+08 2019-11-27 09:27:09+08 1 3dfadb0e-7608-49e1-aa43-24f7442b424a f f
+615 packageSize 单包大小(Byte) Variable \N 512 0 2048 128 \N 单包大小,字节 2019-11-27 09:28:48+08 2019-11-27 09:28:51+08 1 3dfadb0e-7608-49e1-aa43-24f7442b424a f f
+182 Qos 发布Qos Variable 2 0 2018-06-25 16:37:11.537+08 2019-12-06 17:33:27.355+08 5 639a37c9-637b-46e7-97ac-7b5991155e02 f f
+616 sensortype 传感器类型 Constant \N streetlight \N \N \N ° 无 2019-12-09 15:34:49.939+08 2019-12-09 15:34:49.939+08 5 6361ba5f-8588-4685-a107-b692e3592f17 t f
+450 IncentiveMethod 激励方式 Variable 单脉冲激励,多脉冲激励,共振激励 多脉冲激励 0 2019-06-26 17:27:38.307+08 2019-12-17 13:44:10.147+08 4 d0e8f529-c1bf-4146-beef-cd3056ea9787 t f
+453 SensorValue 共振频率 Variable 1500 0 3800 380 Hz 2019-06-26 17:30:15.488+08 2019-12-17 14:49:34.896+08 1 d0e8f529-c1bf-4146-beef-cd3056ea9787 t t
+620 URL 主机地址 Variable \N \N \N \N \N 2019-12-20 09:49:46.244+08 2019-12-20 09:49:46.307+08 5 e88f4b90-93c9-4a17-b425-b118ce4f4695 t f
+702 AmplifierGain 放大器增益倍数 Variable 100倍,500倍 100倍 \N \N \N 2020-04-08 14:07:36.718+08 2020-04-08 14:07:37+08 4 451db320-593b-4777-9848-9d778427dea5 t f
+703 Incentive 发送激励信号 Variable \N true \N \N \N 2020-04-08 14:07:37.003+08 2020-04-08 14:07:37.006+08 3 451db320-593b-4777-9848-9d778427dea5 t f
+704 VibratSpectrum 上传振弦频谱 Variable \N false \N \N \N 2020-04-08 14:07:37.009+08 2020-04-08 14:07:37.011+08 3 451db320-593b-4777-9848-9d778427dea5 t f
+705 Spectrumway 频谱历史位置 Variable \N 1 \N 5 0 2020-04-08 14:07:37.014+08 2020-04-08 14:07:37.016+08 1 451db320-593b-4777-9848-9d778427dea5 t f
+621 ClientID 客户端ID Variable 0 2019-12-20 09:49:46.314+08 2019-12-20 10:00:22.744+08 5 e88f4b90-93c9-4a17-b425-b118ce4f4695 f f
+622 Persistent 长连接 Variable true 0 2019-12-20 09:49:46.322+08 2019-12-20 10:00:27.991+08 3 e88f4b90-93c9-4a17-b425-b118ce4f4695 f f
+623 Username 用户 Variable 0 2019-12-20 09:49:46.329+08 2019-12-20 10:00:32.287+08 5 e88f4b90-93c9-4a17-b425-b118ce4f4695 f f
+624 Password 密码 Variable 0 2019-12-20 09:49:46.336+08 2019-12-20 10:00:35.752+08 5 e88f4b90-93c9-4a17-b425-b118ce4f4695 f f
+625 SubscribeTopic 订阅主题 Variable 0 2019-12-20 09:49:46.342+08 2019-12-20 10:00:45.27+08 5 e88f4b90-93c9-4a17-b425-b118ce4f4695 t f
+626 PublishTopic 发布主题 Variable 0 2019-12-20 09:49:46.351+08 2019-12-20 10:00:48.934+08 5 e88f4b90-93c9-4a17-b425-b118ce4f4695 f f
+627 Qos 发布Qos Variable 2 0 2019-12-20 09:49:46.358+08 2019-12-20 10:00:51.811+08 5 e88f4b90-93c9-4a17-b425-b118ce4f4695 f f
+363 parity 校验位 Variable 无校验,奇校验,偶校验 无校验 0 校验位:0=无校验,1=奇校验,2=偶校验 2019-01-21 11:43:37.927+08 2019-12-24 11:49:44.889+08 4 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+364 baudrate 波特率 Variable 2400,9600,19200,115200 9600 0 0=2400,1=9600,2=19200, 3=115200 2019-01-21 11:43:37.932+08 2019-12-24 11:50:15.77+08 4 15b373b0-30f8-471e-8900-cb62e28d0e50 t f
+628 module 模块号 Variable \N \N \N \N \N 2019-12-24 14:34:32.419+08 2019-12-24 14:34:32.432+08 5 c1b7ebc4-5a06-40c2-a231-f3fa95094a26 t f
+629 channel 通道号 Variable \N 1 \N 99 1 2019-12-24 14:34:32.436+08 2019-12-24 14:34:32.44+08 1 c1b7ebc4-5a06-40c2-a231-f3fa95094a26 t f
+633 upload 上报粒度 Variable 1 0 99999 1 min 2019-12-24 15:08:23.095+08 2019-12-24 15:08:57.047+08 1 c1b7ebc4-5a06-40c2-a231-f3fa95094a26 f f
+634 plus 加报粒度 Variable 1 0 99999 1 min 2019-12-24 15:08:52.7+08 2019-12-24 15:09:06.755+08 1 c1b7ebc4-5a06-40c2-a231-f3fa95094a26 f f
+707 Databit 数据位 Variable 7,8,9 8 \N \N \N 2020-04-08 14:07:37.024+08 2020-04-08 14:07:37.027+08 4 451db320-593b-4777-9848-9d778427dea5 t f
+708 Proofbit 校验位 Variable 无校验,奇校验,偶校验 无校验 \N \N \N 2020-04-08 14:07:37.029+08 2020-04-08 14:07:37.032+08 4 451db320-593b-4777-9848-9d778427dea5 t f
+709 Stopbit 停止位 Variable 0.5位,1位,1.5位,2位 1位 \N \N \N 2020-04-08 14:07:37.035+08 2020-04-08 14:07:37.038+08 4 451db320-593b-4777-9848-9d778427dea5 t f
+710 SwitchDelay 切换延迟时间 Variable 0ms,5ms,10ms,20ms 5ms \N \N \N 2020-04-08 14:07:37.04+08 2020-04-08 14:07:37.043+08 4 451db320-593b-4777-9848-9d778427dea5 t f
+711 IncentiveMethod 激励方式 Variable 单脉冲激励,多脉冲激励,共振激励 多脉冲激励 \N \N \N 2020-04-08 14:07:37.045+08 2020-04-08 14:07:37.048+08 4 451db320-593b-4777-9848-9d778427dea5 t f
+712 SensorValue 共振频率 Variable \N 1500 \N 3800 380 Hz 2020-04-08 14:07:37.05+08 2020-04-08 14:07:37.052+08 1 451db320-593b-4777-9848-9d778427dea5 t f
+765 checkoption 是否检测线状态 Variable 是,否 是 \N \N \N 2020-04-09 15:37:03.758+08 2020-04-09 15:37:03.763+08 4 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+766 vibratspectrum 是否上传振弦频谱 Variable 是,否 是 \N \N \N 2020-04-09 15:37:03.766+08 2020-04-09 15:37:03.769+08 4 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+767 colgain 放大增益倍数 Variable 100倍,500倍 100倍 0 2020-04-09 15:37:03.773+08 2020-04-09 15:37:18.372+08 4 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+641 k 模量系数 Variable \N 1 16 999999 -999999 \N 2020-01-06 10:48:36.884+08 2020-01-06 10:48:36.887+08 2 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+642 f0 频率初值 Variable \N 0 4 9999 -9999 HZ 2020-01-06 10:48:36.889+08 2020-01-06 10:48:36.892+08 2 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+643 kt 温度补偿系数 Variable \N 0 4 999 -999 2020-01-06 10:48:36.893+08 2020-01-06 10:48:36.895+08 2 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+644 predelay 执行前延迟 Variable \N 25 \N 6000 0 百毫秒 2020-01-06 10:48:36.897+08 2020-01-06 10:48:36.899+08 1 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+645 postdelay 读取前延时 Variable \N 35 \N 6000 0 百毫秒 2020-01-06 10:48:36.901+08 2020-01-06 10:48:36.903+08 1 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+646 channel 通道号 Variable \N 1 \N 64 1 2020-01-06 10:48:36.904+08 2020-01-06 10:48:36.906+08 1 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+647 t0 温度初值 Variable \N 20 4 999 -999 ℃ 2020-01-06 10:48:36.908+08 2020-01-06 10:48:36.91+08 2 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+648 frequencyid 频谱ID Variable \N 1 \N \N \N 2020-01-06 10:48:36.912+08 2020-01-06 10:48:36.915+08 5 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+649 collectoption 采集选项 Variable 1,2,3 3 \N \N \N 1,只采集温度,2,只采集频率,3,采集频率与温度 2020-01-06 10:48:36.916+08 2020-01-06 10:48:36.918+08 4 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+650 fid 公式ID Variable \N 1 \N \N \N 2020-01-06 10:48:36.92+08 2020-01-06 10:48:36.922+08 5 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+651 vibratsamplfreq 采样频率 Variable 8K,16K,32K 16K \N \N \N 0=8K,1 =16K,2=32K 2020-01-06 10:48:36.923+08 2020-01-06 10:48:36.925+08 4 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+652 checkoption 是否检测线状态 Variable 是,否 是 \N \N \N 0=是,1=否(默认为0) 2020-01-06 10:48:36.926+08 2020-01-06 10:48:36.928+08 4 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+653 vibratspectrum 是否上传振弦频谱 Variable 是,否 否 \N \N \N 0 =是,1 =否(默认为1) 2020-01-06 10:48:36.929+08 2020-01-06 10:48:36.931+08 4 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+654 colgain 放大增益倍数 Variable 100倍,500倍 100倍 \N \N \N 0=100倍,1=500倍(默认0) 2020-01-06 10:48:36.932+08 2020-01-06 10:48:36.934+08 4 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+655 incentivemethod 激励方式 Variable 单脉冲激励,多脉冲激励,共振激励 多脉冲激励 \N \N \N 0=单脉冲激励,1=多脉冲激励,2=共振激励(默认为1) 2020-01-06 10:48:36.937+08 2020-01-06 10:48:36.939+08 4 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+656 incentive 是否发激励信号 Variable 是,否 是 \N \N \N 0=是,1=否(默认为0) 2020-01-06 10:48:36.941+08 2020-01-06 10:48:36.942+08 4 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+657 frequency 配置频率 Variable \N 0 6 99999 -99999 HZ 2020-01-06 10:48:36.944+08 2020-01-06 10:48:36.947+08 2 6e48d81c-5e9a-4e94-95b8-5e03d0823466 t f
+618 sendinterval 发送延迟(ms) Variable 1000 0 5000 200 2019-12-10 22:24:46.332+08 2020-03-10 16:14:47.22+08 1 a8f77633-9fe3-4228-b557-34a9108b3d50 t t
+677 pmtpf 阈值上限 Variable \N 2 9999 -1999 2020-03-27 16:57:33.552+08 2020-04-05 10:58:26.684+08 2 640f3d57-3789-4fc9-a69b-6175b4d3e384 f f
+678 pmten 阈值下限 Variable \N 2 1999 -9999 2020-03-27 16:58:09.074+08 2020-04-05 10:58:33.742+08 2 640f3d57-3789-4fc9-a69b-6175b4d3e384 f f
+690 sensorid 传感器ID Variable \N 1234 \N 2147483647 1 \N 2020-04-08 14:07:36.635+08 2020-04-08 14:07:36.639+08 1 451db320-593b-4777-9848-9d778427dea5 t f
+617 packageSize 单包大小(Byte) Variable 1000 0 2048 128 2019-12-10 22:24:08.558+08 2020-03-10 16:34:47.476+08 1 a8f77633-9fe3-4228-b557-34a9108b3d50 t t
+691 enable 是否启用 Variable \N true \N \N \N 2020-04-08 14:07:36.642+08 2020-04-08 14:07:36.645+08 3 451db320-593b-4777-9848-9d778427dea5 t f
+662 ClientID 客户端ID Variable \N \N \N \N 2020-03-18 11:21:45.329+08 2020-03-18 11:21:45.333+08 5 3d1a9d6a-ff6b-4b29-bb30-1c39079c1362 f f
+663 Persistent 长连接 Variable \N true \N \N \N 2020-03-18 11:21:45.336+08 2020-03-18 11:21:45.339+08 3 3d1a9d6a-ff6b-4b29-bb30-1c39079c1362 f f
+664 Username 用户 Variable \N \N \N \N 2020-03-18 11:21:45.342+08 2020-03-18 11:21:45.345+08 5 3d1a9d6a-ff6b-4b29-bb30-1c39079c1362 f f
+665 Password 密码 Variable \N \N \N \N 2020-03-18 11:21:45.348+08 2020-03-18 11:21:45.351+08 5 3d1a9d6a-ff6b-4b29-bb30-1c39079c1362 f f
+666 SubscribeTopic 订阅主题 Variable \N \N \N \N 2020-03-18 11:21:45.353+08 2020-03-18 11:21:45.356+08 5 3d1a9d6a-ff6b-4b29-bb30-1c39079c1362 t f
+667 PublishTopic 发布主题 Variable \N \N \N \N 2020-03-18 11:21:45.359+08 2020-03-18 11:21:45.362+08 5 3d1a9d6a-ff6b-4b29-bb30-1c39079c1362 f f
+668 Qos 发布Qos Variable \N 2 \N \N \N 2020-03-18 11:21:45.366+08 2020-03-18 11:21:45.369+08 5 3d1a9d6a-ff6b-4b29-bb30-1c39079c1362 f f
+669 URL URL Variable \N \N \N \N \N 2020-03-20 11:11:59.124+08 2020-03-20 11:11:59.124+08 5 e4809d13-f016-47b0-8f2d-129502794def t f
+670 SubscribeTopic SubscribeTopic Variable \N \N \N \N 2020-03-20 11:12:18.822+08 2020-03-20 11:12:18.822+08 5 e4809d13-f016-47b0-8f2d-129502794def t f
+671 channel 通道号 Variable \N 1 \N 64 1 \N 2020-03-27 16:45:58.013+08 2020-03-27 16:45:58.013+08 1 640f3d57-3789-4fc9-a69b-6175b4d3e384 t f
+672 module 模块号 Variable \N \N \N \N 2020-03-27 16:46:15.168+08 2020-03-27 16:46:15.168+08 5 640f3d57-3789-4fc9-a69b-6175b4d3e384 t f
+673 schannel 子通道号 Variable \N 1 \N 32 1 2020-03-27 16:46:37.461+08 2020-03-27 16:46:37.461+08 1 640f3d57-3789-4fc9-a69b-6175b4d3e384 t f
+674 predelay 执行前延迟 Variable \N 50 \N 600 0 百毫秒 2020-03-27 16:48:45.247+08 2020-03-27 16:48:45.247+08 1 640f3d57-3789-4fc9-a69b-6175b4d3e384 t f
+675 postdelay 读取记录前延迟 Variable \N 2 \N 600 0 百毫秒 2020-03-27 16:49:45.233+08 2020-03-27 16:49:45.233+08 1 640f3d57-3789-4fc9-a69b-6175b4d3e384 t f
+676 switchinterva 485切换时间 Variable \N 5 \N 3600 0 ms 2020-03-27 16:56:38.855+08 2020-03-27 16:56:38.855+08 1 640f3d57-3789-4fc9-a69b-6175b4d3e384 t f
+679 baudrate 波特率 Variable 2400,9600,19200,115200 9600 \N \N \N 波特率:0=2400,1=9600,2=19200, 3=115200 2020-03-27 16:59:02.966+08 2020-03-27 16:59:02.966+08 4 640f3d57-3789-4fc9-a69b-6175b4d3e384 t f
+680 parity 校验位 Variable 无校验,奇校验,偶校验 无校验 \N \N \N 校验位:0=无校验,1=奇校验,2=偶校验 2020-03-27 16:59:58.899+08 2020-03-27 16:59:58.899+08 4 640f3d57-3789-4fc9-a69b-6175b4d3e384 t f
+681 databits 数据位 Variable 7位,8位,9位 8位 \N \N \N 数据位:0= 7位,1=8位,2=9位(STM32只支持8位和9位) 2020-03-27 17:00:43.554+08 2020-03-27 17:00:43.554+08 4 640f3d57-3789-4fc9-a69b-6175b4d3e384 t f
+682 stopbits 停止位 Variable 1位,1.5位,2位 1位 \N \N \N 停止位:0=1位,1=1.5位,2=2位 2020-03-27 17:01:15.819+08 2020-03-27 17:01:15.819+08 4 640f3d57-3789-4fc9-a69b-6175b4d3e384 t f
+683 module 模块号 Variable \N \N \N \N \N 2020-04-03 17:14:23.098+08 2020-04-03 17:14:23.102+08 5 e65d6dc4-b239-4755-b83e-af11fa23fb70 f f
+684 schannel 二级通道 Variable \N 0 \N 32 0 2020-04-03 17:14:23.106+08 2020-04-03 17:14:23.11+08 1 e65d6dc4-b239-4755-b83e-af11fa23fb70 t f
+685 enabled 是否启用 Variable \N true \N \N \N 2020-04-03 17:14:23.113+08 2020-04-03 17:14:23.204+08 3 e65d6dc4-b239-4755-b83e-af11fa23fb70 t f
+686 sensorid 传感器ID Variable \N 1234 \N 2147483647 1 2020-04-03 17:14:23.207+08 2020-04-03 17:14:23.209+08 1 e65d6dc4-b239-4755-b83e-af11fa23fb70 t f
+687 channel 通道 Variable 1,2,3,4,5,6,7,,8,9,10,11,12,13,14,15,16 1 \N \N \N 2020-04-03 17:14:23.211+08 2020-04-03 17:14:23.214+08 4 e65d6dc4-b239-4755-b83e-af11fa23fb70 t f
+688 postdelay 后延时 Variable \N 35 \N 600 0 百毫秒 2020-04-03 17:14:23.218+08 2020-04-03 17:14:23.22+08 1 e65d6dc4-b239-4755-b83e-af11fa23fb70 t f
+689 predelay 前延时 Variable \N 25 \N 600 0 百毫秒 2020-04-03 17:14:23.221+08 2020-04-03 17:14:23.223+08 1 e65d6dc4-b239-4755-b83e-af11fa23fb70 t f
+692 predelay 执行前延迟 Variable \N 1 \N 6000 0 百毫秒 2020-04-08 14:07:36.648+08 2020-04-08 14:07:36.651+08 1 451db320-593b-4777-9848-9d778427dea5 t f
+693 postdelay 读取前延时 Variable \N 1 \N 6000 1 百毫秒 2020-04-08 14:07:36.655+08 2020-04-08 14:07:36.657+08 1 451db320-593b-4777-9848-9d778427dea5 t f
+694 fid 公式ID Constant \N 17 \N \N \N 2020-04-08 14:07:36.662+08 2020-04-08 14:07:36.668+08 1 451db320-593b-4777-9848-9d778427dea5 t f
+695 k 模量系数 Variable \N 1 16 999999 -999999 2020-04-08 14:07:36.671+08 2020-04-08 14:07:36.673+08 2 451db320-593b-4777-9848-9d778427dea5 t f
+696 f0 频率初值 Variable \N 0 4 99999 -99999 HZ 2020-04-08 14:07:36.676+08 2020-04-08 14:07:36.678+08 2 451db320-593b-4777-9848-9d778427dea5 t f
+697 kt 温度补偿系数 Variable \N 0 4 9999 -9999 2020-04-08 14:07:36.68+08 2020-04-08 14:07:36.685+08 2 451db320-593b-4777-9848-9d778427dea5 t f
+698 t0 温度初值 Variable \N 20 3 999 -999 2020-04-08 14:07:36.686+08 2020-04-08 14:07:36.692+08 2 451db320-593b-4777-9848-9d778427dea5 t f
+699 channel 通道 Variable 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1 \N \N \N 2020-04-08 14:07:36.694+08 2020-04-08 14:07:36.703+08 4 451db320-593b-4777-9848-9d778427dea5 t f
+700 CheckOption 检测传感器状态 Variable \N true \N \N \N 2020-04-08 14:07:36.71+08 2020-04-08 14:07:36.712+08 3 451db320-593b-4777-9848-9d778427dea5 t f
+701 VibratSamplFreq 振弦采样频率 Variable 8K,16K,32K 16K \N \N \N 2020-04-08 14:07:36.715+08 2020-04-08 14:07:36.717+08 4 451db320-593b-4777-9848-9d778427dea5 t f
+713 k 模量系数 Variable \N 1 16 999999 -999999 \N 2020-04-08 15:28:30.927+08 2020-04-08 15:28:30.949+08 2 0236d6b7-7ed8-4c8b-89cf-c4b352d8ed61 t f
+714 f0 频率初值 Variable \N 0 4 99999 -99999 Hz 2020-04-08 15:28:30.976+08 2020-04-08 15:28:30.988+08 2 0236d6b7-7ed8-4c8b-89cf-c4b352d8ed61 t f
+715 kt 温度补偿系数 Variable \N 0 4 9999 -9999 2020-04-08 15:28:31.005+08 2020-04-08 15:28:31.027+08 2 0236d6b7-7ed8-4c8b-89cf-c4b352d8ed61 t f
+716 t0 温度初值 Variable \N 20 3 999 -999 2020-04-08 15:28:31.035+08 2020-04-08 15:28:31.055+08 2 0236d6b7-7ed8-4c8b-89cf-c4b352d8ed61 t f
+717 escape 是否转义 Variable \N true \N \N \N \N 2020-04-09 14:50:37.684+08 2020-04-09 14:50:37.684+08 3 836f48be-3271-48ce-9df0-d8c9f35d9d35 t f
+718 protocol 协议 Variable Modbus,iDAU Modbus \N \N \N 2020-04-09 14:51:12.688+08 2020-04-09 14:51:12.688+08 4 836f48be-3271-48ce-9df0-d8c9f35d9d35 t f
+719 id ID Variable \N 12345678 \N \N \N 2020-04-09 14:51:42.57+08 2020-04-09 14:51:42.57+08 5 836f48be-3271-48ce-9df0-d8c9f35d9d35 t f
+720 dis 采集粒度 Variable \N 5 \N 9999 0 2020-04-09 14:52:21.982+08 2020-04-09 14:52:21.982+08 1 836f48be-3271-48ce-9df0-d8c9f35d9d35 t f
+721 moduleid 模块号 Variable \N 1000 \N \N \N 2020-04-09 14:52:52.487+08 2020-04-09 14:52:52.487+08 5 836f48be-3271-48ce-9df0-d8c9f35d9d35 t f
+722 port 端口 Variable \N 40001 \N 65535 1025 服务侧监听端口 2020-04-09 14:53:29.691+08 2020-04-09 14:53:29.691+08 1 836f48be-3271-48ce-9df0-d8c9f35d9d35 t f
+723 vendor 供应商 Variable 才茂,四信,宏电 才茂 \N \N \N 供应商, 会影响控制帧 2020-04-09 14:54:05.14+08 2020-04-09 14:54:05.14+08 4 836f48be-3271-48ce-9df0-d8c9f35d9d35 t f
+724 ot DTU等待上线时间 Variable \N 60 \N 60000 0 2020-04-09 14:54:45.894+08 2020-04-09 14:54:45.894+08 1 836f48be-3271-48ce-9df0-d8c9f35d9d35 t f
+725 acq 等待应答时间 Variable \N 11 \N 60000 0 2020-04-09 14:55:14.337+08 2020-04-09 14:55:14.337+08 1 836f48be-3271-48ce-9df0-d8c9f35d9d35 t f
+726 delay 休眠延时 Variable \N 5 \N 6000 0 2020-04-09 14:55:57.939+08 2020-04-09 14:55:57.939+08 1 836f48be-3271-48ce-9df0-d8c9f35d9d35 t f
+727 etime 指定时间 Variable \N 00:00:00 \N \N \N 2020-04-09 14:56:21.876+08 2020-04-09 14:56:21.876+08 5 836f48be-3271-48ce-9df0-d8c9f35d9d35 t f
+728 channel 通道 Variable \N 1 \N 128 1 \N 2020-04-09 14:57:55.391+08 2020-04-09 14:57:55.391+08 1 922031d2-ebc0-4fb4-a21a-0bbd78a09b80 t f
+729 triggerjion 定时采样间隔 Variable \N 0 \N 6000 0 s 2020-04-09 14:58:25.697+08 2020-04-09 14:58:25.697+08 1 922031d2-ebc0-4fb4-a21a-0bbd78a09b80 t f
+730 triggersample 定时采样时长 Variable \N 0 \N 6000 0 s 2020-04-09 14:58:59.285+08 2020-04-09 14:58:59.285+08 1 922031d2-ebc0-4fb4-a21a-0bbd78a09b80 t f
+731 sampleduration 加速度触发采样时长 Variable \N 0 \N 6000 0 s 2020-04-09 15:00:06.182+08 2020-04-09 15:00:06.182+08 1 922031d2-ebc0-4fb4-a21a-0bbd78a09b80 t f
+732 filterfreq 滤波频率 Variable \N 1 4 99999 -99999 HZ 2020-04-09 15:00:45.295+08 2020-04-09 15:00:45.295+08 2 922031d2-ebc0-4fb4-a21a-0bbd78a09b80 t f
+733 samplefreq 采样频率 Variable \N 1 4 99999 -99999 HZ 2020-04-09 15:01:22.888+08 2020-04-09 15:01:22.888+08 2 922031d2-ebc0-4fb4-a21a-0bbd78a09b80 t f
+734 accelerationrange 加速度范围 Variable \N 1 4 1024 0 2020-04-09 15:02:00.975+08 2020-04-09 15:02:00.975+08 2 922031d2-ebc0-4fb4-a21a-0bbd78a09b80 t f
+735 triggerlevel 触发加速度 Variable \N 1.1 4 9999 -9999 g 2020-04-09 15:03:33.07+08 2020-04-09 15:03:33.07+08 2 922031d2-ebc0-4fb4-a21a-0bbd78a09b80 t f
+736 lagpionts 滞后点数 Variable \N 1 3 1024 0 2020-04-09 15:04:02.241+08 2020-04-09 15:04:02.241+08 2 922031d2-ebc0-4fb4-a21a-0bbd78a09b80 t f
+737 postdelay 读取前延时 Variable \N 35 \N 6000 1 百毫秒 2020-04-09 15:04:42.004+08 2020-04-09 15:04:42.004+08 1 922031d2-ebc0-4fb4-a21a-0bbd78a09b80 t f
+738 predelay 执行前延迟 Variable \N 25 \N 6000 0 百毫秒 2020-04-09 15:05:17.572+08 2020-04-09 15:05:17.572+08 1 922031d2-ebc0-4fb4-a21a-0bbd78a09b80 t f
+739 module 模块号 Variable \N \N \N \N 2020-04-09 15:05:41.497+08 2020-04-09 15:05:41.497+08 5 922031d2-ebc0-4fb4-a21a-0bbd78a09b80 t f
+740 accerange 加速度范围 Variable \N 0 \N \N \N 2020-04-09 15:06:05.232+08 2020-04-09 15:06:05.232+08 5 922031d2-ebc0-4fb4-a21a-0bbd78a09b80 t f
+741 triggerlevel 触发加速度 Variable \N 1.1 4 9999 -9999 g 2020-04-09 15:06:42.24+08 2020-04-09 15:06:42.24+08 2 922031d2-ebc0-4fb4-a21a-0bbd78a09b80 t f
+742 channel 通道号 Variable \N 1 \N 64 1 \N 2020-04-09 15:21:22.02+08 2020-04-09 15:21:22.025+08 1 74596cc6-9b6c-4386-8915-dd275e4dd101 t f
+743 module 模块号 Variable \N \N \N \N 2020-04-09 15:21:22.028+08 2020-04-09 15:21:22.032+08 5 74596cc6-9b6c-4386-8915-dd275e4dd101 t f
+744 schannel 子通道号 Variable \N 1 \N 32 0 2020-04-09 15:21:22.035+08 2020-04-09 15:21:22.038+08 1 74596cc6-9b6c-4386-8915-dd275e4dd101 t f
+745 predelay 执行前延迟 Variable \N 25 \N 600 0 百毫秒 2020-04-09 15:21:22.04+08 2020-04-09 15:21:22.043+08 1 74596cc6-9b6c-4386-8915-dd275e4dd101 t f
+746 postdelay 读取记录前延迟 Variable \N 35 \N 600 0 百毫秒 2020-04-09 15:21:22.045+08 2020-04-09 15:21:22.048+08 1 74596cc6-9b6c-4386-8915-dd275e4dd101 t f
+747 switchinterval 485切换时间 Variable \N 5 \N 3600 0 ms 2020-04-09 15:21:22.05+08 2020-04-09 15:21:22.053+08 1 74596cc6-9b6c-4386-8915-dd275e4dd101 t f
+748 pmtpf 阈值上限 Variable \N \N 2 9999 -9999 2020-04-09 15:21:22.055+08 2020-04-09 15:21:22.058+08 2 74596cc6-9b6c-4386-8915-dd275e4dd101 t f
+749 pmten 阈值下限 Variable \N \N 2 1999 -9999 2020-04-09 15:21:22.06+08 2020-04-09 15:21:22.063+08 2 74596cc6-9b6c-4386-8915-dd275e4dd101 t f
+750 baudrate 波特率 Variable 2400,9600,19200,115200 9600 \N \N \N 波特率:0=2400,1=9600,2=19200, 3=115200 2020-04-09 15:21:22.065+08 2020-04-09 15:21:22.068+08 4 74596cc6-9b6c-4386-8915-dd275e4dd101 t f
+751 parity 校验位 Variable 无校验,奇校验,偶校验 无校验 \N \N \N 2020-04-09 15:21:22.071+08 2020-04-09 15:21:22.073+08 4 74596cc6-9b6c-4386-8915-dd275e4dd101 t f
+752 databits 数据位 Variable 7位,8位,9位 8位 \N \N \N 2020-04-09 15:21:22.076+08 2020-04-09 15:21:22.079+08 4 74596cc6-9b6c-4386-8915-dd275e4dd101 t f
+753 stopbits 停止位 Variable 1位,1.5位,2位 1位 \N \N \N 2020-04-09 15:21:22.081+08 2020-04-09 15:21:22.084+08 4 74596cc6-9b6c-4386-8915-dd275e4dd101 t f
+754 k 模量系数 Variable \N 1 16 999999 -999999 \N 2020-04-09 15:37:03.643+08 2020-04-09 15:37:03.649+08 2 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+755 f0 频率初值 Variable \N \N 4 9999 -9999 HZ 2020-04-09 15:37:03.652+08 2020-04-09 15:37:03.669+08 2 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+756 kt 温度补偿系数 Variable \N 0 4 999 -999 2020-04-09 15:37:03.689+08 2020-04-09 15:37:03.693+08 2 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+757 predelay 执行前延迟 Variable \N 25 \N 6000 0 百毫秒 2020-04-09 15:37:03.697+08 2020-04-09 15:37:03.701+08 1 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+758 postdelay 读取前延时 Variable \N 35 \N 6000 0 百毫秒 2020-04-09 15:37:03.707+08 2020-04-09 15:37:03.711+08 1 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+759 channel 通道号 Variable \N 1 \N 64 1 2020-04-09 15:37:03.714+08 2020-04-09 15:37:03.717+08 1 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+760 t0 温度初值 Variable \N 20 4 999 -999 ℃ 2020-04-09 15:37:03.719+08 2020-04-09 15:37:03.724+08 2 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+761 frequencyid 频谱ID Variable \N 1 \N \N \N 2020-04-09 15:37:03.727+08 2020-04-09 15:37:03.73+08 5 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+762 collectoption 采集选项 Variable 1,2,3 3 \N \N \N 2020-04-09 15:37:03.732+08 2020-04-09 15:37:03.735+08 4 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+763 fid 公式ID Variable \N 1 \N \N \N 2020-04-09 15:37:03.737+08 2020-04-09 15:37:03.74+08 5 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+764 vibratsamplfreq 采样频率 Variable 8K,16K,32K 16K \N \N \N 2020-04-09 15:37:03.75+08 2020-04-09 15:37:03.755+08 4 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+768 incentivemethod 激励方式 Variable 单脉冲激励,多脉冲激励,共振激励 多脉冲激励 \N \N \N \N 2020-04-09 15:38:14.222+08 2020-04-09 15:38:14.222+08 4 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+769 incentive 是否发激励信号 Variable 是,否 是 \N \N \N 2020-04-09 15:38:37.075+08 2020-04-09 15:38:37.075+08 4 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+770 frequency 配置频率 Variable \N 0 6 99999 0 Hz 2020-04-09 15:39:08.073+08 2020-04-09 15:39:08.073+08 2 ad167c7a-80b6-4a2b-960a-532352df8a3c t f
+771 module 模块号 Variable \N \N \N \N \N 2020-04-10 14:59:58.835+08 2020-04-10 14:59:58.838+08 5 c34d10ca-5037-406b-bedb-1c9e93c0502c f f
+772 schannel 二级通道 Variable \N 0 \N 32 0 2020-04-10 14:59:58.84+08 2020-04-10 14:59:58.843+08 1 c34d10ca-5037-406b-bedb-1c9e93c0502c t f
+778 channel \N Variable 1,2,3 \N \N \N \N \N 2020-04-22 19:17:12.014+08 2020-04-22 19:17:12.31+08 4 a53ae7a4-4432-4696-9af3-bbc514ecee6e t f
+773 enabled 是否启用 Variable \N true \N \N \N 2020-04-10 14:59:58.845+08 2020-04-10 14:59:58.847+08 3 c34d10ca-5037-406b-bedb-1c9e93c0502c t f
+774 sensorid 传感器ID Variable \N 1234 \N 2147483647 1 2020-04-10 14:59:58.848+08 2020-04-10 14:59:58.85+08 1 c34d10ca-5037-406b-bedb-1c9e93c0502c t f
+775 channel 通道 Variable 1,2,3,4,5,6,7,,8,9,10,11,12,13,14,15,16 1 \N \N \N 2020-04-10 14:59:58.852+08 2020-04-10 14:59:58.853+08 4 c34d10ca-5037-406b-bedb-1c9e93c0502c t f
+776 postdelay 后延时 Variable \N 35 \N 600 0 百毫秒 2020-04-10 14:59:58.855+08 2020-04-10 14:59:58.857+08 1 c34d10ca-5037-406b-bedb-1c9e93c0502c t f
+777 predelay 前延时 Variable \N 25 \N 600 0 百毫秒 2020-04-10 14:59:58.859+08 2020-04-10 14:59:58.86+08 1 c34d10ca-5037-406b-bedb-1c9e93c0502c t f
+661 URL 主机地址 Constant 10.8.25.231:1883 0 “ 无 2020-03-18 11:21:45.319+08 2020-04-10 15:51:58.991+08 5 3d1a9d6a-ff6b-4b29-bb30-1c39079c1362 t f
+779 type Variable Voltage,Current \N \N \N \N 2020-04-22 19:17:12.317+08 2020-04-22 19:17:12.321+08 4 a53ae7a4-4432-4696-9af3-bbc514ecee6e t f
+780 bits \N Variable 13,14,15,16 \N \N \N \N \N 2020-04-22 19:17:50.022+08 2020-04-22 19:17:50.027+08 4 de1d3ee0-008d-4b6c-be9e-a94740944e36 t f
+781 channel \N Variable 1/2/3 \N \N \N \N \N 2020-04-22 19:22:43.227+08 2020-04-22 19:22:43.235+08 4 139e622c-b7ec-45e4-9d31-862953487b92 t f
+782 channel \N Variable 1/2/3 \N \N \N \N \N 2020-04-22 19:23:18.828+08 2020-04-22 19:23:18.832+08 4 296ce231-ea55-48e7-90a3-4aea8879b66f t f
+783 baudrate \N Variable 4800,9600,115200 \N \N \N \N \N 2020-04-22 19:24:45.538+08 2020-04-22 19:24:45.55+08 4 f6b4041e-0a8c-46cf-a8df-21621b01f953 t f
+784 ip \N Variable \N \N \N \N \N 2020-04-22 19:26:40.977+08 2020-04-22 19:26:40.995+08 5 2686f932-1a7d-4a02-a326-e06e0d92f30a t f
+787 channelid 通道 Variable \N 1 \N 32 1 \N 2020-06-24 15:14:07.803+08 2020-06-24 15:14:08.092+08 1 789cc633-6120-4c95-95a7-c7f15063488f t f
+788 nodeid 通道下节点 Variable \N 1 \N 32 1 \N 通道下的节点 2020-06-24 15:15:09.621+08 2020-06-24 15:15:09.621+08 1 789cc633-6120-4c95-95a7-c7f15063488f t f
+789 module 模块号 Variable \N \N \N \N \N 2020-07-03 17:55:23.771+08 2020-07-03 17:55:23.771+08 5 1c21f4ae-9f87-49b7-96f4-64f39a145e97 t f
+792 channel 关联通道 Variable \N 1 \N \N \N \N a,b,c 2020-07-31 11:01:11.293+08 2020-07-31 11:01:11.298+08 5 fd7433b9-9a8b-43c3-86e9-dab7d653da20 t f
+793 url 接口地址 Variable \N http://10.8.25.254:7005/gnss/ \N \N \N \N 2020-08-10 15:20:00.779+08 2020-08-10 15:20:00.779+08 5 b0b670ee-6fd7-4178-b684-08677b47ba30 t f
+815 module 模块号 Variable \N \N \N \N \N 2020-08-27 16:07:56.374+08 2020-08-27 16:07:56.405+08 5 ceec3d38-6fcc-4e58-a430-c43b5e2291ff t f
+796 vendor 供应商 Variable 才茂,四信,宏电 才茂 \N \N \N 供应商, 会影响控制帧 2020-08-18 10:24:23.911+08 2020-08-18 10:24:23.913+08 4 e8fa0f36-2606-4bc7-b594-ae3c3289ed63 t f
+816 channel 通道号 Variable \N 1 \N 99 1 2020-08-27 16:07:56.411+08 2020-08-27 16:07:56.414+08 1 ceec3d38-6fcc-4e58-a430-c43b5e2291ff t f
+798 protocol 协议 Variable Modbus,iDAU Modbus \N \N \N 2020-08-18 10:24:23.919+08 2020-08-18 10:24:23.922+08 4 e8fa0f36-2606-4bc7-b594-ae3c3289ed63 t f
+799 id ID Variable \N 12345678 \N \N \N 2020-08-18 10:24:23.924+08 2020-08-18 10:24:23.931+08 5 e8fa0f36-2606-4bc7-b594-ae3c3289ed63 t f
+800 ot DTU等待上线时间 Variable \N 60 \N 60000 0 2020-08-18 10:24:23.935+08 2020-08-18 10:24:23.938+08 1 e8fa0f36-2606-4bc7-b594-ae3c3289ed63 t f
+794 moduleid 模块号 Variable 1000 0 2020-08-18 10:24:23.896+08 2020-08-18 10:50:22.042+08 5 e8fa0f36-2606-4bc7-b594-ae3c3289ed63 f f
+795 port 端口 Variable 40001 0 65535 1025 服务侧监听端口 2020-08-18 10:24:23.906+08 2020-08-18 10:50:40.28+08 1 e8fa0f36-2606-4bc7-b594-ae3c3289ed63 t f
+801 acq 等待应答时间 Variable \N 11 \N 60000 0 \N 2020-08-18 10:51:35.626+08 2020-08-18 10:51:35.626+08 1 e8fa0f36-2606-4bc7-b594-ae3c3289ed63 t f
+802 delay 休眠延时 Variable \N 5 \N 60000 0 2020-08-18 10:52:05.137+08 2020-08-18 10:52:05.137+08 1 e8fa0f36-2606-4bc7-b594-ae3c3289ed63 t f
+803 dis 采集粒度 Variable \N 5 \N 999 0 2020-08-18 10:52:36.664+08 2020-08-18 10:52:36.664+08 1 e8fa0f36-2606-4bc7-b594-ae3c3289ed63 t f
+804 etime 指定时间 Variable \N 00:00:00 \N \N \N 2020-08-18 10:53:03.702+08 2020-08-18 10:53:03.702+08 5 e8fa0f36-2606-4bc7-b594-ae3c3289ed63 t f
+797 escape 是否转义 Variable false 0 2020-08-18 10:24:23.915+08 2020-08-18 10:53:17.363+08 3 e8fa0f36-2606-4bc7-b594-ae3c3289ed63 t f
+805 channelid 通道 Variable \N 1 \N 32 1 \N 2020-08-26 11:58:42.827+08 2020-08-26 11:58:42.835+08 1 0d79aad8-d5e4-4ae1-8062-4bbf602713cf t f
+806 nodeid 通道下分区 Variable \N 1 \N 10000000000 1 2020-08-26 11:58:42.839+08 2020-08-26 11:58:42.843+08 1 0d79aad8-d5e4-4ae1-8062-4bbf602713cf t f
+812 SubscribeTopic 订阅主题 Variable \N \N \N \N 2020-08-27 15:51:38.018+08 2020-08-27 15:51:38.018+08 5 0237523c-9c1a-4c16-9fc8-7b8f9a369383 t f
+817 sample 采集粒度 Variable \N 1 \N 99999 1 min 2020-08-27 16:07:56.416+08 2020-08-27 16:07:56.418+08 1 ceec3d38-6fcc-4e58-a430-c43b5e2291ff t f
+818 upload 上报粒度 Variable \N 1 \N 99999 1 min 2020-08-27 16:07:56.419+08 2020-08-27 16:07:56.421+08 1 ceec3d38-6fcc-4e58-a430-c43b5e2291ff f f
+819 plus 加报粒度 Variable \N 1 \N 99999 1 min 2020-08-27 16:07:56.423+08 2020-08-27 16:07:56.425+08 1 ceec3d38-6fcc-4e58-a430-c43b5e2291ff f f
+820 cp1 参数1 Variable \N 0 6 99999 -99999 2020-08-27 16:07:56.427+08 2020-08-27 16:07:56.429+08 2 ceec3d38-6fcc-4e58-a430-c43b5e2291ff t f
+821 cp2 参数2 Variable \N 0 6 99999 -99999 2020-08-27 16:07:56.431+08 2020-08-27 16:07:56.433+08 2 ceec3d38-6fcc-4e58-a430-c43b5e2291ff t f
+822 cp3 参数3 Variable \N 0 6 99999 -99999 2020-08-27 16:07:56.435+08 2020-08-27 16:07:56.437+08 2 ceec3d38-6fcc-4e58-a430-c43b5e2291ff t f
+823 cp4 参数4 Variable \N 0 6 99999 -99999 2020-08-27 16:07:56.438+08 2020-08-27 16:07:56.441+08 2 ceec3d38-6fcc-4e58-a430-c43b5e2291ff t f
+824 upperlimit 上限值 Variable \N \N 6 999999 0 2020-08-27 16:07:56.442+08 2020-08-27 16:07:56.446+08 2 ceec3d38-6fcc-4e58-a430-c43b5e2291ff t f
+808 ClientID 客户端ID Variable 0 2020-08-27 15:50:04.996+08 2020-08-27 17:29:32.823+08 5 0237523c-9c1a-4c16-9fc8-7b8f9a369383 f f
+809 Persistent 长连接 Variable true 0 2020-08-27 15:50:34.104+08 2020-08-27 17:29:42.84+08 3 0237523c-9c1a-4c16-9fc8-7b8f9a369383 f f
+810 Username 用户 Variable 0 2020-08-27 15:50:55.166+08 2020-08-27 17:29:52.502+08 5 0237523c-9c1a-4c16-9fc8-7b8f9a369383 f f
+811 Password 密码 Variable 0 2020-08-27 15:51:13.65+08 2020-08-27 17:30:02.143+08 5 0237523c-9c1a-4c16-9fc8-7b8f9a369383 f f
+813 PublishTopic 发布主题 Variable 0 2020-08-27 15:52:11.977+08 2020-08-27 17:30:21.663+08 5 0237523c-9c1a-4c16-9fc8-7b8f9a369383 f f
+814 Qos 发布Qos Variable 2 0 2020-08-27 15:52:49.134+08 2020-08-27 17:30:28.866+08 5 0237523c-9c1a-4c16-9fc8-7b8f9a369383 f f
+876 accelerationrange 加速度量程 Variable 2,4,8 2 \N \N \N g 2020-12-28 16:51:48.922+08 2020-12-28 16:51:48.931+08 4 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+878 lagpoint 滞后点数 Variable \N 0 \N 2048 0 2020-12-28 16:51:48.936+08 2020-12-28 16:51:48.94+08 1 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+825 type 设备类型 Variable 地表裂缝计,墙裂缝计,加速度计,泥位计,预警喇叭,雨量计,土壤含水率,裂缝计,GNSS结果数据,GNSS,倾角计,水压力,次声,土压力计,振弦式应力计,地表位移,深部位移,倾斜仪,地下水水位,多点位移,渗压计,流速仪,气温,TDR变形计,泉水流量,沉降仪,钻孔测斜仪,土壤温湿度计 地表裂缝计 \N \N \N 2020-08-27 16:07:56.448+08 2020-08-27 16:07:56.45+08 4 ceec3d38-6fcc-4e58-a430-c43b5e2291ff t f
+826 lowerlimit 下限值 Variable \N 0 6 99999 -99999 2020-08-27 16:07:56.46+08 2020-08-27 16:07:56.462+08 2 ceec3d38-6fcc-4e58-a430-c43b5e2291ff t f
+827 thresholdy Y阈值 Variable \N \N 6 99999 0 2020-08-27 16:07:56.464+08 2020-08-27 16:07:56.466+08 2 ceec3d38-6fcc-4e58-a430-c43b5e2291ff t f
+828 thresholdx X阈值 Variable \N \N 6 99999 0 2020-08-27 16:07:56.468+08 2020-08-27 16:07:56.47+08 2 ceec3d38-6fcc-4e58-a430-c43b5e2291ff t f
+829 thresholdz Z阈值 Variable \N \N 6 99999 0 2020-08-27 16:07:56.471+08 2020-08-27 16:07:56.473+08 2 ceec3d38-6fcc-4e58-a430-c43b5e2291ff t f
+830 URL 主机地址 Variable \N 10.8.25.231:1883 \N \N \N \N 2020-09-04 09:55:05.292+08 2020-09-04 09:55:05.292+08 5 0237523c-9c1a-4c16-9fc8-7b8f9a369383 t f
+831 URL 主机地址 Variable \N \N \N \N \N 2020-09-07 16:06:49.183+08 2020-09-07 16:06:49.187+08 5 cd04713a-2775-4af9-94b3-89ddeca68f9a t f
+872 triggermode 触发方式 Variable 绝对值,上升沿,下降沿,峰值 绝对值 \N \N \N 2020-12-28 16:51:48.908+08 2020-12-28 16:51:48.911+08 4 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+833 Persistent 长连接 Variable \N true \N \N \N 2020-09-07 16:06:49.195+08 2020-09-07 16:06:49.197+08 3 cd04713a-2775-4af9-94b3-89ddeca68f9a f f
+834 Username 用户 Variable \N \N \N \N 2020-09-07 16:06:49.199+08 2020-09-07 16:06:49.202+08 5 cd04713a-2775-4af9-94b3-89ddeca68f9a f f
+835 Password 密码 Variable \N \N \N \N 2020-09-07 16:06:49.205+08 2020-09-07 16:06:49.207+08 5 cd04713a-2775-4af9-94b3-89ddeca68f9a f f
+836 SubscribeTopic 订阅主题 Variable \N \N \N \N 2020-09-07 16:06:49.209+08 2020-09-07 16:06:49.212+08 5 cd04713a-2775-4af9-94b3-89ddeca68f9a t f
+837 PublishTopic 发布主题 Variable \N \N \N \N 2020-09-07 16:06:49.214+08 2020-09-07 16:06:49.215+08 5 cd04713a-2775-4af9-94b3-89ddeca68f9a f f
+838 Qos 发布Qos Variable \N 2 \N \N \N 2020-09-07 16:06:49.217+08 2020-09-07 16:06:49.219+08 5 cd04713a-2775-4af9-94b3-89ddeca68f9a f f
+832 ClientID 客户端ID Variable 0 2020-09-07 16:06:49.19+08 2020-09-07 16:07:00.109+08 5 cd04713a-2775-4af9-94b3-89ddeca68f9a f f
+839 module 模块号 Variable \N \N \N \N \N 2020-09-11 13:47:23.723+08 2020-09-11 13:47:23.728+08 5 2bef85fc-4b8c-4b06-aea3-c4309283871b t f
+840 channel 通道号 Variable \N \N \N \N \N 2020-09-11 13:48:52.437+08 2020-09-11 13:48:52.437+08 5 2bef85fc-4b8c-4b06-aea3-c4309283871b t f
+864 duration 定时采集粒度 Variable 5 0 999999 0 min 2020-12-28 16:51:48.87+08 2020-12-28 16:52:20.954+08 1 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+859 card_id 标签卡的ID Variable \N \N \N \N \N 2020-12-09 13:53:21.144+08 2020-12-09 13:53:22.739+08 5 6ef0562f-3378-453f-935e-8057c95048ae t f
+860 channel 通道 Variable 1,2,3,4,5,6,7,8 1 \N \N \N \N 2020-12-28 16:51:48.759+08 2020-12-28 16:51:48.846+08 4 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+853 modulenum 设备地址 Variable \N \N \N \N \N 2020-09-25 08:56:46.249+08 2020-09-25 08:56:46.252+08 5 76039ea0-1ef9-4965-a90a-50e97497174a f f
+854 boxid 包序号 Variable \N \N \N \N 2020-09-25 08:56:46.254+08 2020-09-25 08:56:46.257+08 5 76039ea0-1ef9-4965-a90a-50e97497174a t f
+855 nodeid 节点号 Variable \N \N \N \N 2020-09-25 08:56:46.258+08 2020-09-25 08:56:46.26+08 5 76039ea0-1ef9-4965-a90a-50e97497174a t f
+880 sduration 定时采集时长 Variable \N 5 \N 99999 0 s 2020-12-28 16:53:32.855+08 2020-12-28 16:53:32.855+08 1 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+862 mode 模块模式 Variable 角度模式,加速度模式 角度模式 \N \N \N 2020-12-28 16:51:48.859+08 2020-12-28 16:51:48.865+08 4 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+882 das 去直流 Variable \N true \N \N \N 2020-12-28 16:55:17.508+08 2020-12-28 16:55:17.508+08 3 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+891 node_id Point_ID Variable \N 1 \N \N \N \N 2021-01-07 08:48:14.156+08 2021-01-07 08:48:14.16+08 5 193f76a4-e706-4709-a54a-f6f08be3495c t f
+870 amplification 放大倍数 Variable 1,10,100,1000 1 \N \N \N 2020-12-28 16:51:48.9+08 2020-12-28 16:51:48.904+08 4 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+883 amplitudeadj 幅值修正参数 Variable 0 2 51241 0 \N 2020-12-28 17:24:24.16+08 2020-12-28 17:25:40.278+08 2 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+874 tduration 加速度触发采集时长 Variable \N 5 \N 999999 0 s 2020-12-28 16:51:48.914+08 2020-12-28 16:51:48.918+08 1 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+884 triglevel 触发电平 Variable 30 2 300 5 mv 2020-12-28 17:25:23.686+08 2020-12-28 17:25:50.634+08 2 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+885 triggerjoin 参与触发方式 Variable 不参与,参与 参与 \N \N \N 2020-12-28 17:33:28.186+08 2020-12-28 17:33:28.186+08 4 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+866 samplefreq 采样频率 Variable 1024 0 2048 32 Hz 2020-12-28 16:51:48.88+08 2020-12-28 17:59:28.227+08 1 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+868 filterfreq 过滤频率 Variable 128 0 2048 64 Hz 2020-12-28 16:51:48.888+08 2020-12-28 17:59:49.006+08 1 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+881 dcdriftadj 直流漂移校准参数 Variable 0 2 6255 0 2020-12-28 16:54:41.668+08 2020-12-29 16:27:26.167+08 2 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+886 module 模块号 Variable \N \N \N \N \N 2020-12-31 14:15:47.086+08 2020-12-31 14:15:47.091+08 5 415b61a8-f54e-4e4b-a599-bf878220deab t f
+887 channel 通道号 Variable \N \N \N \N \N 2020-12-31 14:16:14.074+08 2020-12-31 14:16:14.074+08 5 415b61a8-f54e-4e4b-a599-bf878220deab t f
+888 sensortype 类型 Variable \N \N \N \N 2020-12-31 14:23:30.045+08 2020-12-31 14:23:30.045+08 5 415b61a8-f54e-4e4b-a599-bf878220deab t f
+889 module 模块号 Variable \N \N \N \N \N 2021-01-04 15:45:03.763+08 2021-01-04 15:45:03.763+08 5 ed710604-9677-4ca7-9f7d-376135ae5cbf t f
+890 serialnum 序列号 Variable \N \N \N \N \N 2021-01-06 11:14:57.713+08 2021-01-06 11:14:57.713+08 5 415b61a8-f54e-4e4b-a599-bf878220deab t f
+\.
+
+
+--
+-- Name: InterfaceProperty_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public."InterfaceProperty_id_seq"', 891, true);
+
+
+--
+-- Data for Name: InterfaceType; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."InterfaceType" (id, name, key, "desc", "createdAt", "updatedAt") FROM stdin;
+1 Serial serial 串口 2017-08-12 17:07:00.461+08 2017-08-12 17:07:00.461+08
+2 ZigBee zigbee ZigBee 2017-08-12 17:07:00.464+08 2017-08-12 17:07:00.464+08
+4 SoIP soip 串口 Over IP 2017-08-12 17:07:00.471+08 2017-08-12 17:07:00.471+08
+3 CLAA_MSP claa_msp CLAA MSP Lora接入协议 2017-08-12 17:07:00.467+08 2017-08-12 17:07:00.467+08
+5 HTTP http HTTP \N \N
+6 MQTT mqtt MQTT \N \N
+7 Kafka kafka Kafka \N \N
+0 自定义 user 用户自定义 \N \N
+8 振弦 vm 振弦 \N \N
+9 VNC vnc VNC \N \N
+10 RAW_TCP_CLIENT raw_tcp_client TCP客户端(无协议) \N \N
+11 HTTP_SERVER http_server http服务 \N \N
+12 IOTA_MQTT IOTA_MQTT 平台标准MQTT \N \N
+\.
+
+
+--
+-- Name: InterfaceType_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public."InterfaceType_id_seq"', 4, true);
+
+
+--
+-- Data for Name: Layout; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Layout" (id, "desc", settings, "createdAt", "updatedAt", "thingId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: LayoutLink; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."LayoutLink" (id, "layoutInfo", "createdAt", "updatedAt", "fromLayoutNodeId", "toLayoutNodeId", "fromDeviceInterfaceId", "toDeviceInterfaceId", "parentLinkId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: LayoutNode; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."LayoutNode" (id, "layoutInfo", "extLocInfo", "createdAt", "updatedAt", "layoutId", "deviceId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: Migrations; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Migrations" (name) FROM stdin;
+0_0_12.js
+0_0_14.js
+0_0_15.js
+0_0_16.js
+0_0_18.js
+0_0_19.js
+0_0_20.js
+0_0_22.js
+0_0_23.js
+0_0_26.js
+0_0_28.js
+0_0_32.js
+0_0_34.js
+\.
+
+
+--
+-- Data for Name: Notice; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Notice" (id, receiver, sender, title, content, "expireDate", "createdAt", "updatedAt", type) FROM stdin;
+\.
+
+
+--
+-- Data for Name: NoticeType; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."NoticeType" (id, name, "desc", "createdAt", "updatedAt") FROM stdin;
+WorkOrder 工单通知 工单类型通知 2017-08-12 17:07:00.41+08 2017-08-12 17:07:00.41+08
+System 系统通知 系统类型通知 2017-08-12 17:07:00.415+08 2017-08-12 17:07:00.415+08
+Certification 认证通知 认证类型通知 2017-08-12 17:07:00.418+08 2017-08-12 17:07:00.418+08
+Invitation 用户组通知 用户组类型通知 2017-08-12 17:07:00.421+08 2017-08-12 17:07:00.421+08
+\.
+
+
+--
+-- Data for Name: OperationRecord; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."OperationRecord" (id, record, "operatorId", type, "createdAt", "updatedAt", "workOrderId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: Order; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Order" (id, out_trade_no, service_name, fee, "oldBalance", "newBalance", time_start, time_end, "payChannel", "paymentState", transaction_id, bank_type, openid, standard, product_id, "createdAt", "updatedAt", "accountId", "servicePackageId", "beginTime", "endTime") FROM stdin;
+\.
+
+
+--
+-- Data for Name: Permission; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Permission" (id, "createdAt", "updatedAt", "roleId", "resourceTypeKey", "operationTypeKey") FROM stdin;
+\.
+
+
+--
+-- Data for Name: PersonCertification; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."PersonCertification" (id, name, "cardId", "frontImg", "reverseImg", status, reason, "createdAt", "updatedAt", "userId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: PropertyType; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."PropertyType" (id, name, key, "desc", "createdAt", "updatedAt") FROM stdin;
+1 整型 integer Integer 2017-08-12 17:07:00.441+08 2017-08-12 17:07:00.441+08
+2 浮点型 float Float 2017-08-12 17:07:00.446+08 2017-08-12 17:07:00.446+08
+3 布尔型 boolean Boolean 2017-08-12 17:07:00.449+08 2017-08-12 17:07:00.449+08
+4 枚举 enum Enumerate 2017-08-12 17:07:00.452+08 2017-08-12 17:07:00.452+08
+5 字符串 string String 2017-08-12 17:07:00.455+08 2017-08-12 17:07:00.455+08
+6 密码 password password \N \N
+\.
+
+
+--
+-- Name: PropertyType_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public."PropertyType_id_seq"', 5, true);
+
+
+--
+-- Data for Name: ProtocolCertification; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."ProtocolCertification" (id, status, reason, "createdAt", "updatedAt", "userId", "protocolMetaId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: ProtocolMeta; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."ProtocolMeta" (id, name, image, "desc", version, "belongTo", investor, public, "createBy", impl, resource, "resType", "createdAt", "updatedAt", "enableTime", "vendorId") FROM stdin;
+feaee3b1-a825-46b2-af38-888c53423eba test154 \N 154 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f 56031544-f3e0-407f-9ffa-1a54742ecfa7 Lua --AA028CFEA6FF\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, ctx=", "thk_inclinometer_1548.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local X_axis =iota.hexToShort(hex,1,'B')/1000.0\n local Y_axis =iota.hexToShort(hex,3,'B')/1000.0\n \n out.data = { --需要测试\n xDegree = X_axis,\n yDegree = Y_axis\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n --iota.checkPlusSum16\n return true\n--crc\nend\n\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n INLINE 2017-11-09 11:04:11.518+08 2018-02-28 19:01:46.659+08 2017-11-09 \N
+1dfd10ac-171c-407b-a931-97f89d8f31c4 xmxd_5500 \N 1.0 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 f 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 Lua \n--//201809项目\\20180907项目资料提交\\1、沉降监测--厦门忻德--梁少龙\\集中器-平台通讯数据格式.xls\n--require "functions" -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {} //设备信息\nprotocol=> {} //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\nstart=function ()\n\tctx:asend("010203")\nend\n--moduleId= 通道1 通道2 通道3 通道4\n--\n--前3组0 \n--第4组\n--"frequency": \n--"temperature": \nonData=function (hex)\n\t--主动上传式\n\tlog.debug("xmxd_5500 Received<==%s",hex)\n\tlocal out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\tlocal sData=HextoStr(hex)\n log.debug("xmxd_5500 hexToStr=%s",sData)\n\t\tlocal moduleNo = tonumber(string.sub(sData,4,8))\n log.debug("xmxd_5500 moduleNo=%s",moduleNo)\n local sensorCount=tonumber(string.sub(sData,14,16))\n\n\t\t\n for i=1,sensorCount,1 do\n local index=16+23*(i-1)\n\t\t\t local Length = string.sub(sData,index+4,index+8)/100;\n local Temperature=string.sub(sData,index+9,index+11);\n\t\t\t --循环插入单通道数据表\n\t\t\t \n\t\t\t--获取通道设备deviceId \n local channelNo=tonumber(string.sub(sData,index+1,index+3))\n log.debug("xmxd_5500 模块号=%s,通道号=%s",moduleNo,channelNo)\n local childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\t\t\t--\n local deviceId\n if childDevice~=nil then\n \tdeviceId=childDevice.id\n log.debug("xmxd_5500 子设备原形childDevice=%s",json.encode(childDevice))\n local data1={\n data={\n length=Length,\n temperature=Temperature\n },\n device=deviceId,\n type=1 ,\n }\n table.insert(out.data,data1)\t\t\n else\n log.debug("xmxd_5500 子设备:m=%s,c=%s deviceId为nil",moduleNo,channelNo)\n end\n\t\t\t \n\t\tend\t\t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n\tctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n log.debug("xmxd_5500 查询Id moduleId="..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n \tif child.uplink.props.module==tostring(moduleNoId) then\n\t\t \t if child.uplink.props.channel == tostring(channelNoId) then\n log.debug("xmxd_5500 匹配到DeviceInfo=%s",json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("xmxd_5500 subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function (data)\n\tlog.debug('xmxd_5500 开始校验数据')\n if data == nil or string.len(data)/2 <= 40 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('xmxd_5500 Data is nil or invalid length')\n return false\n end\n\n\tif string.sub(data,1,6)~="545548" then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n\t\tlog.debug('xmxd_5500 Hex CMD False ~=%s',"545548")\n return false\n end\t\n log.debug('xmxd_5500 校验通过')\n\treturn true\n\t\nend\n--字符串ascii->字符\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n INLINE 2018-09-10 17:10:47.884+08 2018-10-12 18:52:41.304+08 2018-09-10 \N
+36bc4a09-8734-498e-9d50-58bf5991dd1a TestMicro \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug('fs_microPower_t2 : devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n if data ~= nil then\n log.debug('fs_microPower_t2 : devices data =%s', data)\n ParseData(data)\n else\n log.error('fs_microPower_t2 : recvd content is nil')\n end\nend\n\nfunction ParseData(data)\n out = {\n data = {},\n result = {},\n type = 2\n }\n if string.sub(data, 1, 2) == '01' and string.sub(data, -2, -1) == 'fa' then --振动数据\n --log.debug('fs_microPower_t2 : 振动数据 data =%s', data)\n local package = iota.hexToShort(data, 8, 'L')\n local packagecount = iota.hexToShort(data, 10, 'L')\n local datpackage = string.sub(data, 41, -9)\n local moduleid = iota.hexToShort(data, 16, 'L')\n\n local req1 = ''\n local req2 = ''\n local req = ''\n req1 = iota.appendHexByte(req1, 01, 'L') -- 0-3 压缩协议 4-7 协议版本\n req1 = iota.appendHexByte(req1, 0x02, 'L')\n req1 = iota.appendHexWord(req1, 0x0007, 'L')\n req1 = iota.appendHexWord(req1, 0x0000, 'L')\n\n req2 = iota.appendHexWord(req2, package, 'L')\n req2 = iota.appendHexWord(req2, packagecount, 'L')\n req2 = iota.appendHexWord(req2, 0x0000, 'L')\n req2 = iota.appendHexWord(req2, 0x0000, 'L')\n req2 = iota.appendHexWord(req2, moduleid, 'L')\n req2 = iota.appendHexWord(req2, 0x0000, 'L')\n local checkdat = req1 .. req2\n local checksum = HeadCheckSum(checkdat)\n req = req1\n req = iota.appendHexWord(req, checksum, 'L')\n req = req .. req2\n req = iota.appendHexWord(req, package, 'L')\n req = iota.appendHexByte(req, 0, 'L')\n req = iota.appendHexByte(req, 0, 'L')\n req = iota.appendHexByte(req, 0, 'L')\n req = iota.appendHexByte(req, 0, 'L')\n req = iota.appendHexByte(req, 0, 'L')\n req = req .. '00000000'\n req = iota.appendHexCrc(req, 'L', 0) --校验\n local crc16 = string.sub(req, -4, -1)\n req = string.sub(req, 1, -13)\n req = req .. crc16\n req = iota.appendHexByte(req, 0, 'L')\n req = iota.appendHexByte(req, 0xfa, 'L')\n log.debug('fs_microPower_t2: datfileback: %s', req)\n ctx:asend(req, 20000)\n\n if package == packagecount then\n local r1, ok = redis.get(device.id .. '_mpzd')\n log.debug('fs_microPower_t2: 解析dat:r1= %s', r1)\n ParseFileDat(r1)\n else\n if package == 1 then\n local firstpackage = string.sub(datpackage, -80, -1)\n redis.set(device.id .. '_mpzd', firstpackage)\n log.debug('fs_microPower_t2: 接收dat:datpackage= %s', firstpackage)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据首包'\n }\n }\n ctx:notify(json.encode(re))\n else\n local r1, ok = redis.get(device.id .. '_mpzd')\n --log.debug('fs_microPower_t2: 接收dat:r1= %s package=%s', r1, package)\n local data = r1 .. datpackage\n redis.set(device.id .. '_mpzd', data)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据'\n }\n }\n ctx:notify(json.encode(re))\n end\n end\n else -- 非振动数据\n if string.sub(data, 13, 16) == '8a00' then\n local rtumodule = iota.hexToShort(data, 3, 'B')\n local power = iota.hexToByte(data, 13, 'B')\n log.debug('fs_microPower_t2: 剩余电量: %s', power)\n local strdevice = toHexStr(json.encode(device))\n strdevice = iota.appendHexCrc(strdevice, 'B', 0)\n local crc = string.sub(strdevice, -4, -1)\n --log.debug('fs_microPower_t2 : devices crc =%s', crc)\n local r1, ok = redis.get(device.id .. '_mpset')\n if ok and r1 ~= nil then\n if crc == r1 then\n --log.debug('fs_microPower_t2 : 配置无修改')\n local req = ''\n req = iota.appendHexByte(req, 0xfe, 'B') --帧头\n req = iota.appendHexWord(req, 0x000c, 'B') --设备号:0x0B,多通道数据采集系统\n req = iota.appendHexWord(req, rtumodule, 'B') --模块号\n req = iota.appendHexByte(req, 0x01, 'B') --命令源\n req = iota.appendHexWord(req, 0x0A01, 'B') --指令\n req = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n req = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n req = iota.appendHexByte(req, os.date('%m'), 'B')\n req = iota.appendHexByte(req, os.date('%d'), 'B')\n req = iota.appendHexByte(req, os.date('%H'), 'B')\n req = iota.appendHexByte(req, os.date('%M'), 'B')\n req = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n req = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req = iota.appendHexByte(req, 0, 'B') -- 是否下发\n --req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req = iota.appendHexWord(req, 0, 'B') --当前版本\n req = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n req = iota.appendHexCrc(req, 'B', 0) --校验\n req = iota.appendHexByte(req, 0xef, 'B') --帧尾\n --log.debug('fs_microPower_t2: 苏醒帧返回: %s', req)\n ctx:asend(req, 20000)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置无修改'\n }\n }\n ctx:notify(json.encode(re))\n else\n --log.debug('fs_microPower_t2 : 配置有修改')\n local req = ''\n req = iota.appendHexByte(req, 0xfe, 'B') --帧头\n req = iota.appendHexWord(req, 0x000c, 'B') --设备号:0x0B,多通道数据采集系统\n req = iota.appendHexWord(req, rtumodule, 'B') --模块号\n req = iota.appendHexByte(req, 0x01, 'B') --命令源\n req = iota.appendHexWord(req, 0x0A01, 'B') --指令\n req = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n req = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n req = iota.appendHexByte(req, os.date('%m'), 'B')\n req = iota.appendHexByte(req, os.date('%d'), 'B')\n req = iota.appendHexByte(req, os.date('%H'), 'B')\n req = iota.appendHexByte(req, os.date('%M'), 'B')\n req = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n req = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req = iota.appendHexByte(req, 1, 'B') -- 是否下发\n --req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req = iota.appendHexWord(req, 0, 'B') --当前版本\n req = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n req = iota.appendHexCrc(req, 'B', 0) --校验\n req = iota.appendHexByte(req, 0xef, 'B') --帧尾\n --log.debug('fs_microPower_t2: 苏醒帧返回: %s', req)\n ctx:asend(req, 20000)\n redis.set(device.id .. '_mpset', tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n else\n --log.debug('fs_microPower_t2 : 配置初次配置')\n local req = ''\n req = iota.appendHexByte(req, 0xfe, 'B') --帧头\n req = iota.appendHexWord(req, 0x000c, 'B') --设备号:0x0B,多通道数据采集系统\n req = iota.appendHexWord(req, rtumodule, 'B') --模块号\n req = iota.appendHexByte(req, 0x01, 'B') --命令源\n req = iota.appendHexWord(req, 0x0A01, 'B') --指令\n req = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n req = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n req = iota.appendHexByte(req, os.date('%m'), 'B')\n req = iota.appendHexByte(req, os.date('%d'), 'B')\n req = iota.appendHexByte(req, os.date('%H'), 'B')\n req = iota.appendHexByte(req, os.date('%M'), 'B')\n req = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n req = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req = iota.appendHexByte(req, 1, 'B') -- 是否下发\n --req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req = iota.appendHexWord(req, 0, 'B') --当前版本\n req = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n req = iota.appendHexCrc(req, 'B', 0) --校验\n req = iota.appendHexByte(req, 0xef, 'B') --帧尾\n --log.debug('fs_microPower_t2: 苏醒帧返回: %s', req)\n ctx:asend(req, 20000)\n redis.set(device.id .. '_mpset', tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n end\n\n if string.sub(data, 13, 16) == '8a02' then\n --log.debug('fs_microPower_t2 : 设备休眠')\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '设备休眠'\n }\n }\n ctx:notify(json.encode(re))\n end\n\n local rtumodule = iota.hexToShort(data, 3, 'B')\n if string.sub(data, 13, 16) == '8601' then\n local time = os.date('%Y-%m-%dT%H:%M:%S+08:00', os.time({year = iota.hexToShort(data, 15, 'B'), month = iota.hexToByte(data, 17, 'B'), day = iota.hexToByte(data, 18, 'B'), hour = iota.hexToByte(data, 19, 'B'), min = iota.hexToByte(data, 20, 'B'), sec = iota.hexToByte(data, 21, 'B')}))\n local sensorCount = iota.hexToByte(data, 26, 'B')\n\n local isover = iota.hexToByte(data, 25, 'B') --尾包\n local datalength = 0\n local firststart = 27\n for i = 1, sensorCount, 1 do\n firststart = firststart + datalength\n local sensorType = iota.hexToByte(data, firststart, 'B')\n local module = iota.hexToShort(data, firststart + 3, 'B')\n local channel = iota.hexToByte(data, firststart + 2, 'B')\n datalength = iota.hexToByte(data, firststart + 1, 'B') + 6\n if sensorType == 0 then --振弦\n local childDevice = getZxDeviceInfo(module, channel)\n local rst = {\n data = {\n frequency = iota.hexToFloat(data, firststart + 12, 'B'),\n am = iota.hexToFloat(data, firststart + 16, 'B'),\n temperature = iota.hexToFloat(data, firststart + 20, 'B')\n },\n device = childDevice.id,\n type = 1,\n time = time\n }\n table.insert(out.data, rst)\n end\n if sensorType == 1 then --485\n local childDevice = getDeviceInfo(module, channel)\n local protocalCode = iota.hexToShort(data, firststart + 6, 'B')\n --log.debug('fs_microPower_t2: protocalCode: %s', protocalCode)\n if protocalCode == 1503 or protocalCode == 1502 then --测斜\n local rst = {\n data = {\n anglex = iota.hexToFloat(data, firststart + 12, 'B'),\n angley = iota.hexToFloat(data, firststart + 16, 'B'),\n temperature = iota.hexToFloat(data, firststart + 20, 'B')\n },\n device = childDevice.id,\n type = 1,\n time = time\n }\n table.insert(out.data, rst)\n end\n\n if protocalCode == 9102 then --裂缝\n local childDevice = getDeviceInfo(module, channel)\n local rst = {\n data = {\n length = iota.hexToFloat(data, firststart + 12, 'B')\n },\n device = childDevice.id,\n type = 1,\n time = time\n }\n table.insert(out.data, rst)\n end\n\n if protocalCode == 1102 then --温湿度\n local childDevice = getDeviceInfo(module, channel)\n local rst = {\n data = {\n temperature = iota.hexToFloat(data, firststart + 12, 'B'),\n humidity = iota.hexToFloat(data, firststart + 16, 'B')\n },\n device = childDevice.id,\n type = 1,\n time = time\n }\n table.insert(out.data, rst)\n end\n\n if protocalCode == 9002 then --压差\n local childDevice = getDeviceInfo(module, channel)\n local rst = {\n data = {\n physicalvalue = iota.hexToFloat(data, firststart + 12, 'B'),\n frequency = iota.hexToFloat(data, firststart + 16, 'B'),\n temperature = iota.hexToFloat(data, firststart + 20, 'B')\n },\n device = childDevice.id,\n type = 1,\n time = time\n }\n table.insert(out.data, rst)\n end\n if protocalCode == 2045 then --扬尘\n local datacnt = iota.hexToByte(data, firststart + 11, 'B')\n --log.debug('fs_microPower_t2: 2405')\n local childDevice = getDeviceInfo(module, channel)\n local rst = {\n data = {\n pm25 = tonumber(string.format('%0.0f', iota.hexToFloat(data, firststart + 12, 'B'))),\n pm10 = tonumber(string.format('%0.0f', iota.hexToFloat(data, firststart + 16, 'B'))),\n noise = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 20, 'B'))),\n temp = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 24, 'B'))),\n humidity = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 28, 'B'))),\n windspeed = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 32, 'B'))),\n winddir = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 36, 'B')))\n },\n device = childDevice.id,\n type = 1,\n time = time\n }\n\n rst.result={}\n if rst.data.pm25 <= 0 or rst.data.pm25 > 700 then\n --out.result.code = 5001\n rst.result.code = 5001\n if rst.result.msg ~= nil then\n -- out.result.msg = out.result.msg .. '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of [0,700]'\n rst.result.msg = rst.result.msg .. '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of (0,700]'\n else\n -- out.result.msg = '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of [0,700]'\n rst.result.msg = '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of (0,700]'\n end\n rst.data.pm25 = nil\n end\n if rst.data.pm10 <= 0 or rst.data.pm10 > 700 then\n --out.result.code = 5001\n rst.result.code = 5001\n if rst.result.msg ~= nil then\n -- out.result.msg = out.result.msg .. '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of [0,700]'\n rst.result.msg = rst.result.msg .. '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of (0,700]'\n else\n -- out.result.msg = '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of [0,700]'\n rst.result.msg = '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of (0,700]'\n end\n rst.data.pm10 = nil\n end\n if rst.data.windspeed < 0 or rst.data.windspeed > 24.5 then\n -- out.result.code = 5001\n rst.result.code = 5001\n if rst.result.msg ~= nil then\n --out.result.msg = rst.result.msg .. '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n rst.result.msg = rst.result.msg .. '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of (0,24.5]'\n else\n -- out.result.msg = '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n rst.result.msg = '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n end\n rst.data.windspeed = nil\n end\n if rst.data.winddir < 0 or rst.data.winddir > 360 then\n --out.result.code = 5001\n rst.result.code = 5001\n if rst.result.msg ~= nil then\n --out.result.msg = rst.result.msg .. '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n rst.result.msg = rst.result.msg .. '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of (0,360]'\n else\n --out.result.msg = '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n rst.result.msg = '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n end\n rst.data.winddir = nil\n end\n if rst.data.temp < -40 or rst.data.temp > 60 then\n --out.result.code = 5001\n rst.result.code = 5001\n if rst.result.msg ~= nil then\n --out.result.msg = rst.result.msg .. '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n rst.result.msg = rst.result.msg .. '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n else\n -- out.result.msg = '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n rst.result.msg = '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n end\n rst.data.temp = nil\n end\n if rst.data.humidity <= 0 or rst.data.humidity > 100 then\n --out.result.code = 5001\n rst.result.code = 5001\n if rst.result.msg ~= nil then\n -- out.result.msg = rst.result.msg .. '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n rst.result.msg = rst.result.msg .. '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n else\n --out.result.msg = '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n rst.result.msg = '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of (0,100]'\n end\n rst.data.humidity = nil\n end\n if rst.data.noise < 0 or rst.data.noise > 200 then\n --out.result.code = 5001\n rst.result.code = 5001\n if rst.result.msg ~= nil then\n --out.result.msg = rst.result.msg .. '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n rst.result.msg = rst.result.msg .. '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n else\n --out.result.msg = '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n rst.result.msg = '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n end\n rst.data.noise = nil\n end\n log.debug('fs_microPower_t2: insert')\n table.insert(out.data, rst)\n end\n end\n end\n log.debug('fs_microPower_t2: dataresult: %s', json.encode(out))\n local req = ''\n req = iota.appendHexByte(req, 0xfe, 'B') --帧头\n req = iota.appendHexWord(req, 0x000c, 'B') --设备号:0x0B,多通道数据采集系统\n req = iota.appendHexWord(req, rtumodule, 'B') --模块号\n req = iota.appendHexByte(req, 0x01, 'B') --命令源\n req = iota.appendHexWord(req, 0x0601, 'B') --指令\n req = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req = iota.appendHexWord(req, 0x0000, 'B') --数据区长度\n req = iota.appendHexCrc(req, 'B', 0) --校验\n req = iota.appendHexByte(req, 0xef, 'B') --帧尾\n log.debug('fs_microPower_t2: databack: %s', req)\n ctx:asend(req, 20000)\n ctx:notify(json.encode(out))\n end\n end\nend\n\nfunction Deploy()\n local total = totalSensors()\n --log.debug('fs_microPower_t2 : totalSensors =%s', total)\n local over = 0\n local onepag = 0\n local totallength = 3\n local buff = ''\n\n for i, dnlink in pairs(device.dnlinks) do\n for j, subdevice in pairs(dnlink.devices) do\n over = over + 1\n onepag = onepag + 1\n if subdevice.props.sensortype == 'zx' then\n totallength = totallength + 18\n buff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff = iota.appendHexByte(buff, 0x00, 'B') --传感器类型\n local settingvib = tonumber(subdevice.uplink.props.colgain) + tonumber(subdevice.uplink.props.incentive) * math.pow(2, 1) + tonumber(subdevice.uplink.props.checkoption) * math.pow(2, 2) + tonumber(subdevice.uplink.props.vibratspectrum) * math.pow(2, 3) + tonumber(subdevice.uplink.props.vibratsamplfreq) * math.pow(2, 4) + tonumber(subdevice.uplink.props.incentivemethod) * math.pow(2, 6)\n --log.debug('fs_microPower_t2 : settingvib =%s', settingvib)\n buff = iota.appendHexByte(buff, settingvib, 'B') --选项1\n buff = iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff = iota.appendHexByte(buff, 0x05, 'B') --长度\n buff = iota.appendHexByte(buff, subdevice.uplink.props.k, 'B') --振弦采集参数\n buff = iota.appendHexWord(buff, subdevice.uplink.props.f0, 'B') --振弦频率初值\n buff = iota.appendHexByte(buff, 0x00, 'B') --上传频谱ID\n buff = iota.appendHexByte(buff, 0x01, 'B') --采集选项\n end\n if subdevice.props.sensortype ~= 'zx' and subdevice.props.sensortype ~= 'zd' then\n totallength = totallength + 18\n buff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff = iota.appendHexByte(buff, 0x01, 'B') --传感器类型\n local setting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n --log.debug('fs_microPower_t2 : setting =%s', setting)\n buff = iota.appendHexByte(buff, setting, 'B') --选项1\n buff = iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B') --选项2\n buff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff = iota.appendHexByte(buff, 0x5C, 'B') --长度\n buff = iota.appendHexFloat(buff, subdevice.uplink.props.pmtpf, 'B') --参数\n buff = iota.appendHexFloat(buff, subdevice.uplink.props.pmten, 'B') --参数\n buff = iota.appendHexFloat(buff, 0x00, 'B') --0\n\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.pm25a, 'B') --参数\n buff = iota.appendHexFloat(buff, subdevice.uplink.props.pm25b, 'B') --参数\n buff = iota.appendHexFloat(buff, subdevice.uplink.props.pm10a, 'B') --参数\n buff = iota.appendHexFloat(buff, subdevice.uplink.props.pm10b, 'B') --参数\n buff = iota.appendHexFloat(buff, subdevice.uplink.props.noisea, 'B') --参数\n buff = iota.appendHexFloat(buff, subdevice.uplink.props.noiseb, 'B') --参数\n buff = iota.appendHexFloat(buff, subdevice.uplink.props.tempa, 'B') --参数\n buff = iota.appendHexFloat(buff, subdevice.uplink.props.tempb, 'B') --参数\n buff = iota.appendHexFloat(buff, subdevice.uplink.props.humia, 'B') --参数\n buff = iota.appendHexFloat(buff, subdevice.uplink.props.humib, 'B') --参数\t\t\n\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.speeda, 'B') --参数\n buff = iota.appendHexFloat(buff, subdevice.uplink.props.speedb, 'B') --参数\n buff = iota.appendHexFloat(buff, subdevice.uplink.props.directiona, 'B') --参数\n buff = iota.appendHexFloat(buff, subdevice.uplink.props.directionb, 'B') --参数\n buff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n buff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n buff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n buff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n buff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n buff = iota.appendHexFloat(buff, 0x00, 'B') --参数\t\t\t\t\t\t\n end\n if subdevice.props.sensortype == 'zd' then\n totallength = totallength + 31\n buff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff = iota.appendHexByte(buff, 0x04, 'B') --传感器类型\n buff = iota.appendHexByte(buff, 0x00, 'B') --选项1\n buff = iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff = iota.appendHexByte(buff, 0x12, 'B') --长度\n buff = iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B') --定时采样间隔\n buff = iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B') --定时采样时长\n buff = iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B') --加速度触发采样时长\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B') --采样频率\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B') --滤波频率\n\n buff = iota.appendHexWord(buff, 0x42c8, 'B')\n buff = iota.appendHexWord(buff, 0x0000, 'B')\n buff = iota.appendHexWord(buff, 0x4248, 'B')\n buff = iota.appendHexWord(buff, 0x0000, 'B')\n local trigger1 = tonumber(subdevice.uplink.props.triggerlevel) * 10\n buff = iota.appendHexByte(buff, trigger1, 'B') --触发加速度\n buff = iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B') --加速度范围\n buff = iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B') --滞后点数\n end\n if over == 8 or onepag == total then\n local buffhead = ''\n buffhead = iota.appendHexByte(buffhead, 0xfe, 'B') --帧头\n buffhead = iota.appendHexWord(buffhead, 0x000c, 'B') --设备号:0x0c,多通道数据采集系统\n buffhead = iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B') --模块号\n buffhead = iota.appendHexByte(buffhead, 0x01, 'B') --命令源\n buffhead = iota.appendHexWord(buffhead, 0x0306, 'B') --指令\n buffhead = iota.appendHexWord(buffhead, 0x0000, 'B') --消息ID\n buffhead = iota.appendHexWord(buffhead, totallength, 'B') --数据区长度\n if onepag == total then\n buffhead = iota.appendHexByte(buffhead, 0x01, 'B') --尾包\n else\n buffhead = iota.appendHexByte(buffhead, 0x00, 'B') --尾包\n end\n buffhead = iota.appendHexByte(buffhead, total, 'B') --采集指令总通道指令个数\n buffhead = iota.appendHexByte(buffhead, over, 'B') --该分包通道指令个数\n buff = buffhead .. buff\n buff = iota.appendHexCrc(buff, endian, 0) --校验\n buff = iota.appendHexByte(buff, 0xef, 'B') --帧尾\n local ok, ack = ctx:ssend(buff, 20000)\n --log.debug('fs_microPower_t2 : deploy back =%s', ack)\n buff = ''\n if over == 8 then\n over = 0\n end\n totallength = 3\n if onepag == total then\n --log.debug('fs_microPower_t2 配置下发完成')\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置下发完成'\n }\n }\n ctx:notify(json.encode(re))\n end\n end\n end\n end\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid, channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i, dnlink in pairs(device.dnlinks) do\n for j, subdevice in pairs(dnlink.devices) do\n if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n --log.debug('fs_microPower_t2 has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug('fs_microPower_t2 has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid, channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i, dnlink in pairs(device.dnlinks) do\n for j, subdevice in pairs(dnlink.devices) do\n if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n --log.debug('fs_microPower_t2 has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug('fs_microPower_t2 has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n --log.debug('fs_microPower_t2 : dat content =%s', dathex)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local offset = 0\n local t = iota.hexToShort(dathex, offset, 'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex, offset, 'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex, offset, 'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex, offset, 'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex, offset, 'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId, channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex, offset, 'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex, offset, 'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex, offset, 'B') + 2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex, offset, 'B')\n offset = offset + 4\n --log.debug('fs_microPower_t2 deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s', deviceId, channel, samplefreq, filterfreq, gainamplifier, triggertype, year, mon, day, hour, min, sec)\n\n local floatcount = (string.len(dathex) / 2 - 40) / 4\n --log.debug('fs_microPower_t2 begin parse')\n local vols = {}\n for i = 1, floatcount do\n offset = 40 + (i - 1) * 4\n vols[i] = iota.hexToFloat(dathex, offset, 'L', 6)\n end\n --log.debug('fs_microPower_t2 finish parse')\n\n local rst = {\n data = {\n _data_type = 'vib',\n physicalvalue = vols,\n sampleFreq = samplefreq,\n filterFreq = filterfreq,\n gainAmplifier = gainamplifier,\n triggerType = triggertype,\n version = version\n },\n device = subdevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', os.time({year = year, month = mon, day = day, hour = hour, min = min, sec = sec}))\n }\n table.insert(out.data, rst)\n --log.debug('fs_microPower_t2 cloudvibrate=%s', json.encode(out))\n ctx:notify(json.encode(out))\n else\n --log.debug('fs_microPower_t2 not found device module=%s channel=%s', deviceId, channel)\n end\nend\n\nfunction totalSensors()\n local sensorcnt = 0\n \tif device.dnlinks ~= nil then\n for i, dnlink in pairs(device.dnlinks) do\n sensorcnt = #(dnlink.devices) + sensorcnt\n end\n end\n return sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n\nfunction HeadCheckSum(data)\n local sum = 0\n local len = string.len(data)\n --log.debug('fs_microPower_t2: len: %s', len)\n for i = 1, len, 4 do\n local te = tonumber(string.sub(data, i, i + 3), 16)\n log.debug('fs_microPower_t2: te: %s', te)\n sum = sum + tonumber(te)\n end\n --log.debug('fs_microPower_t2: sum: %s', sum)\n return 0xffff - sum\nend INLINE 2019-03-04 15:39:53.466+08 2019-05-17 11:19:22.874+08 2019-03-04 \N
+3b1d673f-6e08-442d-8ff3-0306f82ff257 fs_gprs8 \N 工迅数据上报双平台--深圳平台 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua \n--字符串ascii->字符\nstart = function()\n log.debug('fs_gprs8 device=%s', json.encode(device))\n ok,resp=ctx:asend('010203')\n \n --测试用 之前 监听的不展示数据\n -- ok,resp=ctx:ssend('01020304',15000)\n -- if ok then\n -- result = onData_test(resp)\n -- ctx:done(result)\n -- end\nend\n\n--$MAS$;DTYPE:MAS-Node8-GPRS;DSN:ZX20221039;START;GLNG:113.952217;GLAT:22.488283;DBAT:8;CSQ:9;KD:20200615151056;ZXT:1_A;DT1:1277.40_27.8;DT2:1277.56_27.8;DT3:0.00_203.0;DT4:0.00_204.0;DT5:0.00_205.0;DT6:0.00_206.0;DT7:0.00_207.0;DQT:C_5;DQ1:MSW20221039005_-22.000000;MD:20200615163400;END;\n--244D4153243B44545950453A4D41532D4E6F6465382D475052533B44534E3A5A5832303232313033393B53544152543B474C4E473A3131332E3935323231373B474C41543A32322E3438383238333B444241543A383B4353513A393B4B443A32303230303631353135313035363B5A58543A315F413B4454313A313237372E34305F32372E383B4454323A313237372E35365F32372E383B4454333A302E30305F3230332E303B4454343A302E30305F3230342E303B4454353A302E30305F3230352E303B4454363A302E30305F3230362E303B4454373A302E30305F3230372E303B4451543A435F353B4451313A4D535732303232313033393030355F2D32322E3030303030303B4D443A32303230303631353136333430303B454E443B\nonData = function(hex)\n log.debug('fs_gprs8 Data=%s', hex)\n --全局\n out = {\n data = {},\n result = {},\n type=2\n }\n\n local sData = toStrHex(hex)\n log.debug('fs_gprs8 sData=%s', sData)\n local spliteData = Split(sData, ';')\n\n for key, value in pairs(spliteData) do\n if value ~= '' then\n Allot(value)\n end\n end\n local resultData = json.encode(out)\n log.debug('fs_gprs8 resultData=%s',resultData)\n \t--return resultData\n ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n-- allot 函数\nAllot = function(datastr)\n local dataInfo = Split(datastr, ':')\n local singleData\n --振弦读数\n local isDT = string.find(dataInfo[1], 'DT')\n --数字量读数\n local isDQ = string.find(dataInfo[1], 'DQ')\n local subData = {\n data = {},\n type = 1\n }\n if isDT and dataInfo[1] ~= 'DTYPE' then --频率_温度\n local dataModule = 'DT'\n local dataChannel = string.gsub(dataInfo[1], 'DT', '')\n local singleData_DT = Split(dataInfo[2], '_')\n\n local freq = tonumber(singleData_DT[1])\n local temp = tonumber(singleData_DT[2])\n log.debug('fs_gprs8 m=%s,c=%s,frequency=%s,temperature=%s', dataModule, dataChannel, frequency, temperature)\n local de = getDeviceInfo(dataModule, dataChannel)\n if de ~= nil then\n subData.device = de.id\n subData.data.frequency = freq\n subData.data.temperature = temp\n --subData.data.physicalvalue = 0\n --subData.data.am = 0\n if de.uplink.capabilities[1].formula.metaid == "c92fb572-f818-488a-a012-e615d38abbf2" then --振弦公式\n local k = de.uplink.capabilities[1].formula.props.K\n\t\t\t\tlocal kt = de.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal f0 = de.uplink.capabilities[1].formula.props.Fo\n\t\t\t\tlocal t0 = de.uplink.capabilities[1].formula.props.To\n log.debug("fs_gprs8 module=%s,channel=%s [%s] formula params :k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",dataModule,dataChannel,de.id,k,kt,f0,t0,freq,temp,am)\n\t\t\t if k~=nil and kt~=nil and f0~=nil and t0~=nil then\n subData.data.physicalvalue =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\tend\n end\n table.insert(out.data, subData)\n end\n elseif isDQ and dataInfo[1] ~= 'DQT' then --传感器编号_测斜读数_压强读数_温度 [无数据或个别字段无数据则用星号]\n --out.data.totalPhosphorus = totalPhosphorus\n local dataModule = 'DQ'\n local dataChannel = string.gsub(dataInfo[1], 'DQ', '')\n local singleData_DQ = Split(dataInfo[2], '_')\n local sensorNum = singleData_DQ[1]\n local physicalvalue = tonumber(singleData_DQ[2])/1000 -- 水位计 默认单位 m 原始数据mm\n log.debug('fs_gprs8 m=%s,c=%s,physicalValue=%s', dataModule, dataChannel, physicalValue)\n local de = getDeviceInfo(dataModule, dataChannel)\n if de ~= nil then\n subData.device = de.id\n subData.data.physicalvalue = physicalvalue\n table.insert(out.data, subData)\n end\n else\n end\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("fs_gprs8 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug('fs_gprs8查询m=%s c=%s子设备 是否匹配设备child=%s',tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n local moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n local channelStrCheck = child.uplink.props.channel\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tostring(channelStrCheck) == tostring(channelNoId) then\n log.debug('fs_gprs8 m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('fs_gprs8 subdevices是nil')\n return nil\n end\nend INLINE 2020-06-15 17:11:45.37+08 2020-06-18 10:07:17.297+08 2020-06-15 \N
+ce984e5a-5697-4b5f-bc51-fef9a07f2d1e Pressure_ZGZL_9027 \N 1.0 619160fc-a159-4566-9781-9e2c2f217324 619160fc-a159-4566-9781-9e2c2f217324 f 619160fc-a159-4566-9781-9e2c2f217324 Lua --[[\n协议号: 9027;\n协议名: 静力水准仪.\n]]--lucas\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "Pressure_ZGZL_9027.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序 aa 75 10 00 0e 00 28 67 61 4a 08 00 00 5a 17 09 16 13 33 27 f8\n\t-- 模块号2867614A0800005A\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0xaa, BE);\n\tbuff=iota.appendHexByte(buff, 0x75, BE);--0xaa75固定开头\n\tbuff=iota.appendHexByte(buff, 0x10, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x0e, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tfor i = 1, string.len(device.props.moduleId),2 do\n buff= buff..string.sub(device.props.moduleId,i,i+1)\n end \n local shorttime=getTimeStamp(os.time())\t\n\tbuff=buff..shorttime;--加入日期\n\tlocal xor = CheckXor(0,buff)\n buff=iota.appendHexByte(buff, xor, BE)\t\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 557a100035002867614a0800005a170612141804010a028a00ce57335725206d6d2010ffffffffffffffffffffffffffffffff4a4354323031312003 \n--temp=26.6 strain=65 offset=20.6 moduleId=2867614A0800005A\n--原始数据\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\n\telse\n\t\t\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\t--local windSpeed = Bytes2Float(data, 3);\n\t\t--local windDirection= Bytes2Float(data,7);\t\n\n\t\tlocal temp = iota.hexToShort(data, 20,'B')*0.1;\t\n local strain = iota.hexToShort(data, 22,'B')*0.1;\n local offset = iota.hexToShort(data, 24,'B')*0.1;\t\t\n\t\t\n\t\tout.data = {\n\t\ttemp=temp,\n\t\tstrain=strain,\n\t\toffset=offset\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction IsValid(data)\n\tif string.len(data)/2 ~=60 or iota.hexToByte(data, 0,'B')~=0x55 or iota.hexToByte(data, 1,'B')~=0x7A then\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 1001\n\t\treturn true\n\tend\n\t\n\treturn false\n\t\nend\n\nfunction Bytes2Float(data,index)\n index=index*2\n\tdataStr1=string.sub(data,index+1,index+2);\n\tdataStr2=string.sub(data,index+3,index+4)\n\tdataStr3=string.sub(data,index+5,index+6)\n\tdataStr4=string.sub(data,index+7,index+8)\n\tdataStr=dataStr3..dataStr4\n\tdataStr=dataStr..dataStr1\n\tdataStr=dataStr..dataStr2\n --log.debug(string.format('转换后的字节: %s', dataStr));\n data1=iota.hexToFloat(dataStr, 0,'B');\n -- log.debug(string.format('转换的数: %s', data1));\n\treturn data1;\nend\n\n--将时间戳转化为短时间:如170916110337\nfunction getTimeStamp(t)\n return os.date("%y%m%d%H%M%S",t)\nend\n\n\nCheckXor=function(start,buff)\n local lcr = 0\n for i = start, string.len(buff)/2-1 do\n lcr = bit:_xor(lcr , tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n end \n return lcr\nend INLINE 2017-09-16 14:09:30.902+08 2018-02-28 18:32:12.187+08 2017-09-14 \N
+cea589dc-d05f-4f0d-839b-70599d8fbd1f gzsck_01 \N 1.0 4f529033-1917-4df3-80db-81efffdf28bf 4f529033-1917-4df3-80db-81efffdf28bf f 4f529033-1917-4df3-80db-81efffdf28bf Lua --字符串ascii->字符\nstart=function()\n --log.debug("gzsck_01: start module %s, ", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n out={\n data ={},\n result = {},\n\t\ttype=2\n }\n\tlocal time1 = os.time() --当前时间\n\tlog.debug('gzsck_01 全局时间time1=%s',os.date('%Y-%m-%dT%H:%M:%S+08:00', time1))\n\tlocal time2=string.format('%08x',time1)\n\tlocal time21=string.sub(time2,1,2)\n\tlocal time22=string.sub(time2,3,4)\n\tlocal time23=string.sub(time2,5,6)\n\tlocal time24=string.sub(time2,7,8)\n \tlocal cmd=''\n local moduleNostr= string.sub(hex,17,24)\n\tlocal frame=string.sub(hex,33,36)\n if frame=='6100' then --判断是否是数据码流的命令\n\t\n\t\tcmd='23232323' .. moduleNostr .. 'FFFFFFFF038006006100' .. time24 .. time23 .. time22 .. time21\n\t\tcmd=iota.appendHexCrc(cmd, 'B' ,0)\n\t\tctx:asend(cmd)\n\telse\n\t\tlocal moduleNo = device.uplink.props.module\n\n\t\tlocal channelNo=tonumber(string.sub(hex,51,52),16)\n log.debug('gzsck_01 channelNo=%s',channelNo)\n\t \n\t\tlocal dateTimeStr=iota.hexToUInt(string.sub(hex,41,48),0,'L')\n\t\tlocal timenow = os.date('%Y-%m-%dT%H:%M:%S+08:00', dateTimeStr)\n\t\tlocal type_sensor=string.sub(hex,37,38) --传感器类型标识\n\t\tlog.debug('gzsck_01 type_sensor=%s',type_sensor) \n\t\n\t\tlocal hexStr=string.sub(hex,63,-5) --数据包部分\n\t\tlog.debug('gzsck_01 数据包hexStr=%s,time1=%s',hexStr,os.date('%Y-%m-%dT%H:%M:%S+08:00', time1)) \n\t\tlocal temp=iota.hexToFloat(hex,26,'L')\n\t\tlog.debug('gzsck_01 temp=%s',temp) \n\t\n\t\tif type_sensor=='01' then --测斜\n\t\t log.debug('gzsck_01 进入测斜') \n \tlocal outCount=string.sub(hex,61,62) --输出物理量个数\n\t\tlog.debug('gzsck_01 outCount=%s',outCount) \n\t\t\tif outCount=='01' then\n\t\t\t\tlocal angle=iota.hexToFloat(hexStr,0,'L')\n\t\t\t\tlocal childDevice = getDeviceInfos(moduleNo,channelNo)\t\n\t\t\t\tlog.debug('gzsck_01 childDevice=%s',json.encode(childDevice)) \n\n\t\t\t\tif\tchildDevice~=nil then\n\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\tangle=tonumber(string.format('%0.1f',angle)),\n\t\t\t\t\t\t\ttemperature=tonumber(string.format('%0.1f',angle))\n\t\t\t\t\t\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1 ,\n\t\t\t\t\t\t\ttime=timenow\t\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\tlog.debug("gzsck_01:(测斜) out=%s",json.encode(out))\n\t\t\t\telse\n\t\t\t\tlog.debug('gzsck_01 测斜子设备 m=%s,c=%s deviceId为nil',moduleNo, channelNo)\n\t\t\t\t\t\n\t\t\t\tend\n\t\t\telseif outCount=='02' then\n\t\t\t\t--log.debug('gzsck_01 进入02,time1=%s',os.date('%Y-%m-%dT%H:%M:%S+08:00', time1)) \n\t\t\t\tlocal anglex=iota.hexToFloat(hexStr,0,'L')\n\t\t\t\t--log.debug('gzsck_01 anglex=%s',anglex) \n log.debug('gzsck_01 anglex=%s,time1=%s',anglex,os.date('%Y-%m-%dT%H:%M:%S+08:00', time1))\n\t\t\t\tlocal angley=iota.hexToFloat(hexStr,4,'L')\n\t\t\t\tlog.debug('gzsck_01 angley=%s,time1=%s',angley,os.date('%Y-%m-%dT%H:%M:%S+08:00', time1)) \n\t\t\t\tlocal childDevice = getDeviceInfos(moduleNo,channelNo)\t\n\t\t\t\tlog.debug('gzsck_01 childDevice=%s',json.encode(childDevice)) \n\n\t\t\t\tif\tchildDevice~=nil then\n\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t \n\t\t\t\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\tanglex=tonumber(string.format('%0.3f',anglex)),\n\t\t\t\t\t\t\ttemperature=tonumber(string.format('%0.1f',temp)),\n\t\t\t\t\t\t\tangley=tonumber(string.format('%0.3f',angley))\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\ttype=1 ,\n\t\t\t\t\t\ttime=timenow\t\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\tlog.debug("gzsck_01:(测斜) out=%s",json.encode(out))\n\t\t\t\telse\n\t\t\t\tlog.debug('gzsck_01 测斜子设备 m=%s,c=%s deviceId为nil',moduleNo, channelNo)\n\t\t\t\t\t\n\t\t\t\tend\n\t\t\telseif outCount=='03' then\n\t\t\t\tlocal anglex=iota.hexToFloat(hexStr,0,'L')\n\t\t\t\tlocal angley=iota.hexToFloat(hexStr,4,'L')\n\t\t\t\tlocal anglez=iota.hexToFloat(hexStr,8,'L')\n\t\t\t\tlocal childDevice = getDeviceInfos(moduleNo,channelNo)\t\n\t\t\t\tlog.debug('gzsck_01 childDevice=%s',json.encode(childDevice)) \n\n\t\t\t\tif\tchildDevice~=nil then\n\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t \n\t\t\t\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\tanglex=tonumber(string.format('%0.3f',anglex)),\n\t\t\t\t\t\t\ttemperature=tonumber(string.format('%0.1f',temp)),\n\t\t\t\t\t\t\tangley=tonumber(string.format('%0.3f',angley)),\n\t\t\t\t\t\t\tanglez=tonumber(string.format('%0.3f',anglez))\n\t\t\t\t\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\ttype=1 ,\n\t\t\t\t\t\ttime=timenow\t\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\tlog.debug("gzsck_01:(测斜) out=%s",json.encode(out))\n\t\t\t\telse\n\t\t\t\tlog.debug('gzsck_01 测斜子设备 m=%s,c=%s deviceId为nil',moduleNo, channelNo)\n\t\t\t\t\t\n\t\t\t\tend\n\t\t\tend\n\t\t\t\n\t\telseif type_sensor=='02' then --振弦\n\t\t\tlog.debug('gzsck_01 进入振弦') \n\t\n\t\t\tlocal frequency=getAllDatas(hexStr)\n\t\t\tlocal childDevice = getDeviceInfos(moduleNo,channelNo)\t\n log.debug('gzsck_01 childDevice=%s',json.encode(childDevice)) \n\n\t\t\tif\tchildDevice~=nil then\n\t\t\t\tdeviceId=childDevice.id\n\t\t\t\tlocal K = childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\t\t\n\t\t\t\tlocal F0 = childDevice.uplink.capabilities[1].formula.props.F0\n\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal T0 = childDevice.uplink.capabilities[1].formula.props.T0\n\t\t\t\tif K ==nil or F0==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\n\t\t\t\telse\n\t\t\t\t\tPhy=K*(frequency^2 - F0^2) + Kt*(temp-T0)\n\t\t\t\tend \n\t\t\t\n\t\t\t\tlocal data1 = {\n\t\t\t\t\tdata={\n\t\t\t\t\t\tfrequency=tonumber(string.format('%0.1f',frequency)),\n\t\t\t\t\t\ttemperature=tonumber(string.format('%0.1f',temp)),\n\t\t\t\t\t\tphysicalvalue=tonumber(string.format('%0.2f',Phy))\n\t\t\t\t\t\t},\n\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\ttype=1 ,\n time=timenow\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tlog.debug("c:(振弦) out=%s",json.encode(out))\n\t\t\telse\n\t\t\t\tlog.debug('gzsck_01 振弦子设备 m=%s,c=%s deviceId为nil',moduleNo, channelNo)\n\t\t\t\t\t\n\t\t\tend\n\n\t\telseif type_sensor=='03' then --水位\nlog.debug('gzsck_01 解析水位time1=%s',os.date('%Y-%m-%dT%H:%M:%S+08:00', time1))\n\t\t\tlocal length=iota.hexToFloat(hexStr,0,'L')\n\t\t\t\n\t\t\tlocal childDevice = getDeviceInfos(moduleNo,channelNo)\t\n log.debug('gzsck_01 childDevice=%s',json.encode(childDevice)) \n\n\t\t\tif\tchildDevice~=nil then\n\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t \n\t\t\t\tlocal data1 = {\n\t\t\t\t\tdata={\n\t\t\t\t\t\tlength=tonumber(string.format('%0.3f',length)),\n\t\t\t\t\t\ttemperature=tonumber(string.format('%0.1f',temp))\n\t\t\t\t\t},\n\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\ttype=1 ,\n time=timenow\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tlog.debug("gzsck_01:(水位) out=%s",json.encode(out))\n\t\t\telse\n\t\t\t\tlog.debug('gzsck_01 水位子设备 m=%s,c=%s deviceId为nil',moduleNo, channelNo)\n\t\t\t\t\t\n\t\t\tend\n\t end \n\t\n\n local resultData =json.encode(out) --输出传递到平台上\n log.debug("gzsck_01: result=%s",json.encode(out))\n ctx:notify(resultData)\n\tlocal acqinteral=string.format('%08x',tonumber(device.props.acqinteral))\n\t\n\tlocal acqinteral1=string.sub(acqinteral,1,2)\n\tlocal acqinteral2=string.sub(acqinteral,3,4)\n\tlocal acqinteral3=string.sub(acqinteral,5,6)\n\tlocal acqinteral4=string.sub(acqinteral,7,8)\n\t\n\t\n\tlocal uploadinteral=string.format('%08x',tonumber(device.props.uploadinteral))\n\tlog.debug("gzsck_01: uploadinteral=%s",uploadinteral)\n\tlocal uploadinteral1=string.sub(uploadinteral,1,2)\n\tlocal uploadinteral2=string.sub(uploadinteral,3,4)\n\tlocal uploadinteral3=string.sub(uploadinteral,5,6)\n\tlocal uploadinteral4=string.sub(uploadinteral,7,8)\n\t\n\n\tcmd='23232323' .. moduleNostr .. 'FFFFFFFF038014007900' .. type_sensor ..'000E005600' .. uploadinteral4 .. uploadinteral3 .. uploadinteral2 .. uploadinteral1 .. acqinteral4 .. acqinteral3 .. acqinteral2 .. acqinteral1 .. time24 .. time23 .. time22 .. time21\n\tcmd=iota.appendHexCrc(cmd, 'B' ,0) \n\t--log.debug("gzsck_01: cmd=%s",cmd)\n\tctx:asend(cmd)\n\tend\nend\n\ngetAllDatas = function(hexStr)\n local total = 0\n local dataCount = string.len(hexStr) / 8\n\n for i = 1, dataCount do\n local subDataa = string.sub(hexStr, (i - 1) * 8 + 1, (i - 1) * 8 + 8) \n local subData= iota.hexToFloat(subDataa, 0, 'L')\n\t\ttotal = total + subData\n \n end\n\t\n\tlocal fre=total/dataCount\n return fre\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(channelStrCheck) == tonumber(channelNoId) then\n return child\n\t\t\tend\n \t\n\t\tend\n else\n log.debug("gzsck_01: subdevices是nil")\n return nil\n end\nend\n\n INLINE 2020-06-28 11:30:26.043+08 2020-07-29 15:18:05.513+08 2020-06-28 \N
+c3bb4463-d16f-4c26-94c3-6fa66c5766b1 fs-newYCxieyi \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start=function()\n ok=ctx:asend("010203")\nend\n\nonData=function(hex)\n log.debug('fs_8801 hex=%s', hex)\n local out = {\n data = {},\n result = {}\n }\n local str = HextoStr(hex)\n local jsonTable = json.decode(str)\n log.debug('fs_8801 jsonTable=%s[type(jsonTable)=%s]', json.encode(jsonTable), type(jsonTable))\n local pm25 = tonumber(string.format('%0.0f', tonumber(jsonTable.pm25)))\n local pm10 = tonumber(string.format('%0.0f', tonumber(jsonTable.pm10)))\n local noise = tonumber(string.format('%0.1f', tonumber(jsonTable.noise)))\n local temperature = tonumber(string.format('%0.1f', tonumber(jsonTable.temperature)))\n local humidity = tonumber(string.format('%0.1f', tonumber(jsonTable.humidity)))\n local windSpeed = tonumber(string.format('%0.1f', tonumber(jsonTable.windSpeed)))\n local windDirection = tonumber(string.format('%0.1f', tonumber(jsonTable.windDirection)))\n local windForce = tonumber(string.format('%0.1f', tonumber(jsonTable.windForce)))\n\n if temperature < -40 or temperature > 60 then\n temperature = nil\n out.result = {code = 5001, msg = '温度超阈值[-40,60]'}\n end\n if humidity <= 0 or humidity > 100 then\n humidity = nil\n out.result = {code = 5001, msg = '湿度超阈值[0,100]'}\n end\n if pm25 <= 0 or pm25 > 700 then\n pm25 = nil\n out.result = {code = 5001, msg = 'pm2.5超阈值[0,700]'}\n end\n if pm10 <= 0 or pm10 > 700 then\n pm10 = nil\n out.result = {code = 5001, msg = 'pm10超阈值[0,700]'}\n end\n if windSpeed < 0 or windSpeed > 24.5 then\n windSpeed = nil\n out.result = {code = 5001, msg = '风速超阈值[0,24.5]'}\n end\n if windDirection < 0 or windDirection > 360 then\n windDirection = nil\n out.result = {code = 5001, msg = '风向超阈值[0,360]'}\n end\n if windForce < 0 or windForce > 10.8 then\n windForce = nil\n out.result = {code = 5001, msg = '风力超阈值[0,10.8]'}\n end\n if noise < 0 or noise > 200 then\n noise = nil\n out.result = {code = 5001, msg = '噪音超阈值[0,200]'}\n end\n out.data = {\n pm25 = pm25,\n pm10 = pm10,\n noise = noise,\n temperature = temperature,\n humidity = humidity,\n windSpeed = windSpeed,\n windDirection = windDirection,\n windForce = windForce\n }\n local resultData = json.encode(out)\n log.debug('fs_8801 resultData=%s', resultData)\n ctx:notify(resultData)\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend INLINE 2018-11-10 11:08:53.554+08 2019-01-04 17:30:12.618+08 2018-11-10 \N
+9dbee489-45fe-4387-8e66-e1b7a6c9608e hj_inclination_1542 \N 北京华鉴倾角仪协议 1.0 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 f 4cb97284-0871-46d4-baf9-17d494f6db64 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\n\nstart=function()\n log.debug("start %s, ctx=", "hj_inclination_1542.lua",json.encode(device.moduleId))\n local endian = 'B'\n local buff='' \n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.uplink.props.module) > 255 or tonumber(device.uplink.props.module) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff, device.uplink.props.module, endian) --1:module \n buff=iota.appendHexByte(buff, 0x02, endian) --1:CMD \n buff=iota.appendHexByte(buff, 0x01, endian) --1:datelength\n local sum = checkSum(buff,0,3)\n buff=iota.appendHexByte(buff, sum, endian) --1:CRC\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n -- print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\n end\nend\n\nunmarshall=function(hex)\n\t--15028765\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local xDegrees = ''\n local yDegrees = ''\n local temperatures = ''\n local xdegree = 0\n local ydegree = 0\n --01820C0012124501035512002859E4 --moduleId=1\n --"temp": 26.097594039948262,\n\t--"xDegree": 12.1245,\n\t--"yDegree": -3.5512\n if string.len(hex)/2 == 15 then\n if iota.hexToByte(hex,3,'B') == 0x00 then\n xDegrees = ''\n elseif iota.hexToByte(hex,3,'B') == 0x01 then\n xDegrees = '-'\n end\n\t\t\tlocal xvalue = string.sub(hex,9,10)..'.'..string.sub(hex,11,14)\n xDegrees = xDegrees..xvalue\n \t\t\n if iota.hexToByte(hex,7,'B') == 0x00 then\n yDegrees = ''\n elseif iota.hexToByte(hex,7,'B') == 0x01 then\n yDegrees = '-'\n end\n\t\t\tlocal yvalue = string.sub(hex,17,18)..'.'..string.sub(hex,19,22)\n yDegrees = yDegrees..yvalue\n temperatures = string.sub(hex,23,28)\n\t\t\tlog.debug(temperatures)\n end\n if string.len(hex)/2 == 11 then\n if iota.hexToByte(hex,3,'B') == 0x00 then\n xDegrees = ''\n elseif iota.hexToByte(hex,3,'B') == 0x01 then\n xDegrees = '-'\n end\n\t\t\tlocal xvalue = string.sub(hex,9,10)..'.'..string.sub(hex,11,14)\n xDegrees = xDegrees..xvalue\n temperatures = string.sub(hex,15,20)\n end\n\t\t\n xdegree = tonumber(xDegrees)\n if yDegrees ~= '' then\n ydegree = tonumber(yDegrees)\n end\n local tempd = tonumber(temperatures)\n\n local temperature = 1 / (1.4185 * 10 ^ -3 + (2.2842 * 10 ^ -4) * math.log(tempd) + 1.5079 * 10 ^ -6 * math.log(tempd) ^ 2 + 1.8526 * 10 ^ -8 * math.log(tempd) ^ 3)\n temperature = temperature - 273.2\n\n out.data = { --需要测试\n xDegree = tonumber(string.format("%0.2f",xdegree)),\n yDegree = tonumber(string.format("%0.2f",ydegree)),\n temp = tonumber(string.format("%0.2f",temperature))\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n return json.encode(out)\nend\n\nIsValid=function(data)\n if string.len(data)/2 == 15 then\n local check = iota.hexToByte(data,14,'B')\n \tlog.debug("check =%d",check)\n \tlog.debug("checksum=%d",checkSum(data,0,14))\n if checkSum(data,0,14) ~= check then\n errormsg = 'Invalid CRC'\n errcode = 1003\n return false\n end\n \n elseif string.len(data)/2 == 11 then\n local check = iota.hexToByte(data,10,'B')\n if checkSum(data,0,10) ~= check then\n errormsg = 'Invalid CRC '\n errcode = 1003\n return false\n end\n else \n errormsg = 'Invalid Data '\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x82 then\n \t\terrcode = 1001\n errormsg = 'Invalid CMD ' \n return false\n end\n if iota.hexToByte(data,0,'B') ~= tonumber(device.uplink.props.module) then\n \t\terrcode = 1004\n errormsg = 'Invalid moduleId ' \n return false\n end\n return true\n--crc\nend\n\n\n\ncheckSum=function(data,startindex,endindex)\n local sum = 0\n for i=startindex,endindex-1 do\n if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n sum = (sum + iota.hexToByte(data,i,'B'))\n end\n end \n sum = bit:_and(sum , 0xff)\n return sum\nend INLINE 2017-09-06 20:04:55.535+08 2018-06-14 13:42:26.33+08 2018-03-08 \N
+790ba3f8-119c-47b6-bdff-ae905ec84c60 SJZ-WD \N 1.0 6b927c2a-ce23-4bf8-9f83-7307d2856c61 6b927c2a-ce23-4bf8-9f83-7307d2856c61 f 6b927c2a-ce23-4bf8-9f83-7307d2856c61 Lua \nstart=function()\n\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t--全局\n out={\n data ={},\n result = {},\n \ttype = 2\n }\t\t\n\tpoint = 0\n\t\tlocal moduleNo\n\t\tmoduleNo=tonumber(device.uplink.props.module) \n\t\tlocal num = 1\n\t\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n \t\tif subdevices ~= nil then\n \t num=0\n for index,child in pairs(subdevices) do \n num = num+1\n end\n \tend\n\t\t--log.debug("SJZ-WS 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n\t\tbuff=iota.appendHexByte(buff, 0x00, endian) \n\t\tbuff=iota.appendHexByte(buff, 0x01, endian) \n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\tbuff=iota.appendHexByte(buff, num, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n \t\tlog.debug("SJZ-WS SSend ok!")\n result = unmarshall(resp,moduleNo)\n else\n log.debug("SJZ-WS SSend error!")\n end\t\t\n \t\tlog.debug("SJZ-WS result:%s",result)\n ctx:done(result)\nend\n--00 03 00 00 00 01 85 DB\n--00 03 02 00 00 85 84\n--moduleId=0\n--00 03 00 01 00 01 D4 1B\n--00 03 02 00 FA 05 C7\n\n\n\nunmarshall=function(hex,moduleStr)\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\t\n\t\tif subdevices ~=nil then\n\t\t\tfor index,child in pairs(subdevices) do \t\t\t\t\t\t\t\t\n\t\t\t\tlocal subData={\n\t\t\t\t\t\t\t\tdata ={},\n\t\t\t\t\t\t\t\tdevice=child.id,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t}\n\t\t\t\tlocal moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n\t\t\t\tlocal temperature = iota.hexToShort(hex,3+2*(moduleNo-1),'B')\t\n \t\tlog.debug("SJZ-WS 设备模块通道 temp=%s ",temperature)\n\t\t\t\tsubData.data={\n\t\t\t\t\t\t\t\ttemp=temperature/100.0\n\t\t\t\t\t\t\t}\n\t\t\t\ttable.insert(out.data,subData)\n\t\t\tend\n\t\tend \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\n \n\n\nIsValid=function(data,moduleStrCheck)\n log.debug('SJZ-WS 开始校验数据=%s',data)\n\n log.debug('SJZ-WS 数据校验通过')\n return true\nend\n\nChValid=function(data,moduleStrCheck)\n\nend\n\n\t\n \n INLINE 2018-11-09 11:40:40.418+08 2018-11-09 17:44:19.579+08 2018-11-09 \N
+d2c3c812-6cc6-45e0-ac8a-2feb29374205 34534 \N 4646466 33cfce70-2dc8-4d0a-9ed1-8cd6e737117a 33cfce70-2dc8-4d0a-9ed1-8cd6e737117a f 33cfce70-2dc8-4d0a-9ed1-8cd6e737117a Lua 363634636 INLINE 2018-01-16 11:48:22.137+08 2018-01-17 15:09:21.5+08 2018-01-16 \N
+5244cf99-a9db-4e29-9126-f4b6c786dba6 crec_vibWire_1404 \N 武汉大桥局振弦采集仪act4238协议 1.0 f88cbfa3-0609-45d9-92aa-5108b5a4ac6f f88cbfa3-0609-45d9-92aa-5108b5a4ac6f f f88cbfa3-0609-45d9-92aa-5108b5a4ac6f Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "crec_1404", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n if json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=tonumber(device.uplink.props.module) \n\telse\n\t\tmoduleNo=device.props.moduleId\n\tend\n\tif subdevices ~=nil then\n \n log.debug("crec_1404:LUA:根设备devices : data is =%s", json.encode(subdevices))\n \tfor index,child in pairs(subdevices) do\n\t\t log.debug("crec_1404:LUA:子设备subdevices=%s : data is =%s", index,json.encode(subdevices))\n \t\n\t\t -- local channelNo=tonumber(child.props.channelId) \n \t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\t--log.debug("crec_1404 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t channelNo=child.props.channelId \n\t\t\t --log.debug("crec_1404 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n log.debug("crec_1404:模块%s通道%s的deviceId是%s:",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexByte(buff, moduleNo, endian) -- 2: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x03, endian) -- 1: 指令: 0x03 = 采集\n\t\t\tbuff=iota.appendHexWord(buff, channelNo-1, endian) -- 1: 通道号\n\t\t\tbuff=iota.appendHexWord(buff, 0x02, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0)\n log.debug("crec_1404:模块%s通道%s的数据send_ok,开始解析s%",moduleNo,channelNo,buff) \n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n\t\t\t\tlog.debug("crec_1404:模块%s通道%s的数据接收成功,发送数据%s开始解析%s",moduleNo,channelNo,buff,resp) \n\t\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\t\tlog.debug("crec_1404:模块%s通道%s的数据接收失败",moduleNo,channelNo) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("crec_1404:".."subdevices是nil")\n \treturn nil\n end\n\t\t\n\tlog.debug('crec_1404:out序列化')\n\tlocal resultData =json.encode(out)\n log.debug("crec_1404:out序列化结果 : out is =%s", json.encode(out))\n ctx:done(resultData)\nend\n\n\n --moduleId 1,CMD 1 , channelId 1,length 1,vibwire 3, temp 2,crc 2\n --010301050139E100C9F6DC \nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n\t--local subModuleId=subDevice.props.moduleId\n\t--local subChannelId=subDevice.props.channelId\n\tlog.debug("crec_1404:模块%s通道%s的deviceId是:%s",subModuleId,subChannelId,subDevice.id)\n local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n if ErrorCode then \n \n\t\tlocal freq = bit:_or(bit:_or(bit:_lshift(iota.hexToByte(hex,4,'B'),16) , bit:_lshift(iota.hexToByte(hex,5,'B'),8) ) , iota.hexToByte(hex,6,'B')) / 100.0\n \tfreq = tonumber(string.format("%3.32f",freq))\n --local temp = iota.hexToShort(hex,7,'B') / 10.0\n \tlocal rawTemp=iota.hexToUShort(hex,7,'B')\n log.debug("rawTemp=%s",rawTemp)\n local index=0\n if rawTemp>0x10000 then\n index=-1\n end\n local temp = (rawTemp % 0x1000 * (-1)^index) / 10.0 \n \t\n\t\tlog.debug("crec_1404:模块%s通道%s的原始值是:freq=%s,temp=%s",subModuleId,subChannelId,freq,temp)\n log.debug("crec_1404:模块%s通道%s的参数值是:=%s",subModuleId,subChannelId,json.encode(subDevice.uplink.capabilities[1].formula.props))\n \n\t\tlocal Phy=0\n --if subDevice.device.formula == "ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)" then --振弦公式\n\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\tlocal kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\tlocal t0 = subDevice.uplink.capabilities[1].formula.props.To\n log.debug("crec_1404:模块%s通道%s的公式计算参数是:k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",subModuleId,subChannelId,k,kt,f0,t0,freq,temp,am)\n\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t log.debug("crec_1404:模块%s通道%s的phy是:%s",subModuleId,subChannelId,Phy)\n\t\t--end\n \n \n \n\t\tsubData.data={\n\t\t\t\t\tfrequency=freq,\n\t\t\t\t\ttemperature=temp,\n \tphysicalvalue=Phy\n\t\t\t\t\t}\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("crec_1404:".."查询子设备原形child=%s",json.encode(child))\n \tif child.uplink.props.module==tostring(moduleNoId) then\n\t\t \t if child.uplink.props.channel == tostring(channelNoId) then\n log.debug("crec_1404:".."DeviceInfo是:"..tostring(child.id))\n \t\t log.debug("crec_1404:".."子设备原形child=%s",json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("crec_1404:".."subdevices是nil")\n \treturn nil\n end\nend\n\n\nIsValid=function(data,moduleId,channelId)\n log.debug('crec_1404:模块%s通道%s开始校验数据',moduleId,channelId)\n if data == nil or string.len(data)/2 ~= 11 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('crec_1404:模块%s通道%s 数据 长度校验失败:Data is nil or invalid length',moduleId,channelId)\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Modbus Error Code ' \n\t\tlog.debug('crec_1404:模块%s通道%s 数据校验失败:cmd错误')\n return false\n end\n\n\tlocal moduleStr=tostring(iota.hexToByte(data,0,'B'))\n\tif tostring(moduleId)~= moduleStr then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug('crec_1404:模块%s通道%s 模块号校验失败:Invalid acq moduleId=%s',moduleId,channelId,moduleStr)\n return false\n end\n\t\n\t--local channelStr=tostring(iota.hexToByte(data,2,'B'))\n\t--if channelId~= channelStr then\t\n --errormsg = 'Invalid acq channelId'\n --errcode = 1004\n\t\t--log.debug('crec_1404:模块%s通道%s 通道号校验失败:Invalid acq channelId=%s',moduleId,channelId,channelStr)\n --return false\n --end\n --log.debug('crec_1404:模块%s通道%s校验数据通过!!!',moduleId,channelId)\n return true\nend\n\n\n\n\n INLINE 2017-09-02 10:46:20.379+08 2018-12-08 14:07:41.569+08 2018-03-08 \N
+c06bf37c-adf9-4a49-9f66-0f6e7646453f fs_pressure_9001 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua -- INLINE 2018-03-26 11:03:26.4+08 2018-03-26 11:03:26.4+08 2018-03-26 \N
+399b9436-81fa-4410-914b-1a860910858c analyzeCurrConnNum \N 解析报文数据:tomcat的当前连接数 1.0.0 e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d f e1821687-1231-4e5c-a374-46d31857056d Lua {} INLINE 2018-01-09 10:05:55.939+08 2018-01-09 10:05:55.939+08 2018-01-09 \N
+074d1656-b4d0-4b38-8cf0-6314c7236c2d testGZMxieyi \N 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --//\n\n start=function() \n ok,resp=ctx:ssend("01020304",5000)\n end\n\nonData=function(hex)\n log.debug("fs_gzm_2018 收到数据=%s", hex)\n\t--log.debug("fs_gzm_2018 device =%s", json.encode(device))\n --log.debug("fs_gzm_2018subdevices data is =%s", json.encode(device.dnlinks[1].devices))\n\n local out={\n data ={},\n result = {},\n type=2\n }\n \n \n\n\n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n sData=HextoStr(hex)\n log.debug("fs_gzm_2018:sData是 %s",sData)\n --获取子字符串表\n local dataTable=json.decode(sData)\n \n \n\n --分析单类数据\n for k,sensorValue in ipairs(dataTable.allNodeDatas) do\n \n if k>=1 then\n local factorId=tonumber(sensorValue.factorid)\n\t\t\t\tlocal factorName=getFactorName(factorId)\n local moduleNo=tonumber(sensorValue.moduleId)\n\t\t\t\tlocal channelNo=tonumber(sensorValue.channel)\n --解析单条数据\n for kdata,vdata in ipairs(singleData.data) do\n\t\t\t\t\t\tlog.debug("fs_gzm_2018:遍历解析单条数据 键="..tostring(kdata).." 值="..tostring(vdata))\n \n \n\t\t\t\t\t\t\n local anglex=tonumber(vdata.value[0])\n\t\t\t\t\t\t\tlocal angley=tonumber(vdata.value[1])\n\t\t\t\t\t\t\tlocal force --轴力\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlocal length_cj --模板沉降\n\t\t\t\t\t\t\tlocal length_sp --水平位移\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif factorid=="0" then --模板沉降\n\t\t\t\t\t\t\t\tlength_cj=tonumber(vdata.value[2])\n\t\t\t\t\t\t\telseif factorid=="1" then --水平位移\n\t\t\t\t\t\t\t\tlength_sp=tonumber(vdata.value[2])\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\telseif factorid=="2" then --轴力\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\tforce=tonumber(vdata.value[2])\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlocal timeStamp=tonumber(vdata.time) --时间戳\n local recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timeStamp)\n \n\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\tlog.debug("fs_gzm_2018: %s节点 模块%s,通道%s原型childDevice=%s",factorName,moduleNo,channelNo,json.encode(childDevice))\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tlog.debug("fs_gzm_2018:%s节点 deviceId为nil:m=%s,c=%s",factorName,moduleNo,channelNo)\n\t\t\t\t\t\t\tend\n \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex=anglex,\n\t\t\t\t\t\t\t\t\tangley=angley,\n\t\t\t\t\t\t\t\t\tforce=force,\n\t\t\t\t\t\t\t\t\tlength_cj=length_cj,\n\t\t\t\t\t\t\t\t\tlength_sp=length_sp\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttime=recordTime, \n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\n \n\n \n\t\t\t\tend\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("fs_gzm_2018resultData=%s", json.encode(out))\n ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("fs_gzm_2018 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("fs_gzm_2018:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("fs_gzm_2018 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t log.debug("fs_gzm_2018 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t \t if tonumber(channelStrCheck)== tonumber(channelNoId) then\n \n \t\t log.debug("fs_gzm_2018: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("fs_gzm_2018: subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function(alldata)\n log.debug("fs_gzm_2018 校验开始")\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n\t\tlog.debug("fs_gzm_2018: 校验失败 Data is nil")\n return false\n end\n\n if string.sub(alldata,1,8)~='7b22616c' and string.sub(alldata,-2,-1)~='7d' then\n\t errormsg = 'CMD is wrong'\n errcode = 1002\n\t\tlog.debug("fs_gzm_2018: 校验失败 CMD is wrong")\n return false\n\tend\n\n log.debug("fs_gzm_2018: 校验通过")\n return true\nend\n\n\n\n--字符串ascii->字符\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ngetFactorName=function(num)\n local NO=tonumber(num+1)\n\tlocal FactorNames={"沉降","水平","轴力","倾斜"}\n\tlocal FactorName=FactorNames[NO]\n\treturn FactorName\nend\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\n\nend\n INLINE 2018-08-08 09:49:41.8+08 2018-08-08 09:49:41.8+08 2018-08-08 \N
+412d7ece-a7a5-4a1a-a9b7-4fb9d163a37c analyzeCpuRate \N 解析报文中的cpu使用率数据 1.0..0 65f478f1-f37a-4b2d-9652-45e1a06ae0f0 65f478f1-f37a-4b2d-9652-45e1a06ae0f0 f 65f478f1-f37a-4b2d-9652-45e1a06ae0f0 Lua {} INLINE 2018-01-09 16:56:35.343+08 2018-01-12 14:11:26.172+08 2018-01-09 \N
+9f3d7c20-ffe2-4e03-88d4-798fa7c8dcd8 test \N 12 e803485f-247f-4792-8d98-37b9a2a70d2e e803485f-247f-4792-8d98-37b9a2a70d2e f e803485f-247f-4792-8d98-37b9a2a70d2e Lua 342423 INLINE 2018-02-02 15:49:40.023+08 2018-02-02 15:49:40.023+08 2018-02-02 \N
+1d20568b-1259-4aac-8a65-4afd295e2e1a jdrk_transfer_1 \N 建大仁科 1.0 4a675a7d-e35c-478e-b8f1-ae01437c8281 4a675a7d-e35c-478e-b8f1-ae01437c8281 f 4a675a7d-e35c-478e-b8f1-ae01437c8281 Lua \nstart=function()\n log.debug("start jdrk_transfer_1.lua , ctx= %s",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n local moduleNo=tonumber(device.props.moduleId) \n if device.uplink.props ~='null' then \n moduleNo=tonumber(device.uplink.props.module) \n end\n buff=iota.appendHexByte(buff, moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian)\n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug(" jdrk_transfer_1 ssend %s",buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n log.debug("recv %s, ctx=%s", "jdrk_transfer_1.lua",hex)\n local out={\n type = 2,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==18) then\n \n --010304012c01f43a11\n --\n local current1 = iota.hexToShort(hex,3,'B');\n local current2 = iota.hexToShort(hex,5,'B');\n\n local moduleNo = iota.hexToByte(hex,0,'B')\n local array = {current1, current2}\n\n for i=1,2,1 do\n --获取通道设备device.id\n local childDevice=getDeviceInfo(moduleNo,i)\n local deviceid\n if childDevice~=nil then\n deviceid=childDevice.id\n log.debug("jdrk_transfer_1:子设备原形childDevice=%s",json.encode(childDevice))\n log.debug("jdrk_transfer_1:子设备device.id: "..tostring(device.id))\n --if childDevice.device.props.formula=="y=ax+b" then\n\n local a = childDevice.uplink.capabilities[1].formula.props.a\n local b = childDevice.uplink.capabilities[1].formula.props.b\n local Phy\n log.debug("jdrk_transfer_1:压力:公式参数=%s,%s",a,b)\n if a ==nil or b ==nil then\n Phy=nil \n else\n Phy = a*array[i]+b\n log.debug("当前的Phy是:%s",Phy)\n local data1 = {\n data={\n pressure=Phy,\n },\n device=deviceid,\n type=1 \n };\n log.debug("Phy结果=%s",Phy)\n table.insert(out.data,data1)\n end \n --end\n end\n end\n else\n local message = "Invalid Msg, len is not rigth"\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("recv %s, ctx=%s", "jdrk_transfer_1.lua",json.encode(out))\n return json.encode(out)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n \tif child.uplink.props ~='null' or child.uplink.props.module==tostring(moduleNoId) or child.props.moduleId==tostring(moduleNoId) then\n\t\t \t if child.uplink.props.channel == tostring(channelNoId) or child.props.channelId == tostring(channelNoId) then\n log.debug("jdrk_transfer_1:".."DeviceInfo是:"..tostring(child.deviceId))\n \t\t log.debug("jdrk_transfer_1:".."子设备原形child=%s",json.encode(child))\n \t --return child.deviceId\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("jdrk_transfer_1:".."subdevices是nil")\n \treturn nil\n end\nend INLINE 2018-01-16 16:53:01.616+08 2018-03-27 10:32:25.094+08 2018-01-16 \N
+cf4c0e24-9798-4c40-af39-b680721eb626 tdx_weight_9801 \N 北京替帝西交通科技称重协议 1.0 9782b3cb-2975-4a3a-ab17-630d68c144dc 9782b3cb-2975-4a3a-ab17-630d68c144dc f 9782b3cb-2975-4a3a-ab17-630d68c144dc Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n \nstart=function()\n log.debug("start %s, ctx=", "tdx_weight_9801.lua",json.encode(device.props.moduleId))\nend\n--825502000B01150B3A2C06021001000000005D18000041E800000000000002003000BE0416040000000000000000000000000000FE01A601303030334C000000000000000000000070000000D4080000000000070F000059595959590000E807BC0000000000BE02EA0160020C020000000000000000B1090000F8070000D708000000000000000000000000C0B6D3E5484730333535323032312D30312D31312031313A35383A343200DC3B\nonData=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local IDX_Start = 0 -- 起始指令\n local IDX_AxisCount = 2; -- 轴数\n local IDX_TotalBase = 5; --总轴距\n local IDX_SerialNum = 18; -- 序列号\n local IDX_CarModle = 22; -- 车类型\n local IDX_RoadNo = 30; -- 车类型\n local IDX_CarSpeed = 32; -- 车速\n local IDX_AxieWeight1 = 34; -- 轴一重量\n local IDX_AxieWeight2 = 36; -- 轴二重量\n local IDX_AxieWeight3 = 38; -- 轴三重量\n local IDX_AxieWeight4 = 40; -- 轴四重量\n local IDX_AxieWeight5 = 42; -- 轴五重量\n local IDX_AxieWeight6 = 44; -- 轴六重量\n local IDX_AxieWeight7 = 46; -- 轴七重量\n local IDX_AxieWeight8 = 48; -- 轴八重量\n local IDX_AxieWeight9 = 50; -- 轴九重量\n local IDX_AxieWeight10 = 52;-- 轴十重量\n local IDX_Carlength = 54; -- 车长\n local IDX_MachineType = 56; -- 机器型号\n local IDX_CrossRoad = 60; -- 跨道\n local IDX_CarTemp = 72; -- 温度\n local IDX_GrossWeight = 76; -- 总重\n local IDX_Cardirection = 82; -- 方向\n local IDX_licence = 140; -- 车牌\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local axisnums = string.sub(hex,2*IDX_AxisCount+1,2*(IDX_AxisCount+1))\n local axisnum = tonumber(axisnums,16)--轴数\n local weigh = string.sub(hex,2*(IDX_GrossWeight+3)+1,2*(IDX_GrossWeight+4))..string.sub(hex,2*(IDX_GrossWeight+2)+1,2*(IDX_GrossWeight+3))..string.sub(hex,2*(IDX_GrossWeight+1)+1,2*(IDX_GrossWeight+2))..string.sub(hex,2*(IDX_GrossWeight)+1,2*(IDX_GrossWeight+1))\n local grossweight = tonumber(weigh,16)\n local moudleno = toStrHex(string.sub(hex,2*(IDX_MachineType)+1,2*(IDX_MachineType+5)))--模块号\n local Speeddata = string.sub(hex,2*(IDX_CarSpeed+1)+1,2*(IDX_CarSpeed+2))..string.sub(hex,2*(IDX_CarSpeed)+1,2*(IDX_CarSpeed+1))\n local speed = tonumber(Speeddata,16)--车速\n local totalbase = nil --总轴距\n local carmodel = string.sub(hex,2*(IDX_CarModle)+1,2*(IDX_CarModle+1)) --车型号\n local cartype = 0\n if carmodel == "65" then \n cartype = 1\n elseif carmodel == "66" then\n cartype = 2\n elseif carmodel == "67" then\n cartype = 3\n elseif carmodel == "68" then\n cartype = 4\n elseif carmodel == "69" then\n cartype = 5\n elseif carmodel == "70" then\n cartype = 6\n elseif carmodel == "71" then\n cartype = 7\n elseif carmodel == "72" then\n cartype = 8\n elseif carmodel == "73" then\n cartype = 9\n end\n local directiondata = string.sub(hex,2*(IDX_Cardirection)+1,2*(IDX_Cardirection+1))\n local direction = bit:_and(tonumber(directiondata) , 0x01)\n \tlocal over = bit:_and(tonumber(directiondata) , 0x02)\n local axieWeight1data = string.sub(hex,2*(IDX_AxieWeight1+1)+1,2*(IDX_AxieWeight1+2))..string.sub(hex,2*(IDX_AxieWeight1)+1,2*(IDX_AxieWeight1+1))\n local axieWeight1 = tonumber(axieWeight1data,16)\n local axieWeight2data = string.sub(hex,2*(IDX_AxieWeight2+1)+1,2*(IDX_AxieWeight2+2))..string.sub(hex,2*(IDX_AxieWeight2)+1,2*(IDX_AxieWeight2+1))\n local axieWeight2 = tonumber(axieWeight2data,16)\n local axieWeight3data = string.sub(hex,2*(IDX_AxieWeight3+1)+1,2*(IDX_AxieWeight3+2))..string.sub(hex,2*(IDX_AxieWeight3)+1,2*(IDX_AxieWeight3+1))\n local axieWeight3 = tonumber(axieWeight3data,16)\n local axieWeight4data = string.sub(hex,2*(IDX_AxieWeight4+1)+1,2*(IDX_AxieWeight4+2))..string.sub(hex,2*(IDX_AxieWeight4)+1,2*(IDX_AxieWeight4+1))\n local axieWeight4 = tonumber(axieWeight4data,16)\n local axieWeight5data = string.sub(hex,2*(IDX_AxieWeight5+1)+1,2*(IDX_AxieWeight5+2))..string.sub(hex,2*(IDX_AxieWeight5)+1,2*(IDX_AxieWeight5+1))\n local axieWeight5 = tonumber(axieWeight5data,16)\n local axieWeight6data = string.sub(hex,2*(IDX_AxieWeight6+1)+1,2*(IDX_AxieWeight6+2))..string.sub(hex,2*(IDX_AxieWeight6)+1,2*(IDX_AxieWeight6+1))\n local axieWeight6 = tonumber(axieWeight6data,16)\n local axieWeight7data = string.sub(hex,2*(IDX_AxieWeight7+1)+1,2*(IDX_AxieWeight7+2))..string.sub(hex,2*(IDX_AxieWeight7)+1,2*(IDX_AxieWeight7+1))\n local axieWeight7 = tonumber(axieWeight7data,16)\n local axieWeight8data = string.sub(hex,2*(IDX_AxieWeight8+1)+1,2*(IDX_AxieWeight8+2))..string.sub(hex,2*(IDX_AxieWeight8)+1,2*(IDX_AxieWeight8+1))\n local axieWeight8 = tonumber(axieWeight8data,16)\n local axieWeight9data = string.sub(hex,2*(IDX_AxieWeight9+1)+1,2*(IDX_AxieWeight9+2))..string.sub(hex,2*(IDX_AxieWeight9)+1,2*(IDX_AxieWeight9+1))\n local axieWeight9 = tonumber(axieWeight9data,16)\n local axieWeight10data = string.sub(hex,2*(IDX_AxieWeight10+1)+1,2*(IDX_AxieWeight10+2))..string.sub(hex,2*(IDX_AxieWeight10)+1,2*(IDX_AxieWeight10+1))\n local axieWeight10 = tonumber(axieWeight10data,16)\n local cmslengthdata = string.sub(hex,2*(IDX_Carlength+1)+1,2*(IDX_Carlength+2))..string.sub(hex,2*(IDX_Carlength)+1,2*(IDX_Carlength+1))\n local cmslength = tonumber(cmslengthdata,16)\n local licence = unicode2gb2312(string.sub(hex,2*(IDX_licence)+1,2*(IDX_licence+2)))..toStrHex(string.sub(hex,2*(IDX_licence+2)+1,2*(IDX_licence+8)))..unicode2gb2312(string.sub(hex,2*(IDX_licence+8)+1,2*(IDX_licence+10)))\n local tempdata = string.sub(hex,2*(IDX_CarTemp+1)+1,2*(IDX_CarTemp+2))..string.sub(hex,2*(IDX_CarTemp)+1,2*(IDX_CarTemp+1))\n local temp = tonumber(tempdata,16)\n local ctemp = temp - 100\n local width = nil\n local height =nil\n local crossroaddata = string.sub(hex,2*(IDX_CrossRoad+1)+1,2*(IDX_CrossRoad+2))..string.sub(hex,2*(IDX_CrossRoad)+1,2*(IDX_CrossRoad+1))\n local crossroads = tonumber(crossroaddata,16)\n local roadnodata = string.sub(hex,2*(IDX_RoadNo+1)+1,2*(IDX_RoadNo+2))..string.sub(hex,2*(IDX_RoadNo)+1,2*(IDX_RoadNo+1))\n local roadno = tonumber(roadnodata,16)\n local serialnumdata = string.sub(hex,2*(IDX_SerialNum+3)+1,2*(IDX_SerialNum+4))..string.sub(hex,2*(IDX_SerialNum+2)+1,2*(IDX_SerialNum+3))..string.sub(hex,2*(IDX_SerialNum+1)+1,2*(IDX_SerialNum+2))..string.sub(hex,2*(IDX_SerialNum)+1,2*(IDX_SerialNum+1))\n local serialnum = tonumber(serialnumdata,16)\n local limttotalweight = nil\n local LimitWeight = nil\n\n \n out.data = { --需要测试\n grossWeight = grossweight,\n speed = speed,\n axisnum = axisnum,\n totalBase = totalbase,\n carType = cartype,\n direction = direction,\n cmsLength = cmslength,\n licence = licence,\n axieWeight = json.encode({axieWeight1,\n axieWeight2,\n axieWeight3,\n axieWeight4,\n axieWeight5,\n axieWeight6,\n axieWeight7,\n axieWeight8,\n axieWeight9,\n axieWeight10}),\n temp = ctemp,\n width = width,\n height = height,\n crossRoad = crossroad,\n serialNum = serialnum,\n limitWeight =LimitWeight,\n limtTotalWeight = limttotalweight,\n \t\toverload = over,\n \t\tlane = roadno\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n log.debug("length = %d",string.len(data)/2)\n if data == nil or string.len(data)/2 ~= 172 then\n errormsg = 'Data is nil or length is not enough'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x82 then\n errormsg = 'TDX weight buffer startbuffer error'\n errcode = 1001\n return false\n end\n return true\n--crc\nend\n\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\nfunction unicode2gb2312(src)\n\tlocal map_tb={["冀"] = "BCBD",["豫"] = "D4A5",["云"] = "D4C6",["辽"] = "C1C9",["黑"] = "BADA",["湘"] = "CFE6",["皖"] = "CDEE",\n ["鲁"] = "C2B3",["新"] = "D0C2",["苏"] = "CBD5",["浙"] = "D5E3",["赣"] = "B8D3",["鄂"] = "B6F5",["桂"] = "B9F0", \n ["甘"] = "B8CA",["晋"] = "BDFA",["蒙"] = "C3C9",["陕"] = "C9C2",["吉"] = "BCAA",["闽"] = "C3F6",["贵"] = "B9F3", \n ["粤"] = "D4C1",["青"] = "C7E0",["藏"] = "B2D8",["川"] = "B4A8",["宁"] = "C4FE",["琼"] = "C7ED",["渝"] = "D3E5", \n ["京"] = "BEA9",["津"] = "BDF2",["沪"] = "BBA6",["深"] = "C9EE",["学"] = "D1A7" }\t\n\tfor k,v in pairs(map_tb) do\n if v == string.format("%X",tonumber(src,16)) then\n return k\n end\n end\n return " "\nend INLINE 2017-09-25 19:25:35.348+08 2021-02-02 15:38:44.343+08 2017-09-25 \N
+c72e540a-8318-44ec-98ba-85e71214bd9b fs_pressure_9002 \N 麦克 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --// Documents/PMO/02 产品协议/外购产品协议/麦克公司数字化变送器通信指令集.pdf\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n--2a31372b332e3531363933420d moduleId=17 channelId=1\n--"pressure": 3.5169\n\n--2a31372b31322e323430370d moduleId=17 channelId=1\n--temp": 12.24\n\nstart=function()\n log.debug("load script %s, moduleId=%s", "fs_pressure_9002.lua", device.uplink.props.module or "[nil]")\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fs_pressure_9002 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("fs_pressure_9002 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\t\n\tif tonumber(moduleNo) > 99 then\n local errout={\n data ={},\n result = {code = 1004,msg = 'module is Invalid'}\n }\n\n local errresult = json.encode(errout)\n ctx:done(errresult)\n end\n --全局out\n out={\n data ={},\n result = {}\n }\n\t\n local endian = 'B'\n local buff=''\n local sendstr = ''\n\t\n\t\n\t\n sendstr = sendstr..PadLeft(2,0,moduleNo)\n sendstr = sendstr..'RP'\n --sendstr = sendstr..tostring(device.props.channelId)\n sendstr = sendstr..'0'\n local p1,p2 = Check(sendstr)\n sendstr = sendstr..tostring(p1)..tostring(p2)\n sendstr = '$'..sendstr\n buff=toHexStr(sendstr)\n buff=iota.appendHexByte(buff, 0x0D, endian)\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result_pressure = unmarshall(resp,moduleNo)\n end\n if out.data.pressure~=nil then\n log.debug('fs_pressure_9002:'..'压强解析正常'..tostring(out.data.pressure))\n --压强正常 继续解析\n sendstr = ''\n sendstr = sendstr..PadLeft(2,0,moduleNo)\n sendstr = sendstr..'RT'\n --sendstr = sendstr..tostring(device.props.channelId)\n sendstr = sendstr..'0'\n local p1,p2 = Check(sendstr)\n sendstr = sendstr..tostring(p1)..tostring(p2)\n sendstr = '$'..sendstr\n buff=toHexStr(sendstr)\n buff=iota.appendHexByte(buff, 0x0D, endian)\n log.debug('fs_pressure_9002:'..'开始温度采集cmd:'..buff)\n ok,resp=ctx:ssend(buff,15000) \n if ok then\n log.debug('fs_pressure_9002:'..'温度采集成功 开始解析温度:'..resp)\n result_temp =tempunmarshall(resp,moduleNo) \n else\n log.debug('fs_pressure_9002:'..'温度采集失败')\n end\n end\n result=json.encode(out)\n ctx:done(result)\nend\n\nunmarshall=function(hex,moduleNo_p)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n log.debug('fs_pressure_9002:'..'pre =%s',toStrHex(hex))\n local ErrorCode = IsValid(hex,moduleNo_p)\n if ErrorCode then\n -- 010404800101488222\n local pdata = string.sub(toStrHex(hex),5,-4)\n pre = 0\n if string.sub(toStrHex(hex),5,5) =='-' then\n pre = tonumber(pdata) * -1\n else \n pre = tonumber(pdata) \n end\n out.data.pressure = pre\n else\n out.result = {code=errcode,msg=errormsg}\n end\n --return json.encode(out)\nend\n \ntempunmarshall=function(hex,moduleNo_t)\n log.debug('fs_pressure_9002:'..'receivedtemp =%s',toStrHex(hex))\n local ErrorCode = IsValidtemp(hex,moduleNo_t)\n if ErrorCode then\n -- 010404800101488222\n local tdata = string.sub(toStrHex(hex),5,-4)\n local temperature = 0\n if string.sub(toStrHex(hex),5,5) =='-' then\n temperature = tonumber(tdata) * -1\n else \n temperature = tonumber(tdata) \n end\n out.data.temperature = temperature\n else\n out.result = {code=errcode,msg=errormsg}\n end\n -- return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_p_check)\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = 'pressure Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x24 and iota.hexToByte(data,12,'B') ~= 0x0D then\n errormsg = 'CMD is not right,0x24 0x0D'\n errcode = 1001\n return false\n end\n log.debug('d =%s',toStrHex(data))\n if PadLeft(2,0,moduleNo_p_check) ~= string.sub(toStrHex(data),2,3) then\n \t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n \nIsValidtemp=function(data,moduleNo_t_check)\n if data == nil or string.len(data)/2 ~= 12 then\n errormsg = 'temp Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x24 and iota.hexToByte(data,11,'B') ~= 0x0D then\n errormsg = 'CMD is not right,0x24 0x0D'\n errcode = 1001\n return false\n end\n \tlog.debug('s =%s', toStrHex(data))\n if PadLeft(2,0,moduleNo_t_check) ~= string.sub(toStrHex(data),2,3) then\n\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n\n\nPadLeft=function(cnt,num,hex)\n local len = string.len(tostring(hex))\n local offset = cnt -tonumber(len)\n if offset == 0 then \n return hex\n else\n for i = 1,offset do \n hex = tostring(num)..tostring(hex)\n end\n end\n return hex\nend\n\n \n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\nCheck=function(str)\n local len = string.len(str);\n local pp = 0\n for i =1,len do\n local bi = string.byte(str, i);\n pp = bit:_and(bit:_xor(bi,pp) , 0xff)\n end\n local p0 = bit:_rshift(bit:_and(pp,0xf0),4)\n local p1 = bit:_and(pp,0x0f)\n return p0,p1\nend \n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend INLINE 2018-02-02 15:10:31.073+08 2018-06-28 17:36:46.32+08 2018-02-02 \N
+318b2494-9869-496b-b179-399d8330f96c ryzh_humi_1161 \N 1.0 e3655afc-a2a8-4bc3-801a-9c3019705a27 e3655afc-a2a8-4bc3-801a-9c3019705a27 f e3655afc-a2a8-4bc3-801a-9c3019705a27 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "ryzh_temphuni_1161.lua",json.encode(device))\n\t\n local endian = 'B'\n local buff=''\n\tlocal moduleNo=device.uplink.props.module \n\tlog.debug("ryzh_temphuni_1161 设备模块通道 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x05, endian) \n\tbuff=iota.appendHexCrc(buff, 'L' ,0) \n log.debug("ryzh_temphuni_1161,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,18000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {},\n\t\t\ttype=2\n\t\t}\n\t errout.result = {code = 1001, msg = '采集超时'} \n\t log.debug("ryzh_temphuni_1161 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n--FF040A0064006400640064006409FA\n\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("ryzh_temphuni_1161 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n data ={},\n result = {},\n type=2\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n\t local dataModuleHex=string.sub(hex,1,2)\n local dataModule=tonumber(dataModuleHex,16)\n local dataLength=string.len(hex)/2\n\t for i=3,dataLength-2,2 do\n\t local humidity =iota.hexToUShort(hex,i,'B')/10\n \t\tlocal channel=(i-1)/2\n\t\t local childDevice=getDeviceInfo(dataModule,channel)\n\t\t if childDevice~=nil then\n\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\thumidity=tonumber(string.format("%0.2f",humidity))\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t\t}\n\t\t\t\tlog.debug("ryzh_temphuni_1161 m=%s,c=%s,结果=%s",dataModule,channel,json.encode(data1))\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\tend\n\t end\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("ryzh_temphuni_1161 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 15 then\n errormsg = string.format('数据长度无效[%s]≠14',string.len(data)/2)\n errcode = 1002\n return false\n end\n \n if string.sub(data, 1, 2) ~= 'ff' or string.sub(data, 5,6) ~= '0a' then\n errormsg = string.format('无效的数据指令=%s', data)\n errcode = 1003\n return false\n end\n\t\n\tlocal dataCheckModule=string.sub(data,1,2)\n\tif tonumber(dataCheckModule,16) ~=tonumber(moduleCheck) then\n errormsg = string.format('无效的模块号=0x%s[%s]', dataCheckModule,moduleCheck)\n errcode = 1003\n return false\n end\n return true\n--crc\nend\n\n \nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("ryzh_temphuni_1161 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("ryzh_temphuni_1161:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("ryzh_temphuni_1161 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t log.debug("ryzh_temphuni_1161 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t \t if tostring(channelStrCheck)== tostring(channelNoId) then\n \n \t\t log.debug("ryzh_temphuni_1161: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("ryzh_temphuni_1161: subdevices是nil")\n \treturn nil\n end\nend INLINE 2018-01-08 19:19:36.706+08 2018-12-15 09:26:34.609+08 2018-01-06 \N
+476e231d-d7b8-49da-bc07-0b0dd084b5d3 br_waterLevel_1905 \N 西安北瑞三元电子水尺协议 1.0 467605c5-28cc-4c6b-ab24-05578bcf5197 467605c5-28cc-4c6b-ab24-05578bcf5197 f 467605c5-28cc-4c6b-ab24-05578bcf5197 Lua \nstart=function()\n log.debug("start %s, ctx=", "br_waterLevel_1905.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId need rewrite'}\n ctx:done(json.encode(errout))\n else\n\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x40, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n end\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- 010404447a00000000 moduleId=1\n --"waterLevel": 1000\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\n local level = iota.hexToFloat(hex,3,'B')\n out.data = {\n waterLevel = level\n }\n\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x04 then\n errormsg = 'CMD is not right'\n errcode = 1001\n \treturn false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2017-09-14 11:26:41.221+08 2018-02-28 18:32:12.188+08 2017-09-14 \N
+30362f9f-8691-4ba1-8338-583ea6d80c08 bw_Inclination_1 \N 北微电子罗盘协议 1.0 684052b5-3f7b-4e98-a4bd-2982f7d94203 684052b5-3f7b-4e98-a4bd-2982f7d94203 f 684052b5-3f7b-4e98-a4bd-2982f7d94203 Lua --//01 协议文档/5月第1周/无锡北微传感科技有限公司/BWS2000超高精度全温补数字双轴倾角传感器-无锡北微传感科技有限公司.pdf\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\n--770D008410001701796302266522 \n--moduleId=0\n--"anglex": -0.17,\n--"angley": 179.63,\n--"anglez": 226.65,\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "bw_Inclination_1.lua", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff='' \n local errout={\n type = 1,\n data ={},\n result = {}\n }\n if tonumber(device.uplink.props.module) > 255 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,module > 255'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff, 0x77, endian)\n buff=iota.appendHexByte(buff, 0x04, endian)\n buff=iota.appendHexByte(buff, device.uplink.props.module, endian)\n buff=iota.appendHexByte(buff, 0x04, endian)\n local plussum = string.format("%X",checkPlusSum(buff,1,4))\n buff = buff..PadLeft(2,0,plussum)\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\n end\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n \n--公式 \n local xFirst=string.sub(hex,9,9)\n local xSign\n if xFirst=='0'then\n xSign=1\n else\n xSign=-1\n end\n local x=tonumber(string.sub(hex,10,14))/100*xSign\n\n local ySign\n local yFirst=string.sub(hex,15,15)\n local ySign\n if yFirst=='0'then\n ySign=1\n else\n ySign=-1\n end\n local y=tonumber(string.sub(hex,16,20))/100*ySign\n\n local zSign\n local zFirst=string.sub(hex,21,21)\n local zSign\n if zFirst=='0'then\n zSign=1\n else\n zSign=-1\n end\n local z=tonumber(string.sub(hex,22,26))/100*zSign\n \n out.data = { --需要测试\n anglex = x,\n angley = y,\n anglez=z\n }\n else\n out.result = {code = errcode, msg = message}\n end\n return json.encode(out)\nend\n\nIsValid=function(data)\n if string.len(data)/2 ~= 14 or iota.hexToByte(data,0,'B') ~= 0x77 then\n errormsg = 'Data is Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,2,'B') ~= tonumber(device.uplink.props.module) then\n errcode = 1004\n errormsg = 'Invalid moduleId ' \n return false\n end\n return true\n--crc\nend\n\ncheckPlusSum=function(data,startindex,endindex)\n local sum = 0\n for i=startindex,endindex do\n if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)))) % 0xffff\n end\n end \n\n sum = bit:_and(sum ,0xff)\n return sum\nend \n\nPadLeft=function(cnt,num,hex)\n local len = string.len(tostring(hex))\n local offset = cnt -tonumber(len)\n if offset == 0 then \n return hex\n else\n for i = 1,offset do \n hex = tostring(num)..tostring(hex)\n end\n end\n return hex\nend INLINE 2018-04-03 11:03:13.008+08 2018-04-04 10:20:56.969+08 2018-04-03 \N
+5cbb0e55-7ff3-43d3-bfce-e2e1d8ea2186 DAM3055_1202 \N 模拟量采集仪协议 1.0 406df859-191e-4c39-9faf-18b70e060d97 406df859-191e-4c39-9faf-18b70e060d97 f 406df859-191e-4c39-9faf-18b70e060d97 Lua --////04 项目资料/2017-07/阿尔泰-DAM-3055通讯说明.docx\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nstart=function()\n log.debug("load script %s, moduleId=%s", "DAM3055.lua", device.props.moduleId or "[nil]") \nlocal endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n \n log.debug("DAM3055:LUA:根设备devices : data is =%s", json.encode(subdevices))\n \tfor index,child in pairs(subdevices) do\n log.debug("DAM3055:LUA:子设备subdevices=%s : data is =%s", index,json.encode(subdevices))\n local moduleNo=tonumber(child.props.moduleId) \n\t\t local channelNo=tonumber(child.props.channelId)\n if child.uplink.props ~='null' then \n \t moduleNo=tonumber(child.uplink.props.module) \n channelNo=tonumber(child.uplink.props.channel)\n end\n log.debug("DAM3055:模块%s通道%s的deviceId是%s:",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\t \n\t\t\tbuff=iota.appendHexByte(buff, moduleNo, endian)\n buff=iota.appendHexByte(buff, 0x04, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0x01, endian) \t\t\t\n\n\t\t\tbuff=iota.appendHexByte(buff, 2*channelNo-2, endian) \n\t\t\tbuff=iota.appendHexWord(buff, 0x01, endian)\t\n\t\t\tbuff=iota.appendHexCrc(buff, 'L',0) \n\t\t\t\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n log.debug("DAM3055:模块%s通道%s的数据接收成功,开始解析",moduleNo,channelNo) \n\t\t\tresult = unmarshall(resp,child)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("DAM3055:模块%s通道%s的数据接收失败",moduleNo,channelNo) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("DAM3055:".."subdevices是nil")\n \treturn nil\n end\n\t\t\n\tlog.debug('DAM3055:out序列化')\n\tlocal resultData =json.encode(out)\n log.debug("DAM3055:out序列化结果 : out is =%s", json.encode(out))\n ctx:done(resultData)\t\n\t\n\t\nend\n\n\n-- 0104028000D8F0 Phy=50 rawvalue=32768\nunmarshall=function(hex,subDevice)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n\t--local subModuleId=subDevice.props.moduleId\n --local subChannelId=subDevice.props.channelId\n local subModuleId=subDevice.props.moduleId\n\tlocal subChannelId=subDevice.props.channelId\n if subDevice.uplink.props ~='null' then \n moduleNo=subDevice.uplink.props.module\n channelNo=subDevice.uplink.props.channel\n end\n\tlog.debug("DAM3055:模块%s通道%s的deviceId是:%s",subModuleId,subChannelId,subDevice.id)\n local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n if ErrorCode then \n \n \n\t\tlocal rawvalue = iota.hexToUShort(hex,3,'B');\n\t\tlog.debug("DAM3055:模块%s通道%s的原始值是:rawvalue=%s",subModuleId,subChannelId,rawvalue)\n log.debug("DAM3055:模块%s通道%s的参数值是:=%s",subModuleId,subChannelId,json.encode(subDevice.uplink.capabilities[1].props))\n \n\t\tlocal Phy=0\n\t\tlocal value=0\n if subDevice.uplink.capabilities[1].formula.metaid == "155ebc9a-097d-4567-baf4-6271f43c2669" then --模拟量线性转换数字量公式 \n\t\t\tlocal aL = subDevice.uplink.capabilities[1].formula.props.aL\n\t\t\tlocal aH = subDevice.uplink.capabilities[1].formula.props.aH\n\t\t\tlocal dL = subDevice.uplink.capabilities[1].formula.props.dL\n\t\t\tlocal dH = subDevice.uplink.capabilities[1].formula.props.dH\n\t\t\tif aL~=nil and aH~=nil and dL~=nil and dH~=nil then\n\t\t\t\taL = tonumber(aL)\n\t\t\t\taH = tonumber(aH)\n\t\t\t\tdL = tonumber(dL)\n\t\t\t\tdH = tonumber(dH)\t\t\t\t\t\t\n\t\t\t\tif aL==0 and aH==20 then\n\t\t\t\t\t value = (20.0/65536)*rawvalue;\n\t\t\t\t\t Phy = (dH - dL)/(aH - aL)*(value - aL) + dL\n\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\tif aL==0 and aH==10 then\n\t\t\t\t\t value = (10.0/65536)*rawvalue;\n\t\t\t\t\t Phy = (dH - dL)/(aH - aL)*(value - aL) + dL\n\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\tif aL==4 and aH==20 then\n\t\t\t\t\t value = (16.0/65536)*rawvalue+4;\n\t\t\t\t\t Phy = (dH - dL)/(aH - aL)*(value - aL) + dL\n\t\t\t\tend\t\t\t\n\t\t\t\tlog.debug("DAM3055:模块%s通道%s的aL=%s,aH=%s,dL=%s,dH=%s,value=%s,phy=%s",subModuleId,subChannelId,aL,aH,dL,dH,value,Phy)\t\n\t\t\tend\n\t\tend\n\t\tif subDevice.uplink.capabilities[1].formula.metaid == "df6a9e9a-ecfa-46b2-9244-698035b23dfa" then --基泰 角度公式 \n\t\t\t\tlocal K1 = subDevice.uplink.capabilities[1].props.K1\n\t\t\t\tlocal K2 = subDevice.uplink.capabilities[1].props.K2\n\t\t\t\tlocal K3 = subDevice.uplink.capabilities[1].props.K3\n\t\t\t\tlocal Fo = subDevice.uplink.capabilities[1].props.Fo\n\t\t\t\tlog.debug("DAM3055:公式48参数K1=%s,K2=%s,K3=%s,Fo=%s",K1,K2,K3,Fo)\n\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\telse\n\t\t\t\t\tvalue = (rawvalue - 32767) / 32767.0 * 5000.0;--获得模拟量 阿尔泰 厂家提供 (mv)\n\t\t\t\t\tlocal Fi=value \n\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)\n\t\t\t\t\tlog.debug("DAM3055:电流模块当前的Phy是:%s",Phy)\n\t\t\t\tend \n\t\t\n\t\tend\n \n \n \n\t\tsubData.data={\n\t\t analog=value,\n \tphysicalvalue=Phy\n\t\t\t\t\t}\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n log.debug('DAM3055:开始校验数据')\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x04 or iota.hexToByte(data,2,'B') ~= 0x02 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n \n--crc\n \t--判断数据有效性\t\t\t\n local crcH = iota.hexToByte(data,5,'B');\t \n local crcL = iota.hexToByte(data, 6,'B');\t\n\n log.debug("DAM3055:crcH等于:%s",crcH)\n log.debug("DAM3055:crcL等于:%s",crcL)\n --判断CRC16正确性\n local checkCrc16=string.sub(data,-4,-1)\n --log.debug("checkCrc16等于:%s",checkCrc16)\n local dataCopy=string.sub(data,1,-5)\n dataCopy=iota.appendHexCrc(dataCopy, 'B' ,0)\n --log.debug("DAM3055:dataCopy+CRC等于:%s",dataCopy)\n local dataCopycrcH = iota.hexToByte(dataCopy,5,'B');\t \n local dataCopycrcL = iota.hexToByte(dataCopy, 6,'B');\t\n\n --log.debug("DAM3055:dataCopycrcH等于:%s",dataCopycrcH)\n --log.debug("DAM3055:dataCopycrcL等于:%s",dataCopycrcL)\n local isCheckCrcOK=(crcH==dataCopycrcL and crcL==dataCopycrcH)\n if isCheckCrcOK ~=true then \n \tlog.debug("DAM3055:isCheckCrcOK等于:%s",isCheckCrcOK)\n errormsg = 'Hex crc16 False'\n errcode = 1004\n return false\n end\n log.debug('DAM3055:数据校验通过')\n return true\nend\n INLINE 2018-01-09 09:47:11.459+08 2018-04-08 16:27:28.03+08 2018-01-07 \N
+0548ebe4-a105-461a-80e5-ade045ca89f6 Led_Server \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug("Led_server:device=%s",json.encode(device))\n--根据经纬度获取天气\n\tlocal location = device.props.location\n local url = "http://api.map.baidu.com/telematics/v3/weather?location=".. location .. "&output=json&ak=wEiighBCdHAkOrXRHDsqlgW5";\n\n\t--Sleep(1)\n\t --请求数据\n\tlocal datareq = {\n\t\t\t\ttype= "http",\n\t\t\t\turl=url, \n\t\t\t\tmethod="get",\n\t\t\t\theader={}\n\t\t\t}\n\t --get发送\n\tlocal dataok,dataack=ctx:ssend(datareq,4000)\n\tlocal wd = nil\n\tif not dataok or dataack==nil then\t\t\n\t\twd = DisplayWeather(dataack)\n\telse\n\t\tlog.debug("recived data is nil,cant reverse to weather!!")\n\tend\t\n\t\t\t\n--根据结构物和监测因素获取数据\n\tlocal data = GetEnvData()\n-- 组合数据\n\tlocal ack = combineParams(wd,data)\n\t--local str = toStrHex(ack)\n\n--数据推送\n result = {\n result = nil,\n type = 1,\n data = {\n ack = json.encode(ack)\n }\n }\n\tlog.debug("Led_server:ack=%s", json.encode(ack))\n\n ctx:done(json.encode(result))\nend\n\n\n\nfunction DisplayWeather(data)\n\tlog.debug("Led_server DisplayWeather: %s",json.encode(data.body))\n\tif data.code==200 and data.body == "" then\n\t\talldataTable=json.decode(data.body) -- 有数据\n\t\tlocal rt_data=data.data.rt_data\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t--遍历节点数据\n\t\tfor k,v in ipairs(rt_data) do\n\t\t\tlog.debug("Led_server k=%s, value=%s",k,json.encode(v))\t\n\t\t\tlocal json = v.results.Last.Last\n\t\t\tlocal todata = json.First.First\n\t\t\tlocal sd = {\n\t\t\t\tdate = tostring(todata.date),\n\t\t\t\tweather = tostring(todata.weather),\n\t\t\t\twind = tostring(todata.wind),\n\t\t\t\ttemperature = tostring(todata.temperature)\n\t\t\t}\n\t\t\treturn sd\n\t\tend\n\t\t\n\tend\nend\n\n\nfunction GetEnvData()\n\tlog.debug("Led_server GetData")\n\tlocal data = capability.param\n\tlocal _endatas = json.encode(data.body)\n \tlog.debug("Led_server GetData:%s",_endatas)\n\tlocal str = ""\n\tfor key ,value in pairs(_endatas.screens.contents.content) do\n\tif #(_endatas.screens.contents.content) > 1 then\n\t\tstr = str..value[key]\n\telse \n\t\tstr = str..value[key].."\\r\\n"\n\tend\t\n\treturn str\nend\n\nfunction combineParams(wd,data)\n\tlog.debug("Led_server combineParams")\n\tlocal jwd = json.encode(wd)\n\t--数据转换\n\tlocal weather = jwd.weather\n\tlocal strdata =tostring(data)\n\tstrdata = string.gsub(strdata, "weather", tostring(weather))\n\tlocal buff = GetCommandByContent(strdata)\n\tlocal ok, ack = ctx:ssend(buff, 20000)\n\treturn ack\nend\n\nfunction GetCommandByContent(data)\n\tlog.debug("Led_server GetCommandByContent")\n\tlocal dispmode = 10 \n\tif device.props.dispmode ~=nil then\n\t\tdispmode = tonumber(device.props.dispmode)\n\tend\t\n\tlocal speed = 1 \n\tif device.props.speed ~=nil then\n\t\tspeed = tonumber(device.props.speed)\n\tend\n\tlocal stay = 5 \n\tif device.props.stay ~=nil then\n\t\tstay = tonumber(device.props.stay)\n\tend\n\tlocal size = 16 \n\tif device.props.size ~=nil then\n\t\tsize = tonumber(device.props.size)\n\tend\t\n\tlocal color = 0 \n\tif device.props.color ~=nil then\n\t\tcolor = tonumber(device.props.color)\n\tend\t\n\tlocal screenarea = 64 \n\tif device.props.screenarea ~=nil then\n\t\tscreenarea = tonumber(device.props.screenarea)\n\tend\n\tlocal ch = tonumber(device.props.channel)\n\n\tlocal strData = string.format("T;E%02d;P%02d;D%02d;F%02d;C%02d;S%s",dispmode,speed,stay,size,color,tostring(data))\n\tlog.debug("Led_server strData:%s",strData)\n \tlocal datastr = StrtoHex(strData)\t\n\tlocal nDataLen = string.len(datastr)/2\n\tlocal szCommand = "qtdata "..tostring(ch).." "..tostring(nDataLen) --channel\n \tlog.debug("Led_server szCommand:%s ",szCommand)\n\tlocal szData = StrtoHex(szCommand)\n\tlocal nCmdLen = string.len(szCommand)\n\tlocal cmd1 = string.format("%02X",bit.rshift(tonumber(nCmdLen),16)) \t\n\tlocal cmd2 = string.format("%02X",bit.rshift(tonumber(nCmdLen),8))\n\tlocal cmd3 = string.format("%02X",tonumber(nCmdLen))\n\tlocal data1 = string.format("%02X",bit.rshift(tonumber(nDataLen),16))\n\tlocal data2 = string.format("%02X",bit.rshift(tonumber(nDataLen),8))\n\tlocal data3 = string.format("%02X",tonumber(nDataLen))\n\tlocal str= "AA01BB00"..cmd1..cmd2..cmd3..szData.."AA01BB10"..data1..data2..data3..datastr\n\tlog.debug("Led_server str:%s",str)\n\treturn str\nend\n\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n\t--判断输入类型\n\tif (type(hex)~="string") then\n\t\treturn nil,"hex2str invalid input type"\n\tend\n\t--拼接字符串\n\tlocal index=1\n\tlocal ret=""\n\tfor index=1,hex:len() do\n \tlocal str = string.format("%02X",hex:sub(index):byte())\n \tret=ret..str\n\tend\n\treturn ret\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend INLINE 2019-01-04 18:17:17.426+08 2019-01-06 14:24:45.756+08 2019-01-04 \N
+040b16d3-afbd-46d8-bd00-71364dbbcf02 br_mop \N 1.0 467605c5-28cc-4c6b-ab24-05578bcf5197 467605c5-28cc-4c6b-ab24-05578bcf5197 f 467605c5-28cc-4c6b-ab24-05578bcf5197 Lua \nstart = function()\n\tlocal cmd = capability.param\n\tlog.debug("MOP:linkcnt=%s",cmd)\n\tupdate_mop(cmd)\n ctx:done(json.encode(out))\nend\n\n\n--需要配置更新\nupdate_mop = function(command)\n log.debug("MOP: update_mop command=%s",command)\n\n\n\tlocal tosend = StrtoHex(command)\n\tlocal ok, ack = ctx:ssend(tosend, 4000)\n\tlog.debug("MOP : mop_sensor ssend ack:%s ok:%s",json.encode(ack),ok)\n result = {\n result = nil,\n type = 1,\n data = {\n ack = HextoStr(ack)\n }\n }\n\tlog.debug("MOP : ack= %s",result.data.ack)\n ctx:notify(json.encode(result))\nend\n\n--字符串ascii->字符\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n\t--判断输入类型\n\tif (type(hex)~="string") then\n\t\treturn nil,"hex2str invalid input type"\n\tend\n\t--拼接字符串\n\tlocal index=1\n\tlocal ret=""\n\tfor index=1,hex:len() do\n \tlocal str = string.format("%02X",hex:sub(index):byte())\n \tif str == '0A' or str =='0a' then\n \t\tstr = '0d0a' \t\t\n \tend\t\n \tif index == hex:len() then\n \t\tstr = str..'0d0a'\n \tend\n \tret=ret..str\n\tend\n\treturn ret\nend\n\n INLINE 2019-07-11 16:53:40.064+08 2019-07-11 16:53:40.064+08 2019-07-11 \N
+fa427e87-1cdc-4ef4-95d5-4cf112506b12 gmkj7502test \N 1.0 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 f 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 Lua --20180917项目资料提交\\2 桥梁监测--东南大学--梁少龙\\10730008 GM8050 MODBUS-RTU通讯协议(V2.0).doc\n\nstart =\n function()\n log.debug('start %s, ctx=%s', 'gmkj__7500.lua', json.encode(device))\n\n local endian = 'B'\n local buff = ''\n\n moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n buff = iota.appendHexByte(buff, moduleNo, endian)\n buff = iota.appendHexByte(buff, 0x14, endian)\n buff = iota.appendHexByte(buff, 0x03, endian)\n buff = iota.appendHexByte(buff, 0x00, endian)\n buff = iota.appendHexByte(buff, 0x02, endian)\n buff = iota.appendHexByte(buff, 0x00, endian)\n buff = iota.appendHexCrc(buff, 'L', 0)\n\n log.debug('gmkj__7500,m=%s, send=%s', moduleNo, buff)\n ok, resp = ctx:ssend(buff, 15000)\n local result = '{}'\n if ok then\n result = unmarshall(resp, moduleNo)\n ctx:done(result)\n else\n --\n local errout = {\n data = {},\n result = {}\n }\n errout.result = {code = 1001, msg = '采集超时'}\n ctx:done(errout)\n end\nend\n\n--0114040044C1147444C169C144C1B7AE44C2101444C2763444C3065E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044C2ADE0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044C1BAC70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097A6\n\nunmarshall =\n function(hex, moduleNoStr)\n log.debug('gmkj__7500 收到数据=%s', hex)\n\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local data = hex\n\n local ErrorCode = IsValid(hex, moduleNoStr)\n if ErrorCode then\n log.debug('gmkj__7501 数据有效')\n\n local alldata = {}\n\n --分析单类数据\n for i = 1, 32 * 8, 1 do\n local wavelength = iota.hexToFloat(hex, i * 4, 'B')\n alldata[i] = tonumber(string.format('%0.4f', wavelength))\n end\n log.debug('gmkj__7501 通道1数据1=%s,通道8数据32=%s', alldata[1], alldata[256])\n --遍历设备 匹配数据\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n\n if subdevices ~= nil then\n local moduleNo_sub = tonumber(device.uplink.props.module) --模块\n for index_channel, channelDevice in pairs(subdevices) do\n local channelNo_sub = tonumber(channelDevice.uplink.props.channel) --通道\n for index_node, nodeDevice in pairs(channelDevice.dnlinks[1].devices) do\n local nodeNo_sub = tonumber(nodeDevice.uplink.props.node) --通道\n --log.debug("gmkj__7501 子设备模块通道 接口获取 m=%s,c=%s,n=%s ",moduleNo_sub,channelNo_sub,nodeNo_sub)\n local keyIndex = (channelNo_sub - 1) * 32 + nodeNo_sub\n local WaveLength = alldata[keyIndex]\n local temperature\n if nodeDevice.uplink.capabilities[1].formula.metaid == 'c4f1e8d6-82f3-4436-b65e-4d1a8474612e' then --温度公式\n local WTo = nodeDevice.uplink.capabilities[1].formula.props.WTo\n local Kwt = nodeDevice.uplink.capabilities[1].formula.props.Kwt\n local To = nodeDevice.uplink.capabilities[1].formula.props.To\n if WTo == nil or Kwt == nil or To == nil then\n temperature = nil\n else\n temperature = (WaveLength - WTo) * 1000 * Kwt + To\n end\n local data_temp = {\n data = {\n wavelength = tonumber(string.format('%0.3f', WaveLength)),\n physicalvalue = tonumber(string.format('%0.2f', temperature))\n },\n device = nodeDevice.id,\n type = 1\n }\n\n table.insert(out.data, data_temp)\n elseif nodeDevice.uplink.capabilities[1].formula.metaid == '83c9a688-5f70-472f-abce-c1c127ce189b' then --应变公式 ε= [(W - Wo)-(WT-WTo)*Kt/Kwt]*1000.0/K\n local cn = nodeDevice.uplink.capabilities[1].formula.props.cn --关联的温度通道与节点如5,12\n local Wo = nodeDevice.uplink.capabilities[1].formula.props.Wo --应变波长初值Wo\n local Kt = nodeDevice.uplink.capabilities[1].formula.props.Kt --应变的温度系数Kt\n local K = nodeDevice.uplink.capabilities[1].formula.props.K --应变系数K\n\n local Kwt --温度的温度系数Kt\n local WTo --T0温度波长值WTo\n\n if cn ~= nil and Wo ~= nil and Kt ~= nil and K ~= nil then\n local linkInformation = Split(cn, ',')\n local link_tempDevice_channel = linkInformation[1]\n local link_tempDevice_node = linkInformation[2]\n local w_device = getDeviceInfo(link_tempDevice_channel, link_tempDevice_node)\n\n if w_device ~= nil then\n Kwt = w_device.uplink.capabilities[1].formula.props.Kwt --温度的温度系数Kt\n WTo = w_device.uplink.capabilities[1].formula.props.WTo --T0温度波长值WTo\n\n\t\t\t\t\t\t\t\tlocal keyIndex_linkTempDevice = (link_tempDevice_channel - 1) * 32 + link_tempDevice_node\n \t\t\tlocal WaveLength_linkTempDevice = alldata[keyIndex_linkTempDevice]\n\t\t\t\t\t\t\t\tlocal physicalvalue=((WaveLength-Wo)-(WaveLength_linkTempDevice-WTo)*Kwt/Kt)*1000/K\n\n local data_strain = {\n data = {\n wavelength = tonumber(string.format('%0.3f', WaveLength)),\n physicalvalue = tonumber(string.format('%0.3f', physicalvalue))\n },\n device = nodeDevice.id,\n type = 1\n }\n\n table.insert(out.data, data_strain)\n end\n end\n end\n end\n end\n end\n else\n out.result = {code = errorcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n return resultData\nend\n\nIsValid = function(data, moduleStr)\n local checkLen = string.len(data) / 2\n if data == nil or checkLen ~= 1030 then\n errormsg = string.format('无效的数据长度=%s≠1030', checkLen)\n errcode = 1001\n log.debug('gmkj__7501 数据校验失败 %s ', errormsg)\n return false\n end\n\n local checkModule = iota.hexToByte(data, 0, 'B')\n if tostring(moduleStr) ~= tostring(checkModule) then\n errormsg = string.format('无效的模块号=%s≠%s', checkModule, moduleStr)\n errcode = 1004\n log.debug('gmkj__7501 数据校验失败 %s ', errormsg)\n return false\n end\n return true\n --crc\nend\n\n--获取传感器信息\nfunction getDeviceInfo(channelStr,nodeStr)\n\t--log.debug("gmkj__7501:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n\tif device.dnlinks ~= nil then\n\t\tlocal subdevices = device.dnlinks[1].devices\n\t\tfor i,subdevice in pairs(subdevices) do\n\n\t\t\tlocal submodule=subdevice.uplink.props.module\n\t\t\t--判断是否是3层采集仪结构\n\t\t\tif json.encode(subdevice.dnlinks)~="{}" then\n\t\t\t\t--log.debug("gmkj__7501:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n\t\t\t\tfor k,sublink in pairs(subdevice.dnlinks) do\n\t\t\t\t\tlocal sensorchannel=subdevice.uplink.props.channel\n\t\t\t\t\t--log.debug("gmkj__7501:sublink=%s",json.encode(sublink))\n\t\t\t\t\tfor u,sub_subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t--log.debug("gmkj__7501:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\tlocal sensornode=sub_subdevice.uplink.props.node\n\t\t\t\t\t\t\n\t\t\t\t\t\tif tostring(sensorchannel) == channelStr and tostring(sensornode)==nodeStr then\n\t\t\t\t\t\t\tlog.debug("gmkj__7501:m=%s,c=%s 3 拜安匹配到设备=%s",moduleid,channel,json.encode(sub_subdevice))\n\n\t\t\t\t\t\t\treturn sub_subdevice\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\t--log.debug("gmkj__7501:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\telse\n\n\t\t\t\tlocal subchannel=subdevice.uplink.props.channel\n\t\t\t\tlog.debug("gmkj__7501:两层结构 m=%s,c=%s 设备=%s",submodule,subchannel,json.encode(subdevice))\n\t\t\t\tif tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then\n\t\t\t\t\tlog.debug("gmkj__7501:m=%s,c=%s 2安信匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n\t\t\t\t\treturn subdevice\n\t\t\t\telse\n\t\t\t\t\tlog.debug("gmkj__7501 has no device module=%s channel=%s,[submodule=%s,subchannel=%s]",moduleid,channel,submodule,subchannel)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tlog.debug("gmkj__7501 has no device module=%s channel=%s",moduleid,channel)\n\t\treturn nil -- 没有找到匹配的传感器\n\telse\n\t\tlog.debug("gmkj__7501 has no subdevices.")\n\t\treturn nil -- 没有子设备\n\tend\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend INLINE 2019-01-29 10:54:12.085+08 2019-01-29 15:10:23.867+08 2019-01-29 \N
+1fb03ffc-fd93-4ea6-bf06-11311a655212 bw_inclination_1522 \N 无锡北微双轴倾角仪协议 1.0 684052b5-3f7b-4e98-a4bd-2982f7d94203 684052b5-3f7b-4e98-a4bd-2982f7d94203 f 684052b5-3f7b-4e98-a4bd-2982f7d94203 Lua --//01 协议文档/5月第1周/无锡北微传感科技有限公司/BWS2000超高精度全温补数字双轴倾角传感器-无锡北微传感科技有限公司.pdf\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\n--7710008400020103100051320000000012\n--moduleId=0\n--"xDegree": 2.0103,\n--"yDegree": -0.5132\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "bw_Inclination_1522.lua", device.props.moduleId or "[nil]")\n local endian = 'B'\n local buff='' \n local errout={\n type = 1,\n data ={},\n result = {}\n }\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("bw_Inclination_1522 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("bw_Inclination_1522 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\t\n if tonumber(moduleNo) > 255 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId > 255'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff, 0x77, endian)\n buff=iota.appendHexByte(buff, 0x04, endian)\n buff=iota.appendHexByte(buff, moduleNo, endian)\n buff=iota.appendHexByte(buff, 0x04, endian)\n local plussum = string.format("%X",checkPlusSum(buff,1,4))\n buff = buff..PadLeft(2,0,plussum)\n \tlog.debug("bw_Inclination_1522 ssend buff=%s",buff)\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\n end\nend\n\nunmarshall=function(hex,moduleNoStr)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n--公式 \n\n local xFirst =bit:_rshift(bit:_and(iota.hexToByte(hex,4,'B') , 0xF0) , 4)\n local xSecondNum = 100 * bit:_and (iota.hexToByte(hex,4,'B') , 0x0F)\n local xThirdNum = 10 * bit:_rshift(bit:_and (iota.hexToByte(hex,5,'B') , 0xF0) , 4) + bit:_and (iota.hexToByte(hex,5,'B') , 0x0F)\n local xForthNum = 0.1 * bit:_rshift(bit:_and (iota.hexToByte(hex,6,'B') , 0xF0) , 4) + bit:_and (iota.hexToByte(hex,6,'B') , 0x0F) * 0.01\n local xFifthNum = 0.001 * bit:_rshift(bit:_and (iota.hexToByte(hex,7,'B') , 0xF0) , 4) + bit:_and (iota.hexToByte(hex,7,'B') , 0x0F) * 0.0001\n \n local yFirst = bit:_rshift(bit:_and (iota.hexToByte(hex,8,'B') , 0xF0) , 4)\n local ySecondNum = 100 * bit:_and (iota.hexToByte(hex,8,'B') , 0x0F)\n local yThirdNum = 10 * bit:_rshift(bit:_and (iota.hexToByte(hex,9,'B') , 0xF0) , 4) + bit:_and (iota.hexToByte(hex,9,'B') , 0x0F)\n local yForthNum = 0.1 * bit:_rshift(bit:_and (iota.hexToByte(hex,10,'B') , 0xF0) , 4) + bit:_and (iota.hexToByte(hex,10,'B') , 0x0F) * 0.01\n local yFifthNum = 0.001 * bit:_rshift(bit:_and (iota.hexToByte(hex,11,'B') , 0xF0) , 4) + bit:_and (iota.hexToByte(hex,11,'B') , 0x0F) * 0.0001\n log.debug("F=%d",yForthNum)\n local angleX = xSecondNum + xThirdNum + xForthNum + xFifthNum\n local angleY = ySecondNum + yThirdNum + yForthNum + yFifthNum\n if xFirst == 0x01 then \n angleX = -angleX\n end\n if yFirst == 0x01 then \n angleY = -angleY\n end \n out.data = { \n xDegree = tonumber(string.format("%0.3f",angleX)),\n yDegree = tonumber(string.format("%0.3f",angleY))\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n log.debug('bw_Inclination_1522 %s', json.encode(out))\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNoStrCheck)\n if string.len(data)/2 ~= 17 or iota.hexToByte(data,0,'B') ~= 0x77 then\n errormsg = 'Data is Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,2,'B') ~= tonumber(moduleNoStrCheck) then\n errcode = 1004\n errormsg = 'Invalid moduleId ' \n return false\n end\n log.debug("bw_Inclination_1522 校验通过 hex=%s",data)\n return true\n--crc\nend\n\ncheckPlusSum=function(data,startindex,endindex)\n local sum = 0\n for i=startindex,endindex do\n if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)),16)) % 0xffff\n end\n end \n\n sum = bit:_and(sum ,0xff)\n return sum\nend \n\nPadLeft=function(cnt,num,hex)\n local len = string.len(tostring(hex))\n local offset = cnt -tonumber(len)\n if offset == 0 then \n return hex\n else\n for i = 1,offset do \n hex = tostring(num)..tostring(hex)\n end\n end\n return hex\nend INLINE 2017-09-02 14:34:36.909+08 2020-05-21 18:03:00.408+08 2017-08-31 \N
+04cd9536-5e39-46e9-a263-370fb4a6acd3 test_Xieyi \N 1.0 3e663c2d-1b5c-4742-aef3-a0c1368cc4b3 3e663c2d-1b5c-4742-aef3-a0c1368cc4b3 f 3e663c2d-1b5c-4742-aef3-a0c1368cc4b3 Lua --//04 项目资料/2017-07/北京星移/CYW11通用型投入式液位变送器.pdf\nstart=function()\n\tlog.debug("test999:load script %s, moduleId=%s", "xy_LiquidLevel_1931", device.props.moduleId or "[nil]")\n\tlog.debug("test999: device=%s,", json.encode(device))\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian) \t\t\n buff=iota.appendHexByte(buff, 0x01, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n end\nend\n--01030202acb959\n--moduleId=1\n--"liquidLevel": 1710,\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\n local LiquidLevel = iota.hexToShort(hex,3,'B')*5/2.0;\n \n out.data = {\n liquidLevel = LiquidLevel, \n }\n\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 or iota.hexToByte(data,2,'B') ~= 0x02 then\n errormsg = 'CMD is not right'\n errcode = 1001\n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid ack moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2018-03-01 14:27:34.721+08 2018-03-01 14:41:08.695+08 2018-03-01 \N
+fa94f295-26f0-4685-852a-f9bee4be9845 fs_peopleCounAJS_986 \N 安吉升RS485 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n\nend\n\nonData = function(hex)\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n local result = protocol_decode(hex, moduleNo)\n --判断是否快到0点 清空计数\n mayClear(moduleNo)\n log.debug('fs_peopleCounter_986 result=%s', result)\n ctx:notify(result)\nend\n\nfunction mayClear(moduleNo)\n local hourNow = tonumber(os.date('%H'))\n local minuteNow = tonumber(os.date('%M'))\n if hourNow >= 23 or minuteNow > 30 then --23点30后清空数据\n local clearBuff = protocol_encode(moduleNo)\n ctx:asend(clearBuff)\n log.debug('fs_peopleCounter_986 清空指令=%s', clearBuff)\n end\nend\n\nfunction protocol_encode(moduleNoStr)\n local BE = 'B'\n local buff = '63'\n buff = iota.appendHexByte(buff, moduleNoStr, BE) --\n buff = iota.appendHexByte(buff, 0x02, BE) --\n buff = iota.appendHexByte(buff, 0x07, BE)\n buff = iota.appendHexByte(buff, 0x00, BE)--00 全部清空 \n buff = buff .. CS8(1, buff)\n buff = iota.appendHexByte(buff, 0x0d, BE)\n return buff\n --63 00 02 07 00 f7 0d\nend\n\n-- returns: 结果, 原始值, 计算后值\n--正确回复 630011288200000010000000140000007a000000010d\n--原始数据 --"inCount": 130,\n-- "outCount": 16\nfunction protocol_decode(hex, moduleNoCheck)\n local data = hex\n --存储结果\n local out = {\n type = 1,\n data = {},\n result = {}\n }\n log.debug(data)\n --判断数据有效性\n local ErrorCode = IsValid(hex, moduleNoCheck)\n if ErrorCode then\n -- local inBytesStr = string.sub(hex, 2 * 4 + 1, 2 * 4 + 16)\n -- local outBytesStr = string.sub(hex, 2 * 12 + 1, 2 * 12 + 16)\n -- log.debug('fs_peopleCounter_986 inBytesStr=%s', inBytesStr)\n local inCount = iota.hexToUInt(hex,4,'L') --getCount(inBytesStr) -- :进人数\n local outCount = iota.hexToUInt(hex,8,'L') -- :出人数\n --local inCount2 = iota.hexToUInt(hex,12,'B') --getCount(inBytesStr) -- :进人数\n --local outCount2 = = iota.hexToUInt(hex,16,'B') -- :出人数\n\n\n out.data = {\n inCount = inCount,\n outCount = outCount,\n stayCount = inCount - outCount\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n return json.encode(out)\nend\n\nIsValid = function(data, deviceModule)\n log.debug('fs_peopleCounter_986 开始校验 data=%s', data)\n local dataLen = string.len(data) / 2\n if data == nil or dataLen ~= 22 then\n errormsg = string.format('数据长度无效=%s≠22', dataLen)\n errcode = 1002\n return false\n end\n if iota.hexToByte(data, 3, 'B') ~= 0x28 then\n errormsg = 'CMD is not right'\n errcode = 1003\n return false\n end\n local dataModule = iota.hexToByte(data, 1, 'B')\n if tonumber(deviceModule) ~= dataModule then\n errormsg = string.format('无效的模块号=%s≠%s', dataModule, deviceModule)\n errcode = 1004\n return false\n end\n return true\nend\n\n--校验和8\nCS8 = function(start, buff)\n local lcr = 0\n for i = start, string.len(buff) / 2 - 1 do\n lcr = lcr + tonumber(string.sub(buff, 1 + 2 * i, 2 * (i + 1)), 16)\n end\n local value =256- bit.band(lcr, 0x7f)\n return string.format('%02x',value)\nend\n\ngetCount = function(bytes_8)\n local bytes_len = string.len(bytes_8) / 2\n local count = 0\n for i = 0, bytes_len - 1, 1 do\n local num = tonumber(string.sub(bytes_8, -2 * i - 2, -2 * i - 1))\n count = count + num * math.pow(10, i)\n end\n return count\nend INLINE 2021-02-03 13:59:20.985+08 2021-02-22 11:12:09.816+08 2021-02-03 \N
+d33fb432-a9e5-4bc3-9758-ff853f405c10 bjsmt_level \N 1.0 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 f ccef8df0-e1f5-46be-a5b7-040285b1b6e8 Lua --D:\\SVN\\201812项目\\20181221新增项目资料\\3 东北大学弓长岭露天矿--林邦杰\\水准仪协议说明书V1.2-2.pdf\nstart=function()\n log.debug("start %s, ctx=%s", "bjsmt_level.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 4, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 4, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("bjsmt_level,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '采集超时'} \n\t log.debug("bjsmt_level m=%s, ok is false",moduleNo)\n\t ctx:done(json.encode(errout))\n\tend\nend\n--020400000004f1fa\n--02040842C8000041C8000072AE\n--"pressure": 100\n--temperature:25\nunmarshall=function(hex,moduleNoStr)\n log.debug("bjsmt_level m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n local pressure =iota.hexToFloat(hex,3,'B')\n\t\tlocal temperature =iota.hexToFloat(hex,7,'B');\n out.data = { \n pressure=string.format("%0.3f",pressure),\n\t\t\ttemperature=string.format("%0.2f",temperature)\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("bjsmt_level m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = string.format('无效的数据长度=%s≠%s',string.len(data)/2,13)\n errcode = 1001\n return false\n end\n \n local dataModule=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataModule) then\t\n errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2020-10-26 13:21:08.508+08 2020-10-29 13:07:38.221+08 2020-10-26 \N
+7dd1d023-4e38-4172-b2b4-6009de43f1a7 httpserverTest \N 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua onData=function(data)\n{\n --local data = json.encode(data)\n log.debug("http %s",data)\n}\n INLINE 2018-10-29 18:04:06.779+08 2018-10-29 18:04:06.779+08 2018-10-29 \N
+8118946d-d7e5-46b3-87ea-0d441ec77a2f ax_zx \N 安信振弦 标准协议 主动上报 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua \nonData = function(resp)\n log.debug('ax_zx loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n log.debug('ax_zx device=%s', json.encode(device))\n out = {\n type = 2,\n data = {},\n result = {}\n }\n \n\n local moduleNo=device.uplink.props.module\n \n local ErrorCode = IsValidOut(resp)\n if ErrorCode then\n\t local timeStr = string.sub(resp,21,48)\n\t log.debug("ax_zx timeStr=%s",timeStr)\n \n log.debug('ax_zx 数据有效=%s', resp)\n local allSubData = getAllDatas(resp)\n\t\tlog.debug('ax_zx allSubData=%s',json.encode(allSubData))\n --发送指令\n local subdevices = device.dnlinks[1].devices\n\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do --插入16个通道\n \tlog.debug('ax_zx child=%s', json.encode(child))\n channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t--if allSubData[channelNo]~=nil and allSubData[channelNo]>500 then\n \tlog.debug('ax_zx 解析通道%s数据', channelNo)\n \t \tresult = ParseResult(child, allSubData, channelNo, moduleNo,timeStr) ---插入数据\n \ttable.insert(out.data, result)\n \t--end\n end\n end\n else\n log.debug('ax_zx 数据无效=%s', resp)\n out.result = {code = ercode, msg = erormsg}\n end\n \n\n local resultData = json.encode(out)\n log.debug('ax_zx resultData=%s', resultData)\n ctx:notify(resultData)\nend\n\ngetAllDatas = function(hexStr)\n local DataList = {}\n local subDataArea = string.sub(hexStr, 49, -5)\n local dataCount = string.len(subDataArea) / 14\n for i = 1, dataCount do\n local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 14 + 1, (i - 1) * 14 + 14)\n local channelStr = string.sub(singleChannelDataHex, 2, 2)\n local subChannel = tonumber(channelStr, 16)\n \n DataList[subChannel]= {iota.hexToShort(singleChannelDataHex,1,'B'),iota.hexToShort(singleChannelDataHex,3,'B')/10000,iota.hexToShort(singleChannelDataHex,5,'B')}\n \tlog.debug('ax_zx getAllDatas DataList[%s]=%s',subChannel,json.encode(DataList[subChannel]))\n end\n return DataList\nend\n\nParseResult = function(childDevice, datatable, subChannelId, moduleNoStr,timeStr)\n log.debug('ax_zx datatable=%s', json.encode(datatable))\n local subData = {\n type = 1,\n data = {},\n device = '',\n result = {}\n }\n\tlocal dateTimeStr = toStrHex(timeStr)\n\tlog.debug("ax_zx dateTimeStr=%s",dateTimeStr)\n local timenow = unixtimestamp(dateTimeStr)\n\n local freq = datatable[subChannelId][1]+datatable[subChannelId][2]\n local temp = datatable[subChannelId][3]\n --if childDevice ~= nil then\n --if childDevice.uplink.capabilities[1].formula.metaid == '6cea049d-f41a-43f9-9e88-d8aeea9aca7f' then --振弦公式\n --local k = childDevice.uplink.capabilities[1].formula.props.K\n\n --local f0 = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t--local kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t--local t0 = childDevice.uplink.capabilities[1].formula.props.To\n\n --log.debug('ax_zx module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n --if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil and freq ~= nil and temp ~= nil then\n --Phy = k * (freq ^ 2 - f0 ^ 2)+ kt * (temp - t0) \n --end\n --end\n --log.debug('ax_zx freq=%s,Phy=%s', freq, Phy)\n singleData = {\n data = {\n\t\t\t temperature=tonumber(string.format('%0.2f',temp)),\n frequency = tonumber(string.format('%0.2f',freq))\n --physicalvalue = tonumber(string.format('%0.2f',Phy))\n },\n device = childDevice.id,\n type = 1,\n\t\t\ttime=timenow,\n }\n --end\n --end\n\n --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n if device.dnlinks ~= nil then\n for k, dnlink in pairs(device.dnlinks) do\n for v, subdevice in pairs(dnlink.devices) do\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n log.debug('ax_zx has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('ax_zx has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\nIsValidOut = function(checkdata)\n log.debug('ax_zx 开始校验数据=%s', checkdata)\n\n local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n if hexHeader ~= 0xFF then\n ercode = 1001\n erormsg = 'HexCMD False'\n log.debug('ax_zx HexCMDFalse[%s]', hexHeader)\n return false\n end\n return true\n --crc\nend\nunixtimestamp = function(datestr)\n \n local year = tonumber(string.sub(datestr,1,4))\n local month = tonumber(string.sub(datestr,5,6))\n local day = tonumber(string.sub(datestr,7,8))\n local hour = tonumber(string.sub(datestr,9,10))\n local minute = tonumber(string.sub(datestr,11,12))\n local second = tonumber(string.sub(datestr,13,14))\n\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend INLINE 2019-12-25 10:52:36.203+08 2019-12-25 11:35:50.388+08 2019-12-25 \N
+b3a939d8-6a64-4588-afe5-6a949ce71644 fs_trash_http \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n\nend\nasend_HttpResponse = function(bodyString)\n\tlog.debug('fs_trash_http asend_HttpResponse=%s', bodyString)\n\tlocal sender ={ pkg = bodyString }\n ack = {type = 'http', code = 200, body = bodyString}\n ctx:asend(ack)\nend\n\nonData = function(httpbody, index)\n\n\n out = {\n data = {},\n result = {},\n type = 2\n }\n --数据域 内的索引号\n\tsData = httpbody.Body\n log.debug('fs_trash_http httpbody=%s', json.encode(httpbody))\n\tlocal url = httpbody.URL\n\t--if string.find(url,'/fl/ws') then\n\t\tParseTrash(httpbody)\n\t--elseif string.find(url,'/fl/record') then\n\t\t--ParseRecord(httpbody)\n\t--end\n\n local resultData = json.encode(out)\n log.debug('fs_trash_http resultData=%s', json.encode(out))\n ctx:notify(resultData)\nend\n\nParseTrash = function(httpbody)\n\tlocal ErrorCode = IsValid(sData)\n if ErrorCode then\t\t\n\t\tlocal moduleNo = device.uplink.props.id --模块\n sData = httpbody.Body\t\t\n\t\tlocal raw = Split(sData,':')\n\t\tlog.debug('fs_trash_http raw=%s', raw[2])\n\t\tlocal buff = string.sub(raw[2],2,-3)\n\t\tlog.debug('fs_trash_http buff=%s', buff)\n --获取子字符串表\n\t\tlocal longitude = iota.hexToFloat(buff,26,'B')* 1000000\n\t\tlog.debug('fs_trash_http longitude=%s', longitude)\n\t\tlocal latitude = iota.hexToFloat(buff,30,'B')* 1000000\n\t\tlog.debug('fs_trash_http latitude=%s', latitude)\n\t\tlocal electric = iota.hexToShort(buff,40,'L')\n\t\tlog.debug('fs_trash_http electric=%s', electric)\n\t\tlocal totalbarrel = iota.hexToByte(buff,50,'L')\n\t\tlocal alarm\n\t\tlocal state\n\t\tlocal temp\n\t\tlocal trash\n\t\tlocal weight\n\t\tlog.debug('fs_trash_http totalbarrel =%s',tostring(totalbarrel))\n\t\t\n\t\tfor i = 1,totalbarrel,1 do\n\t\t\tlocal fault = iota.hexToByte(buff,51 + 6*(i-1),'L')\n\t\t\tlog.debug('fs_trash_http join for')\n\t\t\tif fault == 0x01 then\n\t\t\t\talarm = "温度传感器断开"\n\t\t\telseif fault == 0x02 then\n\t\t\t\talarm = "容量传感器断开"\n\t\t\telseif fault == 0x04 then\n\t\t\t\talarm = "称重系统故障"\n\t\t\telseif fault == 0x10 then\n\t\t\t\talarm = "电机断开"\n\t\t\telseif fault == 0x020 then \n\t\t\t\talarm = "电机短路"\n\t\t\telseif fault == 0x40 then\n\t\t\t\talarm = "上限位故障"\n\t\t\telseif fault == 0x80 then\n\t\t\t\talarm = "下限位故障"\n\t\t\telseif fault == 0x00 then\n\t\t\t\talarm = "正常"\n\t\t\tend\n\t\t\tlocal statecode = iota.hexToByte(buff,52 + 6*(i-1),'L')\n\t\t\tif statecode == 0x01 then\n\t\t\t\tstate = "温度超限"\n\t\t\telseif statecode == 0x02 then\n\t\t\t\tstate = "容量已满"\n\t\t\telseif statecode == 0x04 then\n\t\t\t\tstate = "称重超限"\n\t\t\telseif statecode == 0x08 then\n\t\t\t\tstate = "垃圾被清理"\n\t\t\telseif statecode == 0x010 then \n\t\t\t\tstate = "投口未关闭"\n\t\t\telseif statecode == 0x20 then\n\t\t\t\tstate = "缺水"\n\t\t\telseif statecode == 0x00 then\n\t\t\t\tstate = "正常"\n\t\t\tend\n\t\t\ttemp = iota.hexToByte(buff,53 + 6*(i-1),'L')\n\t\t\ttrash = iota.hexToByte(buff,54 + 6*(i-1),'L')\n\t\t\tweight = iota.hexToShort(buff,55 + 6*(i-1),'L')\n\t\t\tlog.debug('fs_trash_http weight %s',weight)\n\t\t\tlocal childDevice = getDeviceInfo(i,i)\n\t\t\tlocal outdata = {\n\t\t\t\tdata = {\n\t\t\t\t\tlongitude = longitude,\n\t\t\t\t\tlatitude = latitude,\n\t\t\t\t\tsignal = SG,\n\t\t\t\t\tusedelectric = usedelectric,\n\t\t\t\t\ttemprature = temp,\n\t\t\t\t\ttrash = trash\n\t\t\t\t},\n\t\t\t\tdevice = childDevice.id,\n\t\t\t\ttype = 1,\n\t\t\t\ttime = os.date("%Y-%m-%dT%H:%M:%S+08:00")\n\n\t\t\t}\n\t\t\tif fault ~= 0x00 then\n\t\t\t\toutdata.result = {code=fault,msg=alarm}\n\t\t\t\toutdata.data ={}\n\t\t\tend\t\t\n\t\t\ttable.insert(out.data,outdata)\n\t\tend\n\t\tlog.debug('fs_trash_http out=%s',json.encode(out))\n\telse\n\t\tout.result = {code = 3004, msg = "数据协议解析错误"}\n end\n\tlog.debug('fs_trash_http ParseTrash')\n\tResponde()\nend\n\nResponde = function()\n\tlocal number = #(device.dnlinks[1].devices) --桶数量\n\tlocal num = #(device.dnlinks)\n\tlog.debug('fs_trash_http Responde %s, %s',tostring(number),tostring(num))\n\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=buff..string.format("%02X",66)..string.format("%02X",65)\n\tlocal length = 43+4*number + 2\n\tlog.debug('fs_trash_http length %s',tostring(length))\n\tbuff=iota.appendHexWord(buff, length, 'L') \n\tlog.debug('fs_trash_http buff %s',buff)\n\tlocal year=os.date("%Y") \n\tlocal y = string.sub(tostring(year),-2,-1)\n\n\tbuff=buff..string.format("%02X",tonumber(y))\n\tlocal month=os.date("%m")\n\tbuff=buff..string.format("%02X",tonumber(month))\n\tlocal day=os.date("%d")\n\tbuff=buff..string.format("%02X",tonumber(day))\n\tlocal hour=os.date("%H")\n\tbuff=buff..string.format("%02X",tonumber(hour))\n\tlocal minute=os.date("%M")\n\tbuff=buff..string.format("%02X",tonumber(minute))\n\tlocal sec=os.date("%S")\n\n\tbuff=buff..string.format("%02X",tonumber(sec))\n\tbuff=buff.."0000"\n\tbuff=buff..string.format("%02X",66)..string.format("%02X",65)..string.format("%02X",65).."00" --机构编码\n\tbuff=buff..string.format("%02X",66)..string.format("%02X",65)..string.format("%02X",65).."00" --单位编码\n\tbuff=buff.."0007".."00"..string.format("%02X",22).."00"..string.format("%02X",18).."00"..string.format("%02X",6)\n\tbuff=buff.."00"..string.format("%02X",18).."00"..string.format("%02X",6).."0007000900070009"\n\tbuff=buff..string.format("%02X",10).."01"--消毒\n\tbuff=buff..string.format("%02X",30)--=握手周期\n\n\tlocal subdevices = device.dnlinks[1].devices\n \t\n\tfor i,subdevice in pairs(subdevices) do\n\t\tlocal ttype = subdevice.props.type\n\t\tlocal ctype = 6\n\t\tif ttype == '厨余' then\n\t\t\tctype = 0\n\t\telseif ttype == '纸张' then\n\t\t\tctype = 1\n\t\telseif ttype == '金属' then\n\t\t\tctype = 2\n\t\telseif ttype == '塑料' then\n\t\t\tctype = 3\n\t\telseif ttype == '玻璃' then\n\t\t\tctype = 4\n\t\telseif ttype == '其他' then\n\t\t\tctype = 5\t\t\t\n\t\telseif ttype == '回收' then\n\t\t\tctype = 6\n\t\telseif ttype == '有害' then\n\t\t\tctype = 7\n\t\telseif ttype == '织物' then\n\t\t\tctype = 8\n\t\telseif ttype == '感染' then\n\t\t\tctype = 9\n\t\telseif ttype == '损伤' then\t\n\t\t\tctype = 10\n\t\telseif ttype == '化学' then\n\t\t\tctype = 11\n\t\telseif ttype == '病理' then\n\t\t\tctype = 12\n\t\telseif ttype == '大件' then\n\t\t\tctype = 13\n\t\telseif ttype == '建筑' then\n\t\t\tctype = 14\n\t\telseif ttype == '书报' then\n\t\t\tctype = 15\n\t\telseif ttype == '塑料瓶' then\t\n\t\t\tctype = 16\n\t\telseif ttype == '电子垃圾' then\n\t\t\tctype = 17\n\t\telseif ttype == '干垃圾' then\n\t\t\tctype = 18\n\t\telseif ttype == '湿垃圾' then\n\t\t\tctype = 19\n\t\telseif ttype == '易腐垃圾' then\n\t\t\tctype = 20\n\t\tend\n\t\tbuff=buff..string.format("%02X",ctype)--=桶类型\n\t\tbuff=buff..string.format("%02X",95)\n\t\tbuff=iota.appendHexWord(buff, 5, BE) \n\tend\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)\n\tlog.debug('fs_trash_http response buff %s',buff) \n\n\tlocal response_GpsData_bodyStr = HextoStr(buff)\n\tlog.debug('fs_trash_http response_GpsData_bodyStr %s',response_GpsData_bodyStr) \n asend_HttpResponse(response_GpsData_bodyStr)\n\nend\n\nParseRecord = function(httpbody)\n--投放\n\tlocal ErrorCode = IsValid(sData)\n if ErrorCode then\n\t\t--local moduleNo = device.uplink.props.id --模块\n sData = httpbody.Body\n\t\tlog.debug('fs_trash_http Record sData %s',sData)\n --获取子字符串表\n\t\tlocal raw = Split(sData,',')\n\t\tlocal step = #(raw)\n\t\tfor i = 1,step,1 do\n\t\t\tif tonumber(raw[i]) < 0 then\n\t\t\t\traw[i] = tostring(256 + tonumber(raw[i]))\n\t\t\tend\n\t\tend\t\t\t\t\n\t\tlocal trashtype = tonumber(raw[18])\n\t\tlocal weighthex = string.format("%02X",tonumber(raw[21]))..string.format("%02X",tonumber(raw[22]))\n\n\t\tlocal weight = iota.hexToShort(weighthex,0,'L')\n\t\tlog.debug('fs_trash_http weight %s',tostring(weight))\n\t\t\n\t\tlocal year = tonumber(raw[23]) + 2000\n\t\tlocal month = tonumber(raw[24])\n\t\tlocal day = tonumber(raw[25])\n\t\tlocal hour = tonumber(raw[26])\n\t\tlocal minute = tonumber(raw[27])\n\t\tlocal second = tonumber(raw[28])\n\t\t\n\t\tlocal user = string.format("%02X",tonumber(raw[29]))..string.format("%02X",tonumber(raw[30]))..string.format("%02X",tonumber(raw[31]))..string.format("%02X",tonumber(raw[32]))\n\t\t\t\t\t..string.format("%02X",tonumber(raw[33]))..string.format("%02X",tonumber(raw[34]))..string.format("%02X",tonumber(raw[35]))..string.format("%02X",tonumber(raw[36]))\n\t\t\t\t\t..string.format("%02X",tonumber(raw[37]))..string.format("%02X",tonumber(raw[38]))..string.format("%02X",tonumber(raw[39]))..string.format("%02X",tonumber(raw[40]))\n\t\t\t\t\t..string.format("%02X",tonumber(raw[41]))..string.format("%02X",tonumber(raw[42]))..string.format("%02X",tonumber(raw[43]))..string.format("%02X",tonumber(raw[44]))\n\t\tlocal timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\t\tlocal childDevice = getDeviceInfo(1,1)\n\t\tlocal outdata = {\n\t\t\tdata = {\n\t\t\t\tuser = user,\n\t\t\t\ttrashtype = trashtype,\n\t\t\t\tweight = weight\n\t\t\t},\n\t\t\tdevice = childDevice.id,\n\t\t\ttype = 1,\n\t\t\ttime = os.date("%Y-%m-%dT%H:%M:%S+08:00", timenum)\n\n\t\t}\n\t\ttable.insert(out.data,outdata)\n\t\tlog.debug('fs_trash_http out %s',json.encode(out))\t\t\n\tend\n\tResponde()\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n log.debug("fs_trash_http 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n log.debug("fs_trash_http:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then \n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n\t\t\t\tlog.debug('fs_trash_http 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n else \n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.channelId\n\t\t\t\tlog.debug('fs_trash_http 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n end\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tonumber(channelStrCheck) == tonumber(channelNoId) then\n log.debug('fs_trash_http: m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('fs_trash_http: m=%s c=%s subdevices是nil', moduleNoId, channelNoId)\n return nil\n end\nend\n\nIsValid = function(alldata) --握手校验\n log.debug('fs_trash_http 校验开始')\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n log.debug('fs_trash_http: 校验失败 Data is nil')\n return false\n end\n\n log.debug('fs_trash_http: 校验通过')\n return true\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = string.sub(hex, 2 * i - 1, 2 * i)\n local ascii = string.char(tonumber(bi, 16))\n str = str .. ascii\n end\n return str\nend\n\n -- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n\tlog.debug('fs_trash_http Split')\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend INLINE 2019-10-16 14:53:59.501+08 2020-04-02 15:08:35.897+08 2019-10-16 \N
+2c523c86-9933-490e-9101-55c1156606ab shjy_DAS_BK-ZC08 \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua onData = function()\nend\n\nstart = function()\n log.debug('BK-ZC08 loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n log.debug('BK-ZC08 device=%s', json.encode(device))\n out = {\n type = 2,\n data = {},\n result = {}\n }\n local endian = 'B'\n local buff = ''\n local moduleNo\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = device.uplink.props.module\n --模块通道优先接口获取\n\n log.debug('BK-ZC08设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n else\n moduleNo = device.props.moduleId\n\n log.debug('BK-ZC08设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n end\n buff = buff .. 'F7601269'\n buff = iota.appendHexByte(buff, moduleNo, endian)\n --1:模块号\n buff = buff .. '4010000102030405060708090A0B0C0D0E0F'\n --1:指令:采集\n local wCRCin = 0x0000\n local wCPoly = 0x1021\n local wChar = 0\n local usDataLen = string.len(buff) / 2\n log.debug('BK-ZC08 usDataLen = %s', usDataLen)\n local var = 0\n while usDataLen > 0 do\n var = var + 1\n wChar = string.sub(buff, var, var + 1)\n var = var + 1\n wChar = tonumber(wChar, 16)\n wChar = bit.lshift(wChar, 8) --左移\n wCRCin = bit.bxor(wCRCin, wChar)\n for i = 0, 7 do\n local value = bit.band(wCRCin, 0x8000)\n if value > 0 then\n wCRCin = bit.lshift(wCRCin, 1) --左移\n wCRCin = bit.bxor(wCRCin, wCPoly) --异或\n if wCRCin > 0xFFFF then\n wCRCin = wCRCin - 0x10000\n end\n else\n wCRCin = bit.lshift(wCRCin, 1) --左移\n if wCRCin > 0xFFFF then\n wCRCin = wCRCin - 0x10000\n end\n end\n end\n --log.debug("BK-ZC08 END wCRCin = %X",wCRCin)\n usDataLen = usDataLen - 1\n end\n buff = buff .. string.format('%04X', wCRCin)\n log.debug('BK-ZC08 END buff = %s', buff)\n ctx:asend(buff)\n ctx:sleep(10)\n\tctx:asend(buff)\n ok, resp = ctx:ssend(buff, 15000)\n\n if ok then\n local ErrorCode = IsValidOut(resp)\n if ErrorCode then\n log.debug('BK-ZC08 数据有效=%s', resp)\n allSubData = getAllDatas(resp)\n --发送指令\n local subdevices = device.dnlinks[1].devices\n\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do --插入16个通道\n channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\tif allSubData[channelNo]~=nil and allSubData[channelNo]>500 then\n \tlog.debug('BK-ZC08 解析通道%s数据', channelNo)\n \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n \ttable.insert(out.data, result)\n \tend\n end\n end\n else\n log.debug('BK-ZC08 数据无效=%s', resp)\n out.result = {code = ercode, msg = erormsg}\n end\n else\n log.debug('BK-ZC08 ok=false')\n out.result = {code = '1002', msg = 'ok=false'}\n end\n\n local resultData = json.encode(out)\n log.debug('BK-ZC08 resultData=%s', resultData)\n ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n local DataList = {}\n local subDataArea = string.sub(hexStr, 15, -5)\n local dataCount = string.len(subDataArea) / 10\n for i = 1, dataCount do\n local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 10 + 1, (i - 1) * 10 + 10)\n local channelStr = string.sub(singleChannelDataHex, 2, 2)\n local subChannel = tonumber(channelStr, 16)+1\n local subData = string.sub(singleChannelDataHex, 3, -1)\n DataList[subChannel] = iota.hexToFloat(subData, 0, 'L')\n \tlog.debug('BK-ZC08 getAllDatas DataList[%s]=%s',subChannel,DataList[subChannel])\n end\n return DataList\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n local subData = {\n type = 1,\n data = {},\n device = '',\n result = {}\n }\n local freq = datatable[subChannelId]\n --childDevice = getDeviceInfo(subChannelId, moduleNoStr)\n if childDevice ~= nil then\n if childDevice.uplink.capabilities[1].formula.metaid == 'ac0133f4-cdfd-424a-aae0-598e71b861a6' then --振弦公式\n local k = childDevice.uplink.capabilities[1].formula.props.K\n\n local f0 = childDevice.uplink.capabilities[1].formula.props.F0\n\t\t\n log.debug('BK-ZC08 module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n if k ~= nil and f0 ~= nil then\n Phy = k * (freq ^ 2 - f0 ^ 2)\n end\n end\n log.debug('BK-ZC08 freq=%s,Phy=%s', freq, Phy)\n singleData = {\n data = {\n rawValue = freq,\n physicalvalue = Phy\n },\n device = childDevice.id,\n type = 1\n }\n end\n --end\n\n --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n if device.dnlinks ~= nil then\n for k, dnlink in pairs(device.dnlinks) do\n for v, subdevice in pairs(dnlink.devices) do\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n log.debug('BK-ZC08 has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('BK-ZC08 has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\nIsValidOut = function(checkdata)\n log.debug('BK-ZC08 开始校验数据=%s', checkdata)\n\n local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n if hexHeader ~= 0xF7 then\n ercode = 1001\n erormsg = 'HexCMD False'\n log.debug('BK-ZC08 HexCMDFalse[%s]', hexHeader)\n return false\n end\n return true\n --crc\nend INLINE 2019-04-29 15:46:18.983+08 2019-05-31 17:56:30.305+08 2019-04-29 \N
+0d0ea7fb-6462-43e0-a70c-559a0a3cec40 analyzeTotalConnNum \N 解析tomcat总连接数 1.0.0 e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d f e1821687-1231-4e5c-a374-46d31857056d Lua {} INLINE 2018-01-09 10:38:08.758+08 2018-01-09 10:38:08.758+08 2018-01-09 \N
+ce8ccb17-58ab-4f9d-a15e-ea4a14fb3b36 szwygc_DCH1 \N 1.0 38913139-1273-4b5a-9155-e4aff0fc89ee 38913139-1273-4b5a-9155-e4aff0fc89ee f 38913139-1273-4b5a-9155-e4aff0fc89ee Lua --字符串ascii->字符\nstart=function()\n --log.debug("szwygc_DCH1: start module %s, ", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n --log.debug("szwygc_DCH1: Data=%s",hex)\n\t--全局\n out={\n data ={},\n result = {},\n\t\ttype=2\n }\n\n local sData= HextoStr(hex)\n log.debug("szwygc_DCH1: sData=%s",sData)\n local spliteData = Split(sData,';')\n\tlocal moduleData = Split(spliteData[3],':') \n\n\tlocal moduleNo = moduleData[2]--模块号\n\n\tlocal spliteData1 = Split(sData,'START;')\n local spliteData2 = Split(spliteData1[2],';END')\n\t\n local spliteData3 = Split(spliteData2[1],';')\n\t \n\n\t \n\tlog.debug("szwygc_DCH1: spliteData3=%s",json.encode(spliteData3))\n\t--local type_sensorL=Split(spliteData3[1],':')\n\t \n\t--local type_sensor=type_sensorL[2]\n\tlocal allDataL=Split(spliteData3[2],':')\n \n\n\tlocal dateTimeStrl=Split(spliteData3[3],':')\n\tlocal dateTimeStr=dateTimeStrl[2]\n\tlocal timenow = timeTounixtimestamp(dateTimeStr)\n\tlocal asd=string.find(allDataL[2],',')\n\tif asd==nil then\n\t local allDatas=Split(allDataL[2],'_')\n\t local childDevice = getDeviceInfos(moduleNo,1)\t\n log.debug('szwygc_DCH1 childDevice=%s',json.encode(childDevice))\n\t\tif\tchildDevice~=nil then\n\t\t\tdeviceId=childDevice.id\n\t\t\t \n\t\t\t\n\t\t\t\tlocal data1 = {\n\t\t\t\t\tdata={\n\t\t\t\t\t\tlength\t=allDatas[2],\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=timenow\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t--log.debug("szwygc_DCH1:(振弦) out=%s",json.encode(out))\n\t\telse\n\t\t\t\t--log.debug('szwygc_DCH1 子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\tend\n\telse\n\t local allData=Split(allDataL[2],',')\n\t\tfor k, v in pairs(allData) do\n\t\tlog.debug("szwygc_DCH1: k=%s,v=%s",k,v)\n\t\tlocal Phy\n\t\tlocal allDatas=Split(v,'_')\n\t\t\n\t\tlocal arrlength=table.getn(allDatas)\t\n\t\t--if arrlength==2 then\n\t\tlocal childDevice = getDeviceInfos(moduleNo,k)\t\n log.debug('szwygc_DCH1 childDevice=%s',json.encode(childDevice)) \n\n\t\t\tif\tchildDevice~=nil then\n\t\t\t\tdeviceId=childDevice.id\n\t\t\t \n\t\t\t\n\t\t\t\tlocal data1 = {\n\t\t\t\t\tdata={\n\t\t\t\t\t\tlength\t=allDatas[2],\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=timenow\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t--log.debug("szwygc_DCH1:(振弦) out=%s",json.encode(out))\n\t\t\telse\n\t\t\t\t--log.debug('szwygc_DCH1 子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\t\tend\n\t\t--end\n\t\t \n\t\tend \n\tend\n\t\n\n\n local resultData =json.encode(out) --输出传递到平台上\n log.debug("szwygc_DCH1: result=%s",json.encode(out))\n ctx:notify(resultData)\n\t\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n--string split函数 分割相应的字符\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(channelStrCheck) == tonumber(channelNoId) then\n return child\n\t\t\tend\n \t\n\t\tend\n else\n log.debug("szwygc_DCH1: subdevices是nil")\n return nil\n end\nend\n\ntimeTounixtimestamp=function(dateTimeStr)\n\tlog.debug("szwygc_DCH1 进入时间解析")\n\tlocal year_a=string.sub(dateTimeStr,1,4)\n log.debug("szwygc_DCH1 year_a是:%s",year_a)\n\tlocal month_a=string.sub(dateTimeStr,5,6)\n\t\n\tlocal day_a=string.sub(dateTimeStr,7,8)\n\n\tlocal hour_a=string.sub(dateTimeStr,9,10)\n\n\tlocal minute_a=string.sub(dateTimeStr,11,12)\n\t\n\tlocal second_a=string.sub(dateTimeStr,13,14)\n\n \n\n local year = tonumber(year_a)\n\tlog.debug("szwygc_DCH1 year是:%s",year)\n\tlocal month = tonumber(month_a)\n\tlog.debug("szwygc_DCH1 month是:%s",month)\n local day = tonumber(day_a)\n\tlog.debug("szwygc_DCH1 day是:%s",day)\n local hour = tonumber(hour_a)\n\tlog.debug("szwygc_DCH1 hour是:%s",hour)\n\tlocal minute = tonumber(minute_a)\n\tlog.debug("szwygc_DCH1 minute是:%s",minute)\n local second = tonumber(second_a)\n\tlog.debug("szwygc_DCH1 second是:%s",second)\n \n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second})\n\tlocal recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n\tlog.debug("szwygc_DCH1 recordTime是:%s",recordTime)\n\treturn recordTime\nend INLINE 2020-06-12 13:40:15.96+08 2020-06-15 13:50:02.529+08 2020-06-12 \N
+f617f353-687a-436b-a571-5a4af04eb61a Test双轴倾角传感器 \N 1.0 0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273 0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273 f 0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273 Lua --//20200901 双轴倾角传感器.pdf\nstart=function()\n \tlocal endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 3, endian) -- 1: 功能码\n buff=iota.appendHexWord(buff, 4 ,endian) -- 2: 数据地址\n buff=iota.appendHexWord(buff, 6 ,endian) --2:数据长度\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n log.debug(string.format("fs_trwsd_1166 out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n ctx:done(result)\nend\n\n\n--02030400ef0087b8a4\n--"X": 13.5,\n--"Y": 23.9\n\n--01 03 0C 00 00 60 40 33 33 A3 C1 9A 99 B2 42 CE 2B\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \tlocal Xtemp= iota.hexToFloat(hex,3,'L')\n local Ytemp = iota.hexToFloat(hex,7,'L')\n \n out.data = {\n X = Xtemp,\n Y = Ytemp\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('fs_trwsd_1166 开始校验数据 %s',data)\n if data == nil or string.len(data)/2~=17 then\n errormsg = string.gormat('Data is nil or invalid length=[%s]',string.len(data))\n errcode = 1002\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleNo_check) ~= tonumber(string.sub(data,1,2)) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('fs_trwsd_1166 数据校验通过')\n return true\n--crc\nend\n\nonData=function()\nend\n INLINE 2020-09-01 14:23:25.297+08 2020-09-02 16:19:54.329+08 2020-09-01 \N
+9280880b-8a43-4904-8993-ed0176d23888 nawei_temp_1 \N 温度协议 1.0 a8f32e64-9094-49d3-9da0-9a5abd4dd33d a8f32e64-9094-49d3-9da0-9a5abd4dd33d f a8f32e64-9094-49d3-9da0-9a5abd4dd33d Lua start=function()\n\tlog.debug("load script %s, moduleId=%s", "nawei_temp_1", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t--01 04 00 01 00 02 f1 c9\n\tlocal moduleNo=device.uplink.props.module \t\t\n\tlog.debug("nawei_temp_1 设备模块通道 接口获取 m=%s ",moduleNo)\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) \n log.debug("nawei_temp_1 send data: %s ",buff) \n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n else\n log.debug("nawei_temp_1 SSend error!")\n end\n ctx:done(result)\nend\n\n--01 04 04 41 C8 00 00 7D EA\n--moduleId=1 \n--"temperature": 25\n\nunmarshall=function(hex)\n log.debug("nawei_temp_1 recieve data: %s ",hex) \n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then \n local temperature = iota.hexToFloat(hex,3,'B') \n out.data = {\n temperature=temperature\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data)\n log.debug('nawei_temp_1 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x04 then\n errcode = 1001\n errormsg = 'nawei_temp_1 Hex CMD False ' \n return false\n end\n if device.uplink.props.module ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n local crcData=string.sub(data,1,-5)\n crcData=iota.appendHexCrc(crcData, 'L' ,0)\n --if icrcData ~= data then\n --errcode = 1001\n --errormsg = 'nawei_temp_1 crc False' \n --return false\n --end\n log.debug('nawei_temp_1 数据校验通过')\n return true\nend\n\n\n\t\n \n\n INLINE 2018-07-02 10:14:04.852+08 2018-07-02 14:30:55.524+08 2018-07-02 \N
+df33dca6-7c97-4dd6-a1e1-09b2a98ba5f8 rion_inclination_1 \N SCA126V 1.0 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 f 85ba98a3-b552-4bcf-a736-30b525492481 Lua bit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n\nstart=function()\n log.debug("start %s, ctx=%s", "rion_inclination_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0x68, endian)\n buff=iota.appendHexByte(buff, 4, endian) \n\n local moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("rion_inclination_1 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("rion_inclination_1 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号 \n buff=iota.appendHexByte(buff, 4, endian) -- 2: 指令: 0x04 = 采集\n buff=iota.appendHexByte(buff,CS(1,buff),endian)\n\n log.debug("rion_inclination_1 m=%s ssend=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo) \n end\n ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n\n --680D0084002010100525000000FB moduleId=0\n --"angleX": 2.01,\n\t--"angleY": 11,\n\n\n log.debug("rion_inclination_1 m=%s received=%s",moduleStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==28) then \n\n local IDX_XDATA = 4 \n local IDX_YDATA = 7 \n local IDX_Temp = 10 \n\n local xFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA,'B') , 0xF0) , 4)\n local xSecondNum = bit:_and(iota.hexToByte(hex,IDX_XDATA,'B') , 0x0f) * 10\n local xThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_XDATA + 1,'B') , 0x0F) * 0.1\n local xForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_XDATA + 2,'B') , 0x0F) * 0.001\n\n local yFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA,'B') , 0xF0) , 4)\n local ySecondNum = bit:_and(iota.hexToByte(hex,IDX_YDATA,'B') , 0x0f) * 10\n local yThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_YDATA + 1,'B') , 0x0F) * 0.1\n local yForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_YDATA + 2,'B') , 0x0F) * 0.001\n\n local angleX = xSecondNum + xThirdNum + xForthNum\n local angleY = ySecondNum + yThirdNum + yForthNum\n\n if (xFirst == 0x01) then \n angleX = -angleX\n end\n\n if (yFirst == 0x01) then\n angleY = -angleY\n end\n\n if (tFirst == 0x01) then\n temp = -temp\n end\n \n out.data = {\n anglex=angleX*10,\n angley=angleY*10\n }\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("recv %s, ctx=%s", "rion_inclination_1.lua",json.encode(out))\n return json.encode(out)\nend\n\nCS=function(start,buff)\n local lcr = 0\n for i = start, string.len(buff)/2-1 do\n lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n end \n local value= bit:_and(lcr,0xff) \n return value\nend \n\n \n\n\n \n\n INLINE 2018-01-18 15:10:52.202+08 2018-03-29 11:02:13.937+08 2018-01-18 \N
+1b43757a-ca0b-4ac4-9f69-c44fe9d59bc8 te \N 1 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f f 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f Lua 1 INLINE 2018-08-09 08:29:30.1+08 2019-12-06 18:00:55.542+08 2018-08-09 \N
+93c70807-ebbf-4b88-b0b9-0232cca98b69 dl_weight_9802 \N 江西飞尚科技大连称重协议 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n \n\nstart=function()\n log.debug("start %s", "fs_weight_9803.lua")\n\tok=ctx:asend("01020304")\nend\n\n\nonData=function(hex)\n local out={\n data ={},\n result = {}\n }\n\tlog.debug("dl_weight_9802 收到数据 hex=%s ",hex)\n local IDX_Start = 0 -- 起始指令\n local IDX_CMD = 1; -- 命令字 \n local IDX_DataLen = 2; -- 数据长度\n local IDX_MoudleID = 10; -- 模块号\n local IDX_RoadNo = 34; -- 模块号\n local IDX_licence = 35; -- 车牌号\n local IDX_axeisCount = 45; -- 轴数\n local IDX_GrWeight =46; -- 总重\n local IDX_LimitWeight = 55; -- 总重限重\n local IDX_UpWeight = 57; -- 超重\n local IDX_AxieWeight1 = 59; -- 轴一重量\n local IDX_AxieWeight2 = 61; -- 轴二重量\n local IDX_AxieWeight3 = 63; -- 轴三重量\n local IDX_AxieWeight4 = 65; -- 轴四重量\n local IDX_AxieWeight5 = 67; -- 轴五重量\n local IDX_AxieWeight6 = 69; -- 轴六重量\n local IDX_AxieWeight7 = 71; -- 轴七重量\n local IDX_AxieWeight8 = 73; -- 轴八重量\n local IDX_Speed = 75;--车速\n local IDX_TotalBase = 97; -- 总轴距\n local IDX_Cardirection = 107; -- 方向\n local IDX_CarModle = 108; -- 车类型\n local IDX_Carlength = 99; -- 车长\n local IDX_CarRoadTemp = 111; -- 路面温度\n local IDX_CarPrefTemp = 150; -- 温度标志\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local axisnums = string.sub(hex,2*IDX_axeisCount+1,2*(IDX_axeisCount+1))\n local axisnum = tonumber(axisnums,16)--轴数\n\t\t--log.debug("dl_weight_9802 axisnum=%s ",axisnum)\n local grossweight=iota.hexToShort(hex,IDX_GrWeight,'B')\n local speed = iota.hexToByte(hex,IDX_Speed,'B')--车速\n local totalbase = iota.hexToShort(hex,IDX_TotalBase,'B')--总轴距\n local carmodel = iota.hexToShort(hex,IDX_CarModle,'B') --车型号\n\t\t--log.debug("dl_weight_9802 speed=%s totalbase=%s,carmodel=%s",speed,totalbase,carmodel)\n if carmodel == 2 then \n carmodel = 3\n elseif carmodel == 3 then\n carmodel = 2\n end\n\n local direction = iota.hexToByte(hex,IDX_Cardirection,'B')--行驶方向\n local axieWeight1 = iota.hexToShort(hex,IDX_AxieWeight1,'B')\n local axieWeight2 = iota.hexToShort(hex,IDX_AxieWeight2,'B')\n local axieWeight3 = iota.hexToShort(hex,IDX_AxieWeight3,'B')\n local axieWeight4 = iota.hexToShort(hex,IDX_AxieWeight4,'B')\n local axieWeight5 = iota.hexToShort(hex,IDX_AxieWeight5,'B')\n local axieWeight6 = iota.hexToShort(hex,IDX_AxieWeight6,'B')\n local axieWeight7 = iota.hexToShort(hex,IDX_AxieWeight7,'B')\n local axieWeight8 = iota.hexToShort(hex,IDX_AxieWeight8,'B')\n \n local axieWeight9 = 0\n \n local axieWeight10 = 0\n\n local cmslength = iota.hexToShort(hex,IDX_Carlength,'B')--车长\n local licence = unicode2gb2312(string.sub(hex,2*(IDX_licence)+1,2*(IDX_licence+2)))..toStrHex(string.sub(hex,2*(IDX_licence+2)+1,2*(IDX_licence+8)))..unicode2gb2312(string.sub(hex,2*(IDX_licence+8)+1,2*(IDX_licence+10)))\n\n local temperature = iota.hexToByte(hex,IDX_CarRoadTemp,'B')\n local temppref = iota.hexToByte(hex,IDX_CarPrefTemp,'B')\n local temp = 0\n if temppref > 0 then \n if temperature ~= 0 then \n temp = temperature * -1\n else\n temp = 0\n end\n else\n temp = temperature\n end\n \n local width = nil\n local height =nil\n local crossroad = nil\n local serialnum = nil\n\n local limttotalweight = iota.hexToShort(hex,IDX_LimitWeight,'B')\n local LimitWeight = iota.hexToShort(hex,IDX_UpWeight,'B')\n\t\tlog.debug("dl_weight_9802 grossweight=%s,LimitWeight=%s,",grossweight,LimitWeight)\n local over = nil\n if grossweight > LimitWeight then \n over = "1"\n else \n over = "0"\n end\n local moduleno = toStrHex(string.sub(hex,7,38)) \n local channel = iota.hexToByte(hex,IDX_RoadNo,'B') --车道号\n moduleno = moduleno + tostring(channel)\n\t\tlog.debug("dl_weight_9802 moduleno=%s,channel=%s" ,moduleno,channel)\n out.data = { --需要测试\n grossWeight = tostring(grossweight),\n speed = tostring(speed),\n axisnum = tostring(axisnum),\n totalBase = tostring(totalbase),\n carType = tostring(carmodel),\n direction = tostring(direction),\n cmsLength = tostring(cmslength),\n licence = tostring(licence),\n axieWeight = json.encode({axieWeight1,\n axieWeight2,\n axieWeight3,\n axieWeight4,\n axieWeight5,\n axieWeight6,\n axieWeight7,\n axieWeight8,\n axieWeight9,\n axieWeight10}),\n temp = tostring(temp),\n width = tostring(width),\n height = tostring(height),\n crossRoad = tostring(crossroad),\n serialNum = tostring(serialnum),\n limitWeight =tostring(LimitWeight),\n limtTotalWeight = tostring(limttotalweight),\n overload = tostring(over),\n \t\tlane = channel\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n\tlog.debug("dl_weight_9802 校验数据%s",data)\n if iota.hexToByte(data,2,'B') ~= 0x99 then\n errormsg = 'weight buffer length is not enough.'\n errcode = 1001\n return false\n end\n\tlog.debug("dl_weight_9802 数据校验通过")\n return true\nend\n\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\nfunction unicode2gb2312(src)\n\tlocal map_tb={["冀"] = "BCBD",["豫"] = "D4A5",["云"] = "D4C6",["辽"] = "C1C9",["黑"] = "BADA",["湘"] = "CFE6",["皖"] = "CDEE",\n ["鲁"] = "C2B3",["新"] = "D0C2",["苏"] = "CBD5",["浙"] = "D5E3",["赣"] = "B8D3",["鄂"] = "B6F5",["桂"] = "B9F0", \n ["甘"] = "B8CA",["晋"] = "BDFA",["蒙"] = "C3C9",["陕"] = "C9C2",["吉"] = "BCAA",["闽"] = "C3F6",["贵"] = "B9F3", \n ["粤"] = "D4C1",["青"] = "C7E0",["藏"] = "B2D8",["川"] = "B4A8",["宁"] = "C4FE",["琼"] = "C7ED",["渝"] = "D3E5", \n ["京"] = "BEA9",["津"] = "BDF2",["沪"] = "BBA6",["深"] = "C9EE",["学"] = "D1A7" }\t\n\tfor k,v in pairs(map_tb) do\n if v == string.format("%X",tonumber(src,16)) then\n return k\n end\n end\n return " "\nend\n INLINE 2017-09-25 20:27:59.78+08 2018-07-05 17:08:00.498+08 2017-09-25 \N
+cfb93ff0-1f09-49fb-98a7-71bcc7116084 br_waterLevel_1902 \N 西安北瑞三元雷达式水位协议 1.0 467605c5-28cc-4c6b-ab24-05578bcf5197 467605c5-28cc-4c6b-ab24-05578bcf5197 f 467605c5-28cc-4c6b-ab24-05578bcf5197 Lua \nstart=function()\n log.debug("start %s, ctx=", "br_waterLevel_1902.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId need rewrite'}\n ctx:done(json.encode(errout))\n else\n\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n end\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- 01030400000b6f3DD4 moduleId=1\n --"waterLevel": 29.27\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\n local level = iota.hexToShort(hex,5,'B') / 100.0\n out.data = {\n waterLevel = level\n }\n\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = 'CMD is not right'\n errcode = 1001\n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2017-09-14 11:59:55.863+08 2018-02-28 18:32:12.19+08 2017-09-14 \N
+ed3bd325-ddc9-45f1-becc-616d8d57d528 bw_Inclination_1546 \N 无锡北微双轴倾角仪Inclination_BWK226_1546 1.0 684052b5-3f7b-4e98-a4bd-2982f7d94203 684052b5-3f7b-4e98-a4bd-2982f7d94203 f 684052b5-3f7b-4e98-a4bd-2982f7d94203 Lua --//04 项目资料/2017-06/无锡北微传感器资料/BWK226技术手册.pdf\n--[[\n协议号: 1546;\n协议名: modbus 数据采集仪.\n]]\n--位操作\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\n--或\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n--与\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\n--右移\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\n--左移\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\n--\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "bw_Inclination_1546.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\n\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n\t-- 7704000408\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0x77, BE); -- 1: 帧头\n\tbuff=iota.appendHexByte(buff, 0x04, BE);\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE); -- 2: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x04, BE);\n\tlocal chenckSum=SumCR(string.sub(buff,3,-1)); --checkSum\n log.debug("chenckSum等于:%s",chenckSum);--测试用\n buff=buff..chenckSum;\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 770D008410268000336503137166 \n--原始数据 x=-26.8 x=33.65 moduleId=0\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\t\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n\t\tout.result = {code=errcode,msg=errmessage}\n\t\tout.data = {}\n\telse\n\t\tlocal IDX_XDATA = 4;\n\t\tlocal IDX_YDATA = 7;\n\t\t\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算XDATA原始值\n\t\tlocal xFirstNum = iota.hexToByte(data,IDX_XDATA,'B');\n\t\tlocal sx=bit:_rshift(xFirstNum,4);--标志位+ or -\n\t\tlocal xSecondNum = bit:_and(iota.hexToByte(data,IDX_XDATA,'B'),15);-- 0xF0==240 0x0F==15\n\t\tlocal X100=xSecondNum*100;\n\t\t\n\t\tlocal X10=bit:_rshift(iota.hexToByte(data,IDX_XDATA+1,'B'),4)*10\n\t\tlocal X1=bit:_and(iota.hexToByte(data,IDX_XDATA+1,'B'),15);\n\t\t\n\t\tlocal X01=bit:_rshift(iota.hexToByte(data,IDX_XDATA+2,'B'),4)*0.1\n\t\tlocal X001=bit:_and(iota.hexToByte(data,IDX_XDATA+2,'B'),15)*0.01;\n\t\tlocal angleX = X100 + X10+X1+ X01+X001;\n\t\tif sx==1 then\n\t\t\tangleX=-angleX;\n\t\tend\n\t\t\n\t\t--计算YDATA原始值\n\t\tlocal yFirstNum = iota.hexToByte(data,IDX_YDATA,'B');\n\t\tlocal sy=bit:_rshift(yFirstNum,4);--标志位+ or -\n\t\tlocal ySecondNum = bit:_and(iota.hexToByte(data,IDX_YDATA,'B'),15);-- 0xF0==240 0x0F==15\n\t\tlocal Y100=ySecondNum*100;\n\t\t\n\t\tlocal Y10=bit:_rshift(iota.hexToByte(data,IDX_YDATA+1,'B'),4)*10\n\t\tlocal Y1=bit:_and(iota.hexToByte(data,IDX_YDATA+1,'B'),15);\n\t\t\n\t\tlocal Y01=bit:_rshift(iota.hexToByte(data,IDX_YDATA+2,'B'),4)*0.1\n\t\tlocal Y001=bit:_and(iota.hexToByte(data,IDX_YDATA+2,'B'),15)*0.01;\n\t\tlocal angleY = Y100 + Y10+Y1+ Y01+Y001;\n\t\tif sy==1 then\n\t\t\tangleY=-angleY;\n\t\tend\n\t\t\n\t\tout.data = {\n\t\tangleX=angleX,\n\t\tangleY=angleY\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\n\nfunction IsValid(data)\n\tif string.len(data)/2 ~=14 then\n\t\terrmessage = 'Invalid Msg, len='\n\t\treturn true\n\telse\n\t\tlocal startbyte_0 = iota.hexToByte(data, 0,'B');\n\t\tlocal startbyte_3 = iota.hexToByte(data, 3,'B');\n\t\t\n\t\tif startbyte_0 ~= 0x77 or startbyte_3 ~= 0x84 then\n\t\t\tlog.debug("帧头或命令错误")\n\t\t\terrmessage = 'Invalid Msg'\n errcode=1001\n\t\t\treturn true\n\t\tend\n\tend\n \n if iota.hexToByte(data,2,'B') ~= tonumber(device.props.moduleId) then\n errmessage = 'Invalid moduleId' \n errcode=1004\n return true\n end\n \n \tlog.debug("数据正确")\n\treturn false\n\t\nend\n\n\nSumCR=function(buff)\n local scr = 0\n for i = 0, string.len(buff)/2-1 do\n scr = scr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)\n log.debug(string.format('scr=: %s', scr));\n end \n local value= string.format("%02x",scr)\n return value\nend INLINE 2017-09-07 20:21:46.74+08 2018-02-28 18:32:12.192+08 2017-09-03 \N
+80768b00-fc5e-4846-bcc6-6cdd0e2ec227 fullkon_flow_1 \N 1.0 8877092c-862c-4569-a8b7-b125dea3214f 8877092c-862c-4569-a8b7-b125dea3214f f 8877092c-862c-4569-a8b7-b125dea3214f Lua --//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "fullkon_flow_1", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t--01 04 10 10 00 16 74 C1\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fullkon_flow_1 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x10, endian) \n buff=iota.appendHexByte(buff, 0x10, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x16, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("fullkon_flow_1 SSend error!")\n end\n ctx:done(result)\nend\n\n--01 03 04 BE 40 E6 12 15 A2\n--moduleId=1 \n--"humidity": 2.5,\n--"temp": 3.7\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local flowrate = iota.hexToFloat(hex,3,'B')\n local flowsvelocity = iota.hexToFloat(hex,7,'B')\n local positiveflow = iota.hexToInt(hex,19,'B')+iota.hexToFloat(hex,23,'B')\n local reverseflow = iota.hexToInt(hex,27,'B')+iota.hexToFloat(hex,31,'B')\n\n \n out.data = {\n flowrate=flowrate,\n flowsvelocity=flowsvelocity,\n positiveflow=positiveflow,\n reverseflow=reverseflow\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('fullkon_flow_1 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 49 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x04 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('fullkon_flow_1 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2018-06-28 15:34:50.53+08 2018-06-28 16:59:24.689+08 2018-06-28 \N
+9371fe71-c7ed-4957-b430-606c12203969 laser_carspeed \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n 函数:\n ssend: 同步发送数据到设备\n asend: 异步发送数据到设备\n notify: 通知平台解析完成的数据\n done: 采集完成, 结束当前采集过程.\n]] \nstart=function()\n log.debug("laser_carspeed:start %s", "lora.lua")\nend\n\n-- 收到数据\nonData=function(data,pindex)\n log.debug("laser_carspeed:onData %s",data)\n \tlocal out={\n\t\tdata ={\n\t\t},\n\t\tresult = {}\n\t }\n local len=string.len(data)\n\tif len ~= 10 then \n\t\tout.result = {\n\t\t\tcode=1001,\n\t\t\tmsg = "data length is not right"\n\t\t}\n\t\t\n\telse\n\t\tlocal direction = ""\n\t\tif string.sub(data,3,3)==1 then\n\t\t\tdirection = "上行"\n\t\telse \n\t\t\tdirection = "下行"\n\t\tend\n\n\t\tlocal roadno = tonumber(string.sub(data,4,4))+1\n\t\tlocal speed = iota.hexToByte(data,2,'B')\n\t\tout.data = {\n\t\t\t\tdirection = direction,\n\t\t\t\troadno = roadno,\n\t\t\t\tspeed = speed\n\t\t}\n\tend\n log.debug("laser_carspeed:Parsed:%s",msg)\n ctx:notify(msg)\nend INLINE 2018-12-15 10:41:35.745+08 2018-12-15 10:41:35.745+08 2018-12-15 \N
+485f00b2-c992-4eb3-8d4a-0c8d2dd07a30 Asmik_Phn_4600 \N 1.0 db720076-c60b-454c-9066-38f2b9c84634 db720076-c60b-454c-9066-38f2b9c84634 f db720076-c60b-454c-9066-38f2b9c84634 Lua --//02 协议分析/2017-04/优先接入/彩色无纸记录仪\nstart =\n function()\n log.debug('load script %s, moduleId=%s', 'Asmik_Phn_4600', device.props.moduleId or '[nil]')\n local endian = 'B'\n local buff = ''\n local errout = {\n data = {},\n result = {},\n type = 2\n }\n\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n if tonumber(moduleNo) > 255 or tonumber(moduleNo) < 1 then\n errout.result = {code = 1004, msg = '模块号无效,模块号 >= 255 or < 1'}\n else\n buff = iota.appendHexByte(buff, moduleNo, endian)\n buff = iota.appendHexByte(buff, 0x04, endian)\n buff = iota.appendHexByte(buff, 0x00, endian)\n buff = iota.appendHexByte(buff, 0x00, endian)\n buff = iota.appendHexByte(buff, 0x00, endian)\n buff = iota.appendHexByte(buff, 120, endian)\n buff = iota.appendHexCrc(buff, 'L', 0) -- 2: CRC16\n local ok, resp = ctx:ssend(buff, 18000)\n local result = '{}'\n if ok then\n result = unmarshall(resp, moduleNo)\n ctx:done(result)\n else\n errout.result = {code = 1004, msg = '采集超时'}\n ctx:done(json.encode(errout))\n end\n end\nend\n--01041203979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942775647\n--moduleId=1\n--channelId=1\n--"liquidLevel": 61.806126\n\nunmarshall =\n function(hex, moduleNoStr)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local ErrorCode = IsValid(hex,moduleNoStr)\n local pressures = {}\n if ErrorCode then\n for i = 1, 60 do\n local sub_hex = string.sub(hex, 7 + (i-1) * 8, 14 + (i-1) * 8)\n sub_hex_BE = string.sub(sub_hex, -4, -1) .. string.sub(sub_hex, 1, 4)\n local pressure = iota.hexToFloat(sub_hex_BE, 0, 'B')\n pressures[i] = pressure\n -- log.debug("Asmik_Phn_4600 i=%s,pressures[%s]=%s,sub_hex_BE=%s",i,i,pressures[i],sub_hex_BE)\n end\n\n --遍历设备\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n if device.dnlinks[1].devices ~= nil then\n --log.debug("http_test 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n log.debug('Asmik_Phn_4600 [%s] child=%s', moduleNoStr, json.encode(child))\n local deviceId = child.id\n local subChannel = tonumber(child.uplink.props.channel)\n --判断设备类型\n\n pressure = pressures[subChannel]\n\t\t\t\tlog.debug('Asmik_Phn_4600 deviceId=%s ,subChannel=%s[type=%s] ,pressure=%s',deviceId,subChannel,type(subChannel),pressure)\n local subData = {\n data = {\n pressure = pressure\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, subData)\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n\nIsValid = function(data,moduleNoStrCheck)\n if data == nil or string.len(data) / 2 ~= 5 + 4 * 60 then\n errormsg = '数据长度错误'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data, 1, 'B') ~= 0x04 then\n errormsg = '返回命令码≠0x04'\n errcode = 1002\n return false\n end\n if moduleNoStrCheck ~= tostring(iota.hexToByte(data, 0, 'B')) then\n errormsg = '模块号错误'\n errcode = 1003\n return false\n end\n return true\nend INLINE 2018-11-20 15:37:40.841+08 2018-11-20 15:37:40.841+08 2018-11-20 \N
+a83e3f95-d82b-4cc6-9d57-704bc5e09ad1 Mictest_9029 \N 1.0 ddbc4ad1-b448-4bed-82b8-f33fb5264f35 ddbc4ad1-b448-4bed-82b8-f33fb5264f35 f ddbc4ad1-b448-4bed-82b8-f33fb5264f35 Lua -- INLINE 2018-04-04 16:47:45.27+08 2018-04-04 16:49:04.018+08 2018-04-04 \N
+3121ae46-41f3-451f-9995-208f16460648 ES10 \N 气体监测,智慧应用 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n协议号: 1.0;\n协议名: ES10\n]]--liankang\nstart=function ()\n log.debug("ES10 start %s, ctx=%s",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("ES10 encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("ES10 decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE); -- 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x03, BE); -- 功能码 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE); \n buff=iota.appendHexByte(buff, 0x00, BE); -- 读取寄存器起始地址 00 00\n\tbuff=iota.appendHexByte(buff, 0x00, BE); \n\tbuff=iota.appendHexByte(buff, 0x05, BE); -- 读取寄存器数量 5\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- CRC16 小端字节序\t\n\treturn buff\nend\n\n-- decode \n-- returns: 结果, 直线位移\n-- 正确回复 01031A 0900 0014 0012 0011 0011 0000 0000 0000 0000 0000 0000 0000 0000 CC CC\n-- 01031A0900001400120011001100000000000000000000000000000000CCCC\n\n-- 原始数据\nfunction protocol_decode(da)\n\t\n\t-- 存储结果\n\tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n \n -- 判断数据有效性\n if inValid(da) then\n local message = 'Invalid Msg,'\n out.result = {code=5001,msg=message}\n out.data = {}\n else\n log.debug("数据有效")\n \n local data = string.sub( da, 7, -5);\n log.debug("ES10 data ==>"..data)\n log.debug("ES10 dataLength ==>"..json.encode(string.len(data)))\n\n -- 获取告警后的所有数值\n local valueTab = {}\n for i = 0, 8, 2 do\n -- log.debug("ES10 value value ==>"..json.encode(i)..",,,, "..json.encode(iota.hexToFloat(data, i, 'B')))\n table.insert(valueTab, iota.hexToUShort(data, i, 'B'))\n end\n log.debug("ES10 valueTab"..json.encode(valueTab))\n log.debug("ES10 valueTab==>"..json.encode(table.concat( valueTab, ", ")))\n\n local unitNameTab = {\n "ppm",\n "LEL",\n "VOL",\n "mg/m3",\n }\n local firstRegister = valueTab[1]\n -- local unitNameIndex = bit:_rshift(bit:_and(firstRegister, 0XE000), 13) + 1\n -- local unitName = unitNameTab[unitNameIndex]\n\n local decimalNum = bit:_rshift(bit:_and(firstRegister, 0X1C00), 10)\n log.debug("ES10 decimalNum ==>"..json.encode(decimalNum))\n \n -- local alarmRangeTab = {\n -- "正常无报警",\n -- "一级报警",\n -- "二级报警",\n -- "故障",\n -- }\n -- local alarmRangeIndex = bit:_rshift(bit:_and(firstRegister, 0X0180), 8) + 1\n -- local alarmRange = alarmRangeTab[alarmRangeIndex]\n\n\n local gasConcentration = bit:_or(bit:_lshift(bit:_and(firstRegister, 0X0040), 10), valueTab[2]) / math.pow(10, decimalNum)\n -- local primaryAlarmLimit = bit:_or(bit:_lshift(bit:_and(firstRegister, 0X0010), 12), valueTab[3]) / math.pow(10, decimalNum)\n -- local secondaryAlarmLimit = bit:_or(bit:_lshift(bit:_and(firstRegister, 0X0004), 14), valueTab[4]) / math.pow(10, decimalNum)\n -- local fullRange = bit:_or(bit:_lshift(bit:_and(firstRegister, 0X0001), 16), valueTab[5]) / math.pow(10, decimalNum)\n\n\n out.data = {\n -- unitName = unitName,\n -- alarmRange = alarmRange,\n gasConcentration = gasConcentration,\n -- primaryAlarmLimit = primaryAlarmLimit,\n -- secondaryAlarmLimit = secondaryAlarmLimit,\n -- fullRange = fullRange,\n };\n end\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 15 or iota.hexToByte(data, 1,'B') ~= 0x03 then -- 长度不等于15 或者 读第二个字节,功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n\n--bit 操作\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\nend --bit:_and\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n\n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift INLINE 2020-01-08 15:24:43.999+08 2020-01-14 15:54:35.651+08 2020-01-08 \N
+f99629fd-ce63-49a7-ba9b-f554f569bb4b fire-obd \N v1.2 c1741e71-3a53-4591-9d4e-e0d626ccd022 c1741e71-3a53-4591-9d4e-e0d626ccd022 f c1741e71-3a53-4591-9d4e-e0d626ccd022 Lua function ChangePos(sockRawData )\n local operation = CParse( sockRawData, "i:operation" )\n if operation == 1 then --删除物品\n local deleteItemID = CParse( sockRawData, "i:itemid" )\n ... delete item \n elseif operation == 2 then --交换位置\n local firstItemID, secondItemID = CParse( sockRawData, "i:first|i:second" )\n ... change firstItemID and secondItemID\n else ...\n ...\n end\n\nend INLINE 2018-01-03 23:03:43.697+08 2018-01-03 23:03:43.697+08 2018-01-03 \N
+15f78bc6-396c-4b7b-ba7c-2fcc9e9a924f supmea_pressure_1 \N 杭州美仪自动化有限公司 1.0 7e6cf67e-f12a-4d9f-addf-b551148dc2b4 7e6cf67e-f12a-4d9f-addf-b551148dc2b4 f 7e6cf67e-f12a-4d9f-addf-b551148dc2b4 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "supmea_pressure_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n \n \tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("supmea_pressure_1 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("supmea_pressure_1 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n \n buff=iota.appendHexByte(buff, moduleNo, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 4, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 1, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n --:01 03 00 04 00 01 C5 CB\n -- print("ssend=", ctx:ssend(buff,500) )\n log.debug("send %s, ctx=%s", "supmea_pressure_1.lua",buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n log.debug("recv %s, ctx=%s", "supmea_pressure_1.lua",hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==14) then\n \n --0103021388B512 \n --"pressure": 5000\n local pressure =iota.hexToShort(hex,3,'B');\n \n out.data = {\n \n pressure=pressure,\n \n };\n else\n local message = "Invalid Msg, len is not rigth"\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("recv %s, ctx=%s", "supmea_pressure_1.lua",json.encode(out))\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2018-01-03 16:13:25.117+08 2018-03-30 08:26:37.578+08 2018-01-03 \N
+c75655a3-b2e2-4443-9657-8738420913c4 111 \N 3 21321123123 a6791a14-ab8e-477e-aee9-4f340e7cf7bb a6791a14-ab8e-477e-aee9-4f340e7cf7bb f a6791a14-ab8e-477e-aee9-4f340e7cf7bb Lua 123 INLINE 2018-03-28 15:39:00.559+08 2018-05-30 15:49:56.87+08 2018-03-28 \N
+021c1f95-5dfd-46a3-bb49-680e667cde1c 协议A \N 1 00cf911c-3531-4665-a358-3d31d36f0bdd 00cf911c-3531-4665-a358-3d31d36f0bdd f 00cf911c-3531-4665-a358-3d31d36f0bdd Lua A INLINE 2018-01-09 22:26:37.518+08 2018-01-09 22:26:37.518+08 2018-01-09 \N
+09903e18-4a03-454d-a5fe-c91275a5400f mas_inclino_1502 \N 盒式测斜 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "fs_1502", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff=''\n buff=iota.appendHexWord(buff, 21, endian) -- 2: 类型=21\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_1502 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_1502 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\tlog.debug("fs_1502 moduleNo=%s 接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n buff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 1: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo) \n ctx:done(result)\n else\n\n end\n\nend\n\n\n\n--00152228818FEA0D710E400FCBFFF50877FFF96B7B789E\n--moduleId=8744 \n--"temp": 40.43,\n--"xDegree": -0.718729,\n--"yDegree": -0.431237\n--print("parsing data", hex)\n\n\nunmarshall=function(hex,moduleStr)\n\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local scale=1000000.00;\n local Temp = iota.hexToShort(hex,11,'B')/100.0;\n local xa = iota.hexToInt(hex,13,'B')/scale;\n local ya = iota.hexToInt(hex,17,'B')/scale;\n out.data = {\n temperature=Temp,\n anglex = tonumber(string.format("%5.2f",xa)),\n angley = tonumber(string.format("%5.2f",ya))\n };\n\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n log.debug('fs_1502 开始校验数据%s',data)\n if data == nil or string.len(data)/2 ~= 23 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,4,'B') ~= 0x81 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n\t--local moduleNo_check=device.props.moduleId or device.uplink.props.module\n if tostring(moduleNo_check) ~= tostring(iota.hexToShort(data,2,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('fs_1502 数据校验通过')\n return true\n--crc\nend\n \n\n\n \n\n INLINE 2018-06-25 11:14:04.725+08 2018-06-25 11:26:56.739+08 2018-06-25 \N
+637e7e3d-43b9-49a5-be9b-bef0bda0ccbb httpJCLQ_2021 \N 1.0 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 f a8df2f4a-3e2f-49f5-b1e2-b866493ade49 Lua \nstart=function()\n log.debug("JCLQ2021 start moudleid=%s", device.props.pointId or "nil")\n\tlocal req = {\n type= "http",\n url='', --https://api.yespowering.cn/login/\n \tmethod="post",\n header={}\n }\n\n req.url=device.props.tokenUrl\n log.debug("JCLQ2021: url=%s",req.url)\n log.debug("设备原型="..json.encode(device))\n req.header["agent"] = '0'\n\treq.header["language"] = 'zh'\n\treq.header["brandid"] = '38'\n req.ContentType='application/json'\n \n local param={\n account= device.props.account,\n pw=device.props.pw\n }\n\treq.body = json.encode(param)\n log.debug("JCLQ2021:param="..json.encode(param))\n local ok,ack=ctx:ssend(req,4000)\n\n if ack==nil then\n log.debug("JCLQ2021: ok=%s",ok)\n else\n log.debug("JCLQ2021: ok=%s,token=%s",ok,ack.body)\n end\n local out={\n type = 2,\n data ={},\n result = {}\n }\n if not ok or ack==nil then\n out.result={\n code=1002,\n msg="timeout",\n }\n else --OK\n if ack.code==200 and ack.body ~="" then -- http应答\n local dataTable=json.decode(ack.body)\n \tlocal token=dataTable.data.userinfo.token\n log.debug("JCLQ2021: token=%s " ,token)\n log.debug("JCLQ2021 ack=%s",ack.body)\n \n \n\t\t\tSleep(1)\n\t\t\t --请求数据\n\t\t\tlocal datareq = {\n\t\t\t\t\t\ttype= "http",\n\t\t\t\t\t\turl='', --url=https://api.yespowering.cn/dev/data/?box_id=35E81PV005 \n\t\t\t\t\t\tmethod="get",\n\t\t\t\t\t\theader={}\n\t\t\t\t\t}\n\t\t\tlocal boxId=device.props.boxId\n\t\t\tdatareq.url=device.props.dataUrl.."?box_id="..boxId\n\t\t\tlog.debug("JCLQ2021: data url=%s",datareq.url)\n\t\t\t--log.debug("设备原型="..json.encode(device))\n\t\t\tdatareq.header["agent"] = '0'\n\t\t\tdatareq.header["language"] = 'zh'\n\t\t\tdatareq.header["brandid"] = '38'\n\t\t\tdatareq.header["token"] = token\n\t\t\tdatareq.ContentType='application/json'\n\t\t\t\t\n\t\t --get发送\n\t\t\t local dataok,dataack=ctx:ssend(datareq,4000)\n\t\t\t\n\t\t\tif not dataok or dataack==nil then\n\t\t\t\tout.result={\n\t\t\t\tcode=1002,\n\t\t\t\tmsg="timeout",\n\t\t\t\t}\n\t\t\telse --OK\n\t\t\t\tif dataack.code==200 and dataack.body ~="" then -- http应答\n\t\t\t\t\talldataTable=json.decode(dataack.body) -- 有数据\n\t\t\t\t\tlocal rt_data=alldataTable.data.rt_data\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t--遍历节点数据\n\t\t\t\t\tfor k,v in ipairs(rt_data) do\t\t\t\t \n\t\t\t\t\t log.debug("JCLQ2021 k=%s, value=%s",k,json.encode(v))\t\n\t\t\t\t\t\tlocal moduleId=v.order_id\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal timess=v.datetime\n\t\t\t\t\t\tlocal timenow=unixtimestamp(timess)\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal r1,r1ok = redis.get(device.id..moduleId.."_endTime") --获取上次记录时间\n\t\t\t\t\t\tlog.debug("JCLQ2021 r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t\t\tlocal beginTime\n\t\t\t\t\t\tif r1ok and r1~=nil then\n\t\t\t\t\t\t\tbeginTime=r1\n\t\t\t\t\t\t\tlog.debug("JCLQ2021 r1=%s,r1ok=%s,beginTime=%s",r1,r1ok,beginTime)\t\t\t\t\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tbeginTime=os.time()--第一次默认当前时间\n\t\t\t\t\t\t\tredis.set(device.id..moduleId.."_endTime", tostring(beginTime))\n\t\t\t\t\t\t\tlog.debug("JCLQ2021 r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t\t\tend\n\n\t\t\t\t\t\tlocal endTime=timenum --全局\n\t\t\t\t\t\tif endTime<=tonumber(beginTime) then\n\t\t\t\t\t\t\tlog.debug("JCLQ2021 m=%s 数据未刷新beginTime=%s,endTime=%s",moduleId,beginTime,endTime)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlog.debug("JCLQ2021 m=%s 数据刷新beginTime=%s,endTime=%s",moduleId,beginTime,endTime)\n\t\t\t\t\t\tend\n\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\tfor i=1,8,1 do\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleId,i) \n\t\t\t\t\t\t\tlocal dataName="data"..tostring(i)\n\t\t\t\t\t\t\tlocal tempName="temp"..tostring(i)\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tlocal physicalvalue=tonumber(v[dataName])--alldataTable.data.rt_data[k].distance)\n\t\t\t\t\t\t\t\t\t\tlocal temperature=tonumber(v[tempName])\n\t\t\t\t\t\t\t\t\t\tlog.debug("JCLQ2021 m=%s c=%s 数据=%s",moduleId,i,physicalvalue)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\t\tphysicalvalue=physicalvalue,\n\t\t\t\t\t\t\t\t\t\t\t\ttemperature=temperature\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\ttime=timenow, \n\t\t\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t\t\t}; \n\t\t\t\t\t\t\t\t\t\ttable.insert(out.data,data1)\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\tlog.debug("JCLQ2018: moudleid=%s data:%s",device.props.pointId,json.encode(out))\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\t--更新endTime\n\t\t\t\t\t\tif endTime>tonumber(beginTime) then\n\t\t\t\t\t\t\tif redis.set(device.id..moduleId.."_endTime", tostring(endTime)) then\n\t\t\t\t\t\t\t\tlog.debug("JCLQ2021 redis更新 set lasttime ok key=%s,value=%s",device.id.."_endTime",tostring(endTime))\n\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlog.debug("JCLQ2021 redis不更新 ")\n\t\t\t\t\t\tend\n\t\t\t\t\t\t\n\t\t\t\t\tend\n\t\t\t\t \n\t\t\t\telse\n\t\t\t\t\tlog.debug("JCLQ2018: request data error:%s body:%s",ack.code,ack.body) \n\t\t\t\tend\n\t\t\tend\t\n \n else\n log.debug("JCLQ2021: request data error:%s body:%s",ack.code,ack.body) \n end\n end\n\tctx:done(json.encode(out))\nend\n \nSleep=function(n)\n local t0 = os.clock()\n while os.clock() - t0 <= n do end\nend\n\n\n--获取采集仪下面的通道信息\nfunction getDeviceInfo(moduleid,channel)\n \t--log.debug("JCLQ2021: 查询 传感器ID: moduleid=%s,channel=%s", moduleid,channel)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices \n --log.debug("JCLQ2021: 查询 节点层 设备device=%s",json.encode(subdevices))\n\n\t\tfor i,link in pairs(device.dnlinks) do\n --log.debug("JCLQ2021: link=%s",json.encode(link))\n for j,node in pairs(link.devices) do\n --log.debug("JCLQ2021:node=%s",json.encode(node))\n\t\t\t\t--log.debug("JCLQ2021 模块号(节点) node.uplink.props.node_id=%s",node.uplink.props.node_id)\n\t\t\t\tlocal moduleNo=node.uplink.props.module\n\t\t\t\tif moduleNo==tostring(moduleid) then\n\t\t\t\t\tfor k,sublink in pairs(node.dnlinks) do\n\t\t\t\t\t\t--log.debug("JCLQ2021:sublink=%s",json.encode(sublink))\n\t\t\t\t\t\tfor u,subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t\t--log.debug("JCLQ2021:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif tonumber(subdevice.uplink.props.channel)==tonumber(channel) then\n\t\t\t\t\t\t\t\tlog.debug("JCLQ2021: m=%s,c=%s 匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treturn subdevice\n\t\t\t\t\t\t\tend \n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n end\n end \n \n --log.debug("JCLQ2021 has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug("JCLQ2021 has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\nunixtimestamp=function(datestr)\n -- 2018-4-28 16:10:12\n\tlog.debug("JCLQ2021 datestr=%s",datestr)\n local datelist = Split(datestr, " ");\n local datebegin = Split(datelist[1], "-");\n local dateend = Split(datelist[2], ":");\n local year = tonumber(datebegin[1]);\n\tlocal month = tonumber(datebegin[2]);\n\tlocal day = tonumber(datebegin[3]);\n local hour = tonumber(dateend[1]);\n local minute = tonumber(dateend[2]);\n local second = tonumber(dateend[3]);\n log.debug("JCLQ2021 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlog.debug("JCLQ2021 timenum=%s",timenum)\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\tlog.debug("JCLQ2021 recordTime=%s",recordTime)\n\treturn recordTime\nend INLINE 2018-08-09 16:02:16.874+08 2018-08-10 09:07:24.116+08 2018-08-09 \N
+cae79ff3-2cf7-4fb8-a067-adc856d93412 测试协议 \N 1.0 86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307 86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307 f 86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307 Lua bit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\nstart=function()\n local out={\n data ={},\n result = {},\n type=2\n }\n local buff='F760045B0240020002'\n crc16H,crc16L=crc16_CCITT(buff,0,8)\n log.debug("sci_1409:模块%s通道%s的 校验前buff=%s,crc16L=%s,crc16H=%s",moduleNo,channelNo,buff,crc16L,crc16H) \n\n local resultData =json.encode(out)\n log.debug("sci_1409:out序列化结果 : out is =%s", json.encode(out))\n ctx:done(resultData)\n end\n\n\n\n\ncrc16_CCITT=function(buffer,index_start,index_end)--CRC校验 CRC-16 CCITT X2\n local crc = 0;\n local da=0;\n local yu ={\n 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef\n };\n for i = index_start,index_end-1,1 do\n \n da = (crc / 256) / 16\n da=getIntPart(da)\n crc =crc*16%65536\n \n local buff_i=tonumber(string.sub(buffer,2*i+1,2*i+2),16)\n local index=bit:_xor(da,buff_i / 16) \n crc = bit:_xor(crc,yu[index+1])\n \n\n da = (crc / 256) / 16;\n da=getIntPart(da)\n crc =crc*16%65536\n\n local index_2=bit:_xor(da,buff_i %16) \n crc = bit:_xor(crc,yu[index_2+1]) \n end\n local crcHi_CCITT = crc %256;\n local crcLo_CCITT = getIntPart(crc/256)\n return string.format("%02x",crcHi_CCITT),string.format("%02x",crcLo_CCITT)\nend INLINE 2019-04-30 11:47:12.413+08 2019-04-30 11:47:12.413+08 2019-04-30 \N
+cda82375-e0ae-4f55-97b2-47d867221b9b gzcranes_crane_4300 \N 起重机 1.0 33ff4c6f-7e37-416c-b813-7c2ec986afdf 33ff4c6f-7e37-416c-b813-7c2ec986afdf f 33ff4c6f-7e37-416c-b813-7c2ec986afdf Lua start=function()\n log.debug("start %s, ctx=", "gzcranes_crane_4300.lua",json.encode(device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 1: 模块号 \n buff=iota.appendHexByte(buff, 3, endian) -- 2: 指令: 0x04 = 采集\n buff=iota.appendHexWord(buff, 0x14, endian) \n buff=iota.appendHexWord(buff, 0x1b, endian) -- 3: 类型=1\n buff=iota.appendHexCrc(buff, endian ,0) -- 4: CRC\n local crcH=string.sub(buff,-2,-1)\n\tlocal crcL=string.sub(buff,-4,-3)\n buff=string.sub(buff,1,12)\n buff=buff..crcH\n buff=buff..crcL\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n --print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n --moduleId=1\n --010315022b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089f\n --"deputyPosition": 0,\n--"deputyWeight": 0,\n--"lCarCurrt": 0,\n--"lCarGVoltage": 0,\n--"lCarPosition": 0,\n--"lCarSpeed": 0,\n--"lCarTorque": 0,\n--"lCarVoltage": 0,\n--"mainCurrt": 0,\n--"mainGVoltage": 0,\n--"mainPosition": 0,\n--"mainSpeed": 555,\n--"mainTorque": 0,\n--"mainVoltage": 0,\n--"mainWeight": 0,\n--"sCarCurrt": 0,\n--"sCarGVoltage": 0,\n--"sCarPosition": 0,\n--"sCarSpeed": 0,\n--"sCarTorque": 0,\n--"sCarVoltage": 0\n if (string.len(hex)/2==59) then\n -- 模块 功能 数据长度 温度 CRC\n -- 1 1 1 2 2\n --print("parsing data", hex)\n local IDX_Main_Speed = 3; --主起变频输出 转速\n local IDX_Main_Current = 5; --主起变频输出 电流\n local IDX_Main_torque = 7; --主起变频输出 转矩\n local IDX_Main_Voltage = 9; --主起变频输出 电压\n local IDX_Main_GVoltage = 11; --主起变频母线电压\n\n local IDX_SCar_Speed = 13; --小车变频输出 转速\n local IDX_SCar_Current = 15; --小车变频输出 电流\n local IDX_SCar_torque = 17; --小车变频输出 转矩\n local IDX_SCar_Voltage = 19; --小车变频输出 电压\n local IDX_SCar_GVoltage = 21; --小车变频母线电压\n\n local IDX_LCar_Speed = 23; --大车变频输出 转速\n local IDX_LCar_Current = 25; --大车变频输出 电流\n local IDX_LCar_torque = 27; --大车变频输出 转矩\n local IDX_LCar_Voltage = 29; --大车变频输出 电压\n local IDX_LCar_GVoltage = 31; --大车变频母线电压\n\n local IDX_Main_Position = 33; --主起位置\n local IDX_SCar_Position = 37; --小车位置\n local IDX_LCar_Position = 41; --大车位置\n\n local IDX_Deputy_Position = 45; --副起位置\n local IDX_Main_Weight = 49; --主起重量\n local IDX_Deputy_Weight = 53; --大车位置\n\n local mainSpeed = iota.hexToShort(hex, IDX_Main_Speed,'B');\n local mainCurrt = iota.hexToShort(hex, IDX_Main_Current,'B');\n local mainTorque = iota.hexToShort(hex, IDX_Main_torque,'B');\n local mainVoltage = iota.hexToShort(hex, IDX_Main_Voltage,'B');\n local mainGVoltage = iota.hexToShort(hex, IDX_Main_GVoltage,'B');\n local mainPosition = iota.hexToShort(hex, IDX_Main_Position,'B');\n local mainWeight = iota.hexToShort(hex, IDX_Main_Weight,'B');\n local deputyPosition = iota.hexToShort(hex, IDX_Deputy_Position,'B');\n local deputyWeight = iota.hexToShort(hex, IDX_Deputy_Weight,'B');\n\n local sCarSpeed = iota.hexToShort(hex, IDX_SCar_Speed,'B');\n local sCarCurrt = iota.hexToShort(hex, IDX_SCar_Current,'B');\n local sCarTorque = iota.hexToShort(hex, IDX_SCar_torque,'B');\n local sCarVoltage = iota.hexToShort(hex, IDX_SCar_Voltage,'B');\n local sCarGVoltage = iota.hexToShort(hex, IDX_SCar_GVoltage,'B');\n local sCarPosition = iota.hexToShort(hex, IDX_SCar_Position,'B');\n\n local lCarSpeed = iota.hexToShort(hex, IDX_LCar_Speed,'B');\n local lCarCurrt = iota.hexToShort(hex, IDX_LCar_Current,'B');\n local lCarTorque = iota.hexToShort(hex, IDX_LCar_torque,'B');\n local lCarVoltage = iota.hexToShort(hex, IDX_LCar_Voltage,'B');\n local lCarGVoltage = iota.hexToShort(hex, IDX_LCar_GVoltage,'B');\n local lCarPosition = iota.hexToShort(hex, IDX_LCar_Position,'B');\n \n out.data = {\n mainSpeed=mainSpeed,\n mainCurrt=mainCurrt,\n mainTorque=mainTorque,\n mainVoltage=mainVoltage,\n mainGVoltage=mainGVoltage,\n mainPosition=mainPosition,\n mainWeight=mainWeight,\n deputyPosition=deputyPosition,\n deputyWeight=deputyWeight,\n sCarSpeed=sCarSpeed,\n sCarCurrt=sCarCurrt,\n sCarTorque=sCarTorque,\n sCarVoltage=sCarVoltage,\n sCarGVoltage=sCarGVoltage,\n sCarPosition=sCarPosition,\n lCarSpeed=lCarSpeed,\n lCarCurrt=lCarCurrt,\n lCarTorque=lCarTorque,\n lCarVoltage=lCarVoltage,\n lCarGVoltage=lCarGVoltage,\n lCarPosition=lCarPosition\n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2017-09-12 19:52:27.457+08 2018-02-28 18:32:12.195+08 2017-09-12 \N
+cfd7e9ee-ae25-4147-9f4b-9799a02d5075 jt_inclination_1544 \N 南京基泰单双轴倾斜仪协议 未使用 1.0 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 f d3f1aa63-8397-45a4-af26-15a0f91d1e13 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, ctx=", "jt_inclination_1544.lua",json.encode(device.props.moduleId))\n local endian = 'B'\n local buff='' \n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 99 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 99'}\n ctx:done(json.encode(errout))\n else\n if device.props.sensorType == 'doubleInclination' then --需要sensorType \n buff=iota.appendHexByte(buff, 0xF9, endian)\n buff=iota.appendHexByte(buff, 0xF9, endian)\n else \n buff=iota.appendHexByte(buff, 0xF5, endian)\n buff=iota.appendHexByte(buff, 0xF5, endian)\n end\n buff=iota.appendHexByte(buff, device.props.moduleId, endian)\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,500)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n -- print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\n end\nend\n\nunmarshall=function(hex)\n\t--15028765\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local xDegrees = ''\n local yDegrees = ''\n local xDegree = 0\n local yDegree = 0\n if device.props.sensorType == 'doubleInclination' then\n if string.sub(hex,3,3) == '8' then\n xDegrees = '-'\n end\n\t\t\tlocal xvalue = string.sub(hex,4,8)\n xDegrees = xDegrees..xvalue\n if string.sub(hex,9,9) == '8' then\n yDegrees = '-'\n end\n local yvalue = string.sub(hex,10,14)\n yDegrees = yDegrees..yvalue\n else \n if string.sub(hex,3,3) == '8' then\n xDegrees = '-'\n end\n local xvalue = string.sub(hex,4,8)\n xDegrees = xDegrees..xvalue\n end\n\n xDegree = tonumber(xDegrees)\n if yDegrees ~= '' then\n yDegree = tonumber(yDegrees)\n end\n\n--公式\n local valuex = 0\n local valuey = 0\n if device.props.formula == "Δθ=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)" then --大小写不区分或者默认处理为该公式\n local k1x = device.props.K1x\n local k2x = device.props.K2x\n local k3x = device.props.K3x\n local k1y = device.props.K1y\n local k2y = device.props.K2y\n local k3y = device.props.K3y\n local fox = device.props.Fox\n local foy = device.props.Foy\n valuex = k1x * xDegree + k2x * xDegree^2 + k3x * xDegree^3 - (k1x * fox + k2x * fox^2 + k3x * fox^3)\n valuey = k1y * yDegree + k2y * yDegree^2 + k3y * yDegree^3 - (k1y * foy + k2y * foy^2 + k3y * foy^3)\n end\n out.data = { --需要测试\n xDegree = valuex,\n yDegree = valuey\n }\n else\n message = 'Invalid Msg, len='..string.len(hex)\n out.result = {code = errcode, msg = errormsg}\n end\n return json.encode(out)\nend\n\nIsValid=function(data)\n if string.len(data)/2 ~= 4 and string.len(data)/2 ~= 7 then\n errormsg = 'Data is Invalid'\n errcode = 1001\n return false\n end\n\n if iota.hexToByte(data,0,'B') ~= tonumber(device.props.moduleId) then\n \t\terrcode = 1004\n errormsg = 'Invalid moduleId ' \n return false\n end\n return true\n--crc\nend\n INLINE 2017-09-02 13:45:28.689+08 2018-03-28 14:41:59.216+08 2017-09-02 \N
+6b5d1a2e-2aff-4663-bec3-ea25fbafe236 czbt_0404 \N 1.0 cb9f2b84-b356-4721-b75e-da2a575068f4 cb9f2b84-b356-4721-b75e-da2a575068f4 f cb9f2b84-b356-4721-b75e-da2a575068f4 Lua --//04 项目资料/2018-04\n--require "functions" -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {} //设备信息\nprotocol=> {} //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\n--start=function ()\n\t--log.debug("start %s, ctx=%s", "czbt_0404.lua",json.encode(device.props.moduleId))\n\t--ok,resp=ctx:ssend("010203",15000)\n--end\n--AA0043160608202359000503010301011023000043540204010003760000036700261000030100070010BB\n\nonData=function (hex)\n\t--主动上传式\n\tlog.debug("czbt_0404:Received=>%s",hex)\n\n\tlocal out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n --log.debug("czbt_0404:hexToStr=%s",sData)\n\t\tlocal moduleNo = tonumber(string.sub(hex,9*2+1,9*2+4))\n\t\tlog.debug("czbt_0404:moduleNo=%s",moduleNo)\n\t\t\n\t\tlocal timess=string.sub(hex,7,9+12)\n\t\tlocal timenow=unixtimestamp(timess)\n\t\t\n\t\t--\n\t\tlocal IDX_DATA=13 --设备编号索引 \n\t\tlocal dataStruct={}\n\t\tdataStruct[1]={dtatNum=1,intNum=2,dotNum=4} --裂缝\n\t\tdataStruct[2]={dtatNum=1,intNum=2,dotNum=4} --单轴倾角\n\t\tdataStruct[3]={dtatNum=2,intNum=2,dotNum=4}\t--双轴倾角\n\t\tdataStruct[4]={dtatNum=3,intNum=2,dotNum=4} --双轴倾角带温度\n\t\tdataStruct[5]={dtatNum=3,intNum=6,dotNum=0} --3通道应变\n\t\tdataStruct[6]={dtatNum=2,intNum=2,dotNum=4} --温湿度\n\t\tdataStruct[7]={dtatNum=1,intNum=2,dotNum=4}\t--沉降\n\t\tdataStruct[8]={dtatNum=1,intNum=4,dotNum=2}\t--索力\n\t\tdataStruct[9]={dtatNum=2,intNum=2,dotNum=4}\t--加速度\n\t\t\n\t\tlocal sensorNum=tonumber(string.sub(hex,11*2+1,12*2))\n\t\tlog.debug("czbt_0404 sensorNum=%s",sensorNum)\n\t\tfor i=1,sensorNum,1 do\n\t\t\t\n\t\t\tlocal dataType=tonumber(string.sub(hex,IDX_DATA*2+1,IDX_DATA*2+2))\n\t\t\tlocal channelNo=tonumber(string.sub(hex,(IDX_DATA-1)*2+1,(IDX_DATA-1)*2+2))\n\t\t\tlocal subDataNum=dataStruct[dataType].dtatNum\n\t\t\tlocal subIntNum=dataStruct[dataType].intNum\n\t\t\tlocal subDotNum=dataStruct[dataType].dotNum\n\t\t\tlog.debug("czbt_0404 i=%s, dataType=%s,channelNo=%s,subDataNum=%s,subIntNum=%s,subDotNum=%s",i,dataType,channelNo,subDataNum,subIntNum,subDotNum)\n\t\t\t--解析单个传感器数据\n\t\t\tlocal phy={}\n\t\t\tfor j=1,subDataNum,1 do\n\t\t\t\n\t\t\t\n\t\t\t\t local sign=string.sub(hex,(IDX_DATA+2+(j-1)*4)*2-1,(IDX_DATA+2+(j-1)*4)*2)\n\t\t\t local int_str=string.sub(hex,(IDX_DATA+2+(j-1)*4)*2+1,(IDX_DATA+2+(j-1)*4)*2+subIntNum)\n\t\t\t\t local dot_str="0."..string.sub(hex,(IDX_DATA+2+(j-1)*4)*2+subIntNum+1,(IDX_DATA+2+(j-1)*4)*2+subIntNum+subDotNum)\n\t\t\t\t local physicalvalue=tonumber(int_str)+tonumber(dot_str)\n \t\t phy[j]=physicalvalue*(-1)^(tonumber(sign))\n\t\t\t\t log.debug("czbt_0404 i=%s,j=%s, int_str=%s ,dot_str=%s physicalvalue=%s",i,j,int_str,dot_str,physicalvalue)\n\t\t\t\t --判断输出能力类型\t\t \n\t\t\tend\t\t\n\t\t\t IDX_DATA=IDX_DATA+4*subDataNum+2 \n\t\t\t --设备能力输出\n\t\t\tlocal length\n\t\t\tlocal anglex\n\t\t\tlocal angley\n\t\t\tlocal temperature\n\t\t\tlocal humidity\n\t\t\tlocal strain1\n\t\t\tlocal strain2\n\t\t\tlocal strain3\n\t\t\tlocal force\n\t\t\tlocal acceleration\n\n\n\t\t\t\n\t\t\t\tif dataType==1 then\n\t\t\t\t length=phy[1]\n\t\t\t\telseif dataType==2 then\n\t\t\t\t anglex=phy[1]\n\t\t\t\telseif dataType==3 then\n\t\t\t\t anglex=phy[1]\n\t\t\t\t\tangley=phy[2]\n\t\t\t\telseif dataType==4 then\n\t\t\t\t anglex=phy[1]\n\t\t\t\t\tangley=phy[2]\n\t\t\t\t\ttemperature=phy[3]\n\t\t\t\telseif dataType==5 then\n\t\t\t\t strain1=phy[1]\n\t\t\t\t\tstrain2=phy[2]\n\t\t\t\t\tstrain3=phy[3]\n\t\t\t\telseif dataType==6 then\n\t\t\t\t\ttemperature=phy[1]\n\t\t\t\t\thumidity=phy[2]\n\t\t\t\telseif dataType==7 then\n\t\t\t\t\tlength=phy[1]\n\t\t\t\telseif dataType==8 then\n\t\t\t\t\tforce=phy[1]\n\t\t\t\telseif dataType==9 then\n\t\t\t\t\tacceleration=phy[1]\n\t\t\t\telse\n\t\t\t\t log.debug("czbt_0404 m=%s,c=%s,dataType=%s 无匹配",moduleNo,channelNo,dataType)\n\t\t\t\tend\n\t\t\t\n\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\t\t\t\t--\n\t\t\t\t local deviceId\n\t\t\t\t if childDevice~=nil then\n\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\tlog.debug("czbt_0404:m=%s,c=%s 子设备原形childDevice=%s",moduleNo,channelNo,json.encode(childDevice))\t\t\t\t \n\t\t\t\t else\n\t\t\t\t\tlog.debug("czbt_0404:子设备:m=%s,c=%s deviceId为nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t end\n\t\t\t\tlocal data1={\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tlength=length,\n\t\t\t\t\t\t\t\tanglex=anglex,\n\t\t\t\t\t\t\t\tangley=angley,\n\t\t\t\t\t\t\t\ttemperature=temperature,\n\t\t\t\t\t\t\t\thumidity=humidity,\n\t\t\t\t\t\t\t\tstrain1=strain1,\n\t\t\t\t\t\t\t\tstrain2=strain2,\n\t\t\t\t\t\t\t\tstrain3=strain3,\n\t\t\t\t\t\t\t\tforce=force,\n\t\t\t\t\t\t\t\tacceleration=acceleration\t\t\t\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\ttime=timenow,\n\t\t\t\t\t\t\ttype=1 \n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\t\n\t\t\t\n\t\tend\n\t\t\t \t\t\t\t\t\t\n \t \n\t\t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg}\n\t\t\t\n\tend\n\tlocal resultData =json.encode(out)\n\tctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n log.debug("czbt_0404 m=%s,c=%s 查询deviceId",moduleNoId,channelNoId)\n\tlog.debug("czbt_0404 m=%s,c=%s 查询device=%s",moduleNoId,channelNoId,json.encode(device))\n if device.dnlinks[1].devices ~=nil then\n log.debug("czbt_0404 m=%s,c=%s 遍历子设备",moduleNoId,channelNoId)\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("czbt_0404:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("czbt_0404 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t log.debug("czbt_0404 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t \t if tonumber(channelStrCheck)== tonumber(channelNoId) then\n \n \t\t log.debug("czbt_0404: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("czbt_0404: subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function (data)\n\tlog.debug('czbt_0404:开始校验数据=%s',data)\n if data == nil or string.len(data)/2 <= 18 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug("czbt_0404 Data is nil or invalid length")\n return false\n end\n\n\tif iota.hexToByte(data,0,'B') ~= 0xaa or string.lower(string.sub(data,-2,-1))~="bb" then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n\t\tlog.debug("czbt_0404 Hex CMD False")\n return false\n end\t\n log.debug('czbt_0404:校验通过')\n\treturn true\n\t\nend\n\nunixtimestamp=function(datestr)\n --180727135159\n\tlog.debug("bjhk_7000 datestr=%s",datestr)\n local year = tonumber(string.sub(datestr,1,2))+2000;\n\tlocal month = tonumber(string.sub(datestr,3,4));\n\tlocal day = tonumber(string.sub(datestr,5,6));\n local hour = tonumber(string.sub(datestr,7,8));\n local minute = tonumber(string.sub(datestr,9,10));\n local second = tonumber(string.sub(datestr,11,12));\n log.debug("bjhk_7000 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlog.debug("bjhk_7000 timenum=%s",timenum)\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\tlog.debug("bjhk_7000 recordTime=%s",recordTime)\n\treturn recordTime\nend INLINE 2018-04-08 11:19:38.077+08 2019-11-01 14:44:15.565+08 2018-04-08 \N
+a75c683e-f6e3-4198-9520-4d03309584ad sz_angle_1600 \N 1.0 abe57a42-14ab-448b-b96f-14875e86ca40 abe57a42-14ab-448b-b96f-14875e86ca40 f abe57a42-14ab-448b-b96f-14875e86ca40 Lua --// PMO/02 产品协议/SavoirCloud/01 201805项目\\2 贵州顺康路桥边坡项目--宏丞\\长沙三智数据通信协议2013.doc\n\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "sz_angle_1600", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("sz_angle_1600 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("sz_angle_1600 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n\t\tbuff=iota.appendHexByte(buff, 0xAA, endian) \n\t\tbuff=iota.appendHexByte(buff, 0x75, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x10, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x0e, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\t\t\t\t\n buff=buff..moduleNo -- 模块号\n\t\tlocal dateStr=os.date("%y%m%d%H%M%S")\n\t\tlocal y_str=string.format("%02x",string.sub(dateStr,1,2))\n\t\tlocal m_str=string.format("%02x",string.sub(dateStr,3,4))\n\t\tlocal d_str=string.format("%02x",string.sub(dateStr,5,6))\n\t\tlocal H_str=string.format("%02x",string.sub(dateStr,7,8))\n\t\tlocal M_str=string.format("%02x",string.sub(dateStr,9,10))\n\t\tlocal S_str=string.format("%02x",string.sub(dateStr,11,12))\n buff=buff..y_str..m_str..d_str..H_str..M_str..S_str \n \t\n buff=buff..CheckXor(buff) \n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("sz_angle_1600 SSend error!")\n end\n ctx:done(result)\nend\n\n--AA7501000E00284100850000000405092708223900\n--moduleId=2841008500000004 \n--"length":\n--557A1000350028410085000000041204020F24380145FDEFC09D206D6D2020FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF535A323031382020A7\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n local temperature=tonumber(string.sub(hex,20*2+1,22*2))/10.0\n local anglex = iota.hexToUShort(hex,22,'B')/10.0\n\t\tlocal angley = iota.hexToUShort(hex,24,'B')/10.0\n \n \n out.data = {\n anglex=anglex,\n angley=angley,\n\t\t\ttemperature=temperature\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('sz_angle_1600 开始校验数据=%s',data)\n --if data == nil or string.len(data)/2 ~= 9 then\n -- errormsg = 'Data is nil or invalid'\n -- errcode = 1001\n -- return false\n -- end\n if iota.hexToByte(data,0,'B') ~= 0x55 or iota.hexToByte(data,1,'B') ~= 0x7a or iota.hexToByte(data,2,'B') ~= 0x10 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if string.lower(tostring(moduleStrCheck))~= string.lower(string.sub(data,6*2+1,6*2+8*2)) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n log.debug('sz_angle_1600 Invalid moduleId=%s[%s]',string.sub(data,6*2+1,6*2+8*2),moduleStrCheck)\n return false\n end\n log.debug('sz_angle_1600 数据校验通过')\n return true\n--crc\nend\n\n\n--异或校验\nCheckXor=function(hex) \n local len = string.len(hex)/2\n local pp = 0\n for i =0,len-1 do\n local bi = iota.hexToByte(hex,i,'B')\n pp = bit:_and(bit:_xor(bi,pp) , 0x000000ff)\n \t--log.debug("PP是=%s",string.format("%02x",pp))\n end\n return string.format("%02x",pp)\nend \n\n\n\t\n \n INLINE 2018-05-30 17:48:22.324+08 2018-06-21 16:54:42.267+08 2018-05-30 \N
+f0dfe60c-b6d2-4c5d-a2de-92993726687b text \N 1.0 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d f 01fdd48b-2211-42be-9e66-b2a76c84567d Lua --// 风速风向传感器\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "textrt ", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t--HUASI,GET,DATA,281263\n\n\n --48 55 41 53 49 2c 47 45 54 2c 44 41 54 41 2c 32 38 31 32 36 33 \n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("textrt 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("textrt 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n\t\t\n\t\t--$HUASI,GET,DATA,281263*20\n\t\t\n\t\t--buff="$HUASI,GET,DATA,281263*"\n\t\t--local xmm="48554153492c4745542c444154412c323831323633"\n\t\t--48 55 41 53 49 2c 47 45 54 2c 44 41 54 41 2c 32 38 31 32 36 33 \n\t\tbuff=iota.appendHexByte(buff, 0x48, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x55, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x41, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x53, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x49, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x2c, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x47, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x45, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x54, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x2c, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x44, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x41, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x54, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x41, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x2c, endian)\n\t\t\n\t--\tbuff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n\t\tlog.debug("textrt 下发码流没有校验 buff=%s",buff)\n\t\tlocal moduless=StrtoHex(moduleNo)\n\t\tlog.debug('textrt %s moduless将asc转成16进制',moduless)\n\t\tlocal hza=toStrHex(buff)\n\t\tlog.debug('textrt %s hza将16进转成a',hza)\n\t\tlocal app=CssS(buff)\n\t\tlog.debug('textrt %s 校验值',app)\n\t\t\n buff=hza..app\n\t\t\n\t\tlog.debug('textrt %s buff111111',buff)\n\t\t\n\t\t\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("textrt SSend error!")\n end\n ctx:done(result)\nend\nCS=function(buff)\n local lcr = 0\n for i = 0, string.len(buff)/2-1 do\n lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n end\n --log.debug('textrt:lcr累加结果%s', lcr)\t\n\t--local value=bit.band(bit.bnot(lcr),0xff)+1 --按位取反再加1\n\t--log.debug('textrt:lcrvalue累加结果1%s', value)\t\n return lcr\nend \n--FF0300000002D1D5\n--FF030416760DFF44BE \n--加总异或\nCssS=function(buff)\n local lcr = 0\n\tlocal a=bit.xor (15, 1)\n\tlog.debug('textrt: a这个内容%s', a)\t\n for i = 0, string.len(buff)/2-1 do\n\t\n\t\n\t\n\t--local aa=bit.xor (string.sub(buff,2*i-1,2*i), string.sub(buff,2*i-1,2*i))\n lcr = (lcr + bit.band(bit.bnot(lcr),0xff)+1)\n end\n --log.debug('textrt:lcr累加结果%s', lcr)\t\n\t--local value=bit.band(bit.bnot(lcr),0xff)+1 --按位取反再加1\n\t--log.debug('textrt:lcrvalue累加结果1%s', value)\t\n return lcr\nend \n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\t\t\t\n local humidy = iota.hexToShort(hex,5,'B')/100\n\t\tlog.debug('textrt %s 湿度',humidy)\n\t\tlocal Temp = iota.hexToShort(hex,3,'B')/100-40\n\t\tlog.debug('textrt %s 温度',Temp)\n\t\t\n\t\t\n \n \n out.data = {\n\t\t\thumidy=humidy,\n\t\t\tTemp=Temp,\t\t\t\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n log.debug('textrt %s 开始校验数据',data)\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n \n log.debug('textrt 数据校验通过')\n return true\n\nend\n--将16转换成字符串\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\nStrtoHex=function(hex)\n\t--判断输入类型\n\tif (type(hex)~="string") then\n\t\treturn nil,"hex2str invalid input type"\n\tend\n\t--拼接字符串\n\tlocal index=1\n\tlocal ret=""\n\tfor index=1,hex:len() do\n \tlocal str = string.format("%02X",hex:sub(index):byte())\n \tif str == '0A' or str =='0a' then\n \t\tstr = '0d0a' \t\t\n \tend\t\n \tif index == hex:len() then\n \t\tstr = str..'0d0a'\n \tend\n \tret=ret..str\n\tend\n\treturn ret\nend\n\n\t\n \n INLINE 2019-12-12 16:52:27.252+08 2019-12-16 10:41:23.239+08 2019-12-12 \N
+52a3aa4d-95fb-4b15-a1ee-82ca7ffc7642 test \N 1.0 b7a8e100-b8fb-4135-a1b5-00a91da6da3f b7a8e100-b8fb-4135-a1b5-00a91da6da3f f b7a8e100-b8fb-4135-a1b5-00a91da6da3f Lua --[[\n协议号: 1.0;\n协议名: FS-ZWY-XX\n]]--liankang\nstart=function ()\n log.debug("FS-ZWY-XX start %s, ctx=%s",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("FS-ZWY-XX encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("FS-ZWY-XX decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE); -- 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x03, BE); -- 功能码 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE); \n buff=iota.appendHexByte(buff, 0x00, BE); -- 读取寄存器起始地址 00 00\n\tbuff=iota.appendHexByte(buff, 0x00, BE); \n\tbuff=iota.appendHexByte(buff, 0x02, BE); -- 读取寄存器数量 00 02\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- CRC16 小端字节序\t\n\treturn buff\nend\n\n-- decode \n-- returns: 结果, 直线位移\n-- 正确回复 01030600332BFF0162548C 直线位移 length : 51.172mm temperature : 22.125℃\n-- 01 03 04 00 33 2B FF 54 8C(长度为51.172mm)\n01030400332BFF548C\n-- 原始数据\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t-- 判断数据有效性\n\tif inValid(da) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telse\n\t\tlog.debug("数据有效")\n\t\tlocal hexLenStr = string.sub(data, 7, 14)\n\t\tlog.debug("hexLenStr = %s ", hexLenStr)\n\t\tlocal lenInteger = iota.hexToUShort(hexLenStr, 0, 'B') \t-- 十进制整数位\n\t\tlog.debug("lenInteger = %d ", lenInteger)\n\t\tlocal lenDecimal = iota.hexToUShort(hexLenStr, 2, 'B') / 65536 -- 十进制小数位\n\t\tlog.debug("lenDecimal = %f ", lenDecimal)\n\t\tlocal len = lenInteger + lenDecimal\n\t\t\n\t\n\t\tout.data = {\n\t\t\tlength = getPreciseDecimal(len, 3), -- 控制浮点数进度为3位小数,四舍五入\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 9 or iota.hexToByte(data, 1,'B') ~= 0x03 then -- 长度不等于 9 或者 读第二个字节,功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n\n--bit 操作\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\nend --bit:_and\n\n\n--- nNum 源数字\n--- n 小数位数\n--- 四舍五入\nfunction getPreciseDecimal(nNum, n)\n if type(nNum) ~= "number" then\n return nNum;\n end\n n = n or 0;\n n = math.floor(n)\n if n < 0 then\n n = 0; \n local nDecimal = 10 ^ n\n local nTemp = math.floor(nNum * nDecimal + 0.5);\n local nRet = nTemp / nDecimal;\n return nRet;\nend INLINE 2019-12-26 16:16:44.668+08 2019-12-26 16:17:39.778+08 2019-12-26 \N
+c4a9f5a0-5436-4b62-854f-332cfde5559f BGK_4000D \N 无公式 1.0 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 f 224e0fc3-9311-4c4a-839d-d0363ece2ab4 Lua --//02 协议分析/2016-09-23/BGK协议 v2.0.doc\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\nstart=function()\n\tlog.debug("load script %s", "BGK_4000D")\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n \n log.debug("BGK_4000D:LUA:subdevices : data is =%s", json.encode(subdevices))\n \tfor index,child in pairs(subdevices) do\n\t\t\n\t\t\t\n\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("BGK_4000D 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t moduleNo=child.props.moduleId\n\t\t\t channelNo=child.props.channelId \n\t\t\t log.debug("BGK_4000D 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n\t\t\n \t\n log.debug("BGK_4000D:模块%s通道%s的deviceId是%s:",moduleNo,channelNo,tostring(child.id))\n\t\t\t--log.debug("BGK_4000D:子通道设备原型child=%s",json.encode(child))\n\t\t\tlocal cmdstr=string.format("%02d",tonumber(moduleNo)).."21"..string.format("%02d",tonumber(channelNo))\n\t\t\tlog.debug("BGK_4000D:模块%s通道%s的cmdstr是:%s",moduleNo,channelNo,cmdstr)\n\t\t\tlocal lcr_str=LCR(cmdstr)\n \t\tlcr_str=string.upper(lcr_str)--转大写字符\n\t\t\tlog.debug("BGK_4000D:模块%s通道%s的lcr_str是:%s",moduleNo,channelNo,lcr_str)\n\t\t\tlocal request_asciiStr=":"..cmdstr..lcr_str\n\t\t\tlog.debug("BGK_4000D:模块%s通道%s的request_asciiStr是:%s",moduleNo,channelNo,request_asciiStr)\n\t\t\tlocal buff=toHexStr(request_asciiStr)\n \tbuff=iota.appendHexByte(buff, 0x0d, endian)\t\t\n\t\t\tbuff=iota.appendHexByte(buff, 0x0a, endian)\t\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n log.debug("BGK_4000D:模块%s通道%s的数据接收成功,开始解析",moduleNo,channelNo) \n\t\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\t\tlog.debug("BGK_4000D:模块%s通道%s的数据接收失败",moduleNo,channelNo) \n\t\t\tend\n end \n\t\t\n else\n log.debug("BGK_4000D:".."subdevices是nil")\n \treturn nil\n end\n\t\t\n\tlog.debug('BGK_4000D:out序列化')\n\tlocal resultData =json.encode(out)\n log.debug("BGK_4000D:out序列化结果 : out is =%s", json.encode(out))\n ctx:done(resultData)\nend\n\n--3a3037323130312b32332e323030302b32372e3130303030330d0a 40n的回复\n\n \nunmarshall=function(hex,childDevice,subModuleId,subChannelId)\n local subData={\n data ={},\n\t\tdevice=childDevice.id,\n type=1 \n }\n\t\n\tlog.debug("BGK_4000D:模块%s通道%s的deviceId是:%s",subModuleId,subChannelId,json.encode(childDevice))\n local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n if ErrorCode then \n \n --码流转string\n\t\tlocal responseStr=toStrHex(hex)\n\t\tlog.debug("BGK_4000D:模块%s通道%s的解析字符串是:%s",subModuleId,subChannelId,responseStr)\n\t\tlocal freStr=string.sub(responseStr,8,15)\n\t\tlocal freq=tonumber(freStr)\n\t\tlocal data1=tonumber(string.format("%5.3f",freq))\n\t\tlocal resistanceStr=string.sub(responseStr,16,23)\n\t\tlocal dResistance=tonumber(resistanceStr)\n\t\tlog.debug("BGK_4000D:模块%s通道%s的原始值是:freStr=%s,resistanceStr=%s",subModuleId,subChannelId,freStr,resistanceStr)\n \n\t\tsubData.data={\n\t\t\t\t\tdata1=data1,\n\t\t\t\t\tdata2=dResistance,\n\t\t\t\t\t}\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\nLCR=function(buff)\n\tlog.debug("BGK_4000D:lcr buff=%s",buff)\n local lcr = 0\n for i = 0, string.len(buff)/2-1 do\n lcr = lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)\n end \n\tlog.debug("BGK_4000D:lcr累加结果%s",tonumber(lcr))\n lcr=lcr%255\n \tlocal value =0xff-lcr+1\n\tlocal lcrResult_str=string.sub(string.format("%#x",value),3,-1)--去除0x\n\tlog.debug("BGK_4000D:lcr校验结果%s",lcrResult_str)\n return lcrResult_str\nend \n\nIsValid=function(data,moduleId,channelId)\n log.debug('BGK_4000D:模块%s通道%s开始校验数据',moduleId,channelId)\n if data == nil or string.len(data)/2 ~= 27 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('BGK_4000D:模块%s通道%s 数据校验失败:Data is nil or invalid length',moduleId,channelId)\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x3a or iota.hexToByte(data,25,'B') ~= 0x0d or iota.hexToByte(data,26,'B') ~= 0x0a then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n\t\tlog.debug('BGK_4000D:模块%s通道%s 数据校验失败:Data is nil or invalid length',moduleId,channelId)\n return false\n end\n\t\n\t--码流转string\n\tlocal checkStr=toStrHex(data)\n\tlog.debug('BGK_4000D:模块%s通道%s 数据校验:checkStr=%s',moduleId,channelId,checkStr)\n\tlocal moduleStr=string.sub(checkStr,2,3)\n\tlocal channelStr=string.sub(checkStr,6,7)\n\tif tonumber(moduleStr) ~=tonumber(moduleId) then\t\n errormsg = 'Invalid acq moduleId'\n\t\terrcode = 1004\n\t\tlog.debug('BGK_4000D:模块%s通道%s 数据校验失败:Invalid acq moduleId=%s',moduleId,channelId,moduleStr)\n\t\treturn false\n\tend\n\t\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('BGK_4000D:模块%s通道%s 数据校验失败:Invalid acq channelId=%s',moduleId,channelId,channelStr)\n\t\treturn false\n\tend\t\t\n log.debug('BGK_4000D:模块%s通道%s校验数据通过!!!',moduleId,channelId)\n return true\nend\n\ngetIndex=function(data)--用于IsValid\n local len=string.len(data)/2\n for n =1,len do \n local value=string.sub(data,2*n-1,2*n)\n if value=='0a' then\n return n;\n end\n end\n return 0;\nend\n\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\n\nend\n\n INLINE 2018-03-09 16:28:37.161+08 2018-03-28 09:22:09.569+08 2018-03-09 \N
+68855ea0-10d0-4ff5-bbed-98a4ae220997 iOTA Edge \N 1.0.0 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f f16833ab-a4a4-45f5-9b39-ad2c66e488f6 Lua start= function()\n log.debug("mqtt edge protocol start")\nend\n\nonData=function(data) \n -- log.debug("mqtt edge protocol on data: %s", json.encode(data))\n local edgeMetaId = device.deviceMetaId\n local edgeId = device.id\n local topic = data.topic\n if data.payload == nil then\n return\n end\n local payload = json.decode(data.payload)\n -- 设备配置请求\n if topic == string.format("/conf/edge/%s/%s/request", edgeMetaId, edgeId) then\n onConfigRequest(payload)\n -- 设备数据上报\n elseif topic == string.format("/data/devices/%s/%s/report", edgeMetaId, edgeId) then\n onDeviceDataReport(payload)\n -- Edge数据上报\n elseif topic == string.format("/data/edge/%s/%s/report", edgeMetaId, edgeId) then\n onEdgeDataReport(payload)\n end\nend\n\nonDeviceDataReport=function(data)\n local strData = json.encode(data)\n -- log.debug("edge's data report: %s", strData)\n ctx:notify(strData)\nend\n\nonEdgeDataReport=function(data)\n -- 快速实现,只有一个能力的情况下\n data.capId = "2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13"\n local strData = json.encode(data)\n -- log.debug("edge device's data report: %s", strData)\n ctx:notify(strData)\nend\n\n--[[\n 设备配置请求\n]]--\nonConfigRequest=function(request)\n log.debug("edge config request")\n local edgeMetaId = device.deviceMetaId\n local edgeId = device.id\n local responseTopic = string.format("/conf/edge/%s/%s/response", edgeMetaId, edgeId)\n local response = {\n id = request.id,\n payload = {\n -- edge config\n edge = {},\n -- devices config\n devices = {}\n }\n }\n -- edge interface and capabilities\n response.payload.edge = createDevice(device)\n -- 仅两层结构?\n if device.dnlinks ~= nil then\n for i, dl in ipairs(device.dnlinks) do\n if dl.devices ~= nil then\n for j, d in ipairs(dl.devices) do\n local dv = createDevice(d)\n if dv ~= nil then\n table.insert(response.payload.devices, dv)\n end\n end\n end\n end\n end\n local iOTAMQTTMessage = {\n type = "iota_mqtt",\n topic = responseTopic,\n payload = json.encode(response)\n }\n ctx:asend(iOTAMQTTMessage)\nend\n\n--[[\n 设备转换\n]]--\ncreateDevice=function(dev)\n if dev == nil then\n return nil\n end\n local device = {\n id = dev.id,\n deviceMetaId = dev.deviceMetaId,\n name = dev.name,\n props = dev.props,\n -- other ...\n interfaces = {}\n }\n if dev.uplink ~= nil then\n local interface = createInterface(dev.uplink)\n if interface ~= nil then\n table.insert(device.interfaces, interface)\n end\n end\n return device\nend\n\n--[[\n 接口转换\n]]--\ncreateInterface=function(inf)\n if inf == nil then\n return nil\n end\n local interface = {\n id = inf.id,\n name = inf.name,\n props = inf.props,\n capabilities = {}\n }\n if inf.capabilities ~= nil then\n for i, cap in ipairs(inf.capabilities) do\n local capability = createCapability(cap)\n if capability ~= nil then\n table.insert(interface.capabilities, capability)\n end\n end\n end\n return interface\nend\n\n--[[\n 能力转换\n]]--\ncreateCapability=function(cap)\n if cap == nil then\n return nil\n end\n local capability = {\n id = cap.id,\n capabilityMetaId = cap.capabilityMetaId,\n name = cap.name,\n props = cap.props,\n }\n return capability\nend INLINE 2019-07-06 16:48:55.709+08 2019-08-30 12:13:21.588+08 2019-07-06 \N
+110f04da-4488-49b0-abc8-c14a6fe5d658 HX-WL-AcqUnit \N 恒星物联 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua 1 INLINE 2020-01-15 16:39:35.593+08 2020-01-15 16:39:35.593+08 2020-01-15 \N
+8267e518-0c87-4bf5-8d35-364229aa6076 abc-1503 \N 1 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f 56031544-f3e0-407f-9ffa-1a54742ecfa7 Lua -- 001626C68184DEF28AA5120D61FFDACFBEFFC22929F831\n-- 000126C6810D6FFDA1FFDACFBEF831\nstart=function()\n\tlog.debug("device.uplink.props.module=%s", device.uplink.props.module)\n \tlog.debug("json:%s", json.encode(capability))\n local endian = 'B'\n local buff=''\n buff=iota.appendHexWord(buff, 21, endian) --2: 0015 协议类型=21\n buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 2: 0538 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 1: 01 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,3000)\n local result = unmarshall(ok,resp)\n log.debug("result=%s",result)\n ctx:done(result)\nend\n\nunmarshall=function(ok, hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (ok and string.len(hex) >=23 ) then\n -- 2 2 1 4 4 2\n -- 0001 26C6 81 0D6FFDA1 FFDACFBE F831\n \tlocal scale = 1000000.00;\n\t\tlocal temp = iota.hexToShort(hex,11,'B')/100.0;\n local xa = iota.hexToInt(hex,13,'B')/scale;\n local ya = iota.hexToInt(hex,17,'B')/scale;\n if (temp>45) then\n -- invalid data\n out.data={\n }\n out.result={\n code=1002,\n msg="over range"\n }\n else\n out.data = {\n x=xa,\n y = ya,\n \t\ttemp = temp,\n }\n end\n else\n \tlocal msg\n if ok then\n msg= 'Invalid Msg, len='..string.len(hex)\n else \n msg="Timeout" \n end\n out.result = {code=1001,msg=msg}\n out.data = {}\n end\n return json.encode(out)\nend INLINE 2017-10-26 18:00:28.916+08 2018-12-11 10:10:37.999+08 2017-10-26 \N
+7bd91ff4-9649-4345-abc5-69e305a0738a TempHumi_CYKJ_1142 \N 1.0 5f62fd39-0b72-492e-99be-308c935c1b64 5f62fd39-0b72-492e-99be-308c935c1b64 f 5f62fd39-0b72-492e-99be-308c935c1b64 Lua --[[\n//01 协议文档/7月第1周/北京长英科技/1269848304703_f_0001.pdf\n协议号: 1142;\n]]--lucas\n\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "TempHumi_CYKJ_1142.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n\t-- 模块号\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0x3a, BE);--':'冒号 起始符\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE); -- 1: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x04, BE);--读命令\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n buff=iota.appendHexByte(buff, 0x80, BE);-- 2: 读取寄存器地址\n buff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x03, BE);-- 3: \t读取寄存器数量\n local check=LCR(string.sub(buff,3,-1))\n buff=buff..check -- 5: LRC\n\tbuff=iota.appendHexByte(buff, 0x0d, BE);-- 4: \t结束符0x0d\n\tbuff=iota.appendHexByte(buff, 0x0a, BE);-- 4: \t结束符0x0a\n --转ASCII\n local str_ascii=""\n for i=3,string.len(buff)-4,1 do \n --print(string.byte(string.sub(buff,i,i)))\n local aa=string.format("%#x",string.byte(string.sub(buff,i,i)))\n local aa_hex=string.sub(aa,-2,-1)\n --print(aa_hex)\n str_ascii=str_ascii..aa_hex\nend\nlocal request=string.sub(buff,1,2)..str_ascii..string.sub(buff,-4,-1)\n \n\treturn request\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 3a0204060102219f02c1990d0a moduleId=2\n--原始数据 温度25.9735,湿度70.56 \nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\n\telse\n\t\t\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal TH=string.sub(data,13,14);\n\t\tlocal TL=string.sub(data,15,16);\n\t\tlocal Temp = (bit:_and(tonumber(TH,16),0x07)*256+tonumber(TL,16))*0.0625; --温度\n log.debug("temp等于:%s",temp)--测试用\n\t\tlocal flag=bit:_and(tonumber(TL,16),0x08);\n\t\tif(floag==0x08) then --判断正负号\n\t\t Temp=-1*Temp; \n\t\tend\n\t\t\n\t\tlocal HH=string.sub(data,17,18);\n\t\tlocal HL=string.sub(data,19,20);\n\t\tlocal Hum = (tonumber(HH,16)*256+tonumber(HL,16))/10.0; --湿度\t\t\t\t\t\n\t\tout.data = {\n\t\ttemp=Temp,\n\t\thum=Hum\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction IsValid(data)\n\tif string.len(data)/2 ~=13 or iota.hexToByte(data, 2,'B')~=0x04 then\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 1001\n\t\treturn true\n\tend\n\t\n\treturn false\n\t\nend\n\n\nfunction LCR(buff)\n local lcr = 0\n for i = 0, string.len(buff)/2-1 do\n lcr = lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)\n end \n local value= string.format("%02x",bit:_not(lcr) + 1)\n local byte = string.sub(value,string.len(value)-1,string.len(value))\n return byte\nend INLINE 2017-09-18 21:04:31.629+08 2018-02-28 18:32:12.196+08 2017-09-18 \N
+2eae02f9-d98b-4ac9-b5a0-67f355eb62f4 yx_vibrateWire_1401 \N 1.0 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f 67c8b9e9-38d6-4c9a-8772-9c96d78121ed Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\nstart=function()\n log.debug("zxc123 root device = %s", json.encode(device))\n\tlog.debug("start load yx_1401 moudle = %s ",device.uplink.props.module)\n --log.debug("yx_1401 root device = %s", json.encode(device))\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n \n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n \tfor index,child in pairs(subdevices) do \n \t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("yx_1401 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t moduleNo=child.props.moduleId\n\t\t\t channelNo=child.props.channelId \n\t\t\t log.debug("yx_1401 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n\t\t -- local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexWord(buff, 10, endian) ---2: 传感器类型\n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x01, endian) -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian) -- 1: 通道号\n\t\t\tbuff=iota.appendHexByte(buff, 0x67, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0)\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlog.debug("yx_1401 module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tlocal result='{}'\n if ok then \n\t\t\t result = unmarshall(resp,child,tostring(moduleNo),tostring(channelNo))--解析单条数据\n\t\t\t table.insert(out.data,result)\n\t\t\telse\n local errorSubData={\n data ={},\n device=child.id,\n type=1 \n }\n errorSubData.result = {code=1001,msg='通道采集超时'} \n \t\ttable.insert(out.data,errorSubData)\n\t\t\t log.debug("yx_1401 module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("yx_1401:".."subdevices是nil")\n \treturn nil\n end\n\tlocal resultData =json.encode(out)\n ctx:done(resultData)\nend\n\n\n--000A000181016F0044E59D5D43BA104741CF000094A8 moduleId=1 channelID=1\n--000A0FA681096F0044E59D5D43BA104741CF00009659 moduleId=4006 channelID=9 原始值 frequency=1836.918 temp=25.875 \nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n\t--local subModuleId=module\n\t--local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n log.debug("yx_1401 module=%s,channel=%s [%s] recv=[%s].",subModuleId,subChannelId,subDevice.id,hex)\n if ErrorCode then \n\t\tlocal freState=iota.hexToByte(hex,7,'B')%16\n\t\tlocal tempState=iota.hexToByte(hex,7,'B')-16\n\t\t\n\t\tif freState ~= 0 or tempState ~= 0 then\n\t\t\tif freState ~=0 then\n\t\t\t\tif tempState ~=0 then\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE_TEMPWIRE'\n\t\t\t\terrcode = 140103\n\t\t\t\tlog.debug('yx_1401 ERR_VIBRW_FREWIRE_TEMPWIRE. module=%s,channel=%s ',subModuleId,subChannelId)\t\t\t \n\t\t\t\tend\t\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE'\n\t\t\t\terrcode = 140101\n\t\t\t\t\n\t\t\tend\t\t\t\t\t\t\n\t\t\terrormsg = 'ERR_VIBRW_TEMPWIRE'\n\t\t\terrcode = 140102\n\t\tend\n\t\t\n\t\tlocal freq=iota.hexToFloat(hex,8,'B',3)\n\t\tlocal am=iota.hexToFloat(hex,12,'B',3)\n local temp = iota.hexToFloat(hex,16,'B',3)\n log.debug("yx_1401 module=%s,channel=%s [%s] [freq=%s,am=%s,temp=%s].",subModuleId,subChannelId,subDevice.id,freq,am,temp) \n\t\tlocal Phy=0\n if subDevice.uplink.capabilities[1].formula.metaid == "73db0431-7f3c-451d-9852-38c75cdf1b79" then --振弦公式\n\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K \n\t\t\t\tlog.debug('yx_1401 [%s] K1111111111111(振弦)子设备:subDevice.uplink.capabilities[1].formula.props.K',k )\n\t\t\t\tlocal kt = subDevice.uplink.capabilities[1].formula.props.Kt \n\t\t\t\tlog.debug('yx_1401 [%s] kt2222222222222(振弦)子设备:subDevice.uplink.capabilities[1].formula.props.Kt',kt )\n\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo \n\t\t\t\tlog.debug('yx_1401 [%s] f033333333333333(振弦)子设备:subDevice.uplink.capabilities[1].formula.props.Fo',f0 )\n\t\t\t\tlocal t0 = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\tlog.debug('yx_1401 [%s] t044444444444444(振弦)子设备:subDevice.uplink.capabilities[1].formula.props.To',t0 )\n log.debug("yx_1401 module=%s,channel=%s [%s] formula params :k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",subModuleId,subChannelId,subDevice.id,k,kt,f0,t0,freq,temp,am)\n\t\t\t if k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\tlog.debug('yx_1401 [%s] Phy8989898989898989Phy',Phy )\n\t\t\t\tend\n\t\tend\n\t\tsubData.data={\n\t\t\t\t\tfrequency=freq,\n\t\t\t\t\ttemperature=temp,\n\t\t\t\t\tam=am,\n \tphysicalvalue=Phy\n\t\t\t\t\t}\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\n\nIsValid=function(data,moduleId,channelId)\n if data == nil or string.len(data)/2 ~= 22 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('yx_1401 : Data is nil or invalid length. module=%s channel=%s recv = %s',moduleId,channelId,data)\n return false\n end\n if iota.hexToByte(data,4,'B') == 0xc0 then\n errcode = 1001\n errormsg = 'Modbus Error Code ' \n\t\tlog.debug('yx_1401 : Modbus Error Code = %s. module=%s channel=%s recv = %s',iota.hexToByte(data,5,'B'),moduleId,channelId,data)\n return false\n end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,2,'B'))\n\tif moduleId~= moduleStr then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug('yx_1401 : module error [errmodule=%s]. module=%s channel=%s recv = %s',moduleStr,moduleId,channelId,data)\n return false\n end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,5,'B'))\n\tif(channelStr=='0') then\n\t channelStr='1'\n\tend\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('yx_1401 : channel error [errchannel=%s]. module=%s channel=%s recv = %s',channelStr,moduleId,channelId,data)\n\t\treturn false\n\tend\n return true\nend\n INLINE 2019-02-25 16:48:23.97+08 2020-05-08 17:27:45.804+08 2019-02-25 \N
+01baa98e-542d-4c05-99d1-8f46f984e13c yx_waterLevel_9024 \N 北京岩信静力水准仪协议 1.0 ff67841c-7b79-4928-90b3-6782e69c14e9 ff67841c-7b79-4928-90b3-6782e69c14e9 f ff67841c-7b79-4928-90b3-6782e69c14e9 Lua \n--//01 协议文档/9月第5周/华北--北京岩信科技-静力水准仪 485协议/通讯数据说明--北京岩信.docx\nstart = function()\n log.debug('start %s, ctx=', 'yx_waterLevel_9024.lua', device.uplink.props.module)\n ok = ctx:asend('0123')\nend\n--2330384f5742452030303e4352433a303120303232432030464634203031393220324346460d0a\n--moduleId=8\n--channelId=2\n--"height": 255.25,\n--"temp": 25.125,\n--"voltage": 2.75\n\nonData =function(hex)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n log.debug('yx_waterLevel_9024 hex=%s', hex)\n local deviceModule=device.uplink.props.module\n local ErrorCode = IsValid(hex,deviceModule)\n if ErrorCode then\n local sData = HexToStr(hex)\n log.debug('yx_waterLevel_9024 sData=%s', sData)\n local dataModule = tonumber(string.sub(sData, 2, 3))\n local dataChannel = tonumber(string.sub(sData, 16, 17))\n local childDevice = getDeviceInfo(dataModule, dataChannel)\n\n local deviceId\n if childDevice ~= nil then\n deviceId = childDevice.id\n local subHexData = string.sub(sData, string.len(sData)-19+1, string.len(sData)-19+12)\n subHexData = string.gsub(subHexData, ' ', '')\n log.debug('yx_waterLevel_9024 subHexData=%s', subHexData)\n local volt = iota.hexToByte(subHexData, 0, 'B') / 16.0\n local heigh = iota.hexToShort(subHexData, 1, 'B')\n if heigh > 32768 then\n heigh = (32768 - 65536) / 5.0\n else\n heigh = iota.hexToShort(subHexData, 1, 'B') / 16.0\n end\n local temperature = iota.hexToShort(subHexData, 3, 'B')\n if temperature > 32768 then\n temperature = (32768 - 65536) / 5.0\n else\n temperature = iota.hexToShort(subHexData, 3, 'B') / 16.0\n end\n local subdata = {\n data = {\n height = heigh,\n temperature = temperature,\n voltage = volt\n },\n device = deviceId,\n type = 1\n }\n log.debug('yx_waterLevel_9024 m=%s,c=%s subdata=%s', tostring(moduleNo), tostring(channelNo), json.encode(subdata))\n table.insert(out.data, subdata)\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n ctx:notify(resultData)\nend\n\nIsValid = function(data,devicemoduleStr)\n if string.len(data) / 2 ~= 39 or iota.hexToByte(data, 1, 'B') ~= 0x30 then\n errormsg = 'Data is Invalid'\n errcode = 1001\n return false\n end\n --iota.checkPlusSum16\n\n --判断模块号通道号 是否正确\n local hexData = HexToStr(data)\n local dataModuleNo = tonumber(string.sub(hexData, 2, 3), 16)\n local isAddressOK = tonumber(devicemoduleStr)==dataModuleNo\n\n if isAddressOK == false then\n errormsg = '模块号无效'\n errcode = 1004\n log.debug('yx_waterLevel_9024 模块地址校验:错误')\n return false\n else\n log.debug('yx_waterLevel_9024 模块地址校验:正确')\n end\n return true\n --crc\nend\n\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n\n--字符串ascii->字符\nHexToStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo =\n function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("yx_waterLevel_9024 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n log.debug('yx_waterLevel_9024 查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n log.debug('yx_waterLevel_9024 子设备模块通道 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tostring(channelStrCheck) == tostring(channelNoId) then\n log.debug('yx_waterLevel_9024 m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('yx_waterLevel_9024 subdevices是nil')\n return nil\n end\nend INLINE 2017-09-02 14:28:26.66+08 2018-11-17 15:58:48.487+08 2017-09-02 \N
+98bc146d-21ca-4382-bfa0-e362c953a2ab shangheng_pressure_1 \N 1.0 eb23c67c-17aa-4909-8bba-8119130ed7f8 eb23c67c-17aa-4909-8bba-8119130ed7f8 f eb23c67c-17aa-4909-8bba-8119130ed7f8 Lua --04 项目资料/2018-01/河北路凯铁路实验项目监测/通讯协议说明/绳索张力传感器.pdf (说明文档命名错误,其实是模拟量采集仪 协议)\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n--bit 操作\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n\n\nstart=function()\n log.debug("start %s, ctx=%s", "shangheng_pressure_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexByte(buff, 0x52, endian) \n buff=iota.appendHexByte(buff, 0x44, endian) \n buff=iota.appendHexByte(buff, 0x53, endian) \n buff=iota.appendHexByte(buff, tonumber(device.props.moduleId)+64, endian) \n buff=iota.appendHexByte(buff, checkPlusSum(buff,1,4), endian) \n buff=iota.appendHexByte(buff, 0x0D, endian) \n\t\n log.debug("send %s, ctx=%s", "shangheng_pressure_1.lua",buff)\n local ok=false\n \tfor i=1,3,1 do\n if ok==false then\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n\t\t\t ctx:done(result)\n end\n end\n end\n \nend\n--1803040000000072f2 模块号24 数据0\nunmarshall=function(hex)\n log.debug("收到数据:recv %s, ctx=%s", "shangheng_pressure_1.lua",hex)\n local out={\n type = 2,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==22) then\n \n\t\t\n\n\t\t--024244383030303038360d 实际回复\n\n\n --print("parsing data", hex)\n log.debug("shangheng_pressure_1:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n local sData=string.reverse(string.sub(hex,8,8)..string.sub(hex,10,10)..string.sub(hex,12,12)..string.sub(hex,14,14)..string.sub(hex,16,16))\n local str_index=string.sub(hex,18,18)\n\t\tlocal num_index=tonumber(str_index,16)\n\t\tlocal pressure\n\t\tif (num_index %8)==4 then\n\t\t\tpressure= tonumber(sData,16)*-1\n\t\t\telse\n\t\t\tpressure= tonumber(sData,16)\n\t\tend\n\n\t\t-- local pressure= pressure1*2^16+pressure2 --32位有符号整数\n\t\tlog.debug("shangheng_pressure_1 模块%s的 当前的pressure是:%s",device.props.moduleId,pressure)\n --获取通道设备deviceId\n local childDevice=getDeviceInfo(1)\n local deviceId\n if childDevice~=nil then\n deviceId=childDevice.id\n log.debug("shangheng_pressure_1:子设备原形childDevice=%s",json.encode(childDevice))\n log.debug("shangheng_pressure_1:子设备deviceId: "..tostring(deviceId))\n \n \n local data1 = {\n data={\n pressure= pressure,\n },\n device=deviceId,\n type=1 \n };\n \n table.insert(out.data,data1)\n\n end\n\n else\n local message = "Invalid Msg, len is not rigth"\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("return %s, ctx=%s", "shangheng_pressure_1.lua",json.encode(out))\n return json.encode(out)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(channelNoId)\n if device.dnlinks[1].devices ~=nil then\n log.debug(" channelId="..tostring(channelNoId))\n --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n \t--if child.props.moduleId==tostring(moduleNoId) then\n\t\t \tif child.props.channelId == tostring(channelNoId) then\n log.debug("shangheng_pressure_1:".."DeviceInfo是:"..tostring(child.id))\n \t\tlog.debug("shangheng_pressure_1:".."子设备原形child=%s",json.encode(child))\n \t --return child.device.id\n return child\n end\n \t \t--end\n\t\tend\n else\n log.debug("shangheng_pressure_1:".."device.dnlinks[1].devices是nil")\n \treturn nil\n end\nend\n \ncheckPlusSum=function(data,startindex,endindex)\n local sum = 0\n for i=startindex,endindex do\n if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)),16)) % 0xffff\n end\n end \n sum = bit:_and(sum ,0xff)\n return sum%128\nend \n\n \n\n INLINE 2018-03-09 14:49:54.747+08 2018-03-13 11:36:07.98+08 2018-03-09 \N
+29c24e0f-e684-4875-9e8a-2d0650310192 anfang_inclin_1 \N 测斜,主动上传 1.0 0be11993-6e55-415e-b770-792f29f98f9f 0be11993-6e55-415e-b770-792f29f98f9f f 0be11993-6e55-415e-b770-792f29f98f9f Lua start=function()\n log.debug("anfang_inclinometer_1.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n log.debug("anfang_inclinometer_1.lua: Data, ctx=%s",hex)\n local out={\n data ={},\n result = {}\n }\n --ff41584a23313832363036333634323923ffffffffffffff000200010cf15b0b9ffe00010002ffffffff4f18eeee\n\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local xData = iota.hexToShort(hex,34,'B')/1000.000;\n local yData = iota.hexToShort(hex,36,'B')/1000.000;\n --local zData = iota.hexToShort(hex,38,'B')/1000.000;\n --local temp = iota.hexToShort(hex,40,'B')/100.000;\n \n out.data = { \n anglex=xData,\n angley=yData,\n --anglez=zData,\n --temperature=temp\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("anfang_inclinometer_1: cloudvibrate=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'anfang_inclinometer_1:Data is nil'\n errcode = 1001\n return false\n end\n local length= iota.hexToByte(data,28,'B')\n if (string.len(data)/2~=(length+34)) then\n errormsg = 'anfang_inclinometer_1:Data length is wrong'\n errcode = 1001\n return false\n end\n \n local sensorType= iota.hexToShort(data,24,'B')\n if (sensorType~=2) then\n errormsg = string.format('anfang_inclinometer_1:sensorType is wrong=%s',sensorType)\n errcode = 1001\n return false\n end\n local moduleId= iota.hexToShort(data,26,'B')\n if (device.uplink.props.module~=tostring(moduleId)) then\n errormsg = 'anfang_inclinometer_1:module is wrong'\n errcode = 1001\n return false\n end\n local subdata=string.sub(data,1,-9)\n local crc=iota.appendHexCrc(subdata, 'B' ,0)\n log.debug("anfang_inclinometer_1.lua: crc, ctx=%s",crc)\n local subdatacrc=string.sub(data,1,-5)\n log.debug("anfang_inclinometer_1.lua: subdatacrc, ctx=%s",subdatacrc)\n if (string.lower(crc)~=string.lower(subdatacrc)) then\n errormsg = string.format('anfang_inclinometer_1:crc[%s]≠[%s]',subdatacrc,crc)\n errcode = 1001\n return false\n end\n \n return true\n \nend\n \n INLINE 2018-05-29 14:49:18.069+08 2019-05-05 13:59:41.805+08 2018-05-29 \N
+40879c58-2d96-4474-88b4-fcbda49d1ab2 jm_lvdt_1554 \N 倾角式静力水准仪协议 1.0 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c f 5b2dc320-50f8-4461-87fc-03b66e3e5e4c Lua start =\n function()\n log.debug('start %s, moduleId=%s', 'jm_lvdt_1554.lua', device.props.moduleId or 'nil')\n\n local endian = 'B'\n local buff = ''\n buff = iota.appendHexByte(buff, 0x23, endian)\n buff = iota.appendHexByte(buff, 0x2b, endian)\n\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n if string.len(moduleNo) < 6 then\n local strlen = 6 - string.len(moduleNo)\n for i = 1, strlen do\n moduleNo = '0' .. moduleNo\n end\n end\n buff = buff .. toHexStr(string.sub(moduleNo, 1, 1))\n buff = buff .. toHexStr(string.sub(moduleNo, 2, 2))\n buff = buff .. toHexStr(string.sub(moduleNo, 3, 3))\n buff = buff .. toHexStr(string.sub(moduleNo, 4, 4))\n buff = buff .. toHexStr(string.sub(moduleNo, 5, 5))\n buff = buff .. toHexStr(string.sub(moduleNo, 6, 6))\n log.debug('jm_lvdt_1554 moduleId=%s send: %s', moduleNo or 'nil', buff)\n ok, resp = ctx:ssend(buff, 15000)\n local result = '{}'\n if ok then\n result = unmarshall(resp, moduleNo)\n else\n local errorout={\n data ={},\n result = {}\n }\n \t errorout.result = {code=1003,msg="采集超时"}\n result=json.encode(errorout)\n end\n ctx:done(result)\nend\n\nunmarshall =\n function(hex, moduleNoStr)\n --24596148594963486349634850 module=1\n --"level":1095.05,\n --"temp": 10644.7\n log.debug('jm_lvdt_1554 收到数据=' .. hex)\n local out = {\n type = 1,\n data = {},\n result = {}\n }\n\n local ErrorCode = IsValid(hex, moduleNoStr)\n if ErrorCode then\n local level\n local level0\n local temp\n log.debug('jm_lvdt_1554 解析数据hex=%s', hex)\n local data1 = ((tonumber(string.sub(hex, 3, 4), 16) - 48) * 16 + (tonumber(string.sub(hex, 5, 6), 16) - 48) + (tonumber(string.sub(hex, 7, 8), 16) - 48) * 16 * 16 * 16 + (tonumber(string.sub(hex, 9, 10), 16) - 48) * 16 * 16) -- / 100\n local data2 = ((tonumber(string.sub(hex, 11, 12), 16) - 48) * 16 + (tonumber(string.sub(hex, 13, 14), 16) - 48) + (tonumber(string.sub(hex, 15, 16), 16) - 48) * 16 * 16 * 16 + (tonumber(string.sub(hex, 17, 18), 16) - 48) * 16 * 16) -- / 100\n -- temp = ((tonumber(string.sub(hex, 19, 20), 16) - 48) * 16 + (tonumber(string.sub(hex, 21, 22), 16) - 48) + (tonumber(string.sub(hex, 23, 24), 16) - 48) * 16 * 16 * 16 + (tonumber(string.sub(hex, 25, 26), 16) - 48) * 16 * 16 - 500) --/ 10\n local x1=(data2/10000-2.5)/4\n local y1=(data1/10000-2.5)/4\n local anglex= math.deg(math.asin(x1))\n local angley= math.deg(math.asin(y1))\n local angle=(anglex-angley)/2\n \tlog.debug('jm_lvdt_1554 结果 anglex=%s,angley=%s,temp=%s', anglex, angley, temp)\n local A = device.props.A\n local B = device.props.B\n local C = device.props.C\n log.debug('jm_lvdt_1554 公式参数A=%s,B=%s,C=%s', A, B, C)\n if A ~= nil and B ~= nil and C ~= nil and isValidParameter(A, B, C) then --and isValidParameter(A,B,C)\n level = A * angle ^ 2 + B * angle + C\n --level0 = A * angley ^ 2 + B * angley + C\n else\n out.result = {code = 1002, msg = '公式参数错误,请检查'}\n end\n out.data = {\n length = string.format('%0.3f',level) --,\n -- level0 = string.format('%0.3f',level0) --,\n -- temp = temp\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n return json.encode(out)\nend\n\nIsValid = function(data, moduleNoStrCheck)\n log.debug('jm_lvdt_1554 开始校验数据=%s', data)\n local checkLength = string.len(data) / 2\n if data == nil or checkLength ~= 9 then\n errormsg = 'Data is nil or invalid length=' .. checkLength\n errcode = 1001\n log.debug('jm_lvdt_1554 [%s] 长度校验失败 data=%s', moduleCheck, data)\n return false\n end\n --log.debug('jm_lvdt_1554 CMD=%s',iota.hexToByte(data,0,'B'))\n\n log.debug('jm_lvdt_1554 [%s] 数据校验通过', moduleCheck)\n return true\n --crc\nend\n\n-- 字符串 -> BCD\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n\nisValidParameter = function(...)\n local paras = {...}\n for k, v in pairs(paras) do\n -- log.debug('k=%s,v=%s',k,v)\n local isNum = IsNumberic(v)\n --log.debug('isNum=%s',isNum)\n if isNum == false then\n return false\n end\n end\n return true\nend\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend INLINE 2018-11-16 17:26:35.81+08 2018-11-20 16:36:57.342+08 2018-11-16 \N
+9471a5e1-b72a-4a1f-ab9e-2e5c6e42b4e7 dihui_weather_2403 \N 1.0 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 f 24ba1243-7e9a-4449-891c-e85657f257b5 Lua \n--//协议文档/期望先接入硬件/北京迪辉科技/迪辉科技DTU-C1W1Z使用手册-修改0615.pdf\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n--\n\nstart=function()\n -- log.debug("load script %s, moduleId=%s", "dihui_2403.lua", device.props.moduleId or "[nil]")\n -- log.debug("dihui_2403:".."LUA: ctx is =%s", json.encode(device))\n -- ok,resp=ctx:ssend("0102030405060708",15000)\n -- log.debug("dihui_2403:".."测试下发正常")\nend\n\n--实时数据 步骤1\n--EB90010E10050D0B0A00D204390402016D01624B\n\n\n--协议下发请求设备信息\n--474554444556494e464f\n\n--设备信息 步骤2\n--EB90041731353132313130303033303030303031D2040301163103342B\n\n--m=1 c=22 phy1=1459.6 \n\n\n\n\nonData=function(hex)\n log.debug("dihui_2403:LUA: onData: data is =%s", hex)\n\tlog.debug("dihui_2403:LUA:device : data is =%s", json.encode(device))\n --log.debug("dihui_2403:LUA:subdevices : data is =%s", json.encode(device.dnlinks[1].devices))\n\n local out={\n data ={},\n result = {},\n type=2\n }\n \n\n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\t \n\t local buffer=hex\n\t\tlocal id=iota.hexToUShort(buffer,10,'L')\n\t\tlog.debug("dihui_2403:id=%s",id)\n\t\tlocal ok,deviceTable=GetDevice() --获取设备信息\n if ok then\n\t\t\tfor k,node in ipairs(deviceTable) do\n\t\t\t\tlog.debug("dihui_2403:k=%s,node=%s",k,json.encode(node))\n\t\t\t local offset=12\n\t\t\t\tlocal raw={}\n\t\t\t\tlocal count=node.nodeSubDataCount--传感器 数据项数\n\t\t\t\tlog.debug("")\n\t\t\t\tfor j=1,count,1 do\n\t\t\t\t local num_r=iota.hexToUShort(buffer,offset,'B')\n\t\t\t\t\traw[j]=GetFloat(node.nodeType,j,num_r)--node列表的顺序需与数据的顺序一致\t\t\t\t\t\n\t\t\t\t\toffset=offset+2\n\t\t\t\tend\n\t\t\t\tlocal channelNo=node.nodeAddr\n\n\t\t\t\tlocal moduleNo=1 --device.uplink.capabilities[1].props.moduleId 该设备没有模块号 默认是1\n\t\t\t\tlog.debug("dihui_2403:")\n \t\tlog.debug("dihui_2403:查询m=%s,c=%s的设备deviceId",moduleNo,channelNo)\n\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\t\t\t\t\n\t\t\t\tlocal deviceId\n\t\t\t\tif childDevice~=nil then\n\t\t\t\t\tlog.debug("dihui_2403:m=%s,c=%s的设备device=%s",moduleNo,channelNo,json.encode(childDevice))\n\t\t\t\t\tdeviceId=childDevice.id\t\t\t\t\t\t\t\t\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tphy1=raw[1],\n\t\t\t\t\t\t\t\t\t\tphy2=raw[2],\n\t\t\t\t\t\t\t\t\t\tphy3=raw[3],\n\t\t\t\t\t\t\t\t\t\tphy4=raw[4],--为nil不显示\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\tlog.debug("dihui_2403:m=%s,c=%s的设备data=%s",moduleNo,channelNo,json.encode(data1))\n\t\t\t\telse\n\t\t\t\t\tlog.debug("dihui_2403:m=%s,c=%s的设备device=nil",moduleNo,channelNo)\n\t\t\t\tend \n\t\t\tend\n\t\tend \n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("dihui_2403:LUA:resultData : data is =%s", json.encode(out))\n ctx:notify(resultData)\n\nend\n\n\n\nGetFloat=function(nodeType,index,num)\n\t \n\tif nodeType==0x1a then\n\t\tnum=num/100.0\n\t\treturn num\n\tend\n\t\n\tif nodeType==0x26 then\n\t\treturn num\n\tend\n\t\n\tif nodeType==0x24 then\n\t\tif index==1 then\n\t\t\treturn num\n\t\tend\n\tend\n\t\n\tif nodeType==0x33 then\n\t\tif index==2 then\n\t\t\treturn num\n\t\tend\n\tend\n\t\n\tif nodeType==0x41 then\n\t\tif index==2 or index==3 then\n\t\t\treturn num\n\t\tend\n\tend\n\t\n\t--default\n\tnum=num/10.0 \n\treturn num\nend\n\n--获取设备下面 每个传感器信息(重点:顺序)\nGetDevice=function()\n log.debug("dihui_2403:开始发送GETDEVINFO 获取设备信息")\n local deviceInfo={}\n local cmd_hex=StrToHex("GETDEVINFO")\n ok,resp=ctx:ssend(cmd_hex,15000)\n if ok then\n\t local dtuid_hex=string.sub(resp,2*4+1,2*20)\n\t local dtuid=HexToStr(dtuid_hex)\n\t\tlocal deviceId=iota.hexToUShort(resp,20,'L')\n\t\tlocal deviceType=iota.hexToByte(resp,22,'L') \n\t\tlocal nodeCount=iota.hexToByte(resp,23,'L')--节点数量\n\t\tlog.debug("dihui_2403:dtuid=%s,deviceId=%s,deviceType=%s,nodeCount=%s",dtuid,deviceId,deviceType,nodeCount)\n\t\tfor i=1,nodeCount,1 do\n\t\t\tlocal nodeAddr=iota.hexToByte(resp,24+3*(i-1),'L')\n\t\t\tlocal nodeType=iota.hexToByte(resp,24+3*(i-1)+1,'L')\n\t\t\tlocal nodeSubDataCount=iota.hexToByte(resp,24+3*(i-1)+2,'L')\n\t\t\tdeviceInfo[i]={\n\t\t\t\t\t\t\tnodeAddr=nodeAddr,\n\t\t\t\t\t\t\tnodeType=nodeType,\n\t\t\t\t\t\t\tnodeSubDataCount=nodeSubDataCount\n\t\t\t\t\t\t\t}\n\t\tend\n\t\t\n\t else\n\t log.debug("dihui_2403:获取传感器信息失败")\n\tend\n\t log.debug("dihui_2403:设备信息 ok=%s,deviceInfo=%s",ok,json.encode(deviceInfo))\n return ok,deviceInfo\nend\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("dihui_2403:".."查询子设备原形child=%s",json.encode(child))\n \tif child.uplink.props.module==tostring(moduleNoId) then\n\t\t \t if child.uplink.props.channel == tostring(channelNoId) then\n log.debug("dihui_2403: m=%s,c=%s的deviceId=%s",moduleNoId,channelNoId,tostring(child.id))\n \t\t log.debug("dihui_2403:子设备原形child=%s",json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("dihui_2403:".."subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function(checkData)\n log.debug('dihui_2403:开始校验数据%s',checkData)\n if checkData == nil or string.len(checkData)/2 < 3 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('dihui_2403:模块%s数据 长度校验失败:Data is nil or invalid length',moduleId)\n return false\n end\n if iota.hexToByte(checkData,0,'B') ~= 0xEB or iota.hexToByte(checkData,1,'B') ~= 0x90 or iota.hexToByte(checkData,2,'B')==3 or iota.hexToByte(checkData,2,'B')>4 then\n errcode = 1003\n errormsg = 'CMD Error Code ' \n\t\tlog.debug('dihui_2403:数据校验CMD 失败')\n return false\n end\n\n -- local data=string.sub(checkData,1,length*2)\n -- log.debug("data:"..data)\n -- local plu16={}\n -- plu16[0]=string.sub(data,-8,-7)\n -- plu16[1]=string.sub(data,-6,-5)\n -- local plusSum16Hi,plusSum16Lo = iota.hexCheckPlusSum16(data,0,length-4);\n -- log.debug("dihui_2403:".."plu16[0]是:"..plu16[0])\n -- log.debug("dihui_2403:".."plu16[1]是:"..plu16[1])\n -- log.debug("dihui_2403:".."plusSum16Hi是:"..tostring(plusSum16Hi))\n -- log.debug("dihui_2403:".."plusSum16Lo是:"..tostring(plusSum16Lo))\n -- if tonumber(plu16[0],16)~=plusSum16Hi or tonumber(plu16[1],16)~=plusSum16Lo then\n -- errormsg = 'checkPlusSum16 is false'\n -- errcode = 1004\n -- return false\n -- end\n\n log.debug("dihui_2403:校验通过")\n return true\nend\n\n\n\n -- 字符串 -> Hex\nStrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n-- Hex-> 字符串 \nHexToStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\n\nend INLINE 2018-03-16 09:55:23.493+08 2018-03-19 15:31:17.754+08 2018-03-16 \N
+3bf53c5f-a9a9-4cb9-940e-9f98dc62d3b2 hrck_pressure_1 \N 8003\\8006 1.0 df6e436e-e4a6-4b25-b1c7-175209753c0f df6e436e-e4a6-4b25-b1c7-175209753c0f f df6e436e-e4a6-4b25-b1c7-175209753c0f Lua start=function()\n log.debug("start hrck_pressure_1.lua , ctx= %s",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n \tlocal moduleNo=device.uplink.props.module \n buff=iota.appendHexByte(buff, moduleNo, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 1, endian)\n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 2, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug(" hrck_pressure_1 ssend %s",buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n log.debug(" hrck_pressure_1 recieve %s",hex)\n local out={\n data ={},\n result = {}\n }\n local moduleStr=iota.hexToByte(hex,0,'B')\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local pressure = iota.hexToInt(hex,3,'B')/1.000\n \n out.data = {\n pressure=pressure,\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('hrck_pressure_1 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('hrck_pressure_1 数据校验通过')\n return true\n--crc\nend\n INLINE 2018-08-07 15:29:52.034+08 2018-08-10 16:29:34.604+08 2018-08-07 \N
+0b96499d-fce5-4592-aa19-a1df21da56c7 bjhk_wind \N 北京华控兴业科技 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --字符串ascii->字符\nstart=function()\n log.debug("bjhk_wind: start module %s, ctx=", json.encode(device.uplink.props.module))\n\tlocal moduleid = device.uplink.props.module\n\tlocal cmd = string.format(moduleid,16)\n\tcmd=iota.appendHexByte(cmd,3,'L')\n\tcmd=iota.appendHexWord(cmd,0x2A,'L')\n\tcmd=iota.appendHexWord(cmd,0x02,'L')\n\tcmd=iota.appendHexCrc(cmd, 'B' ,0)\n\tok,resp=ctx:ssend(cmd,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex,modulestr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n local speed = iota.hexToShort(hex,6,'B')\n local direction = iota.hexToShort(hex,8,'B')\n\n \n out.data = {\n windSpeed=speed,\n windDirection = direction\n };\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n\n\n\n\nIsValid=function(alldata)\n log.debug("bjhk_wind: 校验开始")\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n\t\tlog.debug("SMARTIT: 校验失败 Data is nil")\n return false\n end\n return true\nend\n\n INLINE 2018-12-14 15:18:25.124+08 2018-12-15 10:58:52.304+08 2018-12-14 \N
+73ea7fd7-c191-4b58-8bb3-ea0177dc8e95 hd_httpMQTT \N 1.0 fff3496c-71e7-4ca5-abe5-9de748ac5a63 fff3496c-71e7-4ca5-abe5-9de748ac5a63 f fff3496c-71e7-4ca5-abe5-9de748ac5a63 Lua \nstart = function()\n log.debug('hd_httpMQTT device=%s', json.encode(device))\n\tlog.debug('hd_httpMQTT device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n\n log.debug('hd_httpMQTT', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n \n log.debug('hd_httpMQTT [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n\n local timeStamps=bodypkg['t']\n\tlog.debug('hd_httpMQTT [%s] 时间戳', tonumber(timeStamps))\n local allData=bodypkg['d']\n\tlog.debug('hd_httpMQTT 得到所有数据%s ', json.encode(allData))\n\n\tfor k,v in pairs(allData) do\n\t local n=v.n\n\t local anglex=v.x\n\t\tlocal angley=v.y\n\t\n\t\t\n\t\tlocal childDevice = getDeviceInfos(moduleNo,n)\n\t\t\t\tlog.debug('hd_httpMQTT 查询到子设备%s ', json.encode(childDevice))\t\t\n\t\t\t\tif\tchildDevice~=nil then\n\t\t\t\t\tlocal data1 = {\n data = {\n xphysicalvalue = anglex,\n\t\t\t\t\t\t\typhysicalvalue = angley\n\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n },\n device = childDevice.id,\n time=timeStamps,\n type = 1\n }\n\t\t\t\t\ttable.insert(out.data, data1)\n\t\t\t\telse\n\t\t\t\t\tlog.debug('hd_httpMQTT 子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\t\t\tend\n\tend \n log.debug('hd_httpMQTT [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\ngetDeviceInfos=function(moduleNo,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n log.debug("hd_httpMQTT 查询m=%s c=%s 子设备deviceId",tostring(moduleNo),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("hd_httpMQTT:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNo),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("hd_httpMQTT 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t log.debug("hd_httpMQTT 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n if tostring(channelStrCheck) == tostring(channelNoId) then\n log.debug('hd_httpMQTT: m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n \t\n\t\tend\n else\n log.debug("hd_httpMQTT: subdevices是nil")\n return nil\n end\nend\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend INLINE 2019-11-01 15:00:48.634+08 2019-11-08 10:59:58.979+08 2019-11-01 \N
+83750550-f9bd-49a2-9ed1-b9c144146435 test \N 1.0 a971c084-cc83-4e41-80f6-c8de9df9b9d6 a971c084-cc83-4e41-80f6-c8de9df9b9d6 f a971c084-cc83-4e41-80f6-c8de9df9b9d6 Lua start=function()\n --log.debug("fs_gnss start moudleid=%s", device.props.pointId or "nil") \n\tlocal req = {\n type= "http",\n --url=device.uplink.props.url.."%s/data?startTime=%s&endTime=%s",\n \turl="https://api.yespowering.cn/login/", \n \tmethod="post",\n \tcontent="application/x-www-form-urlencoded",\n header={}\n }\n --req.body["box_id"] = '35E81PV005'\n req.header["agent"]=0\n\treq.header["language"]="zh"\n\treq.header["brandid"]=38\n\treq.header["token"]='BFED45F6A959DF3ACAFFC8F122BCFC6C'\n\t\t\n local param={\n account= 18673077286,\n\tpw=88888888\n\t\n }\n req.body = json.encode(param)\n --req.url=string.format(req.url, url.escape(json.encode(param)))\n\tlog.debug("yyll ok=%s,ack=%s",ok,ack)\n local ok,ack=ctx:ssend(req,4000)\n log.debug("yyll ok=%s,ack=%s",ok,ack)\n \n local out={\n type = 1\n } \n \n if not ok or ack==nil then\n out.result={\n code=1002,\n msg="timeout",\n }\n else --OK\n\t if ack.code==200 and ack.body ~="" then -- http应答: 200\n\t\t token=json.decode(ack.body) -- 有数据\n\t -- print("qx=", json.encode(qx))\n\t\t --log.debug("qx.code=%d", qx.code)\n\t\t \n\t\t\t\t out.data={\n\t\t\t\t\t -- 解析数据.\n\t\t\t\t\t token=token\n\t\t\t\t\t \n\t\t\t\t }\n\t\t\t\t\n\t\t else -- 调用失败 - 错误.\n\t\t\tout.result={\n\t\t\t code = 1003,\n\t\t\t msg = ack.status,\n\t\t\t detail = "detailerror"\n\t\t\t}\n\t\t end\n\t\t\n end\nend INLINE 2018-05-31 07:36:52.581+08 2018-05-31 08:00:39.917+08 2018-05-31 \N
+85991f31-8b74-4529-98ea-bac8bef43938 JM_1547 \N 新型总线采集仪 1.0 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c f 5b2dc320-50f8-4461-87fc-03b66e3e5e4c Lua --//04 项目资料/2017-06/郑州铁路局科研所/新总线型采集模块指令.pdf\n--require "functions" -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {} //设备信息\nprotocol=> {} //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\nstart=function ()\n\tlog.debug("load script %s, moduleId=%s", "jm_1547", device.moduleId or "[nil]")\n local endian = 'B'\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlog.debug("jm_1547:LUA:根设备devices : data is =%s", json.encode(device)) \n local buff_str='#' \n\tlocal moduleNo=device.props.moduleId\n\t\n if string.len(moduleNo)<8 then --采集箱编号8位\n local strlen=8-string.len(moduleNo)\n \tfor i=1,strlen do\n moduleNo='0'..moduleNo\n end \n end\n\t log.debug("jm_1547:LUA:采集仪 : moduleId =%s", moduleNo) \n buff_str= buff_str..moduleNo..'N!' --下发指令:获取传感器编号\n\t buff=StrToHex(buff_str)\n ok1,resp1=ctx:ssend(buff,15000)\n\t if ok1 then\t\n log.debug("jm_1547:模块%s的采集仪与通道信息接收成功,开始解析 编号与通道关系",moduleNo) \n\t dictionary = getSensorChannel(resp1)--获取传感器编号与传感器通道对照表 返回"C" 传感器型号 编号\n\t log.debug("jm_1547:dictionary=%s",json.encode(dictionary)) \n\t --下发全部测量指令\n\t buff_str='#+'..moduleNo..'A!' --"#" \n\t\tbuff=StrToHex(buff_str)\n\t\tok2,resp2=ctx:ssend(buff,15000)\n\t\tif ok2 then\n\t\tlog.debug("jm_1547:模块%s的采集仪所有传感器采集数据接收成功,开始解析 ",moduleNo) \n result = ParseResult(resp2)\n table.insert(out.data,result)\t\n end\n\t else\n\t log.debug("jm_1547:模块%s的采集仪的接收传感器与通道信息失败",moduleNo) \n\t end\n\t \n log.debug('jm_1547:out序列化')\n local resultData =json.encode(out)\n log.debug("jm_1547:out序列化结果 : out is =%s", json.encode(out))\n ctx:done(resultData)\t\nend\n\n--5431373037313331353139833735ec30303731333032328f32303634378332373531328130b021\nParseResult=function (hex)\n\t-- 二次解析\n\tlog.debug("jm_1547:接收传感器数据 Received=>%s",hex)\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\n\t\tlocal adress=''\n\t\tlocal channelTable={}\n\t\tlocal dataType=iota.hexToByte(hex,0,'B') ---与协议说明iota.hexToByte(data,1,'B')稍有出入,目前以之前的C#协议为准\n\t\tif dataType==0x54 then\t--返回"T" 传感器型号 编号\n\t\t local datalength=string.len(hex)/2\n\t\t for i=0,datalength-1,1 do\n\t\t\t if iota.hexToByte(hex,i,'B')==0x54 then --'T'\n\t\t\t\t adress=adress..tostring(i)..','\n\t\t\t end\n\t\t end\n\t\t \n\t\t local sArray=Split(adress,',')\n\t\t for k,v in ipairs(sArray) do\n\t\t\t\tif v~='' or v~=nil then\n\t\t\t\t\t\n\t\t\t\t\t--table.remove(sArray,k)\n\t\t\t\t\t--log.debug("jm_1547:".."表内的“”和nil 移除元素为 "..tostring(sArray[k]))\n\t\t\t\t\tlocal Type=string.sub(hex,2*(v+12)+1,2*(v+12)+4)\n\t\t\t\t\tlocal strType=HextoStr(Type)\n\t\t\t\t\tif strType=='70' then\n\t\t\t\t\t\tlocal offset=0\n\t\t\t\t\t\tlocal Len=GetCodelen(v,hex);\n\t\t\t\t\t\tlocal hex_sensorid=string.sub(hex,2*(v+17)+1,2*(v+17)+12)\n\t\t\t\t\t\tlocal sensorid=HextoStr(hex_sensorid)\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal hex_height=string.sub(hex,2*(v+24)+1,2*(v+24)+2*Len)\n\t\t\t\t\t\tlocal height=HextoStr(hex_height)\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal leno=GetCodelen(v+Len+1,hex)\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal hex_heights=string.sub(hex,2*(v+24+Len+1)+1,2*(v+24+Len+1+leno))\n\t\t\t\t\t\tlocal heights=HextoStr(hex_heights)\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal moduleNo=device.props.moduleId\n\t\t\t\t\t\tlocal channelNo =dictionary[sensorid] ; \n\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t deviceId=childDevice.id\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal data1={\n\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tdisplacement=height,\n\t\t\t\t\t\t\t\t\t\tr_displacement=heights\t\n\t\t\t\t\t\t\t\t\t\t },\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\ttype=1 ,\n }\n \n\t\t\t\t\t\treturn data1\t\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\t--\n\t\t\t\t\tif strType=='75' then--//测斜\n\t\t\t\t\t\tlocal offset_inclination=0\n\t\t\t\t\t\tlocal Len=GetCodelen(v,hex);\n\t\t\t\t\t\tlocal hex_sensorid=string.sub(hex,2*(v+17)+1,2*(v+17)+12)\n\t\t\t\t\t\tlocal sensorid=HextoStr(hex_sensorid)\n\t\t\t\t\t\tlog.debug('jm_1547:测斜传感器 sensorId=%s',sensorid)\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal hex_X_degree=string.sub(hex,2*(v+24)+1,2*(v+24)+2*Len)\n\t\t\t\t\t\tlocal str_X_degree=HextoStr(hex_X_degree)\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal leno=GetCodelen(v+Len+1,hex)\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal hex_Y_degree=string.sub(hex,2*(v+24+leno+1)+1,2*(v+24+Len+1+leno))\n\t\t\t\t\t\tlocal str_Y_degree=HextoStr(hex_Y_degree)\n \n local X_degree=math.asin((tonumber(str_X_degree)-25000)/40000.0)/0.017453292\n local Y_degree=math.asin((tonumber(str_Y_degree)-25000)/40000.0)/0.017453292\n\n\t\t\t\t\t\tlocal moduleNo=device.props.moduleId\n\t\t\t\t\t\tlocal channelNo =dictionary[sensorid] ; \n\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n \t\t\tlocal deviceId\n \t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\tdeviceId=childDevice.id\n \t\t\t\tlog.debug('jm_1547:模块号=%s,通道号=%s,的deviceId=%s',moduleNo,channelNo,deviceId)\n \t\t\telse\n \t\t\t\tlog.debug('jm_1547:模块号=%s,通道号=%s,的deviceId=nil',moduleNo,channelNo)\n \t\t\tend\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal data1={\n\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tX_degree=X_degree,\n\t\t\t\t\t\t\t\t\t\tY_degree=Y_degree\t\n\t\t\t\t\t\t\t\t\t\t },\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\ttype=1 ,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\treturn data1\n\t\t\t\t\tend\n\t\t\t\t\t\t\n\t\t\t\tend \n\t\t end \n\t\tend\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\telse\n\t log.debug('jm_1547:数据校验失败')\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n\tctx:notify(resultData)\nend\n\nGetCodelen=function(num_str,buff_response)\n local num=tonumber(num_str)\n\tlocal length=0\n\tlocal buff_length=string.len(buff_response)/2\n\tfor j=0,buff_length-num-24,1 do\n\t local Y_str=string.sub(buff_response,2*(num+24+j)+1,2*(num+24+j)+2)\n\t\tlocal Y=tonumber(Y_str,16)\n\t\tif Y>=128 then\n\t\t length=j\n\t\t\tbreak\n\t\tend\n\t \n\tend\n return length\nend\n\ngetSensorChannel=function(channelBuff)\n\t\n\tlocal adress=''\n\tlocal channelTable={}\n local dataType=iota.hexToByte(channelBuff,1,'B')\n if dataType==0x43 then\t--返回"C" 传感器型号 编号\n local datalength=string.len(channelBuff)/2\n for i=0,datalength-1,1 do\n\t if iota.hexToByte(channelBuff,i,'B')==0x43 then --'C'\n\t\t adress=adress..tostring(i)..','\n\t\t end\n\t end\n\t \n\t local sArray=Split(adress,',')\n\t for k,v in ipairs(sArray) do\n if v=='' or v==nil then\n table.remove(sArray,k)\n log.debug("jm_1547:表内的“”和nil 移除元素为%s",sArray[k])\n break\n end\n local V=tonumber(v)\n\t\t\thexChannelStr=string.sub(channelBuff,2*(V+1)+1,2*(V+1)+4)\n\t\t\tlocal channelId=HextoStr(hexChannelStr)\n local hexSensorId=string.sub(channelBuff,2*(V+7)+1,2*(V+7)+12)\n local sensorId=HextoStr(hexSensorId)\n\t\t\tchannelTable[sensorId]=tonumber(channelId) \n end \n end\n\n return channelTable\nend\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n log.debug("jm_1547:moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n \tif child.props.moduleId==tostring(moduleNoId) then\n\t\t \t if child.props.channelId == tostring(channelNoId) then\n log.debug("jm_1547:".."DeviceInfo是:"..tostring(child.deviceId))\n \t\t log.debug("jm_1547:".."子设备原形child=%s",json.encode(child))\n \t --return child.deviceId\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("jm_1547:subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function(data)\n\tlog.debug('jm_1547:开始校验数据')\n if data == nil or string.len(data)/2 < 3 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n return false\n end\n\n\tif iota.hexToByte(data,0,'B') ~= 0x24 and iota.hexToByte(data,0,'B') ~= 0x54 then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n return false\n end\t\n\tlocal dataLength=string.len(data)/2\n\t\n\tif iota.hexToByte(data,dataLength-1,'B') ~= 0x21 then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n return false\n end\t\n log.debug('jm_1547:校验通过')\n\treturn true\n\t\nend\n -- 字符串 -> Hex\nStrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n-- Hex-> 字符串 \nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n INLINE 2018-01-05 17:27:48.16+08 2018-03-07 11:32:32.999+08 2018-01-01 \N
+184cde4a-7a28-4ab9-882a-b2eb1b8ec8a2 111111 \N 13123123123123123123 1 a6791a14-ab8e-477e-aee9-4f340e7cf7bb a6791a14-ab8e-477e-aee9-4f340e7cf7bb f a6791a14-ab8e-477e-aee9-4f340e7cf7bb Lua 12312312321333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333 INLINE 2017-09-30 11:15:58.498+08 2017-09-30 11:15:58.498+08 2017-09-30 \N
+de43551c-d8a4-47f7-b153-d826d52e3749 d \N d 33cfce70-2dc8-4d0a-9ed1-8cd6e737117a 33cfce70-2dc8-4d0a-9ed1-8cd6e737117a f 33cfce70-2dc8-4d0a-9ed1-8cd6e737117a Lua ret54wtwetwttwewt INLINE 2018-01-17 14:38:19.796+08 2018-01-17 14:38:19.796+08 2018-01-17 \N
+a288632d-ffc9-4246-9d60-063f43955e03 ronoele_pressure_1 \N 河北荣欧电子科技有限公司 1.0 eb23c67c-17aa-4909-8bba-8119130ed7f8 eb23c67c-17aa-4909-8bba-8119130ed7f8 f eb23c67c-17aa-4909-8bba-8119130ed7f8 Lua --04 项目资料/2018-01/河北路凯铁路实验项目监测/通讯协议说明/绳索张力传感器.pdf (说明文档命名错误,其实是模拟量采集仪 协议)\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n\tlog.debug("start load ronoele_pressure_1 moudle = %s ",device.uplink.props.module)\n --log.debug("ronoele_pressure_1 root device = %s", json.encode(device))\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n \n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n \tfor index,child in pairs(subdevices) do \n --log.debug("ronoele_pressure_1 child=%s",json.encode(child))\t\t\n\t\t local channelNo=tostring(child.uplink.props.channel)\t\t\t \n\t\t\tlocal moduleNo = tostring(child.uplink.props.module)\n\t\t\tlog.debug("ronoele_pressure_1 子设备moduleNo = %s channelNo=%s",moduleNo, channelNo)\n\t\t\tlocal buff='' \n\t\t\tbuff=iota.appendHexByte(buff, moduleNo, endian) -- 2: 模块号\n \t\tbuff=iota.appendHexByte(buff, 3, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 2, endian) \n\t\t\tbuff=iota.appendHexCrc(buff, 'L' ,0) \n \t\tlog.debug("ronoele_pressure_1 module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\t\n\t\t\tlocal result='{}'\n if ok then \n\t\t\t result = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\t table.insert(out.data,result)\n\t\t\telse\n\t\t\t log.debug("ronoele_pressure_1 module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("ronoele_pressure_1:subdevices是nil")\n \treturn nil\n end\n\tlocal resultData =json.encode(out)\n ctx:done(resultData)\nend\n\nunmarshall=function(hex,subDevice,subModuleNo,subChannelNo)\n log.debug("recv %s, ctx=%s", "ronoele_pressure_1.lua",hex)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n local ErrorCode = IsValid(hex,subModuleNo,subChannelNo)\n if ErrorCode then \n log.debug("ronoele_pressure_1:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n local current1 = iota.hexToUShort(hex,3,'B');\n local current2 = iota.hexToShort(hex,5,'B');\n\n local moduleNo = iota.hexToByte(hex,0,'B')\n local array = current2*2^16+current1 --32位有符号整数\n\t\tlog.debug("ronoele_pressure_1 当前的Phy是:%s",array)\n if subDevice~=nil then\n log.debug("ronoele_pressure_1:子设备原形subDevice=%s",json.encode(subDevice))\n log.debug("ronoele_pressure_1:子设备deviceId: "..tostring(subDevice.id))\n \n \n subData.data={\n pressure= array/100.0, \n };\n end\n\n else\n subData.result = {code=errcode,msg=errormsg}\n subData.data = {}\n end\n return subData\nend\n\n\nIsValid=function(data,moduleId,channelId)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('ronoele_pressure_1 : Data is nil or invalid length. module=%s channel=%s recv = %s',moduleId,channelId,data)\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Modbus Error Code ' \n\t\tlog.debug('ronoele_pressure_1 : Modbus Error CMD = %s. module=%s channel=%s recv = %s',iota.hexToByte(data,1,'B'),moduleId,channelId,data)\n return false\n end\n\n\tlocal moduleStr=tostring(iota.hexToByte(data,0,'B'))\n\tif tostring(moduleId)~= moduleStr then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug('ronoele_pressure_1 : module error [errmodule=%s]. module=%s channel=%s recv = %s',moduleStr,moduleId,channelId,data)\n return false\n end\n\t\t\n return true\nend\n\n\n \n\n INLINE 2018-01-23 10:14:29.587+08 2018-05-21 15:40:20.937+08 2018-01-23 \N
+914cafcd-4123-47c7-9dc7-392c91427b17 测试协议 \N 测试协议 1 c5fbd9dd-297a-43f9-8d5d-343ec75239dc c5fbd9dd-297a-43f9-8d5d-343ec75239dc f c5fbd9dd-297a-43f9-8d5d-343ec75239dc Lua print("Hello World") INLINE 2017-09-19 16:22:13.308+08 2017-09-19 16:22:13.308+08 2017-09-19 \N
+b31c1a66-c65d-437f-b635-6f7aa32cf0e4 sf_waterLevel_1913 \N 上海萨法尔磁致伸缩液位协议 1.0 e4e8b9b9-ebc0-4555-a2d7-493f14ea8b07 e4e8b9b9-ebc0-4555-a2d7-493f14ea8b07 f e4e8b9b9-ebc0-4555-a2d7-493f14ea8b07 Lua \nstart=function()\n log.debug("start %s, ctx=", "sf_waterLevel_1913.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x07, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n end\nend\n--01030E12E62E00009C4999021E01ACFE6F6255 moduleId=1\n--"location1": 156.28749523155565,\n--"location2": 4838.1796902418555,\n--"temp1": 33.875,\n--"temp2": 26.75,\n--"temp3": -25.0625\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\n local location_1 = iota.hexToUShort(hex,7,'B') + iota.hexToUShort(hex,9,'B') / 65535.0\n local location_2 = iota.hexToUShort(hex,3,'B') + iota.hexToUShort(hex,5,'B') / 65535.0\n local temprature1 = iota.hexToShort(hex,11,'B') / 16.0\n local temprature2 = iota.hexToShort(hex,13,'B') / 16.0\n local temprature3 = iota.hexToShort(hex,15,'B') / 16.0\n out.data = {\n location1 = location_1,\n location2 = location_2,\n temp1 = temprature1,\n temp2 = temprature2,\n temp3 = temprature3\n }\n\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 19 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 or iota.hexToByte(data,2,'B') ~= 0x0E then\n errormsg = 'CMD is not right'\n errcode = 1001\n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2017-09-14 17:12:36.243+08 2018-02-28 18:32:12.19+08 2017-09-14 \N
+55c1f524-d49e-4b21-b960-381f35589cb6 asdas \N dasdasd v1 eb5a59f3-6098-4024-a27a-0b795cf9834f eb5a59f3-6098-4024-a27a-0b795cf9834f f eb5a59f3-6098-4024-a27a-0b795cf9834f Lua a=2 INLINE 2018-01-19 17:07:17.131+08 2018-01-22 14:20:32.352+08 2018-01-19 \N
+77719fc9-148a-4a5d-8a9b-4006035b7ad0 mas_water_9004 \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --[[\n协议号: 9004;\n协议名: 液位计 -- (恒通)\n]]--\n\nstart=function()\n -- 字节 \n\tlocal BE='B'\n\tlocal buff='';\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("mas_water_9004 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("mas_water_9004 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\n\tbuff=iota.appendHexByte(buff, moduleNo,BE); -- 1: 从机地址\n\tbuff=iota.appendHexByte(buff, 0x03,BE); -- 1: 功能码\n\tbuff=iota.appendHexByte(buff, 0x00,BE); -- 2: 输入寄存器起始地址\n\tbuff=iota.appendHexByte(buff, 0x00,BE);\n\tbuff=iota.appendHexByte(buff, 0x00,BE); -- 2: 输入寄存器数量\n\tbuff=iota.appendHexByte(buff, 0x05,BE);\n\tbuff=iota.appendHexCrc(buff, BE ,0); -- 2: 16位CRC校验\n\n\tlocal buff1 = string.sub(buff, 1, 12);\n\n\tlocal data1=iota.hexToByte(buff, 6); -- CRC16的高低字节需要对调\n\tlocal data2=iota.hexToByte(buff, 7);\n\n\tbuff1=iota.appendHexByte(buff1, data2); \n\tbuff1=iota.appendHexByte(buff1, data1); \n\n\tok,resp=ctx:ssend(buff1,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n log.debug(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n-- decode\n-- returns: 结果, 原始值, 量程判定值, 实际物理值\nunmarshall=function(hex,moduleStr)\n\tlocal out={\n data ={},\n result = {}\n }\n\tif string.len(hex) < 18 then\n\t\terrormsg = 'Data is nil or invalid'\n\t\terrcode = 1001\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\n\tlocal rawdata = ''\n\tlocal hex = string.sub(hex, 3);\n\n\tlocal start = string.find(hex,'030A'); --测试出现数据帧前面多了一个字节00\n \n\tif start >= 2 then\n\t\trawdata = string.sub(hex, start - 2, start + 29);\n\t\n\telse\n\t\terrormsg = 'Data is nil or invalid'\n\t\terrcode = 1001\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n \n\tlocal opt1 = iota.hexToByte(rawdata, 1); \n\tlocal opt2 = iota.hexToByte(rawdata, 2); \n\t--log.debug(string.format('%d',opt1));\n \n\tif opt1 ~= 0x03 then --返回功能码\n\t\terrcode = 1001\n\t\terrormsg = 'Hex CMD False ' \n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n \n\tif opt2 ~= 0x0A then --数据区长度\n\t\terrcode = 1001\n\t\terrormsg = 'Hex Length False ' \n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n \n --传感器返回解析\n local Symbol = 1;\n local col_date;\n local opt3 = iota.hexToByte(rawdata, 7); \n local opt4 = iota.hexToByte(rawdata, 8); \n \n\n if opt3 & 0x80 == 0x80 then -- 数据正负号\n Symbol = -1;\n opt3 = opt3 - 128;\n col_date = opt3 * 256 + opt4; \n \n else\n col_date = iota.hexToShort(rawdata, 7, 'B'); \n end\n\n local Decimal_part = iota.hexToShort(rawdata, 9, 'B'); -- 小数点位置\n\n local displacement;\n \n displacement = col_date / math.pow(10, Decimal_part);\n \n if Symbol == 1 then\n displacement = displacement;\n else\n displacement = displacement * (-1);\n end\n \t\tout.data={\n\t\t\t\t\tdisplacement=displacement\n\t\t}\n return json.encode(out)\nend INLINE 2018-12-06 15:46:37.284+08 2018-12-06 15:52:13.677+08 2018-12-06 \N
+ab7c69d0-e2b6-4199-aa59-314784533b4b fs_node_weather \N 空气质量节点协议 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua function start() \nlog.debug("fs_node LUA:start %s", "idau_node_oxy.lua")\nend\n\nonData=function(msg)\n\tif (msg == nil or msg.type == nil) then\n\t\tlog.error("onData(nil)!!!")\n\telseif (msg.type == "upload") then -- 文件上传进度\n\t\ton_file_upload(msg)\n\telseif (msg.type == "idau/file") then -- 收到数据文件\n\t\ton_data_file(msg)\n\telseif (msg.type == "idau/mop") then -- MOP 消息, wakeup等.\n\t\tlocal mop = json.decode(msg.payload)\n\t\tlog.error("fs_node:msgid=%s,file_mop=%s",msg.id,json.encode(mop))\n\t\tif (mop == nil) then\n\t\t\tlog.error("onData: mop is nil!")\n\t\tend\n\t\tif (mop.M == "c_wakeup") then\n\t\t\t\n\t\t\tlocal updatecfg = true --初次配置\n\t\t\tlocal r1,ok = redis.get(device.id.."_fdset")\n\t\t\t--判断是否配置,否就是初次配置\n\t\t\tlocal strdevice= toHexStr(json.encode(device))\n\t\t\tstrdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n\t\t\tlocal crc=string.sub(strdevice,-4,-1)\n\t\t\tlog.debug("fs_node : crc1= %s ,r1 = %s",crc,r1)\n\t\t\tif ok and r1~=nil then\n\t\t\t\tif crc == r1 then --配置无变动,无需下发\n\t\t\t\t\tupdatecfg = true\t\t\t\n\t\t\t\tend\n\t\t\tend\t\t\t\n\t\t\tlocal updatefw,okey = redis.get(device.id.."_fwset") -- 判断是否需要更新固件,还未处理\n\t\t\tif okey and updatefw == nil then\n\t\t\t\tupdatefw = false\n\t\t\tend\n\t\t\tlocal diag = false\n\t\t\tif device.uplink.props.diag then\n\t\t\t\tdiag = true\n\t\t\tend\n\t\t\tdeal_mop_wakeup(msg,updatecfg, updatefw,diag) --处理wakeup\n\t\t\tif (diag) then \n\t\t\t\tupdate_diag()\n\t\t\tend\n\t\t\tif (updatecfg) then -- 需要更新配置\n\t\t\t\tupdate_config()\n\t\t\tend\n \t\tlog.debug("fs_node updatefw %s id %s",updatefw,device.uplink.props.diag)\n\t\t\tif (tostring(updatefw) == "true") then -- 需要更新固件\n\t\t\t\tupdate_fw(msg)\n\t\t\tend\n\t\telseif (mop.M == "c_sensor") then -- 配置上传应答\n\t\t\tlog.debug("fs_node c_sensor ack")\n\t\telseif (mop.M == "c_data") then --MOP 指令数据解析\n\t\t\tparse_Data(msg,true)\t\n\t\tend\n\tend\nend\n\n--文件上传进度\nfunction on_file_upload(msg)\nlog.debug("fs_node: on_file_upload: file: progress=%3.2f, status=%d", p.progress, p.status)\n-- 发送完毕.\nif (p.status == 0 and p.progress == 1.00) then\n\t-- 此处可以 ctx:notify 一个能力数据出去\n\tlog.debug("fs_node: file uploaded in %d seconds.", p.duration)\n\t-- 发送开始更新指令.\n\tlocal mop = {\n\t\tM = "c_pgupdate",\n\t\tO = "UP",\n\t\tP = {\n\t\t\tV = p.fi.ext.ver, -- ver.\n\t\t\tF = p.fi.name, -- file\n\t\t\tR = true -- reboot\n\t\t}\n\t}\n\tlocal req = {\n\t\ttype = "idau",\n\t\tpayload = json.encode(mop)\n\t}\n\tlog.debug("fs_node:Notify device to update fw...")\n\tlocal ok, ack = ctx:ssend(req, 3000)\n\tif (ok) then\n\t\t-- Done\n\t\tredis.set(device.id.."_fwset",tostring(false))\n\tend\nend\nend\n\n--需要配置更新 上传固件逻辑\nfunction update_fw(msg)\n\tlog.debug("fs_node update fw for device: %s", device.id)\n\t-- TODO 固件更新信息, 应该通过其他的能力调用, 写入到Redis后, 在这里取出来, 譬如: redis.hget(device.id,"fwinfo")\n\tlocal fwinfo_get = json.encode(redis.get(device.id,"fwinfo"))\n\tif fwinfo_get == nil then\n\t\tlocal fwinfo = {\n\t\t\turl = "http://localhost:9070/fw/test.jpg",\n\t\t\tname = "test.jpg",\n\t\t\tsize = 22824,\n\t\t\tdate = "2018-11-14 20:01:02",\n\t\t\tmd5 = "3768a0dd6faabd7a1c4419dac71db6ca",\n\t\t\tnotify = 1, -- 0=极少通知(开始,结束,错误), 1=每包\n\t\t\text = {\n\t\t\t\tver = 1234,\n\t\t\t\tcompress = 0, --0=none, 1=msg compress, 2=file compress.\n\t\t\t\tpkg = 1024 -- 分包\n\t\t\t}\n\t\t}\n\t\t-- 开始上传.\n\t\tlocal ok, err = ctx:upload(fwinfo) --\n\t\tlog.debug("fs_node ctx:upload =>%s %s", fwinfo.name, ok, err)\n\telse \n\t\tlocal fwinfo = fwinfo_get\n\t\t-- 开始上传.\n\t\tlocal ok, err = ctx:upload(fwinfo) --\n\t\tlog.debug("fs_node ctx:upload =>%s %s", fwinfo.name, ok, err)\n\tend\nend\n\n--收到数据文件\non_data_file=function(data)\n --local jdata=json.encode(data)\n if data ~=nil then\n if data.type == "idau/file" then \n if data.ext==".d" then\n log.debug("fs_node:payload=%s", toStrHex(data.payload))\n parseData(toStrHex(data.payload))\n elseif data.ext==".m" then\n log.debug("fs_node.m:payload=%s", toStrHex(data.payload))\n \t\t parseDiag(toStrHex(data.payload))\n \telse \n \t\tlog.error("fs_node:type is not.d/.m %s", data.name)\n end\n else\n log.error("fs_node:not a d file .d", data.ext)\n end\n else\n log.error("fs_node:data is nil")\n end\nend\n\nfunction parse_Data(js,bmop)\n local out={\n data ={},\n result = {},\n type=2\n }\n\n\tlocal msgid = js.id\n\n\tlocal mop = json.decode(js.payload)\n\tlog.debug("fs_node:mop=%s",json.encode(mop))\n for k,v in ipairs(mop.P) do\n if v~='' and v~=nil then\n local dj=mop.P[k]\n log.debug("fs_node:dj=%s",v)\n --log.debug("fs_node:sen=%s",dj.S)\n -- if dj~=nil and dj ~= '' and tostring(dj.R) =="0" then -- 临时去除结果判定。\n \t\tif dj~=nil and dj ~= '' then\n local childDevice=getDeviceInfo(dj.S)\n log.debug("fs_node:childDevice=%s",json.encode(childDevice))\n if childDevice~=nil and childDevice ~= {} then \n log.debug("fs_node:dj.PV1=%s",dj.PV[1])\n if childDevice.props.sensortype=="cx" then --测斜\n local data1 ={\n data={\n anglex = dj.RV[1] or 0,\n angley= dj.RV[2] or 0,\n temperature= dj.RV[3] or 0, \n _acq_number=dj.N or 1000\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n table.insert(out.data,data1)\n end\n\t\t\t\t\tif childDevice.props.sensortype=="lf" then --裂缝\n local data1 ={\n data={\n length = dj.RV[1] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n table.insert(out.data,data1)\n end\n if childDevice.props.sensortype=="wsd" then --温湿度\n local data2 ={\n data={\n temperature = dj.RV[1] or 0,\n humidity= dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n table.insert(out.data,data2)\n end\n\n if childDevice.props.sensortype=="cj" then --激光测距\n local data2 ={\n data={\n length = dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n table.insert(out.data,data2)\n end\n\n if childDevice.props.sensortype=="yc" then --压差\n local data3 ={\n data={\n pressure=dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n table.insert(out.data,data3)\n end\n if childDevice.props.sensortype=="zx" then --振弦\n local data4={\n data={\n physicalvalue = dj.PV[1] or 0,\n frequency=dj.RV[1] or 0,\n temperature=dj.RV[2] or 0,\n am=dj.RV[3] or 0\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n log.debug("fs_node:out data4=%s",json.encode(data4))\n table.insert(out.data,data4)\n end\n\t\t\t\t\tif childDevice.props.sensortype=="am2305" then --AM2305模组\n log.debug("fs_node:AM2305模组")\n local data5={\n data={\n temp=dj.PV[1] or 0,\n hum=dj.PV[2] or 0\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n log.debug("fs_node:out data5=%s",json.encode(data5))\n table.insert(out.data,data5)\n end\n\t\t\t\t\tif childDevice.props.sensortype=="pm100" then --PM100模组\n log.debug("fs_node:PM100模组")\n local data6={\n data={\n pm100=dj.PV[1] or 0\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n log.debug("fs_node:out data6=%s",json.encode(data6))\n table.insert(out.data,data6)\n end\n\t\t\t\t\tif childDevice.props.sensortype=="pm10" then --PM2.5,PM10模组\n log.debug("fs_node:PM2.5,PM10模组")\n local data7={\n data={\n pm25=dj.PV[1] or 0,\n pm10=dj.PV[2] or 0\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n log.debug("fs_node:out data7=%s",json.encode(data7))\n table.insert(out.data,data7)\n end\n\t\t\t\t\tif childDevice.props.sensortype=="gps" then --GPS模组\n log.debug("fs_node:GPS模组")\n local data8={\n data={\n lang=dj.PV[1] or 0,\n long=dj.PV[2] or 0,\n\t\t\t\t\t\t\t\t\ttime_bj=nil\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n log.debug("fs_node:out data8=%s",json.encode(data8))\n table.insert(out.data,data8)\n end\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=="aqi" then --AQI模组\n log.debug("fs_node:AQI模组")\n local data9={\n data={\n CO=dj.PV[1] or 0,\n O3=dj.PV[2] or 0,\n\t\t\t\t\t\t\t\t\tNO2=dj.PV[3] or 0,\n SO2=dj.PV[4] or 0,\n\t\t\t\t\t\t\t\t\tVOC=dj.PV[5] or 0 \n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n log.debug("fs_node:out data9=%s",json.encode(data9))\n table.insert(out.data,data9)\n end\t\t\t\t\t\t\t\n end\n else\n log.debug("fs_node:dj=nil")\n end\n else\n log.debug("fs_node:v is nil v=%s",json.decode(v))\n end\n\n end\n local resultData =json.encode(out)\n log.debug("fs_node:".."LUA:resultData : data is =%s", json.encode(out))\n ctx:notify(resultData)\n\t\t-- 发送应答.\n\tif bmop == true then\n\t\tlocal mopack = {\n\t\t\tM = "c_data",\n\t\t\tR = 0\n\t\t}\n\t\tlocal msgack = {\n\t\t\ttype = "idau",\n\t\t\tid = msgid, -- 消息ID, 重要!!!\n\t\t\tack = true, -- ack.(本消息是个应答)\n\t\t\tpayload = json.encode(mopack) -- 消息荷载: MOP\n\t\t}\n\t\t-- very important! 节点会等待这个消息, 用于判定通讯状态.\n\t\tlog.debug("fs_node data ack sent: %s", json.encode(msgack))\n\t\tctx:asend(msgack)\n\tend\nend\n\nfunction parseData(js)\n local out={\n data ={},\n result = {},\n type=2\n }\n local djs=Split(js,'\\n')\n log.debug("fs_node:jsoncount=%s",#(djs))\n for k,v in ipairs(djs) do\n if v~='' and v~=nil then\n local dj=json.decode(v)\n log.debug("fs_node:dj=%s",json.encode(v))\n --log.debug("fs_node:sen=%s",dj.S)\n if dj~=nil and dj ~= '' and tostring(dj.R) =="0" then\n log.debug("fs_node:ceshiyixia1")\n local childDevice=getDeviceInfo(dj.S)\n log.debug("fs_node:childDevice=%s",json.encode(childDevice))\n if childDevice~=nil and childDevice ~= {} then \n log.debug("fs_node:ceshiyixia2")\n log.debug("fs_node:dj.PV1=%s",dj.PV[1])\n\n if childDevice.props.sensortype=="cx" then --测斜\n local data1 ={\n data={\n anglex = dj.RV[1] or 0,\n angley= dj.RV[2] or 0,\n temperature= dj.RV[3] or 0, \n _acq_number=dj.N or 1000\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n table.insert(out.data,data1)\n end\n\t\t\t\t\tif childDevice.props.sensortype=="lf" then --裂缝\n local data1 ={\n data={\n length = dj.RV[1] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n table.insert(out.data,data1)\n end\n if childDevice.props.sensortype=="wsd" then --温湿度\n local data2 ={\n data={\n temperature = dj.RV[1] or 0,\n humidity= dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n table.insert(out.data,data2)\n end\n\n if childDevice.props.sensortype=="cj" then --激光测距\n local data2 ={\n data={\n length = dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n table.insert(out.data,data2)\n end\n\n if childDevice.props.sensortype=="yc" then --压差\n local data3 ={\n data={\n pressure=dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n table.insert(out.data,data3)\n end\n if childDevice.props.sensortype=="zx" then --振弦\n local data4={\n data={\n physicalvalue = dj.PV[1] or 0,\n frequency=dj.RV[1],\n temperature=dj.RV[2],\n am=dj.RV[3]\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n log.debug("fs_node:out data4=%s",json.encode(data4))\n table.insert(out.data,data4)\n end\n\t\t\t\t\tif childDevice.props.sensortype=="am2305" then --AM2305模组\n log.debug("fs_node:AM2305模组")\n local data5={\n data={\n temp=dj.PV[1],\n hum=dj.PV[2]\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n log.debug("fs_node:out data5=%s",json.encode(data5))\n table.insert(out.data,data5)\n end\n\t\t\t\t\tif childDevice.props.sensortype=="pm100" then --PM100模组\n log.debug("fs_node:PM100模组")\n local data6={\n data={\n pm100=dj.PV[1]\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n log.debug("fs_node:out data6=%s",json.encode(data6))\n table.insert(out.data,data6)\n end\n\t\t\t\t\tif childDevice.props.sensortype=="pm10" then --PM2.5,PM10模组\n log.debug("fs_node:PM2.5,PM10模组")\n local data7={\n data={\n pm25=dj.PV[1],\n pm10=dj.PV[2]\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n log.debug("fs_node:out data7=%s",json.encode(data7))\n table.insert(out.data,data7)\n end\n\t\t\t\t\tif childDevice.props.sensortype=="gps" then --GPS模组\n log.debug("fs_node:GPS模组")\n local data8={\n data={\n lang=dj.PV[1],\n long=dj.PV[2],\n\t\t\t\t\t\t\t\t\ttime_bj=dj.PV[3]\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n log.debug("fs_node:out data8=%s",json.encode(data8))\n table.insert(out.data,data8)\n end\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=="aqi" then --AQI模组\n log.debug("fs_node:AQI模组")\n local data9={\n data={\n CO=dj.PV[1],\n O3=dj.PV[2],\n\t\t\t\t\t\t\t\t\tNO2=dj.PV[3],\n SO2=dj.PV[4],\n\t\t\t\t\t\t\t\t\tVOC=dj.PV[5] \n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n log.debug("fs_node:out data9=%s",json.encode(data9))\n table.insert(out.data,data9)\n end\t\t\t\t\t\t\t\n end\n else\n log.debug("fs_node:dj=nil")\n end\n else\n log.debug("fs_node:v is nil v=%s",json.decode(v))\n end\n\n end\n local resultData =json.encode(out)\n log.debug("fs_node:".."LUA:resultData : data is =%s", json.encode(out))\n ctx:notify(resultData)\nend\n\nfunction parseDiag(js)\n local dj=json.decode(js)\n if dj~=nil then\n\tlocal out={\n data ={_data_type = "diag", R={}},\n result = {},\n type=2\n }\n \n local dataresult= json.encode(dj.R.P.R)\n\tout.data.R = dataresult\n log.debug("parsing diag file = %s",json.encode(out))\n ctx:notify(json.encode(out))\n end\nend\n\n\n --string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n--获取传感器信息\nfunction getDeviceInfo(sensorId)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n \t\tlog.debug("fs_node subdevice.id:",tostring(subdevice.id))\n if tostring(subdevice.id) == tostring(sensorId)then \n return subdevice\n end \n end\n end\n log.debug("fs_node has no device sensorid=%s ",sensorId)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("fs_node has no subdevices.")\n return nil -- 没有子设备\n end\nend\n--需要诊断\nupdate_diag = function()\n \tlog.debug("fs_node_mop:diag=%s,id = %s",device.uplink.props.diag,device.uplink.props.id)\n local req_diag={\n type = "idau",\n payload = ""\n }\n\tlocal mop_diag = {\n M = "c_diag",\n O = "DIAG",\n P = {\n D = "root",\n SYNC = true\n } -- 荷载\n }\n\n\treq_diag.payload= json.encode(mop_diag)\n\tlog.debug("fs_node_mop:request=%s", json.encode(req_diag))\n\tlocal ok, ack = ctx:ssend(req_diag, 30000)\n\tresult = {\n\t\tresult = nil,\n\t\ttype = 1,\n\t\tdata = {\n\t\t\tack = json.encode(ack)\n\t\t}\n\t}\n\tlog.debug("parsing diag mop = %s",json.encode(ack))\n\tctx:notify(json.encode(result))\nend\n\n--需要配置更新\nupdate_config = function()\n log.debug("fs_node_mop: update_config device=%s",json.encode(device))\n\tlocal str= toHexStr(json.encode(device))\n\tstr=iota.appendHexCrc(str, 'B' ,0)\n\tlocal crc = string.sub(str,-4,-1)\n\tlog.debug("fs_node : crc2= %s",crc)\n\tredis.set(device.id.."_fdset", tostring(crc))\n log.debug("fs_node_mop: update_config subdevice=%s",json.encode(device.dnlinks[1]))\n local linkcnt = #(device.dnlinks)\n log.debug("fs_node_mop:linkcnt=%s",linkcnt)\n local req = {\n type = "idau",\n payload = ""\n }\n local req_sensor={\n type = "idau",\n payload = ""\n }\n local mop_sensor = {\n M = "c_sensor",\n O = "S",\n P = {\n\t\t\tnetwork ={},\n\t\t\tsensors = {}\n\t\t} -- 荷载\n } \n local req_diag={\n type = "idau",\n payload = ""\n }\n\n\n\tlocal dmodel = 0 \n\tif tostring(device.uplink.props.dm) == 'MOP' then\n\t\tdmodel = 1\n\tend\n\tlog.debug("fs_node_mop:network")\n\t--采集间隔下移到传感器\n\tlocal networks={\n\t\tDI = tonumber(device.uplink.props.dis) or 5, -- 设备属性: 采集间隔. 默认30分钟\n\t\tCD = tonumber(device.uplink.props.cd) or 30,--冷起延迟(秒)\n\t\tWD = tonumber(device.uplink.props.wd) or 60,--热起延迟(秒)\n\t\tDM = dmodel --数据上传模式(0=文件,1=mop)\n\t}\n \tlog.debug("fs_node_mop:network2")\n \tmop_sensor.P.network= networks\n \tlog.debug("fs_node_mop:network3")\n\t--配置Json构建\n for i = 1, linkcnt, 1 do -- 一个link, 一个子网\n local link = device.dnlinks[i]\n local sensorcnt = #(link.devices)\n log.debug("fs_node_mop:sensorcnt=%s",sensorcnt)\n if sensorcnt > 0 then\n for j = 1, sensorcnt, 1 do\t\t\t\t\n\t\t\t\tlocal sen = device.dnlinks[i].devices[j]\t\t\t\t\n\t\t\t\tlocal sensor = {\n\t\t\t\t\tID = tostring(sen.id),--传感器ID\n\t\t\t\n\t\t\t\t\tPA ={ --物理地址\n\t\t\t\t\t\tSC= tonumber(sen.uplink.props.channel) or 0,--通道号\n\t\t\t\t\t\tM= tonumber(sen.uplink.props.module) or 0--模块号: 485端口模块号 \n\t\t\t\t\t\t--SC=,-- 子通道号: 485端口子通道号\n\t\t\t\t\t}, \n\t\t\t\t\tN = sen.name, --传感器说明\n\t\t\t\t\t--DIS = tonumber(sen.uplink.props.dis) or 1,--采样间隔系数. 默认1\n\t\t\t\t\tPN = tonumber(sen.props.protocolcode) or 0 ,--协议号: 和安心云DAC解码协议保持一致.\n\t\t\t\t\tEN = tonumber(sen.uplink.props.enabled =="false" and 0 or 1), --是否启用\n\t\t\t\t\tED = tonumber(sen.uplink.props.postdelay) or 0, --执行前延迟(485作用)\n\t\t\t\t\tRD = tonumber(sen.uplink.props.predelay) or 0,--读取前延迟\n\t\t\t\t\tCF = "",--公式编码, 485平台计算为空\n\t\t\t\t\tCP = { --计算参数, 按顺序提供必需参数. \n\t\t\t\t\t\t\ttonumber(sen.props.p1) or 0,\n\t\t\t\t\t\t\ttonumber(sen.props.p2) or 0,\n\t\t\t\t\t\t\ttonumber(sen.props.p3) or 0,\n\t\t\t\t\t\t\ttonumber(sen.props.p4) or 0,\n\t\t\t\t\t\t\ttonumber(sen.props.p5) or 0,\n\t\t\t\t\t\t\ttonumber(sen.props.p6) or 0,\n\t\t\t\t\t\t\ttonumber(sen.props.p7) or 0,\n\t\t\t\t\t\t\ttonumber(sen.props.p8) or 0\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttable.insert(mop_sensor.P.sensors, sensor)\n end\n end\n\t\tlog.debug("fs_node_mop: bulid OK=%s",sensorcnt)\n end\n\n\treq_sensor.payload= json.encode(mop_sensor)\n\tlog.debug("fs_node:requestsensor=%s", json.encode(req_sensor))\n\tlocal ok, ack = ctx:ssend(req_sensor, 4000)\n\tif ok == true then\n\t\tlocal str= toHexStr(json.encode(device))\n\t\tstr=iota.appendHexCrc(str, 'B' ,0)\n\t\tlocal crc = string.sub(str,-4,-1)\n\t\tlog.debug("fs_node : crc2= %s",crc)\n\t\tredis.set(device.id.."_fdset", tostring(crc))\n\tend\n result = {\n result = nil,\n type = 1,\n data = {\n ack = json.encode(ack)\n }\n }\n\tlog.debug("fs_node : ack= %s",result.data.ack)\n ctx:notify(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n if t == "host" then\n return 1\n elseif t == "relay" then\n return 2\n end\n return 3\nend\n\n--处理wakeup\nfunction deal_mop_wakeup(msg,cfg,vercfg,diag)\n local wakeup_req = {\n type = "idau",\n \tack =true,\n \tid =msg.id,\n payload = ""\n }\n local mop_wakeup = {\n M = "c_wakeup",\n P = {\n updatecfg = cfg,\n updatefw = vercfg,\n\t\t\tupdatediag = diag\n } -- 荷载\n }\n\twakeup_req.payload = json.encode(mop_wakeup)\n \tlog.debug("fs_node:deal_mop_wakeup=%s", json.encode(wakeup_req))\n\tlocal ok,ack=ctx:ssend(wakeup_req,3000)\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend \n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend INLINE 2018-12-11 10:05:23.175+08 2019-03-08 16:10:16.91+08 2018-12-11 \N
+704e425c-1cba-4a1a-bae9-890acc58f5be sadf \N sadf 06ca49bb-db4a-4d41-8b3d-ae74c93d9425 06ca49bb-db4a-4d41-8b3d-ae74c93d9425 f 06ca49bb-db4a-4d41-8b3d-ae74c93d9425 Lua sadfsadfsd INLINE 2018-03-12 17:56:17.191+08 2018-03-12 17:56:17.191+08 2018-03-12 \N
+45e683e6-d49b-4b16-af85-607be4509fe5 rion_incl_1510 \N 北京瑞芬星通科技有限公司 1.0 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 f 85ba98a3-b552-4bcf-a736-30b525492481 Lua bit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n\nstart=function()\n log.debug("start %s, ctx=", "rion_inclination_1510.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0x68, endian)\n buff=iota.appendHexByte(buff, 4, endian) \n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("rion_inclination_1510 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("rion_inclination_1510 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) -- 1: 模块号 \n buff=iota.appendHexByte(buff, 4, endian) -- 2: 指令: 0x04 = 采集\n buff=iota.appendHexByte(buff,CS(1,buff),endian)\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,20000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo) \n end\n ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n\n --680D0084002010000000050500CB moduleId=0\n --"angleX": 2.01,\n\t--"angleY": 0,\n\t--"temp": 50.5\n\n log.debug("recv %s, ctx=%s", "rion_inclination_1510.lua",hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==28) then \n\n local IDX_XDATA = 4 \n local IDX_YDATA = 7 \n local IDX_Temp = 10 \n\n local xFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA,'B') , 0xF0) , 4)\n local xSecondNum = bit:_and(iota.hexToByte(hex,IDX_XDATA,'B') , 0x0f) * 10\n local xThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_XDATA + 1,'B') , 0x0F) * 0.1\n local xForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_XDATA + 2,'B') , 0x0F) * 0.001\n\n local yFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA,'B') , 0xF0) , 4)\n local ySecondNum = bit:_and(iota.hexToByte(hex,IDX_YDATA,'B') , 0x0f) * 10\n local yThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_YDATA + 1,'B') , 0x0F) * 0.1\n local yForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_YDATA + 2,'B') , 0x0F) * 0.001\n\n local tFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp,'B') , 0xF0) , 4)\n local tSecondNum = bit:_and(iota.hexToByte(hex,IDX_Temp,'B') , 0x0f) * 10\n local tThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_Temp + 1,'B') , 0x0F) * 0.1\n local tForthNum =bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_Temp + 2,'B') , 0x0F) * 0.001\n\n local angleX = xSecondNum + xThirdNum + xForthNum\n local angleY = ySecondNum + yThirdNum + yForthNum\n local temp = tSecondNum + tThirdNum + tForthNum\n\n if (xFirst == 0x01) then \n angleX = -angleX\n end\n\n if (yFirst == 0x01) then\n angleY = -angleY\n end\n\n if (tFirst == 0x01) then\n temp = -temp\n end\n \n out.data = {\n anglex=angleX,\n angley=angleY,\n temperature=temp\n }\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("recv %s, ctx=%s", "rion_inclination_1510.lua",json.encode(out))\n return json.encode(out)\nend\n\nCS=function(start,buff)\n local lcr = 0\n for i = start, string.len(buff)/2-1 do\n lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n end \n local value= bit:_and(lcr,0xff) \n return value\nend \n\n \n\n\n \n\n INLINE 2017-09-19 20:14:15.163+08 2018-03-29 10:01:18.164+08 2017-09-17 \N
+8f441554-81bd-4922-8de8-a0a215d418aa 设备协议 \N 我的设备协议。 1 fbdcaf6b-c584-4b3b-8441-a8e1df52bc0f fbdcaf6b-c584-4b3b-8441-a8e1df52bc0f f fbdcaf6b-c584-4b3b-8441-a8e1df52bc0f Lua import INLINE 2017-08-31 14:59:11.943+08 2017-08-31 14:59:11.943+08 2017-08-31 \N
+4e9edf2e-6c74-4979-91dd-65c1c69ed8f2 我的协议1 \N 我的协议1 1.0 e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d f e1821687-1231-4e5c-a374-46d31857056d Lua {} INLINE 2018-01-05 17:13:09.757+08 2018-01-05 17:13:09.757+08 2018-01-05 \N
+2a81d2b4-3151-429b-b68d-dfbe48b9c6a0 飞尚振弦协议 \N 0.1 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f f16833ab-a4a4-45f5-9b39-ad2c66e488f6 Lua function start()\n \nend\n INLINE 2017-10-23 10:42:39.175+08 2018-01-15 10:32:13.618+08 2017-10-23 \N
+5379ca6c-1ae1-4730-a1b3-913ac968ef88 jdhs_gas_2512 \N 聚到合盛单个传感器 1.0 ff0414b7-505b-4d85-bb09-f99bac5262a1 ff0414b7-505b-4d85-bb09-f99bac5262a1 f ff0414b7-505b-4d85-bb09-f99bac5262a1 Lua -- 3e6968606061656135\n \nstart=function()\n log.debug("load script %s, moduleId=%s", "jdhs_gas_2512.lua", device.props.moduleId or "[nil]")\n \tlog.debug("jdhs_gas_2512 ctx: %s",json.encode(ctx))\nend\n\nonData=function(hex)\n log.debug("onData(%s), dev=%s", hex, json.encode(device) )\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode and string.len(hex)==18 then\n\n local moduleNo=iota.hexToByte((string.sub(hex, 4,4)..string.sub(hex, 6,6)),0,'B')\n if tonumber(device.props.moduleId)==moduleNo then\n local value\n if (tonumber(string.sub(hex, 16,16))==1) then\n value=iota.hexToShort((string.sub(hex, 8,8)..string.sub(hex, 10,10)..string.sub(hex, 12,12)..string.sub(hex, 14,14)),0,'B')\n else\n value=iota.hexToShort((string.sub(hex, 8,8)..string.sub(hex, 10,10)..string.sub(hex, 12,12)..string.sub(hex, 14,14)),0,'B')*10\n end\n out.data = { --需要测试\n value = value,\n }\n else\n out.result = {code = 1001, msg = "Is not validated"}\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("data os %s", resultData)\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n --iota.checkPlusSum16\n return true\n--crc\nend\n\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n INLINE 2017-11-20 16:10:25.672+08 2018-02-28 18:32:12.19+08 2017-11-20 \N
+c1fb3383-b4c2-40e5-a73b-d27267e2384c lywh__8002 \N 多通道温度采集仪 1.0 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 f dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 Lua \n --AA55360018072713515930000a0032000B0006000900220FF5FFEDFFEEFF0500090010001300F0FFF2FFEFFFEFFFF0FFF2FFEFFFEFFF99d8\n --通道1 0.5mm temperature=1.1℃\n --通道2 0.06mm temperature=0.9℃\n --通道3 38.74mm temperature=-1.1℃\n --通道4 655.17mm temperature=-1.1℃\n onData=function(hex)\n log.debug("lywh__8002 收到数据=%s", hex)\n --log.debug("lywh__8002 device =%s", json.encode(device))\n local out={\n data ={},\n result = {},\n type=2\n }\n local data=hex\n if string.upper(data)=="3E74696D656375720D0A" then\n --请求同步服务器时间\n local timeStr=os.date("%Y%m%d-%H%M%S",os.time())\n local timeResponse="3c74696d656375723a"..StrToHex(timeStr).."0d0a"\n ok=ctx:asend(timeResponse)\n else\n \n local ErrorCode = IsValid(data)\n if ErrorCode then\n log.debug('lywh__8002 数据有效=%s',data)\n \n local length={}\n local temp={}\n local channelCounts_hex=string.sub(data,27,28)..string.sub(data,25,26)\n\n local channelCounts=tonumber(channelCounts_hex,16)\n \t\t\tlog.debug('lywh__8002 channelCounts=%s',channelCounts)\n for i=1,channelCounts,1 do\n length[i]=iota.hexToShort(data,14+(i-1)*4,'L')\t\n temp[i]=iota.hexToShort(data,14+(i-1)*4+2,'L')\n \t\t\tlog.debug('lywh__8002 i=%s length[i]=%s,temp[i]=%s',i,length[i],temp[i])\n end\n \n local moduleId=device.uplink.props.module\n --分析单类数据\n for k,v in ipairs(temp) do\n log.debug('lywh__8002 分析单类数据 k=%s,v=%s',k,v)\n \n local channelId=k\n local childDevice=getDeviceInfo(moduleId,channelId) \n \n if childDevice~=nil then\n log.debug('lywh__8002 moduleId=%s,channelId=%s id=%s,temperature=%s',moduleId,channelId,childDevice.id,temp[k])\n local data1 = {\n data={\t\t\t\t\t\t\t\t\t\t\t\n temperature=temp[k]/10.0,\n length=length[k]/100.0\n },\n device=childDevice.id,\n type=1 \n }\n \n table.insert(out.data,data1)\n end\t\n end\n \n \n \n \n \n else\n out.result = {code = errorcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\n end\n end\n \n IsValid=function(data)\n local checkdatalength=string.len(data)/2\n\n if checkdatalength<14 then\n errormsg = 'data length is wrong'\n errorcode = 1001\n ok=ctx:asend("4552")\n return false\n end\n\n\n local datalength=tonumber(string.sub(data,5,6),16)+tonumber(string.sub(data,7,8),16)*256\n if datalength+2~=checkdatalength then\n errormsg = 'data length is wrong'\n errorcode = 1001\n ok=ctx:asend("4552")\n return false\n end\t\n \n if string.upper(string.sub(data,1,4)) ~= 'AA55' then \n errormsg = 'Data is Invalid'\n errorcode = 1001\n ok=ctx:asend("4552")\n return false\n end\n --累加和校验\n local checksum16=CheckPlusSum(data,1,string.len(data)-4)\n local checksum16_Hex=string.format("%04x",checksum16)\n local sum16_Hex=string.sub(data,-2,-1)..string.sub(data,-4,-3)\n log.debug("lywh__8002 checksum16_Hex=%s,sum16_Hex=%s",checksum16_Hex,sum16_Hex)\n if checksum16_Hex~=sum16_Hex then\n log.debug("lywh__8002 累加和校验失败%s[%s]",sum16_Hex,checksum16_Hex)\n ok=ctx:asend("4552") --错误数据返回\n errormsg = 'Data is Invalid'\n errorcode = 1001\n return false\n end\n --ok=ctx:asend("4f4b") --正确数据返回\n log.debug("lywh__8002 校验通过")\n return true\n end\n --累加和校验\n function CheckPlusSum(str, startIndex, endIndex)\n local sum = 0\n for i = startIndex, endIndex,4 do\n sum = (sum + tonumber(string.sub(str,i+2,i+3)..string.sub(str,i,i+1),16)) % 0x10000\n end \n local result = sum \n return result\n end\n \n --获取采集仪下面的通道信息\n getDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("lywh__8002 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index,child in pairs(device.dnlinks[1].devices) do\n -- log.debug("lywh__8002:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n \n moduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck=child.uplink.props.channel\n log.debug("lywh__8002 子设备模块通道 接口获取 m=%s[%s],c=%s[%s] ",moduleStrCheck,moduleNoId,channelStrCheck,channelNoId)\n \n \n if tonumber(moduleStrCheck)==tonumber(moduleNoId) then\n \n if tonumber(channelStrCheck)==tonumber(channelNoId) then\n log.debug("lywh__8002: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n end\n \n end\n end\n else\n log.debug("lywh__8002: subdevices是nil")\n return nil\n end\n end\nStrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend \n INLINE 2018-09-11 11:25:49.222+08 2018-09-26 10:44:34.389+08 2018-09-11 \N
+618252ec-97d7-432a-ade1-4dac9223934c tst_file_transfer \N 1.0 6c3cbbd8-b774-4955-897d-3333586385c6 6c3cbbd8-b774-4955-897d-3333586385c6 f 6c3cbbd8-b774-4955-897d-3333586385c6 Lua start = function()\n log.debug('tst_file_transfer : devices network =%s', json.encode(device))\n log.debug('tst_file_transfer get Start ')\nend\n\nonData = function(data)\n log.debug('tst_file_transfer 解析data ')\n if data ~= nil then\n if data.type == 'idau/file' then\n if data.ext == '.d' or data.ext == '.dx' then\n log.debug('tst_file_transfer : recvd content = %s', data.payload)\n ParseFileD(data.payload)\n --else\n --log.error("tst_file_transfer : unsupported file type: %s", data.ext)\n end\n if data.ext == '.dat' then\n --log.debug("tst_file_transfer : recvd content = %s",data.payload)\n ParseFileDat(data.payload)\n --else\n --log.error("tst_file_transfer : unsupported file type: %s", data.ext)\n end\n else\n log.error('tst_file_transfer : content type is not file, error recvd type is %s', data.type)\n end\n else\n log.error('tst_file_transfer : recvd content is nil')\n end\nend\n\nfunction ParseFileDat(dathex)\n log.debug('tst_file_transfer : dat content =%s', dathex)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local offset = 0\n local t = iota.hexToShort(dathex, offset, 'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex, offset, 'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex, offset, 'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex, offset, 'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex, offset, 'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId, channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex, offset, 'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex, offset, 'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex, offset, 'B') + 2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex, offset, 'B')\n offset = offset + 4\n log.debug('tst_file_transfer deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s', deviceId, channel, samplefreq, filterfreq, gainamplifier, triggertype, year, mon, day, hour, min, sec)\n\n local floatcount = (string.len(dathex) / 2 - 40) / 4\n log.debug('tst_file_transfer begin parse')\n local vols = {}\n for i = 1, floatcount do\n offset = 40 + (i - 1) * 4\n vols[i] = iota.hexToFloat(dathex, offset, 'L', 6)\n end\n log.debug('tst_file_transfer finish parse')\n\n local rst = {\n data = {\n _data_type = 'vib',\n physicalvalue = vols,\n sampleFreq = samplefreq,\n filterFreq = filterfreq,\n gainAmplifier = gainamplifier,\n triggerType = triggertype,\n version = version\n },\n device = subdevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', os.time({year = year, month = mon, day = day, hour = hour, min = min, sec = sec}))\n }\n table.insert(out.data, rst)\n log.debug('tst_file_transfer deviceid = %s, cloudvibrate=%s', deviceId, json.encode(out))\n ctx:notify(json.encode(out))\n else\n log.debug('tst_file_transfer not found device module=%s channel=%s', deviceId, channel)\n end\nend\n\nfunction ParseFileD(content)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n log.debug('tst_file_transfer : content =%s', content)\n local jsons = Split(content, '\\r')\n for k, v in pairs(jsons) do\n if v ~= nil and v ~= '' then\n local jsondata = json.decode(v)\n if jsondata ~= nil and jsondata ~= '' then\n local childDevice = getDeviceInfo(jsondata.M, jsondata.C)\n if childDevice ~= nil then\n --log.debug("tst_file_transfer 设备类型=%s,%s",childDevice.props.sensortype,json.encode(childDevice))\n if childDevice.props.sensortype == 'gnss' then\n local rst = {\n data = {\n x = jsondata.RV[1] or 0,\n y = jsondata.RV[2] or 0,\n z = jsondata.RV[3] or 0\n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000))\n }\n table.insert(out.data, rst)\n end\n if childDevice.props.sensortype == 'zd' then\n local rst = {\n data = {\n ppv = jsondata.RV[1] or 0,\n pv = jsondata.RV[2] or 0,\n rms = jsondata.RV[3] or 0\n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+16:00', (tonumber(jsondata.T) / 1000))\n }\n log.debug('tst_file_transfer:out data=%s', json.encode(rst))\n table.insert(out.data, rst)\n end\n\n if childDevice.props.sensortype == 'gdgs' then\n local rst = {\n data = {\n wavelength = tonumber(string.format('%0.3f', jsondata.RV[1])),\n physicalvalue = tonumber(string.format('%0.3f', jsondata.PV[1]))\n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+16:00', (tonumber(jsondata.T) / 1000))\n }\n log.debug('tst_file_transfer:out data=%s', json.encode(rst))\n table.insert(out.data, rst)\n end\n if childDevice.props.sensortype== 'lf' then\n local rst = {\n data = {\n wavelength = tonumber(string.format('%0.3f', jsondata.RV[1])),\n length = tonumber(string.format('%0.3f', jsondata.PV[1]))\n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+16:00', (tonumber(jsondata.T) / 1000))\n }\n log.debug('tst_file_transfer:out data=%s', json.encode(rst))\n table.insert(out.data, rst)\n end\n if childDevice.props.sensortype == 'gdgszx' then\n local rst = {\n data = {\n physicalvalue = jsondata.PV[1],\n temperature = jsondata.PV[2]\n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000))\n }\n log.debug('tst_file_transfer gdgszx data=%s', json.encode(rst))\n table.insert(out.data, rst)\n end\n if childDevice.props.sensortype == 'standard485' then\n log.debug('tst_file_transfer standard485=%s', json.encode(childDevice))\n local rst = {\n data = {\n physicalvalue = (jsondata.RV[2])\n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+16:00', (tonumber(jsondata.T) / 1000))\n }\n log.debug('tst_file_transfer standard485 data=%s,time=%s', json.encode(rst), rst.time)\n table.insert(out.data, rst)\n end\n else\n log.debug('tst_file_transfer line=%s childDevice is nil', k)\n end\n end\n end\n end\n --log.debug('tst_file_transfer dataresult=%s', json.encode(out))\n ctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid, channel)\n log.debug('tst_file_transfer:查询子设备: moduleid=%s,channel=%s', moduleid, channel)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices\n for i, subdevice in pairs(subdevices) do\n --判断是否是3层采集仪结构\n if json.encode(subdevice.dnlinks) ~= '{}' then\n log.debug("tst_file_transfer 三层结构 二层设备=%s",submodule,json.encode(subdevice))\n for k, sublink in pairs(subdevice.dnlinks) do\n log.debug("tst_file_transfer sublink=%s",json.encode(sublink))\n for u, sub_subdevice in pairs(sublink.devices) do\n log.debug("tst_file_transfer sensor=%s",json.encode(sub_subdevice))\n local sensornodeId = sub_subdevice.uplink.props.module\n local sensorchannel = sub_subdevice.uplink.props.channel\n if tostring(sensornodeId) == tostring(moduleid) and tonumber(sensorchannel) == tonumber(channel) then\n log.debug('tst_file_transfer 三层查询 m=%s,c=%s 匹配到设备=%s', moduleid, channel, json.encode(sub_subdevice))\n\n return sub_subdevice\n else\n log.debug("tst_file_transfer 三层查询 m=%s[%s],c=%s[%s] 未匹配",moduleid,sensornodeId,channel,sensorchannel)\n end\n end\n end\n else\n local submodule = subdevice.uplink.props.module\n --log.debug('tst_file_transfer 两层查询 m=%s[%s]', moduleid, submodule)\n\n if tostring(submodule) == tostring(moduleid) then\n log.debug('tst_file_transfer 两层查询 m=%s, 匹配到设备=%s', moduleid, json.encode(subdevice))\n\n return subdevice\n else\n --log.debug('tst_file_transfer 两层查询 has no device module=%s ,[submodule=%s]', moduleid, submodule)\n end\n end\n end\n log.debug('tst_file_transfer has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('tst_file_transfer has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend INLINE 2019-08-05 18:13:09.518+08 2019-09-03 15:20:54.445+08 2019-08-05 \N
+6b6e7e0d-f078-4725-87c1-11a5a07f2565 jitai_1889 \N 1.0 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 f d3f1aa63-8397-45a4-af26-15a0f91d1e13 Lua --// 04 项目资料/2018-03/南京基泰集成箱设备协议/GT-MI600倾角仪.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "jitai_1889", device.props.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jitai_1889 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jitai_1889 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\t\n\t\tlog.debug("jitai_1889 moduleNo=%s interface module=%s, property moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n\t\tbuff=iota.appendHexByte(buff, 0xf5, endian) \n buff=iota.appendHexByte(buff, 0xf5, endian) \n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号 485接口获取\n --buff=buff..string.format("%02d",moduleNo)\n\t\tlog.debug("jitai_1889 发送采集命令=%s",buff)\n ok,resp=ctx:ssend(buff,15000)\n\t\t\n local result='{}'\n if ok then\n result = unmarshall(resp,tostring(moduleNo))\n else\n log.debug("jitai_1889 SSend error!")\n end\n ctx:done(result)\nend\n\n--F5F501\n--moduleId=1\n--15028765 \n\nunmarshall=function(hex,module_str)\n\tlog.debug("jitai_1889 收到数据=%s",hex)\n local out={\n data ={},\n result = {}\n }\n\tlocal phy\n\t\n local ErrorCode = IsValid(hex,module_str)\n if ErrorCode then \n local index_x=string.sub(hex,3,3)\n local str_num_x = string.sub(hex,4,8)\n local num_x=tonumber(str_num_x)\n \tif index_x=="8" then\n \t\tnum_x=-1 * num_x\n \tend\n \n\t\tlocal K1 = device.props.K1\n\t\tlocal K2 = device.props.K2\n\t\tlocal K3 = device.props.K3\n\t\tlocal Fo = device.props.Fo\n\t\tlog.debug("jitai_1889 公式参数=%s,%s,%s,%s",K1,K2,K3,Fo)\n\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil then\n\t\t\tlog.debug("jitai_1889 公式参数有nil")\n\t\telse\n\t\t\tlocal Fi=num_x --经过厂家确认 公式带入的是模数\n\t\t\tphy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)\n\t\t\tphy=tonumber(string.format("%0.2f",phy))\n\t\tend \t\t\t\t\n out.data = {\n\t\t\tlength=phy\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,module_str_check)\n log.debug('jitai_1889:开始校验数据%s',data)\n if data == nil or (string.len(data)/2 ~=4) then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if tonumber(module_str_check)~= tonumber(string.sub(data,1,2)) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug("jitai_1889 模块错误 module_str_check=%s ,tostring(string.sub(data,1,2)=%s",module_str_check,string.sub(data,1,2))\n return false\n end\n log.debug('jitai_1889:数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2018-05-31 14:06:55.133+08 2018-11-07 10:44:43.285+08 2018-05-31 \N
+9830e7d2-be5b-4676-92da-cd5814982205 HK_Alarm \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua local recordTime\nlocal rkey\nlocal rTokenkey\nstart = function()\n local req = {\n type = 'http', --注意 这里不管https还是http都写 http\n url = '',\n method = 'post'\n -- header = {}\n }\n \tlog.debug('yinshiyun iota测试日志')\n log.debug('yinshiyun os.time()=%s', os.time())\n rkey = device.id .. '_endTime'\n rTokenkey = device.id .. '_token'\n local rvalue = tonumber(getRedisValue(rkey))\n local rTokenAndTimeStr=getRedisValue(rTokenkey)\n log.debug('yinshiyun rTokenAndTimeStr type=[%s][%s]%s',type(rTokenAndTimeStr),rTokenAndTimeStr==nil,rTokenAndTimeStr)\n local tokenStr\n if rTokenAndTimeStr~= nil then\n local rtt=Split(rTokenAndTimeStr,'===')\n local tokenExpireTime=tonumber(rtt[2])\n if tokenExpireTime/1000>(os.time()-3600*24) then --token未过期\n tokenStr=rtt[1]\n log.debug('yinshiyun redis获取[tokenExpireTime=%s]token=%s',tokenExpireTime,tokenStr)\n else\n log.debug('yinshiyun 开始获取新token')\n tokenStr=getNewToken()\n\n end\n else\n tokenStr=getNewToken()\n log.debug('yinshiyun rTokenAndTimeStr=%s',rTokenAndTimeStr)\n end\n\n if rToken ~= nil then\n recordTime = tonumber(rvalue)\n else\n recordTime = (os.time() - 60 * 30) * 1000 --首次 默认获取 前30分钟数据\n end\n\n \n if rvalue ~= nil then\n recordTime = tonumber(rvalue)\n else\n recordTime = (os.time() - 60 * 30) * 1000 --首次 默认获取 前30分钟数据\n end\n local param = {\n accessToken = tokenStr,--'at.a6diemkr7z1uw3ax1ok8da21czi5iudv-35zqn4u8a4-0h04249-wrhgenopd',\n deviceSerial = device.props.deviceSerial,\n pageSize = 1, -- 只获取一个最新告警\n pageStart = 0,\n startTime = tonumber(string.sub(tostring(recordTime),1,-2)),\n -- 萤石云接口故障,开始时间不能精确到毫秒,不然没有customerInfo\n endTime = os.time() * 1000,\n status = 2, -- 告警消息状态:2-所有,1-已读,0-未读,默认为0(未读状态)\n alarmType = -1 -- 告警类型,默认为-1(全部)\n }\n req.url = string.format('https://open.ys7.com/api/lapp/alarm/device/list?accessToken=%s&deviceSerial=%s&pageSize=%s&pageStart=0&startTime=%s&endTime=%s&status=2&alarmType=-1', param.accessToken, param.deviceSerial, param.pageSize, param.startTime, param.endTime)\n\n log.debug('yinshiyun req=%s', json.encode(req))\n log.debug('yinshiyun url=%s', req.url)\n --log.debug('yinshiyun 设备原型=%s', json.encode(device))\n\n --req.ContentType = 'application/x-www-form-urlencoded'--'application/json' --'application/x-www-form-urlencoded'\n\n local ok, ack = ctx:ssend(req, 4000)\n\n if ack == nil then\n log.debug('yinshiyun ack==nil')\n else\n log.debug('yinshiyun ok=%s,ack=%s', ok, ack.body)\n end\n local out = {\n type = 1,\n data = {},\n result = {}\n }\n if not ok or ack == nil then\n log.debug('yinshiyun not ok,ack=%s', json.encode(ack))\n out.result = {\n code = 1002,\n msg = 'timeout'\n }\n else --OK\n if ack.code == 200 and ack.body ~= '' then -- http应答\n log.debug('yinshiyun ack=%s', ack.body)\n out.data, dtime = parseAckStr(ack.body)\n out.time = dtime\n local alarmmsg = getAlarmMessage(out.data.alarmType)\n out.result = {\n code = out.data.alarmType,\n msg = string.format('产生:%s,查看监控截图:%s', alarmmsg, out.data.alarmPicUrl)\n }\n else\n log.debug('yinshiyun request data error code=%s body=%s', ack.code, ack.body)\n end\n end\n log.debug('yinshiyun out=%s', json.encode(out))\n ctx:done(json.encode(out))\nend\n\nparseAckStr = function(ackDataStr)\n local resultTable = {}\n local dataTime\n local dataTable = json.decode(ackDataStr)\n local total = dataTable.page.total\n\n --Sleep(1)\n\n local rt_data = dataTable.data\n\n for k, v in ipairs(rt_data) do\n --log.debug('yinshiyun k=%s, value=%s', k, json.encode(v))\n\n local alarmDeviceName = v.alarmName\n local alarmType = v.alarmType\n local alarmTime = v.alarmTime\n dataTime = unixtimestampToTime(alarmTime / 1000)\n\n local isChecked = v.isChecked --是否已读:0-未读,1-已读\n\n local moduleId = v.deviceSerial --设备序列号\n\n local alarmPicUrl = v.alarmPicUrl --告警图片地址\n local customerType = v.customerType --透传设备参数类型 可以看作告警类型,温度报警 or 火点报警 "hightemperature"\n local customerInfo = v.customerInfo -- "type=1006|preid=0|ruleid=0|temp=23.96C"\n\n log.debug('yinshiyun m=%s 告警信息=%s', moduleId, customerInfo)\n\n local temperature\n\n if customerType == 'hightemperature' then\n --温度阈值告警,解析温度\n local tempindex = string.find(customerInfo, 'temp=') + 5\n local tempStr = string.sub(customerInfo, tempindex, -2)\n temperature = tonumber(tempStr)\n end\n\n resultTable = {\n alarmDeviceName = alarmDeviceName,\n alarmType = alarmType,\n isChecked = isChecked,\n alarmPicUrl = alarmPicUrl,\n customerType = customerType,\n temperature = temperature,\n customerInfo = customerInfo\n --recordTime=recordTime,\n --endTime=os.time()*1000\n }\n\n --time = timenow\n\n --更新endTime\n if alarmTime > recordTime then\n setRedisValue(rkey, alarmTime)\n else\n log.debug('yinshiyun redis不更新 ')\n end\n end\n log.debug('yinshiyun resultTable=%s', json.encode(resultTable))\n return resultTable, dataTime\nend\n\nSleep = function(n)\n local t0 = os.clock()\n while os.clock() - t0 <= n do\n end\nend\n\n--获取采集仪下面的通道信息\nfunction getDeviceInfo(moduleid, channel)\n --log.debug("yinshiyun 查询 传感器ID: moduleid=%s,channel=%s", moduleid,channel)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices\n --log.debug("yinshiyun 查询 节点层 设备device=%s",json.encode(subdevices))\n\n for i, link in pairs(device.dnlinks) do\n --log.debug("yinshiyun link=%s",json.encode(link))\n for j, node in pairs(link.devices) do\n --log.debug("yinshiyun node=%s",json.encode(node))\n --log.debug("yinshiyun 模块号(节点) node.uplink.props.node_id=%s",node.uplink.props.node_id)\n local moduleNo = node.uplink.props.module\n if moduleNo == tostring(moduleid) then\n for k, sublink in pairs(node.dnlinks) do\n --log.debug("yinshiyun sublink=%s",json.encode(sublink))\n for u, subdevice in pairs(sublink.devices) do\n --log.debug("yinshiyun sensor=%s",json.encode(subdevice))\n\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n log.debug('yinshiyun m=%s,c=%s 匹配到设备=%s', moduleid, channel, json.encode(subdevice))\n\n return subdevice\n end\n end\n end\n end\n end\n end\n\n --log.debug("yinshiyun has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug("yinshiyun has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\nunixtimestampToTime = function(timenum)\n --log.debug('yinshiyun timenum=%s', timenum)\n local unixtime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --log.debug('yinshiyun recordTime=%s', recordTime)\n return unixtime\nend\n\ngetRedisValue = function(redisKey)\n local redisValue\n\n local r1, r1ok = redis.get(redisKey) --获取上次记录时间\n log.debug('yinshiyun r1=%s,r1ok=%s', r1, r1ok)\n if r1ok and r1 ~= nil then\n redisValue = r1\n log.debug('yinshiyun r1=%s,r1ok=%s, get redisValue[%s]=%s', r1, r1ok, redisKey,redisValue)\n end\n return redisValue\nend\n\nsetRedisValue = function(redisKey, redisValue)\n local r1, r1ok = redis.set(redisKey, tostring(redisValue))\n log.debug('yinshiyun r1=%s,r1ok=%s, set redisValue=%s', r1, r1ok, redisValue)\nend\n\ngetAlarmMessage = function(code)\n local msg = {\n [10037] = '温度过高告警',\n [10038] = '温度过低告警',\n [10039] = '温度过高告警',\n [10040] = '温度过低告警'\n }\n\n return msg[code]\nend\n\n\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n\ngetNewToken=function()\n local newToken\n local req_token = {\n type = 'http', \n url = '',\n method = 'post'\n -- header = {}\n }\n local param_token = {\n appKey = '5d16a667e1c2423d9d0d634f781810b4',\n appSecret = '0cc4e1ec4e6a53ea3dabeb09cd5f468b'\n \n }\n req_token.url = string.format('https://open.ys7.com/api/lapp/token/get?appKey=%s&appSecret=%s', param_token.appKey, param_token.appSecret)\n\n log.debug('yinshiyun url=%s', req_token.url)\n local ok, ack = ctx:ssend(req_token, 4000)\n\n if ack.code == 200 and ack.body ~= '' then -- http应答\n log.debug('yinshiyun ackBody_token=%s', ack.body)\n local dataTable = json.decode(ack.body)\n newToken = dataTable.data.accessToken\n local newTokenAndExpireTime=string.format("%s===%s",newToken,dataTable.data.expireTime)\n setRedisValue(rTokenkey, newTokenAndExpireTime)--记录新的newToken===ExpireTime\n\n else\n log.debug('yinshiyun request token error code=%s body=%s', ack.code, ack.body)\n end\n\n\n log.debug('yinshiyun newToken=%s', newToken)\n return newToken\nend INLINE 2020-04-01 09:56:11.094+08 2020-04-15 13:43:29.647+08 2020-04-01 \N
+0a4cfb69-6284-4d4c-946f-994b662579b0 shutaisuoying \N 这个协议是根据索引这个对照关系写的 1.0 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 f 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 Lua start = function()\n --ctx:asend('010203')\n log.debug('shutaisuoying device=%s', json.encode(device))\nend\n\nonData = function(hex,index)\n log.debug('shutaisuoying hex=%s[%s] type(index)=[%s]', hex, index, type(index))\n if index == 2 then\n ok = ctx:asend('670d0a') --"g/n/r" DT运行当前工作计划\n ctx:sleep(1)\n ok = ctx:asend('2f682f6e2f632f752f442f542f4e0d0a') --"/H/n/r" DT 按照指定格式 上报数据\n ctx:sleep(1)\n ok = ctx:asend('7032323d34340d0a')\n \t\tctx:sleep(1)\n ok = ctx:asend('5031313d35303020200d0a')\n \t\tctx:sleep(1)\n ok = ctx:asend('5031353d330d0a')\n \t\tctx:sleep(1)\n ok = ctx:asend('5031373d350d0a')\n \n end\n log.debug("shutaisuoying device =%s", json.encode(device))\n\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n --log.debug('shutaisuoying device=%s', json.encode(device))\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local sData = HextoStr(hex) --将16码流转化成转化成字符串\n log.debug('shutaisuoying 111111sData= %s', sData)\n \n local sArray = Split(sData, ',') --以空格分割后得到的table表\n log.debug('shutaisuoying sArray=%s', json.encode(sArray))\n local datastr = sArray[2] --取出带Date 的数据\n local timestr = sArray[4] --取出time\n\t\tlocal timenowstr=datastr .. timestr\n\t\tlog.debug('shutaisuoying timenowstr=%s', timenowstr)\n\t\tlocal timenow = unixtimestamp(timenowstr)\n\n \n\n --[[local devicesdata = device.dnlinks[1].devices\n log.debug('shutaisuoying devicesdata=%s', json.encode(devicesdata))\n local devicesdatas = device\n log.debug('shutaisuoying devicesdatas=%s', json.encode(devicesdatas))]]--\n\n for index, childDevice in pairs(device.dnlinks[1].devices) do\n --log.debug('shutaisuoying 遍历子设备 是否匹配设备child=%s', json.encode(childDevice))\n\n --土壤水分传感器 --0:144.8|3:279.7|6:365.9|9:531.5|12:663.2|15:874.9 DTC-SD\n if childDevice.deviceMetaId == '005826c9-dd60-4013-99bc-da28bc0d9c93' then\n local channelStrCheck = childDevice.uplink.props.channel\n\n local bb = type(channelStrCheck)\n\n local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n\n local tableleg = table_leng(relatedChannel) --获取table的长度\n\n if tableleg == 1 then --这是对方通道只写一个值时走的方法\n local suy = relatedChannel[1] --电压值的通道\n\n local suydata = tonumber(sArray[tonumber(suy) + 4]) --电压值\n local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n\n if formulaId == '3207c7a3-db9b-40cf-ab1b-6949a3122239' then\n local dataAreaSample = childDevice.uplink.capabilities[1].formula.props.dataArea\n local physicalvalue = getCalcuData(dataAreaSample,suydata)\n local data1 = {\n data = {\n voltage_ratio = tonumber(string.format("%0.3f",suydata)),\n physicalvalue = tonumber(string.format("%0.3f",physicalvalue))\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n end\n\n --水稳应变计 --- 公式 K*(X-X0)+K1*(Y-Y0) DTC-YB-C\n if childDevice.deviceMetaId == 'f29e4bb2-0e42-4016-b27e-f2377c115ff1' then\n local channelStrCheck = childDevice.uplink.props.channel\n log.debug('shutaisuoying 子设备模块通道 接口获取 c=%s ', channelStrCheck)\n local bb = type(channelStrCheck)\n log.debug('shutaisuoying 得到通道数据的类型 bb=%s ', bb)\n local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n log.debug('shutaisuoying relatedChannel=%s', json.encode(relatedChannel))\n\n local tableleg = table_leng(relatedChannel) --获取table的长度\n log.debug('shutaisuoying tableleg=%s', tableleg)\n if tableleg == 1 then --这是对方通道只写一个值时走的方法\n local suy = relatedChannel[1] --这个是电压比的通道\n log.debug('shutaisuoying suy=%s', suy)\n log.debug('shutaisuoying 这个是数据表sArray=%s', json.encode(sArray))\n local suydata = sArray[tonumber(suy) + 4] --这个是电压比\n log.debug('shutaisuoying suydata=%s', suydata)\n local K = childDevice.uplink.capabilities[1].formula.props.K\n local KK = type(K)\n log.debug('shutaisuoying KK=%s', KK)\n log.debug('shutaisuoying K=%s', K)\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local K1K1 = type(K1)\n log.debug('shutaisuoying K1K1=%s', K1K1)\n log.debug('shutaisuoying K1=%s', K1)\n local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 电压比初值\n local X0X0 = type(X0)\n log.debug('shutaisuoying X0X0=%s', X0X0)\n log.debug('shutaisuoying X0=%s', X0)\n local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0 -- 温度初值\n local Y0Y0 = type(Y0)\n log.debug('shutaisuoying Y0Y0=%s', Y0Y0)\n log.debug('shutaisuoying Y0=%s', Y0)\n local Temperature = 0\n local Phy = K * (suydata - X0) + K1 * (Temperature - Y0) --最后的物理量\n log.debug('shutaisuoying 最后物理量Phy=%s', Phy)\n local data1 = {\n data = {\n voltage_ratio = suydata,\n temperature = Temperature,\n physicalvalue = Phy\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n else\n local suy = relatedChannel[1] --这个是电压比的通道值\n log.debug('shutaisuoying suy=%s', suy)\n local suyn = relatedChannel[2] --这个是温度值的通道值\n log.debug('shutaisuoying suyn=%s', suyn)\n local suydata = sArray[tonumber(suy) + 4] --这个是电压比\n local suydatatem = sArray[tonumber(suyn) + 4] --这个是温度值\n log.debug('shutaisuoying suydatatem=%s', suydatatem)\n local K = childDevice.uplink.capabilities[1].formula.props.K\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 电压比初值\n local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0 -- 温度初值\n\n local Phy = K * (suydata - X0) + K1 * (suydatatem - Y0) --最后的物理量\n\n local data1 = {\n data = {\n voltage_ratio = suydata,\n temperature = suydatatem,\n physicalvalue = Phy\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n\n --竖向应变计 --- 公式 K*(X-X0)+K1*(Y-Y0) DTC-YB-AV\n if childDevice.deviceMetaId == 'f535897b-dc69-4835-b0d7-b4a6062db938' then\n local channelStrCheck = childDevice.uplink.props.channel\n log.debug('shutaisuoying 子设备模块通道 接口获取 c=%s ', channelStrCheck)\n local bb = type(channelStrCheck)\n log.debug('shutaisuoying 得到通道数据的类型 bb=%s ', bb)\n local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n log.debug('shutaisuoying relatedChannel=%s', json.encode(relatedChannel))\n\n local tableleg = table_leng(relatedChannel) --获取table的长度\n log.debug('shutaisuoying tableleg=%s', tableleg)\n if tableleg == 1 then --这是对方通道只写一个值时走的方法\n local suy = relatedChannel[1] --这个是电压比的通道\n log.debug('shutaisuoying suy=%s', suy)\n log.debug('shutaisuoying 这个是数据表sArray=%s', json.encode(sArray))\n local suydata = sArray[tonumber(suy) + 4] --这个是电压比\n log.debug('shutaisuoying suydata=%s', suydata)\n local K = childDevice.uplink.capabilities[1].formula.props.K\n local KK = type(K)\n log.debug('shutaisuoying KK=%s', KK)\n log.debug('shutaisuoying K=%s', K)\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local K1K1 = type(K1)\n log.debug('shutaisuoying K1K1=%s', K1K1)\n log.debug('shutaisuoying K1=%s', K1)\n local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 电压比初值\n local X0X0 = type(X0)\n log.debug('shutaisuoying X0X0=%s', X0X0)\n log.debug('shutaisuoying X0=%s', X0)\n local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0 -- 温度初值\n local Y0Y0 = type(Y0)\n log.debug('shutaisuoying Y0Y0=%s', Y0Y0)\n log.debug('shutaisuoying Y0=%s', Y0)\n local Temperature = 0\n local Phy = K * (suydata - X0) + K1 * (Temperature - Y0) --最后的物理量\n log.debug('shutaisuoying 最后物理量Phy=%s', Phy)\n local data1 = {\n data = {\n voltage_ratio = suydata,\n temperature = Temperature,\n physicalvalue = Phy\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n else\n local suy = relatedChannel[1] --这个是电压比的通道值\n log.debug('shutaisuoying suy=%s', suy)\n local suyn = relatedChannel[2] --这个是温度值的通道值\n log.debug('shutaisuoying suyn=%s', suyn)\n local suydata = sArray[tonumber(suy) + 4] --这个是电压比\n local suydatatem = sArray[tonumber(suyn) + 4] --这个是温度值\n log.debug('shutaisuoying suydatatem=%s', suydatatem)\n local K = childDevice.uplink.capabilities[1].formula.props.K\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 电压比初值\n local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0 -- 温度初值\n\n local Phy = K * (suydata - X0) + K1 * (suydatatem - Y0) --最后的物理量\n\n local data1 = {\n data = {\n voltage_ratio = suydata,\n temperature = suydatatem,\n physicalvalue = Phy\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n\n --沥青应变计 --- 公式 K*(X-X0)+K1*(Y-Y0) DTC-YB-A\n if childDevice.deviceMetaId == '5102e0bc-4778-43b6-80d3-fd71e4032088' then\n local channelStrCheck = childDevice.uplink.props.channel\n log.debug('shutaisuoying 子设备模块通道 接口获取 c=%s ', channelStrCheck)\n local bb = type(channelStrCheck)\n log.debug('shutaisuoying 得到通道数据的类型 bb=%s ', bb)\n local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n log.debug('shutaisuoying relatedChannel=%s', json.encode(relatedChannel))\n\n local tableleg = table_leng(relatedChannel) --获取table的长度\n log.debug('shutaisuoying tableleg=%s', tableleg)\n if tableleg == 1 then --这是对方通道只写一个值时走的方法\n local suy = relatedChannel[1] --这个是电压比的通道\n log.debug('shutaisuoying suy=%s', suy)\n log.debug('shutaisuoying 这个是数据表sArray=%s', json.encode(sArray))\n local suydata = sArray[tonumber(suy) + 4] --这个是电压比\n log.debug('shutaisuoying suydata=%s', suydata)\n local K = childDevice.uplink.capabilities[1].formula.props.K\n local KK = type(K)\n log.debug('shutaisuoying KK=%s', KK)\n log.debug('shutaisuoying K=%s', K)\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local K1K1 = type(K1)\n log.debug('shutaisuoying K1K1=%s', K1K1)\n log.debug('shutaisuoying K1=%s', K1)\n local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 电压比初值\n local X0X0 = type(X0)\n log.debug('shutaisuoying X0X0=%s', X0X0)\n log.debug('shutaisuoying X0=%s', X0)\n local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0 -- 温度初值\n local Y0Y0 = type(Y0)\n log.debug('shutaisuoying Y0Y0=%s', Y0Y0)\n log.debug('shutaisuoying Y0=%s', Y0)\n local Temperature = 0\n local Phy = K * (suydata - X0) + K1 * (Temperature - Y0) --最后的物理量\n log.debug('shutaisuoying 最后物理量Phy=%s', Phy)\n local data1 = {\n data = {\n voltage_ratio = suydata,\n temperature = Temperature,\n physicalvalue = Phy\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n else\n local suy = relatedChannel[1] --这个是电压比的通道值\n log.debug('shutaisuoying suy=%s', suy)\n local suyn = relatedChannel[2] --这个是温度值的通道值\n log.debug('shutaisuoying suyn=%s', suyn)\n local suydata = sArray[tonumber(suy) + 4] --这个是电压比\n local suydatatem = sArray[tonumber(suyn) + 4] --这个是温度值\n log.debug('shutaisuoying suydatatem=%s', suydatatem)\n local K = childDevice.uplink.capabilities[1].formula.props.K\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 电压比初值\n local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0 -- 温度初值\n\n local Phy = K * (suydata - X0) + K1 * (suydatatem - Y0) --最后的物理量\n\n local data1 = {\n data = {\n voltage_ratio = suydata,\n temperature = suydatatem,\n physicalvalue = Phy\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n\n --温度计 --没有公式 DTC-WD\n if childDevice.deviceMetaId == '50fc0df9-2b02-445b-b04e-17209e8c69ee' then\n local channelStrCheck = childDevice.uplink.props.channel\n log.debug('shutaisuoying 子设备模块通道 接口获取 c=%s ', channelStrCheck)\n local bb = type(channelStrCheck)\n log.debug('shutaisuoying 得到通道数据的类型 bb=%s ', bb)\n local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n log.debug('shutaisuoying relatedChannel=%s', json.encode(relatedChannel))\n\n local tableleg = table_leng(relatedChannel) --获取table的长度\n log.debug('shutaisuoying tableleg=%s', tableleg)\n if tableleg == 1 then --这是对方通道只写一个值时走的方法\n local suy = relatedChannel[1] --这个是温度值的通道\n log.debug('shutaisuoying suy=%s', suy)\n log.debug('shutaisuoying 这个是数据表sArray=%s', json.encode(sArray))\n local physicalvalue = sArray[tonumber(suy) + 4] --这个是温度值\n log.debug('shutaisuoying physicalvalue=%s', physicalvalue)\n\n local data1 = {\n data = {\n physicalvalue = physicalvalue\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n end\n\n ---分割线\n end\n\n --多点沉降计 --K*(X-X0) DTC-SYL\n if childDevice.deviceMetaId == '8392cdb0-52c7-4fee-8ace-a64e5cf86240' then\n local channelStrCheck = childDevice.uplink.props.channel\n log.debug('shutaisuoying 子设备模块通道 接口获取 c=%s ', channelStrCheck)\n local bb = type(channelStrCheck)\n log.debug('shutaisuoying 得到通道数据的类型 bb=%s ', bb)\n local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n log.debug('shutaisuoying relatedChannel=%s', json.encode(relatedChannel))\n\n local tableleg = table_leng(relatedChannel) --获取table的长度\n log.debug('shutaisuoying tableleg=%s', tableleg)\n if tableleg == 1 then --这是对方通道只写一个值时走的方法\n local suy = relatedChannel[1] --这个是电压比的通道\n log.debug('shutaisuoying suy=%s', suy)\n log.debug('shutaisuoying 这个是数据表sArray=%s', json.encode(sArray))\n local suydata = sArray[tonumber(suy) + 4] --这个是电压值\n local K = childDevice.uplink.capabilities[1].formula.props.K\n\n local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 电压比初值\n local Phy = K * (suydata - X0) --最后的物理量\n\n local data1 = {\n data = {\n voltage_ratio = suydata,\n physicalvalue = Phy\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n end\n\n ---分割线\n end\n\n --裂缝计 --K*(X^2-X0^2)/1000 DTC-LF\n if childDevice.deviceMetaId == 'd756ead6-3c0a-4d1e-be3f-dde6e031a048' then\n local channelStrCheck = childDevice.uplink.props.channel\n log.debug('shutaisuoying 子设备模块通道 接口获取 c=%s ', channelStrCheck)\n local bb = type(channelStrCheck)\n log.debug('shutaisuoying 得到通道数据的类型 bb=%s ', bb)\n local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n log.debug('shutaisuoying relatedChannel=%s', json.encode(relatedChannel))\n\n local tableleg = table_leng(relatedChannel) --获取table的长度\n log.debug('shutaisuoying tableleg=%s', tableleg)\n if tableleg == 1 then --这是对方通道只写一个值时走的方法\n local suy = relatedChannel[1] --这个是频率的通道\n log.debug('shutaisuoying suy=%s', suy)\n log.debug('shutaisuoying 这个是数据表sArray=%s', json.encode(sArray))\n local suydata = sArray[tonumber(suy) + 4] --这个是频率值\n local K = childDevice.uplink.capabilities[1].formula.props.K\n local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 频率初值\n local Phy = K * (suydata ^ 2 - X0 ^ 2) / 1000\n --最后的物理量\n local data1 = {\n data = {\n frequency = suydata,\n physicalvalue = Phy\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n\n --倾角计 --K*(X-X0)/1000 DTC-QJ\n if childDevice.deviceMetaId == 'fe3a614d-329c-4b70-99ff-f95ccb28ab79' then\n local channelStrCheck = childDevice.uplink.props.channel\n log.debug('shutaisuoying 子设备模块通道 接口获取 c=%s ', channelStrCheck)\n local bb = type(channelStrCheck)\n log.debug('shutaisuoying 得到通道数据的类型 bb=%s ', bb)\n local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n log.debug('shutaisuoying relatedChannel=%s', json.encode(relatedChannel))\n\n local tableleg = table_leng(relatedChannel) --获取table的长度\n log.debug('shutaisuoying tableleg=%s', tableleg)\n if tableleg == 1 then --这是对方通道只写一个值时走的方法\n local suy = relatedChannel[1] --这个是电压比的通道\n log.debug('shutaisuoying suy=%s', suy)\n log.debug('shutaisuoying 这个是数据表sArray=%s', json.encode(sArray))\n local suydata = sArray[tonumber(suy) + 4] --这个是电压值\n local K = childDevice.uplink.capabilities[1].formula.props.K\n local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 电压初值\n local Phy = K * (suydata - X0) / 1000\n --最后的物理量\n local data1 = {\n data = {\n voltage_ratio = suydata,\n physicalvalue = Phy\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n\n --土压力计 --K*(X-4) DTC-TYL-I\n if childDevice.deviceMetaId == 'f7374ca5-78cb-4578-bfe3-df32eb350d05' then\n local channelStrCheck = childDevice.uplink.props.channel\n log.debug('shutaisuoying 子设备模块通道 接口获取 c=%s ', channelStrCheck)\n local bb = type(channelStrCheck)\n log.debug('shutaisuoying 得到通道数据的类型 bb=%s ', bb)\n local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n log.debug('shutaisuoying relatedChannel=%s', json.encode(relatedChannel))\n\n local tableleg = table_leng(relatedChannel) --获取table的长度\n log.debug('shutaisuoying tableleg=%s', tableleg)\n if tableleg == 1 then --这是对方通道只写一个值时走的方法\n local suy = relatedChannel[1] --这个是电流的通道\n log.debug('shutaisuoying suy=%s', suy)\n log.debug('shutaisuoying 这个是数据表sArray=%s', json.encode(sArray))\n local suydata = sArray[tonumber(suy) + 4] --这个是电流值\n log.debug('shutaisuoying suydata=%s', suydata)\n local K = childDevice.uplink.capabilities[1].formula.props.K\n log.debug('shutaisuoying K=%s', K)\n local Phy = K * (suy - 4)\n log.debug('shutaisuoying Phy=%s', Phy)\n local data1 = {\n data = {\n voltage_ratio = suydata,\n physicalvalue = Phy\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n\n --土压力计 --- 公式 K*((X^2)/1000-X0)+K1*(Y-Y0) DTC-TYL-FW\n if childDevice.deviceMetaId == '37bc2c29-264c-4366-8fe1-9c2984702b94' then\n local channelStrCheck = childDevice.uplink.props.channel\n log.debug('shutaisuoying 子设备模块通道 接口获取 c=%s ', channelStrCheck)\n local bb = type(channelStrCheck)\n log.debug('shutaisuoying 得到通道数据的类型 bb=%s ', bb)\n local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n log.debug('shutaisuoying relatedChannel=%s', json.encode(relatedChannel))\n\n local tableleg = table_leng(relatedChannel) --获取table的长度\n log.debug('shutaisuoying tableleg=%s', tableleg)\n if tableleg == 1 then --这是对方通道只写一个值时走的方法\n local suy = relatedChannel[1] --这个是频率的通道\n log.debug('shutaisuoying suy=%s', suy)\n log.debug('shutaisuoying 这个是数据表sArray=%s', json.encode(sArray))\n local suydata = sArray[tonumber(suy) + 4] --这个是频率值\n log.debug('shutaisuoying suydata=%s', suydata)\n local K = childDevice.uplink.capabilities[1].formula.props.K\n\n log.debug('shutaisuoying K=%s', K)\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\n log.debug('shutaisuoying K1=%s', K1)\n local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 频率初值\n\n log.debug('shutaisuoying X0=%s', X0)\n local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0 -- 温度初值\n log.debug('shutaisuoying Y0=%s', Y0)\n --- 公式 K*((X^2)/1000-X0)+K1*(Y-Y0)\n local Temperature = 0\n local Phy = K * (suydata ^ 2 / 1000 - X0) + K1 * (Temperature - Y0) --最后的物理量\n log.debug('shutaisuoying 最后物理量Phy=%s', Phy)\n local data1 = {\n data = {\n frequency = suydata,\n temperature = Temperature,\n physicalvalue = Phy\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n else\n local suy = relatedChannel[1] --这个是频率的通道值\n log.debug('shutaisuoying suy=%s', suy)\n local suyn = relatedChannel[2] --这个是温度值的通道值\n log.debug('shutaisuoying suyn=%s', suyn)\n local suydata = sArray[tonumber(suy) + 4] --这个是频率\n local suydatatem = sArray[tonumber(suyn) + 4] --这个是温度值\n log.debug('shutaisuoying suydatatem=%s', suydatatem)\n local K = childDevice.uplink.capabilities[1].formula.props.K\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 频率初值\n local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0 -- 温度初值\n\n local Phy = K * (suydata - X0) + K1 * (suydatatem - Y0) --最后的物理量\n\n local data1 = {\n data = {\n frequency = suydata,\n temperature = suydatatem,\n physicalvalue = Phy\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n -------\n\t\t\t\n\t\t\t--DT湿度传感器 --Kx DT-WSD\n if childDevice.deviceMetaId == '97078fa2-e944-487b-8913-e3c2c33c6ff0' then\n local channelStrCheck = childDevice.uplink.props.channel\n log.debug('shutaisuoying 子设备模块通道 接口获取 c=%s ', channelStrCheck)\n local bb = type(channelStrCheck)\n log.debug('shutaisuoying 得到通道数据的类型 bb=%s ', bb)\n local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n log.debug('shutaisuoying relatedChannel=%s', json.encode(relatedChannel))\n\n local tableleg = table_leng(relatedChannel) --获取table的长度\n log.debug('shutaisuoying tableleg=%s', tableleg)\n if tableleg == 1 then --这是对方通道只写一个值时走的方法\n local suy = relatedChannel[1] --这个是电压的通道\n log.debug('shutaisuoying suy=%s', suy)\n log.debug('shutaisuoying 这个是数据表sArray=%s', json.encode(sArray))\n local suydata = sArray[tonumber(suy) + 4] --这个是电压值\n log.debug('shutaisuoying suydata=%s', suydata)\n local K = childDevice.uplink.capabilities[1].formula.props.K\n log.debug('shutaisuoying K=%s', K)\n local Phy = K*suydata\n log.debug('shutaisuoying Phy=%s', Phy)\n local data1 = {\n data = {\n voltage_ratio = suydata,\n physicalvalue = Phy\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n\n \n end\n --else\n --ok = ctx:asend('2f682f6e2f632f752f442f542f4e0a7032323d34340a5031313d35303020200a5031353d330a5031373d350a') --"/H/n/r" DT 按照指定格式 上报数据\n --out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n log.debug('shutaisuoying resultData=%s,hex=%s', json.encode(out), hex)\n ctx:notify(resultData)\nend\n\ngetCalcuData = function(dataAreaSample,suydata)\n local dots = getDataAreasSamle(dataAreaSample)\n local Phy\n for index, value in ipairs(dots) do\n local humi = value.humidity\n local volt = value.voltage\n local next_humi\n local next_volt\n local nextIsValid = false\n if index < #dots then\n nextIsValid = true\n next_humi = dots[index + 1].humidity\n next_volt = dots[index + 1].voltage\n end\n\n if suydata < volt then\n Phy = humi\n break\n elseif nextIsValid and volt < suydata and suydata < next_volt then\n local k = (next_humi - humi) / (next_volt - volt)\n Phy = k * (suydata - volt) + humi\n break\n elseif not nextIsValid then\n Phy = humi\n break\n end\n end\n return Phy\nend\n\ngetDataAreasSamle = function(strFormulaParas)\n local dataArea_paras = {}\n local formula_paras = Split(strFormulaParas, '|')\n for i = 1, #formula_paras, 1 do\n local str_point_coordinates = formula_paras[i]\n local dt_point_coordinates = Split(str_point_coordinates, ':')\n local dataArea_para = {}\n dataArea_para['humidity'] = tonumber(dt_point_coordinates[1])\n dataArea_para['voltage'] = tonumber(dt_point_coordinates[2])\n dataArea_paras[i] = dataArea_para\n end\n return dataArea_paras\nend\n\nIsValid = function(alldata)\n log.debug('shutaisuoying 校验开始')\n if string.len(alldata) < 10 then\n errormsg = 'allData is invalid'\n errcode = 1001\n return false\n end\n\n if string.sub(alldata, 1, 8) ~= '44617465' then\n errormsg = 'allData header is invalid'\n errcode = 1001\n return false\n end\n\n log.debug('shutaisuoying 校验通过')\n return true\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend\n\nunixtimestamp = function(datestr)\n \n local year = tonumber(string.sub(datestr,7,10))\n local month = tonumber(string.sub(datestr,4,5))\n local day = tonumber(string.sub(datestr,1,2))\n local hour = tonumber(string.sub(datestr,11,12))\n local minute = tonumber(string.sub(datestr,14,15))\n local second = tonumber(string.sub(datestr,17,18))\n --log.debug("shutaisuoying year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n --log.debug("shutaisuoying timenum=%s",timenum)\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --log.debug("shutaisuoying recordTime=%s",recordTime)\n return recordTime\nend\n INLINE 2020-01-06 09:19:19.445+08 2021-01-28 13:42:33.549+08 2020-01-06 \N
+34770cf0-cf46-4ba9-870d-5c2e73ffe8ac lrk622 \N 1.0 bfe504c8-b84a-43ec-831a-5ce698db9950 bfe504c8-b84a-43ec-831a-5ce698db9950 f bfe504c8-b84a-43ec-831a-5ce698db9950 Lua --字符串ascii->字符\nstart=function()\n --log.debug("lrk622: start module %s, ", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n --log.debug("lrk622: Data=%s",hex)\n\t--全局\n out={\n data ={},\n result = {},\n\t\ttype=2\n }\n\n local sData= HextoStr(hex)\n log.debug("lrk622: sData=%s",sData)\n local spliteData = Split(sData,';')\n\tlocal moduleData = Split(spliteData[3],':') \n\n\tlocal moduleNo = moduleData[2]--模块号\n\n\tlocal spliteData1 = Split(sData,'START;')\n local spliteData2 = Split(spliteData1[2],';END')\n\t\n local spliteData3 = Split(spliteData2[1],';')\n\t \n\t local arrlength=table.getn(spliteData3)\n\t \n\t --log.debug("lrk622: spliteData3=%s",json.encode(spliteData3))\n\t \n\t \n\tfor k, v in pairs(spliteData3) do\n\t\t--log.debug("lrk622: k=%s,v=%s",k,v)\n\t\tlocal Phy\n\t\tlocal allData=Split(v,':')\n\t\tlocal type_sensor=string.sub(allData[1],1,2)\n\t\tlog.debug("lrk622: type_sensor=%s v=%s",type_sensor,v)\n\t\tlocal type_param=string.sub(allData[1],4,5)\n\t \n\t\t\n\t\tif type_sensor=='ZX' and type_param == 'SZ' then \n\t\t\tlocal fre\n\t\t\tlocal temp\n\n\t\t\tfre = Split(spliteData3[k],':')\t\n\t\t\tlocal frequency=tonumber(fre[2])\n\t\t\tlocal channelNo=tonumber(string.sub(fre[1],6,-1)) \n\t\t\ttemp = Split(spliteData3[k+1],':')\n\t\t\tlocal temperature=tonumber(temp[2])\t\t\t\t\t\n\t\t\tlocal childDevice = getDeviceInfos(moduleNo,channelNo)\t\n log.debug('lrk622 childDevice=%s',json.encode(childDevice)) \n\n\t\t\tif\tchildDevice~=nil then\n\t\t\t\tdeviceId=childDevice.id\n\t\t\t\tlocal K = childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\t\t\n\t\t\t\tlocal F0 = childDevice.uplink.capabilities[1].formula.props.F0\n\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal T0 = childDevice.uplink.capabilities[1].formula.props.T0\n\t\t\t\tif K ==nil or F0==nil or Kt==nil or T0==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\n\t\t\t\telse\n\t\t\t\t\tPhy=K*(frequency^2 - F0^2) + Kt*(temperature-T0)\n\t\t\t\tend \n\t\t\t\n\t\t\t\tlocal data1 = {\n\t\t\t\t\tdata={\n\t\t\t\t\t\tfrequency=frequency,\n\t\t\t\t\t\ttemperature=temperature,\n\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1 \n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tlog.debug("lrk622:(振弦) out=%s",json.encode(out))\n\t\t\telse\n\t\t\t\t--log.debug('lrk622 子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\t\tend\n\t\telseif type_sensor=='ZX' and type_param == 'ZZ' then\n\t\n\n\n\t\telseif type_sensor=='CX' then\n\t\t\t--log.debug('lrk622 Step into CX')\n\t\t\tlocal cexie=Split(spliteData3[arrlength],':')\n\t local cexieData=Split(cexie[2],',')\n\t\t\t--log.debug('lrk622 cexieData=%s', json.encode(cexieData))\n\t\t\tfor kk, vv in pairs(cexieData) do\n\t\t\t\t--log.debug('lrk622 模块号=%s,通道号=%s', moduleNo, kk)\n\t\t\t\tlocal childDevice = getDeviceInfos(moduleNo, kk+4)\n\t\t\t\tphysicalvalue = vv\n\t\t\t\t--log.debug('lrk622 测斜physicalvalue=%s,通道号=%s', physicalvalue, kk)\n\t\t\t\tlocal deviceId\n\t\t\t\tif childDevice ~= nil then\n\t\t\t\t\tdeviceId = childDevice.id\n\t\t\t\t\t--log.debug('lrk622:子设备原形childDevice=%s', json.encode(childDevice))\n\n \n local data1 = {\n data = {\n physicalvalue=physicalvalue\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n \n \n\t\t\t\telse\n\t\t\t\t\tlog.debug('lrk622 子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\tend\n\t\t\tend\n\t end \n\tend \n\n local resultData =json.encode(out) --输出传递到平台上\n log.debug("lrk622: result=%s",json.encode(out))\n ctx:notify(resultData)\n\tlocal returnTime=device.props.returnTime\n\tlocal unitType=device.props.unitType\n\tlocal ceMoudle=device.props.ceMoudle\n \tlocal cmd ='$LRKKJ$;ZX_HC:' .. returnTime .. ';CX_LX:' .. unitType .. ';CX_SN:' .. ceMoudle .. ';END'\n\t--log.debug("lrk622: cmd=%s",cmd)\n\tctx:asend(toHexStr(cmd))\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n--string split函数 分割相应的字符\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(channelStrCheck) == tonumber(channelNoId) then\n return child\n\t\t\tend\n \t\n\t\tend\n else\n log.debug("lrk622: subdevices是nil")\n return nil\n end\nend\n\n INLINE 2019-11-21 10:20:42.833+08 2020-06-12 12:54:15.923+08 2019-11-21 \N
+2993963e-1c39-4e49-b5a2-b8349d634fc2 httpserverl \N 1.0 3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c 3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c f 3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c Lua \nstart = function()\n log.debug('httpserverl device=%s', json.encode(device))\n\tlog.debug('httpserverl device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n\tlog.debug('httpserverl [%s] 1111111111111moduleNo', tonumber(moduleNo))\n log.debug('httpser222222', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n --local id = httpbody.ID\n --log.debug('httpserverl hex.id=%s type=%s', httpbody.id, type(httpbody.id))\n --bodydataStr=string.gsub(bodydataStr,',{}',"")\n log.debug('httpserverl [%s] 3333333bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tlog.debug('httpserverl [%s] 打印bodypkg1111=%s', json.encode(bodypkg))\n\t--这里1\n\t--if next(bodypkg) == nil then \n\t--ack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\t--ctx:asend(ack)\t\n\t--return\n\t--end \n\t--这里1\n\tlog.debug('httpserverl count 长度之前', 1111111111111111111)\n\t--[[local count='0'\n\tfor k,v in pairs(bodypkg) do\n\tlog.debug('httpserverl [%s] count 11111111长度', count)\n count = count + 1\n\t end\n\t log.debug('httpserverl [%s] count 长度', count)\n\t if count~=6 then \n\t ack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\t ctx:asend(ack)\n\t return\n\t end ]]--\n\n\tlocal timeStamps=bodypkg['timeStamp']\n\tlog.debug('httpserverl [%s] 时间戳5555555imeStamps', tonumber(timeStamps))\n local monitorIds = bodypkg['monitorId'] --监测点ID 监测位置点 int\n\tlog.debug('httpserverl [%s] 监测点ID 监测位置点666666666monitorIds', bodypkg['monitorId'])\n local trainXOffsets = bodypkg['trainXOffset']--轨道X方向偏移值 float \n\tlog.debug('httpserverl [%s] 轨道X方向偏移值7777777trainXOffsets', bodypkg['trainXOffset'])\t\n\tlocal trainYOffsets = bodypkg['trainYOffset']--//轨道Y方向偏移值 float \n\tlog.debug('httpserverl [%s] 轨道Y方向偏移值88888888trainYOffsets', trainYOffsets)\n\tlocal trainZOffsets= bodypkg['trainZOffset'] --轨道Z方向偏移值 float \n\tlog.debug('httpserverl [%s] 轨道Z方向偏移值99999999trainZOffsets', trainZOffsets)\n\t--local roadbedOffsets = bodypkg['roadbedOffset'] --/路基沉降值 float\n\t--log.debug('httpserverl [%s] 路基沉降值101010101010roadbedOffsets', roadbedOffsets)\n\t\n\tlog.debug('httpserverl [%s] timeStamps', bodypkg['timeStamp'])\n\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do\n local deviceId = child.id\n local devceModuleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n local devceChannelNo = tonumber(child.uplink.props.channel)\n\n local data1 = {\n data = {},\n device = deviceId,\n type = 1\n }\n if tonumber(monitorIds)==devceChannelNo then\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tlocal app=tonumber(trainXOffsets)\n\t\t\t\t\t\t\t\t\t\tlog.debug('httpserverl [%s] app', roadbedOffsets)\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t data1.data.trainXOffsets=tonumber(trainXOffsets) --轨道X方向偏移值\n\t\t\t\t\t data1.data.trainYOffsets=tonumber(trainYOffsets)\t--轨道Y方向偏移值\n\t\t\t\t\t data1.data.trainZOffsets=tonumber(trainZOffsets)\t--轨道Z方向偏移值 \n\t\t\t\t\t --data1.data.roadbedOffsets=tonumber(roadbedOffsets) --路基沉降值\n\t\t\t\t\t end\n\t\t\t\t\t \n\t\t\t\ttable.insert(out.data, data1)\n \n end\n end\n\n \n\n log.debug('httpserverl [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend\n\n INLINE 2019-08-07 09:14:15.685+08 2020-01-16 16:49:16.858+08 2019-08-07 \N
+ee31c052-3056-4021-aaa5-3f0caa4d73ee nengh_weather_2401 \N 农田气象站 1.0 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b f ad0cd544-aed4-4670-9d17-f3e717a9a59b Lua bit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n\nstart=function()\n log.debug("start %s, ctx=", "nengh_weather_2401.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 1: 模块号 \n buff=iota.appendHexByte(buff, 4, endian) -- 2: 指令: 0x04 = 采集\n buff=iota.appendHexWord(buff, 0, endian) \n buff=iota.appendHexWord(buff, 0x0e, endian) \n buff=iota.appendHexCrc(buff, endian ,0)\n \n local crcH=string.sub(buff,-2,-1)\n\tlocal crcL=string.sub(buff,-4,-3)\n buff=string.sub(buff,1,12)\n buff=buff..crcH\n buff=buff..crcL \n \n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n --08042804b9032a0bd6ffdf00240106001300690321211200230019002500460000\n -- moduleId=8\n --"azimuthofWind": 105,\n\t--"evaporation": 7,\n\t--"humi": 3.6,\n\t--"illumination": 35,\n\t--"pressure": 26.200000000000003,\n\t--"radiation": 8466,\n\t--"rainFall": 80.10000000000001,\n\t--"soilHum": 0.37,\n\t--"soilTemp": 0.25,\n\t--"speedofWind": 1.9000000000000001,\n\t--"temp": -3.3000000000000003\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==66) then\n \n local IDX_SPEED_WIND = 15 --风速\n local IDX_AZIMUTH = 17 --风向\n local IDX_Humidity = 11; --湿度\n local IDX_Temp = 9 --温度\n local IDX_Pressure = 13 --气压\n local IDX_RainFall = 19 --雨量\n local IDX_Radiation = 21 --总辐射\n local IDX_Illumination = 23 --照度\n local IDX_SoilTemp = 25 --土壤温度\n local IDX_SoilHumidity = 27 --土壤湿度\n local IDX_Evaporation = 29 --蒸发\n\n\n local humi = bit:_or(bit:_lshift(iota.hexToByte(hex,IDX_Humidity,'B'), 8) , (iota.hexToByte(hex,IDX_Humidity+1,'B'))) * 0.1\n local sign = 1\n local temp\n local byTemp0 = iota.hexToByte(hex,IDX_Temp,'B')\n local byTemp1 = iota.hexToByte(hex,IDX_Temp+1,'B')\n if (byTemp0 >= 0x80)then\n sign = -1\n temp = (0xffff - bit:_or(bit:_lshift(bit:_and(byTemp0 , 0xffff) , 8) , byTemp1) + 1) * sign * 0.1 \n else\n temp = bit:_or(bit:_lshift(byTemp0 , 8) , byTemp1) * 0.1\n end \n local pressure = iota.hexToShort(hex, IDX_Pressure,'B') * 0.1\n local speedofWind = iota.hexToShort(hex, IDX_SPEED_WIND,'B') * 0.1\n local azimuthofWind = iota.hexToShort(hex, IDX_AZIMUTH,'B')\n local rainFall = iota.hexToShort(hex, IDX_RainFall,'B') * 0.1\n local radiation = iota.hexToShort(hex, IDX_Radiation,'B')\n local illumination =iota.hexToShort(hex, IDX_Illumination,'B')\n local soilTemp\n local bysoilTemp0 = iota.hexToByte(hex,IDX_SoilTemp,'B')\n local bysoilTemp1 = iota.hexToByte(hex,IDX_SoilTemp+1,'B')\n if (bysoilTemp0 >= 0x80) then\n sign = -1\n soilTemp = (0xffff - bit:_or(bit:_lshift(bit:_and(bysoilTemp0, 0xffff), 8) ,bysoilTemp1) + 1) * sign * 0.01\n else\n soilTemp = bit:_or(bit:_lshift(bysoilTemp0 , 8) , bysoilTemp1) * 0.01\n end\n local soilHum = iota.hexToShort(hex, IDX_SoilHumidity,'B') * 0.01\n local evaporation = iota.hexToShort(hex, IDX_Evaporation,'B') * 0.1 \n\n out.data = {\n temp=temp,\n humi=humi,\n pressure=pressure,\n speedofWind=speedofWind,\n azimuthofWind=azimuthofWind,\n rainFall=rainFall,\n radiation=radiation,\n illumination=illumination,\n soilTemp=soilTemp,\n soilHum=soilHum,\n evaporation=evaporation\n }\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n\n\n \n\n\n \n\n INLINE 2017-09-16 16:02:21.189+08 2018-02-28 18:32:12.191+08 2017-09-16 \N
+fe8171d5-8793-470f-a5b3-83825b6fa00f snmp协议 \N snmp采集数据 1.0.1 e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d f e1821687-1231-4e5c-a374-46d31857056d Lua walk() INLINE 2018-01-08 09:39:53.578+08 2018-01-08 09:39:53.578+08 2018-01-08 \N
+da0e74fc-336f-44bf-96a7-085b2e279d7a abc1101 \N 1101 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f 56031544-f3e0-407f-9ffa-1a54742ecfa7 Lua --[[\n协议号: 1101;\n协议名: modbus 温湿度.\n]]--\n\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\n\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "fs_1101.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\n\tok,resp=ctx:ssend(sendBuff,500)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 32字节. 大字序\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0xFC); -- 1: 1 帧头 去:FC,回 FD\n\tbuff=iota.appendHexByte(buff, 0x01); -- 1: 2 设备类型,温湿度=1\n\tbuff=iota.appendHexWord(buff, device.props.moduleId, BE); -- 2: 3/4 模块号\n\tbuff=buff.."00".."00"; -- 1 1 : 5/6 无用\n\tbuff=iota.appendHexByte(buff, 0x01); -- 1: 7 指令\n\tfor i = 8,30 do -- 1: 8/30 填写0\n\t\tbuff=buff.."00";\n\t\ti = i+1;\n\tend\n\tlocal crc = checkCRC8(buff,2)\n \tcrc =PadLeft(2,0,crc)\n\tbuff=buff..crc -- 1: 31 CRC8 加总异或,2-30\n log.debug('CRC8 Buff = %s',crc)\n\tbuff=iota.appendHexByte(buff, 0xCF); -- 1: 32 结尾\n\tlog.debug("start %s, ctx=%s ", "fs_1101.lua",buff)\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 FD01002300000100005541CC0000000000000000000000000000000000005EDF \n--temp=25.5 Hum=0.85\nfunction protocol_decode(da)\n \n\tlocal data = da;\n\t\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug(data)\n\t--判断数据有效性\t\t\t\n\t--0xFD固定帧头,01是温湿度设备类型 0xDF固定帧尾\n local startbyte = iota.hexToByte(data, 0,'B');\n local devicetype = iota.hexToByte(data, 1,'B');\n local endbyte = iota.hexToByte(data, 31,'B');\t\n\tif startbyte ~= 0xFD or devicetype ~= 0x01 or endbyte ~= 0xDF or string.len(data)/2 ~=32 then\n\t\t\n log.debug("数据无效")\n local message = 'Invalid Msg, len='\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\t\t\t\t\t\n\telse\n log.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t--data = string.sub(data, DAC_HEAD_STR_LEN + 1);\n\t\t\t\t\n\n\t\t--计算温湿度\n\t\tlocal humH = iota.hexToByte(data, 8, 'B');\n log.debug("humH等于:%s",humH)\n\t\tlocal humL = iota.hexToByte(data, 9, 'B');\n log.debug("humL等于:%s",humL)\n\t\tlocal hum = (humH*256 + humL) / 100.0;\n\t\tlocal temp = iota.hexToFloat(data, 10, 'B');\n log.debug("temp等于:%s",temp)\n\t\t--return 0,{temp,hum,},{},{};\n\t\tout.data = {\n\t\ttemp=temp,\n\t\thumid= hum,\n\t\t};\n\tend\n\t return json.encode(out)\nend\n\n\nfunction checkCRC8(val,start)\n local CRC8Table ={\n 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,\n 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,\n 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,\n 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,\n 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,\n 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,\n 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,\n 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,\n 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,\n 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,\n 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,\n 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,\n 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,\n 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,\n 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,\n 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53\n }\n local c = 0\n for i = start, string.len(val)/2 do\n local b = iota.hexToByte(val,i-1,'B')\n local index = bit:_xor(c,b)\n c = CRC8Table[index+1];\n end\n local crc8 = string.format("%X",c)\n return crc8\nend\n\nPadLeft=function(cnt,num,hex)\n local len = string.len(tostring(hex))\n local offset = cnt -tonumber(len)\n if offset == 0 then \n return hex\n else\n for i = 1,offset do \n hex = tostring(num)..tostring(hex)\n end\n end\n return hex\nend\n\n\n INLINE 2017-11-09 11:04:48.037+08 2018-02-28 18:32:12.201+08 2017-11-08 \N
+343ae175-f499-4292-8877-7f574c552f67 nawei_liquid_1 \N 静力水准仪带温度 1.0 a8f32e64-9094-49d3-9da0-9a5abd4dd33d a8f32e64-9094-49d3-9da0-9a5abd4dd33d f a8f32e64-9094-49d3-9da0-9a5abd4dd33d Lua start=function()\n\tlog.debug("load script %s, moduleId=%s", "nawei_liquid_1", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t--01 04 00 00 00 04 F1 C9\n\tlocal moduleNo=device.uplink.props.module \t\t\n\tlog.debug("nawei_liquid_1 设备模块通道 接口获取 m=%s ",moduleNo)\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x04, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) \n log.debug("nawei_liquid_1 send data: %s ",buff) \n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n else\n log.debug("nawei_liquid_1 SSend error!")\n end\n ctx:done(result)\nend\n\n--01 04 08 42 C8 00 00 41 C8 00 00 7D EA\n--moduleId=1 \n--"length"=100\n--"temperature": 25\n\nunmarshall=function(hex)\n log.debug("nawei_liquid_1 recieve data: %s ",hex) \n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then \n local length = iota.hexToFloat(hex,3,'B') \n local temperature = iota.hexToFloat(hex,7,'B') \n out.data = {\n length=length,\n --temperature=temperature\n\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data)\n log.debug('nawei_liquid_1 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x04 then\n errcode = 1001\n errormsg = 'nawei_liquid_1 Hex CMD False ' \n return false\n end\n if device.uplink.props.module ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'nawei_liquid_1 Invalid acq moduleId'\n errcode = 1004\n return false\n end\n local crcData=string.sub(data,1,-5)\n crcData=iota.appendHexCrc(crcData, 'L' ,0)\n --if icrcData ~= data then\n --errcode = 1001\n --errormsg = 'nawei_liquid_1 crc False' \n --return false\n --end\n log.debug('nawei_liquid_1 数据校验通过')\n return true\nend\n\n\n\t\n \n\n\n INLINE 2018-07-02 14:27:46.078+08 2018-07-03 11:05:32.754+08 2018-07-02 \N
+13cc59b8-9b01-4cef-88c9-40d4d9b3d798 fshs_pressure_19000 \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "fshs_pressure_19000.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fshs_pressure_19000 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("fshs_pressure_19000 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x06, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("fshs_pressure_19000,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t log.debug("fshs_pressure_19000 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("fshs_pressure_19000 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local pressure =iota.hexToFloat(hex,3,'B')\n\t\tlocal temperature =iota.hexToFloat(hex,11,'B')\n \n out.data = { \n pressure=pressure,\n\t\t\ttemperature\t=temperature\t\t\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("fshs_pressure_19000 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 17 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2018-08-10 14:51:00.255+08 2018-08-10 14:51:00.255+08 2018-08-10 \N
+89d5e195-c719-48a0-8e7b-9807f8815e03 BGK_4000 \N 1.0 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 f 224e0fc3-9311-4c4a-839d-d0363ece2ab4 Lua --//02 协议分析/2016-09-23/BGK协议 v2.0.doc\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]]\nstart = function()\n log.debug('load script %s, moduleId=%s', 'BGK_4000', device.props.moduleId or '[nil]')\n local endian = 'B'\n local buff = ''\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n if subdevices ~= nil then\n log.debug('BGK_4000:LUA:subdevices : data is =%s', json.encode(subdevices))\n for index, child in pairs(subdevices) do\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n channelNo = tonumber(child.uplink.props.channel)\n log.debug('BGK_4000 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ', moduleNo, channelNo, json.encode(moduleNo), child.props.moduleId)\n else\n moduleNo = child.props.moduleId\n channelNo = child.props.channelId\n log.debug('BGK_4000 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s', moduleNo, channelNo, json.encode(child.uplink.props))\n end\n\n log.debug('BGK_4000:模块%s通道%s的deviceId是%s:', moduleNo, channelNo, tostring(child.id))\n --log.debug("BGK_4000:子通道设备原型child=%s",json.encode(child))\n local cmdstr = string.format('%02d', tonumber(moduleNo)) .. '21' .. string.format('%02d', tonumber(channelNo))\n log.debug('BGK_4000:模块%s通道%s的cmdstr是:%s', moduleNo, channelNo, cmdstr)\n local lcr_str = LCR(cmdstr)\n lcr_str = string.upper(lcr_str)\n --转大写字符\n log.debug('BGK_4000:模块%s通道%s的lcr_str是:%s', moduleNo, channelNo, lcr_str)\n local request_asciiStr = ':' .. cmdstr .. lcr_str\n log.debug('BGK_4000:模块%s通道%s的request_asciiStr是:%s', moduleNo, channelNo, request_asciiStr)\n local buff = toHexStr(request_asciiStr)\n buff = iota.appendHexByte(buff, 0x0d, endian)\n buff = iota.appendHexByte(buff, 0x0a, endian)\n ok, resp = ctx:ssend(buff, 15000)\n local result = '{}'\n if ok and type(resp) ~= 'table' then --and json.encode(resp)~="null"\n log.debug('BGK_4000:模块%s通道%s的数据接收成功,开始解析=%s,type=%s,json.encode=%s,type(resp)==table=%s', moduleNo, channelNo, resp, type(resp), json.encode(resp), type(resp) == 'table')\n result = unmarshall(resp, child, moduleNo, channelNo)\n --解析单条数据\n table.insert(out.data, result)\n else\n log.debug('BGK_4000:模块%s通道%s的数据接收失败', moduleNo, channelNo)\n end\n end\n else\n log.debug('BGK_4000 subdevices是nil')\n return nil\n end\n\n log.debug('BGK_4000 out序列化')\n local resultData = json.encode(out)\n log.debug('BGK_4000 out序列化结果 : out is =%s', json.encode(out))\n ctx:done(resultData)\nend\n\n--3A3031323130312B302E3030303030202B39393737363036440D0A\n--moduleId=1,channelId=1\n-- "frequency": 0,\n--"phy": -80.6607188196787,\n--"temperature": -71.01792619970792\n\nunmarshall = function(hex, childDevice, subModuleId, subChannelId)\n local subData = {\n data = {},\n device = childDevice.id,\n type = 1\n }\n\n log.debug('BGK_4000:模块%s通道%s的deviceId是:%s', subModuleId, subChannelId, json.encode(childDevice))\n local ErrorCode = IsValid(hex, subModuleId, subChannelId)\n if ErrorCode then\n --码流转string\n local responseStr = toStrHex(hex)\n log.debug('BGK_4000:模块%s通道%s的解析字符串是:%s', subModuleId, subChannelId, responseStr)\n local freStr = string.sub(responseStr, 8, 15)\n local freq = tonumber(freStr)\n local data1 = tonumber(string.format('%5.3f', freq))\n local resistanceStr = string.sub(responseStr, 16, 23)\n local dResistance = tonumber(resistanceStr)\n log.debug('BGK_4000:模块%s通道%s的原始值是:freStr=%s,resistanceStr=%s', subModuleId, subChannelId, freStr, resistanceStr)\n --阻值转温度计算公式常数A,B,C\n local A = 1.4051\n local B = 2.369\n local C = 1.019\n local temp = 1 / (A * math.pow(10, -3) + B * math.pow(10, -4) * math.log(dResistance) + C * math.pow(10, -7) * math.pow(math.log(dResistance), 3)) - 273.2\n temp = tonumber(string.format('%3.2f', temp))\n local Phy\n if childDevice.uplink.capabilities[1].formula.metaid == '60039eec-76e3-47ec-9024-32d1bbd55287' then --振弦公式 metaid\n local k = childDevice.uplink.capabilities[1].formula.props.K or nil\n local kt = childDevice.uplink.capabilities[1].formula.props.Kt or nil\n local f0 = childDevice.uplink.capabilities[1].formula.props.Fo or nil\n local t0 = childDevice.uplink.capabilities[1].formula.props.To or nil\n log.debug('BGK_4000:模块%s通道%s的公式计算参数是:k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s', subModuleId, subChannelId, k, kt, f0, t0, freq, temp)\n if k ~= nil and kt ~= nil and f0 ~= nil and t0 ~= nil then\n Phy = k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n log.debug('BGK_4000:模块%s通道%s的phy是:%s', subModuleId, subChannelId, Phy)\n end\n end\n\n if childDevice.uplink.capabilities[1].formula.metaid == '121058ad-ddc3-41a9-bd75-36e58162a204' then --基康倾角仪转换公式D=G×L(R1-R0) metaid\n local Rx0 = childDevice.uplink.capabilities[1].formula.props.Rx0 or nil\n local Ry0 = childDevice.uplink.capabilities[1].formula.props.Ry0 or nil\n local G = childDevice.uplink.capabilities[1].formula.props.G or nil\n local L = childDevice.uplink.capabilities[1].formula.props.L or nil\n log.debug('BGK_4000:模块%s通道%s的公式计算参数是:Rx0=%s,Ry0=%s,G=%s,L=%s', subModuleId, subChannelId, Rx0, Ry0, G, L)\n if Rx0 ~= nil and Ry0 ~= nil and G ~= nil and L ~= nil then\n anglex = data1\n changedx = G * L * (data1 - Rx0)\n angley = dResistance\n changedy = G * L * (dResistance - Ry0)\n log.debug('BGK_4000:模块%s通道%s的anglex=%s,angley=%s', subModuleId, subChannelId, anglex, angley)\n end\n end\n\n if childDevice.uplink.capabilities[1].formula.metaid == '1a7e610f-1da2-4a2c-bbce-2faa2ead0ba9' then --模拟量线性转换数字量公式\n local dH = childDevice.uplink.capabilities[1].formula.props.dH or nil\n local dL = childDevice.uplink.capabilities[1].formula.props.dL or nil\n local aH = childDevice.uplink.capabilities[1].formula.props.aH or nil\n local aL = childDevice.uplink.capabilities[1].formula.props.aL or nil\n log.debug('BGK_4000:模块%s通道%s的公式计算参数是:dH=%s,dL=%s,aH=%s,aL=%s', subModuleId, subChannelId, dH, dL, aH, aL)\n if dH ~= nil and dL ~= nil and aH ~= nil and aL ~= nil then\n Phy = (dH - dL) / (aH - aL) * (data1 - aL) + dL\n log.debug('BGK_4000:模块%s通道%s的phy是:%s', subModuleId, subChannelId, Phy)\n end\n end\n if childDevice.uplink.capabilities[1].formula.metaid == '5c22c26c-2a9e-439f-b585-2d5e1031fc23' then --定制公式 P=K2*(R1-R0)^2+K1*(R1-R0)+C\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1 or nil\n local K2 = childDevice.uplink.capabilities[1].formula.props.K2 or nil\n local R0 = childDevice.uplink.capabilities[1].formula.props.R0 or nil\n local C = childDevice.uplink.capabilities[1].formula.props.C or nil\n local P = childDevice.uplink.capabilities[1].formula.props.P or 1 --用于原始数据转换 比例\n log.debug('BGK_4000:模块%s通道%s的公式计算参数是:K1=%s,K2=%s,R0=%s,C=%s,P=%s', subModuleId, subChannelId, K1, K2, R0, C, P)\n if K1 ~= nil and K2 ~= nil and R0 ~= nil and C ~= nil then\n R1 = freq ^ P\n Phy = K2 * (R1 - R0) ^ 2 + K1 * (R1 - R0) + C\n Phy = tonumber(string.format('%6.3f', Phy))\n log.debug('BGK_4000:模块%s通道%s的phy是:%s', subModuleId, subChannelId, Phy)\n end\n end\n\n subData.data = {\n frequency = freq,\n modulus = data1, --模拟量\n temperature = temp,\n physicalvalue = Phy, --物理量\n anglex = anglex,\n angley = angley,\n changedx = changedx,\n changedy = changedy\n }\n else\n subData.result = {code = errcode, msg = errormsg}\n end\n return subData\nend\n\nLCR = function(buff)\n log.debug('BGK_4000:lcr buff=%s', buff)\n local lcr = 0\n for i = 0, string.len(buff) / 2 - 1 do\n lcr = lcr + tonumber(string.sub(buff, 1 + 2 * i, 2 * (i + 1)), 16)\n end\n log.debug('BGK_4000:lcr累加结果%s', tonumber(lcr))\n lcr = lcr % 255\n local value = 0xff - lcr + 1\n local lcrResult_str = string.sub(string.format('%#x', value), 3, -1)\n --去除0x\n log.debug('BGK_4000:lcr校验结果%s', lcrResult_str)\n return lcrResult_str\nend\n\nIsValid = function(data, moduleId, channelId)\n log.debug('BGK_4000:模块%s通道%s开始校验数据=%s', moduleId, channelId, data)\n --[[if data == nil or string.len(data) / 2 ~= 27 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n log.debug('BGK_4000:模块%s通道%s 数据校验失败:Data is nil or invalid length', moduleId, channelId)\n return false\n end]]--\n if iota.hexToByte(data, 0, 'B') ~= 0x3a or iota.hexToByte(data, 25, 'B') ~= 0x0d or iota.hexToByte(data, 26, 'B') ~= 0x0a then\n errcode = 1001\n errormsg = 'Hex CMD False '\n log.debug('BGK_4000:模块%s通道%s 数据校验失败:Data is nil or invalid length', moduleId, channelId)\n return false\n end\n\n --码流转string\n local checkStr = toStrHex(data)\n log.debug('BGK_4000:模块%s通道%s 数据校验:checkStr=%s', moduleId, channelId, checkStr)\n local moduleStr = string.sub(checkStr, 2, 3)\n local channelStr = string.sub(checkStr, 6, 7)\n local error_index=string.sub(checkStr, 8, 8)\n if tonumber(moduleStr) ~= tonumber(moduleId) then\n errormsg = string.format('Invalid acq moduleId=%s[%s]', moduleStr, moduleId)\n errcode = 1004\n log.debug('BGK_4000:模块%s通道%s 数据校验失败:Invalid acq moduleId=%s', moduleId, channelId, moduleStr)\n return false\n end\n\n if tonumber(channelStr) ~= tonumber(channelId) then\n errormsg = string.format('Invalid acq channelId=%s[%s]', channelStr, channelId)\n errcode = 1004\n log.debug('BGK_4000:模块%s通道%s 数据校验失败:Invalid acq channelId=%s', moduleId, channelId, channelStr)\n return false\n end\n\n if error_index == 'E' then\n errormsg = string.format('error data=%s[%s]',data,checkStr)\n errcode = 1004\n log.debug('BGK_4000:模块%s通道%s 数据校验失败 %s', moduleId, channelId, errormsg)\n return false\n end\n\n log.debug('BGK_4000:模块%s通道%s校验数据通过!!!', moduleId, channelId)\n return true\nend\n\ngetIndex = function(data) --用于IsValid\n local len = string.len(data) / 2\n for n = 1, len do\n local value = string.sub(data, 2 * n - 1, 2 * n)\n if value == '0a' then\n return n\n end\n end\n return 0\nend\n\n--HEX字符串->ascii字符串\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend INLINE 2018-01-05 15:28:37.531+08 2019-11-06 15:19:52.19+08 2018-01-03 \N
+cf1d888a-fc06-4874-9bd6-246953fa248b anfang_settlement_1 \N 位移 1.0 0be11993-6e55-415e-b770-792f29f98f9f 0be11993-6e55-415e-b770-792f29f98f9f f 0be11993-6e55-415e-b770-792f29f98f9f Lua start=function()\n log.debug("anfang_inclinometer_1.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n local moduleStr=device.uplink.props.module\n log.debug("anfang_settlement_1 [%s] Data, ctx=%s",moduleStr,hex)\n local out={\n data ={},\n result = {}\n }\n --ff41584a23313832363036333634323923ffffffffffffff000500020cf15b0b9ffe01211111ffffffffF38Feeee\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n local length = iota.hexToInt(hex,34,'B')/10000.0000\n \n out.data = { \n length=length\n }\n local resultData =json.encode(out)\n log.debug("anfang_settlement_1 [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = errcode, msg = errormsg}\n ctx:done(json.encode(out))\n end \nend\n\nIsValid=function(data,deviceModule)\n if data == nil then\n errormsg = 'anfang_settlement_1:Data is nil'\n errcode = 1001\n \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n return false\n end\n local length= iota.hexToByte(data,28,'B')\n if (string.len(data)/2~=(length+34)) then\n errormsg = 'anfang_settlement_1:Data length is wrong'\n errcode = 1001\n \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n return false\n end\n local dataModule= iota.hexToShort(data,26,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('anfang_settlement_1 module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n return false\n end\n local sensorType= iota.hexToShort(data,24,'B')\n if (sensorType~=5) then\n errormsg = 'anfang_settlement_1:sensorType is wrong'\n errcode = 1001\n log.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n return false\n end\n local subdata=string.sub(data,1,-9)\n local crc=iota.appendHexCrc(subdata, 'B' ,0)\n log.debug("anfang_settlement_1.lua: crc, ctx=%s",crc)\n local subdatacrc=string.sub(data,1,-5)\n log.debug("anfang_settlement_1.lua: subdatacrc, ctx=%s",subdatacrc)\n if (string.lower(crc)~=string.lower(subdatacrc)) then\n errormsg = 'anfang_settlement_1:crc is wrong'\n errcode = 1001\n \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n return false\n end\n log.debug("anfang_settlement_1 [%s] 校验通过",deviceModule)\n return true\n \nend\n \n INLINE 2018-06-21 15:30:54.878+08 2019-05-05 11:42:42.955+08 2018-06-21 \N
+a5f3b3b0-2db7-446a-8642-c844f6560d52 xy \N 1.2 e1821687-1231-4e5c-a374-46d31857056d e1821687-1231-4e5c-a374-46d31857056d f e1821687-1231-4e5c-a374-46d31857056d Lua t INLINE 2018-01-08 11:56:51.916+08 2018-01-08 11:56:51.916+08 2018-01-08 \N
+ef1d82db-d7d3-4d0e-894c-63cf0bd389ae Inclin_WitLink_1508 \N 1.0 72b27c58-7a56-421c-ab86-abc0a0842cc7 72b27c58-7a56-421c-ab86-abc0a0842cc7 f 72b27c58-7a56-421c-ab86-abc0a0842cc7 Lua --//PMO/02 产品协议/SavoirCloud/01 协议/4月第3周/无锡慧联信息科技有限公司/VG100 1精度动态倾角传感器(含通讯协议)无锡慧联信息.pdf\n--[[\n协议号: 1508;\n协议名: Inclin_WitLink_1508.\n]]\n--位操作\nbit={data32={}}\nfor i=1,32 do\n\tbit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n\tlocal tr={}\n\tfor i=1,32 do\n\t\tif arg >= self.data32[i] then\n\t\t\ttr[i]=1\n\t\t\targ=arg-self.data32[i]\n\t\telse\n\t\t\ttr[i]=0\n\t\tend\n\tend\n\treturn tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n\tlocal nr=0\n\tfor i=1,32 do\n\t\tif arg[i] ==1 then\n\t\t\tnr=nr+2^(32-i)\n\t\tend\n\tend\n\treturn nr\nend --bit:b2d\n\n--或\nfunction bit:_or(a,b)\n\tlocal op1=self:d2b(a)\n\tlocal op2=self:d2b(b)\n\tlocal r={}\n\t\n\tfor i=1,32 do\n\t\tif op1[i]==1 or op2[i]==1 then\n\t\t\tr[i]=1\n\t\telse\n\t\t\tr[i]=0\n\t\tend\n\tend\n\treturn self:b2d(r)\nend\n--与\nfunction bit:_and(a,b)\n\tlocal op1=self:d2b(a)\n\tlocal op2=self:d2b(b)\n\tlocal r={}\n\t\n\tfor i=1,32 do\n\t\tif op1[i]==1 and op2[i]==1 then\n\t\t\tr[i]=1\n\t\telse\n\t\t\tr[i]=0\n\t\tend\n\tend\n\treturn self:b2d(r)\n\t\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\n--右移\nfunction bit:_rshift(a,n)\n\tlocal op1=self:d2b(a)\n\tlocal r=self:d2b(0)\n\t\n\tif n < 32 and n > 0 then\n\t\tfor i=1,n do\n\t\t\tfor i=31,1,-1 do\n\t\t\t\top1[i+1]=op1[i]\n\t\t\tend\n\t\t\top1[1]=0\n\t\tend\n\t\tr=op1\n\tend\n\treturn self:b2d(r)\nend --bit:_rshift\n\n--左移\nfunction bit:_lshift(a,n)\n\tlocal op1=self:d2b(a)\n\tlocal r=self:d2b(0)\n\t\n\tif n < 32 and n > 0 then\n\t\tfor i=1,n do\n\t\t\tfor i=1,31 do\n\t\t\t\top1[i]=op1[i+1]\n\t\t\tend\n\t\t\top1[32]=0\n\t\tend\n\t\tr=op1\n\tend\n\treturn self:b2d(r)\nend --bit:_lshift\n\n--\nstart=function ()\n log.debug("load script %s, moduleId=%s", "Inclin_WitLink_1508.lua", device.props.moduleId or "[nil]")\n\tsendBuff=protocol_encode()\n\t\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n\t-- 7704000408\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0x77, BE); -- 1: 帧头\n\tbuff=iota.appendHexByte(buff, 0x04, BE);\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE); -- 2: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x04, BE);\n\tlocal chenckSum=SumCR(string.sub(buff,3,-1)); --checkSum\n log.debug("chenckSum等于:%s",chenckSum);--测试用\n buff=buff..chenckSum;\n\treturn buff\nend\n\n-- returns: 结果, 原始值, 计算后值\n--正确回复 770D128410268000336503137178 moduleId=18\n--原始数据 x=-26.8 x=33.65 \nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\t\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n\t\tout.result = {code=errcode,msg=errormsg} \n\telse\t\t\n\t\tlocal IDX_XDATA = 4;\n\t\tlocal IDX_YDATA = 7;\n\t\t\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算XDATA原始值\n\t\tlocal xFirstNum = iota.hexToByte(data,IDX_XDATA,'B');\n\t\tlocal sx=bit:_rshift(xFirstNum,4);--标志位+ or -\n\t\tlocal xSecondNum = bit:_and(iota.hexToByte(data,IDX_XDATA,'B'),15);-- 0xF0==240 0x0F==15\n\t\tlocal X100=xSecondNum*100;\n\t\t\n\t\tlocal X10=bit:_rshift(iota.hexToByte(data,IDX_XDATA+1,'B'),4)*10\n\t\tlocal X1=bit:_and(iota.hexToByte(data,IDX_XDATA+1,'B'),15);\n\t\t\n\t\tlocal X01=bit:_rshift(iota.hexToByte(data,IDX_XDATA+2,'B'),4)*0.1\n\t\tlocal X001=bit:_and(iota.hexToByte(data,IDX_XDATA+2,'B'),15)*0.01;\n\t\tlocal AngleX = X100 + X10+X1+ X01+X001;\n\t\tif sx==1 then\n\t\t\tAngleX=-AngleX;\n\t\tend\n\t\t\n\t\t--计算YDATA原始值\n\t\tlocal yFirstNum = iota.hexToByte(data,IDX_YDATA,'B');\n\t\tlocal sy=bit:_rshift(yFirstNum,4);--标志位+ or -\n\t\tlocal ySecondNum = bit:_and(iota.hexToByte(data,IDX_YDATA,'B'),15);-- 0xF0==240 0x0F==15\n\t\tlocal Y100=ySecondNum*100;\n\t\t\n\t\tlocal Y10=bit:_rshift(iota.hexToByte(data,IDX_YDATA+1,'B'),4)*10\n\t\tlocal Y1=bit:_and(iota.hexToByte(data,IDX_YDATA+1,'B'),15);\n\t\t\n\t\tlocal Y01=bit:_rshift(iota.hexToByte(data,IDX_YDATA+2,'B'),4)*0.1\n\t\tlocal Y001=bit:_and(iota.hexToByte(data,IDX_YDATA+2,'B'),15)*0.01;\n\t\tlocal AngleY = Y100 + Y10+Y1+ Y01+Y001;\n\t\tif sy==1 then\n\t\t\tAngleY=-AngleY;\n\t\tend\n\t\t\n\t\tout.data = {\n\t\tangleX=AngleX,\n\t\tangleY=AngleY\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\n\nfunction IsValid(data)\n\tif string.len(data)/2 ~=14 then\n\t\tlocal message = 'Data is nil or invalid Length'\n\t\terrcode = 1001\n\t\treturn true\n\tend\n \tlocal startbyte_0 = iota.hexToByte(data, 0,'B');\n\tlocal startbyte_3 = iota.hexToByte(data, 3,'B');\n \tif startbyte_0 ~= 0x77 or startbyte_3 ~= 0x84 then\n\t\tlog.debug("帧头或命令错误")\n\t\tlocal message = 'Hex CMD False'\n\t\terrcode = 1001\n\t\treturn true\n\tend\n\tif device.props.moduleId ~= tostring(iota.hexToByte(data,2,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return true\n end\n log.debug('数据校验通过')\n\treturn false\n\t\nend\n\n\nSumCR=function(buff)\n local scr = 0\n for i = 0, string.len(buff)/2-1 do\n scr = scr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)\n log.debug(string.format('scr=: %s', scr));\n end \n local value= string.format("%02x",scr)\n return value\nend INLINE 2017-09-19 20:37:39.73+08 2018-02-28 18:32:12.202+08 2017-09-17 \N
+92c3319d-6177-4d99-a743-3391c9e1f4bf fs_airclear_mop_0901 \N 飞尚自研空气净化器mop协议 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n out = {\n type = 1,\n data = {},\n result = {}\n }\n --清除redis使用\n --local ab = {}\n -- local clearValue = json.encode(ab)\n -- local r1, r1ok = redis.set('00000001_air_taskconfig', clearValue)\n --log.debug('home_airclear_mop_0901 测试 ab=%s, type=%s,clearValue=%s', json.encode(ab), type(ab), clearValue)\n --log.debug('home_airclear_mop_0901 device=%s', json.encode(device))\n local deviceId = device.uplink.props.clientid\n --获取 app代理调度能力时 携带的参数 依此判断是何种能力\n local paramStr = capability.param\n log.debug('home_airclear_mop_0901 [%s] capability=%s', deviceId, paramStr)\n local paramData = json.decode(paramStr)\n\n if (paramData ~= nil and paramData.code ~= nil and paramData.params ~= nil) then\n local app_cmd = cmd_to_MCU(deviceId, paramData.code, paramData.params, paramData.cmd)\n if paramData.cmd ~= 267 then --查询功能 只查服务器缓存 不下发指令到 设备\n sendMsgToDeviceTopic(app_cmd)\n end\n else\n log.debug('home_airclear_mop_0901 [%s] paramData 数据内容不正确=%s', deviceId, json.encode(paramData))\n end\n local result = json.encode(out)\n ctx:done(result)\nend\n\nsendMsgToDeviceTopic = function(msg)\n --将指令发送到 设备的topic\n local dev_topic = msg.ID .. '_device_rece'\n local msgStr = json.encode(msg)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = dev_topic})\n log.debug(\n 'home_airclear_mop_0901 [%s] cmd 发送 dev_topic=[%s] body=%s 完毕 okdev=%s,ack=%s',\n msg.ID,\n dev_topic,\n msgStr,\n ok,\n ack\n )\nend\n\n--净化器 配置指令\nlocal binCache = {params = {}}\ncmd_to_MCU = function(id, code, newconfig, cmdType)\n local cmd = {}\n cmd.from = 'server'\n cmd.ID = id\n cmd.type = 513\n cmd.code = code\n cmd.cmd = cmdType\n if cmdType == 267 then --app查询功能\n if code == 4 then --定时任务查询\n local redis_key = cmd.ID .. '_air_taskconfig'\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n\n --由于lua的array 键值 一动就变成对象 只能用一个新table 存之前数据 当作 array 下发\n local array_taskConfigs = {}\n for _, v in pairs(redis_taskConfigs) do\n table.insert(array_taskConfigs, v)\n end\n out.data.params = array_taskConfigs\n log.debug('home_airclear_mop_0901 out.data.params=%s', json.encode(array_taskConfigs))\n elseif code == 15 then --报警阈查询 设备只有PM2.5\n local redis_key_alarm = cmd.ID .. '_air_alarmconfig'\n local redis_alarmConfigs = getRedisValue_obj(redis_key_alarm, cmd)\n out.data.params = redis_alarmConfigs\n end\n elseif cmdType == 523 then\n if code == 1 then --初始化 id 即修改id\n cmd.id = newconfig\n elseif code == 2 then --修改电源开关\n cmd.params = newconfig\n elseif code == 3 then --风速挡位设置\n cmd.params = newconfig\n elseif code == 4 then --定时任务设置--添加 or 修改\n --taskCacheUpdate(cmd.ID, newconfig, cmd) --设备确认成功后,在监听协议中更新redis\n newconfig.en = tonumber(newconfig.en, 16) -- app传的是字符串 '10', 平台需要转换成16\n cmd.params = newconfig\n elseif code == 5 then --定时使能设置\n cmd.params = newconfig\n elseif code == 6 then --定时删除设置\n -- taskCacheUpdate(cmd.ID, newconfig, cmd) --设备确认成功后,在监听协议中更新redis\n cmd.params = newconfig\n elseif code == 7 then --杀菌灯开关控制\n cmd.params = newconfig\n elseif code == 8 then --负离子开关控制\n cmd.params = newconfig\n elseif code == 9 then --加湿器开关控制\n cmd.params = newconfig\n elseif code == 10 then --加湿器挡位设置\n cmd.params = newconfig\n elseif code == 11 then --设备模式控制\n cmd.params = newconfig\n elseif code == 12 then --童锁开关控制\n cmd.params = newconfig\n elseif code == 13 then --远程升级 app发起 然后 平台redis存储升级包 ,平台与设备交互,上报升级状态\n binCache.params = getPackageList(newconfig.binBuff)\n binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n --将升级包存储 redis\n local redis_key_bin = cmd.ID .. '_air_bin'\n local isSetOK = setRedisValue_obj(redis_key_bin, binCache, cmd)\n if isSetOK == 'true' then\n local dataObject = {}\n dataObject.from = 'server'\n dataObject.type = 513 -- 513加湿器 257 净化器\n dataObject.cmd = 523\n dataObject.params = {}\n dataObject.params.type = 1 --服务器发起升级申请\n dataObject.params.count = binCache.params.count\n dataObject.params.size = binCache.params.size\n sendMsgToTopic(dataObject, 'device')\n end\n elseif code == 15 then --报警阈值设置 设备只有PM2.5\n cmd.params = newconfig\n local redis_key_alarm = cmd.ID .. '_air_alarmconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n setRedisValue_obj(redis_key_alarm, newconfig, cmd)\n log.debug('home_airclear_mop_0901 [%s][code=%s] redis_set完成=%s', cmd.ID, cmd.code)\n end\n end\n\n return cmd\nend\n\nsendMsgToTopic = function(msg, msgTo)\n local topic\n if msgTo == 'app' then\n --将指令发送到 appProxy的topic\n topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个,代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n elseif msgTo == 'device' then\n topic = msg.ID .. '_device_rece'\n end\n msg.packid = os.time()\n local msgStr = json.encode(msg)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n log.debug(\n 'home_airclear_0901 [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s',\n msg.ID,\n msg.code,\n binCache.updateTime,\n topic,\n msgStr,\n ok,\n ack\n )\nend\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n local redis_key = devId .. '_air_taskconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n --判断 任务 id是否存在 存在就更新\n local tsakId = tostring(taskConfig.task)\n log.debug(\n 'home_airclear_mop_0901 [%s] 排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s',\n cmd_obj.ID,\n tsakId,\n redis_taskConfigs,\n json.encode(redis_taskConfigs),\n type(redis_taskConfigs)\n )\n local cmd_code = cmd_obj.code\n if cmd_code == 4 then --添加或修改\n if redis_taskConfigs[tsakId] ~= nil then\n redis_taskConfigs[tsakId] = taskConfig\n log.debug('home_airclear_mop_0901 非首次插入')\n else\n log.debug('home_airclear_mop_0901 首次插入')\n table.insert(redis_taskConfigs, tsakId, taskConfig)\n end\n\n log.debug(\n 'home_airclear_mop_0901 [%s][code=%s] redis_taskConfigs=%s',\n cmd_obj.ID,\n cmd_obj.code,\n json.encode(redis_taskConfigs)\n )\n elseif cmd_code == 6 then --删除任务\n redis_taskConfigs[tsakId] = nil\n log.debug('home_airclear_mop_0901 删除任务 tsakId=%s', tsakId)\n end\n setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\ngetRedisValue_obj = function(key, logObject)\n local r1, r1ok = redis.get(key) --获取上次记录时间\n log.debug(\n 'home_airclear_mop_0901 [%s][code=%s] r1=%s[%s],r1ok=%s key=%s',\n logObject.ID,\n logObject.code,\n r1,\n type(r1),\n r1ok,\n key\n )\n\n local params = {}\n if r1ok and r1 ~= nil and r1 ~= 'null' then\n local taskConfig = json.decode(r1)\n params = taskConfig\n else\n log.debug(\n 'home_airclear_mop_0901 [%s][code=%s] taskConfig读取失败 r1=%s,r1ok=%s',\n logObject.ID,\n logObject.code,\n r1,\n r1ok\n )\n end\n return params\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n local setValue = json.encode(setValueObject)\n local r1ok, r1 = redis.set(key, setValue)\n log.debug(\n 'home_airclear_mop_0901 [%s][code=%s] [setRedis] r1=%s,r1ok=%s,key=%s,setValue=%s',\n logObject.ID,\n logObject.code,\n r1,\n r1ok,\n key,\n setValue\n )\n return r1ok\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n local packageParams = {subList = {}}\n local len = string.len(allPackageStr)\n local count = len / 2048\n local packageCount = math.ceil(count)\n packageParams.size = len\n packageParams.count = packageCount\n\n for i = 1, packageCount, 1 do\n local start_index = (i - 1) * 2048 + 1\n local end_index = start_index + 2047 -- 如果 越界,lua自动取实际的 结束索引\n local subPackage = string.sub(allPackageStr, start_index, end_index)\n --最后一包判断长度是否是 4的倍数 不足写0x1A\n if i == packageCount then\n repeat\n local subPackage_len = string.len(subPackage) / 4\n local min_subPackage_len = math.floor(subPackage_len)\n local diff_value = subPackage_len - min_subPackage_len\n if diff_value > 0 then\n subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍,不足写0x1A\n end\n until (diff_value == 0)\n end\n\n local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n local subcrc = string.sub(subAppendCrc16, -4, -1)\n local subCheck = tonumber(subcrc, 16)\n local subBin = {}\n subBin.len = string.len(subPackage) / 2\n subBin.buff = subPackage\n subBin.checkint = subCheck\n packageParams.subList[i] = subBin\n end\n return packageParams\nend INLINE 2020-09-02 16:23:54.243+08 2020-09-20 16:56:15.525+08 2020-09-02 \N
+3fc1f94e-7054-43a4-a42d-21b63c00442c A设备协议 \N v1.1.1 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 f 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 Lua a:a INLINE 2018-01-22 10:17:37.67+08 2018-02-02 15:57:56.287+08 2018-01-22 \N
+60e55f2a-aea2-4c30-9553-ccf7e9f53892 http_get_Test \N 0.1 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start=function()\n\tlog.debug("start http_get_Test device :%s",json.encode(device))\n\tlocal out={\n type = 2,\n data ={},\n result = {}\n }\n\tlocal req = {\n\t\ttype= "http",\n\t\turl= device.uplink.props.uri, --"http://data.linfeng-tech.com/restful/v1/business/runData", \n\t\tmethod="get",\n\t\tcontent="application/json",\n\t\theader={},\n\t}\n \n \tlocal authOk,authAck=ctx:ssend(req,4000)\n \tlog.debug("http_get_Test isok= %s ,url =%s",authOk,req.url)\n \tlog.debug("http_get_Test headers= %s",json.encode(authAck.header))\n\tlog.debug("http_get_Test Authenticate= %s",json.encode(authAck.header["Www-Authenticate"]))\n\t\n \nend INLINE 2018-07-30 09:26:43.717+08 2018-07-30 11:02:39.323+08 2018-07-30 \N
+2e56410c-4018-47e4-8223-4ec7a4aed43f geot_1407 \N 基泰单通道振弦采集 主动上传 1.0 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 f d3f1aa63-8397-45a4-af26-15a0f91d1e13 Lua --//04 项目资料/2017-05/南京基泰/基泰单通道 单点协议示例.doc\n--require "functions" -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {} //设备信息\nprotocol=> {} //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\n-- start=function () \n\t-- log.debug("start %s, ctx=%s", "geot_1407.lua",json.encode(device.moduleId))\n -- ok,resp=ctx:ssend("0102030405060708",15000)\n -- log.debug("geot_1407:测试下发正常")\n-- end\n--moduleId=98 通道1 \n--ff6000620027100144595bd8cc024456de1600036494187c40116444e59d5d126444e59d5df053\n\n--"frequency": 1355.3293337783257,\n--"temperature": 1836.917603\nonData=function (hex)\n\t--主动上传式\n\tlog.debug("geot_1407:Received=>%s",hex)\n\tlocal out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\tlocal moduleNo = iota.hexToShort(hex,2,'B')\n\t\tlog.debug("geot_1407:moduleNo=%s",moduleNo)\n\t\t\t\t--local moduleNo=1\n\t\tlocal IDX_DIRECTION_X=27;\n\t\t\n\t\t\t local vibrate = iota.hexToFloat(hex, IDX_DIRECTION_X,'L');\n\t\t\t local Frequency = math.sqrt(vibrate * 1000);\n local Temp = iota.hexToFloat(hex, IDX_DIRECTION_X + 1* 6,'L');\n\t\t\t --插入单通道数据表\n\t\t\t \n\t\t\t--获取通道设备deviceId \n local channelNo=1\n log.debug("geot_1407:模块号=%s,通道号=%s",moduleNo,channelNo)\n local childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\t\t\t--\n local deviceId\n if childDevice~=nil then\n \tdeviceId=childDevice.id\n log.debug("geot_1407:(振弦)子设备原形childDevice=%s",json.encode(childDevice))\n \tlog.debug("geot_1407:(振弦)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t--if childDevice.device.formula=="P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)" then --公式目前无法获取\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n \t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n \t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local To = childDevice.uplink.capabilities[1].formula.props.To\n log.debug("geot_1407:(振弦)子设备:m=%s,c=%s:公式参数=%s,%s,%s,%s,%s,%s",moduleNo,channelNo,K1,K2,K3,Fo,To,Kt)\n if K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n Phy=nil\n \t\tlog.debug("geot_1407:模块号=%s,通道号=%s 参数无效 当前的Frequency是:%s,Temp是%s",moduleNo,channelNo,Frequency,Temp)\n else\n \t\tlog.debug("geot_1407:模块号=%s,通道号=%s 参数有效 当前的Frequency是:%s,Temp是%s",moduleNo,channelNo,Frequency,Temp)\n local Fi=Frequency\n \t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n log.debug("geot_1407:当前的Phy是:%s",Phy)\n end \n\t\t\t\t--else\n\t\t\t\t--log.debug("geot_1407:(振弦)子设备:m=%s,c=%s device.formula为nil"..tostring(moduleNo),tostring(channelNo))\n -- end\n else\n log.debug("geot_1407:(振弦)子设备:m=%s,c=%s deviceId为nil"..tostring(moduleNo),tostring(channelNo))\n end\n\t\t\tlocal data1={\n\t\t\t data={\n\t\t\t\t\t\t\tfrequency=tonumber(string.format("%5.3f",Frequency)),\n\t\t\t\t\t\t\ttemperature=tonumber(string.format("%5.2f",Temp)),\n \t\t\tphysicalvalue=tonumber(string.format("%5.3f",Phy)),,\n\t\t\t\t\t\t\t},\n\t\t\t\tdevice=deviceId,\n \t\t\t\ttype=1 ,\n\t\t\t}\n\t\t\ttable.insert(out.data,data1)\t\t \t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n\tctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("geot_1407 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("geot_1407:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("geot_1407 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t log.debug("geot_1407 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t \t if tostring(channelStrCheck)== tostring(channelNoId) then\n \n \t\t log.debug("geot_1407: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("geot_1407: subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function (data)\n\tlog.debug('geot_1407:开始校验数据')\n if data == nil or string.len(data)/2 ~= 39 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n return false\n end\n\n\tif iota.hexToByte(data,0,'B') ~= 0xFF then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\t\n log.debug('geot_1407:校验通过')\n\treturn true\n\t\nend\n INLINE 2018-03-06 15:32:32.975+08 2018-05-10 18:00:01.561+08 2018-03-06 \N
+cc379fab-18f6-4524-874c-3cf8c71188cf myweiyun_GDGS_8400 \N 1.0 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 f 650f75b2-4e3f-4393-8edb-0308c73e15b6 Lua start=function()\n ok=ctx:ssend("01020304")\n end\n\n\nonData =function(hex)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n local moduleNo = 48 --device.uplink.props.module\n log.debug('MYWEIYUN_GDGS m=%s, recv =%s', moduleNo, hex)\n local channelCounts = 8 --device.props.channelCount\n local allDataLen = 6 + channelCounts * (4 * 30 + 2)\n local singleChannelDataLen = 4 * 30 + 2\n log.debug('MYWEIYUN_GDGS 设备模块通道 接口获取 m=%s ', moduleNo)\n local ErrorCode = IsValid(hex, moduleNo, allDataLen)\n local dataHex = string.sub(hex, 13, -1) --数据域\n if ErrorCode then\n local T1 = string.sub(dataHex, -4, -3)\n local T2 = string.sub(dataHex, -2, -1)\n for i = 1, channelCounts, 1 do\n local singleChannelHex = string.sub(dataHex, 1 + (i - 1) * singleChannelDataLen * 2, i * singleChannelDataLen * 2)\n --温度部分\n\n local x = tonumber(T1, 16) * 256 + tonumber(T2, 16)\n\n local temperature = -0.000000004456 * x ^ 3 + 0.000030204287 * x ^ 2 - 0.091145876319 * x + 123.066087843246\n\n for j = 1, 30, 1 do\n local X1 = string.sub(singleChannelHex, (j - 1) * 8 + 1 + 2, (j - 1) * 8 + 2 + 2)\n local X2 = string.sub(singleChannelHex, (j - 1) * 8 + 3 + 2, (j - 1) * 8 + 4 + 2)\n local X3 = string.sub(singleChannelHex, (j - 1) * 8 + 5 + 2, (j - 1) * 8 + 6 + 2)\n\n local frequency = (tonumber(X1, 16) * 65526 + tonumber(X2, 16) * 256 + tonumber(X3, 16)) / 10\n\n if frequency ~= 0 then\n local waveLength = 299792458 / frequency\n --获取通道设备deviceId\n local childDevice = getDeviceInfo(i, j)\n if childDevice ~= nil then\n local data1 = {\n data = {\n frequency = tonumber(string.format('%0.3f',frequency)),\n waveLength = tonumber(string.format('%0.3f',waveLength)),\n temperature = tonumber(string.format('%0.3f',temperature))\n },\n device = childDevice.id,\n type = 1\n }\n log.debug('MYWEIYUN_GDGS m=%s,c=%s Phy结果=%s', tostring(i), tostring(j), json.encode(data1))\n table.insert(out.data, data1)\n end\n end\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n log.debug('MYWEIYUN_GDGS m=%s,data=%s', moduleNo, json.encode(out))\n local result = json.encode(out)\n ctx:notify(result)\nend\n\nIsValid = function(data, moduleCheck, dataLenCheck)\n local length = string.len(data) / 2\n if data == nil or length ~= dataLenCheck then\n errormsg = string.format('数据长度无效[%s]≠%s', length / 2, dataLenCheck)\n errcode = 1002\n return false\n end\n\n local dataModule = string.sub(data, 1, 2)\n if tonumber(dataModule, 16) ~= tonumber(moduleCheck) then\n errormsg = string.format('无效的模块号=%s[%s]', data, dataModule)\n errcode = 1003\n return false\n end\n return true\n --crc\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo =\n function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("MYWEIYUN_GDGS 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug("MYWEIYUN_GDGS 查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\n local moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n local channelStrCheck = child.uplink.props.channel\n --log.debug("MYWEIYUN_GDGS 子设备模块通道 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tostring(channelStrCheck) == tostring(channelNoId) then\n log.debug('MYWEIYUN_GDGS m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('MYWEIYUN_GDGS subdevices是nil')\n return nil\n end\nend\n\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend INLINE 2018-12-13 15:25:10.014+08 2018-12-13 17:21:06.19+08 2018-12-13 \N
+64dc7d39-4bc6-48b1-b0b3-4f7faa6dfb2f fshs_DAS_ HS-IOT102 \N 1.0 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d f 01fdd48b-2211-42be-9e66-b2a76c84567d Lua start = function()\n log.debug('fshs_cjy_8000 device=>%s', json.encode(device))\nend\n\nonData = function(hex)\n --主动上传式\n log.debug('fshs_cjy_8000 Received=>%s', hex)\n \tlog.debug('fshs_cjy_8000 device=>%s', json.encode(device))\n local out = {\n type = 2,\n data = {},\n result = {}\n }\n\n local index_temp = 10\n local index_mv = 12\n local index_ma1 = 16\n local index_ma2 = 20\n local index_powerlevel = 24\n local index_signal = 26\n local index_ballstate = 28\n local index_alarmcode = 30\n local index_3Dangles = 32\n local index_angletemp = 38\n local index_numof485 = 40\n local index_485_1 = 44\n\n local moduleNoStr = device.uplink.props.module \n\n local channelDatas = {}\n local ErrorCode = IsValid(hex, moduleNoStr)\n\tlocal moduleidsub = string.sub(hex, 3, 10)\n\tlog.debug('fshs_cjy_8000 moduleidsub=%s', moduleidsub)\n\tlocal xm=string.sub(hex,11,12)\n\t--log.debug('fshs_cjy_8000 xm=%s', xm)\n\t\n if ErrorCode then\n local temperature = iota.hexToUShort(hex, index_temp, 'L') / 10\n channelDatas[1] = temperature\n local mv = iota.hexToFloat(hex, index_mv, 'L')\n channelDatas[2] = mv\n local ma1 = iota.hexToFloat(hex, index_ma1, 'L')\n channelDatas[3] = ma1\n local ma2 = iota.hexToFloat(hex, index_ma2, 'L')\n channelDatas[4] = ma2\n local powerlevel = iota.hexToUShort(hex, index_powerlevel, 'L')\n channelDatas[5] = powerlevel\n local signal = iota.hexToUShort(hex, index_signal, 'L')\n channelDatas[6] = signal\n local ballstate = iota.hexToUShort(hex, index_ballstate, 'L')\n channelDatas[7] = ballstate\n local alarmcode = iota.hexToUShort(hex, index_alarmcode, 'L')\n channelDatas[8] = alarmcode\n --local _3Dangles = {iota.hexToShort(hex, index_3Dangles, 'L')/32768*180, iota.hexToShort(hex, index_3Dangles + 2, 'L')/32768*180, iota.hexToShort(hex, index_3Dangles + 4, 'L')/32768*180}\n\t\t\n\t\tlocal _3Dangles = {string.sub(tostring(iota.hexToShort(hex, index_3Dangles, 'L')/32768*180), 1, 6),string.sub(tostring(iota.hexToShort(hex, index_3Dangles+2, 'L')/32768*180), 1, 6),string.sub(tostring(iota.hexToShort(hex, index_3Dangles+4, 'L')/32768*180), 1, 6)}\n channelDatas[9] = _3Dangles\n local angletemp = iota.hexToUShort(hex, index_angletemp, 'L')\n channelDatas[10] = angletemp\n local numof485 = iota.hexToUShort(hex, index_numof485, 'L')\n for i = 1, numof485, 1 do\n local data485 = iota.hexToFloat(hex, index_485_1 + (i - 1) * 4, 'L')\n channelDatas[10 + i] = data485\n end\n\n for k, v in pairs(channelDatas) do\n log.debug('fshs_cjy_8000 模块号=%s,通道号=%s', moduleNoStr, k)\n local childDevice = getDeviceInfo(moduleNoStr, k)\n physicalvalue = channelDatas[k]\n\t\t\tlog.debug('fshs_cjy_8000 physicalvalue=%s,通道号=%s', physicalvalue, k)\n local deviceId\n if childDevice ~= nil then\n deviceId = childDevice.id\n log.debug('fshs_cjy_8000:子设备原形childDevice=%s', json.encode(childDevice))\n\n if k == 9 then --3向角度计\n local data1 = {\n data = {\n anglex = channelDatas[k][1],\n angley = channelDatas[k][2],\n anglez = channelDatas[k][3]\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n else\n local data1 = {\n data = {\n physicalvalue = channelDatas[k]\n\t\n\t\t\t\t\t\t\t\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n end\n else\n log.debug('fshs_cjy_8000 子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n log.debug('fshs_cjy_8000 resultData=%s', resultData)\n ctx:notify(resultData)\n\tlocal zt="FF"\n\tlocal zw="FE"\n\t\n\tif (xm=='01') then \n\t\tlocal xmo="810000"\n\t\tlocal xmm=moduleidsub..xmo --xmm=2155cc04810000\n\t\t --log.debug('fshs_cjy_8000 xmm=%s', xmm)\n\t\tlocal app=CS(xmm)\n\t\tlocal bpp=string.format("%#x",app)\n\t\t --log.debug('fshs_cjy_8000 app=%s', app)\n\t\t \n\t\t local bpp=string.format("%#x",app)\n\t\t --log.debug('fshs_cjy_8000 bpp=%s', bpp)\n\t\t local cpp=string.sub(bpp, -2, -1)\n\t\t-- log.debug('fshs_cjy_8000 cpp=%s', cpp)\n\t\tlocal asends=zt..xmm..cpp..zw\n\t\t--log.debug('fshs_cjy_8000 asends=%s', asends)\n\t\tctx:asend(asends)\n\telseif(xm=='09') then\n\t\tlocal xmo="890000"\n\t\tlocal xmm=moduleidsub..xmo \n\t\t --log.debug('fshs_cjy_8000 xmm=%s', xmm)\n\t\tlocal app=CS(xmm)\n\t\tlocal bpp=string.format("%#x",app)\n\t\t --log.debug('fshs_cjy_8000 app=%s', app)\n\t\t \n\t\t local bpp=string.format("%#x",app)\n\t\t --log.debug('fshs_cjy_8000 bpp=%s', bpp)\n\t\t local cpp=string.sub(bpp, -2, -1)\n\t\tlocal asends=zt..xmm..cpp..zw\n\t\t--log.debug('fshs_cjy_8000 asends=%s', asends)\n\t\tctx:asend(asends)\n\t end\n\t \nend\nCS=function(buff)\n local lcr = 0\n for i = 0, string.len(buff)/2-1 do\n lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n end\n --log.debug('fshs_cjy_8000:lcr累加结果%s', lcr)\t\n\t--local value=bit.band(bit.bnot(lcr),0xff)+1 --按位取反再加1\n\t--log.debug('fshs_cjy_8000:lcrvalue累加结果1%s', value)\t\n return lcr\nend \n\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("fshs_cjy_8000 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug('fshs_cjy_8000:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n -- log.debug('fshs_cjy_8000 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n else\n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.channelId\n --log.debug('fshs_cjy_8000 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n end\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tostring(channelStrCheck) == tostring(channelNoId) then\n log.debug('fshs_cjy_8000: m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('fshs_cjy_8000: subdevices是nil')\n return nil\n end\nend\n\nIsValid = function(data, module_device)\n local datalen = string.len(data)\n\t--or datalen < 46\n if data == nil then\n errormsg = string.format('数据长度无效=%s', datalen)\n errcode = 1002\n return false\n end\n\n if string.sub(data, 1, 2) ~= 'ff' or string.sub(data, -2, -1) ~= 'fe' then\n errcode = 1003\n errormsg = string.format('数据帧头帧尾无效')\n return false\n end\n\n local module_data = tostring(iota.hexToUInt(data, 1, 'L'))\n if module_data ~= module_device then\n errormsg = string.format('模块号无效=%s≠%s', module_data, module_device)\n errcode = 1004\n return false\n end\n log.debug('fshs_cjy_8000:校验通过')\n return true\nend INLINE 2019-07-04 10:09:13.698+08 2019-12-09 14:10:25.723+08 2019-07-04 \N
+603b098f-f66e-4730-99b8-38fd8474636d shzr_temp_RN-630 \N 1.0 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f 8d2f03c7-32a2-42e4-befc-7dde5c965472 Lua --//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shzr_temp_RN-630", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shzr_temp_RN-630 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x04, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("shzr_temp_RN-630 SSend error!")\n end\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local anglex = iota.hexToFloat(hex,3,'B')\n\t\tlocal angley = iota.hexToFloat(hex,7,'B')\n \n \n out.data = {\n\t\t\tanglex=anglex,\n\t\t\tangley=angley\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('shzr_temp_RN-630 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shzr_temp_RN-630 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2019-06-28 14:42:59.74+08 2019-06-28 14:43:30.752+08 2019-06-28 \N
+dc6bc749-5263-4a53-8fcd-76e7b4f7032d soilDT5678 \N 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --//D:\\SVN\\201808项目\\20180828项目资料提交\\3、北京数泰项目--康飞 --修改部分模块输出名称,添加通用性\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]]\nstart = function()\n ok = ctx:asend('0102')\n log.debug('soilDT5678 device =%s', json.encode(device))\nend\n\nonData =\n function(hex, index)\n log.debug('soilDT5678 7777888888=%s[%s] type(index)=[%s]', hex, index, type(index))\n if index == 2 then\n ok = ctx:asend('670d0a') --"g/n/r" DT运行当前工作计划\n ctx:sleep(1)\n ok = ctx:asend('2f480d0a') --"/H/n/r" DT 按照指定格式 上报数据\n end\n\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n sData = HextoStr(hex)\n log.debug('soilDT5678:sData是 %s', sData)\n --获取子字符串表\n local allResponse = Split(sData, ';')\n local allResponseCount = table_leng(allResponse)\n --移除表内的“”和nil\n for i = allResponseCount, 1, -1 do\n v = allResponse[i]\n if v == '' or v == nil or string.len(v) < 10 then\n table.remove(allResponse, i)\n log.debug('soilDT5678 表内的“”和nil 移除元素k=%s v=%s', i, v)\n end\n end\n\n --分析单类数据\n local resplength = table_leng(allResponse)\n local phys = {} --存储所有通道物理量\n local moduleNo --模块号\n local dateTimeStr\n local timenow\n for k, v in ipairs(allResponse) do\n dataIndex = string.sub(v, 1, 1)\n --单条数据首字母 D为设备信息 ,A为数据\n\n if dataIndex == 'D' then\n local otherData = Split(v, ',')\n moduleNo = otherData[2]\n local dateStr = otherData[4]\n local timeStr = otherData[5]\n dateTimeStr = string.format('%s %s', dateStr, timeStr)\n timenow = unixtimestamp(dateTimeStr)\n elseif dataIndex == 'A' then\n local singleData = Split(v, ',')\n for sensorKey, sensorValue in ipairs(singleData) do\n if sensorKey > 2 then\n phys[sensorKey - 2] = singleData[sensorKey]\n end\n end\n end\n end\n\n --匹配数据部分\n\n -- local childDevice={}--测试用\n -- childDevice.id=123 --测试用\n\n for index, childDevice in pairs(device.dnlinks[1].devices) do\n log.debug('soilDT5678 遍历子设备 是否匹配设备child=%s', json.encode(childDevice))\n\n local channelStrCheck = childDevice.uplink.props.channel\n log.debug('soilDT5678 子设备模块通道 接口获取 c=%s ', channelStrCheck)\n local relatedChannel = Split(channelStrCheck, ',')\n local valueNum = table_leng(relatedChannel)\n\n if childDevice.props.sensortype == 'zx' then\n local Frequency_index = tonumber(relatedChannel[1])\n local Temperature_index = tonumber(relatedChannel[2])\n local Frequency = tonumber(phys[Frequency_index])\n local Temperature = tonumber(phys[Temperature_index])\n \t\tlog.debug("soilDT5678 振弦通道[%s]",channelStrCheck)\n if childDevice.uplink.capabilities[1].formula.metaid == '0d1ad29d-fa86-4af0-bf45-16a19f2fd8d9' then --在iota中查找\n local K = childDevice.uplink.capabilities[1].formula.props.K\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local To = childDevice.uplink.capabilities[1].formula.props.To\n log.debug("soilDT5678 振弦通道[%s] 公式参数 k=%s,Kt=%s,Fo=%s,To=%s",channelStrCheck,K,Kt,Fo,To)\n if K == nil or Kt == nil or Fo == nil or To == nil then\n log.debug("soilDT5678 振弦通道[%s] f=%s,t=%s 参数项为nil",channelStrCheck,Frequency,Temperature)\n Phy = nil\n else\n log.debug("soilDT5678 振弦通道[%s] f=%s,t=%s",channelStrCheck,Frequency,Temperature)\n\t\t\t\t\t\tif tostring(Temperature) ~= "nil" then\n\t\t\t\t\t\t\tPhy = K * (Frequency ^ 2 - Fo ^ 2) + Kt * (Temperature - To)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tPhy = K * (Frequency ^ 2 - Fo ^ 2) \n\t\t\t\t\t\tend\n log.debug("soilDT5678 振弦通道[%s]当前的Phy=%s,f=%s",channelStrCheck,Phy,Frequency)\n local data1 = {\n data = {\n frequency = tonumber(string.format('%0.3f', Frequency)),\n temperature = tonumber(string.format('%0.2f', Temperature)),\n physicalvalue = tonumber(string.format('%0.3f', Phy))\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n log.debug("soilDT5678: 振弦通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data, data1)\n end\n end\n elseif childDevice.props.sensortype == 'dy' then\n local Vx_index = tonumber(relatedChannel[1])\n local Vx = phys[Vx_index]\n local Vy\n local Temperature\n if valueNum == 2 then\n local Temperature_index = tonumber(relatedChannel[2])\n Temperature = tonumber(phys[Temperature_index])\n elseif valueNum == 3 then\n local Vy_index = tonumber(relatedChannel[2])\n local Temperature_index = tonumber(relatedChannel[3])\n Vy = phys[Vy_index]\n Temperature = tonumber(phys[Temperature_index])\n Temperature = tonumber(string.format('%0.3f', Temperature))\n end\n\n if childDevice.uplink.capabilities[1].formula.metaid == '5116bca0-de6b-4f0b-b995-31c9801ee401' then --在iota中查找\n local Kx = childDevice.uplink.capabilities[1].formula.props.Kx\n local Ky = childDevice.uplink.capabilities[1].formula.props.Ky\n local Vo = childDevice.uplink.capabilities[1].formula.props.Vo\n\n -- log.debug("soilDT5678 电压通道[%s] 公式参数 Kx=%s,Ky=%s,Vo=%s",channelStrCheck,Kx,Ky,Vo)\n if Kx == nil or Ky == nil or Vo == nil then\n -- log.debug("soilDT5678 电压通道[%s] Vx=%s,Vy=%s 参数项为nil",channelStrCheck,Vx,Vy)\n Phy = nil\n else\n -- log.debug("soilDT5678 电压通道[%s] Vx=%s,Vy=%s",channelStrCheck,Vx,Vy)\n local value1 = Kx * (Vx - Vo)\n value1 = tonumber(string.format('%0.3f', value1))\n\n local value2\n if valueNum == 3 then\n value2 = Ky * (Vy - Vo)\n value2 = tonumber(string.format('%0.3f', value2))\n end\n -- log.debug("soilDT5678 电压通道[%s] value1=%s,AngleY=%s Temperature=%s",channelStrCheck,value1,value2,Temperature)\n local data1 = {\n data = {\n voltage=Vx,\n physicalvalue = value1,\n physicalvalue2 = value2,\n temperature = Temperature\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n log.debug("soilDT5678: 倾角通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data, data1)\n end\n end\n elseif childDevice.props.sensortype == 'standard' then\n local value1_index = tonumber(relatedChannel[1])\n local Value1 = tonumber(phys[value1_index])\n Value1 = tonumber(string.format('%0.2f', Value1))\n local Value2\n local Temperature\n if valueNum == 2 then\n local value2_index = tonumber(relatedChannel[2])\n Value2 = tonumber(phys[value2_index])\n Value2 = tonumber(string.format('%0.2f', Value2))\n log.debug('soilDT5678 standard通道[%s] Temperature=%s', channelStrCheck, Temperature)\n elseif valueNum == 3 then\n local value2_index = tonumber(relatedChannel[2])\n Value2 = tonumber(phys[value2_index])\n Value2 = tonumber(string.format('%0.2f', Value2))\n\n local value3_index = tonumber(relatedChannel[3])\n value3 = tonumber(phys[value3_index])\n value3 = tonumber(string.format('%0.2f', value3))\n Temperature = value3\n log.debug('soilDT5678 standard通道[%s] Temperature=%s', channelStrCheck, Temperature)\n end\n local data1 = {\n data = {\n physicalvalue = Value1,\n physicalvalue2 = Value2,\n temperature = Temperature\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n log.debug('soilDT5678: standard通道[%s]data=%s', channelStrCheck, json.encode(data1))\n table.insert(out.data, data1)\n end\n end\n else\n ok = ctx:asend('2f480d0a') --"/H/n/r" DT 按照指定格式 上报数据\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n log.debug('soilDT5678 resultData=%s,hex=%s', json.encode(out), hex)\n ctx:notify(resultData)\nend\n\nIsValid = function(alldata)\n log.debug('soilDT5678 校验开始')\n if string.len(alldata) < 10 then\n errormsg = 'allData is invalid'\n errcode = 1001\n return false\n end\n\n if string.sub(alldata, 1, 4) ~= '442c' then\n errormsg = 'allData header is invalid'\n errcode = 1001\n return false\n end\n\n log.debug('soilDT5678 校验通过')\n return true\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend\n\nunixtimestamp = function(datestr)\n -- 2018/4/28 16:10:12\n log.debug('soilDT5678 datestr=%s', datestr)\n local datelist = Split(datestr, ' ')\n local datebegin = Split(datelist[1], '/')\n local dateend = Split(datelist[2], ':')\n local year = tonumber(datebegin[1])\n local month = tonumber(datebegin[2])\n local day = tonumber(datebegin[3])\n local hour = tonumber(dateend[1])\n local minute = tonumber(dateend[2])\n local second = tonumber(dateend[3])\n --log.debug("soilDT5678 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n --log.debug("soilDT5678 timenum=%s",timenum)\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --log.debug("soilDT5678 recordTime=%s",recordTime)\n return recordTime\nend INLINE 2019-10-21 16:47:24.341+08 2019-10-21 16:47:24.341+08 2019-10-21 \N
+70b1f69b-2605-42ef-a7c2-6746c1289f7c mas-idau_mop \N 下发指令 1 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua start = function()\n --log.debug("mas_idau_mop:device=%s",json.encode(device))\n --log.debug("mas_idau_mop:subdevice=%s",json.encode(device.dnlinks[1]))\n local linkcnt = #(device.dnlinks)\n --log.debug("mas_idau_mop:linkcnt=%s",linkcnt)\n local req = {\n type = "idau",\n payload = ""\n }\n local mop = {\n M = "c_network",\n O = "S",\n P = {} -- 荷载\n }\n local req_sensor={\n type = "idau",\n payload = ""\n }\n local mop_sensor = {\n M = "c_sensor",\n O = "S",\n P = {} -- 荷载\n } \n for i = 1, linkcnt, 1 do -- 一个link, 一个子网\n local link = device.dnlinks[i]\n local nodecnt = #(link.devices)\n --log.debug("mas_idau_mop:nodecnt=%s",nodecnt)\n local subnet = {\n SN = tonumber(link.devices[1].uplink.props.subnet), -- 子网编号. link.interface.props.subnet\n NS = {} -- 子网节点\n }\n table.insert(mop.P, subnet)\n if nodecnt > 0 then\n for j = 1, nodecnt, 1 do\n local dev = link.devices[j]\n local dev_inf = link.devices[j].uplink\n --log.debug("mas_idau_mop:dev=%s", json.encode(dev))\n local node = {\n NID = tonumber(dev_inf.props.netid), -- 网络号\n C = 2, -- 通道\n DI = tonumber(dev.props.interval) or 30, -- 设备属性: 采集间隔. 默认30分钟\n DIU = 0, --分钟(采集间隔单位)\n WD = tonumber(dev.props.wakeupdelay) or 0, -- 设备属性:苏醒延迟, 默认0,\n T = toNodeType(dev_inf.props.worktype) -- 节点类型: 终端?\n }\n table.insert(subnet.NS, node)\n\t\t\t\t\n if dev.dnlinks ~= nil then \n\t\t\t\t\tlocal nodednlinkcnt = #(dev.dnlinks)\n\t\t\t\t\t--log.debug("mas_idau_mop:nodednlinkcnt=%s", nodednlinkcnt)\n\t\t\t\t\tif nodednlinkcnt>0 then\n\t\t\t\t\t\tfor k=1,nodednlinkcnt,1 do\n\t\t\t\t\t\t\t--log.debug("mas_idau_mop:Sdnlinks=%s", json.encode(dev.dnlinks[1]))\n\t\t\t\t\t\t\tlocal sensorcnt = #(dev.dnlinks[k].devices)\n\t\t\t\t\t\t\t--log.debug("mas_idau_mop:sensorcnt=%s", sensorcnt)\n\t\t\t\t\t\t\tfor u=1,sensorcnt,1 do\n\t\t\t\t\t\t\t\tlocal sen = dev.dnlinks[k].devices[u]\n\t\t\t\t\t\t\t\tlocal CheckOption = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.CheckOption == false then\n\t\t\t\t\t\t\t\t\tCheckOption = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tlocal VibratSamplFreq = 1\n\t\t\t\t\t\t\t\tif sen.uplink.props.VibratSamplFreq == "8K" then\n\t\t\t\t\t\t\t\t\tVibratSamplFreq = 0\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.VibratSamplFreq == "32K" then\n\t\t\t\t\t\t\t\t\tVibratSamplFreq = 2\n\t\t\t\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\t\t\t\tlocal AmplifierGain = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.AmplifierGain == "500倍" then\n\t\t\t\t\t\t\t\t\tAmplifierGain = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tlocal Incentive = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.Incentive == false then\n\t\t\t\t\t\t\t\t\tIncentive = 1\n\t\t\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t\t\tlocal IncentiveMethod = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.IncentiveMethod == "多脉冲激励" then\n\t\t\t\t\t\t\t\t\tIncentiveMethod = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.IncentiveMethod == "共振激励" then\n\t\t\t\t\t\t\t\t\tIncentiveMethod = 2\n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tlocal VibratSpectrum = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.VibratSpectrum == false then\n\t\t\t\t\t\t\t\t\tVibratSpectrum = 1\n\t\t\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t\t\tlocal Baudrate = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.Baudrate == "19200" then\n\t\t\t\t\t\t\t\t\tBaudrate = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.Baudrate == "115200" then\n\t\t\t\t\t\t\t\t\tBaudrate = 2\n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tlocal Databit = 1\n\t\t\t\t\t\t\t\tif sen.uplink.props.Databit == "7位" then\n\t\t\t\t\t\t\t\t\tDatabit = 0\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.Databit == "9位" then\n\t\t\t\t\t\t\t\t\tDatabit = 2\n\t\t\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t\t\tlocal Proofbit = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.Proofbit == "奇校验" then\n\t\t\t\t\t\t\t\t\tProofbit = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.Proofbit == "偶校验" then\n\t\t\t\t\t\t\t\t\tProofbit = 2\n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tlocal Stopbit = 1\n\t\t\t\t\t\t\t\tif sen.uplink.props.Stopbit == "0.5位" then\n\t\t\t\t\t\t\t\t\tStopbit = 0\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.Stopbit == "1.5位" then\n\t\t\t\t\t\t\t\t\tStopbit = 2\n\t\t\t\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\t\t\tif sen.uplink.props.Stopbit == "2位" then\n\t\t\t\t\t\t\t\t\tStopbit = 3\n\t\t\t\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\t\t\t\tlocal SwitchDelay = 1\n\t\t\t\t\t\t\t\tif sen.uplink.props.SwitchDelay == "0ms" then\n\t\t\t\t\t\t\t\t\tSwitchDelay = 0\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.SwitchDelay == "10ms" then\n\t\t\t\t\t\t\t\t\tSwitchDelay = 2\n\t\t\t\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\t\t\tif sen.uplink.props.SwitchDelay == "20ms" then\n\t\t\t\t\t\t\t\t\tSwitchDelay = 3\n\t\t\t\t\t\t\t\tend\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal sensor = {\n\t\t\t\t\t\t\t\t\tID = sen.uplink.props.sensorid,--传感器ID\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tPA ={ --物理地址\n\t\t\t\t\t\t\t\t\t\tSN= tostring(dev_inf.props.subnet),--子网号\n\t\t\t\t\t\t\t\t\t\tN=dev_inf.props.netid,--网络号(节点号)\n\t\t\t\t\t\t\t\t\t\tC= tonumber(sen.uplink.props.channel) or 0,--通道号\n\t\t\t\t\t\t\t\t\t\tM= tonumber(sen.uplink.props.module) or 0,--模块号: 485端口模块号 \n\t\t\t\t\t\t\t\t\t\t--SC=,-- 子通道号: 485端口子通道号\n\t\t\t\t\t\t\t\t\t}, \n\t\t\t\t\t\t\t\t\tDIS = tonumber(sen.uplink.props.dis) or 1,--采样间隔系数. 默认1\n\t\t\t\t\t\t\t\t\tPN = sen.props.protocolcode or 0 ,--协议号: 和安心云DAC解码协议保持一致.\n\t\t\t\t\t\t\t\t\tEN = tostring(sen.uplink.props.enabled =="false" and 0 or 1), --是否启用\n\t\t\t\t\t\t\t\t\tED = sen.uplink.props.postdelay or 0, --执行前延迟(485作用)\n\t\t\t\t\t\t\t\t\tRD = sen.uplink.props.predelay or 0,--读取前延迟\n\t\t\t\t\t\t\t\t\tCF = tostring(sen.uplink.props.fid) or "",--公式编码, 和安心云保持一致.\n\t\t\t\t\t\t\t\t\tCP = { --计算参数, 按顺序提供必需参数. \n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.k or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.f0 or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.kt or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.t0 or 0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tBC = CheckOption,\n\t\t\t\t\t\t\t\t\tFS = VibratSamplFreq,\n\t\t\t\t\t\t\t\t\tGA = AmplifierGain,\n\t\t\t\t\t\t\t\t\tBS = Incentive,\n\t\t\t\t\t\t\t\t\tMO = IncentiveMethod,\n\t\t\t\t\t\t\t\t\tUPS = VibratSpectrum,\n\t\t\t\t\t\t\t\t\tHN = tonumber(sen.uplink.props.Spectrumway) or 1,\n\t\t\t\t\t\t\t\t\tINV = tonumber(sen.uplink.props.SensorValue) or 1500,\n\t\t\t\t\t\t\t\t\tBR = Baudrate,\n\t\t\t\t\t\t\t\t\tDB = Databit,\n\t\t\t\t\t\t\t\t\tCB = Proofbit,\n\t\t\t\t\t\t\t\t\tSB = Stopbit,\n\t\t\t\t\t\t\t\t\tSWD = SwitchDelay\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttable.insert(mop_sensor.P, sensor)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n end\n end\n end\n end\n end\n req.payload = json.encode(mop)\n --log.debug("mas_idau_mop:request=%s", json.encode(req))\n local ok, ack = ctx:ssend(req, 20000)\n\tlocal result= {\n\t\tresult= nil,\n\t\ttype=1,\n\t\tdata={}\n\t}\n\t--log.debug("mas_idau_mop:ack=%s", json.encode(ack))\n if ok then\n req_sensor.payload= json.encode(mop_sensor)\n --log.debug("mas_idau_mop:requestsensor=%s", json.encode(req_sensor))\n local senok, senack = ctx:ssend(req_sensor, 120000)\n\t\tif senok then\n\t\t\tresult.data.ack = json.encode(senack)\n\t\telse\n\t\t\tresult.data.ack = json.encode(ack)\n\t\tend\n\t\t--log.debug("mas_idau_mop: sensor ack=%s", json.encode(result))\n\telse\n\t\tresult.data.ack = 'set error'\n end\n\n ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n if t == "host" then\n return 1\n elseif t == "relay" then\n return 2\n end\n return 3\nend\n INLINE 2018-03-15 13:38:36.008+08 2019-12-13 14:10:48.658+08 2018-03-15 \N
+ef26cc99-f1f8-4c3c-9d5a-090131dc310b SMARTIT \N 水质监测传感器协议 1.0 750185f8-2901-4e59-a173-708c3f84f270 750185f8-2901-4e59-a173-708c3f84f270 f 750185f8-2901-4e59-a173-708c3f84f270 Lua --字符串ascii->字符\nstart=function()\n log.debug("SMARTIT: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n\tlog.debug("SMARTIT: hex=%s",hex)\n\t--全局\n out={\n data ={},\n result = {}\n }\n\t --数据域 内的索引号\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\n\t\tlocal time = iota.hexToUInt(hex,7,'B') --时间戳\n\t\tlocal times = 946656000+ time\n\t\tlocal ph = iota.hexToShort(hex,30,'B')/100--PH\n\t\tlocal conductivity = iota.hexToShort(hex,33,'B')--电导\n \tlocal oxyhex = string.sub(hex, 75, 76)..string.sub(hex, 73, 74)..string.sub(hex, 79, 80)..string.sub(hex, 77, 78)\n\t\tlocal oxygen = iota.hexToFloat(oxyhex,0,'L') --溶解氧\n \tlocal turhex = string.sub(hex, 85, 86)..string.sub(hex, 83, 84)..string.sub(hex, 89, 90)..string.sub(hex,87, 88)\n\t\tlocal turbidity = iota.hexToFloat(turhex,0,'L') --浊度\n \tlocal temphex = string.sub(hex, 95, 96)..string.sub(hex, 93, 94)..string.sub(hex,99, 100)..string.sub(hex,97, 98)\n\t\tlocal temperature = iota.hexToFloat(temphex,0,'L') --温度\n\t\t\n\t\tout.data={\n\t\t\tph = ph,\n\t\t\tconductivity = conductivity,\n\t\t\toxygen = oxygen,\n\t\t\tturbidity = turbidity,\n\t\t\ttemperature = temperature\n\t\t}\n\telse\n\t\tout.result = {code = errcode, msg = errormsg}\n\tend\n\n local resultData =json.encode(out)\n log.debug("SMARTIT: result=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\n\n\n\nIsValid=function(alldata)\n log.debug("SMARTIT 校验开始")\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n\t\tlog.debug("SMARTIT: 校验失败 Data is nil")\n return false\n end\n return true\nend\n\n INLINE 2018-10-31 10:50:52.109+08 2018-11-05 10:15:52.084+08 2018-10-31 \N
+9849a791-5487-439b-a063-f7691ed40bfc hy_rainFall_1600 \N 温州华云雨量采集协议 1.0 680b589c-4603-4011-a8df-f37373ad8930 680b589c-4603-4011-a8df-f37373ad8930 f 680b589c-4603-4011-a8df-f37373ad8930 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n--AA0D000A0C01080001FFFF00A9 moduleId=1 --"rainFall": 0.01\nstart=function()\n log.debug("start %s, moduleId= %s", "hy_rainFall_1600.lua",json.encode(device.props.moduleId))\n local endian = 'B'\n local buff='' \n local buff1=''\n \n buff1=iota.appendHexByte(buff1, 0x55, endian)\n buff1=iota.appendHexByte(buff1, 0x0A, endian)\n buff1=iota.appendHexByte(buff1, 0x00, endian)--采集雨量\n local year =tonumber(os.date("%y"))\n buff1=iota.appendHexByte(buff1, year, endian)\n local month = tonumber(os.date("%m"))\n buff1=iota.appendHexByte(buff1, month, endian)\n local day = tonumber(os.date("%d"))\n buff1=iota.appendHexByte(buff1, day, endian)\n local hour = tonumber(os.date("%H"))\n buff1=iota.appendHexByte(buff1, hour, endian)\n buff1=iota.appendHexByte(buff1, 0x01, endian)\n buff1=iota.appendHexByte(buff1, 0x00, endian)\n xor = CheckXor(buff1)\n buff1=iota.appendHexByte(buff1, xor, endian)\n local ok1,resp1=ctx:ssend(buff1,10000)\n\n if ok1 then\n result = decode(resp1)\n -- print(string.format("out=%s,data=%s",resp, result))\n\t\tbuff=iota.appendHexByte(buff, 0x55, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x0A, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x10, endian)--同步时间\n\t\tlocal year =tonumber(os.date("%y"))\n\t\tbuff=iota.appendHexByte(buff, year, endian)\n\t\tlocal month = tonumber(os.date("%m"))\n\t\tbuff=iota.appendHexByte(buff, month, endian)\n\t\tlocal day = tonumber(os.date("%d"))\n\t\tbuff=iota.appendHexByte(buff, day, endian)\n\t\tlocal hour = tonumber(os.date("%H"))\n\t\tbuff=iota.appendHexByte(buff, hour, endian)\n\t\tlocal min = tonumber(os.date("%M"))\n\t\tbuff=iota.appendHexByte(buff, min, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\tlocal xor = CheckXor(buff)\n\t\tbuff=iota.appendHexByte(buff, xor, endian)\n\n\t\tok,resp=ctx:ssend(buff,10000)\n\t\tlocal result='{}'\n\t\tif ok then\n\t\t\tresult = unmarshall(resp)\n\t\t -- print(string.format("out=%s,data=%s",resp, result))\n\t\telse\n\t\t\tlocal outError2={\n\t\t\t\t\t\tdata ={},\n\t\t\t\t\t\tresult = {code = 1002, msg = '同步时间超时'}\n\t\t\t\t\t\t}\n\t\t\tresult=json.encode(outError2)\n\t\tend\n else\n local outError1={\n\t\t\t\t\t\tdata ={},\n\t\t\t\t\t\tresult = {code = 1001, msg = '超时'}\n\t\t\t\t\t\t}\n\t result=json.encode(outError1)\n\t\n end\n\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n log.debug("recv %s, sync=%s", "hy_rainFall_1600.lua",hex)\n\t--15028765\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n if iota.hexToByte(hex,2,'B') == 0x10 then\n sync = true\n log.debug("hy_rainFall_1600 sync is true")\n else \n sync = false\n log.debug("hy_rainFall_1600 sync is false")\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n return json.encode(out)\nend\n\n\n\ndecode=function(hex)\n log.debug("recv %s, data=%s", "hy_rainFall_1600.lua",hex)\n\t--15028765\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n log.debug("1")\n if ErrorCode then\n log.debug("%d",iota.hexToShort(hex,7,'L'))\n local rain = iota.hexToShort(hex,7,'L') * 0.01\n out.data = {\n\t\t\trainfall=rain\n\t\t};\n else\n out.result = {code = errcode, msg = errormsg}\n end\n log.debug("recv %s, ctx=%s", "hy_rainFall_1600.lua",json.encode(out))\n return json.encode(out)\nend\n\n\nIsValid=function(data)\n if data == nil or iota.hexToByte(data,1,'B') ~= string.len(data)/2 then\n errormsg = 'Data is nil or length is not right'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0xAA then\n errormsg = 'Data Flag is Invalid'\n errcode = 1001\n return false\n end\n log.debug("%d",iota.hexToByte(data,2,'B'))\n if iota.hexToByte(data,2,'B') ~= 0x10 and iota.hexToByte(data,2,'B') ~= 0x00 then\n errormsg = 'Data CMD is Invalid'\n errcode = 1001\n return false\n end\n local xor = iota.hexToByte(data,(string.len(data)/2)-1,'B')\n if CheckXor(string.sub(data,1,-3)) ~= xor then\n \t\terrcode = 1003\n errormsg = 'CRC ERROR' \n return false\n end\n return true\n--crc\nend\n\nCheckXor=function(hex) --异或校验\n local len = string.len(hex)/2\n local pp = 0\n for i =0,len-1 do\n local bi = iota.hexToByte(hex,i,'B')\n pp = bit:_and(bit:_xor(bi,pp) , 0x000000ff)\n end\n return pp\nend INLINE 2017-09-12 16:06:31.037+08 2019-12-13 16:03:17.069+08 2017-09-12 \N
+ea9ac263-3f91-4260-b341-02cc1811e8b3 fs-TOILET \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n local moduleNoid = device.uplink.props.id or device.uplink.props.module\n log.debug('http_test [%s] device =%s', moduleNoid, json.encode(device))\nend\n\nonData = function(req)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local moduleNoid = device.uplink.props.id or device.uplink.props.module --模块 通道 优先接口获取\n log.debug('http_test [%s] device =%s', moduleNoid, json.encode(device))\n local bodyStr = HextoStr(req)\n log.debug('http_test [%s] hex.Body=%s ', moduleNoid, bodyStr)\n local body = json.decode(bodyStr)\n if body ~= '' and body ~= nil then\n local vistorData = {} --人流量数据\n --测试用\n local sn = body.sn\n local time = body.time\n --log.debug("http_test 原始male=%s type=%s",json.encode(body.male),type(body.male))\n local male_T = {}\n local male_weather = {}\n local male_extension = {}\n local ismaleWeather = false\n male_T = body.male\n if male_T ~= nil then\n --log.debug("http_test male=%s type=%s",json.encode(male),type(male))\n vistorData['male_in'] = male_T['in']\n --log.debug("http_test male_in=%s [%s]",male_in,type(male_in))\n vistorData['male_out'] = male_T['out']\n vistorData['male_stay'] = male_T['stay']\n --log.debug("http_test male_in=%s male_out=%s male_stay=%s",male_in,male_out,male_stay)\n male_extension = male_T['extension']\n\n if male_extension ~= nil and male_extension['temperature'] ~= nil then\n log.debug('http_test [%s] 男厕环境 =%s', moduleNoid, json.encode(male_extension))\n male_weather['temperature'] = tonumber(male_extension['temperature'])\n \t\t--if sn=='3031904220001' then --八月银湖特殊处理\n -- male_weather['temperature']=26+math.random(1,30)*0.1\n -- end\n male_weather['humidity'] = tonumber(male_extension['humidity'])\n male_weather['NH3'] = tonumber(male_extension['NH3'])--22\n \t\tif sn=='3031904100001' then --象湖超一类公厕 特殊处理\n male_weather['NH3']=22\n end\n \t\tif sn=='2001812170057' then --江西澄碧湖超一类公厕(男) 特殊处理\n male_weather['NH3']=22\n end\n if male_weather['NH3'] ~= nil then\n ismaleWeather = true\n end\n else\n -- log.debug('http_test [%s] 男厕环境 无环境数据', moduleNoid)\n end\n end\n\n --log.debug("http_test 原始female=%s type=%s",json.encode(body.female),type(body.female))\n local female_T = {}\n local female_weather = {}\n local female_extension = {}\n local isfemaleWeather = false\n female_T = body.female\n if female_T ~= nil then\n vistorData['female_in'] = female_T['in']\n\n vistorData['female_out'] = female_T['out']\n vistorData['female_stay'] = female_T['stay']\n --log.debug('http_test [%s] vistorData=%s', moduleNoid, json.encode(vistorData))\n -- log.debug("http_test female_in=%s female_out=%s female_stay=%s",female_in,female_out,female_stay)\n female_extension = female_T['extension']\n --log.debug('http_test [%s] female_extension=%s type=%s', moduleNoid, json.encode(female_extension), type(female_extension))\n\n if female_extension ~= nil and female_extension['temperature'] ~= nil then\n log.debug('http_test [%s][sn=%s] 女厕环境female_T =%s', moduleNoid, sn,json.encode(female_extension))\n female_weather['temperature'] = tonumber(female_extension['temperature'])\n \t\t--if sn=='3031904220001' then --八月银湖特殊处理\n -- female_weather['temperature']=26+math.random(1,30)*0.1\n -- end\n female_weather['humidity'] = tonumber(female_extension['humidity'])\n female_weather['NH3'] = tonumber(female_extension['NH3'])--12\n \t\tif sn=='3031904100001' then --象湖超一类公厕 特殊处理\n female_weather['NH3']=12\n end\n \t\tif sn=='2001812290021' then --江西澄碧湖超一类公厕(女) 特殊处理\n female_weather['NH3']=12\n end\n if female_weather['NH3'] ~= nil then\n isfemaleWeather = true\n end\n else\n --log.debug('http_test [%s] 女厕环境 无环境数据 female_extension=%s', moduleNoid, json.encode(female_extension))\n end\n end\n\n local recordtime = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(time)))\n --遍历设备 获取数据\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n if device.dnlinks[1].devices ~= nil then\n --log.debug("http_test 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug("http_test [%s] child=%s",moduleNoid,json.encode(child))\n local deviceId = child.id\n --判断设备类型\n local pitIDstr\n local senseoType = child.props.sensortype --获取设备类型\n local sensorPostion = child.props.postion\n --log.debug('http_test [%s] senseoType=%s sensorPostion=%s', moduleNoid, senseoType, sensorPostion)\n --男厕坑位状态\n if senseoType == 'pit' and sensorPostion == 'male' then\n --女厕坑位状态\n pitIDstr = child.uplink.props.pitid --坑位号 通道 优先接口获取\n\n --log.debug('http_test [%s] 男厕坑 male_extension=%s[%s]', moduleNoid, json.encode(male_extension), json.encode(male_extension) ~= '{}')\n -- local pitstate_m=male_extension[pitIDstr]\n\n if json.encode(male_extension) ~= '{}' and male_extension[pitIDstr] ~= nil then\n local data1 = {\n data = {\n pitstate = male_extension[pitIDstr]\n },\n device = deviceId,\n type = 1,\n time = recordtime\n }\n -- log.debug("http_test 男厕坑pitIDstr[%s]=%s",pitIDstr,pitstate_m)\n table.insert(out.data, data1)\n end\n elseif senseoType == 'pit' and sensorPostion == 'female' then\n pitIDstr = child.uplink.props.pitid --坑位号 通道 优先接口获取\n\n --log.debug('http_test [%s] 女厕坑 female_extension=%s[%s]', moduleNoid, json.encode(female_extension), json.encode(female_extension) ~= '{}')\n -- local pitstate_w=female_extension[pitIDstr]\n if json.encode(female_extension) ~= '{}' and female_extension[pitIDstr] ~= nil then\n local data1 = {\n data = {\n pitstate = female_extension[pitIDstr]\n },\n device = deviceId,\n type = 1,\n time = recordtime\n }\n --log.debug('http_test [%s] 女厕坑pitIDstr[%s]=%s data1=%s', moduleNoid, pitIDstr, pitstate_w, json.encode(data1))\n table.insert(out.data, data1)\n end\n elseif senseoType == 'vistors' then --人流量\n -- statements\n pitIDstr = child.uplink.props.pitid --人流量\n --log.debug('http_test [%s] 人流量模块通道vistorData[male_in]~=nil=%s', moduleNoid, vistorData['male_in'] ~= nil)\n if vistorData['male_in'] ~= nil and sensorPostion == 'male' then\n local data2 = {\n data = {\n male_in = vistorData['male_in'],\n male_out = vistorData['male_out'],\n male_stay = vistorData['male_stay'],\n female_in = 0,\n female_out = 0,\n female_stay = 0\n },\n device = deviceId,\n type = 1,\n time = recordtime\n }\n --log.debug('http_test [%s] 人流量模块通道male_data2=%s', moduleNoid, json.encode(data2))\n table.insert(out.data, data2)\n elseif vistorData['female_in'] ~= nil and sensorPostion == 'female' then\n local data2 = {\n data = {\n female_in = vistorData['female_in'],\n female_out = vistorData['female_out'],\n female_stay = vistorData['female_stay'],\n male_in = 0,\n male_out = 0,\n male_stay = 0\n },\n device = deviceId,\n type = 1,\n time = recordtime\n }\n --log.debug('http_test [%s] 人流量模块通道female_data2=%s', moduleNoid, json.encode(data2))\n table.insert(out.data, data2)\n elseif vistorData['female_in'] ~= nil and vistorData['male_in'] ~= nil then\n local data2 = {\n data = vistorData,\n device = deviceId,\n type = 1,\n time = recordtime\n }\n --log.debug('http_test [%s] 人流量模块通道data2=%s', moduleNoid, json.encode(data2))\n table.insert(out.data, data2)\n end\n elseif senseoType == 'weather' then --厕所环境\n --log.debug('http_test [%s] 环境模块通道 ismaleWeather=%s,isfemaleWeather=%s,sensorPostion=%s', moduleNoid, ismaleWeather, isfemaleWeather, sensorPostion)\n local weatherData = {}\n if ismaleWeather and (sensorPostion == 'male' or sensorPostion == 'public') then\n --weatherData=male_weather\n local data1 = {\n data = male_weather,\n device = deviceId,\n type = 1,\n time = recordtime\n }\n --log.debug('http_test [%s] 环境模块通道data1=%s', moduleNoid, json.encode(data1))\n table.insert(out.data, data1)\n elseif isfemaleWeather and (sensorPostion == 'female' or sensorPostion == 'public') then\n --weatherData=female_weather\n local data1 = {\n data = female_weather,\n device = deviceId,\n type = 1,\n time = recordtime\n }\n --log.debug('http_test [%s] 环境模块通道data1=%s', moduleNoid, json.encode(data1))\n table.insert(out.data, data1)\n else\n -- log.debug('http_test [%s] 环境模块通道 无匹配环境数据,sensorPostion=%s', moduleNoid,sensorPostion)\n end\n end\n end\n else\n --log.debug('http_test [%s] subdevices是nil', moduleNoid)\n end\n else\n -- statements\n out.result = {code = 3009, msg = '上报数据为空'}\n end -- statements\n\n ackHttp = {type = 'http', code = 200}\n ctx:asend(ackHttp)\n\n log.debug('http_test [%s] json.encode(out)=%s', moduleNoid, json.encode(out))\n ctx:notify(json.encode(out))\nend\n\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n INLINE 2018-10-26 14:54:18.585+08 2020-09-14 14:08:16.078+08 2018-10-26 \N
+b9e32a9e-36d5-4b15-baca-567f42a0f45b 新协议 \N 1.0 f58d1dc4-346b-44b0-8151-837508852c77 f58d1dc4-346b-44b0-8151-837508852c77 f f58d1dc4-346b-44b0-8151-837508852c77 Lua function start(a) \n local m = a[1]; \n local mIndex = 1; \n for i,v in ipairs(a) do \n if v>m then \n m = v; \n mIndex = i; \n end \n end \n \n return "01,01,01" \nend INLINE 2018-03-07 11:44:21.734+08 2018-05-22 16:31:10.331+08 2018-03-07 \N
+4c09e571-5bca-4caa-9ee5-379594a29059 hc_1403 \N 基泰集成箱贴牌华测(华鉴) 1.0 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 f d3f1aa63-8397-45a4-af26-15a0f91d1e13 Lua --//01 协议文档/5月第3周/上海华测创时/振弦采集仪通讯协议.doc\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nstart=function()\n log.debug("start %s, moduleId=%s channel = %s ", "hc_1403",device.uplink.props.module or 'nil',device.uplink.props.channel or 'nil')\nlocal endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n log.debug("hc_1403 根设备 名称 : data is =%s", device.name)\n log.debug("hc_1403 根设备devices : data is =%s", json.encode(device))\n \tfor index,child in pairs(subdevices) do\n\t\t log.debug("hc_1403 子设备subdevices=%s : data is =%s", index,json.encode(child))\n \t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("hc_1403 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t moduleNo=child.props.moduleId\n\t\t\t channelNo=child.props.channelId \n\t\t\t log.debug("hc_1403 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n \t--local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t \n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n log.debug("hc_1403 模块%s通道%s的deviceId是%s:",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexByte(buff, 0x48, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0x43, endian) \n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\n\t\t\tbuff=iota.appendHexByte(buff, 1, endian) -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian) -- 1: 通道号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\t\t\tbuff=iota.appendHexWord(buff, 0, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0) \n\t\t\tbuff=iota.appendHexByte(buff, 0xAF, endian) \t\t\t\t\t\t\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n log.debug("hc_1403 模块%s通道%s的数据接收成功,开始解析=%s",moduleNo,channelNo,resp) \n\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("hc_1403 模块%s通道%s的数据接收失败",moduleNo,channelNo) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("hc_1403 subdevices是nil")\n \treturn nil\n end\n\t\t\n\tlocal resultData =json.encode(out)\n log.debug("hc_1403 out序列化结果 : out is =%s", json.encode(out))\n ctx:done(resultData)\t\n\t\n\t\nend\n--4843000015040301a8774945000000000000000000006778af\n--K=1\n--F0=2\n--Kt=3\n--T0=4\n--moduleId=5380\n--channelId=1\n--formula=ε=ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)\n--"phy": -16,\n--"frequency": -1.3727142151112332e-14,\n--"temperature": 0\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n\t--local subModuleId=subDevice.props.moduleId or subDevice.uplink.props.module\n\t--local subChannelId=subDevice.props.channelId or child.uplink.props.channel\n\tlog.debug("hc_1403:模块%s通道%s的deviceId是:%s",subModuleId,subChannelId,subDevice.id)\n local ErrorCode = IsValid(hex,tostring(subModuleId),tostring(subChannelId))\n if ErrorCode then \n \n \n\t\tlocal Frequency = iota.hexToFloat(hex, 8,'B',32); -- 65=1100101\n local Temp = iota.hexToFloat(hex, 12,'B',2);\n\t\tlog.debug("hc_1403:模块%s通道%s的原始值是:freq=%s,Temp=%s",subModuleId,subChannelId,freq,Temp)\n log.debug("hc_1403:模块%s通道%s的参数值是:=%s",subModuleId,subChannelId,json.encode(subDevice.uplink.capabilities[1].formula))\n \n\t\tlocal Phy=0\n --if subDevice.device.formula == "ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)" then --振弦公式\t\t\n\t\t\t\tlocal K1 = subDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\tlocal K2 = subDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\tlocal K3 = subDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\tlocal Fo = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\tlocal Kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal To = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\tlog.debug("hc_1403:振弦模块:公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\tlog.debug("hc_1403 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\telse\n\t\t\t\t\tlog.debug("hc_1403 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\tlocal Fi=Frequency*Frequency/1000.0 --经过厂家确认 公式带入的是模数\n\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\tlog.debug("当前的Phy是:%s",Phy)\n\t\t\t\tend \n\t\t--end\n \n \n \n\t\tsubData.data={\n\t\t\t\t\tfrequency=string.format("%0.3f",Frequency),\n\t\t\t\t\ttemperature=string.format("%0.3f",Temp),\n \tphysicalvalue=string.format("%0.3f",Phy)\n\t\t\t\t\t}\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n log.debug('hc_1403:模块%s通道%s开始校验数据',moduleId,channelId)\n if data == nil or string.len(data)/2 ~= 25 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('hc_1403:模块%s通道%s 数据 长度校验失败:Data is nil or invalid length',moduleId,channelId)\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x48 or iota.hexToByte(data,1,'B') ~= 0x43 or iota.hexToByte(data,24,'B') ~= 0xaf then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n\t\tlog.debug('hc_1403:模块%s通道%s 数据校验失败:Hex CMD False:错误码=1003',moduleId,channelId)\n return false\n end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,4,'B'))\n\tif moduleId~= moduleStr then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug('hc_1403:模块%s通道%s 模块号校验失败:Invalid acq moduleId=%s',moduleId,channelId,moduleStr)\n return false\n end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,7,'B'))\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('hc_1403:模块%s通道%s 通道号校验失败:Invalid acq channelId=%s',moduleId,channelId,channelStr)\n\t\treturn false\n\tend\t\t\n log.debug('hc_1403:模块%s通道%s校验数据通过!!!',moduleId,channelId)\n return true\nend INLINE 2018-03-13 17:28:25.833+08 2018-10-19 15:46:04.458+08 2018-03-13 \N
+c90b9b4d-c5d8-4946-8f3d-8f3928c07f73 CLAA噪声 \N 2.33 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f f16833ab-a4a4-45f5-9b39-ad2c66e488f6 Lua -- 测试数据:\n-- 80018402000600290207e1081c130100010000001d00001e500001150000008608004294c5a842629be4427e04c000d28c3a76\nstart=function()\n log.debug("LUA:start ")\nend\n\n-- 收到数据\nonData=function(data)\n --print("LUA:onData",data) \n local len=string.len(data)\n local r=nil\n if len == 102 then\n r=parseNoise(data)\n elseif len==50 then\n r=parseWakeup(data)\n else\n r={node = string.sub(data,1,4)}\n end\n result={}\n result.data = r\n result.type=1\n local msg = json.encode(result)\n log.debug("result:%s",msg)\n ctx:notify(msg)\nend\n\nparseNoise=function(data)\n -- 51长度: 头 25, 数据24, 尾2\n local node = string.sub(data,1,4)\n local Lmax = iota.hexToFloat(data,25+9,'B');\n local Lmin = iota.hexToFloat(data,25+13,'B');\n local Laeq = iota.hexToFloat(data,25+17,'B');\n return {node=node, lmax=Lmax,lmin=Lmin,laeq=Laeq}\nend\n\nparseWakeup=function(data)\n local node = string.sub(data,1,4)\n local power = iota.hexToByte(data,10,'B');\n local join = iota.hexToShort(data,17,'B');\n return {node=node,power=power,join=join}\nend\n\n\n INLINE 2017-08-28 16:25:26.952+08 2017-09-05 11:46:54.933+08 2017-08-19 \N
+6ea8f5c8-9394-4626-a6cf-1816ec45201d KRK_CO_2504 \N 1.0 26239c31-9c6a-4328-a8e8-625102c55e2d 26239c31-9c6a-4328-a8e8-625102c55e2d f 26239c31-9c6a-4328-a8e8-625102c55e2d Lua --[[\n协议号: 2504;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "KRK_CO_2504.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n -- 2204000000027698 moduleId=34\n --"Concentration": 138\n\tlocal BE='B'\n\tlocal buff=''; \n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE); -- 1: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x04, BE); -- 1: 帧头\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n buff=iota.appendHexByte(buff, 0x00, BE);\n buff=iota.appendHexByte(buff, 0x02, BE);\t\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) --CRC16\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 220404008A0000C8AC 浓度138 moduleId=34\n--原始数据 \nfunction protocol_decode(da)\n \n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug(data)\n\t--判断数据有效性\t\t\t\n if string.len(data)/2 ~=9 or iota.hexToByte(data, 1,'B')~=0x04 then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\t\n\telse\n\t\t\t\t\n log.debug("KRK_CO_2504 数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n local Concentration = iota.hexToShort(data, 3,'B');\n log.debug("KRK_CO_2504 浓度等于:%s",Concentration)\n\t\tlog.debug("KRK_CO_2504 设备原型等于:%s",json.encode(device))\n\t\tout.data = {\n\t\tconcentration=Concentration\n\t\t};\n end\n\t return json.encode(out)\nend\n INLINE 2017-09-04 19:44:14.653+08 2018-07-03 19:42:21.109+08 2017-09-02 \N
+e3ca2ca2-1556-415d-9001-4d7d88f2f3d1 jz_Inclination_1526 \N 1.0 3da5d630-ee41-4e97-8ca6-0c3cc6c9c486 3da5d630-ee41-4e97-8ca6-0c3cc6c9c486 f 3da5d630-ee41-4e97-8ca6-0c3cc6c9c486 Lua --//01 协议文档/6月第3周/西安精准测控有限责任公司/倾角传感器/PM-TSII-D(MODBUS).pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "jz_Inclination_1526", device.props.moduleId or "[nil]")\n\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x04, endian)\n buff=iota.appendHexByte(buff, 0x00, endian) \t\t\n buff=iota.appendHexByte(buff, 0x06, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n end\nend\n--01030c4145704ac2631eb841C3A5E3C53A\n--moduleId=1\n--"angleX": 12.339914,\n--"angleY": -56.779999,\n--"temp": 24.455999\n\nunmarshall=function(hex)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\n local angleX = iota.hexToFloat(hex,3,'B');\n local angleY=iota.hexToFloat(hex,7,'B');\n local temp=iota.hexToFloat(hex,11,'B');\n out.data = {\n angleX = angleX, \n\t\t\tangleY = angleY,\n temp = temp\n }\n\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 17 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = 'CMD is not right'\n errcode = 1001\n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid ack moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2017-12-07 11:36:05.367+08 2018-02-28 18:32:12.191+08 2017-12-07 \N
+f57a3855-220e-4403-961c-ffe49145a71c hrck_pressure_8066 \N 8066 1.0 df6e436e-e4a6-4b25-b1c7-175209753c0f df6e436e-e4a6-4b25-b1c7-175209753c0f f df6e436e-e4a6-4b25-b1c7-175209753c0f Lua start=function()\n log.debug("start hrck_pressure_2.lua , ctx= %s",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n \tlocal moduleNo=device.uplink.props.module \n buff=iota.appendHexByte(buff, moduleNo, endian) \n buff=iota.appendHexByte(buff, 4, endian) \n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 4, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug(" hrck_pressure_2 ssend %s",buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n log.debug(" hrck_pressure_2 recieve %s",hex)\n local out={\n data ={},\n result = {}\n }\n local moduleStr=iota.hexToByte(hex,0,'B')\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local pressure = iota.hexToFloat(hex,3,'B')\n local temperature=iota.hexToFloat(hex,7,'B')\n \n out.data = {\n pressure=pressure,\n temperature=temperature\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('hrck_pressure_2 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x04 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('hrck_pressure_2 数据校验通过')\n return true\n--crc\nend\n INLINE 2018-08-07 15:30:08.063+08 2018-08-10 17:10:08.984+08 2018-08-07 \N
+fda4d6b7-a716-42c7-bf9f-61a02a025878 shjy_acqunit_1700 \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua onData = function()\nend\n\nstart = function()\n log.debug('shjy_acqunit_1700 device=%s', json.encode(device))\n local buff = ''\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n\n buff = iota.appendHexByte(buff, moduleNo, endian)\n buff = buff .. '0300000006'\n buff = iota.appendHexCrc(buff, 'L', 0)\n\n local result = '{}'\n --第一次发送\n ok1, resp1 = ctx:ssend(buff, 5000)\n\n if ok1 then\n local ErrorCode1 = IsValid(resp1, moduleNo)\n if ErrorCode1 then\n result = unmarshall(resp, moduleNo)\n else\n -- statements\n --第二次下发\n ctx:sleep(5)\n ok2, resp2 = ctx:ssend(buff, 15000)\n\n if ok2 then\n result = unmarshall(resp2, moduleNo)\n else\n --\n local errout = {\n data = {},\n result = {},\n type = 2\n }\n errout.result = {code = 1001, msg = '超时'}\n result = json.encode(errout)\n end\n end\n end\n\n log.debug('shjy_acqunit_1700 m=%s,result=%s', moduleNo, result)\n ctx:done(result)\nend\n--140300000006c70d\n--14030c851d45185864451879b745168a4a\n\nunmarshall = function(hex, moduleNoStr)\n log.debug('shjy_acqunit_1700 m=%s, recv =%s', moduleNoStr, hex)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n local ErrorCode = IsValid(hex, moduleNoStr)\n if ErrorCode then\n for i = 1, 3, 1 do\n --local subDataHex_ = string.sub(hex, 7 + (i-1) * 8, 7 + (i-1) * 8+7)\n local subDataHex_H = string.sub(hex, 7 + (i - 1) * 8, 7 + (i - 1) * 8 + 3)\n local subDataHex_L = string.sub(hex, 7 + (i - 1) * 8 + 4, 7 + (i - 1) * 8 + 7)\n subDataHex = subDataHex_L .. subDataHex_H\n local freq = iota.hexToFloat(subDataHex, 0, 'B')\n\t\t\t if freq>500 then\n local childDevice = getDeviceInfo(moduleNoStr, i)\n --\n local deviceId\n if childDevice ~= nil then\n deviceId = childDevice.id\n\n if childDevice.uplink.capabilities[1].formula.metaid == 'aa5798ad-a0d5-4e40-93b6-af8ae2dfe86c' then --振弦公式 不带温度 metaid\n local k = childDevice.uplink.capabilities[1].formula.props.K\n local f0 = childDevice.uplink.capabilities[1].formula.props.Fo\n\n log.debug('shjy_acqunit_1700(振弦)子设备:m=%s,c=%s:公式参数=%s,%s', moduleNoStr, i, K, Fo)\n if k == nil or f0 == nil then\n Phy = nil\n log.debug('shjy_acqunit_1700(振弦)子设备:m=%s,c=%s:公式参数无效=%s,%s', moduleNoStr, i, K, Fo)\n else\n Phy = k * (freq ^ 2 - f0 ^ 2)\n log.debug('shjy_acqunit_1700模块号=%s,通道号=%s Phy=%s,freq=%s', moduleNoStr, i, Phy, freq)\n end\n end\n\n local data1 = {\n data = {\n rawValue = tonumber(string.format('%5.3f', freq)),\n physicalvalue = tonumber(string.format('%5.3f', Phy))\n },\n device = deviceId,\n type = 1\n }\n\t\t\n\t\t\t\t\n\t\t\t\t\n table.insert(out.data, data1)\n else\n log.debug('shjy_acqunit_1700(振弦)子设备:m=%s,c=%s deviceId为nil', tostring(moduleNo), tostring(channelNo))\n end\n\t\t end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n return json.encode(out)\nend\n\nIsValid = function(data, deviceModule)\n if data == nil or string.len(data) / 2 ~= 17 then\n errormsg = string.format('无效的数据长度=%s≠17', string.len(data) / 2)\n errcode = 1002\n return false\n end\n\n local cmd = string.sub(data, 3, 4)\n if cmd ~= '03' then\n errormsg = string.format('无效的数据类型=%s≠03', cmd)\n errcode = 1003\n return false\n end\n local dataModule = iota.hexToByte(data, 0, 'B')\n if tonumber(deviceModule) ~= dataModule then\n errormsg = string.format('无效的数据模块号=%s≠%s', dataModule, deviceModule)\n errcode = 1004\n return false\n end\n return true\n --crc\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("shjy_acqunit_1700 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n local moduleStrCheck = child.uplink.props.module --模块 通道 接口获取\n local channelStrCheck = child.uplink.props.channel\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) and tonumber(channelStrCheck) == tonumber(channelNoId) then\n log.debug('shjy_acqunit_1700 m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n else\n log.debug('shjy_acqunit_1700 m=%s c=%s 无匹配子设备', moduleNoId, channelNoId)\n return nil\n end\nend\n\n INLINE 2019-05-22 10:35:56.688+08 2019-08-26 10:23:06.046+08 2019-05-22 \N
+0472653c-720b-4ca7-ae8e-a16b9ed01087 GZMXY \N 1.0 36b70d6d-c974-4742-9257-b555027d36cd 36b70d6d-c974-4742-9257-b555027d36cd f 36b70d6d-c974-4742-9257-b555027d36cd Lua onData=function (hex)\n\t--主动上传式\n ok=ctx:asend("010203")\n\tlog.debug("GZM2018 Received=>%s",hex)\n log.debug("GZM2018 数据接收长度=%s",string.len(hex))\nend INLINE 2018-07-31 09:17:22.659+08 2018-07-31 09:29:44.319+08 2018-07-31 \N
+b14dd836-5544-48c0-89f0-9fd127a71905 FS-GC-Test \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\nend\n\nonData =\n function(hex)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local moduleNoid = device.uplink.props.id --模块 通道 优先接口获取\n log.debug('http_test [%s] device =%s', moduleNoid, json.encode(device))\n --log.debug('http_test [%s] hex.Body=%s ', moduleNoid, hex.Body)\n\n local body = json.decode(hex.Body)\n if body ~= '' and body ~= nil then\n local vistorData = {} --人流量数据\n --测试用\n local sn = body.sn\n local time = body.time\n --log.debug("http_test 原始male=%s type=%s",json.encode(body.male),type(body.male))\n local male_T = {}\n local male_weather = {}\n local male_extension = {}\n local ismaleWeather = false\n male_T = body.male\n if male_T ~= nil then\n --log.debug("http_test male=%s type=%s",json.encode(male),type(male))\n vistorData['male_in'] = male_T['in']\n --log.debug("http_test male_in=%s [%s]",male_in,type(male_in))\n vistorData['male_out'] = male_T['out']\n vistorData['male_stay'] = male_T['stay']\n --log.debug("http_test male_in=%s male_out=%s male_stay=%s",male_in,male_out,male_stay)\n male_extension = male_T['extension']\n\n if male_extension ~= nil and male_extension['temperature'] ~= nil then\n male_weather['temperature'] = tonumber(male_extension['temperature'])\n male_weather['humidity'] = tonumber(male_extension['humidity'])\n male_weather['NH3'] = tonumber(male_extension['NH3'])\n if male_weather['NH3'] ~= nil then\n ismaleWeather = true\n end\n\n log.debug('http_test [%s] 男厕环境 =%s', moduleNoid, json.encode(male_weather))\n else\n log.debug('http_test [%s] 男厕环境 无环境数据', moduleNoid)\n end\n end\n\n --log.debug("http_test 原始female=%s type=%s",json.encode(body.female),type(body.female))\n local female_T = {}\n local female_weather = {}\n local female_extension = {}\n local isfemaleWeather = false\n female_T = body.female\n if female_T ~= nil then\n vistorData['female_in'] = female_T['in']\n\n vistorData['female_out'] = female_T['out']\n vistorData['female_stay'] = female_T['stay']\n log.debug('http_test [%s] vistorData=%s', moduleNoid, json.encode(vistorData))\n -- log.debug("http_test female_in=%s female_out=%s female_stay=%s",female_in,female_out,female_stay)\n female_extension = female_T['extension']\n log.debug('http_test [%s] female_extension=%s type=%s', moduleNoid, json.encode(female_extension), type(female_extension))\n\n if female_extension ~= nil and female_extension['temperature'] ~= nil then\n female_weather['temperature'] = tonumber(female_extension['temperature'])\n female_weather['humidity'] = tonumber(female_extension['humidity'])\n female_weather['NH3'] = tonumber(female_extension['NH3'])\n if female_weather['NH3'] ~= nil then\n isfemaleWeather = true\n end\n\n log.debug('http_test [%s] 女厕环境 =%s', moduleNoid, json.encode(female_weather))\n else\n log.debug('http_test [%s] 女厕环境 无环境数据 female_extension=%s', moduleNoid, json.encode(female_extension))\n end\n end\n\n local recordtime = os.date('%Y-%m-%dT%H:%M:%S+8:00', (tonumber(time)))\n --遍历设备 获取数据\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n if device.dnlinks[1].devices ~= nil then\n --log.debug("http_test 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug("http_test [%s] child=%s",moduleNoid,json.encode(child))\n local deviceId = child.id\n --判断设备类型\n local pitIDstr\n local senseoType = child.props.sensortype --获取设备类型\n local sensorPostion = child.props.postion\n log.debug('http_test [%s] senseoType=%s sensorPostion=%s', moduleNoid, senseoType, sensorPostion)\n --男厕坑位状态\n if senseoType == 'pit' and sensorPostion == 'male' then\n --女厕坑位状态\n pitIDstr = child.uplink.props.pitid --坑位号 通道 优先接口获取\n\n log.debug('http_test [%s] 男厕坑 male_extension=%s[%s]', moduleNoid, json.encode(male_extension), json.encode(male_extension) ~= '{}')\n -- local pitstate_m=male_extension[pitIDstr]\n\n if json.encode(male_extension) ~= '{}' and male_extension[pitIDstr] ~= nil then\n local data1 = {\n data = {\n pitstate = male_extension[pitIDstr]\n },\n device = deviceId,\n type = 1,\n time = recordtime\n }\n -- log.debug("http_test 男厕坑pitIDstr[%s]=%s",pitIDstr,pitstate_m)\n table.insert(out.data, data1)\n end\n elseif senseoType == 'pit' and sensorPostion == 'female' then\n pitIDstr = child.uplink.props.pitid --坑位号 通道 优先接口获取\n\n log.debug('http_test [%s] 女厕坑 female_extension=%s[%s]', moduleNoid, json.encode(female_extension), json.encode(female_extension) ~= '{}')\n -- local pitstate_w=female_extension[pitIDstr]\n if json.encode(female_extension) ~= '{}' and female_extension[pitIDstr] ~= nil then\n local data1 = {\n data = {\n pitstate = female_extension[pitIDstr]\n },\n device = deviceId,\n type = 1,\n time = recordtime\n }\n log.debug('http_test [%s] 女厕坑pitIDstr[%s]=%s data1=%s', moduleNoid, pitIDstr, pitstate_w, json.encode(data1))\n table.insert(out.data, data1)\n end\n elseif senseoType == 'vistors' then --人流量\n -- statements\n pitIDstr = child.uplink.props.pitid --人流量\n log.debug('http_test [%s] 人流量模块通道vistorData[male_in]~=nil=%s', moduleNoid, vistorData['male_in'] ~= nil)\n if vistorData['male_in'] ~= nil and sensorPostion == 'male' then\n local data2 = {\n data = {\n male_in = vistorData['male_in'],\n male_out = vistorData['male_out'],\n male_stay = vistorData['male_stay']\n },\n device = deviceId,\n type = 1,\n time = recordtime\n }\n log.debug('http_test [%s] 人流量模块通道data2=%s', moduleNoid, json.encode(data2))\n table.insert(out.data, data2)\n elseif vistorData['female_in'] ~= nil and sensorPostion == 'female' then\n local data2 = {\n data = {\n female_in = vistorData['female_in'],\n female_out = vistorData['female_out'],\n female_stay = vistorData['female_stay']\n },\n device = deviceId,\n type = 1,\n time = recordtime\n }\n log.debug('http_test [%s] 人流量模块通道data2=%s', moduleNoid, json.encode(data2))\n table.insert(out.data, data2)\n else\n local data2 = {\n data = vistorData,\n device = deviceId,\n type = 1,\n time = recordtime\n }\n log.debug('http_test [%s] 人流量模块通道data2=%s', moduleNoid, json.encode(data2))\n table.insert(out.data, data2)\n end\n elseif senseoType == 'weather' then --厕所环境\n log.debug('http_test [%s] 环境模块通道 ismaleWeather=%s,isfemaleWeather=%s,sensorPostion=%s', moduleNoid, ismaleWeather, isfemaleWeather, sensorPostion)\n local weatherData = {}\n if ismaleWeather and (sensorPostion == 'male' or sensorPostion == 'public') then\n --weatherData=male_weather\n local data1 = {\n data = male_weather,\n device = deviceId,\n type = 1,\n time = recordtime\n }\n log.debug('http_test [%s] 环境模块通道data1=%s', moduleNoid, json.encode(data1))\n table.insert(out.data, data1)\n elseif isfemaleWeather and (sensorPostion == 'female' or sensorPostion == 'public') then\n --weatherData=female_weather\n local data1 = {\n data = female_weather,\n device = deviceId,\n type = 1,\n time = recordtime\n }\n log.debug('http_test [%s] 环境模块通道data1=%s', moduleNoid, json.encode(data1))\n table.insert(out.data, data1)\n else\n log.debug('http_test [%s] 环境模块通道 无匹配环境数据', moduleNoid)\n end\n end\n end\n else\n log.debug('http_test [%s] subdevices是nil', moduleNoid)\n end\n else\n -- statements\n out.result = {code = 3009, msg = '上报数据为空'}\n end -- statements\n\n log.debug('http_test [%s] json.encode(out)=%s', moduleNoid, json.encode(out))\n ctx:notify(json.encode(out))\nend INLINE 2019-02-21 10:09:01.782+08 2019-05-17 14:08:43.943+08 2019-02-21 \N
+2a75ac49-75b5-4476-9120-9aaacf395308 dahuaMeter \N 1.0 b7a8e100-b8fb-4135-a1b5-00a91da6da3f b7a8e100-b8fb-4135-a1b5-00a91da6da3f f b7a8e100-b8fb-4135-a1b5-00a91da6da3f Lua get INLINE 2019-11-11 15:20:44.513+08 2019-11-11 15:20:44.513+08 2019-11-11 \N
+81f86e48-a3c7-4867-8e7f-cd9b620bf7af fs_weight_9804 \N 北京欧乐科技有限公司 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua \nstart = function()\n log.debug('start %s', 'fs_weight_9804.lua')\n \n -- local tt='FF90001B570007D001010000000001BD000202010038010038BD0038000038';\n --local xor=string.format('%02x',iota.hexCheckXor(tt,4,31))\n --log.debug('应答1 respStr=%s',xor)\n --ctx:asend('03040506',15000)\nend\n\ngetAckTimeResponse=function()\n local dataTime=os.date("%Y%m%d%H%M%S", os.time())--getDateTimeHexStr()\n local ackResp='ff92000800'..dataTime\n --log.debug('应答ackResp=%s',ackResp)\n --local sampleStr=string.lower('FF90001B580007D00101000000000118000202010007010004180007180004')\n local respStr=ackResp..string.format('%02X',iota.hexCheckXorSum(ackResp,4,string.len(ackResp)/2))\n --log.debug('fs_weight_9804 应答1 respStr=%s',respStr)\n return respStr\n end\n\n--FF90001B570007D001010000000001BD000202010038010038BD003800003881\nonData = function(hex)\n local out = {\n data = {},\n result = {}\n }\n\t\n\tlocal isValidData=true\n\t\n local IDX_Start = 0 -- 起始指令\n local IDX_CMD = 1 -- 命令字\n local IDX_DataLen = 2 -- 数据长度\n\n local IDX_year = 6\n local IDX_month = 8\n local IDX_day = 9\n local IDX_hour = 10\n local IDX_minute = 11\n local IDX_second = 12\n\n local IDX_UpWeight = 13 -- 总重超重\n\n local IDX_MoudleID = 14 -- 模块号(车道号)\n local IDX_Speed = 15 -- 速度\n -- local IDX_Acceleration = 16; -- 加速度\n\n local IDX_axeisCount = 17 -- 轴数\n local IDX_axeisGroupCount = 18 -- 轴组数\n -- local IDX_GrWeight = 46; -- 总重\n -- local IDX_LimitWeight = 55; -- 总重超重\n\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local crossroad = iota.hexToByte(hex, IDX_MoudleID, 'B') -- 模块号(车道号)\n log.debug('fs_weight_9804 crossroad=%s', crossroad)\n\n local carspeed = iota.hexToByte(hex, IDX_Speed, 'B') -- 速度\n\n local axisNum = iota.hexToByte(hex, IDX_axeisCount, 'B') -- 轴数\n local axisGroupnum = iota.hexToByte(hex, IDX_axeisGroupCount, 'B') -- 轴组数\n\n local IDX_AxieWeight1 = 18 + 3 * axisGroupnum + 1 -- 轴一重量\n local axisSpeed = {}\n local axisWeight = {}\n local grossWeight = 0\n --log.debug("fs_weight_9804 轴数=%s",axisNum)\n for i = 1, axisNum, 1 do\n axisSpeed[i] = iota.hexToByte(hex, IDX_AxieWeight1, 'B')\n --log.debug("fs_weight_9804 轴速[%s]=%s",i,axisSpeed[i])\n axisWeight[i] = 0.1*iota.hexToShort(hex, IDX_AxieWeight1 + 1, 'B') --单位T\n \t\taxisWeight[i]=tonumber(string.format("%0.3f",axisWeight[i]))\n grossWeight = grossWeight + axisWeight[i]\n -- log.debug("fs_weight_9804 轴重[%s]=%s",i,axisWeight[i])\n IDX_AxieWeight1=IDX_AxieWeight1+3\n end\n grossWeight=tonumber(string.format("%0.3f",grossWeight))\n\n local year = iota.hexToUShort(hex, IDX_year, 'B')\n local month = iota.hexToByte(hex, IDX_month, 'B')\n local day = iota.hexToByte(hex, IDX_day, 'B')\n local hour = iota.hexToByte(hex, IDX_hour, 'B')\n local minute = iota.hexToByte(hex, IDX_minute, 'B')\n local second = iota.hexToByte(hex, IDX_second, 'B')\n --log.debug('fs_weight_9804 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s', year, month, day, hour, minute, second)\n local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n --log.debug('fs_weight_9804 timenum=%s', timenum)\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n log.debug('fs_weight_9804 recordTime=%s', recordTime)\n\n local over = iota.hexToByte(hex, IDX_UpWeight, 'B') --总重超重\n\n --log.debug('fs_weight_9804 axieWeight=%s', json.encode(axisWeight))\n\n ----\n\t\t\n\t\tlocal directionHans=device.props.direction\n\t\tlocal direction\n\t\tif(directionHans=="上桥") then\n\t\t direction=0\n\t\t else\n\t\t direction=1\n\t\tend\n\t\t\n\t\t\n\t\t\n out.data = {\n crossRoad = tostring(crossroad),-- 模块号(车道号)\n speed = tostring(carspeed),-- 速度\n axisNum = tostring(axisNum), --轴数\n grossWeight = tostring(grossWeight),--总重(轴重) T\n overload = tostring(over),--总重超重\n direction= tostring(direction),\n axieWeight = json.encode(axisWeight),--轴重 T\n axisSpeed= json.encode(axisSpeed)--轴速\n }\n\n\t\t\n\t\t\n\t\t--判断数据是否在上下限之内。\n\t\t\n\t\tlocal WeightLimitUp=tonumber(device.props.WeightLimitUp)*0.001\n\t\tlocal WeightLimitDown=tonumber(device.props.WeightLimitDown)*0.001\n\t\tlocal SpeedLimitUp=tonumber(device.props.SpeedLimitUp)\n\t\tlocal SpeedLimitDown=tonumber(device.props.SpeedLimitDown)\n\t\t\n\t\t\n\t\tlog.debug("fs_weight_9804 开始校验[方向=%s] 车速%s范围[%s,%s]与车重%s范围[%s,%s]",direction,carspeed,SpeedLimitDown,SpeedLimitUp,grossWeight,WeightLimitDown,WeightLimitUp)\n\t\tif carspeed>SpeedLimitUp or carspeedWeightLimitUp or grossWeight字符\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\nfunction unicode2gb2312(src)\n local map_tb = {\n ['冀'] = 'BCBD',\n ['豫'] = 'D4A5',\n ['云'] = 'D4C6',\n ['辽'] = 'C1C9',\n ['黑'] = 'BADA',\n ['湘'] = 'CFE6',\n ['皖'] = 'CDEE',\n ['鲁'] = 'C2B3',\n ['新'] = 'D0C2',\n ['苏'] = 'CBD5',\n ['浙'] = 'D5E3',\n ['赣'] = 'B8D3',\n ['鄂'] = 'B6F5',\n ['桂'] = 'B9F0',\n ['甘'] = 'B8CA',\n ['晋'] = 'BDFA',\n ['蒙'] = 'C3C9',\n ['陕'] = 'C9C2',\n ['吉'] = 'BCAA',\n ['闽'] = 'C3F6',\n ['贵'] = 'B9F3',\n ['粤'] = 'D4C1',\n ['青'] = 'C7E0',\n ['藏'] = 'B2D8',\n ['川'] = 'B4A8',\n ['宁'] = 'C4FE',\n ['琼'] = 'C7ED',\n ['渝'] = 'D3E5',\n ['京'] = 'BEA9',\n ['津'] = 'BDF2',\n ['沪'] = 'BBA6',\n ['深'] = 'C9EE',\n ['学'] = 'D1A7'\n }\n for k, v in pairs(map_tb) do\n if v == string.format('%X', tonumber(src, 16)) then\n return k\n end\n end\n return ' '\nend INLINE 2019-11-27 14:10:47.166+08 2020-04-16 09:56:11.032+08 2019-11-27 \N
+e7ef3612-fa92-4001-848c-57da35f5af77 bdxk_displacement_87 \N 1.0 3bc407e4-dd38-4be8-9659-2f9aac78956a 3bc407e4-dd38-4be8-9659-2f9aac78956a f 3bc407e4-dd38-4be8-9659-2f9aac78956a Lua --//D:\\SVN\\201902项目\\湖南北斗星空设备接入\\北斗星空自动化数据通信协议.pdf\nstart =\n function()\n log.debug('bdxk_displacement_8701 device=%s', json.encode(device))\n\n local endian = 'B'\n local buff = ''\n\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n log.debug('bdxk_displacement_8701 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ', moduleNo, json.encode(moduleNo))\n\n buff = 'aa7510000e00'\n \tbuff=buff..string.lower(moduleNo)\n --buff = iota.appendHexByte(buff, moduleNo, endian)\n buff = buff .. getDateTimeBCDStr()\n local per_Len = string.len(buff) / 2\n local checksum=iota.hexCheckXorSum(buff, 0, per_Len)\n \n buff = buff .. string.format('%02x',checksum)\n\n log.debug('bdxk_displacement_8701,m=%s, send=%s', moduleNo, buff)\n ok, resp = ctx:ssend(buff, 15000)\n local result = '{}'\n if ok then\n result = unmarshall(resp, moduleNo)\n ctx:done(result)\n else\n local errout = {\n data = {},\n result = {}\n }\n errout.result = {code = 1001, msg = '采集超时'}\n ctx:done(errout)\n end\nend\n--module=\t2868DA40010000D4\n--cmd=\t\tAA7510000E002868DA40010000D408011611015392\n--response= 557A100035002868DA40010000D4080116110153fff0130900001A151A15A6CCA6C51FD3A6B1E4B8D6BDEEBCC62D3232333036594833363031412027\n\n--"displacement": 48.74,\n--"length": 487.3,,\n--"temperature": -1.6\nunmarshall =\n function(hex, moduleNoStr)\n log.debug('bdxk_displacement_8701 m=%s, recv =%s', moduleNoStr, hex)\n local out = {\n type = 1,\n data = {},\n result = {}\n }\n\n local ErrorCode = IsValid(hex, moduleNoStr)\n if ErrorCode then\n local index = 14\n local timeStr = string.sub(hex, index * 2 + 1, index * 2 + 12)\n index = index + 6\n local temperature_hex = string.sub(hex, index * 2 + 1, index * 2 + 4)\n local temperature = 0.1 * iota.hexToShort(hex, index, 'B') --getTemperature(temperature_hex, 0.1)\n\n index = index + 2\n local length_hex = string.sub(hex, index * 2 + 1, index * 2 + 4)--测量值\n index = index + 2\n\n local displacement_hex = string.sub(hex, index * 2 + 1, index * 2 + 4)--偏离值\n index = index + 2\n local frequency_hex = string.sub(hex, index * 2 + 1, index * 2 + 4)\n index = index + 2\n local comp_frequency_hex = string.sub(hex, index * 2 + 1, index * 2 + 4)\n index = index + 2\n local unit_hex = string.sub(hex, index * 2 + 1, index * 2 + 8)\n index = index + 4\n local sensorType_hex = string.sub(hex, index * 2 + 1, index * 2 + 2)\n\n --local unit\n log.debug('timeStr=%s,temperature=%s,length=%s,displacement=%s,frequency=%s,comp_frequency=%s,unit_hex=%s,sensorType_hex=%s', timeStr, temperature_hex, length_hex, displacement_hex, frequency_hex, comp_frequency_hex, unit_hex,sensorType_hex)\n\n --计算\n local length = getData(length_hex, sensorType_hex)\n local displacement = getData(displacement_hex, sensorType_hex)\n out.data = {\n length = tonumber(string.format('%0.3f', length)),\n displacement = tonumber(string.format('%0.3f', displacement)),\n temperature = tonumber(string.format('%0.3f',temperature))\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n log.debug('bdxk_displacement_8701 m=%s,data=%s', moduleNoStr, json.encode(out))\n return json.encode(out)\nend\n\nIsValid = function(data, deviceModule)\n local dataLen = string.len(data) / 2\n if data == nil or dataLen ~= 60 then\n errormsg = string.format('无效的数据长度=%s≠60', dataLen)\n errcode = 1002\n return false\n end\n\n local dataModule = string.sub(data, 13, 13 + 15)\n if string.lower(deviceModule) ~= string.lower(dataModule) then\n errormsg = string.format('无效的传感器编号=%s≠%s', dataModule, deviceModule)\n errcode = 1003\n return false\n end\n return true\n --crc\nend\n\ngetDateTimeBCDStr = function()\n --BCD码日期 181220025358 --> 16进值日期 120c1402353a\n local BCDdateStr = os.date('%y%m%d%H%M%S', os.time())\n --print(string.format('BCDdateStr=%s',BCDdateStr))\n local hexdateStr = ''\n for i = 1, string.len(BCDdateStr), 2 do\n local newHex = string.sub(BCDdateStr, i, i + 1)\n\n hexdateStr = hexdateStr .. newHex\n --print(string.format('i=%s,newHex=%s,hexdateStr=%s',i,newHex,hexdateStr))\n end\n return hexdateStr\nend\n\n--字符串ascii->字符\nhexToStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\ngetTemperature = function(hexStr, k)\n local checkIndex = string.sub(hexStr, 1, 1)\n local result\n if checkIndex == 'f' then\n result = 0x10000 - tonumber(hexStr, 16)\n else\n result = tonumber(hexStr, 16)\n end\n return result * k\nend\n\ngetData = function(hexStr, sType)\n local dotIndex = tonumber(string.sub(sType, 1, 1))\n local result = tonumber(hexStr, 16) * math.pow(0.1, dotIndex)\n return result\nend INLINE 2019-02-19 16:33:44.174+08 2019-03-11 17:14:10.96+08 2019-02-19 \N
+ccc136ea-7d44-4529-9bf0-7dfae8e1f59d hd_httpMQTT1 \N 报警设备 1.0 fff3496c-71e7-4ca5-abe5-9de748ac5a63 fff3496c-71e7-4ca5-abe5-9de748ac5a63 f fff3496c-71e7-4ca5-abe5-9de748ac5a63 Lua \nstart = function()\n log.debug('hd_httpMQTT1 device=%s', json.encode(device))\n\tlog.debug('hd_httpMQTT1 device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {}\n }\n \n local moduleNo = device.uplink.props.id --模块\n\n log.debug('hd_httpMQTT1', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n \n log.debug('hd_httpMQTT1 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\t\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\t\tctx:asend(ack)\t\n\t\treturn\n\tend \n\n\tlocal timeStamps=bodypkg['t']\n\tlog.debug('hd_httpMQTT1 [%s] 时间戳', tonumber(timeStamps))\n local msg=bodypkg['a']\n\tlog.debug('hd_httpMQTT1 报警提示是%s ', msg)\n\t\n\t\n\t\n\n\t\tout.result={code = 70050001,msg=msg,time=timeStamps}\n log.debug('hd_httpMQTT1 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\n \nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend\n INLINE 2019-11-07 10:40:07.656+08 2019-11-11 10:35:02.994+08 2019-11-07 \N
+30a84127-5cf1-4023-822c-b9716b7ac0a9 mk_acqUnit_4001 \N 上海牧坤采集仪产品 1.0 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca f c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, ctx=", "mk_acqUint_4001.lua",json.encode(ctx.device))\nend\n\nonData=function(data)\n local out={\n data ={},\n result = {}\n }\n log.debug("recv %s, ctx=%s", "mk_acqUint_4001.lua",data)\n local mouduleListlst ={}\n --local i = 0\n --for i = 0, string.len(data)/2-1 do --不明白为啥for循环\n --while true do\n --if iota.hexToByte(data,i,'B') == 0xAA then --Head\n -- if string.len(data)/2 - i < 3 then break end\n local length = iota.hexToByte(data,2,'B') + 5\n --if length > string.len(data)/2 - i then break end\n --local ErrorCode = IsValid(data)\n --if ErrorCode ~= true then break end\n local valCmd = iota.hexToByte(data,3,'B')\n local moduleNo = iota.hexToByte(data,1,'B')\n local modulenumber= tonumber(device.props.moduleId)\n if moduleNo==modulenumber then\n if valCmd == 0x01 then --WindSpeed m/s\n --AA01030103EB34EA\n --"windSpeed": 10.03\n if length == 8 and iota.hexToByte(data,2,'B') == 0x03 and moduleNo==modulenumber then --LenWindSpeed 8, data length 3\n local windspeed = iota.hexToShort(data,4,'B') /100.0\n \n out.data = { \n windSpeed = windspeed\n }\n else\n errcode = 1005\n errmsg = 'Unknow Error,code is not right'\n out.result = {code=errcode,msg=errmsg}\n out.data = {}\n end\n elseif valCmd == 0x07 then --温湿度\n --AA01040703EB305E8B\n --"humi": 48,\n --"temp": 100.3\n if length == 9 and iota.hexToByte(data,2,'B') == 0x04 and moduleNo==modulenumber then \n local temp = iota.hexToShort(data,4,'B') / 10.0\n local humi = iota.hexToByte(data,6,'B') \n out.data = { \n temp=temp,\n humi=humi\n }\n else\n errcode = 1005\n errmsg = 'Unknow Error,code is not right'\n out.result = {code=errcode,msg=errmsg}\n out.data = {}\n end\n elseif valCmd == 0x40 then --ValLvdt m\n --aa040340017a6832aa0503400a52a1\n --"lvdt": 3.78\n if length == 8 and iota.hexToByte(data,2,'B') == 0x03 and moduleNo==modulenumber then \n local lvdt = iota.hexToShort(data,4,'B') /100.0\n out.data = { \n lvdt = lvdt\n }\n else\n errcode = 1005\n errmsg = 'Unknow Error,code is not right'\n out.result = {code=errcode,msg=errmsg}\n out.data = {}\n end\n elseif valCmd == 0x03 then --° 三轴角度\n --aa0407030d660eb70000ad58\n --"xDegree": 3.43,\n --"yDegree": 3.767,\n --"zDegree": 0\n if length == 12 and iota.hexToByte(data,2,'B') == 0x07 and moduleNo==modulenumber then\n local xDegree = iota.hexToShort(data,4,'B') /1000.0\n local yDegree = iota.hexToShort(data,6,'B') /1000.0\n local zDegree = iota.hexToShort(data,8,'B') /1000.0\n out.data = { \n xDegree = xDegree,\n yDegree = yDegree,\n zDegree = zDegree\n }\n else\n errcode = 1005\n errmsg = 'Unknow Error,code is not right'\n out.result = {code=errcode,msg=errmsg}\n out.data = {}\n end\n elseif valCmd == 0x08 then --mg 加速度\n --AA01030803EBE4E8\n --"accelertation": 1003\n if length == 8 and iota.hexToByte(data,2,'B') == 0x03 and moduleNo==modulenumber then\n local accelertation = iota.hexToShort(data,4,'B')\n out.data = { \n accelertation=accelertation\n }\n else\n errcode = 1005\n errmsg = 'Unknow Error,code is not right'\n out.result = {code=errcode,msg=errmsg}\n out.data = {}\n end\n elseif valCmd == 0x16 then --mg 加速度(三轴)\n --AA01071603EB03EB03EB79F9\n --"xAccelertation": 1003,\n --"yAccelertation": 1003,\n --"zAccelertation": 1003\n if length == 12 and iota.hexToByte(data,2,'B') == 0x07 and moduleNo==modulenumber then\n local xAccelertation = iota.hexToShort(data,4,'B')\n local yAccelertation = iota.hexToShort(data,6,'B')\n local zAccelertation = iota.hexToShort(data,8,'B')\n out.data = { \n xAccelertation = xAccelertation,\n yAccelertation = yAccelertation,\n zAccelertation = zAccelertation\n }\n else\n errcode = 1005\n errmsg = 'Unknow Error,code is not right'\n out.result = {code=errcode,msg=errmsg}\n out.data = {}\n end\n elseif valCmd == 0x10 then --°\n --AA01051003EB03EB1111\n --"xDegree": 1.003,\n --"yDegree": 1.003\n if length == 10 and iota.hexToByte(data,2,'B') == 0x05 and moduleNo==modulenumber then\n local xDegree = iota.hexToShort(data,4,'B') / 1000.000\n local yDegree = iota.hexToShort(data,6,'B') / 1000.000\n \n out.data = { \n xDegree = xDegree,\n yDegree = yDegree\n }\n else\n errcode = 1005\n errmsg = 'Unknow Error,code is not right'\n out.result = {code=errcode,msg=errmsg}\n out.data = {}\n end \n elseif valCmd == 0x05 then --℃ 采集时间需要减 2h\n --AA01030503EB752B\n --"temp": 100.3\n if length == 8 and iota.hexToByte(data,2,'B') == 0x03 and moduleNo==modulenumber then\n local Temp = iota.hexToShort(data,4,'B') / 10.0\n out.data = { \n temp=Temp\n }\n else\n errcode = 1005\n errmsg = 'Unknow Error,code is not right'\n out.result = {code=errcode,msg=errmsg}\n out.data = {}\n end\n local buff2 = 'AA0001E021E4' --下发接受返回命令\n ctx:asend(buff2)\n elseif valCmd == 0x41 then --液位 mm\n --AA01094100EB0000000000000000\n --"level": 235\n if length == 14 and iota.hexToByte(data,2,'B') == 0x09 and moduleNo==modulenumber then\n local level = iota.hexToShort(data,4,'B') \n out.data = { \n level=level\n }\n else\n errcode = 1005\n errmsg = 'Unknow Error,code is not right'\n out.result = {code=errcode,msg=errmsg}\n out.data = {}\n end \n elseif valCmd == 0x06 and moduleNo==modulenumber then --湿度\n --AA010206309F90\n --"humi": 48\n if length == 7 and iota.hexToByte(data,2,'B') == 0x09 and moduleNo==modulenumber then\n local humi =iota.hexToByte(data,4,'B') \n out.data = { \n humi=humi\n }\n else\n errcode = 1005\n errmsg = 'Unknow Error,code is not right'\n out.result = {code=errcode,msg=errmsg}\n out.data = {}\n end \n elseif valCmd == 0x42 then -- ℃ 温度\n if length == 14 and iota.hexToByte(data,2,'B') == 0x09 and moduleNo==modulenumber then\n local Temp = iota.hexToShort(data,4,'B') \n out.data = { \n temp=Temp\n }\n else\n errcode = 1005\n errmsg = 'Unknow Error,code is not right'\n out.result = {code=errcode,msg=errmsg}\n out.data = {}\n end \n elseif valCmd == 0x43 then --电压 mm\n --AA01094300EB0000000000000000\n --"votage": 235\n if length == 14 and iota.hexToByte(data,2,'B') == 0x09 and moduleNo==modulenumber then\n local votage = iota.hexToShort(data,4,'B') \n out.data = { \n votage=votage\n }\n else\n errcode = 1005\n errmsg = 'Unknow Error,code is not right'\n out.result = {code=errcode,msg=errmsg}\n out.data = {}\n end \n elseif valCmd == 0x4a then --风速\n --AA01094a03EB0000000000000000\n --"windSpeed": 100.3\n if length == 14 and iota.hexToByte(data,2,'B') == 0x09 and moduleNo==modulenumber then\n local windSpeed = iota.hexToShort(data,4,'B') / 10.0\n out.data = { \n windSpeed=windSpeed\n }\n else\n errcode = 1005\n errmsg = 'Unknow Error,code is not right'\n out.result = {code=errcode,msg=errmsg}\n out.data = {}\n end\n elseif valCmd == 0x4b then ----风向\n --AA01094b03EB0000000000000000\n --"windDirection": 1.003\n if length == 14 and iota.hexToByte(data,2,'B') == 0x09 and moduleNo==modulenumber then\n local windDirection = iota.hexToShort(data,4,'B') / 1000.0\n out.data = { \n windDirection=windDirection\n }\n else\n errcode = 1005\n errmsg = 'Unknow Error,code is not right'\n out.result = {code=errcode,msg=errmsg}\n out.data = {}\n end\n end\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_acqUint_4001.lua",json.encode(out))\n ctx:notify(resultData)\n end\n\n --end\n --break\n --end \n --end\nend\n\nIsValid=function(data)\n if data == nil then\n return false\n end\n --iota.checkPlusSum16\n\n return true\n--crc\nend\n\nfunction split(s, delim)\n if type(delim) ~= "string" or string.len(delim) <= 0 then\n return\n end\n\n local start = 1\n local t = {}\n while true do\n local pos = string.find (s, delim, start, true) -- plain find\n if not pos then\n break\n end\n\n table.insert (t, string.sub (s, start, pos - 1))\n start = pos + string.len (delim)\n end\n table.insert (t, string.sub (s, start))\n\n return t\nend\n \nfunction roundOff(num, n)\n if n > 0 then\n local scale = math.pow(10, n-1)\n return math.floor(num / scale + 0.5) * scale\n elseif n < 0 then\n local scale = math.pow(10, n)\n return math.floor(num / scale + 0.5) * scale\n elseif n == 0 then\n return num\n end\nend\n INLINE 2017-08-24 16:07:17.577+08 2018-12-14 14:03:17.856+08 2017-08-22 \N
+80333e13-97f8-4502-b053-ab8fc9e0ebbc mingao_weather_1 \N 气象站 1.0 e09d681f-e39b-4915-8e87-af54bdd0e815 e09d681f-e39b-4915-8e87-af54bdd0e815 f e09d681f-e39b-4915-8e87-af54bdd0e815 Lua start=function()\n log.debug("mingao_weather_1.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n log.debug("mingao_weather_1.lua: Data=%s",hex)\n local out={\n data ={},\n result = {}\n }\n --52533B323031352D30312D30312030303A30303B31303135313233343B3130303B32303135313233343B34303B3130303B343B373B413B303B31363B613B313030302E3B423B303B32393B633B3138303B423B313B33303B683B31302E303B423B323B33313B613B352E303B433B303B393B633B302E30313B443B303B333B613B37322E303B443B313B353B613B32352E30303B323034320D0A\n\n\n local sData= toStrHex(hex)\n log.debug("mingao_weather_1.lua: sData=%s",sData)\n local spliteData = Split(sData,'\\t')\n local temperature = tonumber(spliteData[6])\n local CO2=tonumber(spliteData[3])\n local humidity = tonumber(spliteData[5])\n local radiation=tonumber(spliteData[4])\n local dewpoint=tonumber(spliteData[7])\n out.data = { \n temperature=temperature,\n humidity=humidity,\n radiation=radiation,\n CO2=CO2,\n dewpoint=dewpoint\n }\n\n local resultData =json.encode(out)\n log.debug("mingao_weather_1: cloudvibrate=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n INLINE 2018-07-04 14:55:48.523+08 2018-07-13 16:27:13.027+08 2018-07-04 \N
+fd174c97-b010-47ac-a9fb-9436756cac7f fs_tj_lf_station \N 0.1 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start=function()\n\tlog.debug("start fs_tj_lf_station device :%s",json.encode(device))\n\tlocal out={\n type = 2,\n data ={},\n result = {}\n }\n\tlocal req = {\n\t\ttype= "http",\n\t\turl= device.uplink.props.uri, --"http://data.linfeng-tech.com/restful/v1/business/runData", \n\t\tmethod="get",\n\t\tcontent="application/json",\n\t\theader={},\n\t}\n\n\tlocal authorization = getAuthorization()\n\tif authorization ~= nil and authorization ~="" then\n\t\treq.header["Authorization"] = authorization\n\t\tok,ack=ctx:ssend(req,4000)\n\t\tif ack.code==200 and ack.body ~="" then\n\t\t\tlog.debug("fs_tj_lf_station data= %s",ack.body)\n\t\t\tlocal datalist = json.decode(ack.body)\n\t\t\tfor index,data in pairs(datalist) do\n--\t\t\t\tlog.debug("fs_tj_lf_station subdata= %s",json.encode(data))\n\t\t\t\t\n\t\t\t\tlocal subdevice = getDevice(data.sn)\n \t\tif subdevice~=nil then\n\t\t\t\t --获取上次数据时间\n\t\t\t\t\tlocal r1,r1ok = redis.get(subdevice.id.."_endTime") --获取上次记录时间\n\t\t\t\t\tlog.debug("fs_tj_lf_station r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t\tif r1ok and r1~=nil then\n\t\t\t\t\t\tbeginTime=r1\n\t\t\t\t\t\tlog.debug("fs_tj_lf_station r1=%s,r1ok=%s,beginTime=%s",r1,r1ok,beginTime)\t\n\t\t\t\t\t\tlocal timenow=unixtimestamp(data.recordTime)\n\t\t\t\t\t\tendTime=timenum --当前数据时间戳 全局 timenum\n\t\t\t\t\t\tlog.debug("fs_tj_lf_station beginTime=%s,endTime=%s",beginTime,endTime)\n\t\t\t\t\t\tif endTime<=tonumber(beginTime) then\n\t\t\t\t\t\t\tlog.debug("fs_tj_lf_station 数据未刷新beginTime=%s,endTime=%s",beginTime,endTime)\n\t\t\t\t\t\t\tbreak\n else\n \t\tlog.debug("fs_tj_lf_station 数据刷新beginTime=%s,endTime=%s",beginTime,endTime)\n\t\t\t\t\t\tend\n\t\t\t\t\telse\n\t\t\t\t\t\tbeginTime=os.time()--第一次默认当前时间\n\t\t\t\t\t\tredis.set(subdevice.id.."_endTime", tostring(beginTime))\n\t\t\t\t\t\tlog.debug("fs_tj_lf_station r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t\tend\n-- \t\t\tlog.debug("fs_tj_lf_station subdevice= %s",json.encode(subdevice))\n \t\t\tlocal subdata = {\n\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\trotationAngle=tonumber(string.format('%0.2f',data.rotationAngle)),\n\t\t\t\t\t\t\tallRotationAngle=tonumber(string.format('%0.2f',data.allRotationAngle)),\n\t\t\t\t\t\t\tradius=tonumber(string.format('%0.2f',data.radius)),\n\t\t\t\t\t\t\theight=tonumber(string.format('%0.2f',data.height)),\n\t\t\t\t\t\t\televationAngle=tonumber(string.format('%0.2f',data.elevationAngle)),\n\t\t\t\t\t\t\tloadValue=tonumber(string.format('%0.2f',data.loadValue)),\n\t\t\t\t\t\t\tsafeLoad=tonumber(string.format('%0.2f',data.safeLoad)),\n\t\t\t\t\t\t\ttorquePercent=tonumber(string.format('%0.2f',data.torquePercent)),\n\t\t\t\t\t\t\twindSpeed=tonumber(string.format('%0.2f',data.windSpeed)),\n\t\t\t\t\t\t\tobliquity=tonumber(string.format('%0.2f',data.obliquity)),\n\t\t\t\t\t\t\tdirectionAngle=tonumber(string.format('%0.2f',data.directionAngle)),\n\t\t\t\t\t\t\tstringFactor=data.stringFactor,\n\t\t\t\t\t\t\tpowerQuantity=data.powerQuantity,\n\t\t\t\t\t\t\tinputState=data.inputState,\n\t\t\t\t\t\t\twarning=data.warning,\n\t\t\t\t\t\t\talarm=data.alarm,\n\t\t\t\t\t\t\tpeccancy=data.peccancy,\n\t\t\t\t\t\t\tcontrolState=data.controlState\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttime=timenow,--unixtimestamp(data.recordTime),\n\t\t\t\t\t\ttype=1\n\t\t\t\t\t}\n\t\t\t\t\ttable.insert(out.data,subdata)\n\t\t\t\t\t--更新endTime\n\t\t\t\t\tif endTime>tonumber(beginTime) then\n\t\t\t\t\t\tif redis.set(device.id.."_endTime", tostring(endTime)) then\n\t\t\t\t\t\t\tlog.debug("fs_tj_lf_station redis更新 set lasttime ok key=%s,value=%s",subdevice.id.."_endTime",tostring(endTime))\n\t\t\t\t\t\tend\t\n\t\t\t\t\telse\n\t\t\t\t\t\tlog.debug("fs_tj_lf_station redis不更新 ")\n\t\t\t\t\tend\n \t\telse\n \t\t\tlog.debug("fs_tj_lf_station not found subdevice= %s",data.sn)\n \t\tend\n\t\t\tend\n\t\telse\n\t\t\tlog.warn("fs_tj_lf_station get data failure")\n\t\t\tout.result={\n\t\t\t\tcode=1002,\n\t\t\t\tmsg="timeout",\n\t\t\t}\n\t\tend\t\t\n\telse\n\t\tlog.warn("fs_tj_lf_station 塔机接口认证失败")\n\t\tout.result={\n\t\t\tcode=1002,\n\t\t\tmsg="timeout",\n\t\t}\n\tend\n \tlog.debug("fs_tj_lf_station out.data= %s",json.encode(out))\n\tctx:done(json.encode(out))\nend\n\n\n\n\n\ngetAuthorization =function()\n log.debug("fs_tj_lf_station get authorization ")\n\tlocal authreq = {\n\t\ttype= "http",\n\t\turl=device.uplink.props.uri, \n\t\tmethod="get",\n\t\tcontent="application/json",\n\t\theader={},\n\t}\n-- log.debug("fs_tj_lf_station req url= %s",authreq.url)\n\tlocal authOk,authAck=ctx:ssend(authreq,4000)\n \tlog.debug("fs_tj_lf_station authOk= %s,authAck=%s",authOk,json.encode(authAck))\n--\tlog.debug("fs_tj_lf_station Authenticate= %s",authAck.header["Www-Authenticate"])\n\tlocal str =authAck.header["Www-Authenticate"]\n\tstr = string.gsub(str, "%[Digest ", "{")\n\tstr = string.gsub(str, "%]", "}")\n\tstr = string.gsub(str, "%realm=", "\\"realm\\":")\n\tstr = string.gsub(str, "%qop=", "\\"qop\\":")\n\tstr = string.gsub(str, "%nonce=", "\\"nonce\\":")\n--\tlog.debug("fs_tj_lf_station str= %s",str)\n\tlocal obj = json.decode(str)\n \tlocal qop = obj["qop"]\n\tlocal realm = obj["realm"]\n\tlocal nonce = obj["nonce"]\n\t \n\tlocal user=device.uplink.props.username\n\tlocal passwd=device.uplink.props.password\n\tlocal a1 = user..":"..realm..":"..passwd\n\ta1 = crypto.md5(a1)\n\tlocal a2 = "GET:".."/restful/v1/business/runData"\n\ta2 = crypto.md5(a2)\n\t\n\tlocal response =a1 .. ":"..nonce .. ":::" .. qop .. ":" .. a2\n\tresponse = crypto.md5(response)\n--\tlog.debug("fs_tj_lf_station md5(response)= %s",response)\n\tlocal auth = {\n\t\tusername=user,\n\t\trealm=realm,\n\t\tnonce=nonce,\n\t\turi="/restful/v1/business/runData",\n\t\tqop=qop,\n\t\tnc="",\n\t\tcnonce="",\n\t\tresponse=response, \n\t\topaque=""\n }\n--\tlog.debug("fs_tj_lf_station auth= %s",json.encode(auth))\n\tlocal authstr = json.encode(auth)\n\tauthstr = string.gsub(authstr, "%:", "=")\n\tauthstr = string.gsub(authstr, "%\\"cnonce\\"", "cnonce")\n\tauthstr = string.gsub(authstr, "%\\"nc\\"", "nc")\n\tauthstr = string.gsub(authstr, "%\\"nonce\\"", "nonce")\n\tauthstr = string.gsub(authstr, "%\\"opaque\\"", "opaque")\n\tauthstr = string.gsub(authstr, "%\\"qop\\"", "qop")\n\tauthstr = string.gsub(authstr, "%\\"auth\\"", "auth")\n\tauthstr = string.gsub(authstr, "%\\"realm\\"", "realm")\n\tauthstr = string.gsub(authstr, "%\\"response\\"", "response")\n\tauthstr = string.gsub(authstr, "%\\"uri\\"", "uri")\n\tauthstr = string.gsub(authstr, "%\\"username\\"", "username")\n\tauthstr = string.gsub(authstr, "%{", "")\n\tauthstr = string.gsub(authstr, "%}", "")\n\tauthstr = "Digest " .. authstr \n\tlog.debug("fs_tj_lf_station authstr= %s",authstr)\n\n\treturn authstr\nend\n\ngetDevice = function(moduleId)\n\t\n\tlocal subdevices=device.dnlinks[1].devices \n\tfor index,child in pairs(subdevices) do \n\t\tif child.uplink.props.module == moduleId then\n\t\tlog.debug("fs_tj_lf_station found the device %s,[%s]",moduleId,child.uplink.props.module)\n \treturn child\n\t\telse\n\t\tlog.debug("fs_tj_lf_station not found the device %s,[%s]",moduleId,child.uplink.props.module)\n\t\tend\n\tend\n\tlog.debug("fs_tj_lf_station not found the device %s,[%s]",moduleId)\n\treturn nil\nend\n\n --string split函数\nSplit=function(szFullString, szSeparator)\n\tlocal nFindStartIndex = 1\n\tlocal nSplitIndex = 1\n\tlocal nSplitArray = {}\n\twhile true do\n\t local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n\t if not nFindLastIndex then\n\t\t nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n\t\t break\n\t end\n\t nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n\t nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n\t nSplitIndex = nSplitIndex + 1\n\tend\n\treturn nSplitArray\nend\n\nunixtimestamp=function(datestr)\n -- 2018-4-28 16:10:12\n\t--log.debug("fs_tj_lf_station datestr=%s",datestr)\n local datelist = Split(datestr, " ");\n local date = Split(datelist[1], "-");\n local time = Split(datelist[2], ":");\n local year = tonumber(date[1]);\n\tlocal month = tonumber(date[2]);\n\tlocal day = tonumber(date[3]);\n local hour = tonumber(time[1]);\n local minute = tonumber(time[2]);\n local second = tonumber(time[3]);\n --log.debug("fs_tj_lf_station year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\tlog.debug("fs_tj_lf_station recordTime=%s",recordTime)\n\treturn recordTime\nend INLINE 2018-07-26 17:27:53.256+08 2019-04-09 16:56:19.183+08 2018-07-26 \N
+8f9e2bf6-e76c-4794-b3f0-1af76a216b60 jm_lvdt_1553 \N 13字节带温度--总线型位移计指令表--金马静力水准仪协议 传感器单独使用 1.0 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c f 5b2dc320-50f8-4461-87fc-03b66e3e5e4c Lua --//04 项目资料/2017-12/总线型位移计指令表--金马静力水准仪协议.pdf \n--老版本协议 数据9个字节 新版本13个 加了4个字节的温度 本协议是老版本\nstart=function()\n log.debug("start %s, moduleId=%s", "jm_lvdt_1553.lua",device.props.moduleId or 'nil')\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0x23, endian) \n buff=iota.appendHexByte(buff, 0x2b, endian) \n\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jm_lvdt_1553 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jm_lvdt_1553 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\n\t\n if string.len(moduleNo)<6 then\n local strlen=6-string.len(moduleNo)\n \tfor i=1,strlen do\n moduleNo='0'..moduleNo\n end \n end\n buff= buff..toHexStr(string.sub(moduleNo,1,1)) \n\tbuff= buff..toHexStr(string.sub(moduleNo,2,2))\n\tbuff= buff..toHexStr(string.sub(moduleNo,3,3))\n\tbuff= buff..toHexStr(string.sub(moduleNo,4,4))\n\tbuff= buff..toHexStr(string.sub(moduleNo,5,5))\n\tbuff= buff..toHexStr(string.sub(moduleNo,6,6))\n log.debug("jm_lvdt_1553 moduleId=%s send: %s",moduleNo or 'nil',buff)\n ok,resp=ctx:asend(buff)\n -- local result="{}"\n -- if ok then\n -- result = unmarshall(resp)\n -- end\n -- ctx:done(result)\nend\nlocal buff_response="" --缓存\nonData=function(hex)\n\tlocal result="{}"\n\tresult = unmarshall(hex)\n log.debug("jm_lvdt_1553 buff_response=%s",buff_response)\n log.debug("jm_lvdt_1553 结果out=%s",result)\n if string.len(buff_response)/2 ~=13 then\n \tlog.debug("jm_lvdt_1553 数据 不完整 不解析 buff_response=%s",buff_response)\n\t\t--ctx:notify(result)\t\n else\n log.debug("jm_lvdt_1553 数据完整退出解析 buff_response=%s",buff_response)\n ctx:done(result)\n end\nend \n\n\nunmarshall=function(hex)\n --24596148594963486 349634850 moduleId=1\n --"level":1095.05,\n --"temp": 10644.7\n\tbuff_response=buff_response..hex\n log.debug("jm_lvdt_1553 moduleId=%s recv: %s 缓存数据=%s",device.props.moduleId or 'nil',hex,buff_response)\n --log.debug("jm1550收到数据:"..hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex)\n if ErrorCode then \n \n\t\tlocal level\n\t\tlocal level0\n\t\tlocal temp\n\t\tif string.len(buff_response)/2==13 then\t\n hex=buff_response\n \t\t\tlog.debug("jm_lvdt_1553 解析数据hex=%s",hex)\n\t\t\t\tlevel=((tonumber(string.sub(hex,3,4),16)-48)*16+(tonumber(string.sub(hex,5,6),16)-48)+(tonumber(string.sub(hex,7,8),16)-48)*16*16*16+(tonumber(string.sub(hex,9,10),16)-48)*16*16)/100\n\t\t\t\tlevel0=((tonumber(string.sub(hex,11,12),16)-48)*16+(tonumber(string.sub(hex,13,14),16)-48)+(tonumber(string.sub(hex,15,16),16)-48)*16*16*16+(tonumber(string.sub(hex,17,18),16)-48)*16*16)/100\t\n\t\t\t\ttemp=((tonumber(string.sub(hex,19,20),16)-48)*16+(tonumber(string.sub(hex,21,22),16)-48)+(tonumber(string.sub(hex,23,24),16)-48)*16*16*16+(tonumber(string.sub(hex,25,26),16)-48)*16*16-500)/10\n\t\t\t log.debug("jm_lvdt_1553 结果level=%s,level0=%s,temp=%s",level,level0,temp)\n\t\t\t\n\t\t out.data = {\n\t\t\tlevel=level,\n\t\t\tlevel0=level0,\n\t\t\ttemp=temp\n\t\t }\n\t\tend\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data)\n\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleCheck=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jm_lvdt_1553 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleCheck=device.props.moduleId\t\t\n\t\tlog.debug("jm_lvdt_1553 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\n log.debug('jm_lvdt_1553 开始校验数据%s',data)\n \n if string.len(data)/2==13 then\n \treturn true\n end\n if data == nil or (string.len(data)/2 ~=9 and string.len(data)/2 ~=4 ) then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n log.debug('jm_lvdt_1553 模块%s 校验失败 data=%s',moduleCheck ,data)\n return false\n end\n\tlog.debug('jm_lvdt_1553 CMD=%s',iota.hexToByte(data,0,'B'))\n\tif string.len(data)/2 ==9 then\n\t\tif iota.hexToByte(data,0,'B') ~= 0x24 then\n\t\t\terrcode = 1001\n\t\t\terrormsg = 'Hex CMD False ' \n\t\t\treturn false\n\t\tend\n\tend\n\n log.debug('jm_lvdt_1553 数据校验通过')\n return true\n--crc\nend\n\n -- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2018-02-07 09:10:35.192+08 2018-11-13 14:21:35.432+08 2018-02-07 \N
+9e3473be-51a7-4bba-917b-2a7813354caa njgy_jlsz \N 1.0 55ecba2d-f3da-4ebb-b58d-7cc16522faad 55ecba2d-f3da-4ebb-b58d-7cc16522faad f 55ecba2d-f3da-4ebb-b58d-7cc16522faad Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "njgye_yb.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\n \n buff=iota.appendHexWord(buff, 0x01, endian)\n\tbuff=iota.appendHexByte(buff, 0x0e, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x01, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0x02, endian)\n\t\t\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\t\t\t\tbuff=iota.appendHexByte(buff, 0x08, endian)\n buff=iota.appendHexWord(buff, 0, endian) -- 2: 类型=1\n buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 3: 模块号\n buff=iota.appendHexWord(buff, 0, endian) \n buff=iota.appendHexWord(buff, 0, endian) \t-- 4: 指令: 0x01 = 采集\n \tlocal lcr_str = CS(buff) -- 5: CRC\n\t\tbuff=iota.appendHexWord(buff, lcr_str, endian) \t-- 4: 指令: 0x01 = 采集\n\t\tbuff='4654' .. buff\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,4000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==38) then\n\t\tlocal symbol=string.sub(hex,27,28)\n local length1= tonumber(string.sub(hex,29,32))\n\t\tlocal length2= tonumber(string.sub(hex,33,33))/10\n\t\tlocal length3= tonumber(string.sub(hex,34,34))/100\n local length= length1+length2+length3\n\t\tif symbol=='00' then\n\t\t length=length\n\t\telseif symbol=='01' then\n\t\t\n\t\t\tlength=-1*length\n\t\tend\n out.data = {\n length\t=length\t \n \n }\n \n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nCS=function(buff)\n local lcr = 0\n for i = 0, string.len(buff)/2-1 do\n lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n end\n\tlog.debug("xmlg_1 lcr是:%s",lcr)\n\tlocal value=bit.band(lcr,0xff)\t\t\n return value\nend \n \n\n INLINE 2020-10-19 14:46:07.91+08 2020-10-30 10:30:05.272+08 2020-10-19 \N
+3c239466-6ce0-435b-869e-715dc10c3c69 fzmas_micro_yx \N 复制的工训的 1.0 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f 67c8b9e9-38d6-4c9a-8772-9c96d78121ed Lua start=function()\n --log.debug("fzmas_micro_yx : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n log.debug("fzmas_micro_yx : devices network =%s", json.encode(device))\n if data ~=nil then\n log.debug("fzmas_micro_yx devices data =%s",data)\n ParseData(data) \n else\n log.error("fzmas_micro_yx recvd content is nil")\n end\nend\n\n\nfunction ParseData(data)\n local out={\n data ={},\n result = {},\n type=2\n }\n if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then --振动数据\n --log.debug("fzmas_micro_yx 振动数据 data =%s",data)\n local package=iota.hexToShort(data,8,'L')\n local packagecount=iota.hexToShort(data,10,'L')\n local datpackage=string.sub(data,41,-9)\n local moduleid=iota.hexToShort(data,16,'L')\n\n local req1 =''\n local req2 =''\n local req =''\n req1=iota.appendHexByte(req1, 01 , 'L') -- 0-3 压缩协议 4-7 协议版本\n req1=iota.appendHexByte(req1, 0x02 , 'L')\n req1=iota.appendHexWord(req1, 0x0007 , 'L')\n req1=iota.appendHexWord(req1, 0x0000 , 'L')\n \n req2=iota.appendHexWord(req2, package , 'L')\n req2=iota.appendHexWord(req2, packagecount , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, moduleid , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n local checkdat=req1..req2\n local checksum=HeadCheckSum(checkdat)\n req=req1\n req=iota.appendHexWord(req, checksum , 'L')\n req=req..req2\n req=iota.appendHexWord(req, package , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=req..'00000000'\n req=iota.appendHexCrc(req, 'L' ,0) --校验\n local crc16=string.sub(req,-4,-1)\n req=string.sub(req,1,-13)\n req=req..crc16\n req=iota.appendHexByte(req, 0 , 'L') \n req=iota.appendHexByte(req, 0xfa , 'L') \n --log.debug("fzmas_micro_yx datfileback %s", req)\n ctx:asend(req, 20000)\n\n if package==packagecount then\n local r1,ok = redis.get(device.id.."_mpzd")\n --log.debug("fzmas_micro_yx 解析dat r1= %s", r1)\n ParseFileDat(r1)\n else\n if package==1 then\n local firstpackage=string.sub(datpackage,-80,-1)\n redis.set(device.id.."_mpzd", firstpackage)\n --log.debug("fzmas_micro_yx 接收dat datpackage= %s", firstpackage)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据首包'\n }\n }\n ctx:notify(json.encode(re))\n else\n local r1,ok = redis.get(device.id.."_mpzd")\n --log.debug("fzmas_micro_yx 接收dat r1= %s package=%s", r1,package)\n local data=r1..datpackage\n redis.set(device.id.."_mpzd", data)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n end\n else \n\t \n\t -- 非振动数据\n if string.sub(data,13,16)=='8a00' then\n local rtumodule=iota.hexToShort(data,3,'B')\n local power = iota.hexToByte(data,13,'B')\n log.debug("fzmas_micro_yx 剩余电量 %s", power)\n\t\t\tlocal setting = iota.hexToByte(data,14,'B')\n\t\t\tlog.debug("fzmas_micro_yx 通道配置版本号 %s", setting)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\tlog.debug("fzmas_micro_yx 版本固件 %s", ver)\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\n\t\t\tlocal version = string.format("%0.2f",ver)\n\t\t\tlocal v = Split(version,'.')\n\t\t\tlocal vlen = v[2].length\n\t\t \n\t\t\tif vlen == 1 then\n\t\t\t version = version.."0"\n\t\t\telseif vlen == 0 then\n\t\t\t version = version..".00"\n\t\t\tend\n\t\t\t--log.debug('fs_microPower_1 version=%s', version)\t\t\t\n\t\t\tredis.set(device.id.."_version", version)\t\t\t\n\n local strdevice= toHexStr(json.encode(device))\n strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n local crc=string.sub(strdevice,-4,-1)\n --log.debug("fzmas_micro_yx devices crc =%s",crc)\n local r1,ok = redis.get(device.id.."_mpset")\n if ok and r1~=nil then\n\t\t\t -- log.debug("fzmas_micro_yx crc %s r1 %s setting%s" ,crc,r1,setting)\n \t\t--log.debug("fzmas_micro_yx dtuid: %s Day:%s H:%s , M:%s",device.uplink.props.id,tostring(os.date("%d")),tostring(os.date("%H")),tostring(os.date("%M")))\n if crc == r1 and setting ~= 0xFF then\n log.debug("fzmas_micro_yx 配置无修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 0, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fzmas_micro_yx 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置无修改'\n }\n }\n ctx:notify(json.encode(re))\n else\n log.debug("fzmas_micro_yx 配置有修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fzmas_micro_yx 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n else\n log.debug("fzmas_micro_yx 配置初次配置")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fzmas_micro_yx 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n end\n \n if string.sub(data,13,16)=='8a02' then\n log.debug("fzmas_micro_yx 设备休眠")\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '设备休眠'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n local rtumodule=iota.hexToShort(data,3,'B')\n if string.sub(data,13,16)=='8601' then\n local time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\tlog.debug("fzmas_micro_yx r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver=r1\n\t\t\t\t--log.debug("fzmas_micro_yx r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\t--log.debug("fzmas_micro_yx powerstr=%s",powerstr)\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} \n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time \n\t\t\t}\n\t\t\ttable.insert(out.data,rst)\n local isover=iota.hexToByte(data,25,'B') --尾包\n local datalength=0\n local firststart=27\n for i=1,sensorCount,1 do\n\t\t\t\t--log.debug("fzmas_micro_yx XDATA=%s",string.sub(data,firststart,firststart+datalength))\n firststart=firststart+datalength\t\t\t\t\n local sensorType=iota.hexToByte(data,firststart,'B')\n local module=iota.hexToShort(data,firststart+3,'B')\n local channel=iota.hexToByte(data,firststart+2,'B')\n datalength=iota.hexToByte(data,firststart+1,'B')+6\n if sensorType==0 then --振弦\n local childDevice=getZxDeviceInfo(module,channel)\n\t\t\t\t\t--log.debug("fzmas_micro_yx 振弦 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal Phy=0\n\t\t\t\t\t\tlocal k = childDevice.uplink.props.k or 0\n\t\t\t\t\t\tlocal kt = childDevice.uplink.props.kt or 0\t\t\t\t\t\t\n\t\t\t\t\t\tlocal f0 = childDevice.uplink.props.f0 or 0\n\t\t\t\t\t\tlocal t0 = childDevice.uplink.props.t0 or 0\t\t\n\t\t\t\t\t\tlocal status = iota.hexToByte(data,firststart+11,'B')\n\t\t\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\t\t\tlocal freq = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\tlocal temp = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t--log.debug("fzmas_micro_yx 振弦 Phy =%s, deviceid %s", Phy,childDevice.id)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\tam = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B'),\n\t\t\t\t\t\t\t\tphysicalvalue = Phy\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\t\tif status == 1 then\n\t\t\t\t\t\t\trst.result = {code=30010022,msg="频率线断路"}\n \t\t\t\trst.data = {}\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif status == 2 then\n\t\t\t\t\t\t\trst.result = {code=30010023,msg="频率线短路"}\n \t\t\t\trst.data = {}\n\t\t\t\t\t\tend\t\t\t\t\t\t\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t--log.debug("fzmas_micro_yx 振弦11111111 %s", json.encode(out))\n\t\t\t\t\tend\n end\n if sensorType==1 then --485\n local childDevice=getDeviceInfo(module,channel)\n \t\t\tlocal protocalCode=iota.hexToShort(data,firststart+6,'B')\n\t\t\t\t\tif childDevice~=nil then\t\n\t\t\t\t\t\tif protocalCode==1503 or protocalCode==1502 then --测斜\n\t\t\t\t\t\t--log.debug("fzmas_micro_yx 测斜 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tangley = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fzmas_micro_yx 测斜 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n \n if protocalCode==9102 then --裂缝\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fzmas_micro_yx 裂缝 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fzmas_micro_yx 裂缝 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==9218 then --风速\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 风速 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tspeed = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 风速 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n\t\t\t\t\tif protocalCode==9219 then --风向\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 风向 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tdirection = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 风向 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==1102 then --温湿度\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\thumidity = iota.hexToFloat(data,firststart+16,'B') \n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n end\n \n if protocalCode==9002 then --压差\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n end\n\t\t\t\t\tif protocalCode==9030 then --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t\t--log.debug("fzmas_micro_yx 静力水准仪 %s, deviceid: %s", module,childDevice.id)\n\t\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fzmas_micro_yx 静力水准仪 %s", json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509 then --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992 then --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fzmas_micro_yx 水位 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\t--temperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\tpressure=iota.hexToFloat(data,firststart+12,'B')--兼容老设备\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fzmas_micro_yx 水位 %s", json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\t\t\n end\n\t\t\t\t--log.debug("fzmas_micro_yx dataresult %s", json.encode(out))\n end \n --log.debug("fzmas_micro_yx out %s", json.encode(out))\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0601, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0000, 'B') --数据区长度\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n --log.debug("fzmas_micro_yx: databack: %s", req)\n ctx:asend(req, 20000)\n ctx:notify(json.encode(out)) \n end\n end\nend\n\nfunction Deploy()\n local total=totalSensors()\n --log.debug("fzmas_micro_yx : totalSensors =%s",total)\n local over=0\n local onepag=0\n local totallength=3\n local buff=''\n \n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n over=over+1\n onepag=onepag+1\n\t\t\t--log.debug("fzmas_micro_yx subdevice =%s",json.encode(subdevice))\n if subdevice.props.sensortype=='zx' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x00, 'B') --传感器类型\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n\n local settingvib = tonumber(colgain) + tonumber(incentive) * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n --log.debug("fzmas_micro_yx : settingvib =%s",settingvib)\n buff=iota.appendHexByte(buff, settingvib, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexByte(buff, settingvib, 'B') --振弦采集参数\n buff=iota.appendHexWord(buff, subdevice.uplink.props.frequency, 'B') --振弦频率初值\n buff=iota.appendHexByte(buff, 0x00, 'B') --上传频谱ID\n buff=iota.appendHexByte(buff, 0x01, 'B') --采集选项\n end \n if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x01, 'B') --传感器类型\n\t\t\t\t--log.debug("fzmas_micro_yx : begin setting")\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\t--log.debug("fzmas_micro_yx baudrate =%s databits %s parity %s stopbits ",baudrate,databits,parity,stopbits)\n\t\t\t\tlocal setting\n\t\t\t\tif baudrate == nil then\n\t\t\t\t\tsetting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n\t\t\t\telse\n setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n\t\t\t\tend\n log.debug("fzmas_micro_yx setting =%s",setting)\n buff=iota.appendHexByte(buff, setting, 'B') --选项1 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B') --协议号\n buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B') --模块号\n buff=iota.appendHexByte(buff, 0x01, 'B') --子通道号\n end\n if subdevice.props.sensortype =='zd' then \n totallength=totallength+31 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x04, 'B') --传感器类型\n buff=iota.appendHexByte(buff, 0x00, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x12, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B') --定时采样间隔\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B') --定时采样时长\n buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B') --加速度触发采样时长\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B') --采样频率\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B') --滤波频率\n\n buff=iota.appendHexWord(buff, 0x42c8, 'B')\n buff=iota.appendHexWord(buff, 0x0000, 'B')\n buff=iota.appendHexWord(buff, 0x4248, 'B')\n buff=iota.appendHexWord(buff, 0x0000, 'B')\n local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n buff=iota.appendHexByte(buff, trigger1, 'B') --触发加速度\n buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B') --加速度范围\n buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B') --滞后点数\n\n end\n if over==8 or onepag==total then \n local buffhead=''\n buffhead=iota.appendHexByte(buffhead, 0xfe, 'B') --帧头\n buffhead=iota.appendHexWord(buffhead, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B') --模块号\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --命令源\n buffhead=iota.appendHexWord(buffhead, 0x0306, 'B') --指令\n buffhead=iota.appendHexWord(buffhead, 0x0000, 'B') --消息ID\n buffhead=iota.appendHexWord(buffhead, totallength, 'B') --数据区长度\n if onepag==total then\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --尾包\n else\n buffhead=iota.appendHexByte(buffhead, 0x00, 'B') --尾包\n end\n buffhead=iota.appendHexByte(buffhead, total, 'B') --采集指令总通道指令个数\n buffhead=iota.appendHexByte(buffhead, over, 'B') --该分包通道指令个数\n buff=buffhead..buff\n buff=iota.appendHexCrc(buff, endian ,0) --校验\n buff=iota.appendHexByte(buff, 0xef, 'B') --帧尾\n\t\t\t\t--log.debug("fzmas_micro_yx ssend request =%s",ack)\n local ok, ack = ctx:ssend(buff, 20000)\n --log.debug("fzmas_micro_yx deploy back =%s",ack)\n buff=''\n if over==8 then\n over=0\n end\n totallength=3\n if onepag==total then\n log.debug("fzmas_micro_yx 配置下发完成")\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置下发完成'\n }\n }\n ctx:notify(json.encode(re))\n end\n end \n end\n end \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n --log.debug("fzmas_micro_yx has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug("fzmas_micro_yx has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n --log.debug("fzmas_micro_yx has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug("fzmas_micro_yx has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n --log.debug("fzmas_micro_yx dat content =%s", dathex)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n --log.debug("fzmas_micro_yx deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n local floatcount = (string.len(dathex)/2-40)/4\n --log.debug("fzmas_micro_yx begin parse")\n local vols = {}\n\t\tlocal mean = 0\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n --log.debug("fzmas_micro_yx finish parse")\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n sampleFreq=samplefreq,\n filterFreq=filterfreq,\n gainAmplifier=gainamplifier,\n triggerType=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n }\n table.insert(out.data,rst)\n \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\tlog.debug("fzmas_micro_yx r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver=r1\n\t\t\tlog.debug("fzmas_micro_yx r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("fzmas_micro_yx powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t} \n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time \n\t\t}\n\t\ttable.insert(out.data,rstd)\n\t\t--log.debug("fzmas_micro_yx cloudvibrate=%s",json.encode(out))\n ctx:notify(json.encode(out))\n else\n --log.debug("fzmas_micro_yx not found device module=%s channel=%s",deviceId,channel)\n end\nend\n\nfunction totalSensors()\n local sensorcnt=0\n for i,dnlink in pairs(device.dnlinks) do \n sensorcnt = #(dnlink.devices) + sensorcnt \n end\n return sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend \n\nfunction HeadCheckSum(data)\n local sum=0\n local len = string.len(data)\n --log.debug("fzmas_micro_yx len %s", len)\n for i =1,len,4 do \n local te=tonumber(string.sub(data,i,i+3) ,16)\n log.debug("fzmas_micro_yx te %s", te)\n sum = sum+ tonumber(te)\n end\n --log.debug("fzmas_micro_yx sum %s", sum)\n return 0xffff-sum\nend\n\n INLINE 2019-11-08 16:17:49.654+08 2020-08-05 09:44:50.417+08 2019-11-08 \N
+a0ce411d-4370-4a33-88dc-7a51846cf38f XP-PM \N 1.0 ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c f ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c Lua \nstart=function()\n\n\tlocal token='1v80m71c77803be222aca35264846'\n\n\t --请求数据\n\tlocal datareq = {\n\t\t\t\ttype= "http",\n\t\t\t\turl='', --https://www.loraflow.io/v1/application/data?appeui=04a64f007b4cc75f&deveui=6a59781dc3f8d57d&token=1v80m71c77803be222aca35264846&order=desc\n\t\t\t\tmethod="get",\n\t\t\t\theader={}\n\t\t\t}\n\tlocal deveui\n\tout={\n\t\ttype = 2,\n\t\tdata ={},\n\t\tresult = {}\n\t}\n\tfor i,link in pairs(device.dnlinks) do\n\t\tfor j,subdevice in pairs(link.devices) do\n\t\t\tlocal deveui=subdevice.uplink.props.module\n\t\t\tdatareq.url="https://www.loraflow.io/v1/application/data".."?appeui="..'04a64f007b4cc75f'.."&deveui="..deveui.."&token="..token.."&order=desc"\n\t\t\tlog.debug("xinpu: data url=%s",datareq.url)\n\t\t\t--log.debug("设备原型="..json.encode(device))\n\t\t\n\t\t\t\t\n\t\t\t --get发送\n\t\t\tlocal dataok,dataack=ctx:ssend(datareq,4000)\n\n\t\t\tDataParse(dataok,dataack)\n\t\tend\n\tend\n\t\n\tlog.debug("xinpu out=%s ",json.encode(out))\n\tctx:done(json.encode(out))\nend\n \nDataParse=function(dataok,dataack)\n\tif not dataok or dataack==nil then\n\t\t\tout.result={\n\t\t\tcode=1002,\n\t\t\tmsg="timeout"\n\t\t\t}\n\t\telse --OK\n\t\t\tif dataack.code==200 and dataack.body ~="" then -- http应答\n\t\t\t\talldataTable=json.decode(dataack.body) -- 有数据\n\t\t\t\t\t\n\t\t\t\tlocal rt_data=alldataTable.list\t\t\t\t\t\t\n\t\t\t\tlog.debug("xinpudata=%s",dataack.body)\t\n\t\t\t\t--遍历节点数据\n\t\t\t\tfor k,v in ipairs(rt_data) do\t\t\t\t \n\t\t\t\t\t--log.debug("xinpu k=%s, value=%s",k,json.encode(v))\t\n\t\t\t\t\tlocal moduleId=v.deveui\n\t\t\t\t\tlocal timess=v["$time"]\t\t\t\n\t\t\t\t\tlocal r1,r1ok = redis.get(device.id..moduleId.."_endTime") --获取上次记录时间\n\t\t\t\t\t--log.debug("xinpu r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t\tlocal beginTime\n\t\t\t\t\tif r1ok and r1~=nil then\n\t\t\t\t\t\tbeginTime=r1\n\t\t\t\t\t\tlog.debug("xinpu r1=%s,r1ok=%s,beginTime=%s",r1,r1ok,beginTime)\t\t\t\t\n\t\t\t\t\telse\n\t\t\t\t\t\tbeginTime=os.time()--第一次默认当前时间\n\t\t\t\t\t\tredis.set(device.id..moduleId.."_endTime", tostring(beginTime))\n\t\t\t\t\t\tlog.debug("xinpu r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t\tend\n\t\n\t\t\t\t\tlocal endTime=tonumber(timess) --全局\n\t\t\t\t\tlocal timedata = unixtimestamp(endTime)\n\t\t\t\t\tif endTime<=tonumber(beginTime) then\n\t\t\t\t\t\tlog.debug("xinpu m=%s 数据未刷新beginTime=%s,endTime=%s",moduleId,beginTime,endTime)\n\t\n\t\t\t\t\telse\n\t\t\t\t\t\tlog.debug("xinpu m=%s 数据刷新beginTime=%s,endTime=%s",moduleId,beginTime,endTime)\n\t\t\t\t\t\n\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\tlog.debug("xinpu childDevice=%s",moduleId)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleId) \n\t\t\t\t\t\tif string.len(v.data)/2 == 28 then\n\t\t\t\t\t\t\tlocal pm1 = iota.hexToShort(v.data, 6, 'B') \n\t\t\t\t\t\t\tlocal pm25 = iota.hexToShort(v.data, 15, 'B') \n\t\t\t\t\t\t\tlocal pm10 = iota.hexToShort(v.data, 24, 'B') \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\t\tpm1=pm1,\n\t\t\t\t\t\t\t\t\t\t\t\tpm25=pm25,\n\t\t\t\t\t\t\t\t\t\t\t\tpm10=pm10\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\ttime=timedata, \n\t\t\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t\t\t}; \n\t\t\t\t\t\t\tlog.debug("xinpu pm data1 =%s",json.encode(data1)) \n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\telseif string.len(v.data)/2 == 4 then\n\t\t\t\t\t\t\tlocal temp = iota.hexToShort(v.data, 0, 'L') \n\t\t\t\t\t\t\tlocal humdity = iota.hexToShort(v.data, 2, 'L') \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\t\ttemp=temp/100,\n\t\t\t\t\t\t\t\t\t\t\t\thumdity=humdity/100\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\ttime=timedata, \n\t\t\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t\t\t}; \n\t\t\t\t\t\t\tlog.debug("xinpu temp data1 =%s",json.encode(data1)) \n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\telseif string.len(v.data)/2 == 5 then\n\t\t\t\t\t\t\tlocal direction = iota.hexToShort(v.data, 1, 'B') \n\t\t\t\t\t\t\tlocal speed = iota.hexToShort(v.data, 3, 'B') \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\t\tdirection=direction/10,\n\t\t\t\t\t\t\t\t\t\t\t\tspeed=speed\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\ttime=timedata, \n\t\t\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t\t\t}; \n\t\t\t\t\t\t\tlog.debug("xinpu wind data1 =%s",json.encode(data1))\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\t\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\n\t\n\t\t\t\t\t--更新endTime\n\t\t\t\t\tif endTime>tonumber(beginTime) then\n\t\t\t\t\t\tif redis.set(device.id..moduleId.."_endTime", tostring(endTime)) then\n\t\t\t\t\t\t\tlog.debug("xinpu redis更新 set lasttime ok key=%s,value=%s",device.id.."_endTime",tostring(endTime))\n\t\t\t\t\t\tend\t\n\t\t\t\t\telse\n\t\t\t\t\t\tlog.debug("xinpu redis不更新 ")\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\tend\n\t\t\t\t\n\t\t\telse\n\t\t\t\tlog.debug("xinpu: request data error:%s body:%s",dataack.code,dataack.body) \n\t\t\tend\n\t\tend\t\nend\n\n\nSleep=function(n)\n local t0 = os.clock()\n while os.clock() - t0 <= n do end\nend\n\n\n--获取采集仪下面的通道信息\nfunction getDeviceInfo(moduleid)\n \t--log.debug("xinpu: 查询 传感器ID: moduleid=%s,channel=%s", moduleid,channel)\n\tlocal resensor=nil\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices \n\t\tfor i,link in pairs(device.dnlinks) do\n\t\t\t--log.debug("xinpulink=%s",json.encode(link))\n\t\t\tfor j,subdevice in pairs(link.devices) do\n \t --log.debug("xinpunode=%s",json.encode(subdevice))\n\t\t\t\tif subdevice.uplink.props.module==moduleid then\n\t\t\t\t\tresensor = subdevice\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\t--log.debug("xinpuresensor=%s",json.encode(resensor))\n\treturn resensor\nend\n\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\nunixtimestamp=function(datestr)\n -- 2018-4-28 16:10:12\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S",datestr/1000)\n\treturn recordTime\nend INLINE 2018-11-10 16:00:32.678+08 2018-11-19 16:52:55.278+08 2018-11-10 \N
+3bed9937-4292-47f9-ad0a-3f39e26791f6 fshs_pressure_19000 \N 1.0 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d f 01fdd48b-2211-42be-9e66-b2a76c84567d Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "fshs_pressure_19000.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fshs_pressure_19000 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("fshs_pressure_19000 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x06, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("fshs_pressure_19000,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t log.debug("fshs_pressure_19000 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("fshs_pressure_19000 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local pressure =iota.hexToFloat(hex,3,'B')\n\t\tlocal temperature =iota.hexToFloat(hex,11,'B')\n \n out.data = { \n pressure=pressure,\n\t\t\ttemperature\t=temperature\t\t\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("fshs_pressure_19000 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 17 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2018-07-25 09:39:32.668+08 2018-07-25 11:09:48.755+08 2018-07-25 \N
+1e0edcee-1fb7-4601-b3ac-6f6f59593485 fs_weight_9803 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s", "fs_weight_9803.lua")\nend\n\nonData=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local IDX_Start = 0 -- 起始指令\n local IDX_CMD = 1; -- 命令字 \n local IDX_DataLen = 2; -- 数据长度\n local IDX_MoudleID = 3; -- 模块号(车道号)\n\n local IDX_licence = 4; -- 车牌号\n\t\n local IDX_axeisCount = 14; -- 轴数\n local IDX_GrWeight = 15; -- 总重\n local IDX_year = 17\n\tlocal IDX_month =19\n\tlocal IDX_day = 20\n local IDX_hour = 21\n local IDX_minute = 22\n local IDX_second = 23\n local IDX_UpWeight = 24; -- 总重超重\n\t\n local IDX_AxieWeight1 = 25; -- 轴一重量\n local IDX_AxieWeight2 = 27; -- 轴二重量\n local IDX_AxieWeight3 = 29; -- 轴三重量\n local IDX_AxieWeight4 = 31; -- 轴四重量\n local IDX_AxieWeight5 = 33; -- 轴五重量\n local IDX_AxieWeight6 = 35; -- 轴六重量\n local IDX_AxieWeight7 = 37; -- 轴七重量\n local IDX_AxieWeight8 = 39; -- 轴八重量\n\t\n\tlocal IDX_AxieSpeed1 = 41; -- 轴一速度\n local IDX_AxieSpeed2 = 42; -- 轴二速度\n local IDX_AxieSpeed3 = 43; -- 轴三速度\n local IDX_AxieSpeed4 = 44; -- 轴四速度\n local IDX_AxieSpeed5 = 45; -- 轴五速度\n local IDX_AxieSpeed6 = 46; -- 轴六速度\n local IDX_AxieSpeed7 = 47; -- 轴七速度\n local IDX_AxieSpeed8 = 48; -- 轴八速度\n\t\n\t\n local IDX_TotalBase =49; -- 总轴距\n\tlocal IDX_Carlength = 51; -- 车长\n local IDX_Cardirection = 53; -- 方向\n local IDX_CarModle = 54; -- 车类型\n \n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\t\n\t\tlocal crossroad =iota.hexToByte(hex,IDX_MoudleID,'B'); -- 模块号(车道号)\n\t\tlog.debug("fs_weight_9803 crossroad=%s",crossroad)\n\t\tlocal licence = unicode2gb2312(string.sub(hex,2*(IDX_licence)+1,2*(IDX_licence+2)))..toStrHex(string.sub(hex,2*(IDX_licence+2)+1,2*(IDX_licence+8)))..unicode2gb2312(string.sub(hex,2*(IDX_licence+8)+1,2*(IDX_licence+10)))\n\t\t\n\t\tlocal axisnum = iota.hexToByte(hex,IDX_axeisCount,'B'); -- 轴数\n\t\tlocal grossweight = iota.hexToShort(hex,IDX_GrWeight,'B'); -- 总重\n\t\tlocal year = iota.hexToUShort(hex,IDX_year,'B')\n\t\tlocal month =iota.hexToByte(hex,IDX_month,'B')\n\t\tlocal day = iota.hexToByte(hex,IDX_day,'B')\n\t\tlocal hour = iota.hexToByte(hex,IDX_hour,'B')\n\t\tlocal minute = iota.hexToByte(hex,IDX_minute,'B')\n\t\tlocal second = iota.hexToByte(hex,IDX_second,'B')\n\t\tlog.debug("fs_weight_9803 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n\t\tlocal timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\t\tlog.debug("fs_weight_9803 timenum=%s",timenum)\n\t\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\t\tlog.debug("fs_weight_9803 recordTime=%s",recordTime)\n\t\t\n\t\tlocal over = iota.hexToByte(hex,IDX_UpWeight,'B')--总重超重\n\t\t\n\t\tlocal axieWeight1 = iota.hexToShort(hex,IDX_AxieWeight1,'B')\n local axieWeight2 = iota.hexToShort(hex,IDX_AxieWeight2,'B')\n local axieWeight3 = iota.hexToShort(hex,IDX_AxieWeight3,'B')\n local axieWeight4 = iota.hexToShort(hex,IDX_AxieWeight4,'B')\n local axieWeight5 = iota.hexToShort(hex,IDX_AxieWeight5,'B')\n local axieWeight6 = iota.hexToShort(hex,IDX_AxieWeight6,'B')\n local axieWeight7 = iota.hexToShort(hex,IDX_AxieWeight7,'B')\n local axieWeight8 = iota.hexToShort(hex,IDX_AxieWeight8,'B')\n\t\tlog.debug("fs_weight_9803 axieWeight1-8=[%s,%s,%s,%s,%s,%s,%s,%s]",axieWeight1,axieWeight2,axieWeight3,axieWeight4,axieWeight5,axieWeight6,axieWeight7,axieWeight8)\n\t\tlocal axieSpeed1 = iota.hexToByte(hex,IDX_AxieSpeed1,'B'); -- 轴一速度\n\t\tlocal axieSpeed2 = iota.hexToByte(hex,IDX_AxieSpeed2,'B'); -- 轴二速度\n\t\tlocal axieSpeed3 = iota.hexToByte(hex,IDX_AxieSpeed3,'B'); -- 轴三速度\n\t\tlocal axieSpeed4 = iota.hexToByte(hex,IDX_AxieSpeed4,'B'); -- 轴四速度\n\t\tlocal axieSpeed5 = iota.hexToByte(hex,IDX_AxieSpeed5,'B'); -- 轴五速度\n\t\tlocal axieSpeed6 = iota.hexToByte(hex,IDX_AxieSpeed6,'B'); -- 轴六速度\n\t\tlocal axieSpeed7 = iota.hexToByte(hex,IDX_AxieSpeed7,'B'); -- 轴七速度\n\t\tlocal axieSpeed8 = iota.hexToByte(hex,IDX_AxieSpeed8,'B'); -- 轴八速度\n\t\tlog.debug("fs_weight_9803 axieSpeed1-8=[%s,%s,%s,%s,%s,%s,%s,%s]",axieSpeed1,axieSpeed2,axieSpeed3,axieSpeed4,axieSpeed5,axieSpeed6,axieSpeed7,axieSpeed8)\n\t\t\n\t\tlocal totalbase = iota.hexToShort(hex,IDX_TotalBase,'B')--总轴距\n\t\tlocal cmslength = iota.hexToShort(hex,IDX_Carlength,'B')--车长\n\t\tlocal direction = iota.hexToByte(hex,IDX_Cardirection,'B')--行驶方向\n\t\tlocal carmodel = iota.hexToShort(hex,IDX_CarModle,'B') -- 车类型\n\t log.debug("fs_weight_9803 totalbase=%s,cmslength=%s,direction=%s,carmodel=%s",totalbase,cmslength,direction,carmodel)\n\t----\n out.data = {\n\t\t\tcrossRoad = tostring(crossroad),\n\t\t\tlicence = tostring(licence),\n\t\t\taxisnum = tostring(axisnum),\n grossWeight = tostring(grossweight),\n overload = tostring(over),\n axieWeight = json.encode({axieWeight1,\n axieWeight2,\n axieWeight3,\n axieWeight4,\n axieWeight5,\n axieWeight6,\n axieWeight7,\n axieWeight8}),\n\t\t\taxieSpeed=json.encode({axieSpeed1,\n axieSpeed2,\n axieSpeed3,\n axieSpeed4,\n axieSpeed5,\n axieSpeed6,\n axieSpeed7,\n axieSpeed8}),\n totalBase = tostring(totalbase), \n cmsLength = tostring(cmslength),\n\t\t\tdirection = tostring(direction),\n\t\t\tcarType = tostring(carmodel)\n }\t\t\n\t\t\n\t\t--out.time=recordTime\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n\tlog.debug("fs_weight_9803 校验数据=%s",data)\n\tif string.len(data)/2 ~= 62 then\n errormsg = 'hex length is not enough.'\n errcode = 1001\n return false\n end\n if string.lower(string.sub(data,1,4)) ~='ff01' then\n errormsg = 'weight buffer length is not enough.'\n errcode = 1001\n return false\n end\n\tlog.debug("fs_weight_9803 数据校验通过")\n return true\n--crc\nend\n\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\nfunction unicode2gb2312(src)\n\tlocal map_tb={["冀"] = "BCBD",["豫"] = "D4A5",["云"] = "D4C6",["辽"] = "C1C9",["黑"] = "BADA",["湘"] = "CFE6",["皖"] = "CDEE",\n ["鲁"] = "C2B3",["新"] = "D0C2",["苏"] = "CBD5",["浙"] = "D5E3",["赣"] = "B8D3",["鄂"] = "B6F5",["桂"] = "B9F0", \n ["甘"] = "B8CA",["晋"] = "BDFA",["蒙"] = "C3C9",["陕"] = "C9C2",["吉"] = "BCAA",["闽"] = "C3F6",["贵"] = "B9F3", \n ["粤"] = "D4C1",["青"] = "C7E0",["藏"] = "B2D8",["川"] = "B4A8",["宁"] = "C4FE",["琼"] = "C7ED",["渝"] = "D3E5", \n ["京"] = "BEA9",["津"] = "BDF2",["沪"] = "BBA6",["深"] = "C9EE",["学"] = "D1A7" }\t\n\tfor k,v in pairs(map_tb) do\n if v == string.format("%X",tonumber(src,16)) then\n return k\n end\n end\n return " "\nend\n INLINE 2018-07-04 16:47:01.607+08 2018-07-24 10:41:45.744+08 2018-07-04 \N
+f3220830-3911-472f-a168-49c2e6be4264 qy_noise_4100 \N 清易噪声传感器协议 1.0 f37cd019-7796-443e-9467-97aec7656620 f37cd019-7796-443e-9467-97aec7656620 f f37cd019-7796-443e-9467-97aec7656620 Lua \nstart=function()\n log.debug("start %s, ctx=", "qy_noise_4100.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n end\nend\n--02030201ea7c5b moduleId=2\n--"noise": 49\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\n local noisedata = iota.hexToShort(hex,3,'B') / 10.0\n out.data = {\n noise = noisedata\n }\n\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = 'CMD is not right'\n errcode = 1001\n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2017-09-12 19:44:26.351+08 2018-02-28 18:32:12.191+08 2017-09-12 \N
+d3cd6277-96e5-4811-af48-ff6f141b2fe6 tt_oxy_3100 \N 重庆唐天负氧离子监测仪 1.0 67fa3de9-4f6e-4df8-9f2e-9a87d122aa68 67fa3de9-4f6e-4df8-9f2e-9a87d122aa68 f 67fa3de9-4f6e-4df8-9f2e-9a87d122aa68 Lua \n\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n\nstart=function()\n log.debug("start %s, ctx=", "tt_oxy_3100.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n end\nend\n--010300200132ff3d01A50012006C00AC00BC02857FFF7FFF7FFF7FFF007a7FFF7FFF7FFF0000\n--moduleId=1\n--"anion": 1220,\n--"humid": 42.1,\n--"temp": -19.5\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\n local hum = bit:_or(bit:_lshift(iota.hexToByte(hex,8,'B'),8) ,iota.hexToByte(hex,9,'B')) / 10.0\n local sign = 1\n local temperature = 0\n local by = string.sub(hex,13,16)\n if iota.hexToByte(by,0,'B') >= 0x80 then\n sign = -1\n temperature = (0xffff - bit:_or(bit:_lshift(bit:_and(iota.hexToByte(by,0,'B') , 0xffff) , 8) , iota.hexToByte(by,1,'B')) + 1) * sign / 10.0\n else\n temperature = bit:_or(bit:_lshift(iota.hexToByte(by,0,'B'),8) ,iota.hexToByte(by,1,'B')) / 10.0;\n end\n local Anion = iota.hexToShort(hex,28,'B')* 10\n out.data = {\n temp = temperature,\n anion = Anion,\n humid = hum\n }\n\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 38 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = 'CMD is not right'\n errcode = 1001\n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2017-09-14 20:29:06.545+08 2018-02-28 18:32:12.206+08 2017-09-14 \N
+bb630bcd-5a32-416d-b6e2-9d0bd0eab954 ryzh_illumin_2407 \N 锐研智华 1.0 e3655afc-a2a8-4bc3-801a-9c3019705a27 e3655afc-a2a8-4bc3-801a-9c3019705a27 f e3655afc-a2a8-4bc3-801a-9c3019705a27 Lua --//04 项目资料/2017-08/兰州/兰州大学光照、温室压和二氧化碳的项目/RY-GW-485光照传感器.doc\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\nstart=function()\n log.debug("load script %s, moduleId=%s", "ryzh_illuminance_2407.lua", device.props.moduleId or "[nil]")\n\t-- 0xFF, 0x03, 0x00, 0x00, 0x00, 0x01, 0x91, 0xD4\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 1, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("ryzh_illuminance_2407 ssend : %s", buff)\n ok,resp=ctx:ssend(buff,20000)\n local result="{}"\n if ok then\n \tlog.debug("ryzh_illuminance_2407 recv ok : %s", resp)\n result = unmarshall(resp)\n else\n \tlog.debug("ryzh_illuminance_2407 recv faild")\n end\n \n \n ctx:done(result)\nend\n--FF03020014919F\n--moduleId=255\n--range=(0,100000)\n--"illuminance": 200\nunmarshall=function(hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==14) then\n local IDX_Illuminance = 3\n local range =device.props.range\n local firstNum=bit:_rshift( bit:_and(iota.hexToByte(hex,IDX_Illuminance,'B'), 0xF0),4)\n local secondNum= bit:_and(iota.hexToByte(hex,IDX_Illuminance,'B'), 0x0F)\n local thirdNum=bit:_rshift( bit:_and(iota.hexToByte(hex,IDX_Illuminance+1,'B'), 0xF0),4)\n local forthNum= bit:_and(iota.hexToByte(hex,IDX_Illuminance+1,'B'), 0x0F)\n \n local rawvalue=firstNum * 4096 + secondNum * 256 + thirdNum * 16 + forthNum\n \n local sArray=Split(range,",")\n local limitL=tonumber(string.sub(sArray[1],2,-1))\n local limitH=tonumber(string.sub(sArray[2],1,-2))\n log.debug("limitL=%d limitH=%d", limitL,limitH)\n if limitL == 0 and limitH == 20000 or limitH == 2000 then --0-2K or 0-20K\n local illuminance = rawvalue\n out.data = {\n illuminance=illuminance\n }\n end\n log.debug("开始求解")\n if limitL == 0 and limitH == 100000 then --0-10K\n local illuminance = rawvalue * 10\n out.data = {\n illuminance=illuminance\n }\n end\n log.debug("ryzh_illuminance_2407 data : %s",json.encode(out.data))\n else\n local message = 'Invalid Msg, len= '..string.len(hex)\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n\nfunction Split(s, sp) \n local res = {} \n \n local temp = s \n local len = 0 \n while true do \n len = string.find(temp, sp) \n if len ~= nil then \n local result = string.sub(temp, 1, len-1) \n temp = string.sub(temp, len+1) \n table.insert(res, result) \n else \n table.insert(res, temp) \n break \n end \n end \n \n return res \nend \n INLINE 2017-11-15 17:18:21.81+08 2018-02-28 18:32:12.206+08 2017-11-13 \N
+00ce002e-e472-4ac9-b74e-52d5c06c4ee0 sz_strain_2301 \N 1.0 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 f fa5611e2-d726-4e8f-a22c-632ef7ab7148 Lua start =function()\n log.debug('load script %s, moduleId=%s device=%s', 'sz_strain_2301', device.uplink.props.module, json.encode(device))\n local endian = 'B'\n local buff = ''\n local errout = {\n data = {},\n result = {}\n }\n\n buff = buff .. '0F'\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n log.debug('sz_strain_2301 设备模块 m=%s json.encode(moduleNo)=%s ', moduleNo, json.encode(moduleNo))\n\n buff = iota.appendHexByte(buff, moduleNo, endian)\n buff = buff .. '11000000000000000000000000000000' --cmd=0x11\n --log.debug('sz_strain_2301 buff 累加前=%s ', buff)\n --buff=buff..iota.hexCheckPlusSum(buff)\n buff = buff .. string.format('%x', iota.hexCheckPlusSum(buff))\n --log.debug('sz_strain_2301 buff 累加后=%s ', buff)\n\n buff = buff .. 'F0'\n --buff='0F040100000000000000000000000000000014F0' --测试用 后删除\n ok, resp = ctx:ssend(buff, 18000) --实际采集需要90秒 有历史数据读取 比较快\n local result = '{}'\n if ok then\n result = unmarshall(resp, moduleNo)\n else\n errout.result = {code = 1001, msg = '采集超时'}\n result=json.encode(errout)\n end\n ctx:done(result)\nend\n\n--0F001100000000000000000000000000000020F0\n--moduleId=0\n--0F00117F7F7F120519130A00200106A8FC0E5A01F4020624090B6A01F4030729110B1D01EC040610A80C3001EC0506A6A20D0B01F0060743880BA301F0070751E50C1B01F00806FC0D0F5B01F009075A620A3C01F80A0665A30C4001EC0B0265CB0B4A01E80C062E0A0FA901F00D06CD840A1501F40E067F5D0E8C01F00F07EE0D0AF601E810067CF80B5801F01100000000000C801200000000000C801300000000000C801400000000000C801500000000000C801600000000000C801700000000000C801800000000000C801900000000000C801A00000000000C801B00000000000C801C00000000000C801D00000000000C801E00000000000C801F00000000000C802000000000000C80F7F7F73890F0\nunmarshall =function(hex, moduleStr)\n log.debug('sz_strain_2301 m=%s, recv =%s', moduleStr, hex)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n local ErrorCode = IsValid(hex, moduleStr)\n if ErrorCode then\n local dataArea = string.sub(hex, 27, -13)\n local dataTimeHexStr = string.sub(hex, 13, 24) --数据时间\n local channelCount = tonumber(string.sub(hex, 25, 26), 16)\n --单个传感器数据 占8个字节\n local dataAreaLength = string.len(dataArea) / 2\n\n for i = 1, channelCount, 1 do\n log.debug('i=%s', i)\n \t\tlocal singleChannelDataHexStr = string.sub(hex, 27 + (i - 1) * 16, 27 + i * 16-1)\n local channel = iota.hexToByte(singleChannelDataHexStr, 0, 'B')\n \n if string.sub(singleChannelDataHexStr, 3, -1) == '00000000000c80' then\n log.debug('sz_strain_2301 通道=%s,通道为空', channel)\n else\n -- statements\n\t\t\t\t\n local Fi = iota.hexToUShort(singleChannelDataHexStr, 4, 'B')\n local temperature = iota.hexToUShort(singleChannelDataHexStr, 6, 'B') / 16\n\t\t\t\tif temperature==200 then\n \t\t\tFi=Fi/16\n end\n local childDevice = getDeviceInfo(moduleStr, channel)\n if childDevice ~= nil then\n if childDevice.uplink.capabilities[1].formula.metaid == '6eadaa20-f803-4859-8ed0-3bd1afa830cb' then --振弦公式 不带温度 metaid\n local k = childDevice.uplink.capabilities[1].formula.props.K or nil\n local f0 = childDevice.uplink.capabilities[1].formula.props.Fo or nil\n local c0 = childDevice.uplink.capabilities[1].formula.props.Co or nil\n log.debug('sz_strain_2301 模块%s通道%s的公式计算参数是:K=%s,Fo=%s,Co=%s', moduleStr, channel, k, f0, c0)\n if k ~= nil and f0 ~= nil then\n phy = k * (Fi - f0) + c0\n log.debug('sz_strain_2301 模块%s通道%s的公式计算结果 phy=%s,Fi=%s,singleChannelDataHexStr=%s', moduleStr, channel, phy,Fi,singleChannelDataHexStr)\n end\n end\n\n local singleData = {\n data = {\n physicalvalue = tonumber(string.format('%0.2f', phy)),\n temperature = tonumber(string.format('%0.2f', temperature))\n },\n device = childDevice.id,\n type = 1\n }\n log.debug('sz_strain_2301 m=%s,c=%s,singleData=%s', moduleStr, channel, json.encode(singleData))\n table.insert(out.data, singleData)\n end\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n log.debug('sz_strain_2301 m=%s,data=%s', moduleStr, json.encode(out))\n return json.encode(out)\nend\n\nIsValid =function(data, moduleStr)\n log.debug('sz_strain_2301 开始校验数据=%s', data)\n if string.sub(data, 1, 2) ~= '0f' or string.sub(data, -2, -1) ~= 'f0' then\n errcode = 1003\n errormsg = string.format('回复数据的 帧头≠0x0f[%s],帧尾≠0xf0[%s] ', string.sub(data, 1, 2), string.sub(data, -2, -1))\n return false\n end\n local moduleStrCheck = tonumber(string.sub(data, 3, 4), 16)\n if moduleStrCheck ~= tonumber(moduleStr) then\n errormsg = string.format('数据中模块号无效=%s[%s]', moduleStrCheck, moduleStr)\n errcode = 1004\n log.debug('sz_strain_2301 Invalid moduleId=%s[%s]', moduleStrCheck, moduleStr)\n return false\n end\n\n local dataChannelCount = tonumber(string.sub(data, 25, 26), 16) --获取数据的长度\n local dataLen = string.len(data) / 2\n local checkLen = 13 + dataChannelCount * 8 + 6\n -- if dataLen ~= checkLen then\n -- errormsg = string.format('数据长度=%s[%s] 无效', dataLen, checkLen)\n -- errcode = 1002\n -- return false\n -- end\n -- log.debug('sz_strain_2301 数据校验通过')\n return true\n --crc\nend\n\ngetDeviceInfo =function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("sz_strain_2301 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug('sz_strain_2301 查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n --log.debug('sz_strain_2301 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n else\n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.channelId\n --log.debug('sz_strain_2301 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n end\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tostring(channelStrCheck) == tostring(channelNoId) then\n log.debug('sz_strain_2301 m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('sz_strain_2301 subdevices是nil')\n return nil\n end\nend\n\n--异或校验\nCheckXor = function(hex)\n local len = string.len(hex) / 2\n local pp = 0\n for i = 0, len - 1 do\n local bi = iota.hexToByte(hex, i, 'B')\n pp = bit:_and(bit:_xor(bi, pp), 0x000000ff)\n --log.debug("PP是=%s",string.format("%02x",pp))\n end\n return string.format('%02x', pp)\nend\n INLINE 2018-12-18 11:21:56.186+08 2019-03-18 15:41:27.075+08 2018-12-18 \N
+dd0197d4-7aaa-415a-b006-de6f384718ee LJW_7100 \N 1.0 1.0 564b6c70-39c1-423b-9eed-89d2dcdbc2a4 564b6c70-39c1-423b-9eed-89d2dcdbc2a4 f 564b6c70-39c1-423b-9eed-89d2dcdbc2a4 Lua start=function ()\n\tok=ctx:asend("010206")\nend\n\nonData=function(hex)\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n log.debug("LJW_7100 收到数据=%s",hex)\n\tlocal moduleNo=device.uplink.props.module\n --local moduleNo="99912345" --测试用\n\tlocal ErrorCode = IsValid(hex,moduleNo);\n\tif ErrorCode then\n log.debug("LJW_7100 数据有效")\n\t\tlocal data_str = HextoStr(hex)\n\t\t--转为字符串\n log.debug("LJW_7100 ascii data_str=%s",data_str)\n\t\tlocal weight=string.sub(data_str,9,16)\n\t\tlocal lowerLimit=string.sub(data_str,17,24)\n\t\tlocal upLimit=string.sub(data_str,25,32)\n\t\tlocal division=string.sub(data_str,33,40)\n\t\tlocal range_weight=string.sub(data_str,41,48)\n log.debug("LJW_7100 ascii weight=%s,lowerLimit=%s,upLimit=%s,division=%s,range_weight=%s",weight,lowerLimit,upLimit,division,range_weight)\n\t\tlocal data1={\n\t\t\t\t\tweight = tonumber(weight)/1000.0,\n\t\t\t\t\tlowerLimit = tonumber(lowerLimit)/1000.0,\n\t\t\t\t\tupLimit = tonumber(upLimit)/1000.0,\n\t\t\t\t\tdivision = tonumber(division)/1000.0,\n\t\t\t\t\trange_weight=tonumber(range_weight)/1000.0\n\t\t\t\t\t}\n\t\ttable.insert(out.data,data1)\n\t \n\t\t\t\t\t\t\t\t\t\t\n\telse\n log.debug("LJW_7100 数据无效")\n\t\tmessage = 'Invalid Msg, len='..string.len(hex)\n\t\tout.result = {code = errcode, msg = message}\n\tend\n\tlocal resultData =json.encode(out)\n\tctx:notify(resultData)\nend\n\nIsValid=function (data,moduleNoCheck)\n\tif data == nil or string.len(data)/2 ~= 48 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n local moduleNoCheckStr_hex=string.sub(data,1,16)\n local moduleNoCheckStr=HextoStr(moduleNoCheckStr_hex)\n\tif moduleNoCheckStr~=moduleNoCheck then\n\t\terrormsg = string.format('module is Invalid=%s[%s]',moduleNoCheckStr,moduleNoCheck)\n\t\terrcode = 1002\n\t\treturn false\n\tend\n\t\treturn true\nend\n\n--字符串ascii->字符\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend INLINE 2018-10-18 15:12:08.326+08 2018-10-29 14:45:15.4+08 2018-10-18 \N
+4374d945-290d-4424-884d-818f2bada891 guang_xian_test \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua onData=function (recvHex)\n\t--主动上传式\n local out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n }\n \n log.debug("GUANGXIAN Received=>%s", recvHex)\n\n local resultData = json.encode(out)\n ctx:notify(resultData)\n \nend\n INLINE 2020-01-13 16:20:54.275+08 2020-01-13 16:25:36.648+08 2020-01-13 \N
+070668c8-be26-4e4d-96df-d2d191f31972 anxin_Settlemen \N 静力水准仪 主动上报(标准协议) 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start=function()\n log.debug("anxin_rain.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n local moduleStr=device.uplink.props.module\n log.debug("anxin_rain [%s] Data, ctx=%s",moduleStr,hex)\n local out={\n data ={},\n result = {}\n\t\n }\n \n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n\t local distance = iota.hexToInt(hex,24,'B')/1000\n local temperature = iota.hexToShort(hex,28,'B')/100\n\t local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anxin_rain timeStr=%s",timeStr)\n dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anxin_rain dateTimeStr=%s",dateTimeStr)\n timenow = unixtimestamp(dateTimeStr)\n\t\t\t\t\n\t\t out={\n\t\t\t\t data={ \n\t\t\t\t distance=distance,\n temperature =temperature\n\t\t\t\t },\n\t\t\t\t\ttime=timenow\n\t\t\t\t }\n \n \n \n \n \t\n local resultData =json.encode(out)\n log.debug("anxin_rain [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = errcode, msg = errormsg}\n ctx:done(json.encode(out))\n end \nend\n\nIsValid=function(data,deviceModule)\n if data == nil then\n errormsg = 'anxin_rain:Data is nil'\n errcode = 1001\n \tlog.debug("anxin_rain [%s] %s",deviceModule,errormsg)\n return false\n end\n\n local dataModule= iota.hexToShort(data,6,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('anxin_rain module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("anxin_rain [%s] %s",deviceModule,errormsg)\n return false\n end\n\n log.debug("anxin_rain [%s] 校验通过",deviceModule)\n return true\n \nend\n \nunixtimestamp = function(datestr)\n \n local year = tonumber(string.sub(datestr,1,4))\n local month = tonumber(string.sub(datestr,5,6))\n local day = tonumber(string.sub(datestr,7,8))\n local hour = tonumber(string.sub(datestr,9,10))\n local minute = tonumber(string.sub(datestr,11,12))\n local second = tonumber(string.sub(datestr,13,14))\n\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2019-12-23 11:02:43.27+08 2019-12-23 14:14:58.323+08 2019-12-23 \N
+f4bb99f2-48a1-454c-8d3b-d9aa707ce857 LANNOVO_Water \N 1.0 d7992dd9-6356-40b2-ae7d-78cb5508b40c d7992dd9-6356-40b2-ae7d-78cb5508b40c f d7992dd9-6356-40b2-ae7d-78cb5508b40c Lua --字符串ascii->字符\nstart=function()\n log.debug("LANNOVOWater: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n log.debug("LANNOVOWater: Data=%s",hex)\n\t--全局\n out={\n data ={},\n result = {}\n }\n\n local sData= toStrHex(hex)\n log.debug("LANNOVOWater: sData=%s",sData)\n local spliteData = Split(sData,'&&')\n\tlocal deviceData = Split(spliteData[1],';')\n\tlocal moduledata = Split(deviceData[4],'=')\n\tlocal module = tonumber(moduledata[2]) --模块号\n\t\n\tlocal Data = Split(spliteData[2],';')\n\tlocal timedata = Split(Data[1],'=')\n\tlocal time = tonumber(timedata[2]) --时间\n\t\n\tfor key,value in pairs(Data) do\n\t\tAllot(value)\n\tend\n\t\n\n\n local resultData =json.encode(out)\n log.debug("LANNOVOWater: result=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n-- allot 函数\nAllot=function(datastr)\n\tlocal name = Split(datastr,'=')\n\tif name[1] == 'PM25-Rtd' then \n\t\tout.data.pm=tonumber(name[2])\n\telseif name[1] == 'PM10-Rtd' then \n\t\tout.data.pm10=tonumber(name[2])\n\telseif name[1] == 'TSP-Rtd' then \n\t\tout.data.pm100=tonumber(name[2])\n\telseif name[1] == 'TEMP-Rtd' then \n\t\tout.data.temp=tonumber(name[2])\n\telseif name[1] == 'HUMI-Rtd' then \n\t\tout.data.humi=tonumber(name[2])\n\telseif name[1] == 'SO2-Rtd' then\n\t\tout.data.so2=tonumber(name[2])\n\telseif name[1] == 'NO2-Rtd' then \n\t\tout.data.no2=tonumber(name[2])\n\telseif name[1] == 'O3-Rtd' then \n\t\tout.data.o3=tonumber(name[2])\n\telseif name[1] == 'CO-Rtd' then\n\t\tout.data.co=tonumber(name[2])\n\telseif name[1] == 'CO2-Rtd' then \n\t\tout.data.co2=tonumber(name[2])\n\telseif name[1] == 'VOC-Rtd' then \n\t\tout.data.voc=tonumber(name[2])\n\telseif name[1] == 'CH2O-Rtd' then \n\t\tout.data.ch2o=tonumber(name[2])\n\telseif name[1] == 'O2-Rtd' then\n\t\tout.data.o2=tonumber(name[2])\n\telseif name[1] == 'MPA-Rtd' then \n\t\tout.data.mpa=tonumber(name[2])\n\telseif name[1] == 'WS-Rtd' then\n\t\tout.data.ws=tonumber(name[2])\n\telseif name[1] == 'WD-Rtd' then \n\t\tout.data.wd=tonumber(name[2])\n\telseif name[1] == 'NOISE-Rtd' then \n\t\tout.data.noise=tonumber(name[2])\n\telseif name[1] == 'CL2-Rtd' then\n\t\tout.data.cl2=tonumber(name[2])\n\telseif name[1] == 'HCL-Rtd' then \n\t\tout.data.hcl=tonumber(name[2])\n\telseif name[1] == 'H2S-Rtd' then \n\t\tout.data.h2s=tonumber(name[2])\n\telseif name[1] == 'NH3-Rtd' then\n\t\tout.data.nh3=tonumber(name[2])\n\telse\n\t\n\tend\nend\n\n INLINE 2018-10-16 11:49:18.432+08 2018-12-15 12:57:42.057+08 2018-10-16 \N
+281b572d-6cff-47db-b2dd-363d6443b061 ACM300_Z_2G \N 智慧应用,电器火灾 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n协议号: 1.0;\n协议名: ACM300-Z-2G\n]]--liankang\nstart=function ()\n log.debug("ACM300Z2G start %s, ctx=%s",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("ACM300Z2G encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("ACM300Z2G decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE); -- 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x03, BE); -- 功能码 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE); \n buff=iota.appendHexByte(buff, 0x00, BE); -- 读取寄存器起始地址 00 00\n\tbuff=iota.appendHexByte(buff, 0x00, BE); \n\tbuff=iota.appendHexByte(buff, 0x8B, BE); -- 读取寄存器数量 00 8B\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- CRC16 小端字节序\t\n\treturn buff\nend\n\n-- decode \n-- returns: 结果\n-- 正确回复 0103FF 14080907211B 1111111111111111111111111111 1111111111111111111111111111 00000001001F001F00000081000100000000 419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC 38 43\n-- 0103FF14080907211B1111111111111111111111111111111111111111111111111111111100000001001F001F00000081000100000000419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC3843\n-- \n\n-- 原始数据\nfunction protocol_decode(da)\n\t\n\t\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\t\n\t-- 判断数据有效性\n\tif inValid(da) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telse\n log.debug("数据有效")\n \n local data = string.sub( da, 7, -5);\n log.debug("ACM300Z2G data ==>"..data)\n log.debug("ACM300Z2G dataLength ==>"..json.encode(string.len(data)))\n -- 接收到的设备时间\n local recvTime = unixtimestamp(data)\n log.debug("ACM300Z2G time ==>"..recvTime)\n\n -- 告警信息\n local voltagePhaseSequenceFlag = iota.hexToUShort(data, 36, 'B')\n local leakageTemperatureWiringFaultFlag = iota.hexToUShort(data, 38, 'B')\n local leakageTemperatureAlarmFlag = iota.hexToUShort(data, 40, 'B')\n local voltageStatusFlag = iota.hexToUShort(data, 44, 'B')\n local currentStatusFlag = iota.hexToUShort(data, 46, 'B')\n local digitalInputStatus = iota.hexToUShort(data, 48, 'B')\n local digitalOutputStatus = iota.hexToUShort(data, 50, 'B')\n \n\n -- 获取告警后的所有数值\n local valueTab = {}\n for i = 52, 276, 4 do\n -- log.debug("ACM300Z2G value value ==>"..json.encode(i)..",,,, "..json.encode(iota.hexToFloat(data, i, 'B')))\n table.insert(valueTab, iota.hexToFloat(data, i, 'B'))\n end\n log.debug("ACM300Z2G valueTab"..json.encode(valueTab))\n log.debug("ACM300Z2G valueTab==>"..json.encode(table.concat( valueTab, ", ")))\n\n local keyTab = {}\n local valueIndexTab = {}\n -- 电压相序标志位\n if(1 == bit:_and(voltagePhaseSequenceFlag, 0x01)) then\n table.insert(keyTab, "voltagePSF")\n out.data["voltagePSF"] = 1;\n end\n\n -- 剩余电流报警时测量值\n out.data["residualCurrentAlarm"] = valueTab[6]\n \n -- 漏电温度报警标志位\n if(1 == bit:_and(leakageTemperatureAlarmFlag, 0x01)) then\n if(0x02 == bit:_and(leakageTemperatureAlarmFlag, 0x02)) then\n out.data["leakageTAF1"] = valueTab[7]\n end\n if(0x04 == bit:_and(leakageTemperatureAlarmFlag, 0x04)) then\n out.data["leakageTAF2"] = valueTab[8]\n end\n if(0x08 == bit:_and(leakageTemperatureAlarmFlag, 0x08)) then\n out.data["leakageTAF3"] = valueTab[9]\n end\n if(0x10 == bit:_and(leakageTemperatureAlarmFlag, 0x10)) then\n out.data["leakageTAF4"] = valueTab[10]\n end\n end\n\n -- 电压状态标志位\n if(1 == bit:_and(voltageStatusFlag, 0x01)) then\n out.data["voltageSFOverA"] = valueTab[22]\n out.data["voltageSFOverB"] = valueTab[23]\n out.data["voltageSFOverC"] = valueTab[24]\n end\n if(0x80 == bit:_and(voltageStatusFlag, 0x80)) then\n out.data["voltageSFUnderA"] = valueTab[25]\n out.data["voltageSFUnderB"] = valueTab[26]\n out.data["voltageSFUnderC"] = valueTab[27] \n end\n\n -- 电流状态标志位\n if(1 == bit:_and(currentStatusFlag, 0x01)) then\n out.data["currentSFOverA"] = valueTab[34]\n out.data["currentSFOverB"] = valueTab[35]\n out.data["currentSFOverC"] = valueTab[36]\n end\n out["time"] = recvTime \n\n\tend\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 285 or iota.hexToByte(data, 1,'B') ~= 0x03 then -- 长度不等于285 或者 读第二个字节,功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n-- 将时间字符串转化为时间戳\nunixtimestamp=function(dateStr)\n -- 12 06 15 11 3B 3A ==> 18 06 21 17 59 58\n local year = tonumber(string.sub( dateStr, 1, 2), 16) + 2000;\n\tlocal month = tonumber(string.sub( dateStr, 3, 4), 16);\n\tlocal day = tonumber(string.sub( dateStr, 5, 6), 16);\n local hour = tonumber(string.sub( dateStr, 7, 8), 16);\n local minute = tonumber(string.sub( dateStr, 9, 10), 16);\n local second = tonumber(string.sub( dateStr, 11, 12), 16);\n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n local recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\treturn recordTime\nend\n\n\n--bit 操作\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\nend --bit:_and\n\n\n--- nNum 源数字\n--- n 小数位数\n--- 四舍五入\nfunction getPreciseDecimal(nNum, n)\n if type(nNum) ~= "number" then\n return nNum;\n end\n n = n or 0;\n n = math.floor(n)\n if n < 0 then\n n = 0; \n end\n local nDecimal = 10 ^ n\n local nTemp = math.floor(nNum * nDecimal + 0.5);\n local nRet = nTemp / nDecimal;\n return nRet;\nend\n INLINE 2020-01-07 11:41:08.925+08 2020-01-14 09:38:41.221+08 2020-01-07 \N
+e746003f-c6e3-4213-9d13-706aa552dfd2 mk_level_1 \N 液位 1.0 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca f c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, m=%s", "mk_level_1.lua",device.uplink.props.module)\nend\n\nonData=function(hex)\n--AA01094100EB0000000000000000\n--"level": 235\n local out={\n data ={},\n result = {}\n }\n log.debug("recv %s",data)\n\tlocal moduleNo=device.uplink.props.module\n local ErrorCode = IsValid(hex,moduleNo)\n \tlocal resultData\n if ErrorCode then\n local level = iota.hexToShort(hex,4,'B') \n out.data = { \n\t\t\t\t\tlevel=level\n\t\t\t\t}\n resultData =json.encode(out)\n else\n out.result = {code = errcode, msg = errormsg}\n resultData =json.encode(out)\n end\n log.debug("recv %s, ctx=%s", "mk_level_1.lua",json.encode(out))\n ctx:notify(resultData)\nend\n\nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 14 then\n errormsg = string.format('无效的数据长度=%s',string.len(data)/2)\n errcode = 1002\n return false\n end\n \n local dataModule=iota.hexToByte(data,1,'B')\n if tostring(moduleCheck) ~= tostring(dataModule) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1003\n return false\n end\n\t\n\tlocal valCmd = string.sub(data,3,4) \n\tif valCmd ~= '41' then\n\t\terrormsg = string.format('无效的功能码CMD=0x%s',valCmd)\n errcode = 1004\n\tend\n --iota.checkPlusSum16\n return true\n--crc\nend\n\n\n\n INLINE 2018-01-08 11:24:37.511+08 2018-12-22 10:54:07.605+08 2018-01-08 \N
+55b025d7-61e9-49a5-b144-ab7c86525a66 http-server \N 2 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f 56031544-f3e0-407f-9ffa-1a54742ecfa7 Lua start=function()\n log.debug("LUA http server start")\nend\n\nonData=function(data)\n log.debug("ondata http_server %s", json.encode(data))\n \tack = {type="http", code= 200, body="ggggggggggggg"}\n ctx:asend(ack)\nend\n\nctx:notify\nctx:done INLINE 2018-11-13 13:35:47.321+08 2018-12-17 17:36:01.476+08 2018-11-13 \N
+b56416f5-1d0a-447a-b178-90e538da66fe geot_1406_ZX \N 基泰四通道振弦采集 1.0 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 f d3f1aa63-8397-45a4-af26-15a0f91d1e13 Lua --//04 项目资料/2017-05/南京基泰/四通道模块通讯协议.doc\n--require "functions" -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {} //设备信息\nprotocol=> {} //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\nstart=function ()\n\t\tlog.debug("start %s, ctx=%s", "geot_1406_ZX.lua",json.encode(device.props.moduleId))\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("geot_1406_ZX 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("geot_1406_ZX 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n\t\n\t --ff6100010014830102032030213122322333f51a\n\t\tbuff=iota.appendHexByte(buff, 0xFF, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x61, endian)\n buff=iota.appendHexWord(buff, moduleNo, endian) -- 模块号 \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x14, endian)\n buff=iota.appendHexByte(buff, 0x83, endian)\t\t\n buff=iota.appendHexByte(buff, 0x01, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x02, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x03, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x20, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x30, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x21, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x31, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x22, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x32, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x23, endian)\t\t\t\n\t\tbuff=iota.appendHexByte(buff, 0x33, endian)\t\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok=ctx:asend(buff)\n log.debug("geot_1406_ZX:下发完成buff=%s",buff)\nend\n--moduleId=98 通道1 通道2 通道3 通道4\n--ff6000620027100144595bd8cc024456de1600036494187c4011648ae3c74512649a99054211648ae3c74512649a99054211648ae3c74512649a990542116444e59d5d126444e59d5d0480\n--前3组0 \n--第4组\n--"frequency": 1355.3293337783257,\n--"temperature": 1836.917603\nonData=function (hex)\t\n\tlog.debug("geot_1406_ZX Received=>%s",hex)\n\tlocal out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\tlocal moduleNo = iota.hexToShort(hex,2,'B')\n\t\tlog.debug("geot_1406_ZX:moduleNo=%s",moduleNo)\n\t\t\t\t--local moduleNo=1\n\t\tlocal IDX_DIRECTION_X=27;\n\t\t\n\t\tfor i=0,3,1 do\n\t\t\t local vibrate = iota.hexToFloat(hex, IDX_DIRECTION_X + i*2 * 6,'L');\n\t\t\t local Frequency = math.sqrt(vibrate * 1000);\n local Temp = iota.hexToFloat(hex, IDX_DIRECTION_X + (i*2 + 1) * 6,'L');\n\t\t\t --循环插入单通道数据表\n\t\t\t \n\t\t\t--获取通道设备deviceId \n local channelNo=i+1\n log.debug("geot_1406_ZX:模块号=%s,通道号=%s",moduleNo,channelNo)\n local childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\t\t\t--\n local deviceId\n if childDevice~=nil then\n \tdeviceId=childDevice.id\n log.debug("geot_1406_ZX:(振弦)子设备原形childDevice=%s",json.encode(childDevice))\n \tlog.debug("geot_1406_ZX:(振弦)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t--if childDevice.device.formula=="P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)" then --公式目前无法获取\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n \t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n \t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local To = childDevice.uplink.capabilities[1].formula.props.To\n log.debug("geot_1406_ZX:(振弦)子设备:m=%s,c=%s:公式参数=%s,%s,%s,%s,%s,%s",moduleNo,channelNo,K1,K2,K3,Fo,To,Kt)\n if K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n Phy=nil\n \t\tlog.debug("geot_1406_ZX:模块号=%s,通道号=%s 参数无效 当前的Frequency是:%s,Temp是%s",moduleNo,channelNo,Frequency,Temp)\n else\n \t\tlog.debug("geot_1406_ZX:模块号=%s,通道号=%s 参数有效 当前的Frequency是:%s,Temp是%s",moduleNo,channelNo,Frequency,Temp)\n local Fi=vibrate\n \t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n log.debug("geot_1406_ZX:模块号=%s,通道号=%s 当前的Phy是:%s",moduleNo,channelNo,Phy)\n end \n\t\t\t\t--else\n\t\t\t\t--log.debug("geot_1406_ZX:(振弦)子设备:m=%s,c=%s device.formula为nil"..tostring(moduleNo),tostring(channelNo))\n -- end\n else\n log.debug("geot_1406_ZX (振弦)子设备:m=%s,c=%s deviceId为nil",tostring(moduleNo),tostring(channelNo))\n end\n\t\t\tlocal data1={\n\t\t\t data={\n\t\t\t\t\t\t\tfrequency=tonumber(string.format("%5.3f",Frequency)),\n\t\t\t\t\t\t\ttemperature=tonumber(string.format("%5.3f",Temp)),\n \t\t\tphysicalvalue=tonumber(string.format("%5.3f",Phy)),\n\t\t\t\t\t\t\t},\n\t\t\t\tdevice=deviceId,\n \t\t\t\ttype=1 ,\n\t\t\t}\n\t\t\ttable.insert(out.data,data1)\t\t \n\t\tend\t\t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n log.debug("geot_1406_ZX resultData=%s",resultData)\n\tctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("geot_1406_ZX 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("geot_1406_ZX:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("geot_1406_ZX 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t log.debug("geot_1406_ZX 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t \t if tostring(channelStrCheck)== tostring(channelNoId) then\n \n \t\t log.debug("geot_1406_ZX: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("geot_1406_ZX: subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function (data)\n\tlog.debug('geot_1406_ZX:开始校验数据%s',data)\n if data == nil or string.len(data)/2 ~= 75 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n return false\n end\n\n\tif iota.hexToByte(data,0,'B') ~= 0xFF then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\t\n log.debug('geot_1406_ZX:校验通过')\n\treturn true\n\t\nend\n INLINE 2017-09-09 15:43:14.372+08 2018-05-25 17:09:14.872+08 2017-09-05 \N
+d135605e-090a-44f6-844b-8c294ea13c83 fs_water_645_1997 \N 水表 电表字节长度不一样 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--68a0a1a2a3a4a568010243c3 +CS +16H CS=(68a0a1a2a3a4a56801021090的累加和)\n-- cmd=fefefefe6808440327000068010243c34f16 \nstart=function()\n log.debug("start %s, ctx=%s", "fs_water_645_1997.lua",json.encode(ctx.device))\n\n local endian = 'B'\n local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\n if string.len(moduleNo)<12 then\n local lenadd=12-string.len(moduleNo)\n for i=1,lenadd do\n moduleNo='0'..string.lower(moduleNo)\n end\n end\n --调换模块号字节序\n local newModuleNo=exchangeHtoL(moduleNo)\n\tlog.debug("fs_water_645_1997 设备模块通道 接口获取 m=%s",moduleNo)\n\n\tbuff=string.format("68%s68010243c3",newModuleNo) \n\tbuff="fefefefe"..buff..CheckPlusSum(buff,0,string.len(buff)/2)..'16'\n log.debug("fs_water_645_1997,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t log.debug("fs_water_645_1997 m=%s, ok is false",moduleNo)\n\t ctx:done(json.encode(errout))\n\tend\nend\n-- 电表 module=000027034408\n--FEFE6808440327000068810643C34C333333B816 =》0.19 \n\n--水表 module=201806001180\n--00fefefe6880110006182068810843c33345333333337216 =》12\nunmarshall=function(hex,moduleNoStr)\n log.debug("fs_water_645_1997 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode,newDataStr = IsValid(hex,moduleNoStr)\n if ErrorCode then\n --\n local hexBCD=getHexBCD(newDataStr)\n --\n log.debug("fs_water_645_1997 m=%s,hexBCD=%s ",moduleNoStr,hexBCD)\n local totalenergy =tonumber(getData(hexBCD))/100\n\t\tlocal initialvalue=device.props.initial\n log.debug("fs_water_645_1997 initialvalue=%s",initialvalue)\n local phy=totalenergy-initialvalue\n log.debug("fs_water_645_1997 m=%s,totalenergy=%s ",moduleNoStr,totalenergy)\n out.data = { \n\t\t\treadingNumber=phy\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("fs_water_645_1997 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n\nIsValid,newData=function(data,moduleCheck)\n --data=string.gsub(data,'00fe','')\n --data=string.gsub(data,'fefe','')\n \tif data == nil or string.len(data)/2 <20 then\n errormsg = string.format('无效的数据=%s长度=[%s]',data,string.len(data)/2)\n errcode = 1001\n return false\n end\n \n for i=1,string.len(data)/2,1 do\n \tlocal headByte=string.sub(data,1,2)\n if headByte~='68' and string.len(data)>12 then\n \t\tdata=string.sub(data,3,-1)\n elseif headByte=='68' then\n break\n end\n end\n log.debug("fs_water_645_1997 校验 data=%s",data)\n local dataAeraLen=tonumber(string.sub(data,19,20),16)+12\n if data == nil or string.len(data)/2 ~= dataAeraLen then\n errormsg = string.format('无效的数据长度=%s≠%s',string.len(data)/2,dataAeraLen)\n errcode = 1001\n return false\n end\n if string.sub(data,1,2) ~='68' or string.sub(data,-2,-1) ~='16' then\t\n errormsg = '无效的数据头≠68 或 无效的数据尾≠16'\n errcode = 1004\n return false\n end\n\t\n local moduleCheckStr=string.sub(data,3,3+11)\n moduleCheckStr=exchangeHtoL(moduleCheckStr)\n if tostring(moduleCheck) ~= moduleCheckStr then\t\n errormsg = string.format('无效的模块号=%s[%s]',moduleCheckStr,moduleCheck)\n errcode = 1004\n return false\n end\n log.debug("fs_water_645_1997 校验通过 m=%s,data=%s",moduleCheck,data)\n return true,data\n--crc\nend\n\nCheckPlusSum=function(hexStr, startIndex, endIndex)\n log.debug("fs_water_645_1997校验和 hexStr=%s,startIndex=%s,endIndex=%s ",hexStr,startIndex,endIndex)\n local sum = 0\n for i = startIndex, endIndex-1 do\n\t local byteSte=string.sub(hexStr,i*2+1,i*2+2)\n --log.debug("fs_water_645_1997校验和 i=%s, byteSte=%s",i,byteSte)\n sum = (sum + tonumber(byteSte,16))\n end \n local result = sum % 256\n log.debug("fs_water_645_1997 校验和 result=%s hex=%s",result,string.format("%x",result))\n return string.format("%02x",result)\nend\n\nexchangeHtoL=function(moduleStr)\n log.debug("fs_water_645_1997 交换 moduleStr=%s",moduleStr)\n local length=string.len(moduleStr)/2\n local newModuleStr=''\n for i=length-1,0,-1 do\n newModuleStr = string.sub(moduleStr,-1*(2*i+2),-1*(2*i+1))..newModuleStr\n end\n log.debug("fs_water_645_1997 交换newModuleStr=%s",newModuleStr)\n return newModuleStr\nend\n\ngetData=function(BCDstr)\n log.debug("fs_water_645_1997 获取数据 BCDstr=%s",BCDstr)\n local e_BCDstr=BCDstr --exchangeHtoL(BCDstr)\n local newBCDstr=''\n local len=string.len(e_BCDstr)/2\n for i=0,len-1,1 do\n local rawBCDbyte=string.sub(e_BCDstr,2*i+1,2*i+2)\n --log.debug("fs_water_645_1997 获取数据rawBCDbyte=0x%s",rawBCDbyte)\n local rawdata=tonumber(rawBCDbyte,16)-tonumber('33',16)\n --log.debug("fs_water_645_1997 获取数据 rawdata=%s",rawdata)\n newBCDstr = newBCDstr..string.format('%02x',rawdata)\n --log.debug("fs_water_645_1997 获取数据 newBCDstr=%s",newBCDstr)\n end\n log.debug("fs_water_645_1997 数据 newBCDstr=%s",newBCDstr)\n return newBCDstr\nend\n\ngetHexBCD=function(hexStr)\n local datalen=tonumber(string.sub(hexStr,19,20),16) --数据字节数\n \tlog.debug("fs_water_645_1997 数据域 datalen=%s,hexStr=%s",datalen,hexStr)\n \tlocal hexBCD=''\n for i=1,datalen-2,1 do\n hexBCD=hexBCD..string.sub(hexStr,-1*i*2-4,-1*i*2-3)\n end\n return hexBCD\nend\n INLINE 2018-11-02 11:39:46.042+08 2019-05-21 10:41:03.357+08 2018-11-02 \N
+80989031-5d20-4c1f-a1ac-949bad0026c8 fs_people_design \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --字符串ascii->字符\nstart=function()\n log.debug("fs_people_design: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n log.debug("fs_people_design: Data=%s",hex)\n\t--全局\n out={\n data ={},\n result = {}\n }\n\tlocal sData= toStrHex(hex)\n\tlocal cmd = Split(sData,',')\n\t\n\tif cmd[2] == 'R' then --注册指令\n\t\ton_regest_replay(sData)\n\telseif cmd[2] == "S" then -- 实时数据\n\t\ton_data_replay(sData)\n\telseif cmd[2] == "H" then -- 历史数据\n\t\ton_data_replay(sData)\n\telse\n\tend\n\n local resultData =json.encode(out)\n log.debug("fs_people_design: result=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\nlocal len = string.len(str);\nlocal hex='';\nfor i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\nend\nreturn hex;\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\non_regest_replay=function(sData)\n\tlocal acq = '$08,RA,0,1,#'\n\tacq = toHexStr(acq)\n\t--分两次发送08,RA,0,1,#\\n\n\tctx:asend(acq)\n log.debug("fs_people_design: asend acq= %s",acq)\n\tctx:asend('0A')\nend\n\non_alarm_replay=function(alarmtype)\n\tlocal acq = '$08,AC,0,7,#\\n'\n\tif tostring(alarmtype) == '3' then \n\t\tacq = '$08,AC,0,3,#\\n'\n\tend\n\tacq = toHexStr(acq)\n\tctx:asend(acq)\n\nend \n\non_data_replay=function(sData)\n\tlocal str = Split(sData,',')\n\tlocal alarm = str[15]\n\tif tostring(alarm) == '8' then --SOS报警\n\t\ton_alarm_replay('3')\n\t\tout.data.alarm ='SOS报警'\n\tend\n\t\tif tostring(alarm) == '128' then --报道报警\n\t\ton_alarm_replay('7')\n\t\tout.data.alarm ='报道报警'\n\tend\n\tlocal power = tonumber(str[18])\n \tlocal langdata = tonumber(string.sub(str[5],3,-1))/60\n \tlog.debug("langdata=%s",langdata)\n\tlocal lang = tonumber(string.sub(str[5],1,2))+langdata\n\tlocal long = tonumber(string.sub(str[7],1,3))+tonumber(string.sub(str[7],4,-1))/60\n\tout.data.power = power\n\tout.data.lang = lang\n\tout.data.long = long\t\t\nend INLINE 2018-12-13 09:40:26.952+08 2018-12-19 09:43:20.276+08 2018-12-13 \N
+030de29c-d4cb-4747-9885-3a81f9cf61ba yh5700.lua \N 1.0 48d081a7-0a5a-42cb-810c-029c445b96b5 48d081a7-0a5a-42cb-810c-029c445b96b5 f 48d081a7-0a5a-42cb-810c-029c445b96b5 Lua --//04 项目资料/2017-06/基坑监测/银河传感器数据通信协议V2.1(1).pdf\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift\n\n\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\n--AA75100001002841998500000004170620105130FFFF00010FFFFFF0001020204B4E1A3131313131313131313131313131313132323232323232320E\n--moduleId=2841998500000004\n--value=0.1 offsetvalue=409.5 temp=-0.1\nstart=function()\n log.debug("load script %s, moduleId=%s", "yh5700.lua", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0xAA, endian)\n --buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 0x75, endian) -- 1: 指令: 0x01 = 采集\n\tbuff=iota.appendHexByte(buff, 0x10, endian) -- 1: 通道号\n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x0E, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\n\t--模块号部分\n \tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("yh5700 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("yh5700 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\tbuff=buff..moduleNo\n\t--日期部分\n\tlocal strDate=os.date("%y%m%d",os.time())\n --log.debug("yh5700 m=%s 日期=%s",moduleNo,strDate)\n\tlocal strTime=os.date("%X",os.time())\n --log.debug("yh5700 m=%s 时间=%s",moduleNo,strTime)\n\tlocal strYear=string.sub(strDate,1,2)\n\tlocal strMonth=string.sub(strDate,3,4)\n\tlocal strDay=string.sub(strDate,5,6)\n \n\tlocal strHour=string.sub(strTime,1,2)\n\tlocal strMinute=string.sub(strTime,4,5)\n\tlocal strSecond=string.sub(strTime,7,8)\n\tlocal datebuff=strYear..strMonth..strDay..strHour..strMinute..strSecond\n buff=buff..datebuff\n\t--结尾 需添加00\n \tlocal xorStr=iota.hexCheckXor(buff.."00",0)\n \tlog.debug("yh5700: [m=%s] Xor=%s",moduleNo,xorStr)\n\tbuff=iota.appendHexByte(buff, xorStr, endian)\n \tlog.debug("yh5700 [m=%s] 发送采集命令 cmd=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\t \n local result={}\n if ok then\n \tlog.debug(string.format("yh5700 [m=%s], resp=%s",moduleNo,resp))\n result = unmarshall(resp,moduleNo) \n \t\t\n else\n \t log.debug("yh5700 [m=%s] 数据接收超时 ok=%s resp=%s",moduleNo,ok,resp)\n \t local errorout={\n data ={},\n result = {}\n }\n \t errorout.result = {code=1003,msg="采集超时"}\n result=json.encode(errorout)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if string.sub(hex,13,28) ~= string.lower(moduleStr) then \n errcode = 1001\n errormsg = 'Hex moudleId is False' \n log.debug("yh5700 模块号校验失败 moduleStr=%s string.sub(hex,13,28)=%s ",string.lower(moduleStr),string.sub(hex,13,28))\n return json.encode(out)\n end\n log.debug("yh5700 模块号校验通过")\n if ErrorCode then \n local temp = iota.hexToShort(hex,20,'B')*0.1\n\t\t--bit:_and(0xFF,bit:_rshift(tempByte[1],3))==0x1f\n\t\tlocal buffer34=string.sub(hex,34*2+1,34*2+2)\n log.debug("yh5700 buffer34:"..buffer34)\n log.debug("yh5700 buffer34类型:"..type(buffer34))\n --log.debug("buffer34:转换数字"..(tonumber(buffer34)))\n local offset=bit:_rshift(bit:_and(tonumber(buffer34,16),0xF0),4)\n\t\tlocal value1=iota.hexToShort(hex,22,'B')--应变\n \tlocal value2=iota.hexToShort(hex,24,'B')--偏移值\n\t\tlocal value=value1/(10^offset)\n\t\tlocal offsetValue=value2/(10^offset)\n \tlocal unit=hexToStr(string.sub(hex,30*2+1,30*2+6))\n\t\tlog.debug("yh5700 系数 m=%s offset=%s unit=%s",moduleStr,offset,unit)\n if unit=="KPa" then --单位转换为MPa\n value=value/1000.0\n \tend\n --协议能力输出先不改 \n out.data = {\n temp=temp,\n value = value,\n offsetValue = offsetValue\n }\n\t\t\n else\n log.debug("yh5700 [m=%s] 校验失败[%s]",moduleStr,errormsg)\n out.result = {code=errcode,msg=errormsg} \n end\n \tlog.debug("yh5700 [m=%s] 数据=%s",moduleStr,json.encode(out))\n return json.encode(out)\nend\n\nIsValid = function(checkData)\n local data=checkData\n log.debug('yh5700 开始校验data=%s',data)\n \n\n --厂家说 通讯过程 错误字符在485线路上是比较常见的 需要依字节排查\n --找头\n local startIndex=string.find(data, "557a", 1)\n if startIndex~=nil then\n data=string.sub(data,startIndex,-1)\n end\n\n \n local dataLen = string.len(data) / 2\n if data == nil or dataLen < 8 then\n errormsg = string.format('Data is nil or Invalid length<8[%s]', checkData)\n errcode = 1002\n return false\n end\n local respose_head=string.sub(data,1,6)\n if respose_head ~= '557a10' then\n errcode = 1003\n errormsg = 'respose_head ~= 557a10'\n return false\n end\n\n local checkLen=string.sub(data,7,10)\n local len=7+tonumber(checkLen,16)\n if dataLen < len then\n errormsg = string.format('DataLen is invalid length<%s[%s]', len,checkData)\n errcode = 1002\n return false\n end\n\n\n log.debug('yh5700 校验通过data=%s',data)\n return true\n --crc\nend\n\n--HEX字符串->ascii字符串\nhexToStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend INLINE 2017-12-01 17:56:30.093+08 2020-07-06 10:04:06.207+08 2017-12-01 \N
+bf768303-c930-4c11-8397-4676f65152f9 jm_lvdt_1550 \N 总线型位移计指令表--金马静力水准仪协议 传感器单独使用 1.0 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c f 5b2dc320-50f8-4461-87fc-03b66e3e5e4c Lua --//04 项目资料/2017-12/总线型位移计指令表--金马静力水准仪协议.pdf \n--老版本协议 数据9个字节 新版本13个 加了4个字节的温度 本协议是老版本\nstart=function()\n log.debug("start %s, moduleId=%s", "jm_lvdt_1550.lua",device.props.moduleId or 'nil')\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0x23, endian) \n buff=iota.appendHexByte(buff, 0x2b, endian) \n\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jm_lvdt_1550 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jm_lvdt_1550 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\n\t\n if string.len(moduleNo)<6 then\n local strlen=6-string.len(moduleNo)\n \tfor i=1,strlen do\n moduleNo='0'..moduleNo\n end \n end\n buff= buff..toHexStr(string.sub(moduleNo,1,1)) \n buff= buff..toHexStr(string.sub(moduleNo,2,2))\n buff= buff..toHexStr(string.sub(moduleNo,3,3))\n buff= buff..toHexStr(string.sub(moduleNo,4,4))\n buff= buff..toHexStr(string.sub(moduleNo,5,5))\n buff= buff..toHexStr(string.sub(moduleNo,6,6))\n log.debug("jm_lvdt_1550 moduleId=%s send: %s",moduleNo or 'nil',buff)\n ok,resp=ctx:ssend(buff,60000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n \tlog.debug("jm_lvdt_1550 moduleId=%s result= %s",moduleNo,result)\n \t ctx:done(result)\n else\n log.debug("jm_lvdt_1550 moduleId=%s 数据采集失败 resp=%s",moduleNo or 'nil',resp)\n end\n \nend\n\nunmarshall=function(hex,moduleStr)\n --245961485949634863 moduleId=1\n --"level":1095.05,\n \n log.debug("jm_lvdt_1550 moduleId=%s recv: %s",moduleStr or 'nil',hex)\n --log.debug("jm1550收到数据:"..hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n \n \n local level=((tonumber(string.sub(hex,3,4),16)-48)*16+(tonumber(string.sub(hex,5,6),16)-48)+(tonumber(string.sub(hex,7,8),16)-48)*16*16*16+(tonumber(string.sub(hex,9,10),16)-48)*16*16)/100\n local level0=((tonumber(string.sub(hex,11,12),16)-48)*16+(tonumber(string.sub(hex,13,14),16)-48)+(tonumber(string.sub(hex,15,16),16)-48)*16*16*16+(tonumber(string.sub(hex,17,18),16)-48)*16*16)/100\n out.data = {\n level=level,\n level0=level0\n }\n\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleCheck)\n log.debug("jm_lvdt_1550 moduleId=%s 校验数据 data= %s",moduleCheck,data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n log.debug('jm_lvdt_1550:模块%s数据校验失败Data is nil or invalid length[%s] hex=%s',moduleCheck,string.len(data)/2,data)\n return false\n end\n log.debug('CMD=%s',iota.hexToByte(data,0,'B'))\n if iota.hexToByte(data,0,'B') ~= 0x24 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n \tlog.debug('jm_lvdt_1550:模块%s数据校验失败 Hex CMD False hex=%s',moduleCheck,data)\n return false\n end\n\n log.debug("jm_lvdt_1550 moduleId=%s 校验通过 data= %s",moduleCheck,data)\n return true\n--crc\nend\n\n -- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n INLINE 2018-01-10 10:46:21.862+08 2018-10-31 11:07:29.234+08 2018-01-08 \N
+814665db-0ede-4cc6-90de-ac291cdbf814 zh_inclination_1540 \N 东方中恒单轴倾角协议 1.0 5c2a5b34-3127-4921-bf54-49378012c0b0 5c2a5b34-3127-4921-bf54-49378012c0b0 f 5c2a5b34-3127-4921-bf54-49378012c0b0 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n\n\nstart=function()\n log.debug("start %s, ctx=", "zh_inclination_1540.lua",json.encode(device))\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n\tlocal module = iota.hexToByte(PadLeft(2,0,device.props.moduleId) ,0,'B')\n\t\n if module > 255 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255'}\n ctx:done(json.encode(errout))\n else\n local moduleNo=uintToBytes(tonumber(device.props.moduleId))\n buff=iota.appendHexByte(buff, 0x46, endian) \n buff=iota.appendHexByte(buff, 0x54, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x01, endian)\n buff=iota.appendHexByte(buff, 0x13, endian)\n buff=iota.appendHexByte(buff, 0x01, endian)\n buff=iota.appendHexByte(buff, 0x01, endian)\n buff=iota.appendHexByte(buff, 0x01, endian)\n buff=iota.appendHexByte(buff, 0x01, endian)\n buff=iota.appendHexByte(buff, moduleNo[1], endian) -- 4: 模块号\n buff=iota.appendHexByte(buff, moduleNo[2], endian) \n buff=iota.appendHexByte(buff, moduleNo[3], endian) \n buff=iota.appendHexByte(buff, moduleNo[4], endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n local hi,lo = checkPlusSum16(buff,2,16) --CRC\n local histr = string.format("%02X",hi)\n local lostr = string.format("%02X",lo)\n buff = buff..histr..lostr\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\n end\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n --46540001130101010100000001000005170035 \n --moduleId=1 "angleX": 13.03\n local inclination = iota.hexToInt(hex,13,'B')/100.0\n\n out.data = {\n angleX=inclination\n\n }\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 19 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x46 or iota.hexToByte(data,1,'B') ~= 0x54 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n local sumHi,sumLo = checkPlusSum16(data,2,17)\n if iota.hexToByte(data,17,'B') ~= sumHi or iota.hexToByte(data,18,'B') ~= sumLo then\n errcode = 1003\n errormsg = 'checkPlusSum16 is Error ' \n return false\n end\n local module = bytesToUint(data,9)\n log.debug("module=%d",module)\n if tonumber(device.props.moduleId) ~= module then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\nuintToBytes=function(value)--高位在前地位在后\n local src={}\n \n local byte = bit:_and(bit:_rshift(value , 24) , 0xFF)\n table.insert(src,byte)\n byte = bit:_and(bit:_rshift(value , 16) , 0xFF)\n table.insert(src,byte)\n byte = bit:_and(bit:_rshift(value , 8) , 0xFF)\n table.insert(src,byte)\n byte = bit:_and(value , 0xFF)\n table.insert(src,byte)\n return src \n \nend\n\n\nbytesToUint=function(src,offset)--高位在前地位在后\n \n local value = 0\n value = bit:_or(bit:_or(bit:_or(bit:_lshift(bit:_and(tonumber(string.sub(src,2*offset+1,2*(offset+1)),16) , 0xFF) , 24)\n , bit:_lshift(bit:_and(tonumber(string.sub(src,2*(offset+1)+1,2*(offset+2)),16) , 0xFF) , 16))\n , bit:_lshift(bit:_and(tonumber(string.sub(src,2*(offset+2)+1,2*(offset+3)),16) , 0xFF) , 8))\n , bit:_and(tonumber(string.sub(src,2*(offset+3)+1,2*(offset+4)),16) , 0xFF))\n return value;\nend\n\ncheckPlusSum16=function(data,startindex,endindex)\n local sum = 0\n for i=startindex,endindex-1 do\n if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)),16)) % 0xffff \n end\n end \n local hi = bit:_and(bit:_rshift(sum,8) , 0xff)\n local lo = bit:_and(sum , 0xff)\n return hi,lo\nend \n\nPadLeft=function(cnt,num,hex)\n local len = string.len(tostring(hex))\n local offset = cnt -tonumber(len)\n if offset == 0 then \n return hex\n else\n for i = 1,offset do \n hex = tostring(num)..tostring(hex)\n end\n end\n return hex\nend INLINE 2017-09-25 10:38:09.039+08 2018-02-28 18:32:12.208+08 2017-09-23 \N
+1ee103da-e152-4e3d-8339-1606813a19c3 11 \N 11 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 f 94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26 Lua sdf INLINE 2018-01-22 17:18:19.833+08 2018-01-30 13:56:39.422+08 2018-01-22 \N
+46106eaa-ff62-41cf-b93f-26fd6b48fe1d 9000A \N 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start=function()\n log.debug("9000A start moudleid=%s", device.props.pointId or "nil")\n local pointId==device.uplink.props.URL\n local payload={\n queryDataPoint={ \n slaveIndex=device.props.slaveIndex, --要查询的数据点所属从机序号\n pointId=device.props.pointId --要查询的数据点 id\n }\n \n ctx:ssend(\n\t{ \n type="mqtt",\n\t payload=json.encode(payload)\n } \n },\n 3000) \nend \n\nonData=function(data) \n\n --subject: string -- 状态码, 对应 statusCode, 譬如 200\n --payload: string -- 应答 数据, 自行解码.\n if data ~=nil then\n log.debug("9000A:payload=%s", data.payload)\n parseDiag(data.payload)\n\n else\n log.error("9000A:data is nil")\n end\nend\n\nfunction parseDiag(js)\n local out={\n data ={},\n result = {},\n type=2\n }\n\n\n\n local data1 ={\n data={\n anglex = dj.RV[1] or 0,\n angley= dj.RV[2] or 0,\n temperature= dj.RV[3] or 0, \n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n table.insert(out.data,data1)\n\n\n local resultData =json.encode(out)\n log.debug("9000A:".."LUA:resultData : data is =%s", json.encode(out))\n ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(channelNoId)\n if device.dnlinks[1].devices ~=nil then\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t \t if child.uplink.props.channel == tostring(channelNoId) then\n return child\n \t end\n\t\tend\n else\n log.debug("zdhl_air_1:".."subdevices是nil")\n \treturn nil\n end\nend\n INLINE 2018-06-28 15:30:11.835+08 2018-06-28 15:30:11.835+08 2018-06-28 \N
+ccd4746c-7684-408a-941b-20b9baad024b njsy__8500 \N 1.0 d8e712e8-731c-45ed-8c90-23504d4e7daf d8e712e8-731c-45ed-8c90-23504d4e7daf f d8e712e8-731c-45ed-8c90-23504d4e7daf Lua start=function() \n ok,resp=ctx:asend("01020304")\nend\n\n\nonData=function(hex)\n log.debug("njsy__8500 收到数据=%s", hex)\n --log.debug("njsy__8500 device =%s", json.encode(device))\n local out={\n data ={},\n result = {},\n type=2\n }\n local data=hex\n \n local ErrorCode = IsValid(data)\n if ErrorCode then\n log.debug('njsy__8500 数据有效=%s',data)\n --数据回复\n local sensorId_index=7\n local sensorTime_index=21\n local dataType_index=38\n\n local sensorId_hex=string.sub(data,sensorId_index*2-1,(sensorId_index+13)*2)\n local sensorId=HextoStr(sensorId_hex)\n local sensorTime=string.sub(data,sensorTime_index*2-1,(sensorTime_index+16)*2)\n local dataType=string.sub(data,dataType_index*2-1,dataType_index*2)\n\n if dataType=='00' then --定位数据\n --回复定位数据\n local hexStr='232300129013'..sensorId..sensorTime..'00'\n local resp_hexStr_location=iota.appendHexCrc(hexStr, 'L' ,0)\n resp_hexStr_location=resp_hexStr_location..'0d0a'\n --ok=ctx:asend("resp_hexStr_location")\n elseif dataType=='ff'then --设备数据\n local dataLength=tonumber(string.sub(data,5,8),16)\n local dataCount=math.modf(dataLength/30)\n log.debug("njsy__8500 sensorID=%s",sensorId)\n for i=1,dataCount,1 do\n \n \n local childDevice=getDeviceInfo(sensorId)\n if childDevice~=nil then\n --分析单类数据\n local sensorTime_hex=string.sub(data,sensorTime_index*2-1+(i-1)*30*2,(sensorTime_index+16)*2+(i-1)*30*2)\n local sensorValue_hex=string.sub(data,sensorTime_index*2-1+(i-1)*30*2+20*2,(sensorTime_index+7)*2+(i-1)*30*2+20*2)\n local timenow=unixtimestamp(sensorTime_hex)\n -- local phy1=hexToDouble(sensorValue_hex,0,'B')\n --local phy2=hexToDouble(sensorValue_hex,4,'B')\n local phy1=iota.hexToFloat(sensorValue_hex,0,'B')\n local phy2=iota.hexToFloat(sensorValue_hex,4,'B')\n local data1 = {\n data={\n temperature=phy1,\n humidity=phy2\n },\n device=childDevice.id,\n time=timenow, \n type=1 \n } \n table.insert(out.data,data1)\t\t\t\t\t\t\t\t\t\n \n log.debug("njsy__8500 data=%s",json.encode(out))\n else\n log.debug("njsy__8500 childDevice=nil")\n end\n end\n \n end\n\n local timeStr=os.date("%Y%m%d-%H%M%S",os.time())\n local timeResponse="3c74696d656375723a"..StrToHex(timeStr).."0d0a"\n ok=ctx:asend(timeResponse)\n \n local length={}\n local temp={}\n local channelCounts_hex=string.sub(data,27,28)..string.sub(data,25,26)\n\n local channelCounts=tonumber(channelCounts_hex,16)\n for i=1,channelCounts,1 do\n length[i]=iota.hexToShort(data,14+(i-1)*4,'L')\t\n temp[i]=iota.hexToShort(data,14+(i-1)*4+2,'L')\n end\n\n else\n out.result = {code = errorcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\n\nend\n\nIsValid=function(data)\n local checkdatalength=string.len(data)/2\n\n if checkdatalength<54 then\n errormsg = string.format('data length is wrong[%s]',checkdatalength)\n errorcode = 1001\n --ok=ctx:asend("4552")\n return false\n end\n\n if string.sub(data,1,4) ~= '2323' or string.sub(data,-4,-1)~='0d0a' then \n errormsg = 'Data is Invalid'\n errorcode = 1001\n --ok=ctx:asend("4552")\n return false\n end\n \n log.debug("njsy__8500 校验通过")\n return true\nend\n--累加和校验\nfunction CheckPlusSum(str, startIndex, endIndex)\n local sum = 0\n for i = startIndex, endIndex,4 do\n sum = (sum + tonumber(string.sub(str,i+2,i+3)..string.sub(str,i,i+1),16)) % 0x10000\n end \n local result = sum \n return result\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("njsy__8500 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index,child in pairs(device.dnlinks[1].devices) do\n -- log.debug("njsy__8500:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n local moduleStrCheck\n \n moduleStrCheck=child.props.sensorID --模块 通道 优先接口获取\n \n --log.debug("njsy__8500 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck) \n if moduleStrCheck==moduleNoId then \n log.debug("njsy__8500: m=%s 匹配到子设备child=%s",moduleStrCheck,json.encode(child))\n return child\n end\n end\n else\n log.debug("njsy__8500: subdevices是nil")\n return nil\n end\nend\n\nunixtimestamp=function(datestr)\n --3230313830343130313033353530343530\n log.debug("JCLQ2021 datestr=%s",datestr)\n local datebuff={}\n for i=1,string.len(datestr)/2,1 do\n datebuff[i]=string.sub(datestr,(i-1)*2+1,i*2)\n end\n local year = tonumber(string.char(tonumber(datebuff[1],16),tonumber(datebuff[2],16),tonumber(datebuff[3],16),tonumber(datebuff[4],16)))\n\tlocal month = tonumber(string.char(tonumber(datebuff[5],16),tonumber(datebuff[6],16)))\n\tlocal day = tonumber(string.char(tonumber(datebuff[7],16),tonumber(datebuff[8],16)))\n local hour = tonumber(string.char(tonumber(datebuff[9],16),tonumber(datebuff[10],16)))\n local minute = tonumber(string.char(tonumber(datebuff[11],16),tonumber(datebuff[12],16)))\n local second = tonumber(string.char(tonumber(datebuff[13],16),tonumber(datebuff[14],16)))\n --log.debug("njsy__8500 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\t--log.debug("njsy__8500 timenum=%s",timenum)\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\tlog.debug("njsy__8500 recordTime=%s",recordTime)\n\treturn recordTime\nend\n\nhexToDouble=function(hex,index,endian)\n local stacklen = string.len(hex)\n if stacklen < 3 then\n return nil\n end\n local buff = string.sub(hex,2*index+1,2*(index+8))\n local data = 0\n if endian == 'B' then\n\n local d = tonumber(string.sub(buff,1,3),16)\n local f = tonumber('1'..string.sub(buff,4,16),16)\n\n data = (-1)^0 * f *(2^(-52)* 2^(d-1023)) \n return data\n elseif endian == 'L' then\n local bi = ''\n for i=1,8 do\n bi = bi..string.sub(buff,-2*(i),-1*(2*i-1))\n end\n\n local dl = tonumber(string.sub(bi,1,3),16)\n local fl = tonumber('1'..string.sub(bi,4,16),16)\n\n data = (-1)^0 * fl *(2^(-52)* 2^(dl-1023)) \n return data\n else\n return nil\n end \nend\n\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend INLINE 2018-09-13 16:48:48.839+08 2018-09-21 14:37:18.48+08 2018-09-13 \N
+adc151ff-eda9-4130-9f47-0c1adb863ae8 anXin_laser_9514 \N 安信激光测距(请求应答) 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0xFF, endian) --1: 帧头\n buff=iota.appendHexByte(buff, 0x41, endian)\n buff=iota.appendHexByte(buff, 0x58, endian)\n buff=iota.appendHexByte(buff, 0x4a, endian)\n buff=iota.appendHexWord(buff, 7, endian) -- 2: 类型=1\n buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 3: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 4: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 5: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,4000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==26) then\n -- 2 2 1 4 4 2\n -- \n \n --print("parsing data", hex)\n local distance = iota.hexToShort(hex,9,'B')/ 10000\n out.data = {\n distance=distance\n }\n \n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2017-09-01 17:02:12.455+08 2019-12-23 14:44:25.871+08 2017-09-01 \N
+0cbce951-a9a9-4eed-b235-fad6a532803b BeiDou_4800 \N 占位 1.0 37315d9c-8e25-4ec7-901b-851fdcb94068 37315d9c-8e25-4ec7-901b-851fdcb94068 f 37315d9c-8e25-4ec7-901b-851fdcb94068 Lua --//02 协议分析/2017-04/优先接入/天津滨海工业研究院港口监测项目/孔隙水压力及分层沉降无线数据采集 通讯协议V1.03.docx\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n--\n\n--\nstart=function()\nlog.debug("load script %s, moduleId=%s", "beidou_4800.lua", device.props.moduleId or "[nil]")\n log.debug("beidou_4800:".."LUA: ctx is =%s", json.encode(device))\n ok,resp=ctx:ssend("0102030405060708",15000)\n log.debug("beidou_4800:".."测试下发正常")\nend\n\n\n--44415430313A42503030303031352C31372D30342D32352031303A32343A33392C30313736392C30313736392C30313736392C30313736392C30313736392C30313630302C30313630322C30313630382C30313539382C30313630302C30323130382C30323130382C30323130382C30323130382C30323130382C30313432302C30313432382C30313432362C30313432382C30313432342C30313534312C30313534322C30313534302C30313534322C30313534332C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C454E44\nonData=function(hex)\n log.debug("beidou_4800:".."LUA: onData: Received data ==> %s", hex)\n\t--log.debug("beidou_4800:".."LUA:device : data is =%s", json.encode(device))\n --log.debug("beidou_4800:".."LUA:subdevices : data is =%s", json.encode(device.dnlinks[1].devices))\n\n local out={\n data ={},\n result = {},\n type=2\n }\n \n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n sData=HexToStr(hex)\n --log.debug("beidou_4800:sData是 %s",sData)\n --获取子字符串表\n local allResponse=Split(sData,',')\n local moduleNo_str=string.sub(allResponse[1],4,5)\n local moduleNo=tonumber(moduleNo_str)\n\t\tlocal channelNo\n\n\t\tif moduleNo==1 then\n --分析单类数据\n for k=2+1,table_leng(allResponse)-1,5 do\n\t\t\t local singleData=v\n\t\t\t\t--移除单类数据中的空 \n\n\t\t\t\t\n\t\t\t\t \n\t\t\t\t channelNo=(k-2)/5+1\n\t\t\t\t channelNo=getIntPart(channelNo)\n\t\t\t\t\t--解析单条数据\n\t\t\t\t\tlocal frequency1=tonumber(allResponse[k])\n\t\t\t\t\tlocal frequency2=tonumber(allResponse[k+1])\n\t\t\t\t\tlocal frequency3=tonumber(allResponse[k+2])\n\t\t\t\t\tlocal frequency4=tonumber(allResponse[k+3])\n\t\t\t\t\tlocal frequency5=tonumber(allResponse[k+4])\n\t\t\t\t \n\t\t\t\t\tlocal freq=frequency1+frequency2+frequency3+frequency4+frequency5-math.max(frequency1,frequency2,frequency3,frequency4,frequency5)-math.min(frequency1,frequency2,frequency3,frequency4,frequency5)\n\t\t\t\t\tlocal agvfreq=freq/3.0\n\t\t\t\t\t--log.debug("beidou_4800:当前模块%s通道%s的agvfreq是:%s",moduleNo,channelNo,agvfreq)\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo) \n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal deviceId=childDevice.id\t\n\t\t\t\t\t\tlocal k = childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\tlocal f0 = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\tlocal phy\t\t\t\n\t\t\t\t\t\tif k ==nil or f0 ==nil then\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlog.debug("beidou_4800:模块%s通道%s的公式参数为空是:k=%s,f0=%s",moduleNo,channelNo,k,f0)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tphy =k * (agvfreq ^ 2 - f0 ^ 2)\n\t\t\t\t\t\t\tlog.debug("beidou_4800:模块%s通道%s的当前的phy是:%s",moduleNo,channelNo,phy)\n\t\t\t\t\t\tend\n\t\t\t\t\t\t\t \n\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\tfrequency=agvfreq,--每路有5次测量值 只展示平均值\n\t\t\t\t\t\t\t\t\t\t\tphy=phy\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\ttable.insert(out.data,data1)\t\t\t\n\t\t\t\t\t\tlog.debug("beidou_4800:模块%s,通道%s deviceId=%s,frequency结果frequency=%s,phy=%s",moduleNo,channelNo,deviceId,agvfreq,phy)\n\t\t\t\t\tend\t\t\t\t\t\t\n\t\t\tend\n\t\telseif moduleNo==2 then\n\t\t\tlocal electricity=tonumber(allResponse[3])\n\t\t\tlocal temp=tonumber(allResponse[4])\n\t\t\t\n\t\t\tfor k=4+1,table_leng(allResponse)-1,1 do\n\t\t\t local singleData=v\n\t\t\t\t--移除单类数据中的空 \n\n\n\t\t\t\t \n\t\t\t\t channelNo=k-3\n\t\t\t\t\t--解析单条数据\n\t\t\t\t\tlocal distance=tonumber(allResponse[k])\n\t\t\t\t\t\n\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal deviceId=childDevice.id\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\tdistance=distance,\n\t\t\t\t\t\t\t\t\t\t\ttemp=temp,\n\t\t\t\t\t\t\t\t\t\t\telectricity=electricity\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tlog.debug("beidou_4800:模块%s,通道%s,deviceId=%s,distance=%s,temp=%s,electricity=%s",moduleNo,channelNo,deviceId,distance,temp,electricity)\t\n\t\t\t\t\tend\n\t\t\tend\t\n\t\telse\n\t\t\tlog.debug("beidou_4800:moduleNo !=1 and moduleNo !=2",Phy)\n\t\tend \n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("beidou_4800:通知处理展示数据 data is =%s", json.encode(out))\n ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n \tif child.uplink.props ~='null' or child.uplink.props.module==tostring(moduleNoId) or child.props.moduleId==tostring(moduleNoId) then\n\t\t \t if child.uplink.props.channel == tostring(channelNoId) or child.props.channelId == tostring(channelNoId) then\n log.debug("beidou_4800:".."DeviceInfo是:"..tostring(child.deviceId))\n \t\t log.debug("beidou_4800:".."子设备原形child=%s",json.encode(child))\n \t --return child.deviceId\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("beidou_4800:".."subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function(data)\n log.debug('beidou_4800:开始校验数据')\n if data == nil or string.len(data)/2 < 3 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('beidou_4800: 数据 长度校验失败:Data is nil or invalid length')\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x44 or iota.hexToByte(data,string.len(data)/2-1,'B') ~= 0x44 or iota.hexToByte(data,1,'B') ~= 0x41 then\n errcode = 1003\n errormsg = 'CMD is wrong ' \n\t\tlog.debug('beidou_4800: 数据校验失败:CMD错误')\n return false\n end\n log.debug('beidou_4800:校验数据通过!!!')\n return true\nend\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n\n--Hex字符串->ascii字符\nHexToStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\nfunction getIntPart(x) --取整\n if x<= 0 then\n return math.ceil(x)\n end\n if math.ceil(x) == x then\n x = math.ceil(x)\n else\n x = math.ceil(x)-1\n end\n\n\n return x\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\n\nend\n\n INLINE 2018-01-08 16:54:43.786+08 2018-03-23 10:09:33.029+08 2018-01-06 \N
+99b4ff2d-6b14-4ab0-9e98-b2d349bc74d3 133 \N 1 32fed51e-ebe8-4cbe-978d-9e018288d245 32fed51e-ebe8-4cbe-978d-9e018288d245 f 32fed51e-ebe8-4cbe-978d-9e018288d245 Lua this is a test INLINE 2018-11-01 17:23:56.789+08 2018-11-01 17:23:56.789+08 2018-11-01 \N
+a07a4bf8-c1c2-49da-b8dc-e2f2825764a1 rtu_disater \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n --log.debug("rtu_data , device=%s=%s",json.encode(device))\nend\n\ngetJson = function(rawStr)\n local startIndex = string.find(rawStr, '{', 1)\n local str = string.sub(rawStr, startIndex, -1)\n str = string.gsub(str, '=', ':')\n str = string.gsub(str, ';', ',')\n return str\nend\nonData = function(hex)\n log.debug('rtu_data , device=%s', json.encode(device))\n log.debug('rtu_data payload=%s', hex.payload)\n --全局\n out = {\n data = {},\n result = {},\n type = 2\n }\n\n local errcode\n local errormsg\n GenrateTimeSet()\n local js = hex.payload\n local ishavepic = string.find(hex.payload, 'ds_id')\n local ispower = string.find(hex.payload, '0_0_001')\n local index = string.find(js, ':')\n if ispower == nil then\n js = string.sub(js, index + 1, -2)\n end\n local data = Split(js, ',')\n local pictime\n if ishavepic ~= nil then --判断是否为图片\n --log.debug('rtu_data data[2]=%s', data[2])\n local jsd = hex.payload\n local index = string.find(jsd, ':')\n jsd = string.sub(jsd, index + 1, -1)\n local jsd = string.sub(hex.payload, index + 1, -1)\n local datapic = Split(jsd, ',')\n --log.debug('rtu_data datapic[2] =%s', datapic[2])\n local data_t = Split(datapic[2], '}')\n --log.debug('rtu_data data_t=%s', data_t[1])\n local time_d = Split(data_t[1], '":')\n pictime = string.sub(time_d[2], 1, -2)\n T = unixtimestamp(pictime) --时间\n --log.debug('rtu_data pictime=%s', pictime)\n local index_data = string.find(data_t[2], 'FFD8')\n valuestr = string.sub(data_t[2], index_data, -1)\n --log.debug('rtu_data valuestr=%s', valuestr)\n local dev_data = string.sub(datapic[1], 2, -2)\n local data_next = Split(dev_data, '_')\n local module = data_next[2]\n local channel = data_next[1]\n --log.debug('rtu_data module = %s channel = %s ', module,channel)\n childDevice = getDeviceInfo(module, channel)\n log.debug('rtu_data childDevice=%s module = %s channel = %s ,pictime=%s ,valuestr=%s', childDevice, module, channel, pictime, valuestr)\n elseif ispower ~= nil then\n local jsonStr = getJson(js)\n local jsonData = json.decode(jsonStr)\n log.debug('rtu_data 诊断 json反序列化成功 jsonStr=%s', jsonStr)\n --测试 直接按照json解析 20201028\n local power\n local version\n local config_version\n local records\n power = jsonData['001'].value.p\n version = jsonData['001'].value.sv\n config_version = jsonData['001'].value.cv\n sensor_num = jsonData['001'].value.sn\n overstock = jsonData['001'].value.re --积压数据个数\n rouse = jsonData['001'].value.wt --唤醒次数\n loction = jsonData['001'].value.lc --存储位置\n\n local nodeData = {\n \t\tCDV=config_version,--固件版本\n P=power,--节点电量\n \t\tW=os.date('%Y-%m-%d %H:%M:%S'),--实际数据内没有时间,采用服务器实时时间\n R = overstock,--积压数据个数\n WTS = rouse, --唤醒次数\n LC = loction --存储位置(新增)\n }\n\n local rst = {\n data = {\n _data_type = 'diag',\n R = {\n base = {\n cc = {\n gpi = {\n --gp = power\n }\n },\n fw = {\n v = version,\n cv = config_version,\n sn = sensor_num\n }\n },\n node = {nodeData\n }\n }\n },\n device = device.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00')\n }\n table.insert(out.data, rst)\n else\n log.debug('rtu_data data jsoncount=%s', #(data))\n for k, v in ipairs(data) do\n if v ~= '' and v ~= nil then\n local dj = v\n log.debug('rtu_data dj=%s', dj)\n if dj ~= nil and dj ~= '' then\n --获取传感器\n local cmd = Split(dj, '=')\n log.debug('rtu_data cmd=%s value=%s,no=%s', cmd[1], string.find(cmd[1], 'value'), string.find(cmd[1], 'no'))\n if string.find(cmd[1], 'value') ~= nil then\n if string.find(dj, ';') ~= nil then\n valuedata = Split(dj, ';')\n local value = Split(valuedata[1], '=')\n vaulex = value[3]\n value = Split(valuedata[2], '=')\n vauley = string.sub(value[2], 1, -2)\n --log.debug('rtu_data valuedata=%s vauley=%s', valuedata[1], vauley)\n if #(valuedata) > 2 then\n value = Split(valuedata[3], '=')\n vaulez = string.sub(value[2], 1, -2)\n \t\t\t--log.debug('rtu_data valuedata=%s vauley=%s vauley=%s', valuedata[1], vauley,vaulez)\n end\n if #(valuedata) > 3 then\n value = Split(valuedata[3], '=')\n vaulez = value[2]\n value = Split(valuedata[4], '=')\n valuef = string.sub(value[2], 1, -2)\n --log.debug('rtu_data vaule4=%s,vaulef=%s', valuedata[4], vaulef)\n end\n\t\t\t\t\t\t\tif #(valuedata) > 4 then\n value = Split(valuedata[3], '=')\n vaulez = value[2]\n value = Split(valuedata[4], '=')\n\t\t\t\t\t\t\t\tvaulef = value[2]\n\t\t\t\t\t\t\t\tvalue = Split(valuedata[5], '=')\n valued = string.sub(value[2], 1, -2)\n --log.debug('rtu_data vaule4=%s,vaulef=%s', valuedata[4], vaulef)\n end\n else\n valuestr = cmd[2]\n end\n elseif string.find(cmd[1], 'no') ~= nil then\n --log.debug('rtu_data childDevice=%s', json.encode(childDevice))\n local sendata = Split(cmd[2], '_')\n local module = string.sub(sendata[2], 1, -1)\n local channel = string.sub(sendata[1], 2)\n log.debug('rtu_data module=%s ch=%s', module, channel)\n childDevice = getDeviceInfo(module, channel)\n elseif string.find(cmd[1], 'at') ~= nil then\n ---获取时间\n local timestr = cmd[2]\n log.debug('rtu_data timestr=%s', timestr)\n if timestr ~= '' then\n T = unixtimestamp(timestr)\n end\n elseif string.find(cmd[1], 'flag') ~= nil then\n ---获取flag 告警标记\n local flag = cmd[2]\n flag = string.sub(flag, 2, -3)\n log.debug('rtu_data flag=%s', flag)\n if flag == '1' then\n errcode = 30070001\n errormsg = '设备数据超阈值告警'\n log.debug('rtu_data 设备告警[%s,%s]', errcode, errormsg)\n end\n else\n end\n else\n log.debug('rtu_data dj=nil dj=%s', dj)\n end\n else\n log.debug('rtu_data v is nil v=%s', json.decode(v))\n end\n end\n end\n if childDevice ~= nil and childDevice ~= {} then\n log.debug('rtu_data sensor=%s,vaulez=%s', childDevice.props.sensortype,vaulez)\n if childDevice.props.sensortype == 'cx' then --测斜\n log.debug('rtu_data cx=')\n local data1 = {\n data = {\n anglex = tonumber(vaulex),\n angley = tonumber(vauley),\n\t\t\t\t\ttemperature = tonumber(vaulez)\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n \t\t--log.debug('rtu_data data1=%s', json.encode(data1))\n table.insert(out.data, data1)\n end\n if childDevice.props.sensortype == 'gscx' then --杆式测斜\n log.debug('rtu_data gscx=')\n local data1 = {\n data = {\n anglex = tonumber(vaulex),\n angley = tonumber(vauley)\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n table.insert(out.data, data1)\n end\n if childDevice.props.sensortype == 'rainfall' then --雨量\n log.debug('rtu_data rainfall=%s,T=%s', valuestr, T)\n local data1 = {\n data = {\n physicalvalue = tonumber(valuestr)\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n table.insert(out.data, data1)\n end\n if childDevice.props.sensortype == 'lf' then --裂缝\n log.debug('rtu_data ls=%s,T=%s', valuestr, T)\n local data1 = {\n data = {\n length = tonumber(valuestr)\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n table.insert(out.data, data1)\n end\n if childDevice.props.sensortype == 'wsd' then --温湿度\n log.debug('rtu_data wsd=')\n local data2 = {\n data = {\n temperature = tonumber(vaulex) or 0,\n humidity = tonumber(vauley) or 0\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n table.insert(out.data, data2)\n end\n\n if childDevice.props.sensortype == 'cj' then --激光测距\n log.debug('rtu_data cj=')\n local data2 = {\n data = {\n length = tonumber(vaulex) or 0,\n temperature = tonumber(vauley) or 0\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n table.insert(out.data, data2)\n end\n if childDevice.props.sensortype == 'zx' then --振弦\n log.debug('rtu_data zx=%s,T=%s', valuestr, T)\n local data4 = {\n data = {\n frequency = tonumber(vaulex) or 0,\n am = tonumber(vauley) or 0,\n temperature = tonumber(vaulez) or 0,\n physicalvalue = tonumber(valuef) or 0\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n table.insert(out.data, data4)\n end\n \tif childDevice.props.sensortype == 'ty' then --土压\n log.debug('rtu_data ty=%s,T=%s', valuestr, T)\n local data4 = {\n data = {\n frequency = tonumber(vaulex) or 0,\n am = tonumber(vauley) or 0,\n temperature = tonumber(vaulez) or 0,\n physicalvalue = tonumber(valuef) or 0\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n table.insert(out.data, data4)\n end\n if childDevice.props.sensortype == 'yc' then --压差\n log.debug('rtu_data yc=')\n local data3 = {\n data = {\n temperature = tonumber(vaulex) or 0,\n pressure = tonumber(vauley) or 0\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n table.insert(out.data, data3)\n end\n\t\tif childDevice.props.sensortype == 'kx' then --孔隙\n log.debug('rtu_data kx=')\n local data3 = {\n data = {\n temperature = tonumber(vaulex) or 0,\n waterlevel = tonumber(vauley) or 0\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n table.insert(out.data, data3)\n end\n if childDevice.props.sensortype == 'lx' then --拉线\n log.debug('rtu_data lx=')\n local data3 = {\n data = {\n length = tonumber(valuestr) or 0\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n table.insert(out.data, data3)\n end\n if childDevice.props.sensortype == 'gnss' then --GNSS\n log.debug('rtu_data gnss=')\n local data3 = {\n data = {\n x = tonumber(vaulex) or 0,\n y = tonumber(vauley) or 0,\n z = tonumber(vaulez) or 0\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n table.insert(out.data, data3)\n end\n if childDevice.props.sensortype == 'js' then --加速度\n log.debug('rtu_data js=')\n local data3 = {\n data = {\n gx = tonumber(vaulex) or 0,\n gy = tonumber(vauley) or 0,\n gz = tonumber(vaulez) or 0\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n table.insert(out.data, data3)\n end\t\t\n if childDevice.props.sensortype == 'qj' then --倾角\n log.debug('rtu_data qj=')\n local data3 = {\n data = {\n x = tonumber(vaulex) or 0,\n y = tonumber(vauley) or 0,\n z = tonumber(vaulez) or 0,\n\t\t\t\t\tangle = tonumber(vaulef) or 0,\n\t\t\t\t\ttrend = tonumber(vauled) or 0\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n table.insert(out.data, data3)\n end\t\n if childDevice.props.sensortype == 'tw' then --土温\n log.debug('rtu_data tw=')\n local data3 = {\n data = {\n temperature = tonumber(vaulex) or 0\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n table.insert(out.data, data3)\n end\t\n if childDevice.props.sensortype == 'hs' then --土壤含水\n log.debug('rtu_data hs=')\n local data3 = {\n data = {\n waterrate = tonumber(vaulex) or 0\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n table.insert(out.data, data3)\n end\t\n if childDevice.props.sensortype == 'nw' then --泥水位\n log.debug('rtu_data nw=')\n local data3 = {\n data = {\n waterlevel = tonumber(vaulex) or 0\n },\n result = {code = errcode, msg = errormsg},\n device = childDevice.id,\n type = 1,\n time = T\n }\n table.insert(out.data, data3)\n end\t\t\t\n if childDevice.props.sensortype == 'pic' then --capture\n log.debug('rtu_data capture= %s', childDevice.id)\n errcode = 70050001\n local data6 = {\n data = {\n alarmPic = valuestr\n },\n result = {code = errcode, msg = '触发告警抓拍'},\n device = childDevice.id,\n type = 1,\n time = T\n }\n --log.debug('rtu_data data6= %s',json.encode(data6))\n table.insert(out.data, data6)\n end\n end\n --log.debug('rtu_data out=%s',json.encode(out))\n local resultData = json.encode(out) --输出传递到平台上\n log.debug('rtu_data result_out=%s', json.encode(out))\n ctx:notify(resultData)\nend\n\nGenrateTimeSet = function()\n local cmd = '$cmd=settime&time=' .. tostring(os.date('%Y-%m-%d %H:%M:%S'))\n devmodule = device.props.moduleid\n local r1, ok = redis.get(device.id .. '_settime')\n if ok and r1 ~= nil then\n log.debug('rtu_data tiem crc=%s ,r1=%s', tostring(os.date('%Y-%m-%d')), r1)\n if r1 ~= tostring(os.date('%Y-%m-%d')) then\n local topic = devmodule .. '_settime'\n local okdev, ack = ctx:asend({type = 'mqtt', payload = cmd, topic = topic})\n if okdev then\n local crc = os.date('%Y-%m-%d')\n redis.set(device.id .. '_settime', tostring(crc))\n end\n end\n else --第一次下发\n local topic = devmodule .. '_settime'\n local okdev_first, ack_first = ctx:asend({type = 'mqtt', payload = cmd, topic = topic})\n if okdev_first then\n local crc = os.date('%Y-%m-%d')\n redis.set(device.id .. '_settime', tostring(crc))\n end\n end\nend\n\n\n--字符串ascii->字符\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n--获取采集仪下面的通道信息\nfunction getDeviceInfo(module, channel)\n local resensor = nil\n if device.dnlinks ~= nil then\n --log.debug("fsidaufile =%s:deviceInfo=%s",filename,json.encode(device))\n for i, link in pairs(device.dnlinks) do\n --log.debug("fsidaufile: = %s link=%s",filename,json.encode(link))\n for j, subdevice in pairs(link.devices) do\n --log.debug("fsidaufile: = %s sensor=%s",filename,json.encode(subdevice))\n if subdevice.uplink.props.module == module and subdevice.uplink.props.channel == channel then\n --log.debug("fsidaufile:= %s final_sensor %s=%s",filename,subdevice.uplink.props.sensorid,sensorId)\n resensor = subdevice\n end\n end\n end\n end\n return resensor\nend\n\nunixtimestamp = function(dateStr)\n -- 2018-4-28 16:10:12\n local dateStr = string.sub(dateStr, 2, -2)\n local datelist = Split(dateStr, ' ')\n --log.debug('rtu_data datelist[1]= %s ', datelist[1])\n local datebegin = Split(datelist[1], '-')\n local dateend = Split(datelist[2], ':')\n local year = tonumber(datebegin[1])\n --log.debug('rtu_data year= %s ', year)\n local month = tonumber(datebegin[2])\n local day = tonumber(datebegin[3])\n local hour = tonumber(dateend[1])\n local minute = tonumber(dateend[2])\n local second = tonumber(dateend[3])\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n log.debug('rtu_data recordTime= %s ', recordTime)\n return recordTime\nend INLINE 2019-11-06 13:56:16.494+08 2021-01-25 10:22:14.525+08 2019-11-06 \N
+976bf9fd-9b27-4c62-a317-915325daf8d4 shjy_incline_2 \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_incline_2", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_incline_2 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n buff=iota.appendHexByte(buff, 0x08, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x04, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("shjy_Pressure_2 SSend error!")\n end\n ctx:done(result)\nend\n\n--01030806814d41f4fdd9c18ee7\n--moduleId=1 \n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local anglex = iota.hexToFloat(hex,3,'L')\n local angley = iota.hexToFloat(hex,7,'L')\n \n out.data = {\n anglex=anglex,\n angley=angley\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('shjy_incline_2 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shjy_incline_2 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2018-07-09 11:41:05.709+08 2018-07-09 15:52:51.865+08 2018-07-09 \N
+6ef7b3a4-1658-4205-ae8b-1260775da50f gr_2512 \N 1.0 594398cf-af7f-421b-9b42-1cca38c79620 594398cf-af7f-421b-9b42-1cca38c79620 f 594398cf-af7f-421b-9b42-1cca38c79620 Lua start=function()\n ok=ctx:asend("010203")\nend\n--2000001001022000203200340123013204450201025505002100003500000000000000000000000000d2a2\nonData=function(hex)\n local moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\n log.debug("gr_2512 [%s] 收到数据=%s", moduleNo,hex)\n\tlog.debug("gr_2512 [%s] device =%s",moduleNo, json.encode(device))\n local out={\n data ={},\n result = {}\n }\n\t\n\n\tlocal ErrorCode = IsValid(hex,moduleNo)\n\tif ErrorCode then\n\t\tlog.debug('gr_2512 [%s] 数据有效',moduleNo)\n\t\t\n\t\tlocal Concentration={}\n\t\tlocal index=0\n\t\tfor i=1,9,1 do\t\t\n\t\t\tindex=9+(i-1)*2\n\t\t\tif i==8 then --温度(4字节)\n\t\t\t\tlocal temp_str=string.sub(hex,51,54)..string.sub(hex,49,50)\n\t\t\t\tlog.debug("gr_2512 [%s] temp_str=%s",moduleNo,temp_str)\n\t\t\t\t\n\t\t\t\tConcentration[i]=tonumber(temp_str,16)*(-1)^tonumber(string.sub(hex,47,48),16) \n\t\t\telseif i==9 then\n\t\t\t \n\t\t\t\tindex=index+2\n\t\t\t\tConcentration[i]=iota.hexToUShort(hex,index,'L',3);\n\t\t\telse\n\t\t\t\tConcentration[i]=iota.hexToUShort(hex,index,'L',3);\n\t\t end\n\t\tend\n\t log.debug("gr_2512 [%s] Concentration=%s",moduleNo,json.encode(Concentration))\n\t local k=0\n\t for k_index,v in pairs(Concentration) do\n\t\t\n\t\t\tif k_index==1 then\n\t\t\t k=1.0\n\t\t\t unit = "ug/m3"; --PM2.5\n\t\t\t elseif k_index==2 then\n\t\t\t k=1.0\n\t\t\t unit = "ug/m3"; --PM10\n\t\t\t elseif k_index==3 then\n\t\t\t k=1.0\n\t\t\t unit = "ppb"; --SO2\n\t\t\t elseif k_index==4 then\n\t\t\t k=1.0\n\t\t\t unit = "dB"; --noise\n\t\t\t elseif k_index==5 then\n\t\t\t k=0.001\n\t\t\t unit = "ppm"; --CO\n\t\t\t elseif k_index==6 then\n\t\t\t k=1\n\t\t\t unit = "ppb"; --O3\n\t\t\t elseif k_index==7 then\n\t\t\t k=0.001\n\t\t\t unit = "ppm"; --TVOC\n\t\t\t elseif k_index==8 then\n\t\t\t k=0.1\n\t\t\t unit = "℃"; --温度\n\t\t\t elseif k_index==9 then\n\t\t\t k=0.1\n\t\t\t unit = "℃"; --湿度\n\t\t\t else\n\t\t\t log.debug('gr_2512 [%s] 无匹配数据类型',moduleNo)\t\t \n\t\t\tend\n\t\t\tConcentration[k_index]=tonumber(string.format("%0.3f",v*k))\t\n\t\t\tlog.debug('gr_2512 [%s] k_index=%s ,Concentration[k_index]=%s',moduleNo,k_index,Concentration[k_index])\n \n\t\tend\n\t\t\n\t\tout.data = {\n PM25=Concentration[1], --pm2.5\n\t\t\t\tPM10=Concentration[2],\n\t\t\t\tSO2=Concentration[3],\n\t\t\t\tnoise=Concentration[4],\n\t\t\t\tCO=Concentration[5],\n\t\t\t\tO3=Concentration[6],\n\t\t\t\tTVOC=Concentration[7],\n\t\t\t\ttemperature=Concentration[8],\n\t\t\t\thumidity=Concentration[9],\n }\n\t\tlog.debug('gr_2512 [%s] out.data=%s',moduleNo,json.encode(out.data))\t\n\telse\n out.result = {code = errorcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\nend\n\nIsValid=function(data,moduleNoStr)\n log.debug("gr_2512 [%s] 校验数据=%s",moduleNoStr,data)\n\tlocal datalength=string.len(data)\n\tif string.len(data)/2 ~=43 then\n\t errormsg = 'data length is wrong'\n errorcode = 1001\n\t\tlog.debug("gr_2512 [%s] data length is wrong[%s] ",moduleNoStr,string.len(data)/2)\n return false\n end\n\t\n log.debug("gr_2512 [%s] 校验通过",moduleNoStr)\n return true\nend\n\n\n\n INLINE 2018-06-20 10:06:49.528+08 2019-02-28 09:54:32.308+08 2018-06-20 \N
+b102392b-d80d-44e7-aeac-d8491ef6b469 tst_file666666 \N 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start = function()\n log.debug('tst_file666666 : devices network =%s', json.encode(device))\n log.debug('tst_file666666 get Start ')\nend\n\nonData = function(data)\n log.debug('tst_file666666 解析data ')\n if data ~= nil then\n if data.type == 'idau/file' then\n if data.ext == '.d' or data.ext == '.dx' then\n log.debug('tst_file666666 : recvd content = %s', data.payload)\n ParseFileD(data.payload)\n --else\n --log.error("tst_file666666 : unsupported file type: %s", data.ext)\n end\n if data.ext == '.dat' then\n --log.debug("tst_file666666 : recvd content = %s",data.payload)\n ParseFileDat(data.payload)\n --else\n --log.error("tst_file666666 : unsupported file type: %s", data.ext)\n end\n else\n log.error('tst_file666666 : content type is not file, error recvd type is %s', data.type)\n end\n else\n log.error('tst_file666666 : recvd content is nil')\n end\nend\n\nfunction ParseFileDat(dathex)\n log.debug('tst_file666666 : dat content =%s', dathex)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local offset = 0\n local t = iota.hexToShort(dathex, offset, 'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex, offset, 'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex, offset, 'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex, offset, 'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex, offset, 'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId, channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex, offset, 'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex, offset, 'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex, offset, 'B') + 2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex, offset, 'B')\n offset = offset + 4\n log.debug('tst_file666666 deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s', deviceId, channel, samplefreq, filterfreq, gainamplifier, triggertype, year, mon, day, hour, min, sec)\n\n local floatcount = (string.len(dathex) / 2 - 40) / 4\n log.debug('tst_file666666 begin parse')\n local vols = {}\n for i = 1, floatcount do\n offset = 40 + (i - 1) * 4\n vols[i] = iota.hexToFloat(dathex, offset, 'L', 6)\n end\n log.debug('tst_file666666 finish parse')\n\n local rst = {\n data = {\n _data_type = 'vib',\n physicalvalue = vols,\n sampleFreq = samplefreq,\n filterFreq = filterfreq,\n gainAmplifier = gainamplifier,\n triggerType = triggertype,\n version = version\n },\n device = subdevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', os.time({year = year, month = mon, day = day, hour = hour, min = min, sec = sec}))\n }\n table.insert(out.data, rst)\n log.debug('tst_file666666 deviceid = %s, cloudvibrate=%s', deviceId, json.encode(out))\n ctx:notify(json.encode(out))\n else\n log.debug('tst_file666666 not found device module=%s channel=%s', deviceId, channel)\n end\nend\n\nfunction ParseFileD(content)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n log.debug('tst_file666666 : content =%s', content)\n local jsons = Split(content, '\\r')\n for k, v in pairs(jsons) do\n if v ~= nil and v ~= '' then\n local jsondata = json.decode(v)\n if jsondata ~= nil and jsondata ~= '' then\n local childDevice = getDeviceInfo(jsondata.M, jsondata.C)\n if childDevice ~= nil then\n --log.debug("tst_file666666 设备类型=%s,%s",childDevice.props.sensortype,json.encode(childDevice))\n if childDevice.props.sensortype == 'gnss' then\n local rst = {\n data = {\n x = jsondata.RV[1] or 0,\n y = jsondata.RV[2] or 0,\n z = jsondata.RV[3] or 0\n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000))\n }\n table.insert(out.data, rst)\n end\n if childDevice.props.sensortype == 'zd' then\n local rst = {\n data = {\n ppv = jsondata.RV[1] or 0,\n pv = jsondata.RV[2] or 0,\n rms = jsondata.RV[3] or 0\n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+16:00', (tonumber(jsondata.T) / 1000))\n }\n log.debug('tst_file666666:out data=%s', json.encode(rst))\n table.insert(out.data, rst)\n end\n\n if childDevice.props.sensortype == 'gdgs' then\n local rst = {\n data = {\n wavelength = tonumber(string.format('%0.3f', jsondata.RV[1])),\n physicalvalue = tonumber(string.format('%0.3f', jsondata.PV[1]))\n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+16:00', (tonumber(jsondata.T) / 1000))\n }\n log.debug('tst_file666666:out data=%s', json.encode(rst))\n table.insert(out.data, rst)\n end\n if childDevice.props.sensortype== 'lf' then\n local rst = {\n data = {\n wavelength = tonumber(string.format('%0.3f', jsondata.RV[1])),\n length = tonumber(string.format('%0.3f', jsondata.PV[1]))\n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+16:00', (tonumber(jsondata.T) / 1000))\n }\n log.debug('tst_file666666:out data=%s', json.encode(rst))\n table.insert(out.data, rst)\n end\n if childDevice.props.sensortype == 'gdgszx' then\n local rst = {\n data = {\n physicalvalue = jsondata.PV[1],\n temperature = jsondata.PV[2]\n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000))\n }\n log.debug('tst_file666666 gdgszx data=%s', json.encode(rst))\n table.insert(out.data, rst)\n end\n if childDevice.props.sensortype == 'standard485' then\n log.debug('tst_file666666 standard485=%s', json.encode(childDevice))\n local rst = {\n data = {\n physicalvalue = (jsondata.RV[2])\n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+16:00', (tonumber(jsondata.T) / 1000))\n }\n log.debug('tst_file666666 standard485 data=%s,time=%s', json.encode(rst), rst.time)\n table.insert(out.data, rst)\n end\n else\n log.debug('tst_file666666 line=%s childDevice is nil', k)\n end\n end\n end\n end\n --log.debug('tst_file666666 dataresult=%s', json.encode(out))\n ctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid, channel)\n log.debug('tst_file666666:查询子设备: moduleid=%s,channel=%s', moduleid, channel)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices\n for i, subdevice in pairs(subdevices) do\n --判断是否是3层采集仪结构\n if json.encode(subdevice.dnlinks) ~= '{}' then\n log.debug("tst_file666666 三层结构 二层设备=%s",submodule,json.encode(subdevice))\n for k, sublink in pairs(subdevice.dnlinks) do\n log.debug("tst_file666666 sublink=%s",json.encode(sublink))\n for u, sub_subdevice in pairs(sublink.devices) do\n log.debug("tst_file666666 sensor=%s",json.encode(sub_subdevice))\n local sensornodeId = sub_subdevice.uplink.props.module\n local sensorchannel = sub_subdevice.uplink.props.channel\n if tostring(sensornodeId) == tostring(moduleid) and tonumber(sensorchannel) == tonumber(channel) then\n log.debug('tst_file666666 三层查询 m=%s,c=%s 匹配到设备=%s', moduleid, channel, json.encode(sub_subdevice))\n\n return sub_subdevice\n else\n log.debug("tst_file666666 三层查询 m=%s[%s],c=%s[%s] 未匹配",moduleid,sensornodeId,channel,sensorchannel)\n end\n end\n end\n else\n local submodule = subdevice.uplink.props.module\n --log.debug('tst_file666666 两层查询 m=%s[%s]', moduleid, submodule)\n\n if tostring(submodule) == tostring(moduleid) then\n log.debug('tst_file666666 两层查询 m=%s, 匹配到设备=%s', moduleid, json.encode(subdevice))\n\n return subdevice\n else\n --log.debug('tst_file666666 两层查询 has no device module=%s ,[submodule=%s]', moduleid, submodule)\n end\n end\n end\n log.debug('tst_file666666 has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('tst_file666666 has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend INLINE 2019-10-22 15:17:35.702+08 2019-10-22 16:28:04.113+08 2019-10-22 \N
+00bf4878-0815-4bbf-bca6-8115561ffeaf mic_pressure_9002 \N 麦克压力变送器协议 1.0 f0e6a224-85bc-45e7-831c-119531f38d19 f0e6a224-85bc-45e7-831c-119531f38d19 f f0e6a224-85bc-45e7-831c-119531f38d19 Lua --// Documents/PMO/02 产品协议/外购产品协议/麦克公司数字化变送器通信指令集.pdf\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n--2a31372b332e3531363933420d moduleId=17 channelId=1\n--"pressure": 3.5169\n\n--2a31372b31322e323430370d moduleId=17 channelId=1\n--temp": 12.24\n\nstart=function()\n log.debug("load script %s, moduleId=%s", "mic_pressure_9002.lua", device.uplink.props.module or "[nil]")\n\t\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("mic_pressure_9002 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("mic_pressure_9002 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\tif tonumber(moduleNo) > 99 then\n local errout={\n data ={},\n result = {code = 1004,msg = '模块号大于99'}\n }\n\n local errresult = json.encode(errout)\n ctx:done(errresult)\n end\n --全局out\n out={\n data ={},\n result = {}\n }\n local endian = 'B'\n local buff=''\n local sendstr = ''\n sendstr = sendstr..PadLeft(2,0,moduleNo)\n sendstr = sendstr..'RP'\n --sendstr = sendstr..tostring(device.props.channelId)\n sendstr = sendstr..'0'\n local p1,p2 = Check(sendstr)\n sendstr = sendstr..string.format("%X",p1)..string.format("%X",p2)\n sendstr = '$'..sendstr\n buff=toHexStr(sendstr)\n buff=iota.appendHexByte(buff, 0x0D, endian)\n --log.debug("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,10000)\n local result="{}"\n if ok then\n result_pressure = unmarshall(resp,moduleNo)\n else\n \tout.result = {code = 1001, msg = '压强采集超时'}\n end\n if out.data.pressure~=nil then\n ctx:sleep(1)\n log.debug('mic_pressure_9002: m='..moduleNo..' 压强解析正常'..tostring(out.data.pressure))\n --压强正常 继续解析\n sendstr = ''\n sendstr = sendstr..PadLeft(2,0,moduleNo)\n sendstr = sendstr..'RT'\n --sendstr = sendstr..tostring(device.props.channelId)\n sendstr = sendstr..'0'\n local p1,p2 = Check(sendstr)\n sendstr = sendstr..string.format("%X",p1)..string.format("%X",p2)\n sendstr = '$'..sendstr\n buff=toHexStr(sendstr)\n buff=iota.appendHexByte(buff, 0x0D, endian)\n log.debug('mic_pressure_9002: m='..moduleNo..' 开始温度采集cmd:'..buff)\n ok,resp=ctx:ssend(buff,10000) \n if ok then\n log.debug('mic_pressure_9002: m='..moduleNo..' 温度采集成功 开始解析温度:'..resp)\n result_temp =tempunmarshall(resp,moduleNo) \n else\n log.debug('mic_pressure_9002:m='..moduleNo..' 温度采集失败')\n out.result = {code = 1001, msg = '温度采集超时'}\n end\n end\n result=json.encode(out)\n log.debug(string.format('mic_pressure_9002: m=%s,result=%s',moduleNo, result))\n ctx:done(result)\nend\n\nunmarshall=function(hex,moduleNoPcheck)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n log.debug('mic_pressure_9002: m=%s,pre =%s',moduleNoPcheck,toStrHex(hex))\n local ErrorCode = IsValid(hex,moduleNoPcheck)\n if ErrorCode then\n -- 010404800101488222\n local pdata = string.sub(toStrHex(hex),5,-3)\n pre = 0\n if string.sub(toStrHex(hex),4,4) =='-' then\n pre = tonumber(pdata) * -1\n else \n pre = tonumber(pdata) \n end\n out.data.pressure = pre\n else\n out.result = {code=errcode,msg=errormsg}\n end\n --return json.encode(out)\nend\n \ntempunmarshall=function(hex,moduleNoTcheck)\n log.debug('mic_pressure_9002: m=%s,receivedtemp =%s',moduleNoTcheck,toStrHex(hex))\n local ErrorCode = IsValidtemp(hex,moduleNoTcheck)\n if ErrorCode then\n -- 010404800101488222\n local tdata = string.sub(toStrHex(hex),5,-4)\n local temperature = 0\n if string.sub(toStrHex(hex),5,5) =='-' then\n temperature = tonumber(tdata) * -1\n else \n temperature = tonumber(tdata) \n end\n out.data.temperature = temperature\n else\n out.result = {code=errcode,msg=errormsg}\n end\n -- return json.encode(out)\nend\n\nIsValid=function(data,moduleNoStrP)\n if data == nil or string.len(data)/2 < 12 then\n errormsg = string.format('压强数据长度无效=%s<12,data=%s',string.len(data)/2,data)\n errcode = 1002\n return false\n end\n if string.sub(data,1,2) ~= '2a' or string.sub(data,-2,-1)~= '0d' then\n errormsg = string.format('压强 数据 帧头≠0x2a 或 数据帧尾≠0x0d,data=%s',data)\n errcode = 1003\n return false\n end\n log.debug('d =%s',toStrHex(data))\n \t local dataModule=string.sub(toStrHex(data),2,3)\n if PadLeft(2,0,moduleNoStrP) ~= dataModule then\n \t\n errormsg = string.format('压强数据 返回的模块号无效=%s[%s]',dataModule,moduleNoStrP)\n errcode = 1004\n return false\n end\n return true\nend\n \nIsValidtemp=function(data,moduleNoStrT)\n if data == nil or string.len(data)/2 < 12 then\n errormsg = string.format('温度 数据长度无效=%s≠12,data=%s',string.len(data)/2,data)\n errcode = 1002\n return false\n end\n if string.sub(data,1,2) ~= '2a' or string.sub(data,-2,-1)~= '0d' then\n errormsg = string.format('温度 数据 帧头≠0x2a 或 数据帧尾≠0x0d,data=%s',data)\n errcode = 1003\n return false\n end\n \tlog.debug('s =%s', toStrHex(data))\n \t local dataModule=string.sub(toStrHex(data),2,3)\n if PadLeft(2,0,moduleNoStrT) ~= dataModule then\n\n errormsg = string.format('压强数据 返回的模块号无效=%s[%s]',dataModule,moduleNoStrT)\n errcode = 1004\n return false\n end\n return true\nend\n\n\nPadLeft=function(cnt,num,hex)\n local len = string.len(tostring(hex))\n local offset = cnt -tonumber(len)\n if offset == 0 then \n return hex\n else\n for i = 1,offset do \n hex = tostring(num)..tostring(hex)\n end\n end\n return hex\nend\n\n \n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\nCheck=function(str)\n local len = string.len(str);\n local pp = 0\n for i =1,len do\n local bi = string.byte(str, i);\n pp = bit:_and(bit:_xor(bi,pp) , 0xff)\n end\n local p0 = bit:_rshift(bit:_and(pp,0xf0),4)\n local p1 = bit:_and(pp,0x0f)\n return p0,p1\nend \n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend INLINE 2017-09-06 17:35:54.57+08 2019-01-07 17:05:47.792+08 2017-09-06 \N
+65495481-c107-49ff-98c9-2c4215b38347 mas_pressure_9002 \N 麦克 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --// Documents/PMO/02 产品协议/外购产品协议/麦克公司数字化变送器通信指令集.pdf\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n--2a31372b332e3531363933420d module=17 channelId=1\n--"pressure": 3.5169\n\n--2a31362b31322e323430370d module=16 channelId=1\n--temp": 12.24\n\nstart=function()\n log.debug("load script %s, module=%s", "fs_pressure_9002.lua", device.uplink.props.module or "[nil]")\n\tif tonumber(device.uplink.props.module) > 99 then\n local errout={\n data ={},\n result = {code = 1004,msg = 'module is Invalid'}\n }\n\n local errresult = json.encode(errout)\n ctx:done(errresult)\n end\n --全局out\n out={\n data ={},\n result = {}\n }\n local endian = 'B'\n local buff=''\n local sendstr = ''\n sendstr = sendstr..PadLeft(2,0,device.uplink.props.module)\n sendstr = sendstr..'RP'\n --sendstr = sendstr..tostring(device.props.channelId)\n sendstr = sendstr..'0'\n local p1,p2 = Check(sendstr)\n sendstr = sendstr..string.format("%X",p1)..string.format("%X",p2)\n sendstr = '$'..sendstr\n buff=toHexStr(sendstr)\n buff=iota.appendHexByte(buff, 0x0D, endian)\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result_pressure = unmarshall(resp)\n end\n result=json.encode(out)\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n log.debug('fs_pressure_9002:'..'pre =%s',toStrHex(hex))\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n -- 010404800101488222\n local pdata = string.sub(toStrHex(hex),5,-4)\n pre = 0\n if string.sub(toStrHex(hex),5,5) =='-' then\n pressure = tonumber(pdata) * -1\n else \n pressure = tonumber(pdata) \n end\n out.data.pressure = pressure\n else\n out.result = {code=errcode,msg=errormsg}\n end\n --return json.encode(out)\nend\n \ntempunmarshall=function(hex)\n log.debug('fs_pressure_9002:'..'receivedtemp =%s',toStrHex(hex))\n local ErrorCode = IsValidtemp(hex)\n if ErrorCode then\n -- 010404800101488222\n local tdata = string.sub(toStrHex(hex),5,-4)\n local temperature = 0\n if string.sub(toStrHex(hex),5,5) =='-' then\n temperature = tonumber(tdata) * -1\n else \n temperature = tonumber(tdata) \n end\n out.data.temperature = temperature\n else\n out.result = {code=errcode,msg=errormsg}\n end\n -- return json.encode(out)\nend\n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = 'pressure Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x24 and iota.hexToByte(data,12,'B') ~= 0x0D then\n errormsg = 'CMD is not right,0x24 0x0D'\n errcode = 1001\n return false\n end\n log.debug('d =%s',toStrHex(data))\n if PadLeft(2,0,device.uplink.props.module) ~= string.sub(toStrHex(data),2,3) then\n \t\n errormsg = 'Invalid acq module'\n errcode = 1004\n return false\n end\n return true\nend\n \nIsValidtemp=function(data)\n if data == nil or string.len(data)/2 ~= 12 then\n errormsg = 'temp Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x24 and iota.hexToByte(data,11,'B') ~= 0x0D then\n errormsg = 'CMD is not right,0x24 0x0D'\n errcode = 1001\n return false\n end\n \tlog.debug('s =%s', toStrHex(data))\n if PadLeft(2,0,deviceuplink.uplink.props.module) ~= string.sub(toStrHex(data),2,3) then\n\n errormsg = 'Invalid acq module'\n errcode = 1004\n return false\n end\n return true\nend\n\n\nPadLeft=function(cnt,num,hex)\n local len = string.len(tostring(hex))\n local offset = cnt -tonumber(len)\n if offset == 0 then \n return hex\n else\n for i = 1,offset do \n hex = tostring(num)..tostring(hex)\n end\n end\n return hex\nend\n\n \n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\nCheck=function(str)\n local len = string.len(str);\n local pp = 0\n for i =1,len do\n local bi = string.byte(str, i);\n pp = bit:_and(bit:_xor(bi,pp) , 0xff)\n end\n local p0 = bit:_rshift(bit:_and(pp,0xf0),4)\n local p1 = bit:_and(pp,0x0f)\n return p0,p1\nend \n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n INLINE 2018-04-19 10:47:29.52+08 2018-12-13 18:27:33.783+08 2018-04-19 \N
+14ef07e7-d972-4cdd-996d-377d740d87bd zigmqtt_temp \N 1 a0524b8e-f69f-421e-b306-124dd37f4f1c a0524b8e-f69f-421e-b306-124dd37f4f1c f a0524b8e-f69f-421e-b306-124dd37f4f1c Lua start=function()\nend\n\nonData=function(rawd)\n -- @{"temperature":27.43,"linkquality":102,"humidity":72.96}\n rd=json.decode(rawd)\n --log.debug("rd=%s",json.encode(rd))\n log.debug("zigbeemqtt recv =%s", json.encode(rawd))\n result={\n type=1,\n data=rawd\n }\n ctx:notify(json.encode(result))\nend INLINE 2019-05-15 21:05:01.574+08 2019-05-15 21:55:00.535+08 2019-05-15 \N
+be045345-b692-40de-8c14-3649bb3ccbbc sz_temperature_2302 \N 1.0 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 f fa5611e2-d726-4e8f-a22c-632ef7ab7148 Lua start =function()\n log.debug('load script %s, moduleId=%s device=%s', 'sz_temperature_2302', device.uplink.props.module, json.encode(device))\n local endian = 'B'\n local buff = ''\n local errout = {\n data = {},\n result = {}\n }\n\n buff = buff .. '0F'\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n log.debug('sz_temperature_2302 设备模块 m=%s json.encode(moduleNo)=%s ', moduleNo, json.encode(moduleNo))\n\n buff = iota.appendHexByte(buff, moduleNo, endian)\n buff = buff .. '11000000000000000000000000000000' --cmd=0x11\n --log.debug('sz_temperature_2302 buff 累加前=%s ', buff)\n --buff=buff..iota.hexCheckPlusSum(buff)\n buff = buff .. string.format('%x', iota.hexCheckPlusSum(buff))\n --log.debug('sz_temperature_2302 buff 累加后=%s ', buff)\n\n buff = buff .. 'F0'\n ok, resp = ctx:ssend(buff, 18000) --实际采集需要90秒 有历史数据读取 比较快\n local result = '{}'\n if ok then\n result = unmarshall(resp, moduleNo)\n else\n out.result = {code = '1001', msg = '采集超时'}\n end\n ctx:done(result)\nend\n\n--0F001100000000000000000000000000000020F0\n--moduleId=0\n--0F00117F7F7F120519130A00200106A8FC0E5A01F4020624090B6A01F4030729110B1D01EC040610A80C3001EC0506A6A20D0B01F0060743880BA301F0070751E50C1B01F00806FC0D0F5B01F009075A620A3C01F80A0665A30C4001EC0B0265CB0B4A01E80C062E0A0FA901F00D06CD840A1501F40E067F5D0E8C01F00F07EE0D0AF601E810067CF80B5801F01100000000000C801200000000000C801300000000000C801400000000000C801500000000000C801600000000000C801700000000000C801800000000000C801900000000000C801A00000000000C801B00000000000C801C00000000000C801D00000000000C801E00000000000C801F00000000000C802000000000000C80F7F7F73890F0\nunmarshall =function(hex, moduleStr)\n log.debug('sz_temperature_2302 m=%s, recv =%s', moduleStr, hex)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n local ErrorCode = IsValid(hex, moduleStr)\n if ErrorCode then\n local dataArea = string.sub(hex, 27, -13)\n local dataTimeHexStr = string.sub(hex, 13, 24) --数据时间\n local channelCount = tonumber(string.sub(hex, 25, 26), 16)\n --单个传感器数据 占5个字节\n local dataAreaLength = string.len(dataArea) / 2\n\n for i = 1, channelCount, 1 do\n log.debug("i=%s",i)\n local singleChannelDataHexStr = string.sub(hex, 27 + (i - 1) * 10, 27 + i * 10)\n local temperature = iota.hexToUShort(singleChannelDataHexStr,3, 'B') / 16\n local channel = iota.hexToByte(singleChannelDataHexStr, 0, 'B')\n local childDevice = getDeviceInfo(moduleStr, channel)\n if childDevice ~= nil then\n local singleData = {\n data = {\n temperature = tonumber(string.format('%0.2f', temperature))\n },\n device = childDevice.id,\n type = 1\n }\n log.debug('sz_temperature_2302 m=%s,c=%s,singleData=%s', moduleStr, channel, json.encode(singleData))\n table.insert(out.data, singleData)\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n log.debug('sz_temperature_2302 m=%s,data=%s', moduleNoStr, json.encode(out))\n return json.encode(out)\nend\n\nIsValid =function(data, moduleStr)\n log.debug('sz_temperature_2302 开始校验数据=%s', data)\n if string.sub(data, 1, 2) ~= '0f' or string.sub(data, -2, -1) ~= 'f0' then\n errcode = 1003\n errormsg = string.format('回复数据的 帧头≠0x0f[%s],帧尾≠0xf0[%s] ', string.sub(data, 1, 2), string.sub(data, -2, -1))\n return false\n end\n local moduleStrCheck = tonumber(string.sub(data, 3, 4), 16)\n if moduleStrCheck ~= tonumber(moduleStr) then\n errormsg = string.format('数据中模块号无效=%s[%s]', moduleStrCheck, moduleStr)\n errcode = 1004\n log.debug('sz_temperature_2302 Invalid moduleId=%s[%s]', moduleStrCheck, moduleStr)\n return false\n end\n\n local dataChannelCount = tonumber(string.sub(data, 25, 26),16) --获取数据的长度\n local dataLen = string.len(data) / 2\n local checkLen = 13 + dataChannelCount * 5 + 6\n if dataLen ~= checkLen then\n errormsg = string.format('数据长度=%s[%s] 无效', dataLen, checkLen)\n errcode = 1002\n return false\n end\n log.debug('sz_temperature_2302 数据校验通过')\n return true\n --crc\nend\n\ngetDeviceInfo =function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("sz_temperature_2302 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n log.debug('sz_temperature_2302 查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n log.debug('sz_temperature_2302 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n else\n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.channelId\n log.debug('sz_temperature_2302 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n end\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tostring(channelStrCheck) == tostring(channelNoId) then\n log.debug('sz_temperature_2302 m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('sz_temperature_2302 subdevices是nil')\n return nil\n end\nend\n\n--异或校验\nCheckXor = function(hex)\n local len = string.len(hex) / 2\n local pp = 0\n for i = 0, len - 1 do\n local bi = iota.hexToByte(hex, i, 'B')\n pp = bit:_and(bit:_xor(bi, pp), 0x000000ff)\n --log.debug("PP是=%s",string.format("%02x",pp))\n end\n return string.format('%02x', pp)\nend INLINE 2018-12-18 18:02:11.204+08 2018-12-19 10:06:30.414+08 2018-12-18 \N
+b8fe420d-0838-4c78-be1f-6eec1246a5c9 kqzl_by \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --字符串ascii->字符\nstart=function()\n log.debug("FS_KQZL: start module %s", json.encode(device))\n\tlocal moduleid = device.uplink.props.module\n\tlocal cmd = string.format(moduleid,16)\n\tcmd=iota.appendHexByte(cmd,1,'L')\n\tcmd=iota.appendHexByte(cmd,3,'L')\n\tcmd=iota.appendHexWord(cmd,0x00,'L')\n\tcmd=iota.appendHexWord(cmd,0x0E,'L')\n\tcmd=iota.appendHexCrc(cmd, 'B' ,0)\n\tlog.debug("FS_KQZL: cmd = %s", cmd)\n\tok,resp=ctx:ssend(cmd,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex,modulestr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n local pm25 = iota.hexToShort(hex,5,'B')\n local pm10 = iota.hexToShort(hex,13,'B')\n\t\tlocal temp = iota.hexToShort(hex,13,'B')\n local humidy = iota.hexToShort(hex,29,'B')\n\t\tlocal noise = iota.hexToShort(hex,27,'B')\n out.data = {\n pm25=pm25,\n pm10 = pm10,\n\t\t\ttemp = temp,\n\t\t\thumidy =humidy,\n\t\t\tnoise = noise\n };\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n\n\n\n\nIsValid=function(alldata)\n log.debug("SMARTIT 校验开始")\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n\t\tlog.debug("SMARTIT: 校验失败 Data is nil")\n return false\n end\n return true\nend\n\n INLINE 2018-12-15 16:48:26.497+08 2018-12-28 16:48:02.414+08 2018-12-15 \N
+82631ec7-32ec-4daf-ba35-fcdbf2802c5d bjzs_level_18626 \N 1.0 78592d42-1fcc-45bb-8a00-8e246186e702 78592d42-1fcc-45bb-8a00-8e246186e702 f 78592d42-1fcc-45bb-8a00-8e246186e702 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "bjzs_level_18626.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("bjzs_level_18626 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("bjzs_level_18626 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("bjzs_level_18626,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t log.debug("bjzs_level_18626 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("bjzs_level_18626 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local length =iota.hexToUShort(hex,5,'B')\n \n out.data = { \n length=length \n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("bjzs_level_18626 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2018-07-13 16:14:42.46+08 2018-07-31 14:05:15.977+08 2018-07-13 \N
+316aaf98-e85c-4f4f-993c-d57e8252c5dd lywh__8000 \N 1.0 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 f dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 Lua \n-- start=function()\n -- log.debug("load script %s, moduleId=%s", "lywh__8000.lua", device.props.moduleId or "[nil]")\n -- log.debug("lywh__8000:".."LUA: ctx is =%s", json.encode(device))\n -- ok,resp=ctx:ssend("01020304",15000)\n -- log.debug("lywh__8000:".."测试下发01020304正常")\n --end\n\n \n \n --AA2D00FFFFFFFFFF5900301032000B0006000900220FF5FFEDFFEEFF0500090010001300F0FFF2FFEFFFEFFFBB\n --通道1 temperature=5\n --通道2 temperature=1.2\n --通道3 temperature=0.6\n --通道4 temperature=0.9\n\t --通道5 temperature=387.4\n\t --通道6 temperature=-1.1\nonData=function(hex)\n log.debug("lywh__8000 收到数据=%s", hex)\n\t--log.debug("lywh__8000 device =%s", json.encode(device))\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal data=hex\n\tif string.upper(data)=="3E74696D656375720D0A" then\n\t --请求同步服务器时间\n\t local timeStr=os.date("%Y%m%d-%H%M%S",os.time())\n\t local timeResponse="3c74696d656375723a"..StrToHex(timeStr).."0d0a"\n\t ok=ctx:asend(timeResponse)\n\tend\n\t\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\tlog.debug('lywh__8000 数据有效=%s',hex)\n\t\n\t \n local temp={}\n\t\tfor i=1,16,1 do\t\t\n\t\t temp[i]=iota.hexToShort(hex,10+i*2,'L');\t\n\t\tend\n\n\t\tlocal moduleId=device.uplink.props.module\n\t\t--分析单类数据\n for k,v in ipairs(temp) do\n\t\t\tlog.debug('lywh__8000 分析单类数据 k=%s,v=%s',k,v)\n \n\t\t\t\tlocal channelId=k\n\t\t\t\tlocal childDevice=getDeviceInfo(moduleId,channelId) \n\t\t\t\t\n\t\t\t\tif childDevice~=nil then\n\t\t\t\t log.debug('lywh__8000 moduleId=%s,channelId=%s id=%s,temperature=%s',moduleId,channelId,childDevice.id,temp[k])\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\ttemperature=temp[k]/10.0,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tend\t\n\t\tend\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\telse\n out.result = {code = errorcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n\t\n\tlocal datalength=string.len(data)\n\tif string.len(data)/2 ~=45 then\n\t errormsg = 'data length is wrong'\n errorcode = 1001\n return false\n end\t\n\n\tif string.upper(string.sub(data,1,6)) ~= 'AA2D00' then \n errormsg = 'Data is Invalid'\n errorcode = 1001\n return false\n end\n \n return true\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("lywh__8000 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t -- log.debug("lywh__8000:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t \n\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t--log.debug("lywh__8000 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\t\n\t\t\t \n \tif tonumber(moduleStrCheck)==tonumber(moduleNoId) then\n\t\t \t \n if tonumber(channelStrCheck)==tonumber(channelNoId) then\n\t\t\t\t\tlog.debug("lywh__8000: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n\t\t\t\t\treturn child\n\t\t\t\tend\n\n \t \tend\n\t\tend\n else\n log.debug("lywh__8000: subdevices是nil")\n \treturn nil\n end\nend\n\n\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\nStrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2018-06-27 14:00:52.319+08 2018-07-09 10:13:03.555+08 2018-06-27 \N
+ae1fb024-ff8b-4af2-9931-7a20585b8234 ceweiji \N 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start = function()\n log.debug('ceiwenji device=>%s', json.encode(device))\nend\n\nonData = function(hex)\n --主动上传式\n log.debug('ceiwenji Received=>%s', hex)\n local out = {\n type = 2,\n data = {},\n result = {}\n }\n\n local index_sign = 7\n local index_data = 5\n\n\n local moduleNoStr = device.uplink.props.module \n\n log.debug('ceiwenji moduleNoStr=%s', moduleNoStr)\n local ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\tlog.debug('ceiwenji 1111111111111')\n\tfor i=1,4 do\n\t local length\n\t local signal=string.sub(hex,index_sign + (i-1) * 8,index_sign + (i-1) * 8+1)\n\t\tlog.debug('ceiwenji signal=%s', signal)\n\t\tlocal subDevice=getDeviceInfo(moduleNoStr,i)\n\t\tlog.debug('ceiwenji subDevice=%s', json.encode(subDevice))\n\t\tlocal deviceId=subDevice.id\n\t\tif signal=='00' then\n\t\t\tlength =iota.hexToUShort(hex, index_data + (i-1) * 4, 'B')\n\t\telseif signal=='01' then\n\t\t\tlength =iota.hexToUShort(hex, index_data + (i-1) * 4, 'B')*(-1)\n\t\tend\n\t\tlog.debug('ceiwenji length=%s', length)\n\t\tlocal data1={\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength=length/1000\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t}\n\t\ttable.insert(out.data,data1)\t\n\tend\n\t\n\t\n\t\n\t\n\t\n\tend\n\n \n local resultData = json.encode(out)\n log.debug('ceiwenji resultData=%s', resultData)\n ctx:notify(resultData)\n \nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n log.debug("ceiwenji 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n log.debug('ceiwenji:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n log.debug('ceiwenji 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n else\n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.channelId\n log.debug('ceiwenji 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n end\n\n \n if tonumber(channelStrCheck) == tonumber(channelNoId) then\n log.debug('ceiwenji: m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n --end\n end\n else\n log.debug('ceiwenji: subdevices是nil')\n return nil\n end\nend\n\nIsValid = function(data)\n if data == nil then\n errormsg = string.format('数据长度无效=%s', datalen)\n errcode = 1002\n return false\n end\n \n log.debug('ceiwenji:校验通过')\n return true\nend INLINE 2019-11-25 13:09:01.722+08 2019-11-25 16:29:19.09+08 2019-11-25 \N
+2e0c0a7c-01b1-4cb8-8f27-efec39b787ca fs_wind_9202 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua \nstart=function()\n log.debug("load script %s, moduleId=%s", "zxy_wind_9202.lua", device.uplink.props.module or "[nil]")\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("zxy_wind_9202 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("zxy_wind_9202 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n \n \n \n\tif tonumber(moduleNo) > 99 or tonumber(moduleNo) <=0 then\n local errout={\n data ={},\n result = {code = 1004,msg = 'module is Invalid, >99 or <=0'}\n }\n\n local errresult = json.encode(errout)\n ctx:done(errresult)\n end\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0x23, endian) \n\t\n buff=buff..toHexStr(PadLeft(2,0,moduleNo))\n\n buff=iota.appendHexByte(buff, 0x72, endian) \n buff=iota.appendHexByte(buff, 0x0D, endian) \n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n end\n ctx:done(result)\nend\n--3e312e352c36302e320d0a\n--moduleId=2\n--"windDirection": "60.2",\n--"windSpeed": "1.5"\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n local data = string.sub(hex,3,-5)\n local str = toStrHex(data)\n local offset = string.find(str,',')\n\n local speed = string.sub(str,1,offset-1)\n local direction = string.sub(str,offset+1,-1)\n \n out.data = {\n windSpeed=speed,\n windDirection = direction\n };\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data,moduleStrCheck)\n if data == nil or iota.hexToByte(data,0,'B') ~= 0x3E then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n return true\nend\n\n\nPadLeft=function(cnt,num,hex)\n local len = string.len(tostring(hex))\n local offset = cnt -tonumber(len)\n if offset == 0 then \n return hex\n else\n for i = 1,offset do \n hex = tostring(num)..tostring(hex)\n end\n end\n return hex\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend INLINE 2018-07-09 15:27:29.696+08 2018-07-09 15:29:25.06+08 2018-07-09 \N
+aa4e6330-665d-49b9-b91b-4d0a5099c8bb nengh_ZD_8305 \N 1.0 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b f ad0cd544-aed4-4670-9d17-f3e717a9a59b Lua \n--D:\\SVN\\201811项目\\智慧农业待接入设备\\NH51Y土壤盐分电导率一体化传感器说明书V1.1-170510.pdf\nstart=function()\n local endian = 'B'\n local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("nengh_ZD 设备模块通道 接口获取 m=%s ",moduleNo)\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("nengh_ZD,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '超时'} \n\t log.debug("nengh_ZD m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n\n--0A04040000012840CA\n--module=10\n-- intensity=296\nunmarshall=function(hex,moduleNoStr)\n log.debug("nengh_ZD m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local intensity =iota.hexToUInt(hex,3,'B')\n \n out.data = { \n intensity=intensity \n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("nengh_ZD m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = '返回数据长度无效='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = '模块号无效='..iota.hexToByte(data,0,'B')\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2018-11-22 17:20:45.451+08 2018-11-22 17:34:20.921+08 2018-11-22 \N
+743ba664-1590-4481-a703-bc9dde076f67 sz_485_2303 \N 1.0 fa5611e2-d726-4e8f-a22c-632ef7ab7148 fa5611e2-d726-4e8f-a22c-632ef7ab7148 f fa5611e2-d726-4e8f-a22c-632ef7ab7148 Lua start =function()\n log.debug('load script %s, moduleId=%s device=%s', 'sz_485_2303', device.uplink.props.module, json.encode(device))\n local endian = 'B'\n local buff = ''\n local errout = {\n data = {},\n result = {}\n }\n\n buff = buff .. '0F'\n --local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n --log.debug('sz_485_2303 设备模块 m=%s json.encode(moduleNo)=%s ', moduleNo, json.encode(moduleNo))\n\n buff = 'AA7510000E000000000000000000'\n\t\n\tlocal hexDataTime=getDateTimeHexStr()\n\t\n buff = buff..hexDataTime --cmd=0x10\n\t\n\t\n\t\n\t\n\t\n\tbuff='AA7510000E0000000000000000001204020B0A2F'\n log.debug('sz_485_2303 buff 校验前=%s ', buff)\n buff=buff..CheckXor(0,buff)\n --buff = buff .. string.format('%x', iota.hexCheckPlusSum(buff))\n log.debug('sz_485_2303 buff 校验后=%s ', buff)\n\n ok = ctx:asend(buff) --异步发送 异步接收\nend\n\n--AA7510000E0000000000000000001204020B0A2FEA \n--moduleId=28218F130A0000E1\n--557A1000350028218F130A0000E11204020F24380145FDEFC09D56EE5712206D6D2020FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF535A323031382020A7\nonData=function(hex)\n log.debug('sz_485_2303 收到数据 =%s', hex)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n local ErrorCode = IsValid(hex, moduleStr)\n if ErrorCode then\n \n\t\t\n\t\tlocal sensorModule = string.sub(hex, 13, 28) --传感器编号\n local dataTimeHexStr = string.sub(hex, 29, 40) --数据时间 HEX\n local sensorTime=hexDateStrToDateTime(dataTimeHexStr)\n --单个传感器数据 占5个字节\n\n local dataArea = string.sub(hex, 41, 52)--温度(2BYTE, BCD编码,扩大了10倍)+ 测量值(2BYTE,UINT16)+ 偏差值(2BYTE,UINT16)+频率(2BYTE,UINT16)\n local dataAreaLength = string.len(dataArea) / 2\n local temperature = iota.hexToUShort(dataArea, 0, 'B')/10\n\t\tlocal physicalvalue = iota.hexToUShort(dataArea, 2, 'B')\n local childDevice = getDeviceInfo(sensorModule)\n if childDevice ~= nil then\n local singleData = {\n data = {\n physicalvalue = tonumber(string.format('%0.2f', physicalvalue)),\n temperature = tonumber(string.format('%0.2f', temperature))\n },\n device = childDevice.id,\n \t\t\ttime=sensorTime,\n type = 1\n }\n log.debug('sz_485_2303 m=%s,c=%s,singleData=%s', moduleStr, channel, json.encode(singleData))\n table.insert(out.data, singleData)\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n log.debug('sz_485_2303 m=%s,data=%s', moduleNoStr, json.encode(out))\n local resultData= json.encode(out)\n log.debug("geot_3300resultData=%s,hex=%s", resultData,hex)\n ctx:notify(resultData)\nend\n\n\nhexDateStrToDateTime=function(dateStr)\n -- 12 04 02 0F 24 38 ==> 18\n local year = tonumber(string.sub(dateStr,1,2),16)+2000;\n\tlocal month = tonumber(string.sub(dateStr,3,4),16);\n\tlocal day = tonumber(string.sub(dateStr,5,6),16);\n local hour = tonumber(string.sub(dateStr,7,8),16);\n local minute = tonumber(string.sub(dateStr,9,10),16);\n local second = tonumber(string.sub(dateStr,11,12),16);\n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\treturn recordTime\nend\n\n\n\n\ngetDateTimeHexStr=function() --BCD码日期 181220025358 --> 16进值日期 120c1402353a\n\tlocal BCDdateStr=os.date("%y%m%d%H%M%S", os.time())\n\t--print(string.format('BCDdateStr=%s',BCDdateStr))\n\tlocal hexdateStr=''\n\tfor i=1,string.len(BCDdateStr),2 do\n\t\tlocal newHex=string.sub(BCDdateStr,i,i+1)\n\t\t\n\t\thexdateStr=hexdateStr..string.format('%02x',newHex)\n\t\t--print(string.format('i=%s,newHex=%s,hexdateStr=%s',i,newHex,hexdateStr))\n\tend \n\treturn hexdateStr\nend\n\nIsValid =function(data)\n log.debug('sz_485_2303 开始校验数据=%s', data)\n if string.sub(data, 1, 6) ~= '557a10' then\n errcode = 1003\n errormsg = string.format('回复数据的 帧头≠0xaa7510[%s]', string.sub(data, 1, 6))\n return false\n end\n -- local moduleStrCheck = tonumber(string.sub(data, 3, 4), 16)\n -- if moduleStrCheck ~= tonumber(moduleStr) then\n -- errormsg = string.format('数据中模块号无效=%s[%s]', moduleStrCheck, moduleStr)\n -- errcode = 1004\n -- log.debug('sz_485_2303 Invalid moduleId=%s[%s]', moduleStrCheck, moduleStr)\n -- return false\n -- end\n\n local dataChannelCount = tonumber(string.sub(data, 7, 10),16) --获取数据的长度\n local dataLen = string.len(data) / 2\n local checkLen = 7 + dataChannelCount\n if dataLen ~= checkLen or dataLen<20 then\n errormsg = string.format('数据长度=%s[%s] 无效', dataLen, checkLen)\n errcode = 1002\n return false\n end\n log.debug('sz_485_2303 数据校验通过')\n return true\n --crc\nend\n\ngetDeviceInfo =function(moduleNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("sz_485_2303 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n log.debug('sz_485_2303 查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n local moduleStrCheck = child.uplink.props.szyksensorid --模块 通道 优先接口获取 \n log.debug('sz_485_2303 子设备模块通道 接口获取 m=%s', moduleStrCheck)\n\n if string.lower(moduleStrCheck) == tostring(moduleNoId) then\n log.debug('sz_485_2303 m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n else\n log.debug('sz_485_2303 subdevices是nil')\n return nil\n end\nend\n\n\n\n--异或校验\nCheckXor=function(start,buff)\n local lcr = 0\n for i = start, string.len(buff)/2-1 do\n lcr = bit.bxor(lcr , tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n end \n log.debug("异或=%s",lcr)\n return string.format("%02X",lcr)\nend INLINE 2018-12-19 10:16:02.72+08 2018-12-20 15:47:32.455+08 2018-12-19 \N
+fb7d7130-3184-44ab-ba19-2cb664dc102d renke_dn \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--68a0a1a2a3a4a568010243c3 +CS +16H CS=(68a0a1a2a3a4a56801021090的累加和)\n-- cmd=68|88|88|88|88|88|88|68|20|0E|35|B3|34|2F|33|37|33|33|33|73|9C|96|34|73|C8|16\nstart=function()\n log.debug("start %s, ctx=%s", "renke_dn.lua",json.encode(ctx.device))\n\n local endian = 'B'\n local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\n\tlocal moduleId1 = string.sub(moduleNo,1,2)\n\tlocal moduleId2 = string.sub(moduleNo,3,4)\n\tlocal moduleId3 = string.sub(moduleNo,5,6)\n\tlocal moduleId4 = string.sub(moduleNo,7,8)\n\n\tlocal value = device.props.value\n\tbuff="6888888888888868201d34b33e39343a342e332f335234533461346c34853436343834" \n\tlocal module4 = tonumber(moduleId4,16)\n if module4 ~= nil then\n \t\tmodule4 = module4 + 0x33\n\t\tif module4 > 255 then\n\t\t\tmodule4 = module4 - 0x100\n\t\tend\t\t\t\n end \n\tbuff=iota.appendHexByte(buff, module4, endian)\n\tlocal module3 = tonumber(moduleId3,16)\n if module3 ~= nil then\n \t\tmodule3 = module3 + 0x33\n\t\tif module3 > 255 then\n\t\t\tmodule3 = module3 - 0x100\n\t\tend\t\t\t\n end \n\tbuff=iota.appendHexByte(buff, module3, endian)\n\tlocal module2 = tonumber(moduleId2,16)\n if module2 ~= nil then\n \t\tmodule2 = module2 + 0x33\n\t\tif module2 > 255 then\n\t\t\tmodule2 = module2 - 0x100\n\t\tend\t\t\t\t\n end \n\tbuff=iota.appendHexByte(buff, module2, endian) \n\tlocal module1 = tonumber(moduleId1,16)\n if module1 ~= nil then\n \t\tmodule1 = module1 + 0x33\n\t\tif module1 > 255 then\n\t\t\tmodule1 = module1 - 0x100\n\t\tend\t\t\t\t\n end \n\tbuff=iota.appendHexByte(buff, module1, endian)\n\tlocal crc=LCR(0,buff)\n\tbuff=iota.appendHexByte(buff, crc, endian)\n\tbuff=buff.."16"\n log.debug("renke_dn,buff=%s",buff)\n ok,resp=ctx:ssend(buff,15000)\n\tlog.debug("renke_dn,resp=%s",resp)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t ctx:done(json.encode(errout))\n\tend\nend\n\nunmarshall=function(hex)\n\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\tif string.len(hex) < 96 then\n\t\tout.result.code = 1001\n\t\tout.result.msg ="retry, responde is not right"\n\tend\n\tlocal datatable = {}\n\t\t--节点1\n\tlocal datahex = string.sub(hex,27,40)\n\tlocal data11,data12 = Calc(datahex,1)\n\tlocal data1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tlocal data21,data22 = Calc(datahex,7)\n\tlocal data31,data32 = Calc(datahex,11)\n\tlocal data2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\n\tlocal number = iota.hexToShort(data1, 0, 'L')\n\tlocal value = iota.hexToFloat(data2, 0, 'L') \t\n\tif number == 262 then \n\t\tdatatable.pm2_5A = value\t\n\tend\n\t\t--节点2\n\tdatahex = string.sub(hex,41,54)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\t\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\n\tif number == 263 then\n\t\tdatatable.pm2_5B = value\n\tend\n\t\t--节点3\n\tdatahex = string.sub(hex,55,68)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\n\tif number == 251 then\n\t\tdatatable.pm10A = value\t\n\tend\t\n\t\t--节点4\n\tdatahex = string.sub(hex,69,82)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\t\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\n\tif number == 252 then\n\t\tdatatable.pm10B = value\n\tend\t\t\n\t\t--节点5\n\tdatahex = string.sub(hex,83,96)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\t\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\n\tif number == 287 then\n\t\tdatatable.noiseA = value\n\tend\t\t\n\t\t--节点6\n\tdatahex = string.sub(hex,97,110)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\n\tif number == 288 then\n\t\tdatatable.noiseB = value\n\tend\t\t\t\n\t\t--节点7\n\tdatahex = string.sub(hex,111,124)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\t\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\t\n\tif number == 302 then\n\t\tdatatable.tempB = value\n\tend\t\t\t\n\t\t--节点8\n\tdatahex = string.sub(hex,125,138)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\t\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\n\tif number == 313 then\n\t\tdatatable.humidB = value\n\tend\t\t\t\t\n\t\t--节点9\n\tdatahex = string.sub(hex,139,152)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\t\n\tif number == 338 then\n\t\tdatatable.weedspeedB = value\n\tend\t\t\t\t\n\t\t--节点10\n\tdatahex = string.sub(hex,153,166)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\n\tif number == 259 then\n\t\tdatatable.threshold = value\n\tend\t\t\t\t\n\t\t--节点11\n\tdatahex = string.sub(hex,167,180)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\t\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \n\tif number == 261 then\n\t\tdatatable.backlash = value\n\tend\t\t\t\t\n\t\n\tout.data.ack = datatable\n\tlog.debug("renke_dn,out=%s",json.encode(out))\n return json.encode(out)\nend\n\nLCR=function(start,data)\n local sum = 0\n for i=start, string.len(data)/2-1 do\n if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)),16)) % 0xffff\n end\n end \n sum = bit.band(sum ,0xff)\n return sum\nend \n\nCalc=function(data,offset)\n\tlocal data1 = tonumber(string.sub(data,offset,offset+1),16)\n\tlocal data2 = tonumber(string.sub(data,offset+2,offset+3),16)\n\tif tonumber(string.sub(data,offset,offset+1),16) < 0x33 then \n\t\tdata1 = tonumber("1"..string.sub(data,offset,offset+1),16)\n\tend\n\tif tonumber(string.sub(data,offset+2,offset+3),16) < 0x33 then \n\t\tdata2 = tonumber("1"..string.sub(data,offset+2,offset+3),16)\n\tend\n\treturn data1,data2\nend INLINE 2019-04-08 14:39:25.769+08 2019-05-17 10:59:35.909+08 2019-04-08 \N
+feb25833-7419-4779-bfc8-809195843744 fs-idau_mop \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n --log.debug("fs_idau_mop:device=%s",json.encode(device))\n --log.debug("fs_idau_mop:subdevice=%s",json.encode(device.dnlinks[1]))\n local linkcnt = #(device.dnlinks)\n --log.debug("fs_idau_mop:linkcnt=%s",linkcnt)\n local req = {\n type = "idau",\n payload = ""\n }\n local mop = {\n M = "c_network",\n O = "S",\n P = {} -- 荷载\n }\n local req_sensor={\n type = "idau",\n payload = ""\n }\n local mop_sensor = {\n M = "c_sensor",\n O = "S",\n P = {} -- 荷载\n } \n for i = 1, linkcnt, 1 do -- 一个link, 一个子网\n local link = device.dnlinks[i]\n local nodecnt = #(link.devices)\n --log.debug("fs_idau_mop:nodecnt=%s",nodecnt)\n local subnet = {\n SN = tonumber(link.devices[1].uplink.props.subnet), -- 子网编号. link.interface.props.subnet\n NS = {} -- 子网节点\n }\n table.insert(mop.P, subnet)\n if nodecnt > 0 then\n for j = 1, nodecnt, 1 do\n local dev = link.devices[j]\n local dev_inf = link.devices[j].uplink\n --log.debug("fs_idau_mop:dev=%s", json.encode(dev))\n local node = {\n NID = tonumber(dev_inf.props.netid), -- 网络号\n C = 2, -- 通道\n DI = tonumber(dev.props.interval) or 30, -- 设备属性: 采集间隔. 默认30分钟\n DIU = 0, --分钟(采集间隔单位)\n WD = tonumber(dev.props.wakeupdelay) or 0, -- 设备属性:苏醒延迟, 默认0,\n T = toNodeType(dev_inf.props.worktype) -- 节点类型: 终端?\n }\n table.insert(subnet.NS, node)\n\t\t\t\t\n if dev.dnlinks ~= nil then \n\t\t\t\t\tlocal nodednlinkcnt = #(dev.dnlinks)\n\t\t\t\t\t--log.debug("fs_idau_mop:nodednlinkcnt=%s", nodednlinkcnt)\n\t\t\t\t\tif nodednlinkcnt>0 then\n\t\t\t\t\t\tfor k=1,nodednlinkcnt,1 do\n\t\t\t\t\t\t\t--log.debug("fs_idau_mop:Sdnlinks=%s", json.encode(dev.dnlinks[1]))\n\t\t\t\t\t\t\tlocal sensorcnt = #(dev.dnlinks[k].devices)\n\t\t\t\t\t\t\t--log.debug("fs_idau_mop:sensorcnt=%s", sensorcnt)\n\t\t\t\t\t\t\tfor u=1,sensorcnt,1 do\n\t\t\t\t\t\t\t\tlocal sen = dev.dnlinks[k].devices[u]\n\t\t\t\t\t\t\t\tlocal CheckOption = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.CheckOption == false then\n\t\t\t\t\t\t\t\t\tCheckOption = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tlocal VibratSamplFreq = 1\n\t\t\t\t\t\t\t\tif sen.uplink.props.VibratSamplFreq == "8K" then\n\t\t\t\t\t\t\t\t\tVibratSamplFreq = 0\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.VibratSamplFreq == "32K" then\n\t\t\t\t\t\t\t\t\tVibratSamplFreq = 2\n\t\t\t\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\t\t\t\tlocal AmplifierGain = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.AmplifierGain == "500倍" then\n\t\t\t\t\t\t\t\t\tAmplifierGain = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tlocal Incentive = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.Incentive == false then\n\t\t\t\t\t\t\t\t\tIncentive = 1\n\t\t\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t\t\tlocal IncentiveMethod = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.IncentiveMethod == "多脉冲激励" then\n\t\t\t\t\t\t\t\t\tIncentiveMethod = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.IncentiveMethod == "共振激励" then\n\t\t\t\t\t\t\t\t\tIncentiveMethod = 2\n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tlocal VibratSpectrum = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.VibratSpectrum == false then\n\t\t\t\t\t\t\t\t\tVibratSpectrum = 1\n\t\t\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t\t\tlocal Baudrate = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.Baudrate == "19200" then\n\t\t\t\t\t\t\t\t\tBaudrate = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.Baudrate == "115200" then\n\t\t\t\t\t\t\t\t\tBaudrate = 2\n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tlocal Databit = 1\n\t\t\t\t\t\t\t\tif sen.uplink.props.Databit == "7位" then\n\t\t\t\t\t\t\t\t\tDatabit = 0\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.Databit == "9位" then\n\t\t\t\t\t\t\t\t\tDatabit = 2\n\t\t\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t\t\tlocal Proofbit = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.Proofbit == "奇校验" then\n\t\t\t\t\t\t\t\t\tProofbit = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.Proofbit == "偶校验" then\n\t\t\t\t\t\t\t\t\tProofbit = 2\n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tlocal Stopbit = 1\n\t\t\t\t\t\t\t\tif sen.uplink.props.Stopbit == "0.5位" then\n\t\t\t\t\t\t\t\t\tStopbit = 0\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.Stopbit == "1.5位" then\n\t\t\t\t\t\t\t\t\tStopbit = 2\n\t\t\t\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\t\t\tif sen.uplink.props.Stopbit == "2位" then\n\t\t\t\t\t\t\t\t\tStopbit = 3\n\t\t\t\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\t\t\t\tlocal SwitchDelay = 1\n\t\t\t\t\t\t\t\tif sen.uplink.props.SwitchDelay == "0ms" then\n\t\t\t\t\t\t\t\t\tSwitchDelay = 0\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.SwitchDelay == "10ms" then\n\t\t\t\t\t\t\t\t\tSwitchDelay = 2\n\t\t\t\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\t\t\tif sen.uplink.props.SwitchDelay == "20ms" then\n\t\t\t\t\t\t\t\t\tSwitchDelay = 3\n\t\t\t\t\t\t\t\tend\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal sensor = {\n\t\t\t\t\t\t\t\t\tID = sen.uplink.props.sensorid,--传感器ID\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tPA ={ --物理地址\n\t\t\t\t\t\t\t\t\t\tSN= tostring(dev_inf.props.subnet),--子网号\n\t\t\t\t\t\t\t\t\t\tN=dev_inf.props.netid,--网络号(节点号)\n\t\t\t\t\t\t\t\t\t\tC= tonumber(sen.uplink.props.channel) or 0,--通道号\n\t\t\t\t\t\t\t\t\t\tM= tonumber(sen.uplink.props.module) or 0,--模块号: 485端口模块号 \n\t\t\t\t\t\t\t\t\t\t--SC=,-- 子通道号: 485端口子通道号\n\t\t\t\t\t\t\t\t\t}, \n\t\t\t\t\t\t\t\t\tDIS = tonumber(sen.uplink.props.dis) or 1,--采样间隔系数. 默认1\n\t\t\t\t\t\t\t\t\tPN = sen.props.protocolcode or 0 ,--协议号: 和安心云DAC解码协议保持一致.\n\t\t\t\t\t\t\t\t\tEN = tostring(sen.uplink.props.enabled =="false" and 0 or 1), --是否启用\n\t\t\t\t\t\t\t\t\tED = sen.uplink.props.postdelay or 0, --执行前延迟(485作用)\n\t\t\t\t\t\t\t\t\tRD = sen.uplink.props.predelay or 0,--读取前延迟\n\t\t\t\t\t\t\t\t\tCF = tostring(sen.uplink.props.fid) or "",--公式编码, 和安心云保持一致.\n\t\t\t\t\t\t\t\t\tCP = { --计算参数, 按顺序提供必需参数. \n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.k or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.f0 or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.kt or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.t0 or 0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tBC = CheckOption,\n\t\t\t\t\t\t\t\t\tFS = VibratSamplFreq,\n\t\t\t\t\t\t\t\t\tGA = AmplifierGain,\n\t\t\t\t\t\t\t\t\tBS = Incentive,\n\t\t\t\t\t\t\t\t\tMO = IncentiveMethod,\n\t\t\t\t\t\t\t\t\tUPS = VibratSpectrum,\n\t\t\t\t\t\t\t\t\tHN = tonumber(sen.uplink.props.Spectrumway) or 1,\n\t\t\t\t\t\t\t\t\tINV = tonumber(sen.uplink.props.SensorValue) or 1500,\n\t\t\t\t\t\t\t\t\tBR = Baudrate,\n\t\t\t\t\t\t\t\t\tDB = Databit,\n\t\t\t\t\t\t\t\t\tCB = Proofbit,\n\t\t\t\t\t\t\t\t\tSB = Stopbit,\n\t\t\t\t\t\t\t\t\tSWD = SwitchDelay\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttable.insert(mop_sensor.P, sensor)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n end\n end\n end\n end\n end\n req.payload = json.encode(mop)\n log.debug("fs_idau_mop:request=%s", json.encode(req))\n local ok, ack = ctx:ssend(req, 20000)\n\tlocal result= {\n\t\tresult= nil,\n\t\ttype=1,\n\t\tdata={}\n\t}\n\t--log.debug("fs_idau_mop:ack=%s", json.encode(ack))\n if ok then\n req_sensor.payload= json.encode(mop_sensor)\n --log.debug("fs_idau_mop:requestsensor=%s", json.encode(req_sensor))\n local senok, senack = ctx:ssend(req_sensor, 120000)\n\t\tif senok then\n\t\t\tresult.data.ack = json.encode(senack)\n\t\telse\n\t\t\tresult.data.ack = json.encode(ack)\n\t\tend\n\t\t--log.debug("mas_idau_mop: sensor ack=%s", json.encode(result))\n\telse\n\t\tresult.data.ack = 'set error'\n end\n\n ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n if t == "host" then\n return 1\n elseif t == "relay" then\n return 2\n end\n return 3\nend\n INLINE 2018-03-08 18:59:11.134+08 2019-12-17 14:37:31.63+08 2018-03-08 \N
+7f9b871e-3291-44e5-8ba3-a9a6f7759a41 MASCSHLS \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "MASCSHLS.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("MASCSHLS 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("MASCSHLS 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 3, endian) -- 1: 指令: 0x03 = 采集\n\t--buff=iota.appendHexWord(buff, 0x00, endian) -- 2: 0x00 起始地址低位 寄存器数据高位\n\tbuff=iota.appendHexWord(buff, 0x04, endian) \n\t--buff=iota.appendHexWord(buff, 0x00, endian) \n\tbuff=iota.appendHexWord(buff, 0x02, endian) -- 2: 0x02 起始地址低位 寄存器数据高位\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000) --发送指令\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\n local length1=iota.hexToShort(hex,3,'B')\n\t local length2=iota.hexToShort(hex,5,'B')/65535\n\t local length=length1+length2\n\t\n \n out.data = {\n\t\tlength\t=tonumber(string.format('%0.3f',length))\t\n\t\t\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('MASCSHLS开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('MASCSHLS数据校验通过')\n return true\n--crc\nend\n\n INLINE 2020-07-02 10:41:35.584+08 2020-07-02 10:49:12.592+08 2020-07-02 \N
+7231d629-dac5-471d-a674-005608c54feb MAS-IOT102 \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua \n\nstart = function()\n log.debug('MAS_IOT102 device=>%s', json.encode(device))\nend\n\nonData = function(hex)\n --主动上传式\n log.debug('MAS_IOT102 Received=>%s', hex)\n log.debug('MAS_IOT102 device=>%s', json.encode(device))\n local out = {\n type = 2,\n data = {},\n result = {}\n }\n\n local index_temp = 10\n local index_mv = 12\n local index_ma1 = 16\n local index_ma2 = 20\n local index_powerlevel = 24\n local index_signal = 26\n local index_ballstate = 28\n local index_alarmcode = 30\n local index_3Dangles = 32\n local index_angletemp = 38\n local index_numof485 = 40\n local index_485_1 = 44\n\n local moduleNoStr = device.uplink.props.module \n\n local channelDatas = {}\n local ErrorCode = IsValid(hex, moduleNoStr)\n local moduleidsub = string.sub(hex, 3, 10)\n log.debug('MAS_IOT102 moduleidsub=%s', moduleidsub)\n local xm=string.sub(hex,11,12)\n --log.debug('MAS_IOT102 xm=%s', xm)\n \n if ErrorCode then\n local temperature = iota.hexToUShort(hex, index_temp, 'L') / 10\n channelDatas[1] = temperature\n local mv = iota.hexToFloat(hex, index_mv, 'L')\n channelDatas[2] = mv\n local ma1 = iota.hexToFloat(hex, index_ma1, 'L')\n channelDatas[3] = ma1\n local ma2 = iota.hexToFloat(hex, index_ma2, 'L')\n channelDatas[4] = ma2\n local powerlevel = iota.hexToUShort(hex, index_powerlevel, 'L')\n channelDatas[5] = powerlevel\n local signal = iota.hexToUShort(hex, index_signal, 'L')\n channelDatas[6] = signal\n local ballstate = iota.hexToUShort(hex, index_ballstate, 'L')\n channelDatas[7] = ballstate\n local alarmcode = iota.hexToUShort(hex, index_alarmcode, 'L')\n channelDatas[8] = alarmcode\n --local _3Dangles = {iota.hexToShort(hex, index_3Dangles, 'L')/32768*180, iota.hexToShort(hex, index_3Dangles + 2, 'L')/32768*180, iota.hexToShort(hex, index_3Dangles + 4, 'L')/32768*180}\n \n local _3Dangles = {string.sub(tostring(iota.hexToShort(hex, index_3Dangles, 'L')/32768*180), 1, 6),string.sub(tostring(iota.hexToShort(hex, index_3Dangles+2, 'L')/32768*180), 1, 6),string.sub(tostring(iota.hexToShort(hex, index_3Dangles+4, 'L')/32768*180), 1, 6)}\n channelDatas[9] = _3Dangles\n local angletemp = iota.hexToUShort(hex, index_angletemp, 'L')\n channelDatas[10] = angletemp\n local numof485 = iota.hexToUShort(hex, index_numof485, 'L')\n for i = 1, numof485, 1 do\n local data485 = iota.hexToFloat(hex, index_485_1 + (i - 1) * 4, 'L')\n channelDatas[10 + i] = data485\n end\n\n for k, v in pairs(channelDatas) do\n log.debug('MAS_IOT102 模块号=%s,通道号=%s', moduleNoStr, k)\n local childDevice = getDeviceInfo(moduleNoStr, k)\n physicalvalue = channelDatas[k]\n log.debug('MAS_IOT102:子设备原形childDevice=%s', json.encode(childDevice))\n local deviceId\n if childDevice ~= nil then\n deviceId = childDevice.id\n log.debug('MAS_IOT102:子设备原形childDevice=%s', json.encode(childDevice))\n\n if k == 9 then --3向角度计\n local data1 = {\n data = {\n anglex = channelDatas[k][1],\n angley = channelDatas[k][2],\n anglez = channelDatas[k][3]\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n else\n local data1 = {\n data = {\n physicalvalue = getPreciseDecimal(channelDatas[k], 5)\n \n \n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n end\n else\n log.debug('MAS_IOT102 子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n log.debug('MAS_IOT102 resultData=%s', resultData)\n ctx:notify(resultData)\n local zt="FF"\n local zw="FE"\n \n if (xm=='01') then \n local xmo="810000"\n local xmm=moduleidsub..xmo --xmm=2155cc04810000\n --log.debug('MAS_IOT102 xmm=%s', xmm)\n local app=CS(xmm)\n local bpp=string.format("%#x",app)\n --log.debug('MAS_IOT102 app=%s', app)\n \n local bpp=string.format("%#x",app)\n --log.debug('MAS_IOT102 bpp=%s', bpp)\n local cpp=string.sub(bpp, -2, -1)\n -- log.debug('MAS_IOT102 cpp=%s', cpp)\n local asends=zt..xmm..cpp..zw\n --log.debug('MAS_IOT102 asends=%s', asends)\n ctx:asend(asends)\n elseif(xm=='09') then\n local xmo="890000"\n local xmm=moduleidsub..xmo \n --log.debug('MAS_IOT102 xmm=%s', xmm)\n local app=CS(xmm)\n local bpp=string.format("%#x",app)\n --log.debug('MAS_IOT102 app=%s', app)\n \n local bpp=string.format("%#x",app)\n --log.debug('MAS_IOT102 bpp=%s', bpp)\n local cpp=string.sub(bpp, -2, -1)\n local asends=zt..xmm..cpp..zw\n --log.debug('MAS_IOT102 asends=%s', asends)\n ctx:asend(asends)\n end\n \nend\nCS=function(buff)\n local lcr = 0\n for i = 0, string.len(buff)/2-1 do\n lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n end\n --log.debug('MAS_IOT102:lcr累加结果%s', lcr)\t\n --local value=bit.band(bit.bnot(lcr),0xff)+1 --按位取反再加1\n --log.debug('MAS_IOT102:lcrvalue累加结果1%s', value)\t\n return lcr\nend \n\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("MAS_IOT102 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug('MAS_IOT102:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n log.debug('MAS_IOT102 uplink子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n else\n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.channelId\n log.debug('MAS_IOT102 no子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n end\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tostring(channelStrCheck) == tostring(channelNoId) then\n log.debug('MAS_IOT102: m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('MAS_IOT102: subdevices是nil')\n return nil\n end\nend\n\nIsValid = function(data, module_device)\n local datalen = string.len(data)\n --or datalen < 46\n if data == nil then\n errormsg = string.format('数据长度无效=%s', datalen)\n errcode = 1002\n return false\n end\n\n if string.sub(data, 1, 2) ~= 'ff' or string.sub(data, -2, -1) ~= 'fe' then\n errcode = 1003\n errormsg = string.format('数据帧头帧尾无效')\n return false\n end\n\n local module_data = tostring(iota.hexToUInt(data, 1, 'L'))\n if module_data ~= module_device then\n errormsg = string.format('模块号无效=%s≠%s', module_data, module_device)\n errcode = 1004\n return false\n end\n log.debug('MAS_IOT102:校验通过')\n return true\nend\n\n--- nNum 源数字\n--- n 小数位数\n--- 四舍五入\nfunction getPreciseDecimal(nNum, n)\n if type(nNum) ~= "number" then\n return nNum;\n end\n n = n or 0;\n n = math.floor(n)\n if n < 0 then\n n = 0;\n end\n local nDecimal = 10 ^ n\n local nTemp = math.floor(nNum * nDecimal + 0.5);\n local nRet = nTemp / nDecimal;\n return nRet;\nend INLINE 2019-12-09 10:05:40.023+08 2019-12-10 10:14:32.798+08 2019-12-09 \N
+0e7050bc-bc01-4f3e-8758-23b2ba883e6a rtu_disaster_mop \N 20201015升级 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --地灾设备信息Topic发布\n-- 下发 采集仪 配置 topic = devmodule.."_setdevconfig"\n-- 下发 传感器 配置 topic =devmodule.."/ch/"..value.module\nstart=function()\n log.debug("rtu_disaster_mop start , device=%s",json.encode(device))\n\tlocal tableconfig_1 = {}\n\tlocal tableconfig_2 = {}\n\tlocal tableconfig_3 = {}\n\tlocal tableconfig_4 = {}\n\tlocal sencnt = #(device.dnlinks) or 0 --遍历sensors,分配到4个channel\n\tif sencnt > 0 then \n for i,dnlink in pairs(device.dnlinks) do\n for j,subdevice in pairs(dnlink.devices) do\n\t\t\t\tif subdevice ~= nil then\n\t\t\t\t\tlocal ch = tonumber(subdevice.uplink.props.channel) \t\t\t\n\t\t\t\t\tlocal sentype = subdevice.props.sensortype\n \t\t\tlog.debug("rtu_disaster_mop sentype =%s",sentype)\n\t\t\t\t\tlocal sen_type = "000"\n\t\t\t\t\tif sentype == "地表裂缝计" then\n\t\t\t\t\t\tsen_type = "101"\n\t\t\t\t\telseif sentype == "墙裂缝计" then\n\t\t\t\t\t\tsen_type = "102"\n\t\t\t\t\telseif sentype == "js" then\n\t\t\t\t\t\tsen_type = "103"\n\t\t\t\t\telseif sentype == "nw" then\n\t\t\t\t\t\tsen_type = "104"\n\t\t\t\t\telseif sentype == "预警喇叭" then\n\t\t\t\t\t\tsen_type = "105"\n\t\t\t\t\telseif sentype == "rainfall" then\n\t\t\t\t\t\tsen_type = "201"\n\t\t\t\t\telseif sentype == "hs" then\n\t\t\t\t\t\tsen_type = "202"\n\t\t\t\t\telseif sentype == "裂缝计" then\n\t\t\t\t\t\tsen_type = "203"\n\t\t\t\t\telseif sentype == "GNSS结果数据" then\n\t\t\t\t\t\tsen_type = "204"\n\t\t\t\t\telseif sentype == "gnss" then\n\t\t\t\t\t\tsen_type = "205"\n\t\t\t\t\telseif sentype == "qj" then\n\t\t\t\t\t\tsen_type = "206"\n\t\t\t\t\telseif sentype == "水压力" then\n\t\t\t\t\t\tsen_type = "207"\n\t\t\t\t\telseif sentype == "次声" then\n\t\t\t\t\t\tsen_type = "208"\n\t\t\t\t\telseif sentype == "ty" then\n\t\t\t\t\t\tsen_type = "209"\n\t\t\t\t\telseif sentype == "振弦式应力计" then\n\t\t\t\t\t\tsen_type = "210"\n\t\t\t\t\telseif sentype == "lx" then\n\t\t\t\t\t\tsen_type = "211"\n\t\t\t\t\telseif sentype == "gscx" then\n\t\t\t\t\t\tsen_type = "212"\n\t\t\t\t\telseif sentype == "cx" then\n\t\t\t\t\t\tsen_type = "213"\n\t\t\t\t\telseif sentype == "地下水水位" then\n\t\t\t\t\t\tsen_type = "214"\n\t\t\t\t\telseif sentype == "多点位移" then\n\t\t\t\t\t\tsen_type = "215"\n\t\t\t\t\telseif sentype == "kx" then --渗压计就是空隙水压计 名称统一\n\t\t\t\t\t\tsen_type = "216"\n\t\t\t\t\telseif sentype == "流速仪" then\n\t\t\t\t\t\tsen_type = "217"\n\t\t\t\t\telseif sentype == "气温" then\n\t\t\t\t\t\tsen_type = "218"\n\t\t\t\t\telseif sentype == "TDR变形计" then\n\t\t\t\t\t\tsen_type = "219"\n\t\t\t\t\telseif sentype == "泉水流量" then\n\t\t\t\t\t\tsen_type = "220"\n\t\t\t\t\telseif sentype == "沉降仪" then\n\t\t\t\t\t\tsen_type = "221"\n\t\t\t\t\telseif sentype == "钻孔测斜仪" then\n\t\t\t\t\t\tsen_type = "222"\n\t\t\t\t\telseif sentype == "wsd" then\n\t\t\t\t\t\tsen_type = "223"\n elseif sentype == "pic" then\n\t\t\t\t\t\tsen_type = "224"\n elseif sentype == "声光报警" then\n\t\t\t\t\t\tsen_type = "225"\n\t\t\t\t\telseif sentype == "cj" then\n sen_type = "226"\n \t\t\telseif sentype == "tw" then\n sen_type = "227"\n\t\t\t\t\tend\n\t\t\t\t\tlocal fid = "0"\n\t\t\t\t\tlog.debug("rtu_disaster_mop start , subdevice.uplink=%s",json.encode(subdevice.uplink.capabilities[1]))\n\t\t\t\t\tlocal thresholdx \n\t\t\t\t\tlocal thresholdy\n\t\t\t\t\tlocal thresholdz\n\t\t\t\t\tlocal cp1\n\t\t\t\t\tlocal cp2\n\t\t\t\t\tlocal cp3\n\t\t\t\t\tlocal cp4\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "bdb43886-e71d-4135-ad42-6e296635b02e" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.cx_thresholdx\n\t\t\t\t\t\tcp1 = tostring(subdevice.uplink.capabilities[1].formula.props.cx_v1) or "0"\n\t\t\t\t\t\tcp2 = tostring(subdevice.uplink.capabilities[1].formula.props.cx_v2) or "0"\n\t\t\t\t\t\tcp3 = tostring(subdevice.uplink.capabilities[1].formula.props.cx_l) or "0"\n\t\t\t\t\t\tfid = "2"\n\t\t\t\t\tend\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "14c1729f-4851-411d-9828-84fb5b11f593" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.c_thresholdx\t\t\t\t\t\n\t\t\t\t\t\tcp1 = tostring(subdevice.uplink.capabilities[1].formula.props.C0) or "0"\n\t\t\t\t\t\tfid = "22"\n\t\t\t\t\tend --初值减测值\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "898c3c4f-ecab-4aa9-9a95-accd00e26193" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.v1_x_thresholdx\t\t\t\t\t\t\n\t\t\t\t\t\tcp1 = tostring(subdevice.uplink.capabilities[1].formula.props.v1_x) or "0"\t\t\t\t\t\t\n\t\t\t\t\t\tfid = "5"\n\t\t\t\t\tend --减初值\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "c5378a9c-9406-4583-9ae8-5fddb5a5d65e" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.v2_x_thresholdx\n\t\t\t\t\t\tthresholdy = subdevice.uplink.capabilities[1].formula.props.v2_y_thresholdy\n\t\t\t\t\t\tcp1 = tostring(subdevice.uplink.capabilities[1].formula.props.v2_x) or "0"\n\t\t\t\t\t\tcp2 = tostring(subdevice.uplink.capabilities[1].formula.props.v2_y) or "0"\t\t\t\t\t\t\n\t\t\t\t\t\tfid = "6"\n\t\t\t\t\tend --减初值公式\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "68180c88-8643-47ba-815c-90668639e80f" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.h_thresholdx\t\t\t\t\t\t\n\t\t\t\t\t\tcp1 = tostring(subdevice.uplink.capabilities[1].formula.props.len0) or "0"\n\t\t\t\t\t\tcp2 = tostring(subdevice.uplink.capabilities[1].formula.props.H) or "0"\t\t\t\t\t\t\n\t\t\t\t\t\tfid = "13"\n\t\t\t\t\tend\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "d71a2a8d-5ad2-4cbe-b8d0-3edf77a1037a" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.wl_thresholdx\t\t\t\t\t\t\n\t\t\t\t\t\tcp1 = tostring(subdevice.uplink.capabilities[1].formula.props.k_wl) or "0"\n\t\t\t\t\t\tcp2 = tostring(subdevice.uplink.capabilities[1].formula.props.f0_wl) or "0"\t\t\t\t\t\t\n\t\t\t\t\t\tcp3 = tostring(subdevice.uplink.capabilities[1].formula.props.h_wl) or "0"\t\t\t\t\t\t\n\t\t\t\t\t\tfid = "7"\n\t\t\t\t\tend\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "927f1c11-f9a3-4c84-a565-57ee9245e41f" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.phy_thresholdx\t\t\t\t\t\t\n\t\t\t\t\t\tcp1 = tostring(subdevice.uplink.capabilities[1].formula.props.k) or "0"\n\t\t\t\t\t\tcp2 = tostring(subdevice.uplink.capabilities[1].formula.props.f0) or "0"\t\t\t\t\t\t\n\t\t\t\t\t\tcp3 = tostring(subdevice.uplink.capabilities[1].formula.props.k) or "0"\t\t\t\t\t\t\n\t\t\t\t\t\tcp4 = tostring(subdevice.uplink.capabilities[1].formula.props.t0) or "0"\t\t\t\t\t\t\n\t\t\t\t\t\tfid = "1"\n\t\t\t\t\tend\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "b545defc-450b-4986-83ef-445423df6f98" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.n_thresholdx\t\n\t\t\t\t\t\tthresholdy = subdevice.uplink.capabilities[1].formula.props.n_thresholdy\t\n\t\t\t\t\t\tthresholdz = subdevice.uplink.capabilities[1].formula.props.n_thresholdz\n\t\t\t\t\t\tfid = "0"\n\t\t\t\t\tend\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "fae5e233-4034-4ebe-8e7b-0bf35a648ec9" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.wsd_thresholdx\t\n\t\t\t\t\t\tthresholdy = subdevice.uplink.capabilities[1].formula.props.wsd_thresholdy\t\n\t\t\t\t\t\tfid = "0"\n\t\t\t\t\tend\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "ed141cf4-ca2c-49a1-9704-afee24dc9c71" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.n_thresholdx\t\n\t\t\t\t\t\tfid = "0"\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\tlocal sencon = {\n\t\t\t\t\t\tmodule = subdevice.uplink.props.module,\n\t\t\t\t\t\tchannel = tostring(subdevice.uplink.props.channel),\n\t\t\t\t\t\ttype = sen_type,\n\t\t\t\t\t\tcid = fid,\n\t\t\t\t\t\tupload = tostring(subdevice.uplink.props.upload),\n\t\t\t\t\t\tplus = tostring(subdevice.uplink.props.plus),\n\t\t\t\t\t\tthreshold = string.format("%s,%s,%s",thresholdx or 0,thresholdy or 0,thresholdz or 0),\n\t\t\t\t\t\tcp1 = cp1 or "0",\n\t\t\t\t\t\tcp2 = cp2 or "0",\n\t\t\t\t\t\tcp3 = cp3 or "0",\n\t\t\t\t\t\tcp4 = cp4 or "0"\n\t\t\t\t\t}\n\t\t\t\t\tif ch == 1 then\n\t\t\t\t\t\ttable.insert(tableconfig_1,sencon)\n\t\t\t\t\telseif ch == 2 then\n\t\t\t\t\t\ttable.insert(tableconfig_2,sencon)\n\t\t\t\t\telseif ch == 3 then\n\t\t\t\t\t\ttable.insert(tableconfig_3,sencon)\n\t\t\t\t\telseif ch == 4 then\n\t\t\t\t\t\ttable.insert(tableconfig_4,sencon)\n\t\t\t\t\tend\n\t\t\t\tend\n end\n end\n\tend\n\n\t--构成采集仪配置\n\tlocal alarm = "0"\n\tlocal gnss = "0"\n\tif device.props.alarm == "连接" then\n\t\talarm = "1"\n\tend\n\tif device.props.gnss == "连接" then\n\t\tgnss = "1"\n\tend\t\n\tlocal cmd = "$cmd=setworkmode&mode="..tostring(device.props.mode)\n\tlocal devmodule = device.props.moduleid\n\tlocal r1,ok = redis.get(device.id.."_rtudevset")\n\tif ok and r1~=nil then\n\t\tlog.debug("rtu_disaster_mop [%s] ok=%s,r1=%s,mode=%s",devmodule,ok,r1,device.props.mode)\n\t\tif r1 ~= tostring(device.props.mode) then\n\t\t\tlocal topic = devmodule.."_setdevconfig"\n\t\t\tlog.debug("rtu_disaster_mop [%s] topic=[%s],_setdevconfig send cmd =%s",devmodule ,topic,cmd)\n\t\t\tlocal okdev, ack = ctx:asend({type="mqtt",payload=cmd,topic = topic })\n\t\t\tctx:sleep(1)\n\t\t\tif okdev then\n\t\t\t\tlocal crc = tostring(device.props.mode)\n\t\t\t\tredis.set(device.id.."_rtudevset", tostring(crc))\n\t\t\tend\n\t\tend\n\telse --第一次下发\n\t\tlocal topic = devmodule.."_setdevconfig"\n\t\tlog.debug("rtu_disaster_mop [%s] topic=[%s],_setdevconfig send cmd =%s",devmodule ,topic,cmd)\n\t\tlocal okdev_first, ack_first = ctx:asend({type="mqtt",payload=cmd,topic=topic })\n\t\tctx:sleep(1)\n\t\tif okdev_first then\n\t\t\tlocal crc = tostring(device.props.mode)\n\t\t\tredis.set(device.id.."_rtudevset", tostring(crc))\n\t\tend\n\tend\n\n\t--传感器下发\n\tlog.debug("rtu_disaster_mop tableconfig_1 =%d, tableconfig_2 =%d tableconfig_3 =%d tableconfig_4 =%d ",#(tableconfig_1),#(tableconfig_2),#(tableconfig_3),#(tableconfig_4))\n\tlocal ack = Genratecmd(tableconfig_1,tableconfig_2,tableconfig_3,tableconfig_4)\t\n\tlog.debug("rtu_disaster_mop [%s] ack =%s",devmodule,json.encode(ack))\n out = {\n data = {},\n result = {},\n type = 1\n }\n\tctx:done(json.encode(out))\nend\n\n\n\nGenratecmd = function(tableconfig_1,tableconfig_2,tableconfig_3,tableconfig_4)\n local allconfig={}\n allconfig[1]=tableconfig_1\n allconfig[2]=tableconfig_2\n allconfig[3]=tableconfig_3\n allconfig[4]=tableconfig_4\n\tlocal result\n local devmodule = device.props.moduleid\n\tlocal channel=0\n for _, single_tableconfig in pairs(allconfig) do\n\t\tchannel=channel+1\n if #(single_tableconfig) > -1 then\n local count = #(single_tableconfig)\n ----获取配置,判断是否下发\n local strdevice= toHexStr(json.encode(single_tableconfig))\n strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n local crc=string.sub(strdevice,-4,-1)\n\t\t\tlog.debug("rtu_disaster_mop [%s] 通道%s 校验配置 strdevice =%s crc =%s",devmodule,channel,json.encode(single_tableconfig), crc)\n ----轮询下发\n local index = 0\n local topic =devmodule.."/ch/"..channel\n local cmd = "$cmd=setsensor&sensor_num=0"\n\t\t\tlocal redis_key=device.id.."_rtuchset_"..channel\n\t\t\tlocal r1,ok = redis.get(redis_key)\n\t\t\tlog.debug("rtu_disaster_mop [%s] 通道%s 缓存变化 redis_key=%s r1 =%s crc =%s",devmodule,channel,redis_key,r1, crc)\t\t\t\t\n\t\t\tif r1~=crc then\n\t\t\t\tfor i,value in pairs(single_tableconfig) do\n\t\t\t\t\tcmd = "$cmd=setsensor&sensor_num="\n\t\t\t\t\tindex = index + 1\n\t\t\t\t\tcmd = cmd..tostring(index)\n\t\t\t\t\tlocal senid = value.channel.."_"..value.module.."_"..value.type\n\t\t\t\t\tlocal cpcmd = value.cp1..","..value.cp2..","..value.cp3..","..value.cp4\n\t\t\t\t\tcmd = cmd..",{sensor_id="..senid.."&cid="..value.cid.."&upload_intv="..value.upload.."&plus_intv="..value.plus.."&threshold="..value.threshold.."&cp="..cpcmd.."}"\n\t\t\t\t\t---------------------------------------------------------------\n\t\t\t\t\tlog.debug("rtu_disaster_mop [%s] 通道%s redis_key=%s 修改配置下发 topic =%s cmd =%s",devmodule,channel,redis_key,topic, cmd)\t\t\t\t\t\n\t\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic })\t\t\t\t\t\n\t\t\t\t\tresult = ack\n\t\t\t\t\tctx:sleep(1)\n\t\t\t\tend\n\t\t\t\t--如果数量变成0\n\t\t\t\tif #single_tableconfig==0 then\n\t\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic })\n\t\t\t\t\tresult = ack\n\t\t\t\t\tctx:sleep(1)\n\t\t\t\tend\n\t\t\t\tredis.set(redis_key, tostring(crc))\n\t\t\tend\n end\n end\n\treturn result\nend\n\nonData=function(hex)\n\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n INLINE 2019-12-27 09:23:29.977+08 2021-01-21 09:10:05.932+08 2019-12-27 \N
+eb7d51b4-3089-4b47-a4df-3d772ee3dbf2 fs_magneticflux_1700 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --01 协议文档/IOTA/协议/磁通量协议.xlsx\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nstart=function()\n log.debug("load script %s, moduleId=%s", "fs_magneticflux_1700.lua", device.props.moduleId or "[nil]") \nlocal endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下 子设备列表\n\tif subdevices ~=nil then\n \n log.debug("fs_magneticflux_1700:LUA:根设备devices : data is =%s", json.encode(device))\n \tfor index,child in pairs(subdevices) do\n\t\t log.debug("fs_magneticflux_1700:LUA:子设备subdevices=%s : data is =%s", index,json.encode(subdevices))\n \tlocal moduleNo=tonumber(child.uplink.props.module) --模块 通道 接口获取\n\t\t\tlocal channelNo=tonumber(child.uplink.props.channel)\n log.debug("fs_magneticflux_1700:模块%s通道%s的deviceId是%s:",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\t \n\t\t\tbuff=iota.appendHexByte(buff, 0xfe, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0xcd, endian) \n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian) \n\t\t\tbuff=iota.appendHexWord(buff, 0x04, endian) \n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian) \n\n\t\t\tlocal vol = tonumber(child.uplink.capabilities[1].formula.props.Uj) -- 激励电压Uj(V)\n log.debug("fs_magneticflux_1700:模块%s通道%s的deviceId的vol的type是%s:",moduleNo,channelNo,type(child.uplink.capabilities[1].formula.props.Uj))\n\t\t\tlocal checkShort=isShort(tonumber(vol))\n\t\t\tlog.debug("fs_magneticflux_1700:模块%s通道%s的checkShort=%s",moduleNo,channelNo,checkShort) \t\t\n\t\t\tif checkShort==false then\t\t\t\n\t\t\t\tvol=20\t\t\t \n\t\t\tend\n\t\t\t\n\t\t\tif vol==0 or vol==nil then\n\t\t\t vol=20\n\t\t\tend\n\t\t\t\n\t\n\t\t\t--1:采集选项\n\t\t\tbuff=iota.appendHexWord(buff, vol, endian) \n\t\t\tlog.debug("fs_magneticflux_1700:模块%s通道%s的vol=%s,buff=%s",moduleNo,channelNo,vol,buff)\n\t\t\tbuff=iota.appendHexByte(buff, 0x00, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0x00, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0x00, endian) \t\t\t\n\t\t\tbuff_xor=iota.hexCheckXor(buff,0) \n\t\t\tbuff=iota.appendHexByte(buff, buff_xor, endian) \n\t\t\t\n\t\t\tlog.debug("fs_magneticflux_1700:模块%s通道%s的异或后,buff_xor=%s,buff=%s",moduleNo,channelNo,buff_xor,buff) \t\t\t\n\t\t\tbuff=iota.appendHexByte(buff, 0xef, endian) \n\t\t\tok,resp=ctx:ssend(buff,30000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n log.debug("fs_magneticflux_1700:模块%s通道%s的数据接收成功,开始解析resp=%s",moduleNo,channelNo,resp) \n\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("fs_magneticflux_1700:模块%s通道%s的数据接收失败",moduleNo,channelNo) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("fs_magneticflux_1700:".."subdevices是nil")\n \treturn nil\n end\n\t\t\n\tlog.debug('fs_magneticflux_1700:out序列化')\n\tlocal resultData =json.encode(out)\n log.debug("fs_magneticflux_1700:out序列化结果 : out is =%s", json.encode(out))\n ctx:done(resultData)\t\n\t\n\t\nend\n\n\nisShort=function(checkData)\n if math.floor(checkData) {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "jnrs_temphumi_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jnrs_temphumi_1 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jnrs_temphumi_1 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\tlog.debug("jnrs_temphumi_1 moduleNo=%s interface module=%s, property moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n buff=iota.appendHexByte(buff, moduleNo, endian)\n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 2, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("send %s, ctx=%s", "jnrs_temphumi_1.lua",buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n\t\tctx:done(result)\n\telse\n\t\tlog.debug("jnrs_temphumi_1 SSend error")\n end\nend\n\nunmarshall=function(hex)\n log.debug("recv %s, ctx=%s", "jnrs_temphumi_1.lua",hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==18) then\n \n -- 0103040292ff9b5a3d\n --"humi": 65.8,\n\t\t--"temp": -10.1\n local humi =iota.hexToShort(hex,3,'B')/10;\n local temp =iota.hexToShort(hex,5,'B')/10;\n \n out.data = { \n temperature=temp,\n humidity=humi\n };\n else\n local message = "Invalid Msg, len is not rigth"\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("out=%s, ctx=%s", "jnrs_temphumi_1.lua",json.encode(out))\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2018-01-23 17:16:33.719+08 2018-03-29 11:37:44.009+08 2018-01-23 \N
+0856b400-ee67-440c-b534-b075d2b36023 JM_4801 \N 综合采集仪协议 1.0 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c f 5b2dc320-50f8-4461-87fc-03b66e3e5e4c Lua start=function ()\n\tlog.debug("load script %s, moduleId=%s", "jm_4801", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlog.debug("jm_4801:LUA:根设备devices : data is =%s", json.encode(device)) \n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jm_4801 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jm_4801 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\t\n if string.len(moduleNo)<8 then --采集箱编号8位\n local strlen=8-string.len(moduleNo)\n \tfor i=1,strlen do\n moduleNo='0'..moduleNo\n end \n end\n\t log.debug("jm_4801:LUA:采集仪 : moduleId =%s", moduleNo) \n \n\t local sr=moduleNo..'A'\n\n\n\t local str_check=getCheckStr(sr)\t\n\t \n\t buff_str= '#'..moduleNo..'A'\n\t buff=StrToHex(buff_str)..str_check\n buff=iota.appendHexByte(buff, 0x21, 'B') --0x21=!\n log.debug("jm_4801:模块%s的采集仪采集指令=%s ",moduleNo,buff) \n\t log.debug("jm_4801: buff=%s,下发码流buff1111 buff%s",buff)\n ok,resp=ctx:ssend(buff,60000)\n\t if ok then\t \n\t\t--log.debug("jm_4801:模块%s的采集仪采集数据接收成功,开始解析resp=%s ",moduleNo,resp) \n result = ParseResult(resp,out,moduleNo)\t\n\t else\n \tout.result = {code=1001,msg='采集超时'} \n\t\tlog.debug("jm_4801:模块%s的采集数据 接收失败",moduleNo) \n\t end\n local resultData =json.encode(result)\n log.debug("jm_4801:out序列化结果 : out is =%s", resultData)\n ctx:done(resultData)\t\nend\n\n--2454323031373131303630333430ad433031a439b93230353530fc2d34333333fa3632359d433032a539b932343330398231303933cd343837a3433033a639b9323534333031323239ce3631339a433034a739b932313539398a2d33353132f8353839a6433035a839b93232313137fd2d363532ca3632359d433036a939b93335333131fd3130323634fd3633319a433037aa39b93230373030f92d31313233f4363139a0433039ac39b933303738398b36333535d33633349d433130a439b932383833368b34343131ca363339a2433131a539b93139353031802d323939398a3630389e433132a639b932353135358231303133c536303197433133a739b932373537318631383530ce36313097433134a839b93234323536832d353833cd363638a421\nParseResult=function(hex,out,moduleNoStr)\n\n\t-- 二次解析\n\tlog.debug("jm_4801 m=%s,接收传感器数据 Received=>%s",moduleNoStr,hex)\n\tlog.debug("jm_4801 hex=%s,上传上来的码流1111 hex%s",hex)\n\tlocal ErrorCode = IsValid(hex,moduleNoStr)\n\tif ErrorCode then\n\t\tlocal adress=''\n\t\tlocal channelTable={}\n\t\t\n\t\tlog.debug("jm_4801: hex=%s,回传码流1111 hex%s",hex)\n\t\tlocal dataType=iota.hexToByte(hex,15,'B') ---返回所有通道数据 带通道号\n\t\tlog.debug('jm_4801 获取通道值1111dataType=%s', dataType)\n\t\tif dataType==0x43 then\t--返回"C" \n\t\t local datalength=string.len(hex)/2\n\t\t for i=0,datalength-1,1 do\n\t\t\t if iota.hexToByte(hex,i,'B')==0x43 then --'C'\n\t\t\t\t adress=adress..tostring(i)..','\n\t\t\t end\n\t\t end\n\t\t \n\t\t local sArray=Split(adress,',')\n\t\t log.debug('jm_4801 m=%s,sArray=%s',moduleNo,json.encode(sArray))\n\t\t for k,v in ipairs(sArray) do\n\t\t\t\tif v~='' then\n\t\t\t\t\t\n local num=v\n\t\t\t\t\tlocal moduleNo=device.uplink.props.module --evice.props.moduleId\n local hex_channelNo =string.sub(hex,2*(num+1)+1,2*(num+1+2))\n local channelNo=HextoStr(hex_channelNo)\n\t\t\t\t\t\n\t\t\t\t\tlog.debug('jm_4801:v=%s,moduleNo=%s,channelNo=%s',v,moduleNo,channelNo)\t\t\n\t\t\t\t\tlocal Len=GetCodelen(v+3,hex);\n\t\t\t\t\tlog.debug('jm_4801: v=%s,Len=%s',v,Len)\t\n\t\t\t\t\tlocal valuelen=GetCodelen(num+3+Len+1,hex)\n\t\t\t\t\tlog.debug('jm_4801: v=%s,valuelen=%s',v,valuelen)\n\t\t\t\t\tlocal hex_Type=string.sub(hex,2*(num+3+Len+1)+1,2*(num+3+Len+1+valuelen))\n\t\t\t\t\tlocal Type=HextoStr(hex_Type)\n\t\t\t\t\tlocal valuelength=GetCodelen(num+3+Len+1+valuelen+1,hex)\n\t\t\t\t\tlocal hex_valuel=string.sub(hex,2*(num+3+Len+valuelen+2)+1,2*(num+3+Len+valuelen+2+valuelength))\n\t\t\t\t\tlog.debug('jm_4801: v=%s,hex_valuel=%s',v,hex_valuel)\n\t\t\t\t\tlocal value1=HextoStr(hex_valuel)\n\t\t\t\t\tlocal value11 = GetCodelen(num + 3 + Len + valuelen + valuelength + 3, hex); --//数值2的字符长度\n\t\t\t\t\tlocal hex_value2 =string.sub(hex,2*(num + 3 + Len + valuelen + valuelength + 3)+1,2*(num + 3 + Len + valuelen + valuelength + 3+tonumber(value11)));-- //数值2\n\t\t\t\t\tlog.debug('jm_4801: v=%s, hex_value2=%s',v,hex_value2)\n\t\t\t\t\tlocal value2=HextoStr(hex_value2)\n\t\t\t\t\tlocal value12 = GetCodelen(num + 3 + Len + valuelen + valuelength + value11 + 4, hex); --//数值3的字符长度\n\t\t\t\t\tlocal hex_value3 = string.sub(hex, 2*(num + 3 + Len + valuelen + valuelength + value11 + 4)+1,2*(num + 3 + Len + valuelen + valuelength + value11 + 4+value12));\n\t\t\t\t\tlog.debug('jm_4801: v=%s,hex_value3=%s',v,hex_value3)\n\t\t\t\t\tlocal value3=HextoStr(hex_value3)\n\t\t\t\t\tlocal Pressure\n\t\t\t\t\tlocal PressureS\n\t\t\t\t\tlog.debug('jm_4801:遍历 moduleNo=%s,channelNo=%s, k=%s,v=%s,value1=%s,value2=%s,value3=%s',moduleNo,channelNo,k,v,value1,value2,value3)\t\t\n local value1_isNumber=IsNumberic(value1)\n local value2_isNumber=IsNumberic(value2)\n\t\t\t\t\tif value1_isNumber and value1_isNumber then\n\t\t\t\t\t --获取通道设备deviceId\n log.debug('jm_4801:查找子设备moduleNo=%s,channelNo=%s',moduleNo,channelNo)\n local childDevice=getDeviceInfo(tonumber(moduleNo),tonumber(channelNo))\n \n if childDevice~=nil then\n local deviceId=childDevice.id\n log.debug("jm_4801 m=%s,c=%s,子设备111111111111deviceId=%s",moduleNo,channelNo,deviceId)\t\n if Type=='9' then\t\t\t\t\t\t\n \n local displacement=tonumber(value1)/10\n\t\t\t\t\t\t\t\tlog.debug("jm_4801 displacement=%s,这是一个不知道的值1111 displacement%s",displacement)\n if displacement<0 then\n displacement=displacement+6553.5\n end\n local temperature=0\n if IsNumberic(value3) then\n temperature=tonumber(value3-500)/10\n end\n \n local data1={\n data={\n value1=displacement,\n value2=temperature\t\n },\n device=deviceId,\n type=1 ,\n }\n \n table.insert(out.data,data1)\t\n else\n local displacement=tonumber(value1)/1000\n local r_displacement=tonumber(value2)/1000\n \n local data1={\n data={\n value1=displacement,\n value2=r_displacement\t\n },\n device=deviceId,\n type=1,\n }\n \n table.insert(out.data,data1)\t\n\n end\n else\n log.debug("jm_4801 子设备deviceId为nil:m=%s,c=%s",moduleNo,channelNo)\n end\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\tend \n\t\t end \n return out \n\t\tend\t\n\telse\n\t log.debug('jm_4801 m=%s,数据校验失败',moduleNo)\n\t\tout.result = {code=errcode,msg=errormsg}\n\tend\n \treturn out\nend\n\ngetCheckStr=function(sr)\n local srlen=string.len(sr)\n local check=0\n\t for i=1,srlen,1 do\n\t local byteStr=StrToHex(string.sub(sr,i,i))\n\t\t check=check+tonumber(byteStr,16)\t \n\t end\n check=check % 128+128\n\t local checkStr\n\t checkStr=string.format("%x",check) \n\t return checkStr\nend\nGetCodelen=function(num_str,buff_response)\n local num=tonumber(num_str)\n\tlocal length=0\n\tlocal buff_length=string.len(buff_response)/2\n\tfor j=0,buff_length-num,1 do\n\t local Y_str=string.sub(buff_response,2*(num+j)+1,2*(num+j)+2)\n\t\tlocal Y=tonumber(Y_str,16)\n\t\tif Y>=128 then\n\t\t length=j\n\t\t\tbreak\n\t\tend\n\t \n\tend\n return length\nend\n\n\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("jm_4801 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("jm_4801:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("jm_4801 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t log.debug("jm_4801 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t \t if tostring(channelStrCheck)== tostring(channelNoId) then\n \n \t\t log.debug("jm_4801: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("jm_4801: subdevices是nil")\n \treturn nil\n end\nend\n\n\n\nIsValid=function(data,moduleNoStrCheck)\n\tlog.debug('jm_4801 m=%s,开始校验数据 data=%s',moduleNoStrCheck,data)\n if data == nil or string.len(data)/2 < 3 then\n errormsg = string.format('无效的数据,长度=%s',string.len(data)/2)\n errcode = 1002\n return false\n end\n\n\tif string.sub(data,1,2) ~= '24' then\n errcode = 1003\n errormsg = string.format('回复数据的 帧头≠0x24[%s]',string.sub(data,1,2))\n return false\n end\t\n\tlocal dataLength=string.len(data)/2\n\t\n\tif string.sub(data,-2,-1) ~= '21' then\n errcode = 1004\n errormsg = string.format('回复数据的 帧尾≠0x21[%s]',string.sub(data,-2,-1))\n return false\n end\t\n log.debug('jm_4801 m=%s,校验通过',moduleNoStrCheck)\n\treturn true\nend\n\n -- 字符串 -> Hex\nStrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n-- Hex-> 字符串 \nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\n\nend INLINE 2018-01-11 11:13:58.989+08 2019-10-21 15:18:51.727+08 2018-01-11 \N
+afb4357f-a11c-4278-b137-53c5042053db BGK_CM60B_GPRS \N 1.0 224e0fc3-9311-4c4a-839d-d0363ece2ab4 224e0fc3-9311-4c4a-839d-d0363ece2ab4 f 224e0fc3-9311-4c4a-839d-d0363ece2ab4 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("load script %s, moduleId=%s", "BGK_CM60B_GPRS.lua", device.props.moduleId or "[nil]")\n \n --ok,resp=ctx:ssend("0102030405060708",15000)\n --log.debug("BGK_CM60B_GPRS:".."测试下发正常")\nend\n\nonData=function(hex)\n log.debug("BGK_CM60B_GPRS:onData: data is =%s", hex)\n log.debug("BGK_CM60B_GPRS:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n local out={\n data ={},\n result = {},\n type=2\n }\n \n --log.debug("BGK_CM60B_GPRS:".."子设备device.dnlinks[1].devices:", json.encode(device.dnlinks[1].devices))\n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n sData=toStrHex(hex);\n log.debug("BGK_CM60B_GPRS:sData是"..sData)\n\n --分析单类数据\n local singleData=Split(sData,' ');\n \n --移除单类数据中的空 \n for k,v in ipairs(singleData) do\n if v=='' or v==nil then\n --print("移除元素为 ",singleData[kk])\n table.remove (singleData,k) \n end\n end\n \n local moduleNo=singleData[2]\n --解析单条数据\n for kk,vv in ipairs(singleData) do\n log.debug("BGK_CM60B_GPRS:遍历解析单条数据 键="..tostring(kk).." 值="..tostring(vv))\n if kk>6 and (kk%2)==1 and kk<(table_leng(singleData)-3) then\n if vv~='M'then\n local value=vv\n local channelNo=(kk-5)/2\n local childDevice=getDeviceInfo(moduleNo,channelNo)\n local deviceid=childDevice.id\n log.debug("BGK_CM60B_GPRS:childDevice"..tostring(kk).." 值="..tostring(vv))\n local data1 ={\n data={\n value=tonumber(value)\n },\n device=deviceid,\n type=1 \n }\n table.insert(out.data,data1)\n end\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("BGK_CM60B_GPRS:resultData : data is =%s", json.encode(out))\n ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n \tif child.props.moduleId==tostring(moduleNoId) then\n\t\t \t if child.props.channelId == tostring(channelNoId) then\n log.debug("BGK_CM60B_GPRS:".."DeviceInfo是:"..tostring(child.deviceId))\n \t\t log.debug("BGK_CM60B_GPRS:".."子设备原形child=%s",json.encode(child))\n \t --return child.deviceId\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("geot_3300:".."subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function(alldata)\n log.debug("BGK_CM60B_GPRS:".."校验开始")\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n return false\n end\n\n log.debug("BGK_CM60B_GPRS:".."校验通过")\n return true\nend\n\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\nend\n\n INLINE 2018-02-07 16:34:24.05+08 2018-03-01 00:05:58.035+08 2018-02-07 \N
+d9b6eb86-bbee-4c4e-9007-eb566b64fba6 gn_NGN \N 采集仪 1.0 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 f c465666b-2fe0-4d50-9d21-74d919571ab4 Lua start=function()\n log.debug("gn_NGN:".."测试下发01020304正常")\nend\n\n--FF 1C 00 01 00 2D 11 01 44 5A CD F0 50 03 64 D5 78 79 40 40 64 3F AA AE A3 41 64 3F AA AE A3 42 64 3F AA AE A3 43 64 3F AA AE A3 3C AF \nonData=function(hex)\n log.debug("gn_NGN: 收到数据=%s", hex)\n\tlog.debug("gn_NGN: device =%s", json.encode(device))\n --log.debug("gn_NGN: subdevices data is =%s", json.encode(device.dnlinks[1].devices))\n\n local out={\n data ={},\n result = {},\n type=2\n }\n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local module= iota.hexToShort(hex,2,'B')\n local time1=iota.hexToInt(hex,9,'B')\n log.debug("gn_NGN:".."time1=%s", tostring(time1))\n local count= (string.len(hex)-42)/12\n for i=1,count,1 do\n local channel= iota.hexToByte(hex,13+i*6,'B')\n local Length=iota.hexToFloat(hex,15+i*6,'L',3)\n log.debug("gn_NGN:".."Length=%s", tostring(Length))\n local childDevice=getDeviceInfo(module,channel)\n \n if childDevice ~=nil then\n --log.debug("gn_NGN: subdevices data is =%s", json.encode(childDevice)\n local data1 ={\n data={\n length = Length\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",time1) \n }\n table.insert(out.data,data1)\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("gn_NGN:".."LUA:resultData : data is =%s", json.encode(out))\n ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n \n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("gn_NGN:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n local\tmoduleStrCheck= tostring(child.uplink.props.module)\n local\tchannelStrCheck=child.uplink.props.channel\n\t\t\tlog.debug("gn_NGN 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\t\n \tif moduleStrCheck== tostring(moduleNoId) then\n\t\t \t if channelStrCheck== tostring(channelNoId) then\n \t\t log.debug("gn_NGN: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n end\n \t \tend\n end\n return nil\n else\n log.debug("gn_NGN: subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function(alldata)\n log.debug("gn_NGN:".."校验开始")\n if alldata == nil then\n errormsg = 'gn_NGN:allData is nil'\n errcode = 1001\n return false\n end\n local buff=string.sub(alldata, 1, -5)\n local buff=iota.appendHexCrc(buff, 'L' ,0)\n log.debug("gn_NGN:".."buff=s%",buff)\n if string.lower(buff)~=string.lower(alldata) then\n log.debug("gn_NGN:".."校验失败 buff=s%",buff)\n errormsg = 'gn_NGN: cac failed'\n errcode = 1001\n return false\n end\n log.debug("gn_NGN:".."校验通过")\n return true\nend\n\n\n\n\n INLINE 2018-04-11 13:54:46.044+08 2018-04-16 17:11:35.592+08 2018-04-11 \N
+6a99d6ca-10ea-424d-a9cd-48ea93b1d1f9 shsd_level_18625 \N 1.0 6708aba6-65f9-4ec3-bfc2-227628154ff3 6708aba6-65f9-4ec3-bfc2-227628154ff3 f 6708aba6-65f9-4ec3-bfc2-227628154ff3 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "shsd_level_18625.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shsd_level_18625 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("shsd_level_18625 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 4, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 2, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n -- 01040000000271cb\n log.debug("shsd_level_18625,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t log.debug("shsd_level_18625 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("shsd_level_18625 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n --01040442C800006E02 \n --"pressure": 100\n local pressure =iota.hexToFloat(hex,3,'B')/1000.0;\n \n out.data = { \n pressure=pressure \n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("shsd_level_18625 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2018-06-25 15:27:11.201+08 2018-06-28 15:35:50.502+08 2018-06-25 \N
+a6b0f2df-fe24-4c3c-89ec-a1768e94e07c ACT4238 \N 采集仪 1.0 84b76f77-20bf-48ff-a6a1-f80965b63275 84b76f77-20bf-48ff-a6a1-f80965b63275 f 84b76f77-20bf-48ff-a6a1-f80965b63275 Lua --require"functions"--公共函数\n--[[\n可用函数包:\nlog:日志\nconvertor:转换\nconn:链接\n全局变量:\nctx:(只读)\ndevice=>{}//设备信息\nprotocol=>{}//协议信息\ninterface=>{}//接口信息\nssend:同步发送数据\nasend:异步发送数据\ndone:完成处理.\nnotify:通知结果\n]]\n--//协议参考文档:Documents/PMO/02产品协议/我司产品协议/通信协议/ModBus统一通信协议.xls\nstart=function()\n\tlog.debug("ACT4238 loadscript%s,moduleId=%s","BK_WaterLevel.lua",device.uplink.props.module or "[nil]")\n\t\n\n\tout={\n\t\t\t\ttype=2,\n\t\t\t\tdata={},\n\t\t\t\tresult={}\n\t\t\t\t}\n\tlocal endian='B'\n\tlocal buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props)~='null'then\n\t\tmoduleNo=device.uplink.props.module--模块通道优先接口获取\n\t\t\n\t\tlog.debug("ACT4238设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("ACT4238设备模块通道属性获取m=%s,c=%s接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\tbuff=iota.appendHexByte(buff,moduleNo,endian)--1:模块号\n\tbuff=buff.."0300000010"--1:指令:采集\n\tbuff=iota.appendHexCrc(buff,endian,0)--2:CRC\n\tok,resp=ctx:ssend(buff,15000)--发送指令\n\tlocal ErrorCode=IsValid(resp)\n\tlocal subdevices=device.dnlinks[1].devices \n\n\tif subdevices ~=nil then\n\t\t\tlocal offsetvalue=7\n\t\t\tlocal Startingvalue=7\n\t\t\tlocal closvalue=12\n\t\t\t\tlog.debug("ACT4238 subdevices 子设备模块通道 接口获取 ,c=%s ",json.encode(subdevices))\n \t for index,child in pairs(subdevices) do --插入8个通道\n\t\t\t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\t\tlog.debug("ACT4238 uplink 子设备模块通道 接口获取 ,c=%s ",channelNo)\n\t\t\t else\n\t\t\t\t channelNo=child.props.channelId \n\t\t\t\t log.debug("ACT4238 子设备模块通道 属性获取,c=%s ",channelNo)\n\t\t\t end\n\t\t\t\tif ErrorCode then \t\n\t\t\t\t\tlog.debug("ACT4238 ---offsetvalue %d",offsetvalue)\n\t\t\t\t\toffsetvalue=(channelNo-1)*5+7\n\t\t\t\t\tStartingvalue=(channelNo-1)*10+7\n\t\t\t\t\tclosvalue=(channelNo-1)*10+12\n\t\t\t\t\tresult=unmarshall(resp,channelNo,offsetvalue,Startingvalue,closvalue) ---插入数据\n\t\t\t\t\t table.insert(out.data,result)\n\t\t\t\t\t\n\t\t\t\telse\n\t\t\t\t out.result = {code=errcode,msg=errormsg} \n\t\t\t\t\t \n\t\t\t\tend\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t end\n \n\n\tend\n\nlocal resultData =json.encode(out)\n log.debug("ACT4238 result=%s",json.encode(out))\nctx:done(resultData)\nend\n\n\n\nunmarshall=function(hex,subChannelId,offset,Startingvalu, closvalue)\nlog.debug("ACT4238 unmarshall offset = %d",offset)\nlocal subData={\n type=1,\n data={},\n\t\tdevice="", \n result={}\n }\nlocal ErrorCode=IsValidOut(resp)\n\tif ErrorCode then\n\t\tlog.debug("ACT4238 进入")\n\t\tlocal D0H=string.sub(hex,Startingvalu,closvalue);\n\t\tlog.debug("ACT4238 D0H = %s",D0H)\n\t\tlocal Freque=tonumber(D0H,16);\n\t\tlog.debug("ACT4238 Freque = %s",Freque)\n\t\tlocal Frequenc=Freque/100;\n\t\tlog.debug("ACT4238 Frequenc = %s",Frequenc)\n\t\tlocal bit=offset-1;\n\t\tlocal Symbol=iota.hexToByte(hex,bit,'B');\n\t\tlog.debug("ACT4238 Symbol = %s",Symbol)\n\t\tlocal Temp=iota.hexToByte(hex,offset,'B')/10;\n\t\t\tif Symbol==0x00 then\n\t\t\t\tTemp=Temp\n\t\t\telse\n\t\t\t\tTemp=Temp*(-1);\n\t\t\tend\n\t\tlog.debug("ACT4238 temp = %d",Temp);\n\t\tlog.debug("ACT4238 offsetvalue=%d",offset);\n\t\t\n\t\t\n\t\tlog.debug("ACT4238")\n\t\tchild=getDeviceInfo( subChannelId)\n\t\tlog.debug("ACT4238 child=%s",child)\n\t\tsubData.data={ \n\t\t\t\t\t\ttemperature=Temp;\n\t\t\t\t\t\tfrequency=Frequenc\n\t\t\t\t\t\t}\n\t\tsubData.device = \tchild.id\n\t\tlog.debug("ACT4238 subData.device=%s",subData.device)\n\t\tlog.debug("ACT4238 subData.temperature=%s,channel =%s",subData.data.temperature,tostring(subChannelId))\n\t\treturn subData\n\telse\n\t\tout.result = {code=ercode,msg=erormsg} \n\tend\n\nend\n --获取传感器信息\nfunction getDeviceInfo( channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for k, dnlink in pairs(device.dnlinks) do\n for v, subdevice in pairs(dnlink.devices) do\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n log.debug('ACT4238 has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('ACT4238 has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\t\n\nIsValid=function(data)\n\tlog.debug('ACT4238开始校验数据')\n\tif iota.hexToByte(data,1,'B')~=0x03 then\n\tlog.debug("ACT4238 iota.hexToByte=%s",iota.hexToByte)\n\t\terrcode=1001\n\t\terrormsg='HexCMDFalse'\n\t\treturn false\n\tend\n\tlog.debug("ACT4238")\n\t\n\tlog.debug('ACT4238数据校验通过')\n\treturn true\n--crc\nend\nIsValidOut=function(data)\n\tlog.debug('ACT4238即将开始校验数据')\n\n\tif iota.hexToShort(data,1,'L')==0x03 then\n\t\tercode=1001\n\t\terormsg='HexCMD False'\n\t\tlog.debug('ACT4238 HexCMDFalse')\n\t\treturn false\n\tend\n if iota.hexToShort(data,2,'L')==0x28 then\n\t\n\t\tercode=1001\n\t\terormsg='ACT4238 False'\n\t\treturn false\n\tend\n\t\n\n\t\treturn true\n--crc\nend\n INLINE 2019-04-17 11:25:31.027+08 2019-04-19 11:10:04.322+08 2019-04-17 \N
+00689b92-6403-4fae-977d-1b9c1436f133 shangheng_pressure_1 \N 上海尚衡电子有限公司 1.0 5355fb27-5945-43ae-bc43-697b572a7363 5355fb27-5945-43ae-bc43-697b572a7363 f 5355fb27-5945-43ae-bc43-697b572a7363 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]]\n\n--bit 操作\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\nstart=function()\n log.debug("start %s, ctx=%s", "shangheng_pressure_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexByte(buff, 0x52, endian) \n buff=iota.appendHexByte(buff, 0x44, endian) \n buff=iota.appendHexByte(buff, 0x53, endian) \n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, checkPlusSum(buff,1,4), endian) \n buff=iota.appendHexByte(buff, 0x0D, endian) \n\n -- 02524453412a0d \n -- print("ssend=", ctx:ssend(buff,500) )\n log.debug("send %s, ctx=%s", "shangheng_pressure_1.lua",buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n log.debug("recv %s, ctx=%s", "shangheng_pressure_1.lua",hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==22) then\n \n --024144323c35323038720d \n\n\n --print("parsing data", hex)\n --log.debug("shangheng_pressure_1:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n\n local sData=string.reverse(string.sub(hex,8,8)..string.sub(hex,10,10)..string.sub(hex,12,12)..string.sub(hex,14,14)..string.sub(hex,16,16))\n local pressure= tonumber(sData,16)\n out.data = {\n pressure=pressure\n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n\n\ncheckPlusSum=function(data,startindex,endindex)\n local sum = 0\n for i=startindex,endindex do\n if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)),16)) % 0xffff\n end\n end \n sum = bit:_and(sum ,0xff)\n return sum\nend \n \n\n\n\n INLINE 2018-02-06 11:22:17.242+08 2018-03-06 16:51:44.617+08 2018-02-06 \N
+b3254088-2d5a-4bbf-a470-a560aa50cbaf 噪声9603 \N 1 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f 56031544-f3e0-407f-9ffa-1a54742ecfa7 Lua -- 测试数据:\n-- 80018402000600290207e1081c130100010000001d00001e500001150000008608004294c5a842629be4427e04c000d28c3a76\nstart=function()\n log.debug("LUA:start ")\nend\n\n-- 收到数据\nonData=function(data)\n --print("LUA:onData",data) \n local len=string.len(data)\n local r=nil\n if len == 102 then\n r=parseNoise(data)\n elseif len==50 then\n r=parseWakeup(data)\n else\n r={node = string.sub(data,1,4)}\n end\n result={}\n result.data = r\n result.type=1\n local msg = json.encode(result)\n log.debug("result:%s",msg)\n ctx:notify(msg)\nend\n\nparseNoise=function(data)\n -- 51长度: 头 25, 数据24, 尾2\n local node = string.sub(data,1,4)\n local Lmax = iota.hexToFloat(data,25+9,'B');\n local Lmin = iota.hexToFloat(data,25+13,'B');\n local Laeq = iota.hexToFloat(data,25+17,'B');\n return {node=node, lmax=Lmax,lmin=Lmin,laeq=Laeq}\nend\n\nparseWakeup=function(data)\n local node = string.sub(data,1,4)\n local power = iota.hexToByte(data,10,'B');\n local join = iota.hexToShort(data,17,'B');\n return {node=node,power=power,join=join}\nend\n\n\n INLINE 2018-06-06 18:04:24.992+08 2018-06-06 18:04:24.992+08 2018-06-06 \N
+9c6b590a-31c6-4532-9232-3c921c1d7f35 mas_inciton_10001 \N 工讯倾角仪 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --// PMO/02 产品协议/SavoirCloud/01 协议/4月第3周/北京宝力马传感技术有限公司/通讯协议WS302M2A-5温湿度变送器使用说明书V3.0.1(中英)-华为专用-北京宝力马传感技术有限公司.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "mas_10001", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("mas_10001 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("mas_10001 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x04, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("mas_10001 SSend error!")\n end\n ctx:done(result)\nend\n\n--010308000c6202100c62020000\n--moduleId=1 \n--"anglex": 12.985,\n--"angley": -12.985\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\t\t\n\t\tlocal signx=tonumber(string.sub(hex,7,7),16)\n\t\tlocal anglex_1=tonumber(string.sub(hex,8,8),16)\n\t\tlocal anglex_2=tonumber(string.sub(hex,9,9),16)\n\t\tlocal anglex_3=tonumber(string.sub(hex,10,10),16)\n\t\tlocal anglex_4=tonumber(string.sub(hex,11,11),16)\n\t\tlocal anglex_5=tonumber(string.sub(hex,12,12),16)\n\t\tlocal anglex_6=tonumber(string.sub(hex,13,13),16)\n\t\tlocal anglex_7=tonumber(string.sub(hex,14,14),16)\n\t\n local anglex = (-1)^signx*(anglex_1*100+anglex_2*16+anglex_3+(anglex_4*16+anglex_5)/100+(anglex_6*16+anglex_7)/1000)\n\t\t\n local signy=tonumber(string.sub(hex,15,15),16)\n\t\tlocal angley_1=tonumber(string.sub(hex,16,16),16)\n\t\tlocal angley_2=tonumber(string.sub(hex,17,17),16)\n\t\tlocal angley_3=tonumber(string.sub(hex,18,18),16)\n\t\tlocal angley_4=tonumber(string.sub(hex,19,19),16)\n\t\tlocal angley_5=tonumber(string.sub(hex,20,20),16)\n\t\tlocal angley_6=tonumber(string.sub(hex,21,21),16)\n\t\tlocal angley_7=tonumber(string.sub(hex,22,22),16)\n\t\n local angley = (-1)^signy*(angley_1*100+angley_2*16+angley_3+(angley_4*16+angley_5)/100+(angley_6*16+angley_7)/1000)\n \n\t\t\t\t\t\n\t\t\n\t\t\n out.data = {\n\t\t\tanglex=anglex,\n\t\t\tangley=angley\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('mas_10001 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('mas_10001 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2018-04-12 16:52:27.109+08 2018-04-12 16:52:44.743+08 2018-04-12 \N
+3d202a7e-d9d9-4874-b746-d1150992381c ew \N 1212 wewe 013f2f9f-cadd-457b-a86e-ee52e5937acc 013f2f9f-cadd-457b-a86e-ee52e5937acc f 013f2f9f-cadd-457b-a86e-ee52e5937acc Lua rfsfsfsfs INLINE 2018-01-24 16:58:13.359+08 2018-01-24 16:58:13.359+08 2018-01-24 \N
+bb65a921-da11-46bf-a625-cbeb6afd0edf shjy_DAS_BK-ZC01 \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua onData = function()\nend\n\nstart = function()\n log.debug('shjy_DAS_BK-ZC01 device=%s', json.encode(device))\n local buff = ''\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n\n buff = iota.appendHexByte(buff, moduleNo, endian)\n buff = buff .. '0300000006'\n buff = iota.appendHexCrc(buff, 'L', 0)\n\n local result = '{}'\n --第一次发送\n ok1, resp1 = ctx:ssend(buff, 5000)\n\n if ok1 then\n -- local ErrorCode1 = IsValid(resp1, moduleNo)\n if ErrorCode1 then\n result = unmarshall(resp, moduleNo)\n else\n -- statements\n --第二次下发\n ctx:sleep(5)\n ok2, resp2 = ctx:ssend(buff, 15000)\n\n if ok2 then\n result = unmarshall(resp2, moduleNo)\n else\n --\n local errout = {\n data = {},\n result = {},\n type = 2\n }\n errout.result = {code = 1001, msg = '超时'}\n result = json.encode(errout)\n end\n end\n end\n\n log.debug('shjy_DAS_BK-ZC01 m=%s,result=%s', moduleNo, result)\n ctx:done(result)\nend\n--140300000006c70d\n--14030c851d45185864451879b745168a4a\n\nunmarshall = function(hex, moduleNoStr)\n log.debug('shjy_DAS_BK-ZC01 m=%s, recv =%s', moduleNoStr, hex)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n local ErrorCode = IsValid(hex, moduleNoStr)\n if ErrorCode then\n for i = 1, 3, 1 do\n --local subDataHex_ = string.sub(hex, 7 + (i-1) * 8, 7 + (i-1) * 8+7)\n local subDataHex_H = string.sub(hex, 7 + (i - 1) * 8, 7 + (i - 1) * 8 + 3)\n\t\t\tlog.debug('shjy_DAS_BK-ZC01 subDataHex_H =%s', subDataHex_H)\n local subDataHex_L = string.sub(hex, 7 + (i - 1) * 8 + 4, 7 + (i - 1) * 8 + 7)\n\t\t\tlog.debug('shjy_DAS_BK-ZC01 subDataHex_L =%s', subDataHex_L)\n subDataHex = subDataHex_L .. subDataHex_H\n\t\t\tlog.debug('shjy_DAS_BK-ZC01 subDataHex =%s', subDataHex)\n local freq = iota.hexToFloat(subDataHex, 0, 'B')\n\t\t\tlog.debug('shjy_DAS_BK-ZC01 freq =%s', freq)\n\t\t\t if freq>500 then\n local childDevice = getDeviceInfo(moduleNoStr, i)\n --\n local deviceId\n if childDevice ~= nil then\n deviceId = childDevice.id\n\n if childDevice.uplink.capabilities[1].formula.metaid == 'd157f3b3-41c1-4e8b-8141-76c56d56b8ed' then --振弦公式 不带温度 metaid\n local k = childDevice.uplink.capabilities[1].formula.props.K\n local f0 = childDevice.uplink.capabilities[1].formula.props.Fo\n\n log.debug('shjy_DAS_BK-ZC01(振弦)子设备:m=%s,c=%s:公式参数=%s,%s', moduleNoStr, i, K, Fo)\n if k == nil or f0 == nil then\n Phy = nil\n log.debug('shjy_DAS_BK-ZC01(振弦)子设备:m=%s,c=%s:公式参数无效=%s,%s', moduleNoStr, i, K, Fo)\n else\n Phy = k * (freq ^ 2 - f0 ^ 2)\n log.debug('shjy_DAS_BK-ZC01=%s,通道号=%s Phy=%s,freq=%s', moduleNoStr, i, Phy, freq)\n end\n end\n\n local data1 = {\n data = {\n rawValue = tonumber(string.format('%5.3f', freq)),\n physicalvalue = tonumber(string.format('%5.3f', Phy))\n },\n device = deviceId,\n type = 1\n }\n\t\t\n\t\t\t\t\n\t\t\t\t\n table.insert(out.data, data1)\n else\n log.debug('shjy_DAS_BK-ZC01(振弦)子设备:m=%s,c=%s deviceId为nil', tostring(moduleNo), tostring(channelNo))\n end\n\t\t end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n return json.encode(out)\nend\n\nIsValid = function(data, deviceModule)\n -- if data == nil or string.len(data) / 2 ~= 17 then\n -- errormsg = string.format('无效的数据长度=%s≠17', string.len(data) / 2)\n -- errcode = 1002\n -- return false\n -- end\n\n local cmd = string.sub(data, 3, 4)\n if cmd ~= '03' then\n errormsg = string.format('无效的数据类型=%s≠03', cmd)\n errcode = 1003\n return false\n end\n local dataModule = iota.hexToByte(data, 0, 'B')\n if tonumber(deviceModule) ~= dataModule then\n errormsg = string.format('无效的数据模块号=%s≠%s', dataModule, deviceModule)\n errcode = 1004\n return false\n end\n return true\n --crc\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("shjy_DAS_BK-ZC01 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n local moduleStrCheck = child.uplink.props.module --模块 通道 接口获取\n local channelStrCheck = child.uplink.props.channel\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) and tonumber(channelStrCheck) == tonumber(channelNoId) then\n log.debug('shjy_DAS_BK-ZC01 m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n else\n log.debug('shjy_DAS_BK-ZC01 m=%s c=%s 无匹配子设备', moduleNoId, channelNoId)\n return nil\n end\nend\n\n INLINE 2019-08-26 10:59:47.473+08 2019-12-19 08:52:02.46+08 2019-08-26 \N
+a38f68fe-fc29-40f0-abf2-d3b10a127d9b cy_inclination_1 \N 测斜 1.0 af8080e1-5282-4133-81ad-97ba568cf313 af8080e1-5282-4133-81ad-97ba568cf313 f af8080e1-5282-4133-81ad-97ba568cf313 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nstart=function()\n log.debug("cy_inclination_1 module=%s",json.encode(device.uplink.props.module))\n local endian = 'B'\n local buff='' \n local errout={\n data ={},\n result = {}\n }\n buff=iota.appendHexByte(buff, 0xAA, endian)\n buff=iota.appendHexByte(buff, 0x08, endian)\n buff=iota.appendHexByte(buff, device.uplink.props.module, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0xBB, endian) \n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n print(string.format("cy_inclination_1:out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n\n local out={\n data ={},\n result = {}\n }\n \n local xDegree\n local yDegree\n local temperature \n --01820C0012124501035512002859E4 --moduleId=1\n --"anglex": 26.097594039948262,\n\t--"angley": 12.1245,\n\t--"temperature": -3.5512\n if string.len(hex)/2 == 17 then\n local xsign=string.sub(hex,9,10)\n if xsign=="00" then\n xDegree=tonumber(string.sub(hex,11,16))/10000\n else\n xDegree=tonumber(string.sub(hex,11,16))/10000*-1\n end\n\n local ysign=string.sub(hex,17,18)\n if ysign=="00" then\n yDegree=tonumber(string.sub(hex,19,24))/10000\n else\n yDegree=tonumber(string.sub(hex,19,24))/10000*-1\n end\n\n local tsign=string.sub(hex,25,26)\n if tsign=="00" then\n temperature=tonumber(string.sub(hex,27,32))/10000\n else\n temperature=tonumber(string.sub(hex,27,32))/10000*-1\n end\n out.data = { \n anglex = xDegree,\n angley = yDegree,\n temperature = temperature\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n return json.encode(out)\nend\n\n INLINE 2018-04-24 14:38:10.312+08 2018-04-24 14:52:23.376+08 2018-04-24 \N
+d6c7bf35-62db-4a57-9a6f-d50ab8f37ccd v \N v1.02 cb3f6958-fdbf-441d-8009-1fb1ecc61589 cb3f6958-fdbf-441d-8009-1fb1ecc61589 f cb3f6958-fdbf-441d-8009-1fb1ecc61589 Lua gfddss INLINE 2018-04-24 15:23:50.037+08 2018-04-24 15:23:50.037+08 2018-04-24 \N
+5be4b8c2-7201-4565-be1d-2af8209fc3e4 testOnData \N 1.0 352a31c7-1e5e-4c52-85f6-2fa692d0fda9 352a31c7-1e5e-4c52-85f6-2fa692d0fda9 f 352a31c7-1e5e-4c52-85f6-2fa692d0fda9 Lua onData=function(hex)\n log.debug("lucastest 收到数据=%s", hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n log.debug("lucastest bit.bor(1,2)=%s",bit.bor(1,2))\n out.data = { \n str=hex \n };\n local resultData =json.encode(out)\n ctx:notify(resultData)\nend INLINE 2018-07-10 11:54:51.577+08 2018-08-22 15:40:53.45+08 2018-07-10 \N
+d0816bbb-7afc-4139-a930-ba8f5267c76c gdjw_JLSZ_7000 \N 1.0 dade7e83-25b6-4932-993c-6d886fec9843 dade7e83-25b6-4932-993c-6d886fec9843 f dade7e83-25b6-4932-993c-6d886fec9843 Lua start=function()\n local endian = 'B'\n local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("gdjw_JLSZ_7000 设备模块 m=%s ",moduleNo)\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x16, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("gdjw_JLSZ_7000,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '采集 超时'} \n\t log.debug("gdjw_JLSZ_7000 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n--01030016000225cf\n--010304be40e61215a2 == -0.188378\nunmarshall=function(hex,moduleNoStr)\n log.debug("gdjw_JLSZ_7000 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local length =iota.hexToFloat(hex,3,'B')\n \n out.data = { \n length=tonumber(string.format('%0.3f',length))\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("gdjw_JLSZ_7000 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = string.format('返回数据长度无效=%s≠9',string.len(data)/2)\n errcode = 1002\n return false\n end\n \n local dataMoudle=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataMoudle) then\t\n errormsg = string.format('模块号无效=%s≠%s',dataMoudle,moduleCheck)\n errcode = 1003\n return false\n end\n return true\n--crc\nend\n INLINE 2019-01-19 14:32:55.18+08 2019-01-19 15:39:44.968+08 2019-01-19 \N
+1449480d-e748-4693-8f2a-1806b6b5b930 cy_temp_c1162 \N 长英采集仪版本 1.0 5f62fd39-0b72-492e-99be-308c935c1b64 5f62fd39-0b72-492e-99be-308c935c1b64 f 5f62fd39-0b72-492e-99be-308c935c1b64 Lua --//04 项目资料/2017-05/武汉大桥局青山桥/LTM8000用户手册_fin_4.doc\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift\n\nstart=function()\n\tlog.debug("start load cy_temp_C1162 moudle = %s ",device.uplink.props.module)\n --log.debug("cy_temp_C1162 root device = %s", json.encode(device))\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n \n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tif isModuleIdInvalid(moduleNo) then\n\t\terrout.result = {code = 1004, msg = 'Invalid moduleId,moduleIdLength ~=6'}\n\t\tctx:done(json.encode(errout))\n\telse\n\t\t\n\t\t\n\t\tstrCardNo=string.sub(moduleNo,2,3)\n\t\tlog.debug("cy_temp_C1162 strCardNo是"..strCardNo)\n\t\tstrModuleNo=string.sub(moduleNo,5,6) \n\t\tbuff=iota.appendHexByte(buff, 0x23, endian) \n\t\tbuff=buff..toHexStr(string.sub(strCardNo,1,1))\n\t\tbuff=buff..toHexStr(string.sub(strCardNo,2,2))\n\t\tbuff=buff..toHexStr(string.sub(strModuleNo,2,2)) \t\t\n\t\tbuff=iota.appendHexByte(buff, 0x0d, endian) \n\n\t\tSleep(3)\n\t\tok,resp=ctx:ssend(buff,15000)\n\t\tlocal resDataList='{}'\n\t\tif ok then \n\t\t\tresDataList = unmarshall(resp,moduleNo)--解析单条数据\n\t\t\t\n\t\t\tlog.debug("cy_temp_C1162 子设备模块通道 接口获取 m=%s, json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\t\tif subdevices ~=nil then\n\t\t\t\tfor index,child in pairs(subdevices) do \t\t\n\t\t\t\t\tlocal channelNo=child.uplink.props.channel\t\n\t\t\t\t\tlocal deviceId=child.id\n\t\t\t\t\tlog.debug("cy_temp_C1162 module=%s,channel=%s id=%s.",moduleNo,channelNo,deviceId)\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature=resDataList[channelNo+0]--//取对应的传感器值 默认插入表下标1开始\t\t\t\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\t\n\t\t\t\tend \n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\telse\n\t\t\t\tlog.debug("cy_temp_C1162:".."subdevices是nil")\n\t\t\t\treturn nil\n\t\t\tend\n\t\telse\n\t\t\tlog.debug("cy_temp_C1162 module=%s not ok ",moduleNo) \n\t\tend\n\t\t\t\t\n\t\t\n\tend\n\tlocal resultData =json.encode(out)\n ctx:done(resultData)\nend\n\n\n--3e30310003eb010510d3010d10c70109100d82\n--moduleId=K01C01\n--channelId=3\n--"temperature":28.4375,\nunmarshall=function(hex,moduleNoStr)\n\n\tlocal data=hex;\n\tlog.debug("cy_temp_C1162 m=%s data=%s string.len(data)/2-2-1=%s",moduleNoStr,data,string.len(data)/2-2-1)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n \n\t\t--存储每个通道下的返回的多个传感器数据\n\t resDataList = {}\n\t\t\n\t\tfor i=5,string.len(data)/2-2-1,4 do\n -- log.debug("i="..i)\n local tempBytes={}\n\t\t\ttempBytes[0]=string.sub(data,i*2+1,i*2+2)\n\t\t\ttempBytes[1]=string.sub(data,i*2+3,i*2+4)\n if tempBytes[0]=="ff" and tempBytes[1]=="ff" then\n\t\t\t\tout.result = {code=1001,msg="data is invalid"}\n\t\t\t return json.encode(out)\n\t\t\tend\n --log.debug("cy_temp_C1162 tempBytes[0]="..tempBytes[0])\n --log.debug("cy_temp_C1162 tempBytes[1]="..tempBytes[1])\n --log.debug("cy_temp_C1162 tempBytes[1]类型"..type(tempBytes[1]))\n \n --温度为 +\n -- log.debug("bit:_rshift(tonumber(tempBytes[1]),3)是"..bit:_rshift(tonumber(tempBytes[1]),3))\n\t\t\t\tif bit:_and(0xFF,bit:_rshift(tonumber(tempBytes[1],16),3))==0x00 then\n\t\t\t\t local tempBytes1=tonumber("21",16);\n\t\t\t\t -- log.debug('cy_temp_C1162 tempBytes1是'..tempBytes1)\n\t\t\t\t local temp=(bit:_and(tonumber(tempBytes[1],16),0x07)*256+tonumber(tempBytes[0],16))*0.0625;\n\t\t\t\t-- log.debug("cy_temp_C1162 temp+是"..temp)\n\t\t\t\t table.insert(resDataList,temp)\n\t\t\t else\n ----//温度为 -\n\t\t\t\t\tlocal temporary=tonumber(tempBytes[1],16)\n\t\t\t\t\tlog.debug("温度为 - tempByte[1]=%s ",tostring(temporary))\n\t\t\t\t if bit:_and(0xFF,bit:_rshift(tonumber(temporary,16),3))==0x1f then\n\t\t\t\t\t local temp=-1*((256 - temporary)*256-temporary)*0.0625;\n\t\t\t\t\t table.insert(resDataList,temp)\n\t\t\t\t -- log.debug("cy_temp_C1162 temp-是"..temp)\n\t\t\t\t end\n\t\t\t\tend \n end \n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return resDataList --返回数据表\nend\n\n\n--判断模块号格式\nisModuleIdInvalid=function(strModuleId)\n if string.len(strModuleId) ==6 then\n if string.sub(strModuleId,1,1)=='K' then\n\t if string.sub(strModuleId,4,4)=='C' then\n\t\t --模块号格式K01C01\n\t\t local n = tonumber(string.sub(strModuleId,2,3)..string.sub(strModuleId,5,6));\n\t\t\t if n then\n\t\t\t return false;\n\t\t\t end \n\t\t end\t \n\t end\t\n end\n return true\nend\n\nIsValid=function(data,moduleId,channelId)\n local countId=iota.hexToShort(data,3,'B');\n\tif string.len(data)/2 ~=countId*4+5+2 or string.len(data)/2 <=7 then\n\t errormsg = 'data length is wrong'\n errcode = 1001\n return false\n end\n\t\n if string.sub(data,1,2) ~= '3e' or string.sub(data,-4,-3) ~= '0d' then\n errormsg = 'Data is Invalid'\n errcode = 1001\n return false\n end\n\n return true\nend\n\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串ascii->字符16D\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n\nSleep=function(n)\n local t0 = os.clock()\n while os.clock() - t0 <= n do end\nend INLINE 2018-06-05 13:22:33.789+08 2018-06-05 15:15:52.597+08 2018-06-05 \N
+08a07e96-2fdb-40b9-aa08-b106bc3092c4 yx-log \N 1.0 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f 67c8b9e9-38d6-4c9a-8772-9c96d78121ed Lua start = function()\n\n local req = {\n type = "idau",\n payload = ""\n }\n local mop_log = {\n M = "c_shell",\n P = {} -- Get Log\n }\n\tmop_log.P.C = "rm -f /media/mmcblk0p1/data" --"cp /home/idau/logs/log.txt /home/idau/data/dac/log.txt"--"rm -f /home/idau/data/dac/log.txt"\n\t\n\n req.payload = json.encode(mop_log)\n log.debug("yx_idau_log:request=%s", json.encode(req))\n local ok, ack = ctx:ssend(req, 20000)\n result = {\n result = nil,\n type = 1,\n data = {\n ack = json.encode(ack)\n }\n }\n\tlog.debug("fs_idau_log:ack=%s", json.encode(ack))\n\n ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n if t == "host" then\n return 1\n elseif t == "relay" then\n return 2\n end\n return 3\nend\n INLINE 2019-12-27 15:00:56.834+08 2019-12-27 15:00:56.834+08 2019-12-27 \N
+35d39ff1-9f65-4305-b738-33e7b4adfcb6 test \N 1 1 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f f16833ab-a4a4-45f5-9b39-ad2c66e488f6 Lua -- 001626C68184DEF28AA5120D61FFDACFBEFFC22929F831\n-- 000126C6810D6FFDA1FFDACFBEF831\nstart=function()\n\tlog.debug("device.uplink.props.module=%s", device.uplink.props.module)\n local endian = 'B'\n local buff=''\n buff=iota.appendHexWord(buff, 21, endian) --2: 0015 协议类型=21\n buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 2: 0538 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 1: 01 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,3000)\n local result = unmarshall(ok,resp)\n log.debug("result=%s",result)\n ctx:done(result)\nend\n\nunmarshall=function(ok, hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (ok and string.len(hex) >=23 ) then\n -- 2 2 1 4 4 2\n -- 0001 26C6 81 0D6FFDA1 FFDACFBE F831\n \tlocal scale = 1000000.00;\n\t\tlocal temp = iota.hexToShort(hex,11,'B')/100.0;\n local xa = iota.hexToInt(hex,13,'B')/scale;\n local ya = iota.hexToInt(hex,17,'B')/scale;\n if (temp>45) then\n -- invalid data\n out.data={\n }\n out.result={\n code=1002,\n msg="over range"\n }\n else\n out.data = {\n x=xa,\n y = ya,\n \t\ttemp = temp,\n }\n end\n else\n \tlocal msg\n if ok then\n msg= 'Invalid Msg, len='..string.len(hex)\n else \n msg="Timeout" \n end\n out.result = {code=1001,msg=msg}\n out.data = {}\n end\n return json.encode(out)\nend INLINE 2018-04-25 17:21:46.401+08 2018-04-25 17:21:46.401+08 2018-04-25 \N
+b2f54327-7b39-41e7-b7b2-4ba258e6cf00 sonbest_wind_1 \N 搜博 1.0 76ba35a6-d733-40eb-b290-6538f9e9c77f 76ba35a6-d733-40eb-b290-6538f9e9c77f f 76ba35a6-d733-40eb-b290-6538f9e9c77f Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "sonbest_wind_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n \n \tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("sonbest_wind_1 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("sonbest_wind_1 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 1, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n -- 01 03 00 00 00 01 84 0A \n -- print("ssend=", ctx:ssend(buff,500) )\n log.debug("send %s, ctx=%s", "sonbest_wind_1.lua",buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n log.debug("recv %s, ctx=%s", "sonbest_wind_1.lua",hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==14) then\n \n -- 010302018CB871\n --"level": 3.96\n local windSpeed =iota.hexToShort(hex,3,'B')/100;\n \n out.data = {\n \n windSpeed=windSpeed,\n \n };\n else\n local message = "Invalid Msg, len is not rigth"\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("recv %s, ctx=%s", "sonbest_wind_1.lua",json.encode(out))\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2018-01-30 17:09:14.434+08 2018-03-29 16:42:30.486+08 2018-01-30 \N
+35f2a891-7956-4b9f-b57d-4e4c5c08b286 tjxk_yibiao_9800 \N 1.0 30733da7-f918-41cd-85ed-8b5b0b55b0e6 30733da7-f918-41cd-85ed-8b5b0b55b0e6 f 30733da7-f918-41cd-85ed-8b5b0b55b0e6 Lua --E:\\SVN\\201807项目\\2 北京昆仑海岸LNG监测项目--康飞\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "tjxk_yibiao_9800", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module\t\t\n\t\tlog.debug("tjxk_yibiao_9800 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\tmoduleNo=string.format("%02d", moduleNo)\n\t\tlocal asciimoduleNo=strToHex(moduleNo)\n\t\tbuff=iota.appendHexByte(buff, 0x21, endian) \n buff=buff..asciimoduleNo -- 模块号 \n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("tjxk_yibiao_9800 SSend error!")\n end\n ctx:done(result)\nend\n\n--5b31323331323334353637383930313233343536373831323334353631323334353631323334353631323334355d00005e\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\t\t\n local allAscii=HexToStr(string.sub(hex,1,-7))\n\t\tlog.debug("tjxk_yibiao_9800 allAscii=%s",allAscii)\n local standValue_Sum=string.sub(allAscii,5,14)\n\t\tlocal standValue_Instant=string.sub(allAscii,15,22)\n\t\tlocal pressure=string.sub(allAscii,23,28)\n local workValue_Sum=string.sub(allAscii,29,34)\n\t\tlocal workValue_Instant=string.sub(allAscii,35,40)\n\t\tlocal temperature=string.sub(allAscii,41,45)\n\t\tlog.debug("tjxk_yibiao_9800 value 1-6=%s,%s,%s,%s,%s,%s",standValue_Sum,standValue_Instant,pressure,workValue_Sum,workValue_Instant,temperature)\n out.data = {\n\t\t\tstandValue_Sum=tonumber(standValue_Sum),\t\t\t\n\t\t\tstandValue_Instant=tonumber(standValue_Instant)/100,\n\t\t\tpressure=tonumber(pressure)/10,\n\t\t\tworkValue_Sum=tonumber(workValue_Sum),\n\t\t\tworkValue_Instant=tonumber(workValue_Instant)/100,\n\t\t\ttemperature=tonumber(temperature)/10\t\t\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('tjxk_yibiao_9800 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 49 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x5b then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n\tlocal rec_module=HexToStr(string.sub(data,3,6))\n if moduleStrCheck~= rec_module then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('tjxk_yibiao_9800 数据校验通过')\n return true\n--crc\nend\n\n -- 字符串 -> BCD\nstrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\n end\n \n--hex->ascii\nHexToStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\t\n \n INLINE 2018-07-10 16:26:13.646+08 2018-07-11 09:52:52.775+08 2018-07-10 \N
+f46d22a0-54b2-47dc-8b98-6c3de609557a hzyz_mass_5302 \N 1.0 b1797f0b-c735-409e-89f5-ab695859f076 b1797f0b-c735-409e-89f5-ab695859f076 f b1797f0b-c735-409e-89f5-ab695859f076 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "hzyz_mass_5302.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n buff=iota.appendHexByte(buff, 0x27, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("hzyz_mass_5302,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '采集超时'} \n\t log.debug("hzyz_mass_5302 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n--01030400004E200000\n--\nunmarshall=function(hex,moduleNoStr)\n log.debug("hzyz_mass_5302 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local mass =iota.hexToUInt(hex,3,'B')\n out.data = { \n mass=mass\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("hzyz_mass_5302 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n local dataLen=string.len(data)/2\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = string.format('无效的数据长度=%s,≠9',string.len(data)/2)\n errcode = 1002\n return false\n end\n \n local datamodule=tostring(iota.hexToByte(data,0,'B'))\n if moduleCheck~=datamodule then\t\n errormsg = string.format('无效的模块号=%s[%s]',datamodule,moduleCheck)\n errcode = 1003\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2018-12-10 09:59:17.548+08 2018-12-10 16:26:36.418+08 2018-12-10 \N
+317a91ad-ae05-4ce3-9b76-916a9e3103b6 二二 \N 二二 475d6577-d638-4b9c-a4de-35f6ddd51240 475d6577-d638-4b9c-a4de-35f6ddd51240 f 475d6577-d638-4b9c-a4de-35f6ddd51240 Lua 二 INLINE 2018-01-25 10:34:27.073+08 2018-01-25 14:27:49.31+08 2018-01-25 \N
+cc8a4434-b6c9-4c38-a813-90111a3625f7 mk_temp_1 \N 温度 1.0 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca f c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, ctx=%s", "mk_temp_1.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--AA01030503EB752B\n--"temp": 100.3\n local out={\n data ={},\n result = {}\n }\n log.debug("recv %s, ctx=%s", "mk_temp_1.lua",data)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local moduleNo = iota.hexToByte(hex,1,'B')\n \n local modulenumber= tonumber(device.props.moduleId)\n local valCmd = iota.hexToByte(hex,3,'B') \n if valCmd == 0x05 and moduleNo==modulenumber then\n \n local Temp = iota.hexToShort(hex,4,'B') / 10.0\n out.data = { \n temp=Temp\n }\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_temp_1.lua",json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = 1001, msg = "Is not validated"}\n end\n else\n out.result = {code = errcode, msg = errormsg}\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_temp_1.lua",json.encode(out))\n ctx:notify(resultData)\n end\n \nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n --iota.checkPlusSum16\n return true\n--crc\nend\n\n\n\n INLINE 2018-01-08 11:33:30.147+08 2018-02-28 18:32:12.224+08 2018-01-08 \N
+1285ee16-87aa-464e-9656-872ede3b16a1 jnrs_temphumi_1 \N 基泰马甲版 1.0 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 f d3f1aa63-8397-45a4-af26-15a0f91d1e13 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "jnrs_temphumi_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\tlocal moduleNo=device.uplink.props.module or device.props.moduleId\n\tlog.debug("jnrs_temphumi_1 moduleNo=%s interface module=%s, property moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n buff=iota.appendHexByte(buff, moduleNo, endian)\n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 2, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("send %s, ctx=%s", "jnrs_temphumi_1.lua",buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n\t\tctx:done(result)\n\telse\n\t\tlog.debug("jnrs_temphumi_1 SSend error")\n end\nend\n\nunmarshall=function(hex)\n log.debug("recv %s, ctx=%s", "jnrs_temphumi_1.lua",hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==18) then\n \n -- 0103040292ff9b5a3d\n --"humi": 65.8,\n\t\t--"temp": -10.1\n local humi =iota.hexToShort(hex,3,'B')/10;\n local temp =iota.hexToShort(hex,5,'B')/10;\n \n out.data = { \n temperature=temp,\n humidity=humi\n };\n else\n local message = "Invalid Msg, len is not rigth"\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("out=%s, ctx=%s", "jnrs_temphumi_1.lua",json.encode(out))\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2018-03-20 17:27:25.594+08 2018-03-27 09:27:36.747+08 2018-03-20 \N
+67b012f5-78e5-44d1-a465-db543bdc1c00 szjh_flow_9600 \N 1.0 762b9963-18af-4789-afed-88df57b2a556 762b9963-18af-4789-afed-88df57b2a556 f 762b9963-18af-4789-afed-88df57b2a556 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "szjh_flow_9600.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x011, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("szjh_flow_9600,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t log.debug("szjh_flow_9600 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("szjh_flow_9600 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n local hex_flow_sec=string.sub(hex,2*5+1,2*5+4)..string.sub(hex,2*3+1,2*3+4)\n\t\tlocal hex_flow_min=string.sub(hex,2*9+1,2*9+4)..string.sub(hex,2*7+1,2*7+4)\n\t\tlocal hex_flow_hour=string.sub(hex,2*13+1,2*13+4)..string.sub(hex,2*11+1,2*11+4)\n\t\tlocal hex_flow_speed=string.sub(hex,2*17+1,2*17+4)..string.sub(hex,2*15+1,2*15+4)\n\t\tlocal hex_flow_total=string.sub(hex,2*21+1,2*21+4)..string.sub(hex,2*19+1,2*19+4)\n\t\tlocal hex_flow_total_index=string.sub(hex,2*23+1,2*23+4)\n\t\t\n\t\tlog.debug("szjh_flow_9600 数据=%s,%s,%s",hex_flow_sec,hex_flow_min,hex_flow_hour)\n local flow_sec =iota.hexToFloat(hex_flow_sec,0,'B')\n\t\tlocal flow_min =iota.hexToFloat(hex_flow_min,0,'B')\n\t\tlocal flow_hour =iota.hexToFloat(hex_flow_hour,0,'B')\n\t\tlocal flow_speed =iota.hexToFloat(hex_flow_speed,0,'B')\n\t\tlocal flow_total =iota.hexToUint(hex_flow_total,0,'B')\n\t\tlocal flow_total_index =iota.hexToUShort(hex_flow_total_index,0,'B')\n \n out.data = { \n --flow_sec=flow_sec,\n\t\t\t--flow_min=flow_min,\n\t\t\tflow_hour=flow_hour,\n\t\t\tflow_speed=flow_speed,\n\t\t\tflow_total=flow_total^flow_total_index\n\t\t\t\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("szjh_flow_9600 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 27 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n\tlog.debug("szjh_flow_9600 m=%s,校验通过",moduleNoStr)\n return true\n--crc\nend\n\n \n\n INLINE 2018-08-13 10:55:12.724+08 2018-08-13 16:26:35.702+08 2018-08-13 \N
+1fd5bb36-282f-48f4-bddf-3e3b780b76c3 sonbest_smoke_1 \N 上海搜博实业有限公司 1.0 76ba35a6-d733-40eb-b290-6538f9e9c77f 76ba35a6-d733-40eb-b290-6538f9e9c77f f 76ba35a6-d733-40eb-b290-6538f9e9c77f Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "sonbest_smoke_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("sonbest_smoke_1 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("sonbest_smoke_1 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 1, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n --::010300000001 \n -- print("ssend=", ctx:ssend(buff,500) )\n log.debug("send %s, ctx=%s", "sonbest_smoke_1.lua",buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n log.debug("recv %s, ctx=%s", "sonbest_smoke_1.lua",hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==14) then\n \n --01030203750000 \n --"smoke": 5000\n local smoke =iota.hexToShort(hex,3,'B');\n \n out.data = {\n \n smoke=smoke,\n \n };\n else\n local message = "Invalid Msg, len is not rigth"\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("recv %s, ctx=%s", "supmea_pressure_1.lua",json.encode(out))\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2018-01-30 17:04:18.82+08 2018-03-29 16:44:47.777+08 2018-01-30 \N
+540f8993-f761-48dc-9c69-00851a16a2ac shxb_laser_9556 \N 1.0 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd f 9ea59fd2-e55b-4853-a447-0911d3b8b8dd Lua --// PMO/02 产品协议/SavoirCloud/01 协议/4月第3周/北京宝力马传感技术有限公司/通讯协议WS302M2A-5温湿度变送器使用说明书V3.0.1(中英)-华为专用-北京宝力马传感技术有限公司.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shxb_laser_9555", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shxb_laser_9555 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x94, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("shxb_laser_9555 SSend error!")\n end\n ctx:done(result)\nend\n\n--1203040025001908f3\n--moduleId=18 \n--"humidity": 2.5,\n--"temp": 3.7\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local length = iota.hexToUInt(hex,3,'B')/10.0 --高精度\n \n \n out.data = {\n\t\t\tlength=length\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('shxb_laser_9555 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n\tif iota.hexToUInt(data,3,'B') == 0xffffffff then\n errcode = 1001\n errormsg = '采样错误' \n return false\n end\n\t\n log.debug('shxb_laser_9555 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2018-06-07 15:48:37.538+08 2018-12-20 09:24:02.333+08 2018-06-07 \N
+028a903a-d5b8-41a5-b42f-dc0a963cc74f test \N 13131 cc8dde53-d482-45d2-8216-78628899396a cc8dde53-d482-45d2-8216-78628899396a f cc8dde53-d482-45d2-8216-78628899396a Lua 1321313123 INLINE 2018-02-08 17:17:34.275+08 2018-03-01 10:03:58.59+08 2018-02-08 \N
+82cb0db7-6181-419c-8c52-a6b5e01e6c49 cd_flowMeter_2312 \N 承德热河克罗尼仪表流量计 1.0 5343c9e2-a32e-4c69-97bb-6e526464cb93 5343c9e2-a32e-4c69-97bb-6e526464cb93 f 5343c9e2-a32e-4c69-97bb-6e526464cb93 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nstart=function()\n log.debug("start %s, ctx=", "cd_flowMeter_2312.lua",json.encode(device))\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0xD5, endian)\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) -- 1: 指令: 0x01 = 采集\n\tbuff=iota.appendHexByte(buff, 0x44, endian) -- 1: 通道号\n buff=iota.appendHexByte(buff, 0x50, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x16, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) \n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result={}\n if ok then\n result = unmarshall(resp)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n --d501032c100c1b0b300a008042a0000042ca00004241c86c442798df000000c73f142c444406ff2e3f7f20953f7f8af06aae\n --"cumulant": 199.5788,\n --"flow": 670.388611,\n --"pressure": 101,\n --"temp": 80\n local out={\n type = 1,\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if iota.hexToByte(hex,1,'B') ~= tonumber(device.props.moduleId) then \n errcode = 1001\n errormsg = 'Hex moudleId is False' \n return json.encode(out)\n end\n if ErrorCode then\n local Flow = iota.hexToFloat(hex,24,'B')\n local Cumulant = iota.hexToFloat(hex,32,'B')\n \t\n Cumulant = Cumulant + bit:_or(bit:_or(bit:_or(bit:_lshift(iota.hexToByte(hex,28,'B'),24),bit:_lshift(iota.hexToByte(hex,29,'B'),16)),bit:_lshift(iota.hexToByte(hex,30,'B'),8)),iota.hexToByte(hex,31,'B'))\n local Temp = iota.hexToFloat(hex,12,'B')\n local Pressure = iota.hexToFloat(hex,16,'B')\n out.data = {\n flow=Flow,\n temp = Temp,\n cumulant = Cumulant,\n pressure = Pressure\n }\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 50 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,2,'B') ~= 0x03 then \n errcode = 1001\n errormsg = 'Hex CMDType False' \n return false\n end\n return true\n--crc\nend\n\n INLINE 2017-08-26 15:38:00.113+08 2018-02-28 18:32:12.193+08 2017-08-26 \N
+6961f5ca-3d77-4944-921f-d4bf6d757bce fs_tempHum_1101 \N 温湿度采集协议 统一协议 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n协议号: 1101;\n协议名: modbus 温湿度.\n]]--\n--协议参考文档: “统一协议-V2012-04-28.xls”\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\n\nstart=function ()\n log.debug("fs_1101:load script %s, moduleId=%s", "fs_1101", device.moduleId or "[nil]")\n \n \n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fs_1101 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("fs_1101 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\tsendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,4000)\n\tlog.debug("fs_1101:发送数据=%s",sendBuff)\n\tlocal result=""\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\t\tlog.debug("fs_1101:接收数据=%s",resp)\n\telse\n local errorOut={\n data ={},\n result = {}\n }\n\t\terrorOut.result = {code=1001,msg='采集超时'} \n result=json.encode(errorOut)\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode(moduleNo_str)\n\t-- 32字节. 大字序\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0xFC); -- 1: 1 帧头 去:FC,回 FD\n\tbuff=iota.appendHexByte(buff, 0x01); -- 1: 2 设备类型,温湿度=1\t\n\tbuff=iota.appendHexWord(buff, moduleNo_str, BE); -- 2: 3/4 模块号\n\tbuff=buff.."00".."00"; -- 1 1 : 5/6 无用\n\tbuff=iota.appendHexByte(buff, 0x01); -- 1: 7 指令\n\tfor i = 8,30 do -- 1: 8/30 填写0\n\t\tbuff=buff.."00";\n\t\ti = i+1;\n\tend\n\tlocal crc = checkCRC8(buff,2)\n \tcrc =PadLeft(2,0,crc)\n\tbuff=buff..crc -- 1: 31 CRC8 加总异或,2-30\n --log.debug('fs_1101:CRC8 Buff = %s',crc)\n\tbuff=iota.appendHexByte(buff, 0xCF); -- 1: 32 结尾\n\t--log.debug("fs_1101:start %s, ctx=%s ", "fs_1101.lua",buff)\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 FD01002300000100005541CC000000000000000000000000000000000000C4DF\n--temp=25.5 Hum=0.85 module=35\nfunction protocol_decode(da,moduleNoCheck)\n \n\tlocal data = da;\n\t\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug("fs_1101:收到数据%s",data)\n\t--判断数据有效性\t\t\t\n\t--0xFD固定帧头,01是温湿度设备类型 0xDF固定帧尾\n local ErrorCode = IsValid(data,moduleNoCheck)\n if ErrorCode then \n\n log.debug("数据有效")\n\t\t--计算温湿度\n\t\tlocal humH = iota.hexToByte(data, 8, 'B');\n log.debug("fs_1101:humH等于:%s",humH)\n\t\tlocal humL = iota.hexToByte(data, 9, 'B');\n log.debug("fs_1101:humL等于:%s",humL)\n\t\tlocal hum = (humH*256 + humL) / 100.0;\n\t\tlocal temp = iota.hexToFloat(data, 10, 'B');\n log.debug("fs_1101:temp等于:%s",temp)\n\n\t\tout.data = {\n\t\ttemp=temp,\n\t\thumid= hum\n\t\t};\n else\n out.result = {code=errcode,msg=errormsg} \n end\n\treturn json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n log.debug('fs_1101:开始校验数据%s',data)\n local startbyte = iota.hexToByte(data,0,'B');\n \tlocal devicetype = iota.hexToByte(data,1,'B');\n \tlocal endbyte = iota.hexToByte(data,31,'B');\n if data == nil or string.len(data)/2 ~= 32 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \tif startbyte ~= 0xFD or devicetype ~= 0x01 or endbyte ~= 0xDF then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleNoCheckStr) ~= iota.hexToUShort(data,2,'B') then\t\n errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNoCheckStr,iota.hexToUShort(data,2,'B'))\n errcode = 1004\n return false\n end\n log.debug('fs_1101:数据校验通过')\n return true\n--crc\nend\n\nfunction checkCRC8(val,start)\n local CRC8Table ={\n 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,\n 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,\n 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,\n 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,\n 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,\n 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,\n 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,\n 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,\n 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,\n 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,\n 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,\n 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,\n 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,\n 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,\n 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,\n 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53\n }\n local c = 0\n for i = start, string.len(val)/2 do\n local b = iota.hexToByte(val,i-1,'B')\n local index = bit:_xor(c,b)\n c = CRC8Table[index+1];\n end\n local crc8 = string.format("%X",c)\n return crc8\nend\n\nPadLeft=function(cnt,num,hex)\n local len = string.len(tostring(hex))\n local offset = cnt -tonumber(len)\n if offset == 0 then \n return hex\n else\n for i = 1,offset do \n hex = tostring(num)..tostring(hex)\n end\n end\n return hex\nend\n\n\n INLINE 2017-08-28 21:10:05.448+08 2020-04-28 10:49:51.179+08 2017-08-22 \N
+37d61bde-62f1-4c1e-97f9-8546cba82d2d fs_645_1997 \N 国网电表水表协议 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--68a0a1a2a3a4a568010243c3 +CS +16H CS=(68a0a1a2a3a4a56801021090的累加和)\n-- cmd=fefefefe6808440327000068010243c34f16 \nstart=function()\n log.debug("start %s, ctx=%s", "fs_ammeter.lua",json.encode(ctx.device))\n\n local endian = 'B'\n local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\n if string.len(moduleNo)<12 then\n local lenadd=12-string.len(moduleNo)\n for i=1,lenadd do\n moduleNo='0'..string.lower(moduleNo)\n end\n end\n --调换模块号字节序\n local newModuleNo=exchangeHtoL(moduleNo)\n\tlog.debug("fs_ammeter 设备模块通道 接口获取 m=%s",moduleNo)\n\n\tbuff=string.format("68%s68010243c3",newModuleNo) \n\tbuff="fefefefe"..buff..CheckPlusSum(buff,0,string.len(buff)/2)..'16'\n log.debug("fs_ammeter,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '采集超时'} \n\t log.debug("fs_ammeter m=%s, ok is false",moduleNo)\n\t ctx:done(json.encode(errout))\n\tend\nend\n--module=000027034408\n--FEFE6808440327000068810643C34C333333B816 =》0.19 \nunmarshall=function(hex,moduleNoStr)\n log.debug("fs_ammeter m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n local hexBCD=string.sub(hex,-6,-5)..string.sub(hex,-8,-7)..string.sub(hex,-10,-9)..string.sub(hex,-12,-11)\n log.debug("fs_ammeter m=%s,hexBCD=%s ",moduleNoStr,hexBCD)\n local totalenergy =tonumber(getData(hexBCD))/100\n\t\tlocal initialvalue=device.props.initial\n log.debug("fs_ammeter initialvalue=%s",initialvalue)\n local phy=totalenergy-initialvalue\n log.debug("fs_ammeter m=%s,totalenergy=%s ",moduleNoStr,totalenergy)\n out.data = { \n\t\t\treadingNumber=phy\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("fs_ammeter m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n\nIsValid=function(data,moduleCheck)\n local data=string.gsub(data,'fefe','')\n log.debug("fs_ammeter 校验 data=%s",data)\n if data == nil or string.len(data)/2 ~= 18 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n if string.sub(data,1,2) ~='68' or string.sub(data,-2,-1) ~='16' then\t\n errormsg = 'Invalid acq heade or tail'\n errcode = 1004\n return false\n end\n\t\n local moduleCheckStr=string.sub(data,3,3+11)\n moduleCheckStr=exchangeHtoL(moduleCheckStr)\n if tostring(moduleCheck) ~= moduleCheckStr then\t\n errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleCheckStr,moduleCheck)\n errcode = 1004\n return false\n end\n log.debug("fs_ammeter 校验通过 m=%s,data=%s",moduleCheck,data)\n return true\n--crc\nend\n\nCheckPlusSum=function(hexStr, startIndex, endIndex)\n log.debug("fs_ammeter校验和 hexStr=%s,startIndex=%s,endIndex=%s ",hexStr,startIndex,endIndex)\n local sum = 0\n for i = startIndex, endIndex-1 do\n\t local byteSte=string.sub(hexStr,i*2+1,i*2+2)\n --log.debug("fs_ammeter校验和 i=%s, byteSte=%s",i,byteSte)\n sum = (sum + tonumber(byteSte,16))\n end \n local result = sum % 256\n log.debug("fs_ammeter 校验和 result=%s hex=%s",result,string.format("%x",result))\n return string.format("%02x",result)\nend\n\nexchangeHtoL=function(moduleStr)\n log.debug("fs_ammeter 交换 moduleStr=%s",moduleStr)\n local length=string.len(moduleStr)/2\n local newModuleStr=''\n for i=length-1,0,-1 do\n newModuleStr = string.sub(moduleStr,-1*(2*i+2),-1*(2*i+1))..newModuleStr\n end\n log.debug("fs_ammeter 交换newModuleStr=%s",newModuleStr)\n return newModuleStr\nend\n\ngetData=function(BCDstr)\n log.debug("fs_ammeter 获取数据 BCDstr=%s",BCDstr)\n local e_BCDstr=BCDstr --exchangeHtoL(BCDstr)\n local newBCDstr=''\n local len=string.len(e_BCDstr)/2\n for i=0,len-1,1 do\n local rawBCDbyte=string.sub(e_BCDstr,2*i+1,2*i+2)\n --log.debug("fs_ammeter 获取数据rawBCDbyte=0x%s",rawBCDbyte)\n local rawdata=tonumber(rawBCDbyte,16)-tonumber('33',16)\n --log.debug("fs_ammeter 获取数据 rawdata=%s",rawdata)\n newBCDstr = newBCDstr..string.format('%02x',rawdata)\n --log.debug("fs_ammeter 获取数据 newBCDstr=%s",newBCDstr)\n end\n return newBCDstr\nend\n\n INLINE 2018-10-31 16:45:03.881+08 2019-01-05 12:49:56.686+08 2018-10-31 \N
+a9269cd1-57a8-4731-a70d-ef619cc8ee96 mas_micro_gprs \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua start=function()\n -- log.debug("masmicrogprs [%s] : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n if data ~=nil then\n log.debug("masmicrogprs [%s] devices data =%s",data)\n ParseData(data) \n else\n --log.error("masmicrogprs [%s] recvd content is nil")\n end\nend\n\nlocal dtuId=device.uplink.props.id --日志标记\n\nfunction ParseData(data)\n local out={\n data ={},\n result = {},\n type=2\n }\n\t\n\t\n if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then --振动数据\n --log.debug("masmicrogprs [%s] 振动数据 data =%s",data)\n local package=iota.hexToShort(data,8,'L')\n local packagecount=iota.hexToShort(data,10,'L')\n local datpackage=string.sub(data,41,-9)\n local moduleid=iota.hexToShort(data,16,'L')\n\n local req1 =''\n local req2 =''\n local req =''\n req1=iota.appendHexByte(req1, 01 , 'L') -- 0-3 压缩协议 4-7 协议版本\n req1=iota.appendHexByte(req1, 0x02 , 'L')\n req1=iota.appendHexWord(req1, 0x0007 , 'L')\n req1=iota.appendHexWord(req1, 0x0000 , 'L')\n \n req2=iota.appendHexWord(req2, package , 'L')\n req2=iota.appendHexWord(req2, packagecount , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, moduleid , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n local checkdat=req1..req2\n local checksum=HeadCheckSum(checkdat)\n req=req1\n req=iota.appendHexWord(req, checksum , 'L')\n req=req..req2\n req=iota.appendHexWord(req, package , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=req..'00000000'\n req=iota.appendHexCrc(req, 'L' ,0) --校验\n local crc16=string.sub(req,-4,-1)\n req=string.sub(req,1,-13)\n req=req..crc16\n req=iota.appendHexByte(req, 0 , 'L') \n req=iota.appendHexByte(req, 0xfa , 'L') \n log.debug("masmicrogprs [%s] datfileback %s", req)\n ctx:asend(req, 20000)\n\n if package==packagecount then\n local r1,ok = redis.get(device.id.."_mpzd")\n --log.debug("masmicrogprs [%s] 解析dat r1= %s",dtuId, r1)\n ParseFileDat(r1)\n else\n if package==1 then\n local firstpackage=string.sub(datpackage,-80,-1)\n redis.set(device.id.."_mpzd", firstpackage)\n --log.debug("masmicrogprs [%s] 接收dat datpackage= %s",dtuId, firstpackage)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据首包'\n }\n }\n ctx:notify(json.encode(re))\n else\n local r1,ok = redis.get(device.id.."_mpzd")\n --log.debug("masmicrogprs [%s] 接收dat r1= %s package=%s",dtuId, r1,package)\n local data=r1..datpackage\n redis.set(device.id.."_mpzd", data)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n end\n else \n\t \n\t -- 非振动数据\n if string.sub(data,13,16)=='8a00' then\n local rtumodule=iota.hexToShort(data,3,'B')\n local power = iota.hexToByte(data,13,'B')\n --log.debug("masmicrogprs [%s] 剩余电量 %s",dtuId, power)\n\t\t\tlocal setting = iota.hexToByte(data,14,'B')\n\t\t\t--log.debug("masmicrogprs [%s] 通道配置版本号 %s",dtuId, setting)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\t--log.debug("masmicrogprs [%s] 版本固件 %s",dtuId, ver)\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\n\t\t\tlocal version = string.format("%0.2f",ver)\n\t\t\tlocal v = Split(version,'.')\n\t\t\tlocal vlen = v[2].length\n\t\t \n\t\t\tif vlen == 1 then\n\t\t\t version = version.."0"\n\t\t\telseif vlen == 0 then\n\t\t\t version = version..".00"\n\t\t\tend\n\t\t\t--log.debug('fs_microPower_1 version=%s',dtuId, version)\t\t\t\n\t\t\tredis.set(device.id.."_version", version)\t\t\t\n\n local strdevice= toHexStr(json.encode(device))\n strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n local crc=string.sub(strdevice,-4,-1)\n --log.debug("masmicrogprs [%s] devices crc =%s",dtuId,crc)\n local r1,ok = redis.get(device.id.."_mpset")\n if ok and r1~=nil then\n\t\t\t log.debug("masmicrogprs [%s] crc %s r1 %s setting%s" ,dtuId,crc,r1,setting)\n if crc == r1 and setting ~= 0xFF then\n log.debug("masmicrogprs [%s] 配置无修改",dtuId)\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 0, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("masmicrogprs [%s] 苏醒帧返回 %s",dtuId, req)\n ctx:asend(req, 20000)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置无修改'\n }\n }\n ctx:notify(json.encode(re))\n else\n log.debug("masmicrogprs [%s] 配置有修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("masmicrogprs [%s] 苏醒帧返回 %s",dtuId, req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n else\n log.debug("masmicrogprs [%s] 配置初次配置",dtuId)\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("masmicrogprs [%s] 苏醒帧返回 %s",dtuId, req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n end\n \n if string.sub(data,13,16)=='8a02' then\n log.debug("masmicrogprs [%s] 设备休眠",dtuId)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '设备休眠'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n local rtumodule=iota.hexToShort(data,3,'B')\n if string.sub(data,13,16)=='8601' and string.len(data)/2>26 then\n local time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\t--log.debug("masmicrogprs [%s] r1=%s,r1ok=%s,_power=%s",dtuId,r1,r1ok,power)\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver=r1\n\t\t\t\t--log.debug("masmicrogprs [%s] r1=%s,r1ok=%s,_version=%s",dtuId,r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%", power)\n\t\t\t--log.debug("masmicrogprs [%s] powerstr=%s",powerstr)\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} \n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time \n\t\t\t}\n\t\t\ttable.insert(out.data,rst)\n local isover=iota.hexToByte(data,25,'B') --尾包\n local datalength=0\n local firststart=27\n for i=1,sensorCount,1 do\n\t\t\t\t--log.debug("masmicrogprs [%s] XDATA=%s",dtuId,string.sub(data,firststart,firststart+datalength))\n firststart=firststart+datalength\t\t\t\t\n local sensorType=iota.hexToByte(data,firststart,'B')\n local module=iota.hexToShort(data,firststart+3,'B')\n local channel=iota.hexToByte(data,firststart+2,'B')\n datalength=iota.hexToByte(data,firststart+1,'B')+6\n if sensorType==0 then --振弦\n local childDevice=getZxDeviceInfo(module,channel)\n\t\t\t\t\t--log.debug("masmicrogprs [%s] 振弦 %s, deviceid %s",dtuId, module,childDevice.id)\n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal Phy=0\n\t\t\t\t\t\tlocal k = childDevice.uplink.props.k or 0\n\t\t\t\t\t\tlocal kt = childDevice.uplink.props.kt or 0\t\t\t\t\t\t\n\t\t\t\t\t\tlocal f0 = childDevice.uplink.props.f0 or 0\n\t\t\t\t\t\tlocal t0 = childDevice.uplink.props.t0 or 0\t\t\n\t\t\t\t\t\tlocal status = iota.hexToByte(data,firststart+11,'B')\n\t\t\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\t\t\tlocal freq = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\tlocal temp = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t--log.debug("masmicrogprs [%s] 振弦 Phy =%s, deviceid %s", dtuId,Phy,childDevice.id)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\tam = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B'),\n\t\t\t\t\t\t\t\tphysicalvalue = Phy\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t}\n\t\t\t\t\t\tif childDevice.props.sensortype == "zxwd" then\n\t\t\t\t\t\t\trst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif childDevice.props.sensortype ~= "zxwd" then\n\t\t\t\t\t\t\tif status == 1 then\n\t\t\t\t\t\t\t\trst.result = {code=30010022,msg="频率线断路"}\n\t\t\t\t\t\t\t\trst.data = {}\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif status == 2 then\n\t\t\t\t\t\t\t\trst.result = {code=30010023,msg="频率线短路"}\n\t\t\t\t\t\t\t\trst.data = {}\n\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\tend\t\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t--log.debug("masmicrogprs [%s] 振弦 %s",dtuId, json.encode(out))\n\t\t\t\t\tend\n end\n if sensorType==1 then --485\n local childDevice=getDeviceInfo(module,channel)\n \t\t\tlocal protocalCode=iota.hexToShort(data,firststart+6,'B')\n\t\t\t\t\tif childDevice~=nil then\t\n\t\t\t\t\t\tif protocalCode==1503 or protocalCode==1502 then --测斜\n\t\t\t\t\t\t--log.debug("masmicrogprs [%s] 测斜 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tangley = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("masmicrogprs [%s] 测斜 %s",dtuId, json.encode(out))\n\t\t\t\t\t\tend\n end\n \n if protocalCode==9102 then --裂缝\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("masmicrogprs [%s] 裂缝 %s, deviceid %s",dtuId, module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("masmicrogprs [%s] 裂缝 %s", dtuId, json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==9218 then --风速\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 风速 %s, deviceid %s",dtuId, module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tspeed = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 风速 %s",dtuId, json.encode(out))\n\t\t\t\t\t\tend\n end\n\t\t\t\t\tif protocalCode==9219 then --风向\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 风向 %s, deviceid %s",dtuId, module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tdirection = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 风向 %s",dtuId, json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==1102 then --温湿度\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\thumidity = iota.hexToFloat(data,firststart+16,'B') \n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n end\n \n if protocalCode==9002 then --压差\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n end\n\t\t\t\t\tif protocalCode==9030 then --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t\t--log.debug("masmicrogprs [%s] 静力水准仪(齐兴) %s,dtuId, deviceid: %s", module,childDevice.id)\n\t\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("masmicrogprs [%s] 静力水准仪 %s",dtuId, json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\tif protocalCode==9031 then --静力水准仪\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t\t--log.debug("masmicrogprs [%s] 静力水准仪 %s, deviceid: %s",dtuId, module,childDevice.id)\n\t\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("masmicrogprs [%s] 静力水准仪 %s",dtuId, json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509 then --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992 then --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("masmicrogprs [%s] 水位 %s, deviceid %s",dtuId, module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\t--temperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\tpressure=iota.hexToFloat(data,firststart+12,'B')--兼容老设备\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("masmicrogprs [%s] 水位 %s",dtuId, json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\t\t\n end\n\t\t\t\t--log.debug("masmicrogprs [%s] dataresult %s",dtuId, json.encode(out))\n end \n log.debug("masmicrogprs [%s] out %s", dtuId,json.encode(out))\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0601, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0000, 'B') --数据区长度\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n --log.debug("masmicrogprs [%s]: databack: %s",dtuId, req)\n ctx:asend(req, 20000)\n ctx:notify(json.encode(out)) \n end\n end\nend\n\nfunction Deploy()\n local total=totalSensors()\n --log.debug("masmicrogprs [%s] : totalSensors =%s",dtuId,total)\n local over=0\n local onepag=0\n local totallength=3\n local buff=''\n \n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n over=over+1\n onepag=onepag+1\n\t\t\t--log.debug("masmicrogprs [%s] subdevice =%s",dtuId,json.encode(subdevice))\n\t\t\t--log.debug("masmicrogprs [%s] sensortype =%s",dtuId,subdevice.props.sensortype)\n\t\t\t\n if subdevice.props.sensortype=='zx' or subdevice.props.sensortype=='zxwd' then \n\t\t\t\t--log.debug("masmicrogprs [%s] : zx zxwd")\n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x00, 'B') --传感器类型\n\t\t\t\t--log.debug("masmicrogprs [%s] : zx zxwd buff=%s",buff)\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\t--log.debug("masmicrogprs [%s] : zx zxwd colgain=%s",dtuId,colgain)\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\t--log.debug("masmicrogprs [%s] : zx zxwd incentivemethod=%s",dtuId,incentivemethod)\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\t--log.debug("masmicrogprs [%s] : zx zxwd checkoption=%s",dtuId,checkoption)\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\t--log.debug("masmicrogprs [%s] : zx zxwd vibratspectrum=%s",dtuId,vibratspectrum)\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\n\t\t\t\t--log.debug("masmicrogprs [%s] : zx zxwd vibratsamplfreq=%s",dtuId,vibratsamplfreq)\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\t--log.debug("masmicrogprs [%s] : zx zxwd incentive=%s",dtuId,incentive)\n local settingvib = tonumber(colgain) + tonumber(incentive) * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n log.debug("masmicrogprs [%s] : settingvib =%s",settingvib)\n buff=iota.appendHexByte(buff, settingvib, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexByte(buff, settingvib, 'B') --振弦采集参数\n buff=iota.appendHexWord(buff, subdevice.uplink.props.frequency, 'B') --振弦频率初值\n buff=iota.appendHexByte(buff, 0x00, 'B') --上传频谱ID\n buff=iota.appendHexByte(buff, 0x01, 'B') --采集选项\n end \n if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd'and subdevice.props.sensortype ~='zxwd' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x01, 'B') --传感器类型\n\t\t\t\tlog.debug("masmicrogprs [%s] : begin setting")\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\t--log.debug("masmicrogprs [%s] baudrate =%s databits %s parity %s stopbits ",dtuId,baudrate,databits,parity,stopbits)\n\t\t\t\tlocal setting\n\t\t\t\tif baudrate == nil then\n\t\t\t\t\tsetting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n\t\t\t\telse\n setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n\t\t\t\tend\n --log.debug("masmicrogprs [%s] setting =%s",dtuId,setting)\n buff=iota.appendHexByte(buff, setting, 'B') --选项1 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B') --协议号\n buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B') --模块号\n buff=iota.appendHexByte(buff, 0x01, 'B') --子通道号\n end\n if subdevice.props.sensortype =='zd' then \n totallength=totallength+31 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x04, 'B') --传感器类型\n buff=iota.appendHexByte(buff, 0x00, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x12, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B') --定时采样间隔\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B') --定时采样时长\n buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B') --加速度触发采样时长\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B') --采样频率\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B') --滤波频率\n\n buff=iota.appendHexWord(buff, 0x42c8, 'B')\n buff=iota.appendHexWord(buff, 0x0000, 'B')\n buff=iota.appendHexWord(buff, 0x4248, 'B')\n buff=iota.appendHexWord(buff, 0x0000, 'B')\n local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n buff=iota.appendHexByte(buff, trigger1, 'B') --触发加速度\n buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B') --加速度范围\n buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B') --滞后点数\n\n end\n if over==8 or onepag==total then \n local buffhead=''\n buffhead=iota.appendHexByte(buffhead, 0xfe, 'B') --帧头\n buffhead=iota.appendHexWord(buffhead, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B') --模块号\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --命令源\n buffhead=iota.appendHexWord(buffhead, 0x0306, 'B') --指令\n buffhead=iota.appendHexWord(buffhead, 0x0000, 'B') --消息ID\n buffhead=iota.appendHexWord(buffhead, totallength, 'B') --数据区长度\n if onepag==total then\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --尾包\n else\n buffhead=iota.appendHexByte(buffhead, 0x00, 'B') --尾包\n end\n buffhead=iota.appendHexByte(buffhead, total, 'B') --采集指令总通道指令个数\n buffhead=iota.appendHexByte(buffhead, over, 'B') --该分包通道指令个数\n buff=buffhead..buff\n buff=iota.appendHexCrc(buff, endian ,0) --校验\n buff=iota.appendHexByte(buff, 0xef, 'B') --帧尾\n\t\t\t\t--log.debug("masmicrogprs [%s] ssend request =%s",dtuId,ack)\n local ok, ack = ctx:ssend(buff, 20000)\n --log.debug("masmicrogprs [%s] deploy back =%s",dtuId,ack)\n buff=''\n if over==8 then\n over=0\n end\n totallength=3\n if onepag==total then\n log.debug("masmicrogprs [%s] 配置下发完成")\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置下发完成'\n }\n }\n ctx:notify(json.encode(re))\n end\n end \n end\n end \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n --log.debug("masmicrogprs [%s] has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug("masmicrogprs [%s] has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n --log.debug("masmicrogprs [%s] has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug("masmicrogprs [%s] has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n log.debug("masmicrogprs [%s] dat content =%s", dathex)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n --log.debug("masmicrogprs [%s] deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",dtuId,deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n local floatcount = (string.len(dathex)/2-40)/4\n --log.debug("masmicrogprs [%s] begin parse",dtuId)\n local vols = {}\n\t\tlocal mean = 0\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n --log.debug("masmicrogprs [%s] finish parse",dtuId)\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n sampleFreq=samplefreq,\n filterFreq=filterfreq,\n gainAmplifier=gainamplifier,\n triggerType=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n }\n table.insert(out.data,rst)\n \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\t--log.debug("masmicrogprs [%s] r1=%s,r1ok=%s,_power=%s",dtuId,r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver=r1\n\t\t\t--log.debug("masmicrogprs [%s] r1=%s,r1ok=%s,_version=%s",dtuId,r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\t--log.debug("masmicrogprs [%s] powerstr=%s",dtuId,powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t} \n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time \n\t\t}\n\t\ttable.insert(out.data,rstd)\n\t\t--log.debug("masmicrogprs [%s] cloudvibrate=%s",dtuId,json.encode(out))\n ctx:notify(json.encode(out))\n else\n -- log.debug("masmicrogprs [%s] not found device module=%s channel=%s",dtuId,deviceId,channel)\n end\nend\n\nfunction totalSensors()\n local sensorcnt=0\n for i,dnlink in pairs(device.dnlinks) do \n sensorcnt = #(dnlink.devices) + sensorcnt \n end\n return sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend \n\nfunction HeadCheckSum(data)\n local sum=0\n local len = string.len(data)\n --log.debug("masmicrogprs [%s] len %s", dtuId,len)\n for i =1,len,4 do \n local te=tonumber(string.sub(data,i,i+3) ,16)\n --log.debug("masmicrogprs [%s] te %s",dtuId, te)\n sum = sum+ tonumber(te)\n end\n --log.debug("masmicrogprs [%s] sum %s",dtuId, sum)\n return 0xffff-sum\nend INLINE 2019-09-06 10:07:33.413+08 2020-12-24 16:44:29.11+08 2019-09-06 \N
+ad7b4cd5-9b3e-44c9-bb9b-60dc15019f01 anxin_laser \N 激光测距仪 主动上报(标准协议) 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start=function()\n log.debug("anxin_laser.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n local moduleStr=device.uplink.props.module\n log.debug("anxin_laser [%s] Data, ctx=%s",moduleStr,hex)\n local out={\n data ={},\n result = {}\n\t\n }\n \n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n\t local distance = iota.hexToShort(hex,24,'B')/10000\n \n\t local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anxin_laser timeStr=%s",timeStr)\n dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anxin_laser dateTimeStr=%s",dateTimeStr)\n timenow = unixtimestamp(dateTimeStr)\n\t\t\t\t\n\t\t out={\n\t\t\t\t data={ \n\t\t\t\t distance=distance\n\t\t\t\t },\n\t\t\t\t\ttime=timenow\n\t\t\t\t }\n \n \n \n \n \t\n local resultData =json.encode(out)\n log.debug("anxin_laser [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = errcode, msg = errormsg}\n ctx:done(json.encode(out))\n end \nend\n\nIsValid=function(data,deviceModule)\n if data == nil then\n errormsg = 'anxin_laser:Data is nil'\n errcode = 1001\n \tlog.debug("anxin_laser [%s] %s",deviceModule,errormsg)\n return false\n end\n\n local dataModule= iota.hexToShort(data,6,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('anxin_laser module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("anxin_laser [%s] %s",deviceModule,errormsg)\n return false\n end\n\n log.debug("anxin_laser [%s] 校验通过",deviceModule)\n return true\n \nend\n \nunixtimestamp = function(datestr)\n \n local year = tonumber(string.sub(datestr,1,4))\n local month = tonumber(string.sub(datestr,5,6))\n local day = tonumber(string.sub(datestr,7,8))\n local hour = tonumber(string.sub(datestr,9,10))\n local minute = tonumber(string.sub(datestr,11,12))\n local second = tonumber(string.sub(datestr,13,14))\n\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2019-12-23 14:51:58.931+08 2019-12-23 14:55:58.922+08 2019-12-23 \N
+36fe6fad-733b-496b-bdc7-be6c9b17f119 yy_TempHum_1154 \N 科润美改为永阳 1.0 414bf334-23bf-4e6d-aa00-230325261d81 414bf334-23bf-4e6d-aa00-230325261d81 f 414bf334-23bf-4e6d-aa00-230325261d81 Lua --//01 协议文档/9月第4周/华南,深圳市永阳新能源科技有限公司,温湿度传感器,485通讯协议/永阳YY-TF100湿度探头及协议.pdf\n--[[\n协议号: 1154;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "yy_TempHum_1154.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n\t-- 模块号\n\tlocal BE='B'\n\tlocal buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("yy_TempHum_1154 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("yy_TempHum_1154 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\tbuff=iota.appendHexByte(buff, moduleNo, BE); -- 1: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x04, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);-- 2: 读取寄存器地址\n buff=iota.appendHexByte(buff, 0x00, BE);\n buff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x02, BE);-- 3: \t读取寄存器数量\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) --CRC16\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 01040419e81c9af447 moduleId=1\n--原始数据 温度26.32,湿度73.22\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\tif string.len(data)/2 ~=9 or iota.hexToByte(data, 1,'B')~=0x04 or iota.hexToByte(data, 2,'B')~=0x04 then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\n\telse\n\t\t\n\t\tlog.debug("yy_TempHum_1154 数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal Temp = (iota.hexToShort(data, 3,'B')-4000)/100.0;\n\t\tlocal Hum = iota.hexToShort(data, 5,'B')/100.0;\t\t\t\n\t\t\n\t\tout.data = {\n\t\ttemp=Temp,\n\t\thumid=Hum\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n INLINE 2017-12-21 16:35:23.636+08 2018-03-30 09:01:53.817+08 2017-12-21 \N
+01ed9514-09fa-4a3a-be3e-42040e39b1eb YCxieyi \N 扬尘设备协议 1.0 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe f 1b2d8739-627e-4b7d-9480-3eee6e9396fe Lua --\n--require "functions" -- 公共函数\n\n--start=function()\n --local checkstr="0105610000010000000000000000000000000000000000000000000000"\n --local aa=iota.appendHexCrc8(checkstr,0)\n --log.debug("enyi_2018 crc8=%s",aa)\n -- ok=ctx:asend("010203")\n--end\n\n--缓存\n--local buff_random_32=""\n\nonData=function (hex)\n\t--主动上传式\n\tlog.debug("enyi_2018:Received=>%s",hex)\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\t\n\t\n\t--\n\t\n\t\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\t\n\t\n\t\tlocal json_table=getJsonTable(hex)\n\t\tlog.debug("enyi_2018 json_table.Cmd_Type=%s",json_table.Cmd_Type)\n\t\t--扬尘注册 C-S\n\t\tif json_table.Cmd_Type=="Register" then\n\t\t log.debug("enyi_2018 处理注册信息")\n\t\t\t--提取 device_Id\n\t\t\tlocal device_Id=json_table.Device_ID\n\t\t\t local Registercheck=""\n\t\t\tif device_Id~=device.props.Device_ID then\n\t\t\t Registercheck="1"\n\t\t\t log.debug("enyi_2018 C-S 注册校验错误,device_Id=%s,device.props.Device_ID=%s",device_Id,device.props.Device_ID)\n\t\t\telse\n\t\t\t\tRegistercheck="0"\n\t\t\tend\n\t\t\t \n\t\t\t \n\t\t\tlocal Register_messageNo=string.sub(hex,9,9+7)\n\t\t\t \n\t\t\t--注册应答 \n\t\t local tb_Register={}\n\t\t\tlocal timestamp=os.time()\n\t\t\tlocal random_32=getRandom32(timestamp)--随机数32=固定头(22)..时间戳(10)\n\t\t\t--buff_random_32=random_32 --保存随机数\n\t\t\ttb_Register.Cmd_Type="Register_Ret"\n\t\t\ttb_Register.Data_Check=Registercheck\t\t--CD55333ECFBF490B84145E61E6DCD028\t\n\t\t\ttb_Register.Random=random_32 --测试随机数"11223344556677889900112233445566"\n\t\t\tlocal cmdStr_Register=json.encode(tb_Register)\n\t\t local buff_Register=creatResponse(cmdStr_Register,Register_messageNo)--消息编号 时间戳\n\t\t\t ok=ctx:asend(buff_Register)\n\t\t\tlog.debug("enyi_2018:s-C发送注册反馈=%s",buff_Register)\n\t\t\t\n\t\t\t--扬尘登录 C-S\n\t\telseif json_table.Cmd_Type=="Login" then\n\t\t\tlog.debug("enyi_2018 处理登录信息")\n\t\t\tlocal C_S_Device_ID=json_table.Device_ID\n\t\t\tlocal C_S_Random32=json_table.Random\n\t\t\tlocal C_S_Response=json_table.Response\n\t\t\tlocal S_Response=getMD5Response(C_S_Device_ID,C_S_Random32)\n\t\t\tlocal logincheck=""\n\t\t\tif string.upper(C_S_Response)~=string.upper(S_Response) then\n\t\t\t\tlogincheck="1"\n\t\t\t log.debug("enyi_2018 C-S 登录response校验错误,C_S_Response=%s,S_Response=%s,C_S_Random32=%s",string.upper(C_S_Response),string.upper(S_Response),C_S_Random32)\n\t\t\telse\n\t\t\t\tlogincheck="0"\n\t\t\tend\n\t\t\t\n\t\t\t\n\t\t\tlocal login_messageNo=string.sub(hex,9,9+7)\n\t\t\t--登录应答\n\t\t\tlocal tb_Login={}\n\t\t\t--local timestamp_2=os.time()\n\t\t\t--local random_32_2=getRandom32(timestamp_2) --"BE4805E9EF1D41DFB6D732931F6C2F6C"\n\t\t\ttb_Login.SessionID=C_S_Random32 --tostring(random_32_2)\t\t\t\n\t\t\ttb_Login.Cmd_Type="Login_Ret"\n\t\t\ttb_Login.Data_Check=logincheck\t\t\t\n\t\t\tlocal cmdStr_Login=json.encode(tb_Login)\n\t\t local buff_Login=creatResponse(cmdStr_Login,login_messageNo)--消息编号 时间戳\n\t\t\tok=ctx:asend(buff_Login)\n\t\t\tlog.debug("enyi_2018:s-C发送登录反馈=%s",buff_Login)\n\n\t\t\t--扬尘数据 C-S\n\t\telseif json_table.Cmd_Type=="Reporting_Data" then\n\t\t\tlocal data_messageNo=string.sub(hex,9,9+7)\n\t\t\tlocal tb_Data={}\n\t\t\tlocal timestamp_3=os.time()\t\t\n\t\t\ttb_Data.Cmd_Type="Reporting_Data_Ret"\n\t\t\ttb_Data.Data_Check="0"\n\t\t\ttb_Data.Control_Cmd="0"\n\t\t\ttb_Data.SessionID=json_table.SessionID\n\t\t\tlocal cmdStr_Data=json.encode(tb_Data)\n\t\t local buff_Data=creatResponse(cmdStr_Data,data_messageNo)----消息编号 时间戳\n\t\t\t ok=ctx:asend(buff_Data)\n\t\t\tlog.debug("enyi_2018:s-C发送数据上报反馈=%s",buff_Data)\n\t\t\t\n\t\t\t\n\t\t\t--\n\t\t\t--数据解析\n\t\t\tlocal device_ID=json_table.Device_ID\n\t\t\tlocal temperature=tonumber(json_table.Temp)\n\t\t\tlocal humidity=tonumber(json_table.Hum)\n\t\t\tlocal pm25=tonumber(json_table.PM2p5)\n\t\t\tlocal pm10=tonumber(json_table.PM10)\n\t\t\t--local tsp=tonumber(json_table.TSP)\n\t\t\tlocal nvh=tonumber(json_table.NVH)--噪声\n\t\t\tlocal speed=tonumber(json_table.Wind_Sp)--风速\n\t\t\tlocal directionEnum=tonumber(json_table.Wind_Dir)--风向\t\n\t\t\tlocal direction\n\t\t\tif \tdirectionEnum~=nil then\n direction=getWindDirection(directionEnum)\n\t\t\tend\n\t\t\tlog.debug("enyi_2018:数据 =%s,%s,%s,%s,%s,%s,%s",temperature,humidity,pm25,pm10,nvh,speed,direction)\n\t\t out.data={\n\t\t\t\t\t\t--temperature=temperature,\n\t\t\t\t\t\t--humidity=humidity,\n\t\t\t\t\t\tpm25=pm25,\n\t\t\t\t\t\tpm10=pm10,\n\t\t\t\t\t\tnoise=nvh,\n\t\t\t\t\t\tspeed=speed,\n\t\t\t\t\t\tdirection=direction\t\n\t\t\t}\n\t\t\t--local resultData =json.encode(out)\n\t\t\t--ctx:notify(resultData)\n\t\t\t--\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t--扬尘保活 C-S\n\t\telseif json_table.Cmd_Type=="KeepAlive" then\n\t\t\tlocal KeepAlive_messageNo=string.sub(hex,9,9+7)\n\t\t\tlocal tb_KeepAlive ={}\n\t\t\tlocal timestamp_4=os.time()\n\t\t\ttb_KeepAlive.Cmd_Type="KeepAlive_Ret"\n\t\t\ttb_KeepAlive.Data_Check="0"\n\t\t\ttb_KeepAlive.Control_Cmd="0"\n\t\t\ttb_KeepAlive.SessionID=json_table.SessionID\n\t\t\tlocal cmdStr_KeepAlive=json.encode(tb_KeepAlive)\n\t\t local buff_KeepAlive=creatResponse(cmdStr_KeepAlive,KeepAlive_messageNo)----消息编号 时间戳\n\t\t\t ok=ctx:asend(buff_KeepAlive)\n\t\t\tlog.debug("enyi_2018:s-C发送注册反馈=%s",buff_KeepAlive)\n\t\t \n\t\t \n\t\tend\n\t\t\t \t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n\tlog.debug("enyi_2018 resultData=%s",resultData)\n\tctx:notify(resultData)\nend\n\n\n\n\ngetWindDirection=function(num)\n local NO=tonumber(num+1)\n\tlocal WindDirections={"北","东北偏北","东北","东北偏东","东","东南偏东","东南","东南偏南","南","西南偏南","西南","西南偏西","西","西北偏西","西北","西北偏北"}\n\tlocal direction=WindDirections[NO]\n\treturn direction\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("enyi_2018 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("enyi_2018:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("enyi_2018 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t log.debug("enyi_2018 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t \t if tostring(channelStrCheck)== tostring(channelNoId) then\n \n \t\t log.debug("enyi_2018: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("enyi_2018: subdevices是nil")\n \treturn nil\n end\nend\n\n\n--获取收到数据中的json\ngetJsonTable=function(hex)\n\n\tlocal IDX_json=24; \n\tlocal length=string.len(hex)\n\tlocal json_hex=string.sub(hex,2*IDX_json+1,length-4*2) \n\tlocal jsonStr=HextoStr(json_hex)\n log.debug("enyi_2018 校验前jsonStr=%s",jsonStr)\n local jsonStr_New=string.gsub(jsonStr,",\\r\\n}","\\r\\n}") \n log.debug("enyi_2018 校验后jsonStr=%s",jsonStr)\n local tableJson=json.decode(jsonStr_New)\n\tlog.debug("enyi_2018 type(tableJson)=%s,tableJson=%s",type(tableJson),json.encode(tableJson))\n \tlog.debug("enyi_2018 table转换ok")\n\treturn tableJson\nend\n\n--服务器应答\ncreatResponse=function(jsonStr,messageNo)\n log.debug("enyi_2018 应答json=%s,messageNo=%s",jsonStr,messageNo)--消息标号=时间戳(H)\n --local headerHex="5aa50100"..string.format("%08x",messageNo).."534445590200020100000000"\n local headerHex="5aa50100"..messageNo.."534445590200020100000000" --直接采用设备上报的 消息编号\n local jsonhex=StrtoHex(jsonStr)\n --报文长度\n local allLength=4+string.len(jsonhex)/2\n local cmd_length=string.format("%08x",allLength)\n local cmdHex=headerHex..cmd_length..jsonhex\n local cmdHex=iota.appendHexCrc8(cmdHex,0);\n local cmdHex=cmdHex.."000304"\n \n return cmdHex\nend\n\n--hex -> ASCII\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\nStrtoHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\nIsValid=function (data)\n\tlog.debug('enyi_2018:开始校验数据')\n if data == nil or string.len(data)/2 < 100 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n return false\n end\n\n\tif string.sub(data,1,4)~="5aa5" or string.sub(data,-4,-1)~="0304" then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\t\n\t\n\t-- local moduleR = tostring(iota.hexToShort(data,2,'B'))\n\t-- if moduleR ~=tostring(moduleNoStrCheck) then\n -- errormsg = 'module is invalid='..moduleR\n -- errcode = 1003\n -- return false\n -- end\n log.debug('enyi_2018:校验通过')\n\treturn true\t\nend\n\n\ngetMD5Response=function(deviceId,randomNum32)\n local HA1="59ABD5A817CCFA22CB0F1C3E3E77C4D9"\n local HA2=crypto.md5(deviceId..":"..randomNum32)\n local HA3=crypto.md5(string.upper(HA1)..":"..string.upper(HA2))\n return string.upper(HA3)\nend\n\ngetRandom32=function(num10)\t\n\tlocal num32="1000000000000000000000"..tostring(num10)\n\treturn num32\nend\n INLINE 2018-07-23 15:37:57.959+08 2018-07-30 17:46:18.735+08 2018-07-23 \N
+61394f4f-a90e-4c38-8d8b-f0acdee2975c chemins_Turbidity_34 \N chemins_Turbidity_3401 1.0 ba38de11-b347-4100-a317-9c4c4a362f91 ba38de11-b347-4100-a317-9c4c4a362f91 f ba38de11-b347-4100-a317-9c4c4a362f91 Lua --//01 协议文档/7月第3周烟台凯米斯仪器有限公司/ZS-710一体式在线浊度传感器用户手册.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "chemins_Turbidity_3401.lua", device.props.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x04, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n else\n log.debug("SSend error!")\n end\n ctx:done(result)\nend\n\n--030308fffa0001011e0001169e\n--moduleId=3\n--"temp": 28.6,\n--"turbidity": -0.6\n\nunmarshall=function(hex)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then \n\n local turbidity_temp = iota.hexToShort(hex,3,'B')\n local turbidity_dot = iota.hexToShort(hex,5,'B')\n\t\tlocal turbidity = turbidity_temp/(10^turbidity_dot)\n\t\t\n\t\tlocal temp_temp = iota.hexToShort(hex,7,'B')\n local temp_dot = iota.hexToShort(hex,9,'B')\n\t\tlocal temp = temp_temp/(10^temp_dot)\n\t\tlog.debug("温度"..tostring(temp_temp)) \n out.data = {\n turbidity=turbidity,\n\t\t\ttemp=temp\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data)\n log.debug('开始校验数据')\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('数据校验通过')\n return true\n--crc\nend\n\n\t\n \n INLINE 2017-12-19 13:57:36.268+08 2018-02-28 18:32:12.194+08 2017-12-19 \N
+f0dbf2ac-9867-4a07-bfe3-8b84c2e375b2 sci_1409 \N 1.0 86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307 86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307 f 86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307 Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "sci_1409", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n \n log.debug("sci_1409:LUA:根设备devices : data is =%s", json.encode(subdevices))\n \tfor index,child in pairs(subdevices) do\n\t\t log.debug("sci_1409:LUA:子设备subdevices=%s : data is =%s", index,json.encode(subdevices))\n \t--local moduleNo=tonumber(child.props.moduleId) \n --local channelNo=tonumber(child.props.channelId)-1\n\t\t\t\t\t\t\n local moduleNo=tonumber(child.props.moduleId) \n local channelNo=tonumber(child.props.channelId)\n if child.uplink.props ~='null' then \n \t moduleNo=tonumber(child.uplink.props.module) \n channelNo=tonumber(child.uplink.props.channel)\n end\n log.debug("sci_1409:模块%s通道%s的deviceId是%s:",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexByte(buff, 0xF7, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0x60, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0x03, endian) \n\t\t\tlocal sum=iota.hexCheckPlusSum(buff,0,3)\n\t\t\t--log.debug("sci_1409:模块%s通道%s的 校验前sum=%s",moduleNo,channelNo,sum) \n\t\t\tbuff=buff..string.format("%x",sum)\t\n\t\t\tbuff=iota.appendHexByte(buff, moduleNo, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0x01, endian)\t\t\t\n\t\t\tbuff=iota.appendHexByte(buff, channelNo-1, endian)\n\t\t\t--log.debug("sci_1409:模块%s通道%s的 校验前buff=%s",moduleNo,channelNo,buff) \n \t\tlocal crc16H\n \t\tlocal crc16L\n\t\t\tcrc16H,crc16L=crc16_CCITT(buff,0,8)\n \t\tlog.debug("sci_1409:模块%s通道%s的 校验前buff=%s,crc16L=%s,crc16H=%s",moduleNo,channelNo,buff,crc16L,crc16H) \n\t\t\tbuff=buff..crc16L..crc16H\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n log.debug("sci_1409:模块%s通道%s的数据接收成功,开始解析",moduleNo,channelNo) \n\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("sci_1409:模块%s通道%s的数据接收失败",moduleNo,channelNo) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("sci_1409:".."subdevices是nil")\n \treturn nil\n end\n\t\t\n\tlog.debug('sci_1409:out序列化')\n\tlocal resultData =json.encode(out)\n log.debug("sci_1409:out序列化结果 : out is =%s", json.encode(out))\n ctx:done(resultData)\nend\n\n\n\n--F760076301C001805F85CC447DDE moduleId=1 channelID=1 原始值 strain=1636.16785 --注,转换在采集仪上自动转换\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n \n local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n if ErrorCode then \n \n \n\t\tlocal freq=iota.hexToFloat(hex,8,'L') --应变\n\t\tlocal Phy=freq\n\t\tif subDevice.uplink.capabilities[1].formula.metaid == "209ff0d2-7a85-4997-804a-d64bb04ba531" then --振弦公式 metaid \n\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K or nil\n\t\t\t\t--local kt = subDevice.uplink.capabilities[1].formula.props.Kt or nil\n\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo or nil\n\t\t\t\t--local t0 = subDevice.uplink.capabilities[1].formula.props.To or nil\n log.debug("sci_1409:模块%s通道%s的公式计算参数是:k=%s,f0=%s,freq=%s",subModuleId,subChannelId,k,f0,freq)\n\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\tPhy =k*(freq ^ 2 - f0 ^ 2) \n\t\t\t\t\tlog.debug("sci_1409:模块%s通道%s的phy是:%s",subModuleId,subChannelId,Phy)\n\t\t\t\tend\n\t\t\telse\n\t\t\tlog.debug("sci_1409:模块%s通道%s的metaid=%s[%s]",subModuleId,subChannelId,subDevice.uplink.capabilities[1].formula.metaid)\n\t\tend\n\n\n\t\t \n\t\tsubData.data={\n\t\t\t\t\tphysicalvalue=Phy\t\t\t\t\t\n\t\t\t\t\t}\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n \tif child.uplink.props ~='null' or child.uplink.props.module==tostring(moduleNoId) or child.props.moduleId==tostring(moduleNoId) then\n\t\t \t if child.uplink.props.channel == tostring(channelNoId) or child.props.channelId == tostring(channelNoId) then\n log.debug("sci_1409:".."DeviceInfo是:"..tostring(child.deviceId))\n \t\t log.debug("sci_1409:".."子设备原形child=%s",json.encode(child))\n \t --return child.deviceId\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("sci_1409:".."subdevices是nil")\n \treturn nil\n end\nend\n\n\nIsValid=function(data,moduleId,channelId)\n log.debug('sci_1409:模块%s通道%s开始校验数据',moduleId,channelId)\n if data == nil or string.len(data)/2 ~= 14 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('sci_1409:模块%s通道%s 数据 长度校验失败:Data is nil or invalid length',moduleId,channelId)\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0xF7 or iota.hexToByte(data,1,'B') ~= 0x60 or iota.hexToByte(data,2,'B') ~= 0x07 then\n errcode = 1003\n errormsg = 'CMD is wrong ' \n\t\tlog.debug('sci_1409:模块%s通道%s 数据校验失败:CMD错误',moduleId,channelId)\n return false\n end\n\n\tlocal moduleStr=tostring(iota.hexToByte(data,4,'B'))\n\tif tostring(moduleId)~= moduleStr then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug('sci_1409:模块%s通道%s 模块号校验失败:Invalid acq moduleId=%s',moduleId,channelId,moduleStr)\n return false\n end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,7,'B')%16+1)\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('sci_1409:模块%s通道%s 通道号校验失败:Invalid acq channelId=%s',moduleId,channelId,channelStr)\n\t\treturn false\n\tend\t\t\n log.debug('sci_1409:模块%s通道%s校验数据通过!!!',moduleId,channelId)\n return true\nend\n\n\n\n\nfunction getIntPart(x) --取整\n if x<= 0 then\n return math.ceil(x)\n end\n if math.ceil(x) == x then\n x = math.ceil(x)\n else\n x = math.ceil(x)-1\n end\n\n\n return x\nend\n\ncrc16_CCITT=function(buffer,index_start,index_end)--CRC校验 CRC-16 CCITT X2\n local crc = 0;\n local da=0;\n local yu ={\n 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef\n };\n for i = index_start,index_end-1,1 do\n \n da = (crc / 256) / 16\n da=getIntPart(da)\n crc =crc*16%65536\n \n local buff_i=tonumber(string.sub(buffer,2*i+1,2*i+2),16)\n local index=bit:_xor(da,buff_i / 16) \n crc = bit:_xor(crc,yu[index+1])\n \n\n da = (crc / 256) / 16;\n da=getIntPart(da)\n crc =crc*16%65536\n\n local index_2=bit:_xor(da,buff_i %16) \n crc = bit:_xor(crc,yu[index_2+1]) \n end\n local crcHi_CCITT = crc %256;\n local crcLo_CCITT = getIntPart(crc/256)\n return string.format("%02x",crcHi_CCITT),string.format("%02x",crcLo_CCITT)\nend\n\n\n\n INLINE 2018-01-08 15:26:45.699+08 2018-05-17 20:06:57.687+08 2018-01-08 \N
+9daba2de-e5bd-4b35-a63c-364ac8b366fa gr_Concentration2512 \N 1.0 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a f 8e1adf17-9018-4c44-bc9b-ff70bcca029a Lua --//04 项目资料/2017-08/湖南国瑞仪器有限公司/IAT说明书.pdf\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n --0100000001012000042b00000014d0\n--moduleId=1\n--channelId=1\nstart=function()\n log.debug("load script %s, moduleId=%s", "gr_Concentration2512", device.props.moduleId or "[nil]")\nend\n\nonData=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n\tlocal data=hex\n local ErrorCode = IsValid(hex)\n\t\n if string.sub(data,1,2) == '77' or string.sub(data,3,4) == '77' or string.sub(data,5,6) == '77' or string.sub(data,7,8) == '2e' then\n --心跳直接结束\n\t\treturn true\n end\n\t\t\n if ErrorCode then\n log.debug('数据有效')\n\t local k=0.0;\n\t\tlocal unit=''\n\t\tlocal k_index=string.sub(data,11,12)\n\t\tif k_index=='01' then\n\t\t k=1.0\n\t\t unit = "ug/m3"; --PM2.5\n\t\t elseif k_index=='02' then\n\t\t k=1.0\n\t\t unit = "ug/m3"; --PM10\n\t\t elseif k_index=='03' then\n\t\t k=1.0\n\t\t unit = "ppb"; --SO2\n\t\t elseif k_index=='04' then\n\t\t k=1.0\n\t\t unit = "ppb"; --NO2\n\t\t elseif k_index=='05' then\n\t\t k=0.001\n\t\t unit = "ppm"; --CO\n\t\t elseif k_index=='06' then\n\t\t k=0.01\n\t\t unit = "ppb"; --O3\n\t\t elseif k_index=='09' then\n\t\t k=0.01\n\t\t unit = "% RH"; --湿度\n\t\t elseif k_index=='0a' then\n\t\t k=0.1\n\t\t unit = "℃"; --温度\n\t\t else\n\t\t log.debug('无匹配数据类型')\t\t \n\t\tend\n\t\t--log.debug('k是'..k)\n\t\tlocal Concentration = 0.0;\n\t\tlocal gasType=string.sub(data,13,14)\n \n\t\tif gasType=='20' then\n\t\tConcentration=iota.hexToInt(data,9,'L')\n\t\telseif gasType=='40' then\n\t\tConcentration=iota.hexToShort(data,9,'L')\n\t\telseif gasType=='43' then\n\t\tConcentration=iota.hexToShort(data,9+1,'L')*(-1)^tonumber(string.sub(data,9,10),16) \n end\n out.data = { \n concentration=Concentration*k\n }\n else\n out.result = {code = errorcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\n \nend\n\nIsValid=function(data)\n\n\t--/湿度13,其他15,心跳10\n\tlocal datalength=string.len(data)\n\tif string.len(data)/2 ==15 or string.len(data)/2 ==13 or string.len(data)/2 ==10 then\n\telse\n\t errormsg = 'data length is wrong'\n errorcode = 1001\n return false\n end\n\t\n if string.sub(data,1,2) == '77' or string.sub(data,3,4) == '77' or string.sub(data,5,6) == '77' or string.sub(data,7,8) == '2e' then\n --心跳直接放入\n\t\treturn true\n end\n\n\tif string.sub(data,9,10) ~= '01' or string.sub(data,15,16) ~= '00'then\n errormsg = 'Data is Invalid'\n errorcode = 1001\n return false\n end\n \n local moduleId = tonumber(string.sub(data,1,2),16);\n log.debug('moduleId是:'..moduleId)\n local channelId = tonumber(string.sub(data,11,12),16);\n log.debug('channelId:'..channelId)\n\tif moduleId~=tonumber(device.props.moduleId) or channelId~=tonumber(device.props.channelId) then\n\t\terrormsg = 'moduleId or channelId is Invalid'\n \terrorcode = 1001\n return false\n end\n return true\nend\n\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n INLINE 2017-12-01 14:54:59.371+08 2018-02-28 18:32:12.216+08 2017-12-01 \N
+c10e1f69-fac2-446b-b907-7b94e3da49ed FS_Tower_9077 \N 塔吊 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//\n\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n start=function() \n log.debug("fs_tower_9077 start")\n end\n\nonData=function(hex)\n log.debug("fs_tower_9077 收到数据=%s", hex)\n local out={\n data ={},\n result = {}\n }\n\n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\n --local sensorid = string.char(iota.hexToByte(hex,2,'B'))..string.char(iota.hexToByte(hex,2,'B'))..string.char(iota.hexToByte(hex,3,'B'))..string.char(iota.hexToByte(hex,4,'B'))\n local cmd = iota.hexToByte(hex,6,'B')\n --运行记录数据\n if cmd == 0x10 then \n local state = iota.hexToShort(hex,15,'B')--状态掩码\n local weight = iota.hexToShort(hex,17,'B')/1000.0 --额定重量\n local curweight = iota.hexToShort(hex,19,'B')/1000.0 --当前重量\n local moment = iota.hexToShort(hex,21,'B')/10.0 --力矩\n local height = iota.hexToShort(hex,23,'B')/10.0 --高度(dm)\n local rotation = iota.hexToShort(hex,25,'B') --回转角度(°)\n local radius = iota.hexToShort(hex,27,'B')/100.0 --幅度\n local speed = iota.hexToShort(hex,29,'B')/10 --风速\n local obliquity = iota.hexToShort(hex,31,'B')/100 --倾角\n\n out.data={\n weight=tonumber(string.format('%0.2f',weight)),\n curweight=tonumber(string.format('%0.2f',curweight)),\n moment=tonumber(string.format('%0.2f',moment)),\n height=tonumber(string.format('%0.2f',height)),\n rotation=tonumber(string.format('%0.2f',rotation)),\n radius=tonumber(string.format('%0.2f',radius)),\n speed=tonumber(string.format('%0.2f',speed)),\n obliquity=tonumber(string.format('%0.2f',obliquity))\n }\n end\n --超载记录数据\n\t\tif string.len(hex)/2 > 34 then \n\t\t\tcmd = iota.hexToByte(hex,40,'B')\n\t\t\tif cmd == 0x12 then\n\t\t\t\t\n\t\t\t\tlocal state = iota.hexToShort(hex,15+34,'B')--状态掩码 \n\t\t\t\tlocal weight = iota.hexToShort(hex,17,'B')/1000.0--额定重量\n\t\t\t log.debug("fs_tower_9077 we0x12 = %s",weight)\n\t\t\t\tlocal weightdeg = iota.hexToShort(hex,19+34,'B')/100.0--重量比 \n\t\t\t\tlocal height = iota.hexToShort(hex,21+34,'B')/10--高度(dm)\n\t\t\t\tlocal heightdeg = iota.hexToShort(hex,23+34,'B')/100.0--高度比\n\t\t\t\tlocal rotation = iota.hexToShort(hex,25+34,'B')--回转角度(°)\n\t\t\t\tlocal rotationdeg = iota.hexToShort(hex,27+34,'B')/100.0--回转角度比\n\t\t\t\tlocal radius = iota.hexToShort(hex,29+34,'B')/100.0--幅度\n\t\t\t\tlocal radiusdeg = iota.hexToShort(hex,31+34,'B')/100.0--幅度比\n\t\t\t\tlocal speed = iota.hexToShort(hex,33+34,'B')/10--风速\n\t\t\t\tlocal speeddeg = iota.hexToShort(hex,35+34,'B')/100.0--风速比\n\t\t\t\tlocal obliquity = iota.hexToShort(hex,37+34,'B')/100--倾角\n\t\t\t\tlocal obliquitydeg = iota.hexToShort(hex,39+34,'B')/100.0--倾角比\n local moment = iota.hexToShort(hex,21,'B')/10.0 --力矩\n\t\t\t\tlocal curweight = iota.hexToShort(hex,19,'B')/1000.0 --当前重量\n\t\t\t\tout.data={\n\t\t\t\t\tweight=weight,\n\t\t\t\t\tWeightdeg=weightdeg,\n\t\t\t\t\theight=height,\n\t\t\t\t\tHeightdeg=heightdeg,\n\t\t\t\t\trotation=rotation,\n\t\t\t\t\tRotationdeg=rotationdeg,\n\t\t\t\t\tradius=radius,\n\t\t\t\t\tRadiusdeg=radiusdeg,\n\t\t\t\t\tspeed=speed,\n\t\t\t\t\tSpeeddeg=speeddeg,\n\t\t\t\t\tobliquity=obliquity,\n\t\t\t\t\tObliquitydeg=obliquitydeg,\n curweight=curweight,\n \tmoment=moment\n\t\t\t\t}\n\t\t\tend\n\t\tend\n --设置记录\n if cmd == 0x14 then\n local req = iota.hexToByte(hex,9,'B')--请求编号\n \n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0x5A, endian)\n buff=iota.appendHexByte(buff, iota.hexToByte(hex,1,'B'), endian)\n buff=iota.appendHexByte(buff, iota.hexToByte(hex,2,'B'), endian)\n buff=iota.appendHexByte(buff, iota.hexToByte(hex,3,'B'), endian)\n buff=iota.appendHexByte(buff, iota.hexToByte(hex,4,'B'), endian)\n buff=iota.appendHexByte(buff, 0x01, endian)\n buff=iota.appendHexByte(buff, 0x14, endian)\n buff=iota.appendHexByte(buff, 0x01, endian)\n local xor = CheckXor(buff)\n buff=iota.appendHexByte(buff, xor, endian)--异或\n buff=iota.appendHexByte(buff, req, endian)\n local data = string.format("%02X",req)\n xor = CheckXor(data)\n buff=iota.appendHexByte(buff, xor, endian)--异或和\n ctx:asend(buff)\n end\n --对时请求\n if cmd == 0x61 then\n local req = iota.hexToByte(hex,9,'B')--请求编号\n \n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0x5A, endian)\n buff=iota.appendHexByte(buff, iota.hexToByte(hex,1,'B'), endian)\n buff=iota.appendHexByte(buff, iota.hexToByte(hex,2,'B'), endian)\n buff=iota.appendHexByte(buff, iota.hexToByte(hex,3,'B'), endian)\n buff=iota.appendHexByte(buff, iota.hexToByte(hex,4,'B'), endian)\n buff=iota.appendHexByte(buff, 0x01, endian)\n buff=iota.appendHexByte(buff, 0x61, endian)\n buff=iota.appendHexByte(buff, 0x12, endian)\n local xor = CheckXor(buff)\n buff=iota.appendHexByte(buff, xor, endian)--头异或\n --buff=iota.appendHexByte(buff, req, endian)\n local data = ''\n --黑匣子时间\n local reyear = iota.hexToByte(hex,9,'B')\n data = iota.appendHexByte(data, reyear, endian)\n buff = iota.appendHexByte(buff, reyear, endian)\n local remonth = iota.hexToByte(hex,10,'B')\n data = iota.appendHexByte(data, remonth, endian)\n buff = iota.appendHexByte(buff, remonth, endian)\n local reday = iota.hexToByte(hex,11,'B')\n data = iota.appendHexByte(data, reday, endian)\n buff = iota.appendHexByte(buff, reday, endian)\n local rehour = iota.hexToByte(hex,12,'B')\n data = iota.appendHexByte(data, rehour, endian)\n buff = iota.appendHexByte(buff, rehour, endian)\n local reminute = iota.hexToByte(hex,13,'B')\n data = iota.appendHexByte(data, reminute, endian)\n buff = iota.appendHexByte(buff, reminute, endian)\n local resecond = iota.hexToByte(hex,14,'B')\n data = iota.appendHexByte(data, resecond, endian)\n buff = iota.appendHexByte(buff, resecond, endian)\n --接受时间\n local year = os.date("%y")\n data = iota.appendHexByte(data, year, endian)\n buff = iota.appendHexByte(buff, year, endian)\n local month = os.date("%m")\n data = iota.appendHexByte(data, month, endian)\n buff = iota.appendHexByte(buff, month, endian)\n local day = os.date("%d")\n data = iota.appendHexByte(data, day, endian)\n buff = iota.appendHexByte(buff, day, endian)\n local hour = os.date("%H")\n data = iota.appendHexByte(data, hour, endian)\n buff = iota.appendHexByte(buff, hour, endian)\n local minute = os.date("%M")\n data = iota.appendHexByte(data, minute, endian)\n buff = iota.appendHexByte(buff, minute, endian)\n local Second = os.date("%S")\n data = iota.appendHexByte(data, Second, endian)\n buff = iota.appendHexByte(buff, Second, endian)\n --发送时间\n\n data = iota.appendHexByte(data, year, endian)\n buff = iota.appendHexByte(buff, year, endian)\n\n data = iota.appendHexByte(data, month, endian)\n buff = iota.appendHexByte(buff, month, endian)\n\n data = iota.appendHexByte(data, day, endian)\n buff = iota.appendHexByte(buff, day, endian)\n\n data = iota.appendHexByte(data, hour, endian)\n buff = iota.appendHexByte(buff, hour, endian)\n\n data = iota.appendHexByte(data, minute, endian)\n buff = iota.appendHexByte(buff, minute, endian)\n\n data = iota.appendHexByte(data, Second, endian)\n buff = iota.appendHexByte(buff, Second, endian)\n xor = CheckXor(data)\n buff=iota.appendHexByte(buff, xor, endian)--内容异或\n \t\tlog.debug("fs_tower_9077 对时=%s", buff)\n ctx:asend(buff)\n end\n \n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("fs_tower_9077resultData=%s", json.encode(out))\n ctx:notify(resultData)\n\nend\n\nIsValid=function(alldata)\n log.debug("fs_tower_9077 校验开始")\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n\t\tlog.debug("fs_tower_9077: 校验失败 Data is nil")\n return false\n end\n\n if string.sub(alldata,1,2)~='5a' then\n\t errormsg = 'Head is wrong'\n errcode = 1002\n\t\tlog.debug("fs_tower_9077: 校验失败 Head is wrong")\n return false\n\tend\n log.debug("fs_tower_9077: 校验通过")\n return true\nend\n\n\n\n--异或校验\nCheckXor=function(hex) \n local len = string.len(hex)/2\n local pp = 0\n for i =0,len-1 do\n local bi = iota.hexToByte(hex,i,'B')\n pp = bit:_and(bit:_xor(bi,pp) , 0x000000ff)\n end\n return pp\nend \n INLINE 2018-08-17 15:22:37.45+08 2019-01-14 16:28:45.488+08 2018-08-17 \N
+fc53b2d3-05e5-4bd9-ac41-66bfa2283dd9 GX_LF_XW \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua bit = {data32 = {}}\nfor i = 1, 32 do\n bit.data32[i] = 2 ^ (32 - i)\nend\n\nfunction bit:d2b(arg)\n local tr = {}\n for i = 1, 32 do\n if arg >= self.data32[i] then\n tr[i] = 1\n arg = arg - self.data32[i]\n else\n tr[i] = 0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr = 0\n for i = 1, 32 do\n if arg[i] == 1 then\n nr = nr + 2 ^ (32 - i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a, b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r = {}\n\n for i = 1, 32 do\n if op1[i] == 1 or op2[i] == 1 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_xor(a, b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r = {}\n for i = 1, 32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a, b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r = {}\n\n for i = 1, 32 do\n if op1[i] == 1 and op2[i] == 1 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n return self:b2d(r)\nend --bit:_and\n\nlocal pp = 0\nfunction check(pcmd)\n pp = bit:_and(PCBxor(pp, pcmd), 0xff)\n return pp\nend\n\nfunction bit:_rshift(a, n)\n local op1 = self:d2b(a)\n local r = self:d2b(0)\n\n if n < 32 and n > 0 then\n for i = 1, n do\n for i = 31, 1, -1 do\n op1[i + 1] = op1[i]\n end\n op1[1] = 0\n end\n r = op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a, n)\n local op1 = self:d2b(a)\n local r = self:d2b(0)\n\n if n < 32 and n > 0 then\n for i = 1, n do\n for i = 1, 31 do\n op1[i] = op1[i + 1]\n end\n op1[32] = 0\n end\n r = op1\n end\n return self:b2d(r)\nend --bit:_lshift\n\nstart = function()\n log.debug('GX_LF_XW start %s, ctx=', 'GX_LF_XW.lua', json.encode(ctx.device))\n\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n log.debug('GX_LF_XW 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ', moduleNo, json.encode(moduleNo))\n else\n moduleNo = device.props.moduleId\n log.debug('GX_LF_XW 设备模块通道 属性获取 m=%s 接口props=%s', moduleNo, json.encode(device.uplink.props))\n end\n\n if tonumber(moduleNo) > 255 then\n local errout = {\n data = {},\n result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255'}\n }\n\n local errresult = json.encode(errout)\n ctx:done(errresult)\n end\n local endian = 'B'\n local buff = ''\n buff = iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff = iota.appendHexByte(buff, 0x04, endian) --1: CMD 4\n buff = iota.appendHexByte(buff, 0x00, endian)\n buff = iota.appendHexByte(buff, 0x04, endian)\n buff = iota.appendHexByte(buff, 0x00, endian)\n buff = iota.appendHexByte(buff, 0x02, endian) --1: CMD 1\n buff = iota.appendHexCrc(buff, 'L', 0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok, resp = ctx:ssend(buff, 15000)\n local result = '{}'\n if ok then\n result = unmarshall(resp, moduleNo)\n else\n local errout = {\n data = {},\n result = {code = 1001, msg = '采集超时'}\n }\n result = json.encode(errout)\n \n end\n ctx:done(result)\nend\n\nunmarshall = function(hex, moduleNoStr)\n log.debug('GX_LF_XW m=%s received=%s', moduleNo, hex)\n -- var_dump(ctx,3,"")\n local out = {\n data = {},\n result = {}\n }\n local ErrorCode = IsValid(hex, moduleNoStr)\n if ErrorCode then\n -- 010404800101488222\n local data_by = 0\n local elongation = 0\n if iota.hexToByte(hex, 1, 'B') == 0x04 then\n local by = string.sub(hex, 7, 15) --data\n local sign = 1\n data_by = iota.hexToByte(by, 0, 'B')\n if data_by >= 0x80 then\n data_by = bit:_and(data_by, 0x7f)\n sign = -1\n end\n local integer = bit:_or(bit:_lshift(bit:_and(data_by, 0xffff), 8), iota.hexToByte(by, 1, 'B')) * sign\n local decim = bit:_or(bit:_lshift(bit:_and(iota.hexToByte(by, 2, 'B'), 0xffff), 8), iota.hexToByte(by, 3, 'B')) / 1000 * sign\n\n elongation = integer + decim\n out.data = {\n length = elongation\n }\n else\n local cmd = iota.hexToByte(hex, 2, 'B')\n if cmd == 0x06 then\n out.result = {\n code = 1005,\n msg = '功能号错误'\n }\n elseif cmd == 0x05 then\n out.result = {\n code = 1005,\n msg = '寄存器错误'\n }\n elseif cmd == 0x04 then\n out.result = {\n code = 1005,\n msg = '正常操作发生异常'\n }\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n\nIsValid = function(data, moduleNoStrCheck)\n if data == nil or (string.len(data) / 2 ~= 9 and string.len(data) / 2 ~= 5) then\n errormsg = 'Data is nil or Invalid'\n errcode = 1002\n return false\n end\n if iota.hexToByte(data, 1, 'B') ~= 0x04 and iota.hexToByte(data, 1, 'B') ~= 0x84 then\n errormsg = 'CMD is not right,0x04/0x84'\n errcode = 1003\n return false\n end\n if tostring(moduleNoStrCheck) ~= tostring(iota.hexToByte(data, 0, 'B')) then\n errormsg = 'Invalid moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2018-08-13 14:58:12.131+08 2019-05-21 14:48:46.113+08 2018-08-13 \N
+80216459-82ea-4fd2-b8a5-a8857b794d5e tlsf_collector_1606 \N 采集仪协议 1.0 fc6696f3-32e6-42c8-b8de-8409f5bfe865 fc6696f3-32e6-42c8-b8de-8409f5bfe865 f fc6696f3-32e6-42c8-b8de-8409f5bfe865 Lua --//svn/SavoirCloud/Documents/04 项目资料/2017-05/通联四方协议.txt\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nstart=function()\n\tlog.debug("load script %s", "tlsf_1606")\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n \n log.debug("tlsf_1606:LUA:根设备devices : data is =%s", json.encode(subdevices))\n \tfor index,child in pairs(subdevices) do\n\t\t log.debug("tlsf_1606:LUA:子设备subdevices=%s : data is =%s", index,json.encode(subdevices))\n \tlocal moduleStr\n\t\t\t\n\t\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStr=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\t\tlog.debug("tlsf_1606 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\t\telse\n\t\t\t\tmoduleStr=device.props.moduleId\t\t\n\t\t\t\tlog.debug("tlsf_1606 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\t\tend\n\t\t\tmoduleStr=string.format("%05d",moduleStr) -- 补全 5位的模块号,比如“00001”\n\t\t\tlocal channelStr=tostring(child.props.channelId) \n log.debug("tlsf_1606:模块%s通道%s的deviceId是%s:",moduleStr,channelStr,tostring(child.id))\n\t\t\t\n\t\t\tlocal package_Str=string.format("CWM80x %s Begin %s",moduleStr,channelStr)\n\t\t\tlocal buff=StrToHex(package_Str)\t\t\n\t\t\tbuff=iota.appendHexByte(buff, 0x0d, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0x0a, endian)\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n log.debug("tlsf_1606:模块%s通道%s的数据接收成功,开始解析",moduleStr,channelStr) \n\t\t\tresult = unmarshall(resp,child,moduleStr,channelStr)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("tlsf_1606:模块%s通道%s的数据接收失败",moduleStr,channelStr) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("tlsf_1606:".."subdevices是nil")\n \treturn nil\n end\n\t\t\n\tlog.debug('tlsf_1606:out序列化')\n\tlocal resultData =json.encode(out)\n log.debug("tlsf_1606:out序列化结果 : out is =%s", json.encode(out))\n ctx:done(resultData)\nend\n\n\n --m= 2,C= 16 ,frequency=1630.9 temp= 0\n --536e3d3030303032204261743d342e302031372f30362f31392030373a35343a3233205031363d313633302e39205431363d302e30200b800d0a \n\t\t--Sn=00002 Bat=4.0 17/06/19 07:54:23 P16=1630.9 T16=0.0\nunmarshall=function(hex,subDevice,moduleStr,channelStr)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\tlocal ModuleChar = "M";\n local FrequencyChar = "P";\n local TempChar = "T";\n local VoltageChar = "V";\n local CurrentChar = "I";\n\t local channelNo=""\n\t\tlocal chlen --获取通道长度\n\t\n\t--local subModuleId=subDevice.props.moduleId\n\t--local subChannelId=subDevice.props.channelId\n\t--log.debug("tlsf_1606:模块%s通道%s的deviceId是:%s",subModuleId,subChannelId,subDevice.id)\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n sData=HextoStr(hex)\n\t\tSData=string.gsub(sData,'\\r\\n','')\n\t\tlocal allResponse=Split(sData,' ')\n\t\t--移除表内的“”和nil\n for i,v in ipairs(allResponse) do\n if v=='' or v==nil then\n table.remove(allResponse,k)\n log.debug("tlsf_1606:".."表内的“”和nil 移除元素为 "..tostring(allResponse[i]))\n else\n\t\t\t local type_sensor=string.sub(allResponse[i],1,1)\n\t\t\t\t\n\t\t\t\t--模数\n\t\t\t\tif type_sensor==ModuleChar then\n\t\t\t\t\tlocal singleDatalen=string.len(allResponse[i])\n\t\t\t\t\tfor j=1,singleDatalen,1 do\n\t\t\t\t\t\tchlen=j\n\t\t\t\t\t\tlocal str=string.sub(allResponse[i],1+j,1+j)\n\t\t\t\t\t\tif(str~="=") then\n\t\t\t\t\t\t\tchannelNo=channelNo..str\n\t\t\t\t\t\telse\n\t\t\t\t\t\t break\n\t\t\t\t\t\tend\t\t\t\t\t\n end\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif(channelNo ~=channelStr) then\n\t\t\t\t\t break\n\t\t\t\t\tend\n\t\t\t\t\t\n chlen=chlen-1 \n\t\t\t\t\tlocal length=string.len(allResponse[i])-chlen-2\n\t\t\t\t\tlocal tempLength=string.len(allResponse[i+1])-chlen-2\n\t\t\t\t\tlocal Module_str=string.sub(allResponse[i],chlen+2+1,chlen+2+1+length)\n\t\t\t\t\tlocal Module=tonumber(Module_str)\n\t\t\t\t\tlocal freq=math.sqrt(Module *1000)\n\t\t\t\t\tlocal tempData_str=string.sub(allResponse[i+1],chlen+2+1,chlen+2+1+tempLength)\n\t\t\t\t\tlocal tempIsNum=IsNumberic(tempData_str)\n\t\t\t\t local temp=0\n\t\t\t\t\tif tempIsNum then\n\t\t\t\t\t\ttemp=tonumber(tempData_str)\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\tif subDevice.uplink.capabilities[1].formula.metaid == "18760c89-e1c8-416d-a74e-8e273f8329a7" then --振弦公式ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)+B\n\t\t\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\tlocal kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\tlocal t0 = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\tlocal b = subDevice.uplink.capabilities[1].formula.props.B\n\t\t\t\t\t\tlog.debug("tlsf_1606:模块%s通道%s的公式计算参数是:k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s",moduleStr,channelStr,k,kt,f0,t0,freq,temp)\n\t\t\t\t\t\tif k~=nil and kt~=nil and f0~=nil and t0~=nil and b~=nil then\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)+b\n\t\t\t\t\t\tend\n\t\t\t\t\t\tlog.debug("tlsf_1606:模数模块%s通道%s的phy是:%s",moduleStr,channelStr,Phy)\n\t\t\t\t\tend\n\t\t\t\t\tsubData.data={\n\t\t\t\t\t\t\t\tfrequency=freq,\t\n\t\t\t\t\t\t\t\ttemperature=temp,\n\t\t\t\t\t\t\t\tphy=Phy\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tend\n\t\t\t\t\n\t\t\t\t--频率\n\t\t\t\tif type_sensor==FrequencyChar then --\n\t\t\t\t local singleDatalen=string.len(allResponse[i])\n\t\t\t\t\tfor j=1,singleDatalen,1 do\n\t\t\t\t\t\tchlen=j\n\t\t\t\t\t\tlocal str=string.sub(allResponse[i],1+j,1+j)\n\t\t\t\t\t\tif(str~="=") then\n\t\t\t\t\t\t\tchannelNo=channelNo..str\n\t\t\t\t\t\telse\n\t\t\t\t\t\t break\n\t\t\t\t\t\tend\t\t\t\t\t\n end\n\t\t\t\t\t\n\t\t\t\t\tif(channelNo ~=channelStr) then\n\t\t\t\t\t break\n\t\t\t\t\tend\n\t\t\t\t\t\n chlen=chlen-1 \n\t\t\t\t\tlocal length=string.len(allResponse[i])-chlen-2\n\t\t\t\t\tlocal tempLength=string.len(allResponse[i+1])-chlen-2 \n\t\t\t\t\tlocal frequency_str=string.sub(allResponse[i],chlen+2+1,chlen+2+1+length)\n\t\t\t\t\tlocal freq=tonumber(frequency_str)\n\t\t\t\t\tlocal tempData_str=string.sub(allResponse[i+1],chlen+2+1,chlen+2+1+tempLength)\n\t\t\t\t local tempIsNum=IsNumberic(tempData_str)\n\t\t\t\t local temp=0\n\t\t\t\t\tif tempIsNum then\n\t\t\t\t\t\ttemp=tonumber(tempData_str)\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\tif subDevice.uplink.capabilities[1].formula.metaid == "18760c89-e1c8-416d-a74e-8e273f8329a7" then --振弦公式ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)\n\t\t\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\tlocal kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\tlocal t0 = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\tlocal b = subDevice.uplink.capabilities[1].formula.props.B\n\t\t\t\t\t\tlog.debug("tlsf_1606:模块%s通道%s的公式计算参数是:k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s",moduleStr,channelStr,k,kt,f0,t0,freq,temp)\n\t\t\t\t\t\tif k~=nil and kt~=nil and f0~=nil and t0~=nil and b~=nil then\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)+b\n\t\t\t\t\t\tend\n\t\t\t\t\t\tlog.debug("tlsf_1606:频率模块%s通道%s的phy是:%s",moduleStr,channelStr,Phy)\n\t\t\t\t\tend\n\t\t\t\t\tsubData.data={\n\t\t\t\t\t\t\t\tfrequency=freq,\t\n\t\t\t\t\t\t\t\ttemperature=temp,\n\t\t\t\t\t\t\t\tphy=Phy\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\tend\n\t\t\t\t\n\t\t\t --电压\n\t\t\t\tif type_sensor==VoltageChar then --\n\t\t\t\t\tlocal singleDatalen=string.len(allResponse[i])\n\t\t\t\t\tfor j=1,singleDatalen,1 do\n\t\t\t\t\t\tchlen=j\n\t\t\t\t\t\tlocal str=string.sub(allResponse[i],1+j,1+j)\n\t\t\t\t\t\tif(str~="=") then\n\t\t\t\t\t\t\tchannelNo=channelNo..str\n\t\t\t\t\t\telse\n\t\t\t\t\t\t break\n\t\t\t\t\t\tend\t\t\t\t\t\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\tif(channelNo ~=channelStr) then\n\t\t\t\t\t break\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\tchlen=chlen-1 --j下标从1开始 非0\n\t\t\t\t\tlocal length=string.len(allResponse[i])-chlen-2\n\t\t\t\t\tlocal voltage_str=string.sub(allResponse[i],chlen+2+1,chlen+2+1+length)\n\t\t\t\t\tlocal voltage=tonumber(voltage_str)\n\t\t\t\t subData.data={\n\t\t\t\t\t\t\t\tvoltage=voltage\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\tend\n\t\t\t\t\n\t\t\t\t--电流\n\t\t\t\tif type_sensor==CurrentChar then --\n\t\t\t\t\tlocal singleDatalen=string.len(allResponse[i])\n\t\t\t\t\tfor j=1,singleDatalen,1 do\n\t\t\t\t\t\tchlen=j\n\t\t\t\t\t\tlocal str=string.sub(allResponse[i],1+j,1+j)\n\t\t\t\t\t\tif(str~="=") then\n\t\t\t\t\t\t\tchannelNo=channelNo..str\n\t\t\t\t\t\telse\n\t\t\t\t\t\t break\n\t\t\t\t\t\tend\t\t\t\t\t\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\tif(channelNo ~=channelStr) then\n\t\t\t\t\t break\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\tchlen=chlen-1 --j下标从1开始 非0\n\t\t\t\t\tlocal length=string.len(allResponse[i])-chlen-2\n\t\t\t\t\tlocal current_str=string.sub(allResponse[i],chlen+2+1,chlen+2+1+length)\n\t\t\t\t\tlocal current=tonumber(current_str)\n\t\t\t\t subData.data={\n\t\t\t\t\t\t\t\tcurrent=current\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\tend\n\t\t\t\t\n\t\t\t\n\t\t\tend\n end\n\t\t\t\t\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if subdevices ~=nil then\n log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n \tfor index,child in pairs(subdevices) do\n \tif child.device.moduleId==tostring(moduleNoId) then\n\t\t \t if child.device.channelId == tostring(channelNoId) then\n log.debug("tlsf_1606:".."DeviceInfo是:"..tostring(child.deviceId))\n \t\t log.debug("tlsf_1606:".."子设备原形child=%s",json.encode(child))\n \t --return child.deviceId\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("tlsf_1606:subdevices是nil")\n \treturn nil\n end\nend\n\n\nIsValid=function(checkdata,moduleStr)\n log.debug("tlsf_1606:".."数据校验开始:%s",checkdata)\n if checkdata == nil then\n errormsg = 'checkdata is nil'\n errcode = 1001\n return false\n end\n\tlocal moduleStrCheck=tonumber(HextoStr(string.sub(checkdata,7,16)))\n\tif tonumber(moduleStr) ~= moduleStrCheck then\n errormsg = string.format('module=%s is wrong[%s]',tonumber(moduleStr),moduleStrCheck)\n errcode = 1001\n return false\n end\n\t\n\t\n\tlocal plusSum16=string.sub(checkdata,-8,-5)\n local plu16={}\n\tlocal sub_checkdata=string.sub(checkdata,1,-9)\n local r_plusSum16 = CheckPlusSum(sub_checkdata, 1, string.len(sub_checkdata)/2)\n\tlog.debug('tlsf_1606:plusSum16=%s',plusSum16)\n if tonumber(plusSum16,16)~=r_plusSum16 then\n errormsg = 'checkPlusSum16 is false'\n errcode = 1004\n\t log.debug('tlsf_1606: plusSum16校验失败:plusSum16=%s,r_plusSum16=%s',tonumber(plusSum16,16),r_plusSum16)\n return false\n end\n\n log.debug("tlsf_1606:校验通过")\n return true\nend\n\n -- 字符串 -> Hex\nStrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n-- Hex-> 字符串 \nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\n\nend\n\nCheckPlusSum=function(Hex_package, startIndex, endIndex)\n local sum = 0\n for i = startIndex, endIndex,1 do\n local Hex_byte=string.sub(Hex_package,2*i-1,2*i)\n sum = (sum + tonumber(Hex_byte,16)) % 0xffff\n end \n local result = sum --& 0xff\n return result\nend INLINE 2018-01-08 15:36:37.219+08 2018-07-09 15:27:12.037+08 2018-01-04 \N
+e8cedb2f-f0bd-401c-bea3-abd04f01319e fs-httpNewTJ \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug('httpNewTJ LUA http server start')\nend\n\nonData =\n function(httpbody, index)\n local out = {\n data = {},\n result = {}\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n log.debug('httpNewTJ [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n local bodydataStr = httpbody.Body\n --local id = httpbody.ID\n --log.debug('httpNewTJ hex.id=%s type=%s', httpbody.id, type(httpbody.id))\n local bodydata = json.decode(bodydataStr)\n local hxzId = bodydata.HxzId\n local serverIP = '218.3.126.49'\n local port = '19700'\n local serverTime = getTimeNowStr()\n local url = httpbody.URL\n log.debug('httpNewTJ [%s] url=%s type=%s', moduleNo, url, type(url))\n local urlsperts = Split(url, '/')\n local len_urlsperts = table_leng(urlsperts)\n local type_long = urlsperts[len_urlsperts]\n local cmd_types = Split(type_long, '?')\n local cmd_type = cmd_types[1]\n log.debug('httpNewTJ [%s] cmd_type=%s', moduleNo, cmd_type)\n if cmd_type == 'LoginDataCrane' then\n local response_LoginData_bodyStr = string.format('{"cmd":"LoginDataCrane","data":{"RangeSetError":"0","NoWorkInterval":60,"WindSpeedSetError":"0","WorkInterval":20,"GpsSetError":"0","ServerIp":"%s","HxzId":"%s","WeightSetError":"0","ServerTime":"%s","HxzFactory":"DEYE","ErrorDelay":90,"HeartBeatInterval":15,"LeaseFlag":"0","LockFlag":"0","IdSetError":"0","RecordId":"63098da082984bd499217f2c980064ad","HeightSetError":"0","AngleSetError":"0","ObliguitySetError":"0","ServerPort":%s},"status":0}', serverIP, hxzId, serverTime, port)\n asend_HttpResponse(response_LoginData_bodyStr)\n elseif cmd_type == 'BaseDataCrane' then\n local response_BaseData_bodyStr = '{"cmd":"BaseDataCrane","data":{},"status":0}'\n asend_HttpResponse(response_BaseData_bodyStr)\n elseif cmd_type == 'RuntimeData' then\n local response_RuntimeData_bodyStr = '{"cmd":"RuntimeData","data":{},"status":0}'\n asend_HttpResponse(response_RuntimeData_bodyStr)\n local isOnline=0\n local isDownline=0\n local RTime=''\n local DownlineTime = bodydata.DownlineTime\n local OnlineTime = bodydata.OnlineTime\n log.debug('httpNewTJ [%s] DownlineTime=%s,OnlineTime=%s', moduleNo, DownlineTime,OnlineTime)\n if DownlineTime~='' then\n isDownline=1\n RTime=DownlineTime\n else\n isOnline=1\n RTime=OnlineTime\n end\n out.data = {\n isDownline = isDownline,\n isOnline = isOnline\n }\n out.time = unixtimestamp(RTime, moduleNo)\n\n log.debug('httpNewTJ [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n elseif cmd_type == 'RealtimeDataCrane' then --实时数据\n local response_RealtimeDataCrane_bodyStr = '{"cmd":"RealtimeDataCrane","data":{},"status":0}'\n asend_HttpResponse(response_RealtimeDataCrane_bodyStr)\n --获取实时数据\n local RTime = bodydata.RTime --单次工作完成时刻\n local Multiple = bodydata.Multiple\n local Moment = bodydata.Moment\n local Weight = bodydata.Weight\n local RatedWeight = bodydata.RatedWeight\n local WindSpeed = bodydata.WindSpeed\n local WindLevel = bodydata.WindLevel\n local RRange = bodydata.RRange\n local Height = bodydata.Height\n local Angle = bodydata.Angle\n local Obliguity = bodydata.Obliguity\n\n out.data = {\n Multiple = tonumber(Multiple),\n Moment = tonumber(Moment),\n Weight = tonumber(Weight),\n RatedWeight = tonumber(RatedWeight),\n WindSpeed = tonumber(WindSpeed),\n WindLevel = tonumber(WindLevel),\n RRange = tonumber(RRange),\n Height = tonumber(Height),\n Angle = tonumber(Angle),\n Obliguity = tonumber(Obliguity)\n }\n out.time = unixtimestamp(RTime, moduleNo)\n\n log.debug('httpNewTJ [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n elseif cmd_type == 'AlarmDataCrane' then\n local response_AlarmData_bodyStr = '{"cmd":"AlarmDataCrane","data":{},"status":0}'\n asend_HttpResponse(response_AlarmData_bodyStr)\n elseif cmd_type == 'WorkDataCrane' then\n --获取一个循环数据\n -- local workEndTime = bodydata.WorkEndTime --单次工作完成时刻\n -- local workMultiple = bodydata.WorkMultiple --倍率 1~99\n -- local workWindSpeedAlarm = bodydata.WorkWindSpeedAlarm --工作循环中是否有风速报警 0:正常 1:报警\n -- local workMaxRange = bodydata.WorkMaxRange --工作循环最大力矩时的幅度 0.00~99.99m\n ---- local workTime = bodydata.WorkTime --工作循环持续时长 单位(s)\n -- local workMaxWindSpeed = bodydata.WorkMaxWindSpeed --工作循环最大风速\n -- local workMaxTorque = bodydata.WorkMaxTorque --工作循环最大力矩百分比 0.00~655.35%\n -- local workRatedWeight = bodydata.WorkRatedWeight --工作循环最大力矩时的额定载重 0.00~99.99t\n -- local workWeight = bodydata.WorkWeight --工作循环最大力矩时的吊重 0.00~99.99t\n -- local workMaxHeight = bodydata.WorkMaxHeight --工作循环中最大高度 0.00~655.35m\n -- out.data = {\n -- workMultiple = tonumber(workMultiple),\n -- workWindSpeedAlarm = tonumber(workWindSpeedAlarm),\n -- radius = tonumber(workMaxRange),\n -- workTime = tonumber(workTime), --完成耗时s\n -- windSpeed = tonumber(workMaxWindSpeed),\n -- torquePercent = tonumber(workMaxTorque),\n -- workRatedWeight = tonumber(workRatedWeight),\n -- loadValue = tonumber(workWeight),\n -- height = tonumber(workMaxHeight)\n -- }\n --out.time = unixtimestamp(workEndTime, moduleNo)\n --log.debug('httpNewTJ [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n --ctx:notify(json.encode(out))\n local response_WorkData_bodyStr = '{"cmd":"WorkDataCrane","data":{},"status":0}'\n asend_HttpResponse(response_WorkData_bodyStr)\n elseif cmd_type == 'GpsData' then\n local response_GpsData_bodyStr = '{"cmd":"GpsData","data":{},"status":0}'\n asend_HttpResponse(response_GpsData_bodyStr)\n end\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body = bodyString}\n ctx:asend(ack)\nend\n\ngetTimeNowStr = function()\n --2018-4-28 16:10:12\n local timeNowNum = os.time()\n local timeNowStr = os.date('%Y-%m-%d %H:%M:%S', timeNowNum)\n return timeNowStr\nend\n\nunixtimestamp = function(datestr, moduleNoStr)\n -- 2018-4-28 16:10:12\n --log.debug("fs_tj_lf_station datestr=%s",datestr)\n local datelist = Split(datestr, ' ')\n local date = Split(datelist[1], '-')\n local time = Split(datelist[2], ':')\n local year = tonumber(date[1])\n local month = tonumber(date[2])\n local day = tonumber(date[3])\n local hour = tonumber(time[1])\n local minute = tonumber(time[2])\n local second = tonumber(time[3])\n --log.debug("fs_tj_lf_station year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n log.debug('httpNewTJ [%s] recordTime=%s', moduleNoStr, recordTime)\n return recordTime\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n INLINE 2018-11-09 17:36:10.253+08 2021-02-19 16:21:21.615+08 2018-11-09 \N
+0e7f12e2-5208-4731-b100-1d4dd5d7bbf9 DaLianFiber_1180 \N 非简测的通用协议(老师版) 1.0 72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53 72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53 f 72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53 Lua --//04 项目资料/2017-06/通辽土壤墒情温湿度监测/光纤光栅码流格式.png\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--48个通道\n----E2030000080000004A454D45544543480C0000003030383032463139444430333000120065000000803FE107061E0C17D44DA65FBD44120066000000803FE107061E0C17D44DEE8BBD44120067000000803FE107061E0C17D44D32BABD44120068000000803FE107061E0C17D44DDDF4BD44120069000000803FE107061E0C17D44DB320BE4412006A000000803FE107061E0C17D44D684FBE4412006B000000803FE107061E0C17D44D9581BE4412006C000000803FE107061E0C17D44DD4B4BE4412006D000000803FE107061E0C17D44D27F6BE4412006E000000803FE107061E0C17D44D4407BF4412006F000000803FE107061E0C17D44DE642BF44120070000000803FE107061E0C17D44DF270BF44120071000000803FE107061E0C17D44D9EA9BF44120072000000803FE107061E0C17D44DB1D6BF44120073000000803FE107061E0C17D44D7F00C044120074000000803FE107061E0C17D44DB728C044120075000000803FE107061E0C17D44D3569C044120076000000803FE107061E0C17D44D238AC044120077000000803FE107061E0C17D44D7FC4C044120078000000803FE107061E0C17D44D6DF2C044120079000000803FE107061E0C17D44D5619C14412007A000000803FE107061E0C17D44DAD4AC14412007B000000803FE107061E0C17D44D8482C14412007C000000803FE107061E0C17D44D04ABC14412007D000000803FE107061E0C17D44D50DDC14412007E000000803FE107061E0C17D44DE713C24412007F000000803FE107061E0C17D44D1D3CC244120080000000803FE107061E0C17D44D9C73C244120081000000803FE107061E0C17D44DA29FC244120082000000803FE107061E0C17D44D4FD8C244120083000000803FE107061E0C17D44D64FDC244120084000000803FE107061E0C17D44D6336C344120085000000803FE107061E0C17D44DB460C344120086000000803FE107061E0C17D44DC58DC344120087000000803FE107061E0C17D44D6BC0C344120088000000803FE107061E0C17D44DF9F1C344120089000000803FE107061E0C17D44D9A1BC44412008A000000803FE107061E0C17D44DCD55C44412008B000000803FE107061E0C17D44D1279C44412008C000000803FE107061E0C17D44D6DA7C44412008D000000803FE107061E0C17D44D4BE4C44412008E000000803FE107061E0C17D44DE00EC54412008F000000803FE107061E0C17D44DA63BC544120090000000803FE107061E0C17D44D046EC544120091000000803FE107061E0C17D44D7B96C544120092000000803FE107061E0C17D44D80CDC544120093000000803FE107061E0C17D44DE1FFC544120094000000803FE107061E0C17D44D1832C64400002C87\n\nstart=function()\n log.debug("load script %s, moduleId=%s", "JC_1180.lua", device.props.moduleId or "[nil]")\n --log.debug("JC_1180:".."LUA: ctx is =%s", json.encode(device))\n -- ok,resp=ctx:ssend("0102030405060708",15000)\n -- log.debug("JC_1180:".."测试下发正常")\nend\n\nonData=function(hex)\n --log.debug("JC_1180:".."LUA: onData: data is =%s", hex)\n\t--log.debug("JC_1180:".."LUA:device : data is =%s", json.encode(device))\n --log.debug("JC_1180:".."LUA:subdevices : data is =%s", json.encode(device.dnlinks[1].devices))\n\n local out={\n data ={},\n result = {},\n type=2\n }\n \n\n local buffer=hex\n --数据域 内的索引号\n local ErrorCode = IsValid(buffer)\n if ErrorCode then\n log.debug("JC_1180:buffer==> %s",buffer)\n --获取子字符串表\n local sensorcnt=iota.hexToShort(buffer,32,'L')\n\t\tlocal channelno=0\n\t\tlocal buf=string.sub(buffer,2*20+1,2*(31+1))\n\t\tlocal modle1=toStrHex(buf)\n\t\tlocal modle=0\n\t\tlocal Value=0\n\t\t\n\t\tfor i=0,sensorcnt-1,1 do\n\t\t\tlocal num=iota.hexToShort(buffer,36+i*20,'L')\n\t\t channelno=num %100\n\t\t\tmodle=getIntPart(num/100)\t\n\t\t\tlocal module_str=modle1..modle\t\t\t\n\t\t\tValue=iota.hexToFloat(buffer,50+i*20,'L')\n\t\t\t\n\t\t\tlocal moduleNo=module_str\n\t\t\tlocal channelNo=channelno\n\t\t\t\n\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\tlocal deviceId\n\t\t\tif childDevice~=nil then\n\t\t\t\tdeviceId=childDevice.id\t\t\t\n\t\t\tend\n\t\t\t\n\t\t\tlog.debug("JC_1180:循环 i=%s,sensorcnt=%s,num=%s,moduleNo=%s,channelNo=%s,deviceId=%s",i,sensorcnt,num,moduleNo,channelNo,deviceId)\n\t\t\tlocal data1 = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t phy=Value\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t }\n\t\t\ttable.insert(out.data,data1)\n\t\tend \n \n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("JC_1180: resultData : data is =%s", json.encode(out))\n ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n \tif child.uplink.props ~='null' or child.uplink.props.module==tostring(moduleNoId) or child.props.moduleId==tostring(moduleNoId) then\n\t\t \t if child.uplink.props.channel == tostring(channelNoId) or child.props.channelId == tostring(channelNoId) then\n log.debug("JC_1180:".."DeviceInfo是:"..tostring(child.deviceId))\n \t\t log.debug("JC_1180:".."子设备原形child=%s",json.encode(child))\n \t --return child.deviceId\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("JC_1180:".."subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function(alldata)\n log.debug("JC_1180:校验开始")\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n return false\n end\n\n local data=string.sub(alldata,1,-4)\n log.debug("data:"..data)\n\n local crc16_Str=string.sub(alldata,-8,-1)\n local checkData = iota.appendHexCrc(data,'L',0);\n\tlocal crc16_Str_check=string.sub(checkData,-8,-1)\n log.debug("JC_1180:".."原crc16是:"..crc16_Str)\n \n log.debug("JC_1180:crc16_Str_check是:"..tostring(crc16_Str_check))\n --if tonumber(plu16[0],16)~=plusSum16Hi or tonumber(plu16[1],16)~=plusSum16Lo then\n -- errormsg = 'checkPlusSum16 is false'\n -- errcode = 1004\n -- return false\n -- end\n\n log.debug("JC_1180:".."校验通过")\n return true\nend\n\ngetIndex=function(data)--用于IsValid\n local len=string.len(data)/2\n for n =1,len do \n local value=string.sub(data,2*n-1,2*n)\n if value=='0a' then\n return n;\n end\n end\n return 0;\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ngetIntPart=function(x) --取整\n if x<= 0 then\n return math.ceil(x)\n end\n if math.ceil(x) == x then\n x = math.ceil(x)\n else\n x = math.ceil(x)-1\n end\n\n\n return x\nend\n\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\n\nend\n INLINE 2018-01-08 16:20:05.743+08 2018-03-27 16:00:07.78+08 2018-01-08 \N
+9ee874f0-a205-421a-8249-73fd9c6b4901 zdhl_air_1 \N 1.0 d3ab1979-3439-47ba-aa98-82b61a9d6260 d3ab1979-3439-47ba-aa98-82b61a9d6260 f d3ab1979-3439-47ba-aa98-82b61a9d6260 Lua \nstart=function()\n log.debug("start zdhl_air_1.lua , ctx= %s",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n \tlocal moduleNo=device.uplink.props.module \n buff=iota.appendHexByte(buff, moduleNo, endian) \n buff=iota.appendHexByte(buff, 4, endian) \n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 16, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug(" zdhl_air_1 ssend %s",buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n log.debug("recv %s, ctx=%s", "zdhl_air_1.lua",hex)\n local out={\n type = 2,\n data ={},\n result = {}\n }\n local module=iota.hexToByte(hex,0,'B')\n local length=iota.hexToByte(hex,2,'B') \n if (string.len(hex)/2==length+5) then\n \n --010304012c01f43a11\n --\n\n for i=1,length/2 do\n local childDevice=getDeviceInfo(i)\n local deviceid\n if childDevice~=nil then\n deviceid=childDevice.id\n log.debug("zdhl_air_1:子设备原形childDevice=%s",json.encode(childDevice))\n log.debug("zdhl_air_1:子设备device.id: "..tostring(device.id))\n \n local Phy=iota.hexToShort(hex,i*2+1,'B')\n \n local data1 = {\n data={\n physicalvalue=Phy\n },\n device=deviceid,\n type=1 \n }\n log.debug("Phy结果=%s",Phy)\n table.insert(out.data,data1) \n end\n end\n else\n local message = "Invalid Msg, len is not rigth"\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("recv %s, ctx=%s", "zdhl_air_1.lua",json.encode(out))\n return json.encode(out)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(channelNoId)\n if device.dnlinks[1].devices ~=nil then\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t \t if child.uplink.props.channel == tostring(channelNoId) then\n return child\n \t end\n\t\tend\n else\n log.debug("zdhl_air_1:".."subdevices是nil")\n \treturn nil\n end\nend\n INLINE 2018-05-03 08:52:14.917+08 2018-05-07 11:04:01.205+08 2018-05-03 \N
+8757fbc2-2ae6-42b5-b888-0f5ce8edb8cc hc_settlement_1 \N 上海华测创时测控科技有限公司 1.0 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 f 14332895-1778-42da-912a-4314147f2555 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "hc_settlement_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 4, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0x16, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 4, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 5: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==26) then\n \n --01040842DEEB3E419300004526 \n --"settlement": 111.459457,\n --"temp": 18.375\n --print("parsing data", hex)\n \n local settlement =iota.hexToFloat(hex,3,'B');\n local temp =iota.hexToFloat(hex,7,'B'); \n out.data = {\n settlement=settlement,\n temp=temp\n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2017-12-18 17:13:46.687+08 2018-02-28 18:32:12.196+08 2017-12-18 \N
+09635bcc-db2c-4e5a-b933-638501dad998 lywh__8001 \N 升级版 厂家要求 收到数据给回复 1.0 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 f dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 Lua \n-- start=function()\n -- log.debug("load script %s, moduleId=%s", "lywh__8001.lua", device.props.moduleId or "[nil]")\n -- log.debug("lywh__8001:".."LUA: ctx is =%s", json.encode(device))\n -- ok,resp=ctx:ssend("01020304",15000)\n -- log.debug("lywh__8001:".."测试下发01020304正常")\n --end\n\n \n \n --AA2D00FFFFFFFFFF5900301032000B0006000900220FF5FFEDFFEEFF0500090010001300F0FFF2FFEFFFEFFFBB\n --通道1 temperature=5\n --通道2 temperature=1.2\n --通道3 temperature=0.6\n --通道4 temperature=0.9\n\t --通道5 temperature=387.4\n\t --通道6 temperature=-1.1\nonData=function(hex)\n log.debug("lywh__8001 收到数据=%s", hex)\n\t--log.debug("lywh__8001 device =%s", json.encode(device))\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal data=hex\n\tif string.upper(data)=="3E74696D656375720D0A" then\n\t --请求同步服务器时间\n\t local timeStr=os.date("%Y%m%d-%H%M%S",os.time())\n\t local timeResponse="3c74696d656375723a"..StrToHex(timeStr).."0d0a"\n\t ok=ctx:asend(timeResponse)\n\telse\n\t\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\tlog.debug('lywh__8001 数据有效=%s',hex)\n\t\n\t \n local temp={}\n\t\tfor i=1,16,1 do\t\t\n\t\t temp[i]=iota.hexToShort(hex,12+i*2,'L');\t\n\t\tend\n\n\t\tlocal moduleId=device.uplink.props.module\n\t\t--分析单类数据\n for k,v in ipairs(temp) do\n\t\t\tlog.debug('lywh__8001 分析单类数据 k=%s,v=%s',k,v)\n \n\t\t\t\tlocal channelId=k\n\t\t\t\tlocal childDevice=getDeviceInfo(moduleId,channelId) \n\t\t\t\t\n\t\t\t\tif childDevice~=nil then\n\t\t\t\t log.debug('lywh__8001 moduleId=%s,channelId=%s id=%s,temperature=%s',moduleId,channelId,childDevice.id,temp[k])\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\ttemperature=temp[k]/10.0,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tend\t\n\t\tend\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\telse\n out.result = {code = errorcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\n end\nend\n\nIsValid=function(data)\n\t\n\tlocal datalength=string.len(data)\n\tif string.len(data)/2 ~=48 then\n\t errormsg = 'data length is wrong'\n errorcode = 1001\n ok=ctx:asend("4552")\n return false\n end\t\n\n\tif string.upper(string.sub(data,1,6)) ~= 'AA552E' then \n errormsg = 'Data is Invalid'\n errorcode = 1001\n ok=ctx:asend("4552")\n return false\n end\n --累加和校验\n local checksum16=CheckPlusSum(data,1,string.len(data)-4)\n\tlocal checksum16_Hex=string.format("%02x",checksum16)\n local sum16_Hex=string.sub(data,-2,-1)..string.sub(data,-4,-3)\n log.debug("lywh__8001 checksum16_Hex=%s,sum16_Hex=%s",checksum16_Hex,sum16_Hex)\n if checksum16_Hex~=sum16_Hex then\n \tlog.debug("lywh__8001 累加和校验失败")\n ok=ctx:asend("4552")\n errormsg = 'Data is Invalid'\n errorcode = 1001\n return false\n end\n ok=ctx:asend("4f4b")\n log.debug("lywh__8001 校验通过")\n return true\nend\n--累加和校验\nfunction CheckPlusSum(str, startIndex, endIndex)\n local sum = 0\n for i = startIndex, endIndex,4 do\n sum = (sum + tonumber(string.sub(str,i+2,i+3)..string.sub(str,i,i+1),16)) % 0x10000\n end \n local result = sum \n return result\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("lywh__8001 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t -- log.debug("lywh__8001:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t \n\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t--log.debug("lywh__8001 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\t\n\t\t\t \n \tif tonumber(moduleStrCheck)==tonumber(moduleNoId) then\n\t\t \t \n if tonumber(channelStrCheck)==tonumber(channelNoId) then\n\t\t\t\t\tlog.debug("lywh__8001: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n\t\t\t\t\treturn child\n\t\t\t\tend\n\n \t \tend\n\t\tend\n else\n log.debug("lywh__8001: subdevices是nil")\n \treturn nil\n end\nend\n\n\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\nStrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2018-07-27 15:34:11.106+08 2018-09-11 09:18:35.537+08 2018-07-27 \N
+0af7b979-0985-40de-8e79-654d7b90c35a 多条数据~~~ \N 1 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f 56031544-f3e0-407f-9ffa-1a54742ecfa7 Lua start=function()\n --log.debug("协议2 start~~~~~~~ ")\n ctx:asend("00110011")\nend\n\nonData=function()\n ctx:done("{\\"data\\":[{\\"data\\":{\\"x\\":11.11,\\"y\\":22.22,\\"temp\\":33.33},\\"device\\":\\"b8aab8dc-6e4d-4c55-a778-d0f516d90a59\\",\\"time\\":\\"2018-03-23T10:25:30+08:00\\",\\"type\\":1},{\\"data\\":{\\"x\\":1,\\"y\\":1,\\"temp\\":3},\\"device\\":\\"b8aab8dc-6e4d-4c55-a778-d0f516d90a59\\",\\"time\\":\\"2018-06-08T10:25:30+08:00\\",\\"type\\":1},{\\"data\\":{\\"x\\":2,\\"y\\":58,\\"temp\\":27},\\"device\\":\\"b8aab8dc-6e4d-4c55-a778-d0f516d90a59\\",\\"time\\":\\"2018-06-08T10:25:30+08:00\\",\\"type\\":1},{\\"data\\":{\\"x\\":37,\\"y\\":58,\\"temp\\":37},\\"device\\":\\"b8aab8dc-6e4d-4c55-a778-d0f516d90a59\\",\\"time\\":\\"2018-06-08T10:25:30+08:00\\",\\"type\\":1}],\\"result\\":null,\\"type\\":2}")\nend\n INLINE 2018-06-08 15:50:57.676+08 2018-09-06 15:28:18.879+08 2018-06-08 \N
+3c8986bd-7bbb-4132-b2f0-eeb132743564 JM_1548 \N 1.0 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c f 5b2dc320-50f8-4461-87fc-03b66e3e5e4c Lua start =function()\n log.debug('start %s, moduleId=%s', 'jm_lvdt_1548.lua', device.props.moduleId or 'nil')\n\n local endian = 'B'\n local moduleNo = device.uplink.props.module\n\n if string.len(moduleNo) < 8 then --采集箱编号8位\n local strlen = 8 - string.len(moduleNo)\n for i = 1, strlen do\n moduleNo = '0' .. moduleNo\n end\n end\n log.debug('jm_1548 : moduleNo =%s', moduleNo)\n local buff_str = '#' .. moduleNo .. 'A!' --测量数据\n local buff = StrToHex(buff_str)\n local ok, resp = ctx:ssend(buff, 15000)\n local result = '{}'\n if ok then\n result = unmarshall(resp, moduleNo)\n else\n local errorout = {\n data = {},\n result = {}\n }\n errorout.result = {code = 1003, msg = '采集超时'}\n result = json.encode(errorout)\n end\n ctx:done(result)\nend\n\n --243737EE38303030303030389033303331C735353633D330B021 \n --module=80000008\n--"length": 30.31,\n--"length0": 55.63,\n--"temperature": -50\nunmarshall =\n function(hex, moduleNoStr)\n\n\n log.debug('jm_1548 收到数据=' .. hex)\n local out = {\n data = {},\n result = {}\n }\n\n local ErrorCode = IsValid(hex, moduleNoStr)\n if ErrorCode then\n local hexDatas = Get128Split(hex)\n local moduleNocheck = HextoStr(hexDatas[2])\n if moduleNocheck == moduleNoStr then\n local length = tonumber(HextoStr(hexDatas[3])) / 100\n --local length0 = tonumber(HextoStr(hexDatas[4])) / 100\n --local temperature = (tonumber(HextoStr(hexDatas[5])) - 500) / 10\n out.data = {\n length = length\t--,\n -- length0 = length0,\n -- temperature = temperature\n }\n else\n out.result = {code = 1002, msg = string.format('模块号%s≠%s',moduleNoStr,moduleNocheck)}\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n return json.encode(out)\nend\n\nIsValid = function(data, moduleNoStr)\n log.debug('jm_1548 开始校验数据=%s', data)\n local checkLength = string.len(data) / 2\n if data == nil or checkLength ~= 26 then\n errormsg = 'Data is nil or invalid length=' .. checkLength\n errcode = 1001\n log.debug('jm_1548 [%s] 长度校验失败 data=%s', moduleNoStr, data)\n return false\n end\n if iota.hexToByte(data, 0, 'B') ~= 0x24 then\n errcode = 1003\n errormsg = '返回数据头错误'\n return false\n end\n local dataLength = string.len(data) / 2\n\n --if iota.hexToByte(data, dataLength - 1, 'B') ~= 0x21 then\n -- errcode = 1003\n -- errormsg = '返回数据尾错误'\n -- return false\n --end\n\n log.debug('jm_1548 [%s] 数据校验通过', moduleNoStr)\n return true\n --crc\nend\n\n-- Hex-> 字符串\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n -- 字符串 -> Hex\nStrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\nGet128Split = function(buff_hex)\n local buffs = {}\n local tempStr = ''\n local j = 1\n for i = 1, string.len(buff_hex), 2 do\n local Y_str = string.sub(buff_hex, i, i + 1)\n local Y = tonumber(Y_str, 16)\n if Y >= 128 then\n buffs[j] = tempStr\n log.debug('jm_1548 buffs[%s]=%s',j,buffs[j])\n j = j + 1\n tempStr = ''\n else\n tempStr = tempStr .. Y_str\n end\n end\n if i==string.len(buff_hex) or i==string.len(buff_hex)-1 then\n buffs[j] = tempStr\n log.debug('jm_1548 buffs[%s]=%s',j,buffs[j])\n end\n \n return buffs\nend\n INLINE 2018-11-21 13:43:13.64+08 2018-11-22 15:13:55.316+08 2018-11-21 \N
+0bd15600-333e-47d6-b4fb-c3b8b26c2dcf fs_file_transfer \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start=function()\n\t--log.debug("fs_file_transfer : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n\tif data ~=nil then\n\t\tif data.type == "idau/file" then\n\t\t\tif data.ext==".d" or data.ext==".dx" then\n\t\t\t\t--log.debug("fs_file_transfer : recvd content = %s",data.payload)\n\t\t\t\tParseFileD(data.payload)\n\t\t\t\t--else\n\t\t\t\t--log.error("fs_file_transfer: unsupported file type: %s", data.ext)\n\t\t\tend\n\t\t\tif data.ext==".dat" then\n\t\t\t\t--log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n\t\t\t\tParseFileDat(data.payload)\n\t\t\t\t--else\n\t\t\t\t--log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n\t\t\tend\n\t\telse\n\t\t\t--log.error("fs_file_transfer : content type is not file, error recvd type is %s", data.type)\n\t\tend\n\telse\n\t\t--log.error("fs_file_transfer : recvd content is nil")\n\tend\nend\n\nfunction ParseFileDat(dathex)\n\t--log.debug("fs_file_transfer : datlen=%s" , string.len(dathex))\n\tlocal out={\n\t\tdata ={},\n\t\tresult = {},\n\t\ttype=2\n\t}\n\tlocal offset = 0\n\tlocal t = iota.hexToShort(dathex,offset,'B')\n\toffset = offset + 2\n\tlocal l = iota.hexToShort(dathex,offset,'B')\n\toffset = offset + 2\n\tlocal version = iota.hexToByte(dathex,offset,'B') -- 版本号\n\toffset = offset + 1\n\tlocal channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n\toffset = offset + 1\n\tlocal deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n\tlocal subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n\tif subdevice ~= nil then\n\t\toffset = offset + 2\n\t\tlocal samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n\t\toffset = offset + 4\n\t\tlocal filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n\t\toffset = offset + 4\n\t\tlocal gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n\t\toffset = offset + 1\n\t\tlocal triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n\t\toffset = offset + 1\n\t\tlocal year = iota.hexToByte(dathex,offset,'B')+2000\n\t\toffset = offset + 1\n\t\tlocal mon = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal day = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal hour = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal min = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal sec = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\toffset = offset + 12\n\t\tlocal Ldata = iota.hexToInt(dathex,offset,'B')\n\t\toffset = offset + 4\n\t\t--log.debug("fs_file_transfer deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n\t\tlocal strLen = string.len(dathex)\n\t\tlocal floatcount = (strLen/2-40)/4\n\t\t--log.debug("fs_file_transfer begin parse")\n\t\tlocal vols = {}\n\t\tfor i= 1, floatcount do\n\t\t\t--offset=40+(i-1)*4\n\t\t\tlocal subdat=string.sub(dathex,73+i*8,80+i*8)\n\t\t\t\n -- if pos >= strLen then\n -- log.debug("fs_file_transfer outofrange offset=%s floatcount=%s, strlen=%s",offset, floatcount, strLen)\n -- end\n\t\t\tvols[i]= iota.hexToFloat(subdat,0,'L',6)\n\t\tend\n\t\t--log.debug("fs_file_transfer finish parse")\n\n\t\tlocal rst = {\n\t\t\tdata={\n\t\t\t\t_data_type='vib',\n\t\t\t\tphysicalvalue=vols,\n\t\t\t\tsampleFreq=samplefreq,\n\t\t\t\tfilterFreq=filterfreq,\n\t\t\t\tgainAmplifier=gainamplifier,\n\t\t\t\ttriggerType=triggertype,\n\t\t\t\tversion=version\n\t\t\t},\n\t\t\tdevice=subdevice.id,\n\t\t\ttype=1,\n\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))\n\t\t}\n\t\ttable.insert(out.data,rst)\n\t\t--log.debug("fs_file_transfer deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n\t\tctx:notify(json.encode(out))\n\telse\n\t\t--log.debug("fs_file_transfer not found device module=%s channel=%s",deviceId,channel)\n\tend\nend\n\nfunction ParseFileD(content)\n\tlocal out={\n\t\tdata ={},\n\t\tresult = {},\n\t\ttype=2\n\t}\n\t--log.debug("fs_file_transfer : content =%s", content)\n\tlocal jsons=Split(content,'\\r')\n\tfor k,v in pairs(jsons) do\n\t\tif v~=nil and v~='' then\n\t\t\tlocal jsondata = json.decode(v)\n\t\t\tlog.debug("fs_file_transfer : json =%s", v)\n\t\t\tif jsondata~=nil and jsondata ~='' then\n\t\t\t\tlocal childDevice=getDeviceInfo(jsondata.M,jsondata.C)\n\t\t\t\tif childDevice ~=nil then\n\t\t\t\t\tlog.debug("fs_file_transfer id=%s 设备类型=%s,%s",device.uplink.props.id,childDevice.props.sensortype,json.encode(childDevice))\n\t\t\t\t\tif childDevice.props.sensortype=='gnss' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tx = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\ty = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\tz = jsondata.RV[3] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",((tonumber(jsondata.T)-28800000)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='zd' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tppv = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\tpv = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\trms = jsondata.RV[3] or 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transfer:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\n\t\t\t\t\tif childDevice.props.sensortype=='gdgs' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twavelength = jsondata.RV[1],\n\t\t\t\t\t\t\t\tphysicalvalue= jsondata.PV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transfer:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='wsd' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\ttemperature = jsondata.RV[1],\n\t\t\t\t\t\t\t\thumidity= jsondata.RV[2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transfer:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='standard485' then\n\t\t\t\t\t\t--log.debug("fs_file_transfer standard485=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tphysicalvalue= jsondata.PV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='cx' then\n\t\t\t\t\t\t--log.debug("fs_file_transfer standard485=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tanglex = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\tangley = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\ttemperature = jsondata.RV[3] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='lf' then\n\t\t\t\t\t\t--log.debug("fs_file_transfer lf=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tlength = jsondata.RV[1] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='pressure' then\n\t\t\t\t\t\t--log.debug("fs_file_transfer pressure=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tvoltage= jsondata.RV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n if childDevice.props.sensortype=="yc" then --压差\n\t\t\t\t\t\t--log.debug("fs_file_transfer yc=%s",json.encode(childDevice))\n local data3 ={\n data={\n pressure=jsondata.RV[1] or 0,\n temperature = jsondata.RV[2] or 0,\n \t\t\t\tssagee =jsondata.PV[1] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000-8 * 60 * 60)) \n }\n\t\t\t\t\t\t--log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data3),data3.time,jsondata.T)\t\t\t\n table.insert(out.data,data3)\n end\t\t\n if childDevice.props.sensortype=="zx" then --振弦\n --log.debug("fs_file_transfer zx=%s",json.encode(childDevice))\n local data4={\n data={\n physicalvalue = jsondata.PV[1] or 0,\n frequency=jsondata.RV[1],\n temperature=jsondata.RV[2],\n am=jsondata.RV[3],\n \t\t\t\t\twaterlevel=jsondata.PV[1],\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000-8 * 60 * 60)) \n }\n --log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data4),data4.time,jsondata.T)\t\n table.insert(out.data,data4)\n end\t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='bj' then\n\t\t\t\t\t\t--log.debug("ct_file_transfer bj=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tarch= jsondata.RV[1],\n\t\t\t\t\t\t\t\ttunnelface= jsondata.RV[2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='cj' then\n\t\t\t\t\t\t--log.debug("ct_file_transfer cj=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tlength= jsondata.RV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\n\t\t\t\t\tif childDevice.props.sensortype=='qixiangzhan' then\n\t\t\t\t\t\t--log.debug("fs_file_transfer qixiangzhan=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\ttemp= jsondata.RV[1],\n\t\t\t\t\t\t\t\thumidy= jsondata.RV[2],\n\t\t\t\t\t\t\t\tnoise= jsondata.RV[3],\n\t\t\t\t\t\t\t\tpm25= jsondata.RV[4],\n\t\t\t\t\t\t\t\tpm10= jsondata.RV[5]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='fsfx' then\n\t\t\t\t\t\t--log.debug("fs_file_transfer fsfx=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twinddirection = jsondata.RV[1],\n\t\t\t\t\t\t\t\twindspeed = jsondata.RV[2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='noise' then\n\t\t\t\t\t\t--log.debug("fs_file_transfer noise=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tnoise = jsondata.RV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='weight' then\n\t\t\t\t\t\tlog.debug("fs_file_transfer weight=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal axies = {\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[9])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[10])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[11])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[12])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[13])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[14])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[15])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[16])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[17])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[18])/1000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\tlocal overloads = ""\n\t\t\t\t\t\tlog.debug("fs_file_transfer jsondata axies=%s,grossWeight=%s",jsondata.SRT[3],tostring(tonumber(jsondata.SRT[1])/1000))\n\t\t\t\t\t\tif tonumber(jsondata.SRT[3]) >= 5 and tonumber(jsondata.SRT[1])/1000 >= 55 then\n\t\t\t\t\t\t\toverloads= "超载"\n\t\t\t\t\t\telseif tonumber(jsondata.SRT[3]) == 4 and tonumber(jsondata.SRT[1])/1000 >= 43 then\n\t\t\t\t\t\t\toverloads= "超载"\n\t\t\t\t\t\telseif tonumber(jsondata.SRT[3]) == 3 and tonumber(jsondata.SRT[1])/1000 >= 30 then\n\t\t\t\t\t\t\toverloads= "超载"\n\t\t\t\t\t\telseif tonumber(jsondata.SRT[3]) == 2 and tonumber(jsondata.SRT[1])/1000 >= 20 then\n\t\t\t\t\t\t\toverloads= "超载"\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\toverloads= "未超载"\n\t\t\t\t\t\tend\n\t\t\t\t\t\tlocal directionstr = ""\n\t\t\t\t\t\tif jsondata.M == "1" or jsondata.M == "2" then\n\t\t\t\t\t\t\tdirectionstr= "0"\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tdirectionstr= "1"\n\t\t\t\t\t\tend\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tgrossWeight = jsondata.SRT[1],\n\t\t\t\t\t\t\t\tdirection = directionstr,\n\t\t\t\t\t\t\t\taxisnum = jsondata.SRT[3],\n\t\t\t\t\t\t\t\tcmsLength = jsondata.SRT[6],\n\t\t\t\t\t\t\t\tcarType = jsondata.SRT[4],\n\t\t\t\t\t\t\t\ttotalBase = jsondata.SRT[7],\n\t\t\t\t\t\t\t\taxieSpeed = jsondata.SRT[2],\n\t\t\t\t\t\t\t\tcrossRoad = jsondata.M,\n\t\t\t\t\t\t\t\toverload = overloads,\n\t\t\t\t\t\t\t\tlicence = jsondata.SRT[8],\n\t\t\t\t\t\t\t\taxieWeight = json.encode(axies)\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\t--log.debug("fs_file_transfer line=%s childDevice is nil",k)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\t--log.debug("fs_file_transfer dataresult=%s", json.encode(out))\n\tctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n\t--log.debug("fs_file_transfer:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n\t--log.debug("fs_file_transfer: device = %s",json.encode(device))\n\tif device.dnlinks ~= nil then\n \t--log.debug("fs_file_transfer: device.dnlinks ~= nil")\n\t\tlocal subdevices = device.dnlinks[1].devices\n \t--log.debug("fs_file_transfer: subdevices %s",json.encode(subdevices))\n\t\tfor i,subdevice in pairs(subdevices) do\n\n\t\t\tlocal submodule=subdevice.uplink.props.module\n\t\t\t--判断是否是3层采集仪结构\n\t\t\tif json.encode(subdevice.dnlinks)~="{}" then\n\t\t\t\t--log.debug("fs_file_transfer:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n\t\t\t\tfor k,sublink in pairs(subdevice.dnlinks) do\n\t\t\t\t\t--log.debug("fs_file_transfer:sublink=%s",json.encode(sublink))\n\t\t\t\t\tfor u,sub_subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t--log.debug("fs_file_transfer:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\tlocal sensormodule=sub_subdevice.uplink.props.module\n\t\t\t\t\t\tlocal sensorchannel=sub_subdevice.uplink.props.channel\n\t\t\t\t\t\tif tostring(sensormodule) == tostring(moduleid) and tonumber(sensorchannel)==tonumber(channel) then\n\t\t\t\t\t\t\t--log.debug("fs_file_transfer:m=%s,c=%s 3 拜安匹配到设备=%s",moduleid,channel,json.encode(sub_subdevice))\n\n\t\t\t\t\t\t\treturn sub_subdevice\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\t--log.debug("fs_file_transfer:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\telse\n\n\t\t\t\tlocal subchannel=subdevice.uplink.props.channel\n\t\t\t\t--log.debug("fs_file_transfer:两层结构 m=%s,c=%s 设备=%s",submodule,subchannel,json.encode(subdevice))\n\t\t\t\tif tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then\n\t\t\t\t\t--log.debug("fs_file_transfer:m=%s,c=%s 2安信匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n\t\t\t\t\treturn subdevice\n\t\t\t\telse\n\t\t\t\t\t--log.debug("anxin_file_transfer has no device module=%s channel=%s,[submodule=%s,subchannel=%s]",moduleid,channel,submodule,subchannel)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\t--log.debug("fs_file_transfer has no device module=%s channel=%s",moduleid,channel)\n\t\treturn nil -- 没有找到匹配的传感器\n\telse\n\t\t--log.debug("fs_file_transfer has no subdevices.")\n\t\treturn nil -- 没有子设备\n\tend\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n\tlocal nFindStartIndex = 1\n\tlocal nSplitIndex = 1\n\tlocal nSplitArray = {}\n\twhile true do\n\t\tlocal nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n\t\tif not nFindLastIndex then\n\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n\t\t\tbreak\n\t\tend\n\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n\t\tnFindStartIndex = nFindLastIndex + string.len(szSeparator)\n\t\tnSplitIndex = nSplitIndex + 1\n\tend\n\treturn nSplitArray\nend\n\n INLINE 2018-12-21 17:01:01.525+08 2021-02-03 09:05:27.661+08 2018-12-21 \N
+ae1f5ddf-f933-47ea-a90e-9ac5af01b15b fs-httpNewSJJ \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug('httpNewSJJ LUA http server start')\nend\n\nonData =\n function(httpbody, index)\n local out = {\n data = {},\n result = {}\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n log.debug('httpNewSJJ [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n local bodydataStr = httpbody.Body\n --local id = httpbody.ID\n --log.debug('httpNewSJJ hex.id=%s type=%s', httpbody.id, type(httpbody.id))\n local bodydata = json.decode(bodydataStr)\n local hxzId = bodydata.HxzId\n local serverIP = '218.3.126.49'\n local port = '19700'\n local serverTime = getTimeNowStr()\n local url = httpbody.URL\n log.debug('httpNewSJJ [%s] url=%s type=%s', moduleNo, url, type(url))\n local urlsperts = Split(url, '/')\n local len_urlsperts = table_leng(urlsperts)\n local type_long = urlsperts[len_urlsperts]\n local cmd_types = Split(type_long, '?')\n local cmd_type = cmd_types[1]\n log.debug('httpNewSJJ [%s] cmd_type=%s', moduleNo, cmd_type)\n if cmd_type == 'LoginDataElevator' then\n local response_LoginData_bodyStr = string.format('{"cmd":"LoginDataElevator","data":{"SpeedSetError":"0","PeopleCntSetError":"0","NoWorkInterval":60,"WindSpeedSetError":"0","WorkInterval":30,"GpsSetError":"0","ServerIp":"%s","HxzId":"%s","WeightSetError":"0","ServerTime":"%s","HxzFactory":"DEYE","ErrorDelay":90,"HeartBeatInterval":15,"LeaseFlag":"0","ObliguityYSetError":"0","LockFlag":"0","IdSetError":"0","FloorSetError":"0","ObliguityXSetError":"0","RecordId":"0e3f0fb76ccf43fd9cc85767858ce3a9","HeightSetError":"0","WirelessSetError":"0","ServerPort":%s},"status":0}', serverIP, hxzId, serverTime, port)\n asend_HttpResponse(response_LoginData_bodyStr)\n elseif cmd_type == 'BaseDataElevator' then\n local response_BaseData_bodyStr = '{"cmd":"BaseDataElevator","data":{},"status":0}'\n asend_HttpResponse(response_BaseData_bodyStr)\n elseif cmd_type == 'RealtimeDataElevator' then --实时数据\n local response_RealtimeDataCrane_bodyStr = '{"cmd":"RealtimeDataElevator","data":{},"status":0}'\n asend_HttpResponse(response_RealtimeDataCrane_bodyStr)\n --获取实时数据\n local RTime = bodydata.RTime --时刻\n local PeopleCnt = bodydata.PeopleCnt -- 人数 0~99人\n local Weight = bodydata.Weight --载重 0.00~9.00t\n local Speed = bodydata.Speed -- 速度 -9.99~9.99m/s\n local Height = bodydata.Height -- 高度 -999.9~999.9m\n local Floor = bodydata.Floor --楼层 -999~999层\n local ObliguityX = bodydata.ObliguityX --倾角X -9.99~9.99°\n local ObliguityY = bodydata.ObliguityY --倾角Y -9.99~9.99°\n local WindSpeed = bodydata.WindSpeed --风速 0.00~36.90m/s\n local WindLevel = bodydata.WindLevel --风级 0~12级\n local DoorState = bodydata.DoorState --笼门开关状态 0:内外笼门全关 1:内外笼门全开 2:仅内笼门开 3:仅外笼门开\n\n out.data = {\n peopleCnt = tonumber(PeopleCnt),\n weight = tonumber(Weight),\n speed = tonumber(Speed),\n height = tonumber(Height),\n floor = tonumber(Floor),\n obliguityX = tonumber(ObliguityX),\n obliguityY = tonumber(ObliguityY),\n windSpeed = tonumber(WindSpeed),\n windLevel = tonumber(WindLevel),\n doorState = tonumber(DoorState),\n \t\tisOnline=1 ----有数据 默认在线\n }\n out.time = unixtimestamp(RTime, moduleNo)\n\n log.debug('httpNewSJJ [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n elseif cmd_type == 'AlarmDataElevator' then\n local response_AlarmData_bodyStr = '{"cmd":"AlarmDataElevator","data":{},"status":0}'\n asend_HttpResponse(response_AlarmData_bodyStr)\n elseif cmd_type == 'WorkDataElevator' then\n local response_WorkData_bodyStr = '{"cmd":"WorkDataElevator","data":{},"status":0}'\n asend_HttpResponse(response_WorkData_bodyStr)\n elseif cmd_type == 'GpsData' then\n local response_GpsData_bodyStr = '{"cmd":"GpsData","data":{},"status":0}'\n asend_HttpResponse(response_GpsData_bodyStr)\n elseif cmd_type == 'RuntimeData' then\n local response_GpsData_bodyStr = '{"cmd":"RuntimeData","data":{},"status":0}'\n asend_HttpResponse(response_GpsData_bodyStr)\n \tlocal isOnline=0\n local isDownline=0\n local RTime=''\n local DownlineTime = bodydata.DownlineTime\n local OnlineTime = bodydata.OnlineTime\n log.debug('httpNewSJJ [%s] DownlineTime=%s,OnlineTime=%s', moduleNo, DownlineTime,OnlineTime)\n if DownlineTime~='' then\n isDownline=1\n RTime=DownlineTime\n else\n isOnline=1\n RTime=OnlineTime\n end\n out.data = {\n --isDownline = isDownline,\n isOnline = isOnline\n }\n out.time = unixtimestamp(RTime, moduleNo)\n\n log.debug('httpNewSJJ [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n end\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body = bodyString}\n ctx:asend(ack)\nend\n\ngetTimeNowStr = function()\n --2018-4-28 16:10:12\n local timeNowNum = os.time()\n local timeNowStr = os.date('%Y-%m-%d %H:%M:%S', timeNowNum)\n return timeNowStr\nend\n\nunixtimestamp = function(datestr, moduleNoStr)\n -- 2018-4-28 16:10:12\n --log.debug("fs_tj_lf_station datestr=%s",datestr)\n local datelist = Split(datestr, ' ')\n local date = Split(datelist[1], '-')\n local time = Split(datelist[2], ':')\n local year = tonumber(date[1])\n local month = tonumber(date[2])\n local day = tonumber(date[3])\n local hour = tonumber(time[1])\n local minute = tonumber(time[2])\n local second = tonumber(time[3])\n --log.debug("fs_tj_lf_station year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n log.debug('httpNewSJJ [%s] recordTime=%s', moduleNoStr, recordTime)\n return recordTime\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n INLINE 2018-11-15 13:47:49.511+08 2018-11-27 13:56:05.749+08 2018-11-15 \N
+b1c9853e-85b4-4c3f-8fb0-0a5e6f596fbf Vibrating_1408 \N 天津佳建 1.0 abc9e573-4426-4eee-b858-7d309e181f99 abc9e573-4426-4eee-b858-7d309e181f99 f abc9e573-4426-4eee-b858-7d309e181f99 Lua --//04 项目资料/2017-09/天津佳建科技有限公司-建筑模型应变在线监测系统-项目信息/采集仪通讯协议.docx"\n--require "functions" -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {} //设备信息\nprotocol=> {} //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "tjjj_Vibrating_1408.lua",json.encode(device.moduleId))\nend\n--moduleId= 通道1 通道2 通道3 通道4\n--\n--前3组0 \n--第4组\n--"frequency": \n--"temperature": \nonData=function (hex)\n\t--主动上传式\n\tlog.debug("tjjj_Vibrating_1408:Received=>%s",hex)\n\tlocal out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n log.debug("tjjj_Vibrating_1408:hexToStr=%s",sData)\n\t\tlocal moduleNo = iota.hexToUShort(hex,7,'L')\n\t\tlog.debug("tjjj_Vibrating_1408:moduleNo=%s",moduleNo)\n\n\t\t\n\t\tfor i=0,7,1 do\n\t\t\t local Frequency = iota.hexToUShort(hex, 10 + i*2,'L');\n local Phy\n\t\t\t --循环插入单通道数据表\n\t\t\t \n\t\t\t--获取通道设备deviceId \n local channelNo=i+1\n log.debug("tjjj_Vibrating_1408:模块号=%s,通道号=%s",moduleNo,channelNo)\n local childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\t\t\t--\n local deviceId\n if childDevice~=nil then\n \tdeviceId=childDevice.id\n log.debug("tjjj_Vibrating_1408:(振弦)子设备原形childDevice=%s",json.encode(childDevice))\n \tlog.debug("tjjj_Vibrating_1408:(振弦)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t--if childDevice.device.formula=="P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)" then --公式目前无法获取\n local k = childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\tlocal f0 = childDevice.uplink.capabilities[1].formula.props.Fo\n \t\t \n log.debug("tjjj_Vibrating_1408:(振弦)子设备:m=%s,c=%s:公式参数k=%s,f0=%s",moduleNo,channelNo,k,f0)\n if k ~=nil and f0 ~=nil then\n Phy=k*(Frequency^2-f0^2) --无温度补偿\n \t\tlog.debug("tjjj_Vibrating_1408:模块号=%s,通道号=%s 当前的Frequency是:%s,Phy是%s",moduleNo,channelNo,Frequency,Phy) \n end \n\t\t\t\t--else\n\t\t\t\t--log.debug("tjjj_Vibrating_1408:(振弦)子设备:m=%s,c=%s device.formula为nil"..tostring(moduleNo),tostring(channelNo))\n -- end\n else\n log.debug("tjjj_Vibrating_1408:(振弦)子设备:m=%s,c=%s deviceId为nil",moduleNo,channelNo)\n end\n\t\t\tlocal data1={\n\t\t\t data={\n\t\t\t\t\t\t\tfrequency=Frequency,\n \t\t\tphysicalvalue=Phy,\n\t\t\t\t\t\t\t},\n\t\t\t\tdevice=deviceId,\n \t\t\t\ttype=1 ,\n\t\t\t}\n\t\t\ttable.insert(out.data,data1)\t\t \n\t\tend\t\t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n\tctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n \tif child.uplink.props.module==tostring(moduleNoId) or child.props.moduleId==tostring(moduleNoId) then\n\t\t \t if child.uplink.props.channel == tostring(channelNoId) or child.props.channelId == tostring(channelNoId) then\n log.debug("tjjj_Vibrating_1408:".."DeviceInfo是:"..tostring(child.deviceId))\n \t\t log.debug("tjjj_Vibrating_1408:".."子设备原形child=%s",json.encode(child))\n \t --return child.deviceId\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("tjjj_Vibrating_1408:".."subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function (data)\n\tlog.debug('tjjj_Vibrating_1408:开始校验数据')\n if data == nil or string.len(data)/2 <= 6 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('tjjj_Vibrating_1408:Data is nil or invalid length')\n return false\n end\n\n\tif iota.hexToByte(data,0,'B') ~= 0x7e or iota.hexToByte(data,string.len(data)/2-1,'B')~=0x7e then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n\t\tlog.debug('tjjj_Vibrating_1408:Hex CMD False %s,%s',iota.hexToByte(data,0,'B'),iota.hexToByte(data,string.len(data)/2-1,'B'))\n return false\n end\t\n log.debug('tjjj_Vibrating_1408:校验通过')\n\treturn true\n\t\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend INLINE 2018-01-08 17:57:53.518+08 2018-03-29 15:49:02.876+08 2018-01-06 \N
+2777524a-37b0-433f-9702-3db783dda44a fs_fy_fx \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "FS_FY_FX", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("FS_FY_FX 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x81, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("FS_FY_FX SSend error!")\n end\n ctx:done(result)\nend\n--01 81 C0 40\n--01 81 04 00 00 00 0e 01 D4 EB\n--moduleId=1 \n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local direction = iota.hexToShort(hex,6,'L')\n \n out.data = {\n direction=direction\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('FS_FY_FX 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 10 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x81 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('FS_FY_FX 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2018-07-11 10:38:00.7+08 2018-07-11 10:40:37.259+08 2018-07-11 \N
+b5dd2450-1c6c-4323-a9aa-4e0a4d76e6e1 fs_fy_fs \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "FS_FY_FS", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("FS_FY_FS 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x80, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("FS_FY_FS SSend error!")\n end\n ctx:done(result)\nend\n--01 80 01 80\n--01 80 04 00 c2 01 00 00 6D F3\n--moduleId=1 \n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local speed = iota.hexToShort(hex,4,'L')\n \n out.data = {\n speed=speed/10.0\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('FS_FY_FS 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 10 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x80 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('FS_FY_FS 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2018-07-11 10:40:16.676+08 2018-07-11 10:48:16.147+08 2018-07-11 \N
+63535373-7358-4149-bb70-60bc6e4cb6f9 shjy_temp_ ZL \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_temp", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x16, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("shjy_temp SSend error!")\n end\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local physicalvalue\t= iota.hexToFloat(hex,3,'B')/100\n \n \n out.data = {\n\t\t\tphysicalvalue=tonumber(string.format("%0.3f",physicalvalue))\n }\n log.debug("shjy_temp: 结果=%s",physicalvalue)\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('shjy_temp 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shjy_temp 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2019-07-17 16:29:45.248+08 2019-07-17 16:29:45.248+08 2019-07-17 \N
+58991e17-c7c2-420e-b1a5-525a0e4d62a6 hejia_tempHumi_1144 \N 石家庄和嘉温湿度 1.0 bf10bcff-4fbf-4292-a58d-eb368da87223 bf10bcff-4fbf-4292-a58d-eb368da87223 f bf10bcff-4fbf-4292-a58d-eb368da87223 Lua bit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n\nstart=function()\n log.debug("start %s, ctx=", "nengh_weather_2401.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 1: 模块号 \n buff=iota.appendHexByte(buff, 4, endian) -- 2: 指令: 0x04 = 采集\n buff=iota.appendHexWord(buff, 0, endian) \n buff=iota.appendHexWord(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, endian ,0)\n \n local crcH=string.sub(buff,-2,-1)\n\tlocal crcL=string.sub(buff,-4,-3)\n buff=string.sub(buff,1,12)\n buff=buff..crcH\n buff=buff..crcL \n \n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,500)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n --120404806403110000 moduleId=2\n --"humi": 78.5,"temp": -10\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==18) then \n\n local IDX_Humidity = 5; --湿度\n local IDX_Temp = 3 --温度\n\n\n local humi = iota.hexToShort(hex,IDX_Humidity,'B')/10.00\n local sign = 1\n local temp\n local byTemp0 = iota.hexToByte(hex,IDX_Temp,'B')\n local byTemp1 = iota.hexToByte(hex,IDX_Temp+1,'B')\n if (byTemp0 >= 0x80)then\n sign = -1\n byTemp0=bit:_and(byTemp0 , 0x7f)\n local stemp=''\n stemp=iota.appendHexByte(stemp, byTemp0, 'B')\n stemp=iota.appendHexByte(stemp, byTemp1, 'B')\n temp = iota.hexToShort(stemp,0,'B')/10.00*sign\n else\n temp = iota.hexToShort(hex,IDX_Temp,'B')/10.00\n end \n \n out.data = {\n temp=temp,\n humi=humi\n }\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend INLINE 2017-09-18 18:49:07.125+08 2018-02-28 18:32:12.195+08 2017-09-18 \N
+74e538ac-294f-4037-8cc3-3720305c80c4 jr_inclination_1533 \N 上海集睿倾角仪协议 1.0 63e00acb-9caf-4e8b-9460-a5d7507278b7 63e00acb-9caf-4e8b-9460-a5d7507278b7 f 63e00acb-9caf-4e8b-9460-a5d7507278b7 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\nstart=function()\n log.debug("start %s, ctx=", "jr_inclination_1533.lua",json.encode(device))\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n\tlocal module = iota.hexToByte(PadLeft(2,0,device.props.moduleId) ,0,'B')\n\t\n if module > 255 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) -- 1: 指令: 0x03 = 采集\n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0x06, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) --CRC\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,500)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\n end\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n --01030c000060403333a3c19a99b242ce2b \n local angleX = iota.hexToFloat(hex,3,'L')\n local angleY = iota.hexToFloat(hex,7,'L')\n\t\tlog.debug("angleX = %d",angleX)\n out.data = {\n angleX=angleX,\n angleY = angleY\n }\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 17 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\nPadLeft=function(cnt,num,hex)\n local len = string.len(tostring(hex))\n local offset = cnt -tonumber(len)\n if offset == 0 then \n return hex\n else\n for i = 1,offset do \n hex = tostring(num)..tostring(hex)\n end\n end\n return hex\nend\n INLINE 2017-09-20 16:31:19.777+08 2018-02-28 18:32:12.196+08 2017-09-20 \N
+3b8b71ea-6f80-40c6-8188-e5b230c4344b sonbest_smoke_1 \N 上海搜博实业有限公司 1.0 095856ee-a9d4-4d58-9ecc-8e832e82ab8b 095856ee-a9d4-4d58-9ecc-8e832e82ab8b f 095856ee-a9d4-4d58-9ecc-8e832e82ab8b Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "sonbest_smoke_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("sonbest_smoke_1 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("sonbest_smoke_1 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 1, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n --::010300000001 \n -- print("ssend=", ctx:ssend(buff,500) )\n log.debug("send %s, ctx=%s", "sonbest_smoke_1.lua",buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n log.debug("recv %s, ctx=%s", "sonbest_smoke_1.lua",hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==14) then\n \n --01030203750000 \n --"smoke": 5000\n local smoke =iota.hexToShort(hex,3,'B');\n \n out.data = {\n \n smoke=smoke,\n \n };\n else\n local message = "Invalid Msg, len is not rigth"\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("recv %s, ctx=%s", "supmea_pressure_1.lua",json.encode(out))\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2018-01-03 16:40:22.938+08 2018-03-30 08:22:00.801+08 2018-01-03 \N
+2a7d59b8-3a15-40f5-ad27-2f289da1dfa5 mic_inclination_1529 \N 无锡迈科倾角仪 1.0 24e71772-7488-412d-9acd-26a89f47937c 24e71772-7488-412d-9acd-26a89f47937c f 24e71772-7488-412d-9acd-26a89f47937c Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \nstart=function()\n log.debug("start %s, ctx=", "mic_inclination_1529.lua",json.encode(device))\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n\tlocal module = iota.hexToByte(PadLeft(2,0,device.props.moduleId) ,0,'B')\n\t\n if module > 255 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255'}\n ctx:done(json.encode(errout))\n else\n \n buff=iota.appendHexByte(buff, 0x68, endian) -- 1: 指令: 0x03 = 采集\n buff=iota.appendHexByte(buff, 4, endian)\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 4, endian)\n buff=buff..PadLeft(2,0,tostring(checkPlusSum(buff,1,4))) --CheckPlusSum\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\n end\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n --680D0084002010100525000000fb\n --moduleId=0\n --"angleX": 20.1,\n\t\t--"angleY": -5.25\n local xFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,4,'B'),0xF0),4)\n local xSecondNum = bit:_and(iota.hexToByte(hex,4,'B'),0x0F) * 100\n local xThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,5,'B'),0xF0),4) * 10 + bit:_and(iota.hexToByte(hex,5,'B'),0x0F)\n local xForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,6,'B'),0xF0),4) * 0.1 + bit:_and(iota.hexToByte(hex,6,'B'),0x0F) * 0.01\n\n local yFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,7,'B'),0xF0),4)\n local ySecondNum = bit:_and(iota.hexToByte(hex,7,'B'),0x0F) * 100\n local yThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,8,'B'),0xF0),4) * 10 + bit:_and(iota.hexToByte(hex,8,'B'),0x0F)\n local yForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,9,'B'),0xF0),4) * 0.1 + bit:_and(iota.hexToByte(hex,9,'B'),0x0F) * 0.01\n \n local angleX = xSecondNum + xThirdNum + xForthNum\n local angleY = ySecondNum + yThirdNum + yForthNum\n\n if xFirst == 0x01 then\n angleX = -angleX\n end\n\n if yFirst == 0x01 then\n angleY = -angleY\n end\n out.data = {\n angleX=angleX,\n angleY = angleY,\n }\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 14 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x68 or iota.hexToByte(data,3,'B') ~= 0x84 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,2,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\nPadLeft=function(cnt,num,hex)\n local len = string.len(tostring(hex))\n local offset = cnt -tonumber(len)\n if offset == 0 then \n return hex\n else\n for i = 1,offset do \n hex = tostring(num)..tostring(hex)\n end\n end\n return hex\nend\n\ncheckPlusSum=function(data,startindex,endindex)\n local sum = 0\n for i=startindex,endindex do\n if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)))) % 0xffff\n end\n end \n sum = bit:_and(sum ,0xff)\n return sum\nend INLINE 2017-09-20 16:17:19.096+08 2018-02-28 18:32:12.198+08 2017-09-20 \N
+82e895d6-4c9b-4649-b363-6cd82e5c8414 111 \N 11 632bb218-8da7-4d91-b83d-70879c562d74 632bb218-8da7-4d91-b83d-70879c562d74 f 632bb218-8da7-4d91-b83d-70879c562d74 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "lndy_flow_1970.lua",json.encode(ctx.device))\n ctx:done('hello')\nend\n--01034c614e00bc0b3b000000000000614e00bc0c140000\nunmarshall=function(hex,moduleNoStr)\n log.debug("lndy_flow_1970 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local transientFlow =iota.hexToUShort(hex,3,'B')+iota.hexToUShort(hex,5,'B')*65536\n\t\tlocal totalFlow =iota.hexToUShort(hex,15,'B')+iota.hexToUShort(hex,17,'B')*65536\n\t\t\n log.debug("lndy_flow_1970 m=%s,temperature=%s ",moduleNoStr,temperature)\n out.data = { \n transientFlow=transientFlow, --瞬时流量 L/h\n\t\t\ttotalFlow=totalFlow/100 --累计流量 m3\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("lndy_flow_1970 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 23 then\n errormsg = string.format('数据长度无效=%s',string.len(data)/2)\n errcode = 1002\n return false\n end\n \n local dataModule=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataModule) then\t\n errormsg = string.format('模块号无效=%s[%s]',dataModule,moduleCheck)\n errcode = 1003\n return false\n end\n return true\n--crc\nend INLINE 2018-12-25 18:51:23.25+08 2018-12-25 19:05:27.087+08 2018-12-25 \N
+8ba409b2-a129-4c05-8f32-a1445cfec3b4 nengh_FS_1 \N 风速风向 1.0 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b f ad0cd544-aed4-4670-9d17-f3e717a9a59b Lua start=function()\n log.debug("start %s, moduleId=%s", "nengh_FS_1.lua",device.uplink.props.module or "null")\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.uplink.props.module, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0x51, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0)\n\n log.debug("nengh_FS_1 ssend= %s", buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n log.debug("nengh_FS_1: Unmarshall data is %s", hex)\n --01 03 04 00 01 00 01 00 00 \n -- \n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==18) then\n \n local direction = iota.hexToShort(hex,3,'B')\n local speed = iota.hexToShort(hex,5,'B')\n\n out.data = {\n speed=speed,\n direction=direction, \n }\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n\n\n \n\n\n \n\n\n INLINE 2018-05-09 13:52:47.655+08 2018-05-09 16:19:03.901+08 2018-05-09 \N
+591019a9-bb7b-4e46-88f3-7da42a31edea http \N 1 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f f16833ab-a4a4-45f5-9b39-ad2c66e488f6 Lua start=function()\n local req={\n type="http",\n url="https://www.baidu.com/",\n method="GET",\n }\n local ok,resp=ctx:ssend(req,1000)\n log.debug("res.header=%s", json.encode(resp.header))\n \n out={\n value=resp.header,\n result={},\n }\n ctx:done(json.encode(out)) \nend INLINE 2018-07-27 17:04:35.055+08 2018-07-27 17:08:28.736+08 2018-07-27 \N
+97a8cbcc-8fc9-4992-a883-d026597b9259 mk_inclination_3 \N 三轴倾角 1.0 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca f c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, ctx=%s", "mk_inclination_3.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--aa0407030d660eb70000ad58\n--"xDegree": 3.43,\n--"yDegree": 3.767,\n--"zDegree": 0\n local out={\n data ={},\n result = {}\n }\n log.debug("recv %s, ctx=%s", "mk_inclination_3.lua",data)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local moduleNo = iota.hexToByte(hex,1,'B')\n \n local modulenumber= tonumber(device.props.moduleId)\n local valCmd = iota.hexToByte(hex,3,'B') \n if valCmd == 0x03 and moduleNo==modulenumber then\n \n local xDegree = iota.hexToShort(hex,4,'B') /1000.0\n local yDegree = iota.hexToShort(hex,6,'B') /1000.0\n local zDegree = iota.hexToShort(hex,8,'B') /1000.0\n out.data = { \n xDegree = xDegree,\n yDegree = yDegree,\n zDegree = zDegree\n }\n\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_inclination_3.lua",json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = 1001, msg = "Is not validated"}\n end\n else\n out.result = {code = errcode, msg = errormsg}\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_inclination_3.lua",json.encode(out))\n ctx:notify(resultData)\n end\n \nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n --iota.checkPlusSum16\n return true\n--crc\nend\n\n\n\n INLINE 2018-01-08 11:14:31.033+08 2018-02-28 18:32:12.201+08 2018-01-08 \N
+6da213f0-1d9e-48bd-ab58-364e65a0ecd5 nengh_CO2_8302 \N 1.0 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b f ad0cd544-aed4-4670-9d17-f3e717a9a59b Lua \n--D:\\SVN\\201811项目\\智慧农业待接入设备\\NH51Y土壤盐分电导率一体化传感器说明书V1.1-170510.pdf\nstart=function()\n local endian = 'B'\n local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("nengh_CO2 设备模块通道 接口获取 m=%s ",moduleNo)\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("nengh_CO2,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '超时'} \n\t log.debug("nengh_CO2 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("nengh_CO2 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local concentration =iota.hexToUShort(hex,3,'B')\n \n out.data = { \n concentration=concentration \n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("nengh_CO2 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2018-11-20 14:37:22.879+08 2018-11-22 17:11:30.83+08 2018-11-20 \N
+c14df1bd-60ff-48b0-9820-bd146284b57c sser_tempHumi_1106 \N 1.0 42ed9887-912b-4ce0-b062-3f3e0c22fa74 42ed9887-912b-4ce0-b062-3f3e0c22fa74 f 42ed9887-912b-4ce0-b062-3f3e0c22fa74 Lua --//PMO/02 产品协议/SavoirCloud/01 协议/3月第3周/北京赛斯尔自控工程有限公司-温湿度传感器/TH802通讯协议-北京赛斯尔自控工程有限公司.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "sser_tempHumi_1106", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("sser_tempHumi_1106 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("sser_tempHumi_1106 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n\t\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("SSend error!")\n end\n ctx:done(result)\nend\n\n--1204040d660019fa3c\n--moduleId=18 \n--"humidity": 2.5,\n--"temp": 343\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local temp = iota.hexToShort(hex,3,'B')/10.0\n local humidity = iota.hexToShort(hex,5,'B')/10.0\n \n out.data = {\n\t\t\ttemp=temp,\n\t\t\thumidity=humidity\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('sser_tempHumi_1106 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x04 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleStrCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('sser_tempHumi_1106 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2017-12-12 14:01:34.757+08 2018-03-30 10:25:38.974+08 2017-12-12 \N
+afcdc4de-70b6-486d-a34f-fc255b4bf048 gdyjs_lvdt_1 \N 北京光电研究所 1.0 a8a291bf-9873-4ca2-b876-bf54a06f38dd a8a291bf-9873-4ca2-b876-bf54a06f38dd f a8a291bf-9873-4ca2-b876-bf54a06f38dd Lua bit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\nstart=function()\n log.debug("start %s, ctx=", "gdyjs_lvdt_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff='' \n buff=iota.appendHexByte(buff, 0xaa, endian) \n buff=iota.appendHexByte(buff, 0x75, endian) \n buff=iota.appendHexByte(buff, 0x10, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x0e, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("gdyjs_lvdt_1 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("gdyjs_lvdt_1 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n buff=buff..moduleNo \n local time=string.sub(os.date("%Y%m%d%H%M%S", os.time()),3) \n buff=buff..time\n local xor = CheckXor(0,buff)\n buff=iota.appendHexByte(buff, xor, endian) \n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,20000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n--557A1000350028180011226688AA17113011343800E600050020000000006D6D000000000000000000000000000000000000002020202020202020A5\n--moduleId=255 humidity": 71.4,"pressure": 100.05,"temperature": 25.73\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==120) then\n \n local temperature=iota.hexToShort(hex,20,'B')/10; \n local strain=iota.hexToShort(hex,22,'B')/10; \n local displacement =iota.hexToShort(hex,24,'B')/10; \n out.data = {\n strain=strain,\n displacement=displacement\n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\nCheckXor=function(start,buff)\n local lcr = 0\n for i = start, string.len(buff)/2-1 do\n lcr = bit:_xor(lcr , tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n end \n return lcr\nend \n INLINE 2017-11-30 10:37:45.689+08 2018-03-30 14:12:44.404+08 2017-11-28 \N
+0ba29e5a-b0e0-403e-b562-00f940b9be96 cy_temp_1162 \N 1.0 5f62fd39-0b72-492e-99be-308c935c1b64 5f62fd39-0b72-492e-99be-308c935c1b64 f 5f62fd39-0b72-492e-99be-308c935c1b64 Lua --//04 项目资料/2017-05/武汉大桥局青山桥/LTM8000用户手册_fin_4.doc\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift\n\n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "cy_temp_1162", device.props.moduleId or "[nil]")\n\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n\tlocal moduleNo=device.props.moduleId\n\t\t \n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo=device.uplink.props.module\n\t\tlog.debug("cy_temp_1162: 接口获取 m=%s ",moduleNo)\n \n end\n\t\n if isModuleIdInvalid(moduleNo) then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleIdLength ~=6'}\n ctx:done(json.encode(errout))\n else\n\t--(系统模块号对应实际采集卡的通道号,系统通道号对应 采集卡通道号下面的传感器号)\n\t strCardNo=string.sub(moduleNo,2,3)\n log.debug("cy_temp_1162 strCardNo是"..strCardNo)\n\t\t\n\t\t \n\t\t\n\t\tstrModuleNo=string.sub(moduleNo,5,6) \n buff=iota.appendHexByte(buff, 0x23, endian) \n buff=buff..toHexStr(string.sub(strCardNo,1,1))\n\t\tbuff=buff..toHexStr(string.sub(strCardNo,2,2))\n buff=buff..toHexStr(string.sub(strModuleNo,2,2)) \t\t\n buff=iota.appendHexByte(buff, 0x0d, endian) \n\n -- print("ssend=", ctx:ssend(buff,500) )\n \tSleep(3)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n\t\t\tctx:done(result)\n\t\telse\n\t\t\tlog.debug(" cy_temp_1162 m=%s,c=%s receiced is not ok ,resp=%s",device.props.moduleId,device.props.channel,resp)\n end\n \n end\nend\n--3e30310003eb010510d3010d10c70109100d82\n--moduleId=K01C01\n--channelId=3\n--"temperature":28.4375,\n\n--判断模块号格式\nisModuleIdInvalid=function(strModuleId)\n if string.len(strModuleId) ==6 then\n if string.sub(strModuleId,1,1)=='K' then\n\t if string.sub(strModuleId,4,4)=='C' then\n\t\t --模块号格式K01C01\n\t\t local n = tonumber(string.sub(strModuleId,2,3)..string.sub(strModuleId,5,6));\n\t\t\t if n then\n\t\t\t return false;\n\t\t\t end \n\t\t end\t \n\t end\t\n end\n return true\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n\tlocal data=hex;\n\tlog.debug("cy_temp_1162 m=%s,c=%s data=%s string.len(data)/2-2-1=%s",device.props.moduleId,device.props.channel,data,string.len(data)/2-2-1)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local channelNo=device.props.channel\n\t local countIds=iota.hexToShort(hex,3,'B');\n\t\t--存储每个通道下的返回的多个传感器数据\n\t resDataList = {}\n\t\t\n\t\tfor i=5,string.len(data)/2-2-1,4 do\n -- log.debug("i="..i)\n local tempBytes={}\n\t\t\ttempBytes[0]=string.sub(data,i*2+1,i*2+2)\n\t\t\ttempBytes[1]=string.sub(data,i*2+3,i*2+4)\n if tempBytes[0]=="ff" and tempBytes[1]=="ff" then\n\t\t\t\tout.result = {code=1001,msg="data is invalid"}\n\t\t\t return json.encode(out)\n\t\t\tend\n --log.debug("cy_temp_1162 tempBytes[0]="..tempBytes[0])\n --log.debug("cy_temp_1162 tempBytes[1]="..tempBytes[1])\n --log.debug("cy_temp_1162 tempBytes[1]类型"..type(tempBytes[1]))\n \n --温度为 +\n -- log.debug("bit:_rshift(tonumber(tempBytes[1]),3)是"..bit:_rshift(tonumber(tempBytes[1]),3))\n\t\t\t\tif bit:_and(0xFF,bit:_rshift(tonumber(tempBytes[1],16),3))==0x00 then\n\t\t\t\t local tempBytes1=tonumber("21",16);\n\t\t\t\t -- log.debug('cy_temp_1162 tempBytes1是'..tempBytes1)\n\t\t\t\t local temp=(bit:_and(tonumber(tempBytes[1],16),0x07)*256+tonumber(tempBytes[0],16))*0.0625;\n\t\t\t\t-- log.debug("cy_temp_1162 temp+是"..temp)\n\t\t\t\t table.insert(resDataList,temp)\n\t\t\t else\n ----//温度为 -\n\t\t\t\t\tlocal temporary=tonumber(tempBytes[1],16)\n\t\t\t\t\tlog.debug("温度为 - tempByte[1]=%s ",tostring(temporary))\n\t\t\t\t if bit:_and(0xFF,bit:_rshift(tonumber(temporary,16),3))==0x1f then\n\t\t\t\t\t local temp=-1*((256 - temporary)*256-temporary)*0.0625;\n\t\t\t\t\t table.insert(resDataList,temp)\n\t\t\t\t -- log.debug("cy_temp_1162 temp-是"..temp)\n\t\t\t\t end\n\t\t\t\tend \n end \n\t\tlocal Temperature = resDataList[channelNo+0];--//取对应的传感器值 默认插入表下标1开始\n\t log.debug("cy_temp_1162 m=%s,c=%s temperature=%s resDataList=%s",device.props.moduleId,device.props.channelId,Temperature,json.encode(resDataList)) \n\t\t if Temperature~=nil then\n\t\t\tout.data = {\n\t\t\t\ttemperature = Temperature, \n\t\t\t}\n\t\t end\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n\n local countId=iota.hexToShort(data,3,'B');\n\tif string.len(data)/2 ~=countId*4+5+2 or string.len(data)/2 <=7 then\n\t errormsg = 'data length is wrong'\n errcode = 1001\n return false\n end\n\t\n if string.sub(data,1,2) ~= '3e' or string.sub(data,-4,-3) ~= '0d' then\n errormsg = 'Data is Invalid'\n errcode = 1001\n return false\n end\n\n return true\nend\n\n\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串ascii->字符16D\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n\nSleep=function(n)\n local t0 = os.clock()\n while os.clock() - t0 <= n do end\nend INLINE 2017-11-30 18:19:51.764+08 2018-06-05 15:40:22.22+08 2017-11-30 \N
+65dfe3cd-075d-490f-a2b5-d5c39f4cbc05 httpxieyi \N 1.0 36b70d6d-c974-4742-9257-b555027d36cd 36b70d6d-c974-4742-9257-b555027d36cd f 36b70d6d-c974-4742-9257-b555027d36cd Lua \nstart=function()\n log.debug("JCLQ2018 start moudleid=%s", device.props.pointId or "nil")\n --local apiname="findmm.record.queryByPointId"\n\tlocal req = {\n type= "http",\n url='https://api.yespowering.cn/dev/data/?box_id=35E81PV005', --device.uplink.props.url --.."%s/data?startTime=%s&endTime=%s", \n \tmethod="get",\n \tcontent="text/json",\n header={}\n }\n --local param={\n -- box_id= '35E81PV005',\n -- }\n req.header["agent"] = '0'\n\treq.header["language"] = 'zh'\n\treq.header["brandid"] = '38'\n\treq.header["token"] = 'E084B9E84D5220AB5E2C292CB153F596'\n \n \n log.debug("JCLQ2018: url=%s",req.url)\n \n local ok,ack=ctx:ssend(req,4000)\n\n if ack==nil then\n log.debug("JCLQ2018: ok=%s",ok)\n else\n log.debug("JCLQ2018: ok=%s,ack=%s",ack)\n end\n\n local out={\n type = 2,\n data ={},\n result = {}\n }\n if not ok or ack==nil then\n out.result={\n code=1002,\n msg="timeout",\n }\n else --OK\n if ack.code==200 and ack.body ~="" then -- http应答\n data=json.decode(ack.body) -- 有数据\n log.debug("ack=%s",ack.body)\n \n \n \n local data1 = {\n data={\n distance=0 \n },\n device=device.id,\n type=1 \n }; \n table.insert(out.data,data1)\n \n log.debug("JCLQ2018: moudleid=%s data:%s",device.props.pointId,json.encode(out))\n ctx:done(json.encode(out))\n \n else\n log.debug("JCLQ2018: request data error:%s body:%s",ack.code,ack.body) \n end\n end\nend\n \n\n INLINE 2018-06-13 16:58:34.542+08 2018-06-14 13:58:50.081+08 2018-06-13 \N
+10e166da-8bd4-414c-a941-312073ae8ff8 fs_inclination_2000 \N 安心云 \n超高精度双轴倾角传感器 AIS 2000 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//20200901 双轴倾角传感器.pdf\nstart=function()\n \tlocal endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 3, endian) -- 1: 功能码\n buff=iota.appendHexWord(buff, 4 ,endian) -- 2: 数据地址\n buff=iota.appendHexWord(buff, 6 ,endian) --2:数据长度\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n log.debug(string.format("fs_trwsd_1166 out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n ctx:done(result)\nend\n\n\n--02030400ef0087b8a4\n--"X": 13.5,\n--"Y": 23.9\n\n--01 03 0C 00 00 60 40 33 33 A3 C1 9A 99 B2 42 CE 2B\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \tlocal Xtemp= iota.hexToFloat(hex,3,'L')\n local Ytemp = iota.hexToFloat(hex,7,'L')\n \n out.data = {\n X = Xtemp,\n Y = Ytemp\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('fs_trwsd_1166 开始校验数据 %s',data)\n if data == nil or string.len(data)/2~=17 then\n errormsg = string.gormat('Data is nil or invalid length=[%s]',string.len(data))\n errcode = 1002\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleNo_check) ~= tonumber(string.sub(data,1,2)) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('fs_trwsd_1166 数据校验通过')\n return true\n--crc\nend\n\nonData=function()\nend\n INLINE 2020-09-02 17:38:34.902+08 2020-09-02 17:40:08.336+08 2020-09-02 \N
+9f43db1a-9665-4422-83dc-f17f9918a140 simple_sensor \N 0.3 6aecaca4-ae30-42e7-9963-28713a74a311 6aecaca4-ae30-42e7-9963-28713a74a311 f 6aecaca4-ae30-42e7-9963-28713a74a311 Lua temp=1\nhumi=12 INLINE 2017-12-20 15:35:56.749+08 2017-12-20 15:35:56.749+08 2017-12-20 \N
+dd84941a-2077-439f-a8c4-9696132b7664 Meacon_oxy_dissolved \N 溶解氧在线分析仪协议 1.0 849e9b08-1181-436a-a106-cc6b0d3ffdc5 849e9b08-1181-436a-a106-cc6b0d3ffdc5 f 849e9b08-1181-436a-a106-cc6b0d3ffdc5 Lua \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "Meacon_oxy_dissolved", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t--全局\n out={\n data ={},\n result = {}\n }\t\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("Meacon_oxy_dissolved 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n\t\tbuff=iota.appendHexByte(buff, 0x00, endian) \n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x01, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("Meacon_oxy_dissolved SSend error!")\n end\n\t\tif out.data.oxygen~=nil then\n\t\t\tlog.debug('Meacon_oxy_dissolved:'..'溶解氧解析正常'..tostring(out.data.pressure))\n\t\t\tlocal bufft=''\n\t\t\tbufft=iota.appendHexByte(bufft, moduleNo, endian) -- 模块号\n\t\t\tbufft=iota.appendHexByte(bufft, 0x03, endian) \n\t\t\tbufft=iota.appendHexByte(bufft, 0x00, endian) \n\t\t\tbufft=iota.appendHexByte(bufft, 0x01, endian)\n\t\t\tbufft=iota.appendHexByte(bufft, 0x00, endian)\n\t\t\tbufft=iota.appendHexByte(bufft, 0x01, endian)\n\t\t\tbufft=iota.appendHexCrc(bufft, 'L' ,0) \n\t\t\tok,resp=ctx:ssend(bufft,15000)\n\t\t\tif ok then\n\t\t\t log.debug('Meacon_oxy_dissolved:'..'温度采集成功 开始解析温度:'..resp)\n\t\t\t\tresult_temp =tempunmarshall(resp,moduleNo) \n\t\t\t else\n\t\t\t\tlog.debug('Meacon_oxy_dissolved:'..'温度采集失败')\n\t\t\tend\n\t\tend\n\t\tresult = json.encode(out)\n ctx:done(result)\nend\n--00 03 00 00 00 01 85 DB\n--00 03 02 00 00 85 84\n--moduleId=0\n--00 03 00 01 00 01 D4 1B\n--00 03 02 00 FA 05 C7\n\n\n\nunmarshall=function(hex,moduleStr)\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local oxygen = iota.hexToShort(hex,3,'B')\n \n out.data = {\n oxygen=oxygen/100.0,\n\t\t\ttemp=0\n\t\t\t}\n else\n out.result = {code=errcode,msg=errormsg} \n end\n -- return json.encode(out)\nend\n\n \ntempunmarshall=function(hex,moduleNo_t)\n local ErrorCode = IsValid(hex,moduleNo_t)\n if ErrorCode then\n\t\n local temp = iota.hexToShort(hex,3,'B')\n \n out.data.temp = temp/10.0\n\n else\n out.result = {code=errcode,msg=errormsg}\n end\n -- return json.encode(out)\nend\n\n\nIsValid=function(data,moduleStrCheck)\n log.debug('Meacon_oxy_dissolved 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('Meacon_oxy_dissolved 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2018-10-08 11:13:08.25+08 2018-10-11 09:10:38.006+08 2018-10-08 \N
+410e53eb-787b-4897-8eb9-5c48e5268fbe xy_laser_9510 \N 深圳市七七星宇科技有限公司激光测距仪 1.0 756e574c-b410-4312-99d3-13d78e3cde5a 756e574c-b410-4312-99d3-13d78e3cde5a f 756e574c-b410-4312-99d3-13d78e3cde5a Lua \nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\nstart=function()\n log.debug("start %s, ctx=", "xy_laser_9510.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x0f, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,500)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n end\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local data_1 = iota.hexToByte(hex,3,'B')\n local data_2 = iota.hexToByte(hex,4,'B')\n local data_3 = iota.hexToByte(hex,5,'B')\n local data_4 = iota.hexToByte(hex,6,'B')\n local len = bit:_or(bit:_or(bit:_or(bit:_lshift(data_1,24) , bit:_lshift(data_2,16)) , bit:_lshift(data_3,8)) , data_4) / 1000.00\n out.data = {\n length = len\n }\n\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = 'CMD is not right'\n errcode = 1001\n \treturn false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2017-09-13 09:49:27.166+08 2018-02-28 18:32:12.195+08 2017-09-13 \N
+0e078d6f-ab96-4c79-ba40-2b3fb5e96e72 zxy_wind_9202 \N 1.0 d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe f d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe Lua \nstart=function()\n log.debug("load script %s, moduleId=%s", "zxy_wind_9202.lua", device.moduleId or "[nil]")\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("zxy_wind_9202 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("zxy_wind_9202 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n \n \n \n\tif tonumber(moduleNo) > 99 or tonumber(moduleNo) <=0 then\n local errout={\n data ={},\n result = {code = 1004,msg = 'module is Invalid, >99 or <=0'}\n }\n\n local errresult = json.encode(errout)\n ctx:done(errresult)\n end\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0x23, endian) \n\t\n buff=buff..toHexStr(PadLeft(2,0,moduleNo))\n\n buff=iota.appendHexByte(buff, 0x72, endian) \n buff=iota.appendHexByte(buff, 0x0D, endian) \n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n end\n ctx:done(result)\nend\n--3e312e352c36302e320d0a\n--moduleId=2\n--"windDirection": "60.2",\n--"windSpeed": "1.5"\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n local data = string.sub(hex,3,-5)\n local str = toStrHex(data)\n local offset = string.find(str,',')\n\n local speed = string.sub(str,1,offset-1)\n local direction = string.sub(str,offset+1,-1)\n \n out.data = {\n windSpeed=speed,\n windDirection = direction\n };\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data,moduleStrCheck)\n if data == nil or iota.hexToByte(data,0,'B') ~= 0x3E then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n return true\nend\n\n\nPadLeft=function(cnt,num,hex)\n local len = string.len(tostring(hex))\n local offset = cnt -tonumber(len)\n if offset == 0 then \n return hex\n else\n for i = 1,offset do \n hex = tostring(num)..tostring(hex)\n end\n end\n return hex\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend INLINE 2017-12-12 11:30:10.134+08 2018-03-30 10:31:32.836+08 2017-12-12 \N
+b1bbe56d-c98c-4e51-8fc1-398fa057bf4a jm_Inclinometer_1 \N 测斜 1.0 d5b4f900-6aac-40dc-8c6d-d38bc27004d1 d5b4f900-6aac-40dc-8c6d-d38bc27004d1 f d5b4f900-6aac-40dc-8c6d-d38bc27004d1 Lua start=function()\n log.debug("start %s, ctx=%s", "jm_Inclinometer_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff='#+'\n --buff=iota.appendHexByte(buff, 0x23, endian) \n --buff=iota.appendHexByte(buff, 0x2b, endian)\n buff= buff..device.uplink.props.module \n local buff1=StrToHex(buff)\n log.debug("jm_Inclinometer_1: send=%s ",buff1)\n ok,resp=ctx:ssend(buff1,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --24 3E 39 37 3D 3E 39 35 3E \n --"anglex": 10.417817400353972,\n --"angley": -1.0070251712408496\n log.debug("jm_Inclinometer_1: get=%s ",hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==18) then\n \n local data1 =(tonumber(string.sub(hex,3,4),16)-48)*16+(tonumber(string.sub(hex,5,6),16)-48)+(tonumber(string.sub(hex,7,8),16)-48)*16*16*16+(tonumber(string.sub(hex,9,10),16)-48)*16*16\n local data2 =(tonumber(string.sub(hex,11,12),16)-48)*16+(tonumber(string.sub(hex,13,14),16)-48)+(tonumber(string.sub(hex,15,16),16)-48)*16*16*16+(tonumber(string.sub(hex,17,18),16)-48)*16*16\n local x1=(data2/10000-2.5)/4\n local y1=(data1/10000-2.5)/4\n local x= math.deg(math.asin(x1))\n local y= math.deg(math.asin(y1))\n out.data = {\n anglex=x,\n angley=y\n }\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n\n -- 字符串 -> Hex\n StrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2018-05-09 10:22:53.143+08 2018-05-10 09:01:13.708+08 2018-05-09 \N
+3675fa64-2747-4043-98d6-fdee3bfd7e89 9603 \N 111 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f f16833ab-a4a4-45f5-9b39-ad2c66e488f6 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n 函数:\n ssend: 同步发送数据到设备\n asend: 异步发送数据到设备\n notify: 通知平台解析完成的数据\n done: 采集完成, 结束当前采集过程.\n]] \nstart=function()\n log.debug("LUA:start %s", "fs_9603.lua")\n log.debug("floatToHex:%s", iota.floatToHex(-100.2))\nend\n\n-- 收到数据\nonData=function(data,pindex)\n log.debug("pindex:%s",pindex)\n print("LUA:onData",data) \n local len=string.len(data)\n local r=nil\n if len == 102 then\n r=parseNoise(data)\n elseif len==50 then\n r=parseWakeup(data)\n else\n r={node = string.sub(data,1,4)}\n end\n result={}\n\tresult.type = 1\n result.data = r\n local msg = json.encode(result)\n log.debug("Parsed:%s",msg)\n ctx:notify(msg)\nend\n\nparseNoise=function(data)\n -- 51长度: 头 25, 数据24, 尾2\n local node = string.sub(data,1,4)\n local Lmax = iota.hexToFloat(data,25+9,'B');\n local Lmin = iota.hexToFloat(data,25+13,'B');\n local Laeq = iota.hexToFloat(data,25+17,'B');\n return {node=node, max=Lmax,min=Lmin,Laeq=Laeq}\nend\n\nparseWakeup=function(data)\n local node = string.sub(data,1,4)\n local power = iota.hexToByte(data,10,'B');\n local join = iota.hexToShort(data,17,'B');\n return {node=node,power=power,join=join}\nend INLINE 2017-09-26 10:28:41.443+08 2019-03-08 09:20:33.969+08 2017-09-26 \N
+17081615-1340-4cae-9924-f101767e7d36 shutai_mop \N 1.0 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 f 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 Lua onData=function(hex)\n end\n\nstart = function()\n \t--log.debug("shutaimop device=%s", json.encode(device))\n\tlocal cmd = capability.param\n\tlog.debug("shutaimop linkcnt=%s",cmd)\n\tlocal req = StrtoHex(cmd)\n\n log.debug("shutaimop request=%s", req)\n local ok, ack = ctx:ssend(req, 20000)\n out = {\n result = nil,\n type = 1,\n data = {\n ack = HextoStr(ack)\n }\n }\n\tlog.debug("shutaimop responde=%s", HextoStr(ack))\n\n ctx:done(json.encode(out))\nend\n\n\n--字符串ascii->字符\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n\t--判断输入类型\n\tif (type(hex)~="string") then\n\t\treturn nil,"hex2str invalid input type"\n\tend\n\t--拼接字符串\n\tlocal index=1\n\tlocal ret=""\n\tfor index=1,hex:len() do\n \tlocal str = string.format("%02X",hex:sub(index):byte())\n \tif str == '0A' or str =='0a' then\n \t\tstr = '0d0a' \t\t\n \tend\t\n \tif index == hex:len() then\n \t\tstr = str..'0d0a'\n \tend\n \tret=ret..str\n\tend\n\treturn ret\nend INLINE 2018-11-20 11:22:42.283+08 2019-04-16 11:19:17.981+08 2018-11-20 \N
+f9c35eff-dce1-418c-9286-093f797155d2 shutai_file_transfer \N 1.0 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 f 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 Lua start=function()\n log.debug("shutai_file_transfer : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n if data ~=nil then\n if data.type == "idau/file" then \n if data.ext==".d" or data.ext==".dx" then\n log.debug("shutai_file_transfer : recvd content = %s",data.payload)\n ParseFileD(data.payload)\n --else\n --log.error("shutai_file_transfer : unsupported file type: %s", data.ext)\n end\n if data.ext==".dat" then\n --log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n ParseFileDat(data.payload)\n --else\n --log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n end\n else\n log.error("shutai_file_transfer : content type is not file, error recvd type is %s", data.type)\n end\n else\n log.error("shutai_file_transfer : recvd content is nil")\n end\nend\n\nfunction ParseFileDat(dathex)\n log.debug("shutai_file_transfer : dat content =%s", dathex)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n log.debug("shutai_file_transfer deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n local floatcount = (string.len(dathex)/2-40)/4\n log.debug("shutai_file_transfer begin parse")\n local vols = {}\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n end\n log.debug("shutai_file_transfer finish parse")\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n sampleFreq=samplefreq,\n filterFreq=filterfreq,\n gainAmplifier=gainamplifier,\n triggerType=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) --+00:00 \n }\n table.insert(out.data,rst)\n log.debug("shutai_file_transfer cloudvibrate=%s",json.encode(out))\n ctx:notify(json.encode(out))\n else\n log.debug("shutai_file_transfer not found device module=%s channel=%s",deviceId,channel)\n end\nend\n\nfunction ParseFileD(content)\n local out={\n data ={},\n result = {},\n type=2\n }\n log.debug("shutai_file_transfer : content =%s", content)\n local jsons=Split(content,'\\r')\n for k,v in pairs(jsons) do\n if v~=nil and v~='' then\n local jsondata = json.decode(v) \n if jsondata~=nil and jsondata ~='' then\n local childDevice=getDeviceInfo(jsondata.M,jsondata.C) --数据文件中获取 \n if childDevice ~=nil then\n \t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='ZX' then\n\t\t\t\t\t\tlocal freq=tonumber(jsondata.RV[1])\n\t\t\t\t\t\tlocal phy\n\t\t\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == "ecae192b-0460-431c-bb0e-fb64358a6ac0" then --振弦公式 不带温度 metaid\n\t\t\t\t\t\t\tlocal k = childDevice.uplink.capabilities[1].formula.props.K or nil\n\t\t\t\t\t\t\t--local kt = childDevice.uplink.capabilities[1].formula.props.Kt or nil\n\t\t\t\t\t\t\tlocal f0 = childDevice.uplink.capabilities[1].formula.props.Fo or nil\n\t\t\t\t\t\t\t--local t0 = childDevice.uplink.capabilities[1].formula.props.To or nil\n\t\t\t\t\t\t\tlog.debug("shutai_file_transfer:振弦节点 模块%s通道%s的公式计算参数是:k=%s,f0=%s,freq=%s",jsondata.M,jsondata.C,k,f0,freq)\n\t\t\t\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2)-- + kt * (temp - t0)\n\t\t\t\t\t\t\t\tlog.debug("shutai_file_transfer: 振弦节点 模块%s通道%s的phy=%s,fre=%s",jsondata.M,jsondata.C,Phy,freq)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n local rst = { \n data={\n frequency = freq,\n physicalvalue= Phy \n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000)-8*3600) --+00:00 \n }\n log.debug("shutai_file_transfer:out data=%s",json.encode(data))\n table.insert(out.data,rst)\n end\n\t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='485' then --0e03ebe4-bdad-4a8f-840c-ba09293c2488\n\t\t\t\t\t\tlocal raw=tonumber(jsondata.RV[1])\n\t\t\t\t\t\tlocal phy=raw\n\t\t\t\t\t\tlog.debug("shutai_file_transfer 模块%s通道%s的formula=%s",jsondata.M,jsondata.C,json.encode(childDevice.uplink.capabilities[1].formula))\n\t\t\t\t\t\tif childDevice.uplink.capabilities[1].formula~=nil then\n\t\t\t\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == "0e03ebe4-bdad-4a8f-840c-ba09293c2488" then --模数转换公式 \n\t\t\t\t\t\t\t\tlocal i0 = childDevice.uplink.capabilities[1].formula.props.Io or nil\n\n\t\t\t\t\t\t\t\tlocal k = childDevice.uplink.capabilities[1].formula.props.K or nil\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif k~=nil and k~=0 and i0~=nil then\n\t\t\t\t\t\t\t\t\tlog.debug("shutai_file_transfer: 模块%s通道%s开始计算",jsondata.M,jsondata.C)\n\t\t\t\t\t\t\t\t\tphy =(raw-i0)/k \n\t\t\t\t\t\t\t\t\tlog.debug("shutai_file_transfer: 485节点 模块%s通道%s的phy=%s,k=%s,i0=%s,raw=%s,",jsondata.M,jsondata.C,phy,k,i0,raw)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t log.debug("shutai_file_transfer:485节点 模块%s通道%s的公式参数 错误:k=%s,i0=%s,raw=%s",jsondata.M,jsondata.C,k,i0,raw)\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t log.debug("shutai_file_transfer: 485节点 公式id匹配错误 模块%s通道%formula.metaid=%s",jsondata.M,jsondata.C,childDevice.uplink.capabilities[1].formula.metaid)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\telse\n\t\t\t\t\t\t log.debug("shutai_file_transfer: 485节点 公式匹配错误 模块%s通道%s的formula=nil[%s]",jsondata.M,jsondata.C,json.encode(childDevice.uplink.capabilities[1].formula))\n\t\t\t\t\t\tend\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n local rst = { \n data={\n\t\t\t\t\t\t\t\tcurrent=raw,\n physicalvalue=phy \n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",tonumber(jsondata.T)/1000-8*3600) --+00:00\n }\n log.debug("shutai_file_transfer:out data=%s",json.encode(rst))\n table.insert(out.data,rst)\n end\n\n else\n --log.debug("shutai_file_transfer m=%s,C=%s,childDevice is nil",jsondata.M,jsondata.C)\n end\n end\n end\n end\n log.debug("shutai_file_transfer: dataresult: %s", json.encode(out))\n ctx:notify(json.encode(out)) \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n \t--log.debug("shutai_file_transfer: 查询 传感器ID: moduleid=%s,channel=%s", moduleid,channel)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices \n --log.debug("shutai_file_transfer: 查询 节点层 设备device=%s",json.encode(subdevices))\n\n\t\tfor i,link in pairs(device.dnlinks) do\n --log.debug("shutai_file_transfer: link=%s",json.encode(link))\n for j,node in pairs(link.devices) do\n --log.debug("shutai_file_transfer:node=%s",json.encode(node))\n\t\t\t\t--log.debug("shutai_file_transfer 模块号(节点) node.uplink.props.node_id=%s",node.uplink.props.node_id)\n\t\t\t\tlocal moduleNo=node.uplink.props.node_id\n\t\t\t\tif moduleNo==tostring(moduleid) then\n\t\t\t\t\tfor k,sublink in pairs(node.dnlinks) do\n\t\t\t\t\t\t--log.debug("shutai_file_transfer:sublink=%s",json.encode(sublink))\n\t\t\t\t\t\tfor u,subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t\t--log.debug("shutai_file_transfer:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif tonumber(subdevice.uplink.props.node_channelid)==tonumber(channel) then\n\t\t\t\t\t\t\t\tlog.debug("shutai_file_transfer: m=%s,c=%s 匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treturn subdevice\n\t\t\t\t\t\t\tend \n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n end\n end \n \n --log.debug("shutai_file_transfer has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug("shutai_file_transfer has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n INLINE 2018-08-01 15:54:09.117+08 2019-03-19 12:55:50.755+08 2018-08-01 \N
+543e1e81-6131-43ec-8f7e-495bb4fa257d jm_Inclinometer_1 \N 测斜 1.0 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c f 5b2dc320-50f8-4461-87fc-03b66e3e5e4c Lua start=function()\n log.debug("start %s, ctx=%s", "jm_Inclinometer_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff='#+'\n --buff=iota.appendHexByte(buff, 0x23, endian) \n --buff=iota.appendHexByte(buff, 0x2b, endian)\n buff= buff..device.uplink.props.module \n local buff1=StrToHex(buff)\n log.debug("jm_Inclinometer_1: send=%s ",buff1)\n ok,resp=ctx:ssend(buff1,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --24 3E 39 37 3D 3E 39 35 3E \n --"anglex": 10.417817400353972,\n --"angley": -1.0070251712408496\n log.debug("jm_Inclinometer_1: get=%s ",hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==18) then\n \n local data1 =(tonumber(string.sub(hex,3,4),16)-48)*16+(tonumber(string.sub(hex,5,6),16)-48)+(tonumber(string.sub(hex,7,8),16)-48)*16*16*16+(tonumber(string.sub(hex,9,10),16)-48)*16*16\n local data2 =(tonumber(string.sub(hex,11,12),16)-48)*16+(tonumber(string.sub(hex,13,14),16)-48)+(tonumber(string.sub(hex,15,16),16)-48)*16*16*16+(tonumber(string.sub(hex,17,18),16)-48)*16*16\n local x1=(data2/10000-2.5)/4\n local y1=(data1/10000-2.5)/4\n local x= math.deg(math.asin(x1))\n local y= math.deg(math.asin(y1))\n out.data = {\n anglex=x,\n angley=y\n }\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n\n -- 字符串 -> Hex\n StrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2018-05-10 09:11:37.7+08 2018-05-10 09:11:37.7+08 2018-05-10 \N
+470002e4-546e-4f47-8b78-be6ef7f15734 fs-gnss-1min \N 1min 2.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n测试数据\n{\n "type":"http",\n "code":200,\n "body":"{\\"data\\":[{\\"pointId\\":8005,\\"recordTime\\":1516101950000,\\"x\\":2498030.7828,\\"y\\":506126.4067,\\"z\\":90.6906},{\\"pointId\\":8005,\\"recordTime\\":1516147175000,\\"x\\":2498030.7607,\\"y\\":506126.3922,\\"z\\":90.7774}]}"\n}\n]]--\nstart=function()\n log.debug("fs_gnss start moudleid=%s", device.props.pointId or "nil")\n --local apiname="findmm.record.queryByPointId"\n\tlocal req = {\n type= "http",\n url=device.uplink.props.url.."%s/data?startTime=%s&endTime=%s",\n \t--url="http://218.3.150.108:7003/gnss/%s/data?startTime=%s&endTime=%s", \n \tmethod="get",\n \tcontent="text/html",\n header={},\n }\n local param={\n pointId= tonumber(device.props.pointId),\n pageNo=1, \n pageSize=1, \n }\n local beginTime=stringToTime(device.props.beginTime)*1000 \n local r1,ok = redis.get(device.id.."_endTime")\n if ok and r1~=nil then\n beginTime=r1 - 60000\n end\n local endTime=os.time()*1000\n \n\n if redis.set(device.id.."_endTime", tostring(endTime)) then\n log.debug("fs_gnss moudleid=%s set lasttime ok key=%s,value=%s",device.props.pointId,device.id.."_endTime",tostring(endTime))\n end\n \n req.url=string.format(req.url,device.props.pointId,beginTime,endTime)\n log.debug("fs_gnss: moudleid=%s request url=%s",device.props.pointId,req.url)\n \n local ok,ack=ctx:ssend(req,4000)\n\n if ack==nil then\n log.debug("fs_gnss: moudleid=%s result=%s,ack= nil",device.props.pointId,ok)\n else\n log.debug("fs_gnss: moudleid=%s result=%s,ack=%s",device.props.pointId,ok,json.encode(ack))\n end\n\n local out={\n type = 2,\n data ={},\n result = {}\n }\n if not ok or ack==nil then\n out.result={\n code=1002,\n msg="timeout",\n }\n else --OK\n if ack.code==200 and ack.body ~="" then -- http应答\n qx=json.decode(ack.body) -- 有数据\n log.debug("ack=%s",ack.body)\n local items = #qx.data or 0\n log.debug("totalItems=%d", items)\n if items > 0 then\n for i=1,items,1 do\n local item= qx.data[i]\n local data1 = {\n data={\n x=item.x*1000 or 0,\n y=item.y*1000 or 0,\n z=item.z*1000 or 0,\n },\n device=device.id,\n \t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(item.recordTime)/1000)),\n type=1 \n }; \n table.insert(out.data,data1)\n end\n log.debug("fs_gnss: moudleid=%s data:%s",device.props.pointId,json.encode(out))\n ctx:done(json.encode(out))\n else\n log.debug("fs_gnss: moudleid=%s has not new data",device.props.pointId)\n end\n else\n log.debug("fs_gnss: moudleid=%s request data error:%s body:%s",device.props.pointId,ack.code,ack.body) \n end\n end\nend\n \nstringToTime=function( timeString ) --yyyyMMddHHmmss to 时间戳\n local yyyy = tonumber(string.sub(timeString , 1, 4)) \n local MM = tonumber(string.sub(timeString , 5, 6)) \n local DD = tonumber(string.sub(timeString , 7, 8))\n local HH = tonumber(string.sub(timeString , 9, 10))\n local mm = tonumber(string.sub(timeString , 11, 12))\n local ss = tonumber(string.sub(timeString , 13, 14))\n return os.time({year = yyyy, month = MM, day =DD, hour =HH, min =mm, sec = ss}) \nend \n\n INLINE 2019-08-19 10:04:04.068+08 2019-08-19 10:04:25.322+08 2019-08-19 \N
+fcd2a682-7043-468e-a5a4-69a4def56b94 file_transfile \N 1.0 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 f 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 Lua start=function()\n\tlog.debug("ct_file_transfer : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n\tif data ~=nil then\n\t\tif data.type == "idau/file" then\n\t\t\tif data.ext==".d" or data.ext==".dx" then\n\t\t\t\tlog.debug("ct_file_transfer : recvd content = %s",data.payload)\n\t\t\t\tParseFileD(data.payload)\n\t\t\t\t--else\n\t\t\t\t--log.error("ct_file_transfer: unsupported file type: %s", data.ext)\n\t\t\tend\n\t\t\tif data.ext==".dat" then\n\t\t\t\t--log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n\t\t\t\tParseFileDat(data.payload)\n\t\t\t\t--else\n\t\t\t\t--log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n\t\t\tend\n\t\telse\n\t\t\tlog.error("ct_file_transfer : content type is not file, error recvd type is %s", data.type)\n\t\tend\n\telse\n\t\tlog.error("ct_file_transfer : recvd content is nil")\n\tend\nend\n\nfunction ParseFileDat(dathex)\n\tlog.debug("ct_file_transfer : datlen=%s" , string.len(dathex))\n\tlocal out={\n\t\tdata ={},\n\t\tresult = {},\n\t\ttype=2\n\t}\n\tlocal offset = 0\n\tlocal t = iota.hexToShort(dathex,offset,'B')\n\toffset = offset + 2\n\tlocal l = iota.hexToShort(dathex,offset,'B')\n\toffset = offset + 2\n\tlocal version = iota.hexToByte(dathex,offset,'B') -- 版本号\n\toffset = offset + 1\n\tlocal channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n\toffset = offset + 1\n\tlocal deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n\tlocal subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n\tif subdevice ~= nil then\n\t\toffset = offset + 2\n\t\tlocal samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n\t\toffset = offset + 4\n\t\tlocal filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n\t\toffset = offset + 4\n\t\tlocal gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n\t\toffset = offset + 1\n\t\tlocal triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n\t\toffset = offset + 1\n\t\tlocal year = iota.hexToByte(dathex,offset,'B')+2000\n\t\toffset = offset + 1\n\t\tlocal mon = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal day = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal hour = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal min = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal sec = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\toffset = offset + 12\n\t\tlocal Ldata = iota.hexToInt(dathex,offset,'B')\n\t\toffset = offset + 4\n\t\tlog.debug("ct_file_transfer deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n\t\tlocal strLen = string.len(dathex)\n\t\tlocal floatcount = (strLen/2-40)/4\n\t\tlog.debug("ct_file_transfer begin parse")\n\t\tlocal vols = {}\n\t\tfor i= 1, floatcount do\n\t\t\t--offset=40+(i-1)*4\n\t\t\tlocal subdat=string.sub(dathex,73+i*8,80+i*8)\n\t\t\t\n -- if pos >= strLen then\n -- log.debug("ct_file_transfer outofrange offset=%s floatcount=%s, strlen=%s",offset, floatcount, strLen)\n -- end\n\t\t\tvols[i]= iota.hexToFloat(subdat,0,'L',6)\n\t\tend\n\t\tlog.debug("ct_file_transfer finish parse")\n\n\t\tlocal rst = {\n\t\t\tdata={\n\t\t\t\t_data_type='vib',\n\t\t\t\tphysicalvalue=vols,\n\t\t\t\tsampleFreq=samplefreq,\n\t\t\t\tfilterFreq=filterfreq,\n\t\t\t\tgainAmplifier=gainamplifier,\n\t\t\t\ttriggerType=triggertype,\n\t\t\t\tversion=version\n\t\t\t},\n\t\t\tdevice=subdevice.id,\n\t\t\ttype=1,\n\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))\n\t\t}\n\t\ttable.insert(out.data,rst)\n\t\tlog.debug("ct_file_transfer deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n\t\tctx:notify(json.encode(out))\n\telse\n\t\tlog.debug("ct_file_transfer not found device module=%s channel=%s",deviceId,channel)\n\tend\nend\n\nfunction ParseFileD(content)\n\tlocal out={\n\t\tdata ={},\n\t\tresult = {},\n\t\ttype=2\n\t}\n\tlog.debug("ct_file_transfer : content =%s", content)\n\tlocal jsons=Split(content,'\\r')\n\tfor k,v in pairs(jsons) do\n\t\tif v~=nil and v~='' then\n\t\t\tlocal jsondata = json.decode(v)\n\t\t\tif jsondata~=nil and jsondata ~='' then\n\t\t\t\tlocal childDevice=getDeviceInfo(jsondata.M,jsondata.C)\n\t\t\t\tif childDevice ~=nil then\n\t\t\t\t\tlog.debug("ct_file_transfer 设备类型=%s,%s",childDevice.props.sensortype,json.encode(childDevice))\n\t\t\t\t\tif childDevice.props.sensortype=='gnss' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tx = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\ty = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\tz = jsondata.RV[3] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='zd' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tppv = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\tpv = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\trms = jsondata.RV[3] or 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("ct_file_transfer:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\n\t\t\t\t\tif childDevice.props.sensortype=='gdgs' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twavelength = jsondata.RV[1],\n\t\t\t\t\t\t\t\tphysicalvalue= jsondata.PV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("ct_file_transfer:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='standard485' then\n\t\t\t\t\t\tlog.debug("ct_file_transfer standard485=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tphysicalvalue= jsondata.PV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='pressure' then\n\t\t\t\t\t\tlog.debug("ct_file_transfer pressure=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tvoltage= jsondata.RV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='laser' then\n\t\t\t\t\t\tlog.debug("ct_file_transfer laser=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tlength= jsondata.RV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\n\t\t\t\t\tif childDevice.props.sensortype=='bj' then\n\t\t\t\t\t\tlog.debug("ct_file_transfer bj=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tarch= jsondata.RV[1],\n\t\t\t\t\t\t\t\ttunnelface= jsondata.RV[2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\n\t\t\t\t\tif childDevice.props.sensortype=='qixiangzhan' then\n\t\t\t\t\t\tlog.debug("ct_file_transfer qixiangzhan=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\ttemp= jsondata.RV[1],\n\t\t\t\t\t\t\t\thumidy= jsondata.RV[2],\n\t\t\t\t\t\t\t\tnoise= jsondata.RV[3],\n\t\t\t\t\t\t\t\tpm25= jsondata.RV[4],\n\t\t\t\t\t\t\t\tpm10= jsondata.RV[5]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='fsfx' then\n\t\t\t\t\t\tlog.debug("ct_file_transfer fsfx=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twinddirection = jsondata.RV[1],\n\t\t\t\t\t\t\t\twindspeed = jsondata.RV[2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tlog.debug("ct_file_transfer line=%s childDevice is nil",k)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\tlog.debug("ct_file_transfer: dataresult: %s", json.encode(out))\n\tctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n\tlog.debug("ct_file_transfer:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n\tlog.debug("ct_file_transfer: device = %s",json.encode(device))\n\tif device.dnlinks ~= nil then\n \tlog.debug("ct_file_transfer: device.dnlinks ~= nil")\n\t\tlocal subdevices = device.dnlinks[1].devices\n \tlog.debug("ct_file_transfer: subdevices %s",json.encode(subdevices))\n\t\tfor i,subdevice in pairs(subdevices) do\n\n\t\t\tlocal submodule=subdevice.uplink.props.module\n\t\t\t--判断是否是3层采集仪结构\n\t\t\tif json.encode(subdevice.dnlinks)~="{}" then\n\t\t\t\tlog.debug("ct_file_transfer:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n\t\t\t\tfor k,sublink in pairs(subdevice.dnlinks) do\n\t\t\t\t\t--log.debug("ct_file_transfer:sublink=%s",json.encode(sublink))\n\t\t\t\t\tfor u,sub_subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t--log.debug("ct_file_transfer:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\tlocal sensormodule=sub_subdevice.uplink.props.module\n\t\t\t\t\t\tlocal sensorchannel=sub_subdevice.uplink.props.channel\n\t\t\t\t\t\tif tostring(sensormodule) == tostring(moduleid) and tonumber(sensorchannel)==tonumber(channel) then\n\t\t\t\t\t\t\tlog.debug("ct_file_transfer:m=%s,c=%s 3 拜安匹配到设备=%s",moduleid,channel,json.encode(sub_subdevice))\n\n\t\t\t\t\t\t\treturn sub_subdevice\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlog.debug("ct_file_transfer:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\telse\n\n\t\t\t\tlocal subchannel=subdevice.uplink.props.channel\n\t\t\t\tlog.debug("ct_file_transfer:两层结构 m=%s,c=%s 设备=%s",submodule,subchannel,json.encode(subdevice))\n\t\t\t\tif tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then\n\t\t\t\t\tlog.debug("ct_file_transfer:m=%s,c=%s 2安信匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n\t\t\t\t\treturn subdevice\n\t\t\t\telse\n\t\t\t\t\tlog.debug("anxin_file_transfer has no device module=%s channel=%s,[submodule=%s,subchannel=%s]",moduleid,channel,submodule,subchannel)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tlog.debug("ct_file_transfer has no device module=%s channel=%s",moduleid,channel)\n\t\treturn nil -- 没有找到匹配的传感器\n\telse\n\t\tlog.debug("ct_file_transfer has no subdevices.")\n\t\treturn nil -- 没有子设备\n\tend\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n\tlocal nFindStartIndex = 1\n\tlocal nSplitIndex = 1\n\tlocal nSplitArray = {}\n\twhile true do\n\t\tlocal nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n\t\tif not nFindLastIndex then\n\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n\t\t\tbreak\n\t\tend\n\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n\t\tnFindStartIndex = nFindLastIndex + string.len(szSeparator)\n\t\tnSplitIndex = nSplitIndex + 1\n\tend\n\treturn nSplitArray\nend\n\n INLINE 2019-04-16 11:01:48.287+08 2019-04-16 11:27:57.181+08 2019-04-16 \N
+4d5bd16e-9baf-464f-b930-69308501030f geot_3300 \N 基泰32通道采集器 1.0 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 f d3f1aa63-8397-45a4-af26-15a0f91d1e13 Lua --//04 项目资料/2017-07/南京基泰沉降监测项目/MCU32数据采集说明书.pdf\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--32个通道\n--测试536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3355494e2056313d322e3334352056323d302e3030332049333d32302e3030302049343d302e3030302056353d302e39382049363d312e35362049373d322e3134352056383d312e323030201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n--24个通道\n--536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n start=function()\n -- log.debug("load script %s, moduleId=%s", "geot_3300.lua", device.props.moduleId or "[nil]")\n -- log.debug("geot_3300:".."LUA: ctx is =%s", json.encode(device))\n ok,resp=ctx:ssend("01020304",15000)\n -- log.debug("geot_3300:".."测试下发01020304正常")\n end\n\nonData=function(hex)\n --log.debug("geot_3300收到数据=%s", hex)\n\t--log.debug("geot_3300 device =%s", json.encode(device))\n --log.debug("geot_3300subdevices data is =%s", json.encode(device.dnlinks[1].devices))\n\n local out={\n data ={},\n result = {},\n type=2\n }\n \n local ModuleChar = "M=";--振弦\n local DigChar = "Di";--测斜\n local VoltageChar = "V=";--电压\n local CurrentChar = "I=";--电流\n local WaterChar = "Wa";--水文\n\tlocal ResistanceChar="R=";--电阻(差阻)\n\n\n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n sData=toStrHex(hex)\n --log.debug("geot_3300:sData是 %s",sData)\n --获取子字符串表\n local allResponse=Split(sData,'\\n')\n --移除表内的“”和nil\n for k,v in ipairs(allResponse) do\n if v=='' or v==nil then\n table.remove(allResponse,k)\n --log.debug("geot_3300:".."表内的“”和nil 移除元素为 "..tostring(allResponse[k]))\n end\n end\n\n --分析单类数据\n for k,v in ipairs(allResponse) do\n local singleData=Split(v,' ')\n --移除单类数据中的空 \n for kk,vv in ipairs(singleData) do\n if vv=='' or vv==nil then\n --print("移除元素为 ",singleData[kk])\n table.remove (singleData,kk)\n end\n end\n\n if k>1 then\n local temp1=singleData[2+1]\n local moudleStr=string.sub(singleData[2+1],2,2)\n local moduleNo=tonumber(moudleStr)\n --解析单条数据\n for kkk,vvv in ipairs(singleData) do\n --log.debug("geot_3300:遍历解析单条数据 键="..tostring(kkk).." 值="..tostring(vvv))\n \n local type_sensor=string.sub(string.gsub(singleData[kkk],"%d",""),1,2)\n --log.debug("geot_3300: type_sensor="..type_sensor) \n if string.len(type_sensor) >=2 then\n --频率\n if type_sensor==ModuleChar then\n local length = string.len(singleData[kkk]) - 3;\n local tempLength = string.len(singleData[kkk + 1]) - 3;\n local channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n local Module =tonumber(string.sub(singleData[kkk],4, -1))\n local tempData = string.sub(singleData[kkk+1],4, 4+tempLength);\n local Frequency = math.sqrt(Module*1000);\n local Temp;\n local Phy\n \t\t\t local Length\n if IsNumberic(tempData) then\n\t\t\t\t\t\t\t\tTemp=tonumber(tempData)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tTemp=0;\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:(振弦)子设备 模块%s,通道%s原型childDevice=%s",moduleNo,channelNo,json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:(振弦)子设备 模块%s,通道%s deviceId=%s ",moduleNo,channelNo,tostring(deviceId))\n\t\t\n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:振弦模块: 模块%s,通道%s 公式参数=%s,%s,%s,%s,%s",moduleNo,channelNo,K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\t--log.debug("geot_3300 模块%s,通道%s 当前的Frequency是:%s,%s",moduleNo,channelNo,Frequency,Temp)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t--log.debug("geot_3300 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Module --经过厂家确认 公式带入的是模数\n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t--log.debug("geot_3300 模块%s,通道%s当前的Phy是:%s",moduleNo,channelNo,Phy)\n\t\t\t\t\t\t\t\tend \n \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:(振弦)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t--log.debug("geot_3300:振弦模块:公式%s",device.formula)\n\t\t\t\t\t\t \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tfrequency=tonumber(string.format("%0.3f",Frequency)),\n\t\t\t\t\t\t\t\t\ttemperature=tonumber(string.format("%0.2f",Temp)),\n\t\t\t\t\t\t\t\t\tphysicalvalue=tonumber(string.format("%0.3f",Phy)),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("geot_3300:(振弦) Phy结果=%s",Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend\n\n --电压\n if type_sensor== VoltageChar then\n local length = string.len(singleData[kkk]) - 3;\n\t\t\t\t\t\t\tlocal channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n\t\t\t\t\t\t\tlocal Voltage =tonumber(string.sub(singleData[kkk],4, -1))\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:(电压)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:(电压)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t \n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:电压模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlocal Temp=0;--电压模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:电压模块当前的Voltage是:%s,%s",Voltage,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Voltage \n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:电压模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\tend \t \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t--log.debug("geot_3300:(电压)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={voltage=Voltage,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend\n \n\t\t\t\t\t\t--电流\n\t\t\t\t\t\tif type_sensor==CurrentChar then\n\t\t\t\t\t\t\tlocal length = string.len(singleData[kkk]) - 3;\n\t\t\t\t\t\t\tlocal channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n\t\t\t\t\t\t\tlocal Current =tonumber(string.sub(singleData[kkk],4, -1))\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:(电流)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:(电流)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:电流模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlocal Temp=0;--电流模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:电流模块当前的Current是:%s,%s",Current,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Current \n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:电流模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\tend \n \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:(电流)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={current=Current,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend \n\n\t\t\t\t\t\t--水文\n\t\t\t\t\t\tif type_sensor==WaterChar then\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\tif string.sub(singleData[kkk],1,6)== "Water1" then\n\t\t\t\t\t\t\t\tlocal waterData = GetSWData(singleData, kkk); \n \n\t\t\t\t\t\t\t\tfor i=1,8,1 \n\t\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,i)\n\t\t\t\t\t\t\t\t\t--\n\t\t\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:(水文)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t\t\tlog.debug("geot_3300:(水文)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:水文模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t local Temp=0;--水文模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t\t --log.debug("geot_3300:水文模块当前的Current是:%s,%s",Current,Temp)\n\t\t\t\t\t\t\t\t\t\t local Fi=waterData[i] \n\t\t\t\t\t\t\t\t\t\t Phy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t\t --log.debug("geot_3300:水文模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\t\t\tend \n\t\t\t\t\t\t\t\t\telse\n -- log.debug("geot_3300:(水文)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(i))\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\tlocal data1={\n\t\t\t\t\t\t\t\t\t\tdata={waterdata = waterData[i],\n\t\t\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\t\ttype=1\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttable.insert(out.data,data1) \n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\tend\t\n end\n\n --测斜\n if type_sensor==DigChar then\n\t\t\t\t\t local Phy\n\t\t\t\t\t local Length\n\t\t\t\t\t local Temp\n if (string.sub(singleData[kkk],1,3)..string.sub(singleData[kkk],5,5))== "Dig=" then\n local channelNo = tonumber(string.sub(singleData[kkk],4, 4),16);\n local Inclination =tonumber(string.sub(singleData[kkk],6, -1))\n --获取通道设备deviceId\n \t\t\t local childDevice=getDeviceInfo(moduleNo,channelNo)\n \t\t\t local deviceId\n if childDevice~=nil then\n \t\t\t\t\t deviceId=childDevice.id\n \t --log.debug("geot_3300:(测斜)子设备原形childDevice=%s",json.encode(childDevice))\n \t\t\t\t --log.debug("geot_3300:(测斜)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n -- log.debug("geot_3300:测斜模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tTemp=0;--测斜模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:当前的Frequency是:%s,%s",Inclination,Temp)\n\t\t\t\t\t\t\t\t\t\tlocal Fi=Inclination \n\t\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\t\tend \n \t \n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:(测斜)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={inclination=Inclination,\n\t\t\t\t\t\t\t\t\t\ttemperature=Temp,\n\t\t\t\t\t\t\t\t\t\tphysicalvalue=Phy,\n\t\t\t\t\t\t\t\t\t\tlength=Length \t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t--电阻(差阻)\n if type_sensor==ResistanceChar then\n\t\t\t\t\t --local R1Length = string.len(singleData[kkk]) - 3; --取消\n --local r1Length = string.len(singleData[kkk + 1]) - 3; --取消\n local channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n local R1 =tonumber(string.sub(singleData[kkk],4, -1))\n local r1 = tonumber(string.sub(singleData[kkk+1],4, -1))\n local Temp;\n local Phy\n if IsNumberic(tempData) then\n\t\t\t\t\t\t\t\tTemp=tonumber(tempData)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tTemp=0;\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s 原形childDevice=%s",tostring(moduleNo),tostring(channelNo),json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s deviceId=%s ",tostring(moduleNo),tostring(channelNo),tostring(deviceId))\n\n\t\t\t\t\t\t\t\tlocal f = childDevice.uplink.capabilities[1].formula.props.f\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s f!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal Zo = childDevice.uplink.capabilities[1].formula.props.Zo \n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s Zo!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal b = childDevice.uplink.capabilities[1].formula.props.b \n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s b!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal a = childDevice.uplink.capabilities[1].formula.props.a \n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s a!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal Ro = childDevice.uplink.capabilities[1].formula.props.Ro \n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s Ro!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s 参数=%s,%s,%s,%s,%s",tostring(moduleNo),tostring(channelNo),f,Zo,b,a,Ro)\n\t\t\t\t\t\t\t\tif f ==nil or Zo ==nil or b ==nil or a==nil or Ro==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tTemp=a*(R1+r1-Ro)\n \t\t\t\t\tif tonumber(ri)~=0 then\t\t\t\n Phy =f*(R1/r1 -Zo)+b*Temp\n --log.debug("geot_3300: m=%s,c=%s, 当前的R1=%s,r1=%s,Temp=%s,Phy=%s",tostring(moduleNo),tostring(channelNo),R1,r1,Temp,Phy)\n \t\t\t\telse\n \t\t\t --log.debug("geot_3300: 数据无效 m=%s,c=%s, r1=0")\n break\n \t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tend \n \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s deviceId为nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块:公式%s",device.formula)\n\t\t\t\t\t\t \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tResistor1=R1,\n\t\t\t\t\t\t\t\t\tResistor2=r1,\n\t\t\t\t\t\t\t\t\ttemperature=Temp,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块 m=%s,c=%s Phy结果=%s",tostring(moduleNo),tostring(channelNo),Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\t\t\t\t\t\t\n\t\t\t\t\t\tend\n\n end\n\t\t\t\tend\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n --log.debug("geot_3300resultData=%s,hex=%s", json.encode(out),hex)\n ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("geot_3300 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t --log.debug("geot_3300:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\t--log.debug("geot_3300 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t -- log.debug("geot_3300 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t \t if tostring(channelStrCheck)== tostring(channelNoId) then\n \n \t\t --log.debug("geot_3300: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n -- log.debug("geot_3300: subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function(alldata)\n --log.debug("geot_3300 校验开始")\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n return false\n end\n\n local length=getIndex(alldata)\n local data=string.sub(alldata,1,length*2)\n --log.debug("data:"..data)\n local plu16={}\n plu16[0]=string.sub(data,-8,-7)\n plu16[1]=string.sub(data,-6,-5)\n local plusSum16Hi,plusSum16Lo = iota.hexCheckPlusSum16(data,0,length-4);\n -- log.debug("geot_3300:".."plu16[0]是:"..plu16[0])\n -- log.debug("geot_3300:".."plu16[1]是:"..plu16[1])\n -- log.debug("geot_3300:".."plusSum16Hi是:"..tostring(plusSum16Hi))\n -- log.debug("geot_3300:".."plusSum16Lo是:"..tostring(plusSum16Lo))\n --if tonumber(plu16[0],16)~=plusSum16Hi or tonumber(plu16[1],16)~=plusSum16Lo then\n -- errormsg = 'checkPlusSum16 is false'\n -- errcode = 1004\n -- return false\n -- end\n\n --log.debug("geot_3300 校验通过")\n return true\nend\n\ngetIndex=function(data)--用于IsValid\n local len=string.len(data)/2\n for n =1,len do \n local value=string.sub(data,2*n-1,2*n)\n if value=='0a' then\n return n;\n end\n end\n return 0;\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\n\nend\n\nGetSWData=function(sData,j)\n local SW={}\n\n local Water1 = tonumber(string.sub(sData[j],8,-1));\n local Base1 = tonumber(string.sub(sData[j+1],7,-1));\n\n local Water2 = tonumber(string.sub(sData[j+2],8,-1));\n local Base2 = tonumber(string.sub(sData[j+3],7,-1));\n\n local MaxWinSpeed = tonumber(string.sub(sData[j+4],13,-1));\n local Direction = tonumber(string.sub(sData[j+5],11,-1));\n\n local AverWinSpeed = tonumber(string.sub(sData[j+6],14,-1));\n local RealTImeWinSpeed = tonumber(string.sub(sData[j+7],18,-1));\n \n local NowDirection = tonumber(string.sub(sData[j+8],11,-1));\n local AccRain = tonumber(string.sub(sData[j+9],9,-1));\n\n SW[1] = Water1/100 + Base1;\n SW[2] = Water2/100 + Base2;\n SW[3] = MaxWinSpeed;\n SW[4] = Direction;\n SW[5] = AverWinSpeed;\n SW[6] = RealTImeWinSpeed;\n SW[7] = NowDirection;\n SW[8] = AccRain;\n return SW;\nend INLINE 2017-11-15 10:09:48.456+08 2019-05-17 15:10:01.607+08 2017-11-13 \N
+fa95dbc3-abc9-43d2-98ba-9c176005b0b8 zm_Weather_2402 \N 1.0 39e9bd74-7ff5-4608-8f5a-6ec1fbfbf74c 39e9bd74-7ff5-4608-8f5a-6ec1fbfbf74c f 39e9bd74-7ff5-4608-8f5a-6ec1fbfbf74c Lua --//Documents/02 协议分析/2016-10-09/西安中铭电气有限公司 WXA100-06M气象传感器使用手册.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "zm_Weather_2402", device.props.moduleId or "[nil]")\n\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n local moduleNo\n if json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("zm_Weather_2402 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("zm_Weather_2402 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n \n \n if tonumber(moduleNo) > 255 or tonumber(moduleNo) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n ctx:done(json.encode(errout))\n else\n\t buff=iota.appendHexByte(buff, 0x82, endian)\n buff=iota.appendHexByte(buff, moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexByte(buff, 0x01, endian)\n buff=iota.appendHexByte(buff, 0x00, endian) \n local xor=iota.hexCheckXor(buff, 1);\n buff=iota.appendHexByte(buff, xor, endian) \n log.debug('zm_Weather_2402 ssend====>',buff);\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n end\n ctx:done(result)\n end\nend\n--86011b0100ff000060408eee4542cdec7f44475d173e16cfa1430000000072\n--moduleId=1\n--azimuthofWind=323.61785888671875\n--speedofWind=0.14781676232814789\n--temp=3.5\n--hum=49.482963562011719\n--pressure=1023.7000122070312\n--rainFall=0\n\nunmarshall=function(hex,moduleNoStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n log.debug('开始解析')\n --模拟byte[]\n\t --local data={}\n\t --for i=0,string.len(hex)-1,2 do\n\t --local j=i/2\n\t\t --data[j]=string.sub(hex,i+1,i+2)\n\t\t--end\n\t \n\t local temp = iota.hexToFloat(hex,6,'L');--//温度\n\t\tlocal hum = iota.hexToFloat(hex,10,'L');--//湿度\n local pressure = iota.hexToFloat(hex,14,'L');--//压强\n local speedofWind = iota.hexToFloat(hex,18,'L');--//风速\n local azimuthofWind = iota.hexToFloat(hex,22,'L');--//风向\n local rainFall = iota.hexToFloat(hex,26,'L');--//雨量\n \n out.data = {\n temp=temp,\n\t\t\t\thum=hum,\n\t\t\t\tpressure=pressure,\n\t\t\t\tspeedofWind=speedofWind,\n\t\t\t\tazimuthofWind=azimuthofWind,\n\t\t\t\trainFall=rainFall\t\t\t\t\n }\n\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data,moduleNoCheck)\n log.debug('开始校验数据')\n if data == nil or string.len(data)/2 ~= 31 then\n errormsg = 'Data is nil or InvalidLength'\n errcode = 1001\n return false\n end\n\tlog.debug('长度校验通过')\n if iota.hexToByte(data,0,'B') ~= 0x86 or iota.hexToByte(data,3,'B') ~= 0x01 then\n errormsg = 'CMD is not right'\n errcode = 1001\n return false\n end\n\tlog.debug('CMD校验通过')\n if moduleNoCheck~= tostring(iota.hexToByte(data,1,'B')) then\n \t\n errormsg = 'Invalid ack moduleId'\n errcode = 1004\n return false\n end\n\tlog.debug('模块校验通过')\n return true\nend\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n INLINE 2017-12-07 14:10:06.865+08 2018-08-13 15:19:33.442+08 2017-12-07 \N
+3d898b6b-02de-4029-a6fd-8df009aa4578 sxcg_displacement_1 \N 位移计 1.0 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 f 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 Lua start=function()\n log.debug("start %s, moduleId=%s", "sxcg_displacement_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0xaa, endian)\n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 2, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n -- 010300AA0002E4 2B\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n log.debug("recv %s, ctx=%s", "sxcg_displacement_1.lua",hex)\n --0103040012d687\n --"displacement": 1234567mm\n\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==18) then\n \n local displacement=iota.hexToInt(hex,3,'B')\n \n out.data = {\n displacement=displacement\n \n }\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("recv %s, ctx=%s", "sxcg_displacement_1.lua",json.encode(out))\n return json.encode(out)\nend INLINE 2018-02-06 17:23:12.216+08 2018-08-23 15:25:39.911+08 2018-02-06 \N
+06fa55b0-c96c-4704-8998-ffd96d4feaa2 YC_5001_xieyi \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --require "functions" -- 公共函数\n\nstart=function()\n --local checkstr="0105610000010000000000000000000000000000000000000000000000"\n --local aa=iota.appendHexCrc8(checkstr,0)\n log.debug("enyi_2019 device=%s",json.encode(device))\n ok=ctx:asend("010203")\nend\n\n--缓存\n--local buff_random_32=""\n\nonData=function (hex)\n\t--主动上传式\n --log.debug("enyi_2019:Received=>%s",hex)\n devicePort=device.uplink.props.port \n\tlog.debug("enyi_2019 port=%s Received=>%s",devicePort,hex)\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\t\n\t\n\t--\n\t\n\t\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\t\n\t\n\t\tlocal json_table=getJsonTable(hex)\n\t\tlog.debug("enyi_2019 port=%s json_table.Cmd_Type=%s",devicePort,json_table.Cmd_Type)\n\t\t--扬尘注册 C-S\n\t\tif json_table.Cmd_Type=="Register" then\n\t\t log.debug("enyi_2019 devicePort=%s,处理注册信息",devicePort)\n\t\t\t--提取 device_Id\n\t\t\tlocal device_Id=json_table.Device_ID\n\t\t\t local Registercheck=""\n\t\t\tif device_Id~=device.props.Device_ID then\n\t\t\t Registercheck="1"\n\t\t\t log.debug("enyi_2019 devicePort=%s, C-S 注册校验错误,device_Id=%s,device.props.Device_ID=%s",devicePort,device_Id,device.props.Device_ID)\n\t\t\telse\n\t\t\t\tRegistercheck="0"\n\t\t\tend\n\t\t\t \n\t\t\t \n\t\t\tlocal Register_messageNo=string.sub(hex,9,9+7)\n\t\t\t \n\t\t\t--注册应答 \n\t\t local tb_Register={}\n\t\t\tlocal timestamp=os.time()\n\t\t\tlocal random_32=getRandom32(timestamp)--随机数32=固定头(22)..时间戳(10)\n\t\t\t--buff_random_32=random_32 --保存随机数\n\t\t\ttb_Register.Cmd_Type="Register_Ret"\n\t\t\ttb_Register.Data_Check=Registercheck\t\t--CD55333ECFBF490B84145E61E6DCD028\t\n\t\t\ttb_Register.Random=random_32 --测试随机数"11223344556677889900112233445566"\n\t\t\tlocal cmdStr_Register=json.encode(tb_Register)\n\t\t local buff_Register=creatResponse(cmdStr_Register,Register_messageNo)--消息编号 时间戳\n\t\t\t ok=ctx:asend(buff_Register)\n\t\t\tlog.debug("enyi_2019: devicePort=%s, s-C发送注册反馈=%s",devicePort,buff_Register)\n\t\t\t\n\t\t\t--扬尘登录 C-S\n\t\telseif json_table.Cmd_Type=="Login" then\n\t\t\tlog.debug("enyi_2019 devicePort=%s,处理登录信息",devicePort)\n\t\t\tlocal C_S_Device_ID=json_table.Device_ID\n\t\t\tlocal C_S_Random32=json_table.Random\n\t\t\tlocal C_S_Response=json_table.Response\n\t\t\tlocal S_Response=getMD5Response(C_S_Device_ID,C_S_Random32)\n\t\t\tlocal logincheck=""\n\t\t\tif string.upper(C_S_Response)~=string.upper(S_Response) then\n\t\t\t\tlogincheck="1"\n\t\t\t log.debug("enyi_2019 devicePort=%s, C-S 登录response校验错误,C_S_Response=%s,S_Response=%s,C_S_Random32=%s",devicePort,string.upper(C_S_Response),string.upper(S_Response),C_S_Random32)\n\t\t\telse\n\t\t\t\tlogincheck="0"\n\t\t\tend\n\t\t\t\n\t\t\t\n\t\t\tlocal login_messageNo=string.sub(hex,9,9+7)\n\t\t\t--登录应答\n\t\t\tlocal tb_Login={}\n\t\t\t--local timestamp_2=os.time()\n\t\t\t--local random_32_2=getRandom32(timestamp_2) --"BE4805E9EF1D41DFB6D732931F6C2F6C"\n\t\t\ttb_Login.SessionID=C_S_Random32 --tostring(random_32_2)\t\t\t\n\t\t\ttb_Login.Cmd_Type="Login_Ret"\n\t\t\ttb_Login.Data_Check=logincheck\t\t\t\n\t\t\tlocal cmdStr_Login=json.encode(tb_Login)\n\t\t local buff_Login=creatResponse(cmdStr_Login,login_messageNo)--消息编号 时间戳\n\t\t\tok=ctx:asend(buff_Login)\n\t\t\tlog.debug("enyi_2019: devicePort=%s, s-C发送登录反馈=%s",devicePort,buff_Login)\n\n\t\t\t--扬尘数据 C-S\n\t\telseif json_table.Cmd_Type=="Reporting_Data" then\n\t\t\tlocal data_messageNo=string.sub(hex,9,9+7)\n\t\t\tlocal tb_Data={}\n\t\t\tlocal timestamp_3=os.time()\t\t\n\t\t\ttb_Data.Cmd_Type="Reporting_Data_Ret"\n\t\t\ttb_Data.Data_Check="0"\n\t\t\ttb_Data.Control_Cmd="0"\n\t\t\ttb_Data.SessionID=json_table.SessionID\n\t\t\tlocal cmdStr_Data=json.encode(tb_Data)\n\t\t local buff_Data=creatResponse(cmdStr_Data,data_messageNo)----消息编号 时间戳\n\t\t\t ok=ctx:asend(buff_Data)\n\t\t\tlog.debug("enyi_2019:devicePort=%s, s-C发送数据上报反馈=%s",devicePort,buff_Data)\n\t\t\t\n\t\t\t\n\t\t\t--\n\t\t\t--数据解析\n\t\t\tlocal device_ID=json_table.Device_ID\n\t\t\tlocal temperature=tonumber(json_table.Temp)\n\t\t\tlocal humidity=tonumber(json_table.Hum)\n\t\t\tlocal pm25=tonumber(json_table.PM2p5)\n\t\t\tlocal pm10=tonumber(json_table.PM10)\n\t\t\t--local tsp=tonumber(json_table.TSP)\n\t\t\tlocal nvh=tonumber(json_table.NVH)--噪声\n\t\t\tlocal speed=tonumber(json_table.Wind_Sp)--风速\n\t\t\tlocal directionEnum=tonumber(json_table.Wind_Dir)--风向\t\n\t\t\tlocal direction\n\t\t\tif \tdirectionEnum~=nil then\n direction=directionEnum*22.5 --getWindDirection(directionEnum)\n\t\t\tend\n\t\t\tlog.debug("enyi_2019:devicePort=%s, 数据 =%s,%s,%s,%s,%s,%s,%s",devicePort,temperature,humidity,pm25,pm10,nvh,speed,direction)\n\t\t temperature=tonumber(string.format('%0.1f',temperature))\n\t\t\thumidity=tonumber(string.format('%0.1f',humidity))\n\t\t\tpm25=tonumber(string.format('%0.0f',pm25))\n\t\t\tpm10=tonumber(string.format('%0.0f',pm10))\n\t\t\tnoise=tonumber(string.format('%0.1f',nvh))\n\t\t\tspeed=tonumber(string.format('%0.1f',speed))\n\t\t\tdirection=tonumber(string.format('%0.1f',direction))\t\n \t\t--if temperature>-40 and humidity<0 and pm25<0 and pm10<0 and speed<0 and nvh<0 and direction<0 and temperature<=-40 and humidity<0 and pm25<0 and pm10<0 and speed<0 and nvh<0 and direction<0\n \t\tif temperature<-40 or temperature>60 then\n \t\ttemperature=nil\n out.result = {code = 5001, msg = '温度超阈值[-40,60]'} \n end\n \t\tif humidity<=0 or humidity>100 then\n \t\thumidity=nil\n \t\tout.result = {code = 5001, msg = '湿度超阈值[0,100]'} \n \tend\n \t\tif pm25<=0 or pm25>700 then\n \t\tpm25=nil\n \t\tout.result = {code = 5001, msg = 'pm2.5超阈值[0,700]'} \n \tend\n \t\tif pm10<=0 or pm10>700 then\n \t\tpm10=nil\n \t\tout.result = {code = 5001, msg = 'pm10超阈值[0,700]'} \n \tend\n \t\tif speed<0 or speed>24.5 then\n \t\tspeed=nil\n \t\tout.result = {code = 5001, msg = '风速超阈值[0,24.5]'} \n \tend\n \t\tif direction<0 or direction>360 then\n \t\tdirection=nil\n \t\tout.result = {code = 5001, msg = '风向超阈值[0,360]'} \n \tend\n \t\tif nvh<0 or nvh>200 then\n \t\tnvh=nil\n \t\tout.result = {code = 5001, msg = '噪声超阈值[0,200]'}\n \tend\n out.data={\n temperature=temperature,\n humidity=humidity,\n pm25=pm25,\n pm10=pm10,\n noise=nvh,\n speed=speed,\n direction=direction\t\n }\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t--扬尘保活 C-S\n\t\telseif json_table.Cmd_Type=="KeepAlive" then\n\t\t\tlocal KeepAlive_messageNo=string.sub(hex,9,9+7)\n\t\t\tlocal tb_KeepAlive ={}\n\t\t\tlocal timestamp_4=os.time()\n\t\t\ttb_KeepAlive.Cmd_Type="KeepAlive_Ret"\n\t\t\ttb_KeepAlive.Data_Check="0"\n\t\t\ttb_KeepAlive.Control_Cmd="0"\n\t\t\ttb_KeepAlive.SessionID=json_table.SessionID\n\t\t\tlocal cmdStr_KeepAlive=json.encode(tb_KeepAlive)\n\t\t local buff_KeepAlive=creatResponse(cmdStr_KeepAlive,KeepAlive_messageNo)----消息编号 时间戳\n\t\t\t ok=ctx:asend(buff_KeepAlive)\n\t\t\tlog.debug("enyi_2019:devicePort=%s, s-C发送注册反馈=%s",devicePort,buff_KeepAlive)\n\t\t \n\t\t \n\t\tend\n\t\t\t \t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n\tlog.debug("enyi_2019 devicePort=%s, resultData=%s",devicePort,resultData)\n\tctx:notify(resultData)\nend\n\n\n\n\ngetWindDirection=function(num)\n local NO=tonumber(num+1)\n\tlocal WindDirections={"北","东北偏北","东北","东北偏东","东","东南偏东","东南","东南偏南","南","西南偏南","西南","西南偏西","西","西北偏西","西北","西北偏北"}\n\tlocal direction=WindDirections[NO]\n\treturn direction\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("enyi_2019 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("enyi_2019: devicePort=%s,查询m=%s c=%s子设备 是否匹配设备child=%s",devicePort,tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("enyi_2019 devicePort=%s,子设备模块通道 接口获取 m=%s,c=%s ",devicePort,moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t log.debug("enyi_2019 devicePort=%s,子设备模块通道 属性获取 m=%s,c=%s ",devicePort,moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t \t if tostring(channelStrCheck)== tostring(channelNoId) then\n \n \t\t log.debug("enyi_2019: devicePort=%s, m=%s c=%s 匹配到 子设备原形child=%s",devicePort,moduleNoId,channelNoId,json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("enyi_2019: devicePort=%s, subdevices是nil")\n \treturn nil\n end\nend\n\n\n--获取收到数据中的json\ngetJsonTable=function(hex)\n\n\tlocal IDX_json=24; \n\tlocal length=string.len(hex)\n\tlocal json_hex=string.sub(hex,2*IDX_json+1,length-4*2) \n\tlocal jsonStr=HextoStr(json_hex)\n log.debug("enyi_2019 devicePort=%s,校验前jsonStr=%s",devicePort,jsonStr)\n local jsonStr_New=string.gsub(jsonStr,",\\r\\n}","\\r\\n}") \n log.debug("enyi_2019 devicePort=%s,校验后jsonStr=%s",devicePort,jsonStr)\n local tableJson=json.decode(jsonStr_New)\n\tlog.debug("enyi_2019 devicePort=%s,type(tableJson)=%s,tableJson=%s",devicePort,type(tableJson),json.encode(tableJson))\n \tlog.debug("enyi_2019 devicePort=%s,table转换ok",devicePort)\n\treturn tableJson\nend\n\n--服务器应答\ncreatResponse=function(jsonStr,messageNo)\n log.debug("enyi_2019 devicePort=%s,应答json=%s,messageNo=%s",devicePort,jsonStr,messageNo)--消息标号=时间戳(H)\n --local headerHex="5aa50100"..string.format("%08x",messageNo).."534445590200020100000000"\n local headerHex="5aa50100"..messageNo.."534445590200020100000000" --直接采用设备上报的 消息编号\n local jsonhex=StrtoHex(jsonStr)\n --报文长度\n local allLength=4+string.len(jsonhex)/2\n local cmd_length=string.format("%08x",allLength)\n local cmdHex=headerHex..cmd_length..jsonhex\n log.debug("enyi_2019 devicePort=%s,crc8 校验前cmdHex=%s",devicePort,cmdHex)\n local cmdHex=iota.appendHexCrc8(cmdHex,0);\n log.debug("enyi_2019 devicePort=%s,crc8 校验后cmdHex=%s",devicePort,cmdHex)\n local cmdHex=cmdHex.."000304"\n \n return cmdHex\nend\n\n--hex -> ASCII\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\nStrtoHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\nIsValid=function (data)\n\tlog.debug('enyi_2019:devicePort=%s,开始校验数据',devicePort)\n if data == nil or string.len(data)/2 < 100 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n return false\n end\n\n\tif string.sub(data,1,4)~="5aa5" or string.sub(data,-4,-1)~="0304" then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\t\n\t\n\t-- local moduleR = tostring(iota.hexToShort(data,2,'B'))\n\t-- if moduleR ~=tostring(moduleNoStrCheck) then\n -- errormsg = 'module is invalid='..moduleR\n -- errcode = 1003\n -- return false\n -- end\n log.debug('enyi_2019:devicePort=%s,校验通过',devicePort)\n\treturn true\t\nend\n\n\ngetMD5Response=function(deviceId,randomNum32)\n local HA1="59ABD5A817CCFA22CB0F1C3E3E77C4D9"\n local HA2=crypto.md5(deviceId..":"..randomNum32)\n local HA3=crypto.md5(string.upper(HA1)..":"..string.upper(HA2))\n return string.upper(HA3)\nend\n\ngetRandom32=function(num10)\t\n\tlocal num32="1000000000000000000000"..tostring(num10)\n\treturn num32\nend\n INLINE 2018-08-02 10:43:34.579+08 2019-01-04 17:31:12.962+08 2018-08-02 \N
+cc42ea9a-ff73-473a-8b2d-3b1da63c42c3 gdjw_pressure_6900 \N 1.0 dade7e83-25b6-4932-993c-6d886fec9843 dade7e83-25b6-4932-993c-6d886fec9843 f dade7e83-25b6-4932-993c-6d886fec9843 Lua --D:\\SVN\\201812项目\\20181207待接入项目\\2、广东江威设备接入-孟凡侠\\R485通讯通讯协议.doc\nstart=function()\n local endian = 'B'\n local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("gdjw_pressure_6900 设备模块 m=%s ",moduleNo)\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("gdjw_pressure_6900,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '采集超时'} \n\t log.debug("gdjw_pressure_6900 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n--0103021388b512\n--"pressure": 5000\nunmarshall=function(hex,moduleNoStr)\n log.debug("gdjw_pressure_6900 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local pressure =iota.hexToShort(hex,3,'B')\n \n out.data = { \n pressure=tonumber(string.format('%0.3f',pressure))\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("gdjw_pressure_6900 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = string.format('返回数据长度无效=%s≠7',string.len(data)/2)\n errcode = 1002\n return false\n end\n \n local dataMoudle=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataMoudle) then\t\n errormsg = string.format('模块号无效=%s≠%s',dataMoudle,moduleCheck)\n errcode = 1003\n return false\n end\n return true\n--crc\nend\n INLINE 2018-12-29 09:50:49.587+08 2019-03-04 13:41:42.508+08 2018-12-29 \N
+b60cccff-fd27-4bd5-9d9b-95059739c1bb 11 \N There Are Some Things Money Can't Buy. For Everything Else, There's MasterCard. 11 fdda6836-c22c-4553-934b-5ed334d2d1fc fdda6836-c22c-4553-934b-5ed334d2d1fc f fdda6836-c22c-4553-934b-5ed334d2d1fc Lua if (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \n INLINE 2018-05-10 10:38:02.423+08 2018-05-10 10:38:02.423+08 2018-05-10 \N
+1b896530-ebfa-432d-83e9-25aa5d2177a0 fs_vibrateWire_1400 \N 老版本振弦采集仪 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\nstart=function()\n\tlog.debug("start load fs_1401 moudle = %s ",device.uplink.props.module)\n --log.debug("fs_1401 root device = %s", json.encode(device))\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n \n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n \tfor index,child in pairs(subdevices) do \n \t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("fs_1401 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t moduleNo=child.props.moduleId\n\t\t\t channelNo=child.props.channelId \n\t\t\t log.debug("fs_1401 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n\t\t -- local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexWord(buff, 10, endian) ---2: 传感器类型\n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x01, endian) -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian) -- 1: 通道号\n\t\t\tbuff=iota.appendHexByte(buff, 0x67, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0)\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlog.debug("fs_1401 module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tlocal result='{}'\n if ok then \n\t\t\t result = unmarshall(resp,child,tostring(moduleNo),tostring(channelNo))--解析单条数据\n\t\t\t table.insert(out.data,result)\n\t\t\telse\n\t\t\t log.debug("fs_1401 module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("fs_1401:".."subdevices是nil")\n \treturn nil\n end\n\tlocal resultData =json.encode(out)\n ctx:done(resultData)\nend\n\n\n--000A000181016F0044E59D5D43BA104741CF000094A8 moduleId=1 channelID=1\n--000A0FA681096F0044E59D5D43BA104741CF00009659 moduleId=4006 channelID=9 原始值 frequency=1836.918 temp=25.875 \nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n\t--local subModuleId=module\n\t--local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n log.debug("fs_1401 module=%s,channel=%s [%s] recv=[%s].",subModuleId,subChannelId,subDevice.id,hex)\n if ErrorCode then \n\t\tlocal freState=iota.hexToByte(hex,7,'B')%16\n\t\tlocal tempState=iota.hexToByte(hex,7,'B')-16\n\t\t\n\t\tif freState ~= 0 or tempState ~= 0 then\n\t\t\tif freState ~=0 then\n\t\t\t\tif tempState ~=0 then\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE_TEMPWIRE'\n\t\t\t\terrcode = 140103\n\t\t\t\tlog.debug('fs_1401 ERR_VIBRW_FREWIRE_TEMPWIRE. module=%s,channel=%s ',subModuleId,subChannelId)\t\t\t \n\t\t\t\tend\t\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE'\n\t\t\t\terrcode = 140101\n\t\t\t\t\n\t\t\tend\t\t\t\t\t\t\n\t\t\terrormsg = 'ERR_VIBRW_TEMPWIRE'\n\t\t\terrcode = 140102\n\t\tend\n\t\t\n\t\tlocal freq=iota.hexToFloat(hex,8,'B',3)\n\t\tlocal am=iota.hexToFloat(hex,12,'B',3)\n local temp = iota.hexToFloat(hex,16,'B',3)\n log.debug("fs_1401 module=%s,channel=%s [%s] [freq=%s,am=%s,temp=%s].",subModuleId,subChannelId,subDevice.id,freq,am,temp) \n\t\tlocal Phy=0\n --if subDevice.device.formula == "ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)" then --振弦公式\n\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K or 0\n\t\t\t\tlocal kt = subDevice.uplink.capabilities[1].formula.props.Kt or 0\n\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo or 0\n\t\t\t\tlocal t0 = subDevice.uplink.capabilities[1].formula.props.To or 0\n log.debug("fs_1401 module=%s,channel=%s [%s] formula params :k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",subModuleId,subChannelId,subDevice.id,k,kt,f0,t0,freq,temp,am)\n\t\t\t if k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\tend\n\t\t--end\n\t\tsubData.data={\n\t\t\t\t\tfrequency=freq,\n\t\t\t\t\ttemperature=temp,\n\t\t\t\t\tam=am,\n \tphysicalvalue=Phy\n\t\t\t\t\t}\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\n\nIsValid=function(data,moduleId,channelId)\n if data == nil or string.len(data)/2 ~= 22 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('fs_1401 : Data is nil or invalid length. module=%s channel=%s recv = %s',moduleId,channelId,data)\n return false\n end\n if iota.hexToByte(data,4,'B') == 0xc0 then\n errcode = 1001\n errormsg = 'Modbus Error Code ' \n\t\tlog.debug('fs_1401 : Modbus Error Code = %s. module=%s channel=%s recv = %s',iota.hexToByte(data,5,'B'),moduleId,channelId,data)\n return false\n end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,2,'B'))\n\tif moduleId~= moduleStr then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug('fs_1401 : module error [errmodule=%s]. module=%s channel=%s recv = %s',moduleStr,moduleId,channelId,data)\n return false\n end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,5,'B'))\n\tif(channelStr=='0') then\n\t channelStr='1'\n\tend\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('fs_1401 : channel error [errchannel=%s]. module=%s channel=%s recv = %s',channelStr,moduleId,channelId,data)\n\t\treturn false\n\tend\n return true\nend\n INLINE 2018-08-27 14:25:12.584+08 2018-08-27 15:50:48.672+08 2018-08-27 \N
+907b7ad5-da60-4249-ada4-f02a812acdac jzyg_weather_46 \N 锦州阳光气象科技有限公司 1.0 e54b85b0-151e-4b74-b360-a8ae65addd46 e54b85b0-151e-4b74-b360-a8ae65addd46 f e54b85b0-151e-4b74-b360-a8ae65addd46 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("load script %s, moduleId=%s", "jzyg_weather_46.lua", device.props.moduleId or "[nil]")\nend\n\nonData=function(hex)\n --350001030C171220074007010C007D007D007D007D007D02A90254025402540254271B007D271B037C0238037C0238037C02380238010E0017007000680002001E0005000500050005000500050005001801C403FF03FF03FF03FF03FF03FF03FF1600008700647171\n log.debug("jzyg_weather_46 onData(%s), dev=%s", hex, json.encode(device) )\n local out={\n type=1,\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\n local ambientTemperature =iota.hexToShort(hex,11,'B')*0.1\n local temperature1 =iota.hexToShort(hex,13,'B')*0.1\n local temperature2 =iota.hexToShort(hex,15,'B')*0.1\n local temperature3 =iota.hexToShort(hex,17,'B')*0.1\n local temperature4 =iota.hexToShort(hex,19,'B')*0.1\n local temperature5 =iota.hexToShort(hex,21,'B')*0.1\n local dewPoint =iota.hexToShort(hex,23,'B')*0.01\n local ambientHumidity =iota.hexToShort(hex,25,'B')*0.1\n local groundHumidity1 =iota.hexToShort(hex,27,'B')*0.1\n local groundHumidity2 =iota.hexToShort(hex,29,'B')*0.1\n local groundHumidity3 =iota.hexToShort(hex,31,'B')*0.1\n local CO2 =iota.hexToShort(hex,33,'B')*0.1\n local evaporation =iota.hexToShort(hex,35,'B')*0.1\n local airPressure =iota.hexToShort(hex,37,'B')*0.1\n local instantaneousTotalRadiation1 =iota.hexToShort(hex,39,'B')*1\n local instantaneousScatteredRadiation =iota.hexToShort(hex,41,'B')*1\n local instantaneousDirectRadiation =iota.hexToShort(hex,43,'B')*1\n local instantaneousTotalRadiation2 =iota.hexToShort(hex,45,'B')*1\n local instantaneousNetRadiation =iota.hexToShort(hex,47,'B')*1\n local instantaneousPhotosyntheticRadiation =iota.hexToShort(hex,49,'B')*1\n local instantaneousUltravioletRadiation =iota.hexToShort(hex,51,'B')*1\n local windDirection =iota.hexToShort(hex,53,'B')*1\n local windSpeed =iota.hexToShort(hex,55,'B')*0.1\n local windSpeed2mins =iota.hexToShort(hex,57,'B')*0.1\n local windSpeed10mins =iota.hexToShort(hex,59,'B')*0.1\n local intervalRainfall =iota.hexToShort(hex,61,'B')*0.1\n local intervalSunshine =iota.hexToShort(hex,63,'B')*1\n local sumTotalRadiation1 =iota.hexToShort(hex,65,'B')*0.001\n local sumScatteredRadiation =iota.hexToShort(hex,67,'B')*0.001\n local sumDirectRadiation =iota.hexToShort(hex,69,'B')*0.001\n local sumTotalRadiation2 =iota.hexToShort(hex,71,'B')*0.001\n local sumNetRadiation =iota.hexToShort(hex,73,'B')*0.001\n local sumPhotosyntheticRadiation =iota.hexToShort(hex,75,'B')*0.001\n local sumUltravioletRadiation =iota.hexToShort(hex,77,'B')*0.001\n local dailyRainfall =iota.hexToShort(hex,79,'B')*0.1\n local sunshineHour =iota.hexToShort(hex,81,'B')*1\n local dailyTotalRadiation1 =iota.hexToShort(hex,83,'B')*0.001\n local dailyScatteredRadiation =iota.hexToShort(hex,85,'B')*0.001\n local dailyDirectRadiation =iota.hexToShort(hex,87,'B')*0.001\n local dailyTotalRadiation2 =iota.hexToShort(hex,89,'B')*0.001\n local dailyNetRadiation =iota.hexToShort(hex,91,'B')*0.001\n local dailyPhotosyntheticRadiation =iota.hexToShort(hex,93,'B')*0.001\n local dailyUltravioletRadiation =iota.hexToShort(hex,95,'B')*0.001\n local illuminance=iota.hexToShort(hex,97,'B')*10\n local voltage =iota.hexToShort(hex,99,'B')*0.1\n local PM25 =iota.hexToShort(hex,101,'B')\n\n \n \n \n\n out.data = { --需要测试\n ambientTemperature = ambientTemperature,\n temperature1 = temperature1,\n temperature2 = temperature2,\n temperature3 = temperature3,\n temperature4 = temperature4,\n temperature5=temperature5,\n dewPoint=dewPoint,\n ambientHumidity=ambientHumidity,\n groundHumidity1=groundHumidity1,\n groundHumidity2=groundHumidity2,\n groundHumidity3=groundHumidity3,\n CO2=CO2,\n evaporation=evaporation,\n airPressure=airPressure,\n instantaneousTotalRadiation1=instantaneousTotalRadiation1,\n instantaneousScatteredRadiation=instantaneousScatteredRadiation,\n instantaneousDirectRadiation=instantaneousDirectRadiation,\n instantaneousTotalRadiation2=instantaneousTotalRadiation2,\n instantaneousNetRadiation=instantaneousNetRadiation,\n instantaneousPhotosyntheticRadiation=instantaneousPhotosyntheticRadiation,\n instantaneousUltravioletRadiation=instantaneousUltravioletRadiation,\n windDirection=windDirection,\n windSpeed=windSpeed,\n windSpeed2mins=windSpeed2mins,\n windSpeed10mins=windSpeed10mins,\n intervalRainfall=intervalRainfall,\n intervalSunshine=intervalSunshine,\n sumTotalRadiation1=sumTotalRadiation1,\n sumScatteredRadiation=sumScatteredRadiation,\n sumDirectRadiation=sumDirectRadiation,\n sumTotalRadiation2=sumTotalRadiation2,\n sumNetRadiation=sumNetRadiation,\n sumPhotosyntheticRadiation=sumPhotosyntheticRadiation,\n sumUltravioletRadiation=sumUltravioletRadiation,\n dailyRainfall=dailyRainfall,\n sunshineHour=sunshineHour,\n dailyTotalRadiation1=dailyTotalRadiation1,\n dailyScatteredRadiation=dailyScatteredRadiation,\n dailyDirectRadiation=dailyDirectRadiation,\n dailyTotalRadiation2=dailyTotalRadiation2,\n dailyNetRadiation=dailyNetRadiation,\n dailyPhotosyntheticRadiation=dailyPhotosyntheticRadiation,\n dailyUltravioletRadiation=dailyUltravioletRadiation,\n illuminance=illuminance,\n voltage=voltage,\n PM25=PM25,\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("jzyg_weather_46 Data -- %s",json.encode(out))\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n local moduleNo=iota.hexToShort(data,1,'B')\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n if tonumber(device.props.moduleId)~=moduleNo then\n errormsg = 'moduleId is wrong'\n errcode = 1001\n return false\n end \n if string.len(data)~=210 then\n errormsg = 'length is not fit'\n errcode = 1001\n return false\n end \n --iota.checkPlusSum16\n return true\n--crc\nend\n\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n INLINE 2017-12-20 14:59:37.771+08 2018-02-28 18:32:12.223+08 2017-12-20 \N
+87d43c5d-15f4-462d-85d9-dae114bfa3ab GZM_5002_xieyi \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//\n\nstart = function()\n ok, resp = ctx:ssend('01020304', 5000)\nend\n\nonData = function(hex)\n --log.debug("fs_gzm_2018 收到数据=%s", hex)\n --log.debug("fs_gzm_2018 device =%s", json.encode(device))\n --log.debug("fs_gzm_2018subdevices data is =%s", json.encode(device.dnlinks[1].devices))\n\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n sData = HextoStr(hex)\n --log.debug('fs_gzm_2018:sData是 %s', sData)\n --获取子字符串表\n local dataTable = json.decode(sData)\n\n --log.debug("fs_gzm_2018 dataTable=%s",json.encode(dataTable))\n\n --分析单类数据\n if dataTable ~= nil then\n for k, sensorValue in ipairs(dataTable.allNodeDatas) do\n --log.debug("fs_gzm_2018 k=%s,sensorValue=%s",k,json.encode(sensorValue))\n if k >= 1 then\n local factorId = tonumber(sensorValue.factorid)\n local factorName = getFactorName(factorId)\n local moduleNo = tonumber(sensorValue.moduleId)\n local channelNo = tonumber(sensorValue.channel)\n --log.debug( 'fs_gzm_2018 k=%s,factorId=%s,factorName=%s,moduleNo=%s,channelNo=%s',k,factorId,factorName,moduleNo,channelNo)\n --解析单条数据\n for kdata, vdata in ipairs(sensorValue.data) do\n --log.debug('fs_gzm_2018:遍历解析单条数据 键=' .. tostring(kdata) .. ' 值=' .. json.encode(vdata))\n\n local anglex = tonumber(vdata.value[1])\n local angley = tonumber(vdata.value[2])\n --log.debug('fs_gzm_2018 factorid=%s,vdata.value[3]=%s', factorId, vdata.value[3])\n local force --轴力\n\n local length_cj --模板沉降\n local length_sp --水平位移\n\n if factorId == 0 then --模板沉降\n length_cj = tonumber(vdata.value[3])\n elseif factorId == 1 then --水平位移\n length_sp = tonumber(vdata.value[3])\n elseif factorId == 2 then --轴力\n force = tonumber(vdata.value[3])\n else\n --log.debug('fs_gzm_2018 factorId=%s,type=%s', factorId, type(factorId))\n end\n\n local timeStamp = tonumber(vdata.time) / 1000 --时间戳\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamp)\n --log.debug('fs_gzm_2018 timeStamp=%s,recordTime=%s', timeStamp, recordTime)\n --获取通道设备deviceId\n local childDevice = getDeviceInfo(moduleNo, channelNo)\n\n local deviceId\n if childDevice ~= nil then\n --log.debug("fs_gzm_2018: %s节点 模块%s,通道%s原型childDevice=%s",factorName,moduleNo,channelNo,json.encode(childDevice))\n deviceId = childDevice.id\n else\n --log.debug('fs_gzm_2018:%s节点 deviceId为nil:m=%s,c=%s', factorName, moduleNo, channelNo)\n end\n\n local data1 = {\n data = {\n x = anglex,\n y = angley,\n force = force,\n settling = length_cj,\n displacement = length_sp\n },\n device = deviceId,\n time = recordTime,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n end\n else\n log.debug('fs_gzm_2018 数据不完整')\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n --log.debug('fs_gzm_2018 resultData=%s', json.encode(out))\n ctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("fs_gzm_2018 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug("fs_gzm_2018:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n --log.debug('fs_gzm_2018 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n else\n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.channelId\n --log.debug('fs_gzm_2018 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n end\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tonumber(channelStrCheck) == tonumber(channelNoId) then\n --log.debug('fs_gzm_2018: m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('fs_gzm_2018: m=%s c=%s subdevices是nil', moduleNoId, channelNoId)\n return nil\n end\nend\n\nIsValid = function(alldata)\n log.debug('fs_gzm_2018 校验开始')\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n log.debug('fs_gzm_2018: 校验失败 Data is nil')\n return false\n end\n\n if string.sub(alldata, 1, 8) ~= '7b22616c' and string.sub(alldata, -2, -1) ~= '7d' then\n errormsg = 'CMD is wrong'\n errcode = 1002\n log.debug('fs_gzm_2018: 校验失败 CMD is wrong')\n return false\n end\n\n log.debug('fs_gzm_2018: 校验通过')\n return true\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = string.sub(hex,2*i-1,2*i)\n local ascii=string.char(tonumber(bi,16))\n str = str .. ascii\n end\n return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ngetFactorName = function(num)\n local NO = tonumber(num + 1)\n local FactorNames = {'沉降', '水平', '轴力', '倾斜'}\n local FactorName = FactorNames[NO]\n return FactorName\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend INLINE 2018-08-02 10:44:13.645+08 2019-08-07 13:45:30.799+08 2018-08-02 \N
+b8292b20-401c-4add-9928-fbcda8b8985f nengh_tempHumi_8304 \N 1.0 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b f ad0cd544-aed4-4670-9d17-f3e717a9a59b Lua \n--D:\\SVN\\201811项目\\智慧农业待接入设备\\NHSF48AR土壤水分(温度).pdf\nstart=function()\n local endian = 'B'\n local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("nengh_temphunmi 设备模块通道 接口获取 m=%s ",moduleNo)\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("nengh_temphunmi,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '超时'} \n\t log.debug("nengh_temphunmi m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n\n--0103040702071de17e\n--temperature=17.94\n--humidity=18.21\n\n\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("nengh_temphunmi m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local temperature =iota.hexToUShort(hex,3,'B')/100\n\t\tlocal humidity =iota.hexToUShort(hex,5,'B')/100\n \n out.data = { \n temperature=temperature,\n\t\t\t\thumidity=humidity\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("nengh_temphunmi m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n INLINE 2018-11-22 17:01:21.076+08 2018-11-22 17:18:23.068+08 2018-11-22 \N
+7e1e8da3-20b2-4657-bfa2-7a39b17fdd6b fs_1503 \N 1503 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f f16833ab-a4a4-45f5-9b39-ad2c66e488f6 Lua -- 001626C68184DEF28AA5120D61FFDACFBEFFC22929F831\n-- 000126C6810D6FFDA1FFDACFBEF831\nstart=function() \n log.debug("floatToHex:%s", iota.floatToHex(-101.2))\n\tlog.debug("device.uplink.props.module=%s", device.uplink.props.module)\n log.debug("json:%s", json.encode(capability))\n local endian = 'B'\n local buff=''\n buff=iota.appendHexWord(buff, 21, endian) --2: 0015 协议类型=21\n buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 2: 0538 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 1: 01 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,3000)\n local result = unmarshall(ok,resp)\n log.debug("result=%s",result)\n ctx:done(result)\nend\n\nunmarshall=function(ok, hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (ok and string.len(hex) >=23 ) then\n -- 2 2 1 4 4 2\n -- 0001 26C6 81 0D6FFDA1 FFDACFBE F831\n \tlocal scale = 1000000.00;\n\t\tlocal temp = iota.hexToShort(hex,11,'B')/100.0;\n local xa = iota.hexToInt(hex,13,'B')/scale;\n local ya = iota.hexToInt(hex,17,'B')/scale;\n if (temp>45) then\n -- invalid data\n out.data={\n }\n out.result={\n code=1002,\n msg="over range"\n }\n else\n out.data = {\n x=xa,\n y = ya,\n \t\ttemp = temp,\n }\n end\n else\n \tlocal msg\n if ok then\n msg= 'Invalid Msg, len='..string.len(hex)\n else \n msg="Timeout" \n end\n out.result = {code=1001,msg=msg}\n out.data = {}\n end\n return json.encode(out)\nend INLINE 2017-08-12 17:26:40.466+08 2019-03-08 09:22:17.908+08 \N \N
+9e7ff46c-0808-4b46-878d-0614995edc11 geot_1539 \N 基泰4通道485采集仪非振弦 1.0 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 f d3f1aa63-8397-45a4-af26-15a0f91d1e13 Lua --//04 项目资料/2017-05/南京基泰/四通道模块通讯协议.doc\n--require "functions" -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {} //设备信息\nprotocol=> {} //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\n-- start=function()\n\n -- ok,resp=ctx:ssend("01020304",15000)\n -- log.debug("geot_1539:".."测试下发01020304正常")\n-- end\n\nonData=function (hex)\n\t--主动上传式\n\tlog.debug("geot_1539:Received=>%s",hex)\n\t-- var_dump(ctx,3,"")\n\tlocal out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\t\n\t\t\n\n\t\tlocal IDX_DIRECTION_X=27;\n\t\tlocal IDX_DIRECTION_Y=29;\n\t\tlocal Data_X \n\t\tlocal Data_Y\n\t\tlocal anglex\n\t\tlocal angley\n\t\tlocal pc\n\t\tlocal phy\n\t\tfor i=0,3,1 do\n\t\t\n\t\t\tlocal subDevice=getDeviceInfo("default",i+1)\n\t\t\tif subDevice==nil then\n\t\t\t log.debug("geot_1539:c=%s break for loop",i+1)\n\t\t\t break\n\t\t\tend\n\t\t\tlocal deviceId=subDevice.id\n\t\t\tlocal pc = subDevice.props.model --获取子设备的型号\n\t\t\tlog.debug("geot_1539:c=%s pc=%s device=%s",i+1,pc,json.encode(subDevice))\n if pc == 'GT-MCU4-MI600T'then -- or pc == 'GT-MCU4-MI600E' \n\t\t\t \n\t\t\t\tData_X = iota.hexToShort(hex, IDX_DIRECTION_X + i* 6,'B')\n\t\t\t\tData_Y = iota.hexToShort(hex, IDX_DIRECTION_Y + i* 6,'B')\n\t\t\t\tlog.debug("geot_1539:Data_X=%s,Data_Y=%s",Data_X,Data_Y)\n\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\t\t--公式计算\n\t\t\t\tif subDevice.uplink.capabilities[1].formula.metaid == "72133db4-abf6-4073-bc7f-b99c12aca33c" then -- metaid 待确定\n\t\t\t\t\tlocal K1 = subDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\tlocal K2 = subDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\tlocal K3 = subDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\tlocal Fo = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\tlocal Kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\tlocal To = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\tlog.debug("geot_1539: i=%s基泰公式参数=%s,%s,%s,%s,%s",i,K1,K2,K3,Fo,To)\n\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\tPhy=nil\n\t\t\t\t\telse\n\t\t\t\t\t\tTemp=0;--测斜模块无温度 默认温度0\t\t\t\t\t\n\t\t\t\t\t\tlocal Fi=Data_X \n\t\t\t\t\t\tanglex = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\n\t\t\t\t\t\tif Data_Y~=nil then\n\t\t\t\t\t\t\tFi=Data_Y\n\t\t\t\t\t\t\tangley = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\t\t\t\t\t\t\n\t\t\t\t\t\tend\n\t\t\t\t\t\tlog.debug("geot_1539: c=%s anglex=%s angley=%s",i+1,anglex,angley)\n\t\t\t\t\tend \n\t\t\t\tend\n\t\t\t\t\n\t\t\t\tlocal data1={\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex=anglex,\n\t\t\t\t\t\t\t\t\tangley=angley\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\t\t\t\t\t\t\t\n\t\t\telse --非 倾角的其他传感器\n\t\t\t\t\tData_X = iota.hexToUInt(hex,27 + i*6,'B')\n log.debug("geot_1539: c=%s Data_X=%s ",i+1,Data_X)\n if Data_X == 0xffffffff then \n\t\t\t\t\t log.debug("geot_1539: c=%s Data_X == 0xffffffff")\n\t\t\t\t\t\tbreak \n\t\t\t\t\tend\n local osBuilder = string.sub(hex,2*(27+i*6)+1,2*(27+i*6)+8)\n\t\t\t\t\tlog.debug("geot_1539: c=%s osBuilder=%s",i+1,osBuilder)\n osBuilder = string.format('%s%s%s%s',string.sub(osBuilder,7,8),string.sub(osBuilder,5,6),string.sub(osBuilder,3,4),string.sub(osBuilder,1,2))\n\t\t\t\t\tlog.debug("geot_1539: c=%s reverse(osBuilder)=%s ",i+1,osBuilder)\n local sign = 0\n if tonumber(string.sub(osBuilder,3,3)) == 8 then\n sign = -1 \n else \n sign = 1\n end\n\t\t\t\t\t\n Data_X = tonumber(string.sub(osBuilder,4,-1))*sign\t\n log.debug("geot_1539: c=%s Data_X=%s,osBuilder=%s,sign=%s ",i+1,Data_X,osBuilder,sign)\t\t\t\t\t\n\t\t\t\t\t\t\t--公式计算 P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)\n\t\t\t\t\tif subDevice.uplink.capabilities[1].formula.metaid == "72133db4-abf6-4073-bc7f-b99c12aca33c" then -- metaid 待确定\n\t\t\t\t\t\tlocal K1 = subDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\tlocal K2 = subDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\tlocal K3 = subDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\tlocal Fo = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\tlocal Kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\tlocal To = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\tlog.debug("geot_1539: c=%s 公式48参数=%s,%s,%s,%s,%s",i+1,K1,K2,K3,Fo,To)\n\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tTemp=0;--测斜模块无温度 默认温度0\t\t\t\t\t\n\t\t\t\t\t\t\tlocal Fi=Data_X \n\t\t\t\t\t\t\tphy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\t\t\t\t\t\n\t\t\t\t\t\t\tlog.debug("geot_1539: c=%s phy=%s",i+1,phy)\n\t\t\t\t\t\tend \n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\tlocal data1={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tphysicalvalue=phy\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1\n\t\t\t\t\t}\n\t\t\t\t\t--若是单轴\n\t\t\t\t\tif pc == 'GT-MCU4-MI600E'then \n\t\t\t\t\t\tdata1={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tanglex=phy\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t}\n\t\t\t end\n\t\t\t\t \n\t\t\t\t\ttable.insert(out.data,data1)\t\t\t\t\t\t\t\t\n\t\t\tend\n\t\t\t\n\t\t\t\n\t\tend\n\tend\n\tlocal resultData =json.encode(out)\n log.debug("geot_1539: out data=%s", json.encode(out))\n ctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("geot_1539 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("geot_1539:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("geot_1539 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t log.debug("geot_1539 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) or moduleNoId=="default" then --添加 默认无模块号 依靠通道号校验(仅限单模块号采集仪)\n\t\t \t if tostring(channelStrCheck)== tostring(channelNoId) then \n \t\t log.debug("geot_1539: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("geot_1539: m=%s , c=%s, child=nil",moduleNoId,channelNoId)\n \treturn nil\n end\nend\n\nIsValid=function (data)\n\tlog.debug('geot_1539:开始校验数据')\n if data == nil or string.len(data)/2 ~= 51 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n return false\n end\n\n\tif iota.hexToByte(data,0,'B') ~= 0xFF then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\t\n log.debug('geot_1539:校验通过')\n\treturn true\n\t\nend\n INLINE 2018-04-02 10:47:17.157+08 2019-07-12 15:54:53.788+08 2018-04-02 \N
+3ba4748d-4a2e-4b5a-84ff-3e36e397671d mas_vibrateWire_1401 \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\nstart=function()\n\tlog.debug("start load mas_1401 moudle = %s ",device.uplink.props.module)\n --log.debug("mas_1401 root device = %s", json.encode(device))\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n \n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n \tfor index,child in pairs(subdevices) do \n \t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("mas_1401 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t moduleNo=child.props.moduleId\n\t\t\t channelNo=child.props.channelId \n\t\t\t log.debug("mas_1401 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n\t\t -- local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexWord(buff, 10, endian) ---2: 传感器类型\n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x01, endian) -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian) -- 1: 通道号\n\t\t\tbuff=iota.appendHexByte(buff, 0x67, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0)\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlog.debug("mas_1401 module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tlocal result='{}'\n if ok then \n\t\t\t result = unmarshall(resp,child,tostring(moduleNo),tostring(channelNo))--解析单条数据\n\t\t\t table.insert(out.data,result)\n\t\t\telse\n \t\tout.result={code=1001,msg='超时'}\n\t\t\t log.debug("mas_1401 module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("mas_1401 subdevices=nil")\n \treturn nil\n end\n\tlocal resultData =json.encode(out)\n log.debug("mas_1401 resultData=%s",resultData)\n ctx:done(resultData)\nend\n\n\n--000A000181016F0044E59D5D43BA104741CF000094A8 moduleId=1 channelID=1\n--000A0FA681096F0044E59D5D43BA104741CF00009659 moduleId=4006 channelID=9 原始值 frequency=1836.918 temp=25.875 \nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n\t--local subModuleId=module\n\t--local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n log.debug("mas_1401 module=%s,channel=%s [%s] recv=[%s].",subModuleId,subChannelId,subDevice.id,hex)\n if ErrorCode then \n\t\tlocal freState=iota.hexToByte(hex,7,'B')%16\n\t\tlocal tempState=iota.hexToByte(hex,7,'B')-16\n\t\t\n\t\tif freState ~= 0 or tempState ~= 0 then\n\t\t\tif freState ~=0 then\n\t\t\t\tif tempState ~=0 then\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE_TEMPWIRE'\n\t\t\t\terrcode = 140103\n\t\t\t\tlog.debug('mas_1401 ERR_VIBRW_FREWIRE_TEMPWIRE. module=%s,channel=%s ',subModuleId,subChannelId)\t\t\t \n\t\t\t\tend\t\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE'\n\t\t\t\terrcode = 140101\n\t\t\t\t\n\t\t\tend\t\t\t\t\t\t\n\t\t\terrormsg = 'ERR_VIBRW_TEMPWIRE'\n\t\t\terrcode = 140102\n\t\tend\n\t\t\n\t\tlocal freq=iota.hexToFloat(hex,8,'B',3)\n\t\tlocal am=iota.hexToFloat(hex,12,'B',3)\n local temp = iota.hexToFloat(hex,16,'B',3)\n log.debug("mas_1401 module=%s,channel=%s [%s] [freq=%s,am=%s,temp=%s].",subModuleId,subChannelId,subDevice.id,freq,am,temp) \n\t\tlocal Phy=0\n --if subDevice.device.formula == "ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)" then --振弦公式\n\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K or 0\n\t\t\t\tlocal kt = subDevice.uplink.capabilities[1].formula.props.Kt or 0\n\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo or 0\n\t\t\t\tlocal t0 = subDevice.uplink.capabilities[1].formula.props.To or 0\n log.debug("mas_1401 module=%s,channel=%s [%s] formula params :k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",subModuleId,subChannelId,subDevice.id,k,kt,f0,t0,freq,temp,am)\n\t\t\t if k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\tend\n\t\t--end\n\t\tsubData.data={\n\t\t\t\t\tfrequency=freq,\n\t\t\t\t\ttemperature=temp,\n\t\t\t\t\tam=am,\n \tphysicalvalue=Phy\n\t\t\t\t\t}\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\n\nIsValid=function(data,moduleId,channelId)\n \tlocal datalen=string.len(data)/2\n if data == nil or datalen ~= 22 then\n errormsg = string.format('返回数据长度无效=%s≠22[%s]',datalen,data)\n errcode = 1002\n\t\tlog.debug('mas_1401 Data is nil or invalid length. module=%s channel=%s recv = %s',moduleId,channelId,data)\n return false\n end\n local dataCmd=iota.hexToByte(data,4,'B')\n if dataCmd== 0xc0 then\n errcode = 1003\n errormsg = string.format('返回数据功能码无效=c0[%s]',data)\n\t\tlog.debug('mas_1401 Modbus Error Code = %s. module=%s channel=%s recv = %s',iota.hexToByte(data,5,'B'),moduleId,channelId,data)\n return false\n end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,2,'B'))\n\tif moduleId~= moduleStr then\t\n errormsg = string.format('返回数据模块号无效=%s≠%s[%s]',moduleStr,moduleId,data)\n errcode = 1004\n\t\tlog.debug('mas_1401 module error [errmodule=%s]. module=%s channel=%s recv = %s',moduleStr,moduleId,channelId,data)\n return false\n end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,5,'B'))\n\tif(channelStr=='0') then\n\t channelStr='1'\n\tend\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n errormsg = string.format('返回数据通道号无效=%s≠%s[%s]',channelStr,channelId,data)\n\t\terrcode = 1004\n\t\tlog.debug('mas_1401 channel error [errchannel=%s]. module=%s channel=%s recv = %s',channelStr,moduleId,channelId,data)\n\t\treturn false\n\tend\n return true\nend\n INLINE 2018-06-15 09:29:49.606+08 2020-06-16 10:24:26.092+08 2018-06-15 \N
+ea1b9563-b435-48d2-b5d5-6ac8887aa15d 11 \N There Are Some Things Money Can't Buy. For Everything Else, There's MasterCard. 11 fdda6836-c22c-4553-934b-5ed334d2d1fc fdda6836-c22c-4553-934b-5ed334d2d1fc f fdda6836-c22c-4553-934b-5ed334d2d1fc Lua if (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \n INLINE 2018-05-10 10:47:40.019+08 2018-05-10 10:47:40.019+08 2018-05-10 \N
+a0c8ab50-1f6a-43dd-b2e0-7e185e5c3c00 bl_force_1 \N 称重 1.0 4d2bdba7-f602-4d5b-b066-82902bbc7472 4d2bdba7-f602-4d5b-b066-82902bbc7472 f 4d2bdba7-f602-4d5b-b066-82902bbc7472 Lua --//协议参考: Documents/PMO/02 产品协议/外购产品协议/拉线位移通讯协议2013.doc\nstart=function()\n log.debug("bl_lvdt_9101:device=%s",json.encode(device))\n log.debug("load script %s, moduleId=%s", "bl_lvdt_9101.lua", device.uplink.props.module or device.props.moduleId)\n\tlocal moduleNo=device.props.moduleId or device.uplink.props.module \n \tif tonumber(moduleNo) > 255 then\n local errout={\n data ={},\n result = {code = 1004,msg = '无效的模块号>255'}\n }\n\n local errresult = json.encode(errout)\n ctx:done(errresult)\n end\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 0x03, endian)\n buff=iota.appendHexWord(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n \tbuff=iota.appendHexByte(buff, 0x01, endian) --1: CMD 1\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n end\n ctx:done(result)\nend\n--170302fffd71f6 moduleId=23\n--"elongationIndicator": -3\nunmarshall=function(hex,moduleNoStr)\n log.debug("bl_lvdt_9101:data=%s",hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n -- 170302fffd71f6\n \n local elongation = iota.hexToShort(hex,3,'B')\n out.data = {\n force=elongation\n }\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data,moduleNoStrCheck)\n log.debug(string.sub(data,1,12))\n if data == nil or string.len(data) ~= 14 or iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = string.format('无效的数据,长度≠14 或CMD≠0x03')\n errcode = 1001\n return false\n end\n local dataModule=iota.hexToByte(data,0,'B')\n if moduleNoStrCheck ~= tostring(dataModule) then\n errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleNoStrCheck)\n errcode = 1004\n return false\n end\n return true\nend\n \n\n\n INLINE 2018-04-02 11:05:37.604+08 2019-01-30 16:20:51.764+08 2018-04-02 \N
+cabb8dc7-293f-4cb1-b1e9-81e637fd8faf nengh_PH_8303 \N 1.0 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b f ad0cd544-aed4-4670-9d17-f3e717a9a59b Lua \n--D:\\SVN\\201811项目\\智慧农业待接入设备\\NH51Y土壤盐分电导率一体化传感器说明书V1.1-170510.pdf\nstart=function()\n local endian = 'B'\n local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("nengh_PH 设备模块通道 接口获取 m=%s ",moduleNo)\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("nengh_PH,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '超时'} \n\t log.debug("nengh_PH m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("nengh_PH m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local ph =iota.hexToUShort(hex,3,'B')/100\n \n out.data = { \n ph=ph \n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("nengh_PH m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2018-11-20 15:16:51.179+08 2018-11-22 17:11:11.633+08 2018-11-20 \N
+28d1a5bb-346e-4a5e-8854-a0c47f8357b7 CZJTM_acqunit_3002 \N 1.0 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 f d5fa5193-b237-4a60-b82a-165c033e2596 Lua start = function()\n --log.debug("CZJTM_acqunit_3002 device = %s", json.encode(device))\n local testDate = getDateTimeHexStr()\n log.debug('CZJTM_acqunit_3002 testDate = %s', testDate)\n local endian = 'B'\n local buff = ''\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do\n local moduleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n local channelNo = tonumber(child.uplink.props.channel)\n log.debug('CZJTM_acqunit_3002 子设备模块通道 接口获取 m=%s,c=%s ', moduleNo, channelNo)\n\n local projectId = 0\n local buff = 'f00f'\n buff = iota.appendHexWord(buff, 0, endian) ---1: 工程号\n buff = iota.appendHexByte(buff, moduleNo, endian) -- 2: 模块号\n buff = iota.appendHexByte(buff, 0xf7, endian) -- 3: 指令: f7 = 采集 --f3 脱机停止\n buff = buff .. '0101'\n --buff=iota.appendHexWord(buff, 0, endian) -- 4: 设备识别码(通道号)\n\n --local BCDdateStr=os.date("%y%m%d%H%M%S", os.time()) --5:日期\n local dataStr = getDateTimeHexStr()\n log.debug('CZJTM_acqunit_3002 dataStr=%s ', dataStr)\n buff = buff .. dataStr\n buff = buff .. '01000000000000000000000000000000'\n buff = iota.appendHexCrc(buff, endian, 0)\n ok, resp = ctx:ssend(buff, 15000)\n log.debug('CZJTM_acqunit_3002 module=%s,channel=%s [%s] ssend=[%s].', moduleNo, channelNo, child.id, buff)\n local result = '{}'\n if ok then\n result = unmarshall(resp, child, tostring(moduleNo), tostring(channelNo))\n --解析单条数据\n table.insert(out.data, result)\n else\n log.debug('CZJTM_acqunit_3002 module=%s,channel=%s [%s] recvd data error.', moduleNo, channelNo, child.id)\n end\n end\n else\n log.debug('CZJTM_acqunit_3002:' .. 'subdevices是nil')\n return nil\n end\n local resultData = json.encode(out)\n log.debug('CZJTM_acqunit_3002 resultData=%s',resultData)\n ctx:done(resultData)\nend\n\n--f00f000001f701011303060b100101000000000000000000000000000000b125\n--f00f000101e901011303060b110902001cbb1f4e2000000000000000006a55c1\nunmarshall = function(hex, subDevice, subModuleId, subChannelId)\n local subData = {\n data = {},\n device = subDevice.id,\n type = 1\n }\n\n --local subModuleId=module\n --local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n local ErrorCode = IsValid(hex, subModuleId, subChannelId)\n log.debug('CZJTM_acqunit_3002 module=%s,channel=%s [%s] recv=[%s].', subModuleId, subChannelId, subDevice.id, hex)\n if ErrorCode then\n local dataHex=string.sub(hex,2*15+1,-9)\n local frequent=iota.hexToUInt(dataHex,0,'B')\n local temperature=iota.hexToUShort(dataHex,4,'B')\n\t\tlocal value = nil\n\t\tlocal fre = 0\n\t\tif tonumber(subDevice.props.f0) ~= nil then\n\t\t\tfre = tonumber(subDevice.props.f0)\n\t\tend\n\t\tlocal K = 0\n\t\tif tonumber(subDevice.props.K) ~= nil then\n\t\t\tK = tonumber(subDevice.props.K)\n\t\tend\n --数据有效性判断\n if frequent==0 then\n frequent=nil\n else \n frequent=frequent/1000\n \t\tlog.debug('CZJTM_acqunit_3002 K = %s,fre = %s,frequent = %s', tostring(K),tostring(fre*fre),tostring(frequent*frequent))\n\t\t\tvalue = K*(frequent*frequent - fre*fre)\n end\n\n if temperature==20000 then\n temperature=nil\n else\n temperature=temperature/100-30\n end\n\t\t\n subData.data = {\n frequency = frequent,\n temperature = temperature,\n\t\t\tphysicalvalue = value\n }\n else\n subData.result = {code = errcode, msg = errormsg}\n end\n return subData\nend\n\nIsValid = function(data, moduleId, channelId)\n if data == nil or string.len(data) / 2 ~= 32 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n log.debug('CZJTM_acqunit_3002 : Data is nil or invalid length. module=%s channel=%s recv = %s', moduleId, channelId, data)\n return false\n end\n local hex_header = string.sub(data, 1, 4)\n if hex_header ~= 'f00f' then\n errcode = 1001\n errormsg = 'Modbus Error Code '\n log.debug('CZJTM_acqunit_3002 hex_header=%s≠f00f. module=%s channel=%s recv = %s', hex_header, moduleId, channelId, data)\n return false\n end\n\n local moduleStr = tostring(iota.hexToByte(data, 4, 'B'))\n if moduleId ~= moduleStr then\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n log.debug('CZJTM_acqunit_3002 : module error [errmodule=%s]. module=%s channel=%s recv = %s', moduleStr, moduleId, channelId, data)\n return false\n end\n return true\nend\n\ngetDateTimeHexStr = function()\n --BCD码日期 181220025358 --> 16进值日期 120c1402353a\n local BCDdateStr = os.date('%y%m%d%H%M%S', os.time())\n --print(string.format('BCDdateStr=%s',BCDdateStr))\n local hexdateStr = ''\n for i = 1, string.len(BCDdateStr), 2 do\n local subBCDHex = string.sub(BCDdateStr, i, i + 1)\n local newHex = string.format('%02x', tonumber(subBCDHex))\n hexdateStr = hexdateStr .. newHex\n log.debug('CZJTM_acqunit_3002 i=%s,subBCDHex=%s,newHex=%s,hexdateStr=%s', i, subBCDHex, newHex, hexdateStr)\n end\n return hexdateStr\nend INLINE 2019-03-06 10:07:50.463+08 2019-03-07 14:54:15.098+08 2019-03-06 \N
+795bc81a-cc56-4b80-93d5-7d4cacd0fc5b GPRS-DesignC \N 安全帽粒度配置下发 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --字符串ascii->字符\nstart=function()\n log.debug("DesignConfig: start module %s", json.encode(device.uplink.props.module))\n\tlocal module = tostring(device.uplink.props.module)\n\tlocal interval = device.props.interval\n\tlocal hour = os.date("%H")\n \tlocal date = string.format("%02d",hour)\n \tlocal min = os.date("%M")\n \tdate = date..string.format("%02d",min)\n \tlocal sec = os.date("%S")\n \tdate = date..string.format("%02d",sec)\n \tlocal str = ""\n \tif module == nil or date == nil or interval == nil then\n \terrcode = 1001\n \terrormsg = module.."have nil!"\n else\n \tstr = "*HQ,"..module..",D1,"..tostring(date)..","..interval..",1#"\n \tlocal req = toHexStr(str)\n\t\tctx:asend(req)\n \terrcode = 0\n \terrormsg = module.."send:"..str\n end\n\tlog.debug("DesignConfig: param interval: %s,date: %s HEXSTR: %s",tostring(interval),tostring(date),str)\n \t log.debug("DesignConfig: Data=%s",hex)\n\t--全局\n out={\n data ={},\n result = {}\n }\n out.result = {code=errcode,msg=errormsg}\n local resultData =json.encode(out)\n log.debug("DesignConfig: result=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\nonData=function(hex)\n\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\nlocal len = string.len(str);\nlocal hex='';\nfor i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\nend\nreturn hex;\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n INLINE 2019-05-16 18:01:38.151+08 2019-05-16 18:20:30.466+08 2019-05-16 \N
+915cd9ab-b893-4670-ad79-93a2c14523bd cy_lora_2018 \N 1.0 0235a43b-3369-4639-a955-05e9962ecc4c 0235a43b-3369-4639-a955-05e9962ecc4c f 0235a43b-3369-4639-a955-05e9962ecc4c Lua --//\n\n start=function() \n resp=ctx:asend("01020304")\n end\n\nonData=function(hex)\n --log.debug("cy_lora_2018 收到数据=%s", hex)\n\t--log.debug("cy_lora_2018 device =%s", json.encode(device))\n log.debug("cy_lora_2018 subdevices data is =%s", hex)\n\n local out={\n data ={},\n result = {},\n type=2\n } \n \n --03e9040d00cd00000c1425000000590843410f01700000 m=1001\n --数据域 内的索引号\n local ErrorCode,packNumber = IsValid(hex)\n if ErrorCode then\n\t\tresp=ctx:asend("FFFE050A0801EAE6")--数据应答\n local moduleNo=tonumber(string.sub(hex,1,4),16) \n log.debug("cy_lora_2018: moduleNo=%s",moduleNo)\n --获取子字符串表\n \n \n --log.debug("cy_lora_2018 dataTable=%s",json.encode(dataTable))\n local nodeId=tonumber(string.sub(hex,1,4),16)\n\t\t--获取通道设备deviceId \n\t\tlocal childDevice=getDeviceInfo(nodeId) \t\t\t\n\n\t\tlocal deviceId\n\t\tif childDevice~=nil then\n\t\t\tdeviceId=childDevice.id\n\t\t\t--所有输出项\n\t\t\tlocal temperature\n\t\t\tlocal\thumidity\n\t\t\tlocal\tsoil_temperature\n\t\t\tlocal\tsoil_humidity\n\t\t\tlocal\tintensity\n\t\t\tlocal\tconcentration_CO2\n\t\t\tlocal\tPH\n\t\t\tlocal\tCO2\n\t\t\tlocal\twindforce\n\t\t\tlocal\tNH4\n\t\t\tlocal\tH2S\n\t\t\tlocal\tweightvoltage\n\t\t\tlocal\tleaftemperature\n\t\t\tlocal\tpacktemperature1\n\t\t\tlocal\tpacktemperature2\n\t\t\tlocal\tpacktemperature3\n\t\t\tlocal\tpacktemperature4\n\t\t\tlocal\tO2\n\t\t\tlocal\tMINIR_60_CO2\n\t\t\tlocal\tmoisture\n\t\t\tlocal voltage\n\t\t\t\n\t\t\t--分析节点下面传感器类型\n\t\t\tfor i=1,packNumber,1 do\t\t\t\t\n\t\t\t\t\n\t\t\t\tlocal index=3+(i-1)*5 \n\t\t\t\tlocal sensorModel=string.sub(hex,index*2+1,index*2+2)\n\t\t\t\t\n\t\t\t\tif sensorModel=='00' then -- 00 空气 温湿度\n\t\t\t\t\tlocal temperature_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal temperature_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\ttemperature=tonumber(string.format("%s.%s",temperature_int,temperature_dec))-64\n\t\t\t\t\tlocal humidity_int=tonumber(string.sub(hex,(index+1)*2+5,(index+1)*2+6),16)\n\t\t\t\t\tlocal humidity_dec=tonumber(string.sub(hex,(index+1)*2+7,(index+1)*2+8),16)\n\t\t\t\t\thumidity=tonumber(string.format("%s.%s",humidity_int,humidity_dec))\n log.debug("cy_lora_2018 node_id=%s,温湿度00 temp=%s,humidity=%s",nodeId,temperature,humidity)\n\t\t\t\telseif sensorModel=="01" then --土壤 温湿度\n\t\t\t\t\tsoil_temperature=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+4),16)\t\t\n\t\t\t\t\tsoil_humidity=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+4),16)\n \t\t\tlog.debug("cy_lora_2018 node_id=%s,土壤温湿度01 temp=%s,humidity=%s",nodeId,soil_temperature,soil_humidity)\n\t\t\t\telseif sensorModel=="02" then --日照 klux\t\t\t\t\t\t \t\t\t\t\t\n\t\t\t\t\tlocal intensity_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal intensity_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tintensity=tonumber(string.format("%s.%s",intensity_int,intensity_dec))\n \t\t\tlog.debug("cy_lora_2018 node_id=%s,日照02 intensity=%s",nodeId,intensity)\n\t\t\t\telseif sensorModel=="03" then --CO2 ppm\t\t\t\t\t\t \t\t\t\t\t\n\t\t\t\t\tlocal concentration_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal concentration_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tconcentration_CO2=tonumber(string.format("%s.%s",concentration_int,concentration_dec),16)\n\t\t\t\t\tlog.debug("cy_lora_2018 node_id=%s,CO2 03 concentration_CO2=%s",nodeId,concentration_CO2)\n\t\t\t\telseif sensorModel=="04" then --PH\t\t\t\t\t\t \t\t\t\t\t\n\t\t\t\t\tlocal PH_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal PH_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tPH=tonumber(string.format("%s.%s",PH_int,PH_dec))\n\t\t\t\t\tlog.debug("cy_lora_2018 node_id=%s,PH 04 PH=%s",nodeId,PH)\n\t\t\t\telseif sensorModel=="05" then -- 电导率 conductivity\t\t\t\t\t\t \t\t\t\t\t\n\t\t\t\t\tlocal conductivity_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal conductivity_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tconductivity=tonumber(string.format("%s.%s",conductivity_int,conductivity_dec))\n\t\t\t\t\tlog.debug("cy_lora_2018 node_id=%s,电导率 05 conductivity=%s",nodeId,conductivity)\n\t\t\t\telseif sensorModel=="06" then -- 风力 windforce\t\t\t\t\t\t \t\t\t\t\t\n\t\t\t\t\tlocal windforce_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal windforce_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\twindforce=tonumber(string.format("%s.%s",windforce_int,windforce_dec))\n\t\t\t\t\tlog.debug("cy_lora_2018 node_id=%s,风力 06 windforce=%s",nodeId,windforce)\n\t\t\t\telseif sensorModel=="07" then -- 氨气NH4 ppm\t\t\t\t\t\t \t\t\t\t\t\n\t\t\t\t\tlocal NH4_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal NH4_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tNH4=tonumber(string.format("%s.%s",NH4_int,NH4_dec))\n\t\t\t\t\tlog.debug("cy_lora_2018 node_id=%s,氨气NH4 07 NH4=%s",nodeId,NH4)\n\t\t\t\telseif sensorModel=="08" then -- 硫化氢 H2S\t\t\t\t\t\t \t\t\t\t\t\n\t\t\t\t\tlocal H2S_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal H2S_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tH2S=tonumber(string.format("%s.%s",H2S_int,H2S_dec))\n\t\t\t\t\tlog.debug("cy_lora_2018 node_id=%s,硫化氢 08 H2S=%s",nodeId,H2S)\n\t\t\t\telseif sensorModel=="09" then -- 电子台秤 mv\t\t\t\t\t\t \t\t\t\t\t\n\t\t\t\t\tlocal weightvoltage_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal weightvoltage_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tweightvoltage=tonumber(string.format("%s.%s",weightvoltage_int,weightvoltage_dec))\n\t\t\t\t\tlog.debug("cy_lora_2018 node_id=%s,电子台秤 08 weightvoltage=%s",nodeId,weightvoltage)\n\t\t\t\telseif sensorModel=="0a" then -- 叶温传感器 \t\t\t\t\t\t \t\t\t\t\t\n\t\t\t\t\tlocal leaftemperature_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal leaftemperature_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tleaftemperature=tonumber(string.format("%s.%s",leaftemperature_int,leaftemperature_dec))-64\n\t\t\t\telseif sensorModel=="0b" then --包芯温度数据 4组 处理后,跳出循环\t\t\t\t\t\t \t\t\t\t\t\n\t\t\t\t\tlocal packtemperature1_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal packtemperature1_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tpacktemperature1=tonumber(string.format("%s.%s",packtemperature1_int,packtemperature1_dec))-50\n\t\t\t\t\t\n\t\t\t\t\tindex=index+5\n\t\t\t\t\tlocal packtemperature2_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal packtemperature2_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tpacktemperature2=tonumber(string.format("%s.%s",packtemperature2_int,packtemperature2_dec))-50\n\t\t\t\t\t\n\t\t\t\t\tindex=index+5\n\t\t\t\t\tlocal packtemperature3_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal packtemperature3_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tpacktemperature3=tonumber(string.format("%s.%s",packtemperature3_int,packtemperature3_dec))-50\n\t\t\t\t\t\n\t\t\t\t\tindex=index+5\n\t\t\t\t\tlocal packtemperature4_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal packtemperature4_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tpacktemperature4=tonumber(string.format("%s.%s",packtemperature4_int,packtemperature4_dec))\t-50\t\n\t\t\t\t\t\n\t\t\t\t\tindex=index+5\n\t\t\t\t\tvoltage=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+4),16)*10\t\t\t\t\t\t\n\t\t\t\t\tbreak\n\t\t\t\telseif sensorModel=="0c" then -- 氧气 O2\t\t\t\t\t\t \t\t\t\t\t\n\t\t\t\t\tlocal O2_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal O2_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tO2=tonumber(string.format("%s.%s",O2_int,O2_dec))\n\t\t\t\telseif sensorModel=="0d" then -- MINIR-60 二氧化碳 CO2\t\t\t\t\t\t \t\t\t\t\t\n\t\t\t\t\tMINIR_60_CO2=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+4),16)*10\n\t\t\t\telseif sensorModel=="0e" then -- 水分值\t\t\t\t\t \t\t\t\t\t\n\t\t\t\t\tlocal moisture_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal moisture_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tmoisture=tonumber(string.format("%s.%s",moisture_int,moisture_dec))\t\n\t\t\t\telseif sensorModel=="0f" then -- 电压\t\t\t\t\t \t\t\t\t\t\n\t\t\t\t\tvoltage=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+4),16)*10\n\t\t\t\t\tlog.debug("cy_lora_2018 node_id=%s,电压 0f voltage=%s",nodeId,voltage)\t\t\t\t\t\t\t\t\t\t\n\t\t\t\telse\n\t\t\t\t\tlog.debug("cy_lora_2018 sensorModel=%s,type=%s",sensorModel,type(sensorModel))\n\t\t\t\tend\t\t\t\t\t\t\t\t\t\t\t\n\t\t\tend\n\t\t\t\n\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature=tonumber(string.format("%6.2f",temperature)),\n\t\t\t\t\t\t\t\t\thumidity=tonumber(string.format("%6.2f",humidity)),\n\t\t\t\t\t\t\t\t\tsoil_temperature=tonumber(string.format("%6.2f",soil_temperature)),\n\t\t\t\t\t\t\t\t\tsoil_humidity=tonumber(string.format("%6.2f",soil_humidity)),\n\t\t\t\t\t\t\t\t\tintensity=tonumber(string.format("%6.2f",intensity)),\n\t\t\t\t\t\t\t\t\tconcentration_CO2=tonumber(string.format("%6.2f",concentration_CO2)),\n\t\t\t\t\t\t\t\t\tPH=tonumber(string.format("%6.2f",PH)),\n\t\t\t\t\t\t\t\t\tconductivity=tonumber(string.format("%6.2f",conductivity)),\n\t\t\t\t\t\t\t\t\twindforce=tonumber(string.format("%6.2f",windforce)),\n\t\t\t\t\t\t\t\t\tNH4=tonumber(string.format("%6.2f",NH4)),\n\t\t\t\t\t\t\t\t\tH2S=tonumber(string.format("%6.2f",H2S)),\n\t\t\t\t\t\t\t\t\tweightvoltage=tonumber(string.format("%6.2f",weightvoltage)),\n\t\t\t\t\t\t\t\t\tleaftemperature=tonumber(string.format("%6.2f",leaftemperature)),\n\t\t\t\t\t\t\t\t\tpacktemperature1=tonumber(string.format("%6.2f",packtemperature1)),\n\t\t\t\t\t\t\t\t\tpacktemperature2=tonumber(string.format("%6.2f",packtemperature2)),\n\t\t\t\t\t\t\t\t\tpacktemperature3=tonumber(string.format("%6.2f",packtemperature3)),\n\t\t\t\t\t\t\t\t\tpacktemperature4=tonumber(string.format("%6.2f",packtemperature4)),\n\t\t\t\t\t\t\t\t\tO2=tonumber(string.format("%6.2f",O2)),\n\t\t\t\t\t\t\t\t\tMINIR_60_CO2=tonumber(string.format("%6.2f",MINIR_60_CO2)),\n\t\t\t\t\t\t\t\t\tmoisture=tonumber(string.format("%6.2f",moisture)),\n\t\t\t\t\t\t\t\t\tvoltage=tonumber(string.format("%6.2f",voltage))\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t\n\t\t\ttable.insert(out.data,data1) \n\t\t\n\t\telse\n\t\t\tlog.debug("cy_lora_2018:%s节点 deviceId为nil:m=%s,c=%s",factorName,moduleNo,channelNo)\n\t\tend\n\t\t\n \n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("cy_lora_2018resultData=%s", json.encode(out))\n ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("cy_lora_2018 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t --log.debug("cy_lora_2018:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t --local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\t\t\t\n\t\t\t\tlog.debug("cy_lora_2018 子设备模块通道 接口获取 m=%s",moduleStrCheck)\n\t\t\telse\n\t\t\t log.debug("cy_lora_2018 子设备 无接口属性")\n\t\t\t return nil\n\t\t\t \n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t \t \n \n \t\tlog.debug("cy_lora_2018: m=%s 匹配到 子设备原形child=%s",moduleNoId,json.encode(child))\n return child\n \t \n \t \tend\n\t\tend\n else\n log.debug("cy_lora_2018: m=%s c=%s subdevices是nil",moduleNoId)\n \treturn nil\n end\nend\n\nIsValid=function(alldata)\n log.debug("cy_lora_2018 校验开始")\n\t\n if string.len(alldata)/2 <3 then\n errormsg = 'allData is invalid'\n errcode = 1001\n\t\tlog.debug("cy_lora_2018: 校验失败 Data is nil")\n return false\n end\n \n\tlocal packNumber=tonumber(string.sub(alldata,5,6),16)\n if packNumber*5+3~=string.len(alldata)/2 then\n\t errormsg = 'data length is wrong'\n errcode = 1002\n\t\tlog.debug("cy_lora_2018: 校验失败 data length=%s[%s] is wrong",packNumber*5+3,string.len(allData)/2)\n return false\n\tend\n\n log.debug("cy_lora_2018: 校验通过")\n return true,packNumber\nend\n\n\n\n--字符串ascii->字符\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n\n\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\n\nend\n INLINE 2018-08-14 16:11:08.725+08 2018-08-20 14:21:47.86+08 2018-08-14 \N
+dd1ef963-7fb6-4932-a259-9d2e47363890 11 \N There Are Some Things Money Can't Buy. For Everything Else, There's MasterCard. 11 fdda6836-c22c-4553-934b-5ed334d2d1fc fdda6836-c22c-4553-934b-5ed334d2d1fc f fdda6836-c22c-4553-934b-5ed334d2d1fc Lua if (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \n INLINE 2018-05-10 10:47:40.977+08 2018-05-10 10:47:40.977+08 2018-05-10 \N
+b3fc90d9-c68c-4e58-95a9-89311901aca4 Miran_lvdt_1 \N 1.0 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 e39ef519-bfb9-4a75-9cd1-fb18e5e29559 f e39ef519-bfb9-4a75-9cd1-fb18e5e29559 Lua --//svn\\Documents\\PMO\\04 项目资料\\2018-02\\米朗位移传感器的通讯协议用户手册.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "Miran_lvdt_1", device.props.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n local moduleNo=""\n \t\tif json.encode(device.uplink.props) ~= 'null' then\n moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n log.debug("bjzs_level_18626 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n else\n moduleNo=device.props.moduleId\t\t\n log.debug("bjzs_level_18626 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n \t\t log.debug("Miran_lvdt_1 发送指令=%s",buff)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("Miran_lvdt_1 数据接收not OK")\n end\n log.debug("Miran_lvdt_1 out=%s",result)\n ctx:done(result)\nend\n\n--01030400332bff0000\n--moduleId=1 \n--"lvdt": 51.171862363622495\n\nunmarshall=function(hex,moduleNoStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then \n \n local integralPart = iota.hexToShort(hex,3,'B')\n local decimalPart = iota.hexToShort(hex,5,'B')/ 65535.000\n local lvdt =integralPart+decimalPart\n \t--\n local year=2018\n \tlocal month=6\n \tlocal day=15\n \tlocal hour=21\n \tlocal minute=24\n \tlocal second=40\n local timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n \n \ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n \tlog.debug("Miran_lvdt_1 timenum=%s ,time=%s",timenum,time)\n --\n out.data = {\n\t\t\tlvdt=lvdt,\n \t\t\n }\n --out.time=time\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNoStrCheck)\n log.debug('Miran_lvdt_1 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if moduleNoStrCheck ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('Miran_lvdt_1 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2018-02-28 14:56:04.871+08 2018-10-18 16:54:36.547+08 2018-02-28 \N
+e7fa2b54-05b9-4fb9-9036-01f292fc3ec6 Asmik_Phn_4600 \N 1.0 28e14628-e071-41c6-a2b7-dca0773f996f 28e14628-e071-41c6-a2b7-dca0773f996f f 28e14628-e071-41c6-a2b7-dca0773f996f Lua --//02 协议分析/2017-04/优先接入/彩色无纸记录仪\nstart =\n function()\n log.debug('load script %s, moduleId=%s', 'Asmik_Phn_4600', device.props.moduleId or '[nil]')\n local endian = 'B'\n local buff = ''\n local errout = {\n data = {},\n result = {},\n type = 2\n }\n\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n if tonumber(moduleNo) > 255 or tonumber(moduleNo) < 1 then\n errout.result = {code = 1004, msg = '模块号无效,模块号 >= 255 or < 1'}\n else\n buff = iota.appendHexByte(buff, moduleNo, endian)\n buff = iota.appendHexByte(buff, 0x04, endian)\n buff = iota.appendHexByte(buff, 0x00, endian)\n buff = iota.appendHexByte(buff, 0x00, endian)\n buff = iota.appendHexByte(buff, 0x00, endian)\n buff = iota.appendHexByte(buff, 120, endian)\n buff = iota.appendHexCrc(buff, 'L', 0) -- 2: CRC16\n local ok, resp = ctx:ssend(buff, 18000)\n local result = '{}'\n if ok then\n result = unmarshall(resp, moduleNo)\n ctx:done(result)\n else\n errout.result = {code = 1004, msg = '采集超时'}\n ctx:done(json.encode(errout))\n end\n end\nend\n--01041203979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942775647\n--moduleId=1\n--channelId=1\n--"liquidLevel": 61.806126\n\nunmarshall =\n function(hex, moduleNoStr)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local ErrorCode = IsValid(hex,moduleNoStr)\n local pressures = {}\n if ErrorCode then\n for i = 1, 60 do\n local sub_hex = string.sub(hex, 7 + (i-1) * 8, 14 + (i-1) * 8)\n sub_hex_BE = string.sub(sub_hex, -4, -1) .. string.sub(sub_hex, 1, 4)\n local pressure = iota.hexToFloat(sub_hex_BE, 0, 'B')\n pressures[i] = pressure\n -- log.debug("Asmik_Phn_4600 i=%s,pressures[%s]=%s,sub_hex_BE=%s",i,i,pressures[i],sub_hex_BE)\n end\n\n --遍历设备\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n if device.dnlinks[1].devices ~= nil then\n --log.debug("http_test 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n log.debug('Asmik_Phn_4600 [%s] child=%s', moduleNoStr, json.encode(child))\n local deviceId = child.id\n local subChannel = tonumber(child.uplink.props.channel)\n --判断设备类型\n\n pressure = pressures[subChannel]\n\t\t\t\tlog.debug('Asmik_Phn_4600 deviceId=%s ,subChannel=%s[type=%s] ,pressure=%s',deviceId,subChannel,type(subChannel),pressure)\n local subData = {\n data = {\n pressure = pressure\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, subData)\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n\nIsValid = function(data,moduleNoStrCheck)\n if data == nil or string.len(data) / 2 ~= 5 + 4 * 60 then\n errormsg = '数据长度错误'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data, 1, 'B') ~= 0x04 then\n errormsg = '返回命令码≠0x04'\n errcode = 1002\n return false\n end\n if moduleNoStrCheck ~= tostring(iota.hexToByte(data, 0, 'B')) then\n errormsg = '模块号错误'\n errcode = 1003\n return false\n end\n return true\nend INLINE 2017-12-06 15:43:52.334+08 2018-11-19 18:02:05.341+08 2017-12-06 \N
+93cfc761-ac5c-438a-b7fa-0e7230b5165a fs-idau-gear_mop \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug("fs_idau_mop:device=%s",json.encode(device))\n log.debug("fs_idau_mop:subdevice=%s",json.encode(device.dnlinks[1]))\n local linkcnt = #(device.dnlinks)\n log.debug("fs_idau_mop:linkcnt=%s",linkcnt)\n local req = {\n type = "idau",\n payload = ""\n }\n local mop = {\n M = "c_network",\n O = "S",\n P = {} -- 荷载\n }\n local req_sensor={\n type = "idau",\n payload = ""\n }\n local mop_sensor = {\n M = "c_sensor",\n O = "S",\n P = {} -- 荷载\n } \n local req_diag={\n type = "idau",\n payload = ""\n }\n local mop_diag = {\n M = "c_diag",\n O = "DIAG",\n P = {\n D = "root",\n SYNC = true\n } -- 荷载\n }\n \tlog.debug("fs_idau_mop:port=%s",device.uplink.props.port)\n if device.uplink.props.diag then --即时诊断\n req_diag.payload= json.encode(mop_diag)\n log.debug("fs_idau_mop:request=%s", json.encode(req_diag))\n local ok, ack = ctx:ssend(req_diag, 30000)\n result = {\n result = nil,\n type = 1,\n data = {\n ack = json.encode(ack)\n }\n }\n ctx:done(json.encode(result))\n end\n for i = 1, linkcnt, 1 do -- 一个link, 一个子网\n local link = device.dnlinks[i]\n local nodecnt = #(link.devices)\n log.debug("fs_idau_mop:nodecnt=%s",nodecnt)\n local subnet = {\n SN = tonumber(link.devices[1].uplink.props.subnet), -- 子网编号. link.interface.props.subnet\n NS = {} -- 子网节点\n }\n table.insert(mop.P, subnet)\n if nodecnt > 0 then\n for j = 1, nodecnt, 1 do\n local dev = link.devices[j]\n local dev_inf = link.devices[j].uplink\n log.debug("fs_idau_mop:dev=%s", json.encode(dev))\n local node = {\n NID = tonumber(dev_inf.props.netid), -- 网络号\n C = 2, -- 通道\n DI = tonumber(dev.props.interval) or 30, -- 设备属性: 采集间隔. 默认30分钟\n DIU = 0, --分钟(采集间隔单位)\n WD = tonumber(dev.props.wakeupdelay) or 0, -- 设备属性:苏醒延迟, 默认0,\n T = toNodeType(dev_inf.props.worktype) -- 节点类型: 终端?\n }\n table.insert(subnet.NS, node)\n\t\t\t\t\n if dev.dnlinks ~= nil then \n\t\t\t\t\tlocal nodednlinkcnt = #(dev.dnlinks)\n\t\t\t\t\tlog.debug("fs_idau_mop:nodednlinkcnt=%s", nodednlinkcnt)\n\t\t\t\t\tif nodednlinkcnt>0 then\n\t\t\t\t\t\tfor k=1,nodednlinkcnt,1 do\n\t\t\t\t\t\t\tlog.debug("fs_idau_mop:Sdnlinks=%s", json.encode(dev.dnlinks[1]))\n\n\t\t\t\t\t\t\tlocal sensorcnt = #(dev.dnlinks[k].devices)\n\t\t\t\t\t\t\tlog.debug("fs_idau_mop:sensorcnt=%s", sensorcnt)\n\t\t\t\t\t\t\tfor u=1,sensorcnt,1 do\n\t\t\t\t\t\t\t\tlocal sen = dev.dnlinks[k].devices[u]\n \n\t\t\t\t\t\t\t\tlocal sensor = {\n\t\t\t\t\t\t\t\t\tID = sen.uplink.props.sensorid,--传感器ID\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tPA ={ --物理地址\n\t\t\t\t\t\t\t\t\t\tSN= tostring(dev_inf.props.subnet),--子网号\n\t\t\t\t\t\t\t\t\t\tN=dev_inf.props.netid,--网络号(节点号)\n\t\t\t\t\t\t\t\t\t\tC= tonumber(sen.uplink.props.channel) or 0,--通道号\n\t\t\t\t\t\t\t\t\t\tM= tonumber(sen.uplink.props.module) or 0,--模块号: 485端口模块号 \n\t\t\t\t\t\t\t\t\t\t--SC=,-- 子通道号: 485端口子通道号\n\t\t\t\t\t\t\t\t\t}, \n\t\t\t\t\t\t\t\t\tDIS = tonumber(sen.uplink.props.dis) or 1,--采样间隔系数. 默认1\n\t\t\t\t\t\t\t\t\tPN = sen.props.protocolcode or 0 ,--协议号: 和安心云DAC解码协议保持一致.\n\t\t\t\t\t\t\t\t\tEN = tostring(sen.uplink.props.enabled =="false" and 0 or 1), --是否启用\n\t\t\t\t\t\t\t\t\tED = sen.uplink.props.postdelay or 0, --执行前延迟(485作用)\n\t\t\t\t\t\t\t\t\tRD = sen.uplink.props.predelay or 0,--读取前延迟\n\t\t\t\t\t\t\t\t\tCF = tostring(sen.uplink.props.fid) or "",--公式编码, 和安心云保持一致.\n\t\t\t\t\t\t\t\t\tCP = { --计算参数, 按顺序提供必需参数. \n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.k or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.f0 or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.kt or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.t0 or 0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttable.insert(mop_sensor.P, sensor)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n end\n end\n end\n end\n end\n req.payload = json.encode(mop)\n log.debug("fs_idau_mop:request=%s", json.encode(req))\n local ok, ack = ctx:ssend(req, 20000)\n result = {\n result = nil,\n type = 1,\n data = {\n ack = json.encode(ack)\n }\n }\n if ok then\n req_sensor.payload= json.encode(mop_sensor)\n log.debug("fs_idau_mop:requestsensor=%s", json.encode(req_sensor))\n local ok, ack = ctx:ssend(req_sensor, 60000)\n result = {\n result = nil,\n type = 1,\n data = {\n ack = json.encode(ack)\n }\n }\n end\n ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n if t == "host" then\n return 1\n elseif t == "relay" then\n return 2\n end\n return 3\nend\n INLINE 2018-08-28 17:47:53.115+08 2018-09-04 17:33:41.752+08 2018-08-28 \N
+ead9f2c7-1bb8-4d58-b7da-45fd0e8754fd 11 \N There Are Some Things Money Can't Buy. For Everything Else, There's MasterCard. 11 fdda6836-c22c-4553-934b-5ed334d2d1fc fdda6836-c22c-4553-934b-5ed334d2d1fc f fdda6836-c22c-4553-934b-5ed334d2d1fc Lua if (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \n INLINE 2018-05-10 10:47:42.427+08 2018-05-10 10:47:42.427+08 2018-05-10 \N
+bc95a88a-945c-4682-bbba-d347d49d737f 11 \N There Are Some Things Money Can't Buy. For Everything Else, There's MasterCard. 11 fdda6836-c22c-4553-934b-5ed334d2d1fc fdda6836-c22c-4553-934b-5ed334d2d1fc f fdda6836-c22c-4553-934b-5ed334d2d1fc Lua if (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n log ("You must be logged in order to use this script")\n return \nend\n\nlocal zone_values = T{\n [191] = {val = 0, element = "Fire", chip = "Red"}, -- Dangruf Wadi\n [196] = {val = 1, element = "Earth", chip = "Yellow"}, -- Gusgen Mines\n [197] = {val = 2, element = "Water", chip = "Blue"}, -- Crawlers' Nest\n [193] = {val = 3, element = "Wind", chip = "Green"}, -- Ordelle's Caves\n [195] = {val = 4, element = "Ice", chip = "Clear"}, -- Eldieme Necropolis\n [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n [200] = {val = 6, element = "Light", chip = "White"}, -- Garlaige Citadel\n [198] = {val = 7, element = "Dark", chip = "Black"}, -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n log ("This is not an area with a strange apparatus")\n return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \n INLINE 2018-05-10 10:47:42.885+08 2018-05-10 10:47:42.885+08 2018-05-10 \N
+1da26fe7-c82b-4d54-8f79-41fa728951d9 jm_lvdt_1 \N 长沙金码测控科技股份有限公司 1.0 d5b4f900-6aac-40dc-8c6d-d38bc27004d1 d5b4f900-6aac-40dc-8c6d-d38bc27004d1 f d5b4f900-6aac-40dc-8c6d-d38bc27004d1 Lua start=function()\n log.debug("start %s, ctx=%s", "jm_lvdt_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0x23, endian) \n buff=iota.appendHexByte(buff, 0x2b, endian)\n buff= buff..device.props.moduleId \n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --36596148594963486349634850 \n --"level": 1234567\n\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==26) then\n \n \n \n local level=((tonumber(string.sub(hex,3,4))-48)*16+(tonumber(string.sub(hex,5,6))-48)+(tonumber(string.sub(hex,7,8))-48)*16*16*16+(tonumber(string.sub(hex,9,10))-48)*16*16)/100\n local temp= ((tonumber(string.sub(hex,19,20))-48)*16+(tonumber(string.sub(hex,21,22))-48)+(tonumber(string.sub(hex,23,24))-48)*16*16*16+(tonumber(string.sub(hex,25,26))-48)*16*16-500)/10\n out.data = {\n level=level,\n temp=temp\n }\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend INLINE 2017-12-28 19:12:36.497+08 2018-02-28 18:32:12.224+08 2017-12-26 \N
+9bea199d-898c-4f82-b80b-1b9ac9402f4f 啊 \N 大大大大 啊 93ffff70-11c1-46a9-8810-612bd42172e2 93ffff70-11c1-46a9-8810-612bd42172e2 f 93ffff70-11c1-46a9-8810-612bd42172e2 Lua 大时代 INLINE 2018-08-30 14:16:10.129+08 2018-08-30 14:16:10.129+08 2018-08-22 \N
+d0b9cd23-81cd-4990-9b9a-5e38b382d587 hlo_flow_2500 \N 气体浓度监测协议 1.0 d36cd0a0-873c-4592-9ab4-6712ff3d87cc d36cd0a0-873c-4592-9ab4-6712ff3d87cc f d36cd0a0-873c-4592-9ab4-6712ff3d87cc Lua \nstart=function()\n log.debug("start %s, ctx=", "hlo_flow_2500.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId need <= 255'}\n ctx:done(json.encode(errout))\n else\n\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x09, endian) \n buff=iota.appendHexByte(buff, 0xD0, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n end\nend\n--ff030200001a0c6699 moduleId=255\n--"concentration": 666.8\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\n local Concentration = iota.hexToInt(hex,3,'B') / 10.0\n out.data = {\n concentration = Concentration\n }\n\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = 'CMD is not right'\n errcode = 1001\n \treturn false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2017-09-14 09:56:58.974+08 2018-02-28 18:32:12.187+08 2017-09-14 \N
+cd5bd311-1502-44b3-9764-4013fe62db21 lywh__8004 \N 多通道温度 1.0 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 f dd7cacfc-a0f8-4d19-86b1-db4c80849dd5 Lua --AA55820018072713515930003c0032000B0006000900220FF5FFEDFFEEFF0500090010001300F0FFF2FFEFFFEFFFF0FFF2FFEFFFEFFF32000B0006000900220FF5FFEDFFEEFF0500090010001300F0FFF2FFEFFFEFFFF0FFF2FFEFFFEFFF32000B0006000900220FF5FFEDFFEEFF0500090010001300F0FFF2FFEFFFEFFFF0FFF2FFEFFFEFFFf5f6\n --通道1 50\n --通道2 12\n --通道3 9\n --通道4 6\nonData=function(hex)\n log.debug("lywh__8004 收到数据=%s", hex)\n --log.debug("lywh__8004 device =%s", json.encode(device))\n local out={\n data ={},\n result = {},\n type=2\n }\n local data=hex\n if string.upper(data)=="3E74696D656375720D0A" then\n --请求同步服务器时间\n local timeStr=os.date("%Y%m%d-%H%M%S",os.time())\n local timeResponse="3c74696d656375723a"..StrToHex(timeStr).."0d0a"\n ok=ctx:asend(timeResponse)\n else\n \n local ErrorCode = IsValid(data)\n if ErrorCode then\n log.debug('lywh__8004 数据有效=%s',data)\n \n local phy={}\n local moduleId_hex=string.sub(data,23,24)..string.sub(data,21,22)\n local moduleId=tonumber(moduleId_hex,16)\n local channelCounts_hex=string.sub(data,27,28)..string.sub(data,25,26)\n\n local channelCounts=tonumber(channelCounts_hex,16)\n log.debug('lywh__8004 channelCounts=%s',channelCounts)\n for i=1,channelCounts,1 do\n phy[i]=iota.hexToShort(data,14+(i-1)*2,'L')\n \n end\n\n local timess=string.sub(data,9,9+12)\n\t\t\tlocal timenow=unixtimestamp(timess)\n\n\n log.debug('lywh__8004 phy=%s',json.encode(phy))\n --分析单类数据\n for k,v in ipairs(phy) do\n log.debug('lywh__8004 分析单类数据 k=%s,v=%s',k,v)\n \n local channelId=k\n local childDevice=getDeviceInfo(moduleId,channelId) \n \n if childDevice~=nil then\n log.debug('lywh__8004 moduleId=%s,channelId=%s id=%s,physicalvalue=%s',moduleId,channelId,childDevice.id,phy[k])\n local data1 = {\n data={\t\t\t\t\t\t\t\t\t\t\t\n physicalvalue=phy[k]\n \n },\n device=childDevice.id,\n --time=timenow,\n type=1 \n }\n\n table.insert(out.data,data1)\n end\t\n end\n \n else\n out.result = {code = errorcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\n end\nend\n\nIsValid=function(data)\n local checkdatalength=string.len(data)/2\n\n if checkdatalength<14 then\n errormsg = 'data length is wrong'\n errorcode = 1001\n ok=ctx:asend("4552")\n return false\n end\n\n\n local datalength=tonumber(string.sub(data,5,6),16)+tonumber(string.sub(data,7,8),16)*256\n if datalength~=checkdatalength then\n errormsg = 'data length is wrong'\n errorcode = 1001\n ok=ctx:asend("4552")\n return false\n end\t\n\n if string.upper(string.sub(data,1,4)) ~= 'AA55' then \n errormsg = 'Data is Invalid'\n errorcode = 1001\n ok=ctx:asend("4552")\n return false\n end\n --累加和校验\n local checksum16=CheckPlusSum(data,1,string.len(data)-4)\n local checksum16_Hex=string.format("%04x",checksum16)\n local sum16_Hex=string.sub(data,-2,-1)..string.sub(data,-4,-3)\n log.debug("lywh__8004 checksum16_Hex=%s,sum16_Hex=%s",checksum16_Hex,sum16_Hex)\n if checksum16_Hex~=sum16_Hex then\n log.debug("lywh__8004 累加和校验失败%s[%s]",sum16_Hex,checksum16_Hex)\n ok=ctx:asend("4552") --错误数据返回\n errormsg = 'Data is Invalid'\n errorcode = 1001\n return false\n end\n ok=ctx:asend("4f4b") --正确数据返回\n log.debug("lywh__8004 校验通过")\n return true\nend\n--累加和校验\nfunction CheckPlusSum(str, startIndex, endIndex)\n local sum = 0\n for i = startIndex, endIndex,4 do\n sum = (sum + tonumber(string.sub(str,i+2,i+3)..string.sub(str,i,i+1),16)) % 0x10000\n end \n local result = sum \n return result\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("lywh__8004 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index,child in pairs(device.dnlinks[1].devices) do\n -- log.debug("lywh__8004:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n \n moduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck=child.uplink.props.channel\n log.debug("lywh__8004 子设备模块通道 接口获取 m=%s[%s],c=%s[%s] ",moduleStrCheck,moduleNoId,channelStrCheck,channelNoId)\n \n \n if tonumber(moduleStrCheck)==tonumber(moduleNoId) then\n \n if tonumber(channelStrCheck)==tonumber(channelNoId) then\n log.debug("lywh__8004: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n end\n\n end\n end\n else\n log.debug("lywh__8004: subdevices是nil")\n return nil\n end\nend\n\nunixtimestamp=function(datestr)\n --180727135159\n\tlog.debug("bjhk_7000 datestr=%s",datestr)\n local year = tonumber(string.sub(datestr,1,2))+2000;\n\tlocal month = tonumber(string.sub(datestr,3,4));\n\tlocal day = tonumber(string.sub(datestr,5,6));\n local hour = tonumber(string.sub(datestr,7,8));\n local minute = tonumber(string.sub(datestr,9,10));\n local second = tonumber(string.sub(datestr,11,12));\n log.debug("bjhk_7000 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlog.debug("bjhk_7000 timenum=%s",timenum)\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\tlog.debug("bjhk_7000 recordTime=%s",recordTime)\n\treturn recordTime\nend\n\nStrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2018-09-19 17:13:40.537+08 2018-09-26 20:47:58.935+08 2018-09-19 \N
+c0e95dc9-2a94-4b37-9176-1f911fa40781 hhdz_6300 \N 1.0 b62a05b7-00f6-49f0-a9d4-c3ffa17b7340 b62a05b7-00f6-49f0-a9d4-c3ffa17b7340 f b62a05b7-00f6-49f0-a9d4-c3ffa17b7340 Lua --//20180921项目资料提交\\20180921项目资料提交\\长沙弘汇电子科技有限公司-大坝监测-康飞\\长沙弘汇MCU协议.doc\n--32个通道\n--测试536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3355494e2056313d322e3334352056323d302e3030332049333d32302e3030302049343d302e3030302056353d302e39382049363d312e35362049373d322e3134352056383d312e323030201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n--24个通道\n--536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\nstart=function()\n -- log.debug("load script %s, moduleId=%s", "hhdz_6300.lua", device.props.moduleId or "[nil]")\n log.debug("hhdz_6300:".."LUA: ctx is =%s", json.encode(device))\n\t \n\t local out={\n\t\t\tdata ={},\n\t\t\tresult = {},\n\t\t\ttype=2\n\t\t}\n\t \n --采集指令\n local moduleNo=string.format("%05d",device.uplink.props.module)\n\tlocal cmd_bgein=string.format("MCU32 %s Begin",moduleNo)\n\tlocal cmd_bgein_hex=StrToHex(cmd_bgein).."0d0a"\n\tok_begin,resp_hex_begin=ctx:ssend(cmd_bgein_hex,15000)--15秒\n log.debug("hhdz_6300 发送Begin cmdHex =%s",cmd_bgein_hex)\n\tlocal resp_begin=HexToStr(resp_hex_begin)\n\tlocal isBeginOK=resp_begin=="OK!\\r\\n"\n if ok_begin and isBeginOK then\n log.debug("hhdz_6300 开始休眠50s")\n\t\tctx:sleep(60) --休眠50s\n \tlog.debug("hhdz_6300 休眠50s结束")\n \t--ctx:sleep(2) --测试 2s\n\t\t--发送读取指令\n\t\tlocal cmd_read=string.format("MCU32 %s Read",moduleNo)\n\t\tlocal cmd_read_hex=StrToHex(cmd_read).."0d0a"\n\t\tok_read,resp_hex_read=ctx:ssend(cmd_read_hex,20000)--测试用\n \t log.debug("hhdz_6300 发送 cmd_read_hex =%s,resp_hex_read=%s",cmd_read_hex,resp_hex_read)\n\t\tlocal resp_read=HexToStr(resp_hex_read)\n\t\tif resp_read=="Wait\\r\\n" then\n\t\t --等待 重新发送采集\n ctx:sleep(20) --休眠20s 重新读取\n --ctx:sleep(3) --测试 3s\n\t\t\tok_read,resp_hex_read=ctx:ssend(cmd_read_hex,20000)\n\t\tend\n\t\t\n if ok_read then\n\t\t --非回复等待的 直接处理结果 不论数据是否正常\n\t\t\tresponseAnalyse_read(resp_hex_read,out)--带入数据结果table\n\t\tend\n\t\t\t\n else\t\n\t out.result = {code = 1004, msg = 'MCU32 is not Begin OK'} \n\t log.debug("hhdz_6300 m=%s, ok is false",moduleNo) \n\tend\n\tlocal jsondata=json.encode(out)\n\tctx:done(jsondata)\nend\n\nresponseAnalyse_read=function(hex,out)\n log.debug("hhdz_6300 收到数据=%s", hex)\n\t--log.debug("hhdz_6300 device =%s", json.encode(device))\n --log.debug("hhdz_6300subdevices data is =%s", json.encode(device.dnlinks[1].devices))\n \n local ModuleChar = "M=";--振弦\n local DigChar = "Di";--测斜\n local VoltageChar = "V=";--电压\n local CurrentChar = "I=";--电流\n local WaterChar = "Wa";--水文\n\tlocal ResistanceChar="R=";--电阻(差阻)\n\n\n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n sData=HexToStr(hex)\n log.debug("hhdz_6300:sData是 %s",sData)\n --获取子字符串表\n local allResponse=Split(sData,'\\n')\n --移除表内的“”和nil\n for k,v in ipairs(allResponse) do\n if v=='' or v==nil then\n table.remove(allResponse,k)\n log.debug("hhdz_6300 表内的“”和nil 移除元素为"..tostring(allResponse[k]))\n end\n end\n\n --分析单类数据\n for k,v in ipairs(allResponse) do\n local singleData=Split(v,' ')\n --移除单类数据中的空 \n for kk,vv in ipairs(singleData) do\n if vv=='' or vv==nil then\n --print("移除元素为 ",singleData[kk])\n table.remove (singleData,kk)\n end\n end\n\n if k>1 then\n local temp1=singleData[2+1]\n local moudleStr=string.sub(singleData[2+1],2,2)\n local moduleNo=tonumber(moudleStr)\n --解析单条数据\n for kkk,vvv in ipairs(singleData) do\n log.debug("hhdz_6300:遍历解析单条数据 键="..tostring(kkk).." 值="..tostring(vvv))\n \n local type_sensor=string.sub(string.gsub(singleData[kkk],"%d",""),1,2)\n log.debug("hhdz_6300: type_sensor="..type_sensor) \n if string.len(type_sensor) >=2 then\n --频率\n if type_sensor==ModuleChar then\n local length = string.len(singleData[kkk]) - 3;\n local tempLength = string.len(singleData[kkk + 1]) - 3;\n local channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n local Module =tonumber(string.sub(singleData[kkk],4, -1))\n local tempData = string.sub(singleData[kkk+1],4, 4+tempLength);\n local Frequency = math.sqrt(Module*1000);\n local Temp;\n local Phy\n \t\t\t local Length\n if IsNumberic(tempData) then\n\t\t\t\t\t\t\t\tTemp=tonumber(tempData)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tTemp=0;\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(振弦)子设备 模块%s,通道%s原型childDevice=%s",moduleNo,channelNo,json.encode(childDevice))\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(振弦)子设备 模块%s,通道%s deviceId=%s ",moduleNo,channelNo,tostring(deviceId))\n\t\t\n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n \t\t\t\tlocal Po = childDevice.uplink.capabilities[1].formula.props.Po\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:振弦模块: 模块%s,通道%s 公式参数=%s,%s,%s,%s,%s,%s",moduleNo,channelNo,K1,K2,K3,Fo,To,Po)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil or Po==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300 模块%s,通道%s 当前的Frequency=%s,Temp=%s",moduleNo,channelNo,Frequency,Temp)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Module --经过厂家确认 公式带入的是模数\n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)+Po\n\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300 模块%s,通道%s当前的Phy是:%s",moduleNo,channelNo,Phy)\n\t\t\t\t\t\t\t\tend \n \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(振弦)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t--log.debug("hhdz_6300:振弦模块:公式%s",device.formula)\n\t\t\t\t\t\t \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tfrequency=tonumber(string.format("%0.3f",Frequency)),\n\t\t\t\t\t\t\t\t\ttemperature=tonumber(string.format("%0.2f",Temp)),\n\t\t\t\t\t\t\t\t\tphysicalvalue=tonumber(string.format("%0.3f",Phy)),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlog.debug("hhdz_6300:(振弦) Phy结果=%s",Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend\n\n --电压\n if type_sensor== VoltageChar then\n local length = string.len(singleData[kkk]) - 3;\n\t\t\t\t\t\t\tlocal channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n\t\t\t\t\t\t\tlocal Voltage =tonumber(string.sub(singleData[kkk],4, -1))\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(电压)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(电压)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t \n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:电压模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlocal Temp=0;--电压模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:电压模块当前的Voltage是:%s,%s",Voltage,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Voltage \n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:电压模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\tend \t \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlog.debug("hhdz_6300:(电压)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={voltage=Voltage,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend\n \n\t\t\t\t\t\t--电流\n\t\t\t\t\t\tif type_sensor==CurrentChar then\n\t\t\t\t\t\t\tlocal length = string.len(singleData[kkk]) - 3;\n\t\t\t\t\t\t\tlocal channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n\t\t\t\t\t\t\tlocal Current =tonumber(string.sub(singleData[kkk],4, -1))\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(电流)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(电流)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:电流模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlocal Temp=0;--电流模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:电流模块当前的Current是:%s,%s",Current,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Current \n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:电流模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\tend \n \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(电流)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={current=Current,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend \n\n\t\t\t\t\t\t--水文\n\t\t\t\t\t\tif type_sensor==WaterChar then\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\tif string.sub(singleData[kkk],1,6)== "Water1" then\n\t\t\t\t\t\t\t\tlocal waterData = GetSWData(singleData, kkk); \n \n\t\t\t\t\t\t\t\tfor i=1,8,1 \n\t\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,i)\n\t\t\t\t\t\t\t\t\t--\n\t\t\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(水文)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(水文)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:水文模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t local Temp=0;--水文模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t\t log.debug("hhdz_6300:水文模块当前的Current是:%s,%s",Current,Temp)\n\t\t\t\t\t\t\t\t\t\t local Fi=waterData[i] \n\t\t\t\t\t\t\t\t\t\t Phy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t\t log.debug("hhdz_6300:水文模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\t\t\tend \n\t\t\t\t\t\t\t\t\telse\n log.debug("hhdz_6300:(水文)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(i))\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\tlocal data1={\n\t\t\t\t\t\t\t\t\t\tdata={waterdata = waterData[i],\n\t\t\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\t\ttype=1\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttable.insert(out.data,data1) \n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\tend\t\n end\n\n --测斜\n if type_sensor==DigChar then\n\t\t\t\t\t local Phy\n\t\t\t\t\t local Length\n local Temp\n local channelNo = tonumber(string.sub(singleData[kkk],4, 4),16);\n if (string.sub(singleData[kkk],1,3)..string.sub(singleData[kkk],5,5))== "Dig=" then\n \n local Inclination =tonumber(string.sub(singleData[kkk],6, -1))\n --获取通道设备deviceId\n \t\t\t local childDevice=getDeviceInfo(moduleNo,channelNo)\n \t\t\t local deviceId\n if childDevice~=nil then\n \t\t\t\t\t deviceId=childDevice.id\n \t log.debug("hhdz_6300:(测斜)子设备原形childDevice=%s",json.encode(childDevice))\n \t\t\t\t log.debug("hhdz_6300:(测斜)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n log.debug("hhdz_6300:测斜模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tTemp=0;--测斜模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:当前的Frequency是:%s,%s",Inclination,Temp)\n\t\t\t\t\t\t\t\t\t\tlocal Fi=Inclination \n\t\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:测斜模块 当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\t\tend \n \t \n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(测斜)子设备deviceId为nil:m=%s,c=%s"..tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={inclination=Inclination,\n\t\t\t\t\t\t\t\t\t\ttemperature=Temp,\n\t\t\t\t\t\t\t\t\t\tphysicalvalue=Phy,\n\t\t\t\t\t\t\t\t\t\tlength=Length \t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t--电阻(差阻)\n if type_sensor==ResistanceChar then\n\t\t\t\t\t --local R1Length = string.len(singleData[kkk]) - 3; --取消\n --local r1Length = string.len(singleData[kkk + 1]) - 3; --取消\n local channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n local R1 =tonumber(string.sub(singleData[kkk],4, -1))\n local r1 = tonumber(string.sub(singleData[kkk+1],4, -1))\n local Temp;\n local Phy\n if IsNumberic(tempData) then\n\t\t\t\t\t\t\t\tTemp=tonumber(tempData)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tTemp=0;\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s 原形childDevice=%s",tostring(moduleNo),tostring(channelNo),json.encode(childDevice))\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s deviceId=%s ",tostring(moduleNo),tostring(channelNo),tostring(deviceId))\n\n\t\t\t\t\t\t\t\tlocal f = childDevice.uplink.capabilities[1].formula.props.f\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s f!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal Zo = childDevice.uplink.capabilities[1].formula.props.Zo \n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s Zo!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal b = childDevice.uplink.capabilities[1].formula.props.b \n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s b!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal a = childDevice.uplink.capabilities[1].formula.props.a \n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s a!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal Ro = childDevice.uplink.capabilities[1].formula.props.Ro \n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s Ro!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s 参数=%s,%s,%s,%s,%s",tostring(moduleNo),tostring(channelNo),f,Zo,b,a,Ro)\n\t\t\t\t\t\t\t\tif f ==nil or Zo ==nil or b ==nil or a==nil or Ro==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tTemp=a*(R1+r1-Ro)\n \t\t\t\t\tif tonumber(ri)~=0 then\t\t\t\n Phy =f*(R1/r1 -Zo)+b*Temp\n log.debug("hhdz_6300: m=%s,c=%s, 当前的R1=%s,r1=%s,Temp=%s,Phy=%s",tostring(moduleNo),tostring(channelNo),R1,r1,Temp,Phy)\n \t\t\t\telse\n \t\t\t log.debug("hhdz_6300: 数据无效 m=%s,c=%s, r1=0")\n break\n \t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tend \n \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s deviceId为nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t--log.debug("hhdz_6300:差阻模块:公式%s",device.formula)\n\t\t\t\t\t\t \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tResistor1=R1,\n\t\t\t\t\t\t\t\t\tResistor2=r1,\n\t\t\t\t\t\t\t\t\ttemperature=Temp,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块 m=%s,c=%s Phy结果=%s",tostring(moduleNo),tostring(channelNo),Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\t\t\t\t\t\t\n\t\t\t\t\t\tend\n\n end\n\t\t\t\tend\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("hhdz_6300resultData=%s,hex=%s", json.encode(out),hex)\n ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("hhdz_6300 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t --log.debug("hhdz_6300:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("hhdz_6300 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t log.debug("hhdz_6300 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t \t if tostring(channelStrCheck)== tostring(channelNoId) then\n \n \t\t log.debug("hhdz_6300: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("hhdz_6300: subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function(alldata)\n log.debug("hhdz_6300: 校验开始")\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n return false\n end\n\n local length=getIndex(alldata)\n local data=string.sub(alldata,1,length*2)\n --log.debug("data:"..data)\n local plu16={}\n plu16[0]=string.sub(data,-8,-7)\n plu16[1]=string.sub(data,-6,-5)\n --local plusSum16Hi,plusSum16Lo = iota.hexCheckPlusSum16(data,0,length-4);\n -- log.debug("hhdz_6300:".."plu16[0]是:"..plu16[0])\n -- log.debug("hhdz_6300:".."plu16[1]是:"..plu16[1])\n -- log.debug("hhdz_6300:".."plusSum16Hi是:"..tostring(plusSum16Hi))\n -- log.debug("hhdz_6300:".."plusSum16Lo是:"..tostring(plusSum16Lo))\n --if tonumber(plu16[0],16)~=plusSum16Hi or tonumber(plu16[1],16)~=plusSum16Lo then\n -- errormsg = 'checkPlusSum16 is false'\n -- errcode = 1004\n -- return false\n -- end\n\n log.debug("hhdz_6300:".."校验通过")\n return true\nend\n\ngetIndex=function(data)--用于IsValid\n local len=string.len(data)/2\n for n =1,len do \n local value=string.sub(data,2*n-1,2*n)\n if value=='0a' then\n return n;\n end\n end\n return 0;\nend\n\n--字符串ascii->字符\nHexToStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n -- 字符串 -> BCD\nStrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\n\nend\n\nGetSWData=function(sData,j)\n local SW={}\n\n local Water1 = tonumber(string.sub(sData[j],8,-1));\n local Base1 = tonumber(string.sub(sData[j+1],7,-1));\n\n local Water2 = tonumber(string.sub(sData[j+2],8,-1));\n local Base2 = tonumber(string.sub(sData[j+3],7,-1));\n\n local MaxWinSpeed = tonumber(string.sub(sData[j+4],13,-1));\n local Direction = tonumber(string.sub(sData[j+5],11,-1));\n\n local AverWinSpeed = tonumber(string.sub(sData[j+6],14,-1));\n local RealTImeWinSpeed = tonumber(string.sub(sData[j+7],18,-1));\n \n local NowDirection = tonumber(string.sub(sData[j+8],11,-1));\n local AccRain = tonumber(string.sub(sData[j+9],9,-1));\n\n SW[1] = Water1/100 + Base1;\n SW[2] = Water2/100 + Base2;\n SW[3] = MaxWinSpeed;\n SW[4] = Direction;\n SW[5] = AverWinSpeed;\n SW[6] = RealTImeWinSpeed;\n SW[7] = NowDirection;\n SW[8] = AccRain;\n return SW;\nend\n INLINE 2018-09-29 15:35:13.347+08 2018-11-03 11:40:43.121+08 2018-09-29 \N
+723d4fd1-f2c5-4fc1-97a9-9843cdb10693 httpJCLQ_2020 \N T2 1.0 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 f a8df2f4a-3e2f-49f5-b1e2-b866493ade49 Lua \nstart=function()\n log.debug("JCLQ2020 start moudleid=%s", device.props.pointId or "nil")\n\tlocal req = {\n type= "http",\n url='', --https://api.yespowering.cn/login/\n \tmethod="post",\n header={}\n }\n\n req.url=device.props.tokenUrl\n log.debug("JCLQ2020: url=%s",req.url)\n log.debug("设备原型="..json.encode(device))\n req.header["agent"] = '0'\n\treq.header["language"] = 'zh'\n\treq.header["brandid"] = '38'\n req.ContentType='application/json'\n \n local param={\n account= device.props.account,\n pw=device.props.pw\n }\n\treq.body = json.encode(param)\n log.debug("JCLQ2020:param="..json.encode(param))\n local ok,ack=ctx:ssend(req,4000)\n\n if ack==nil then\n log.debug("JCLQ2020: ok=%s",ok)\n else\n log.debug("JCLQ2020: ok=%s,token=%s",ok,ack.body)\n end\n local out={\n type = 2,\n data ={},\n result = {}\n }\n if not ok or ack==nil then\n out.result={\n code=1002,\n msg="timeout",\n }\n else --OK\n if ack.code==200 and ack.body ~="" then -- http应答\n local dataTable=json.decode(ack.body)\n \tlocal token=dataTable.data.userinfo.token\n log.debug("JCLQ2020: token=%s " ,token)\n log.debug("JCLQ2020 ack=%s",ack.body)\n \n \n\t\t\tSleep(1)\n\t\t\t --请求数据\n\t\t\tlocal datareq = {\n\t\t\t\t\t\ttype= "http",\n\t\t\t\t\t\turl='', --url=https://api.yespowering.cn/dev/data/?box_id=35E81PV005 \n\t\t\t\t\t\tmethod="get",\n\t\t\t\t\t\theader={}\n\t\t\t\t\t}\n\t\t\tlocal boxId=device.props.boxId\n\t\t\tdatareq.url=device.props.dataUrl.."?box_id="..boxId\n\t\t\tlog.debug("JCLQ2020: data url=%s",datareq.url)\n\t\t\t--log.debug("设备原型="..json.encode(device))\n\t\t\tdatareq.header["agent"] = '0'\n\t\t\tdatareq.header["language"] = 'zh'\n\t\t\tdatareq.header["brandid"] = '38'\n\t\t\tdatareq.header["token"] = token\n\t\t\tdatareq.ContentType='application/json'\n\t\t\t\t\n\t\t --get发送\n\t\t\t local dataok,dataack=ctx:ssend(datareq,4000)\n\t\t\t\n\t\t\tif not dataok or dataack==nil then\n\t\t\t\tout.result={\n\t\t\t\tcode=1002,\n\t\t\t\tmsg="timeout",\n\t\t\t\t}\n\t\t\telse --OK\n\t\t\t\tif dataack.code==200 and dataack.body ~="" then -- http应答\n\t\t\t\t\talldataTable=json.decode(dataack.body) -- 有数据\n\t\t\t\t\tlocal instant_data=alldataTable.data.instant_data\n\t\t\t\t\tlocal model=alldataTable.data.model --获取云盒类型\n\t\t\t\t\t\n\t\t\t\t\tlocal r1,r1ok = redis.get(device.id.."_endTime") --获取上次记录时间\n\t\t\t\t\tlog.debug("JCLQ2020 r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t\tif r1ok and r1~=nil then\n\t\t\t\t\t\tbeginTime=r1\n\t\t\t\t\t\tlog.debug("JCLQ2020 r1=%s,r1ok=%s,beginTime=%s",r1,r1ok,beginTime)\t\t\t\t\n\t\t\t\t\telse\n\t\t\t\t\t\tbeginTime=os.time()--第一次默认当前时间\n\t\t\t\t\t\tredis.set(device.id.."_endTime", tostring(beginTime))\n\t\t\t\t\t log.debug("JCLQ2020 r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t\tend\n\t\t\t\t\tlocal endTime\n\t\t\t\t\tfor k,v in ipairs(instant_data) do\n\t\t\t\t\t log.debug("JCLQ2020 k=%s, value=%s",k,json.encode(v))\n\t\t\t\t\t\tlocal moduleNo=v.order_id\n\t\t\t\t\t\tlocal timeStr=v.datetime\n\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,1) \n\t\t\t\t\t\t--\n\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlocal timess=alldataTable.data.instant_data[k].datetime\n\t\t\t\t\t\t\tlocal timenow=unixtimestamp(timess)\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tendTime=timenum \n\t\t\t\t\t\t\tlog.debug("JCLQ2020 beginTime=%s,endTime=%s",beginTime,endTime)\n\t\t\t\t\t\t\tif endTime<=tonumber(beginTime) then\n\t\t\t\t\t\t\t log.debug("JCLQ2020 数据未刷新beginTime=%s,endTime=%s",beginTime,endTime)\n\t\t\t\t\t\t\t break\n else\n \t\t\t log.debug("JCLQ2020 数据刷新beginTime=%s,endTime=%s",beginTime,endTime)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\n \t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif model=='RION激光测距仪激光测距仪' then\n\t\t\t\t\t\t\t\t\tlocal length=tonumber(alldataTable.data.instant_data[k].distance)\n\t\t\t\t\t\t\t\t\tlog.debug("JCLQ2020 length=%s timess=%s ",length,timess)\n\t\t\t\t\t\t\t\t\tlog.debug("JCLQ2020 type(timess)=%s ,unixtimestamp(timess)=%s",type(timess),unixtimestamp(timess))\n\t\t\t\t\t\t\t\t\t--time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(item.recordTime)/1000)),\n\t\t\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\tlength=tonumber(length)\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\t\ttime=timenow, \n\t\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t\t}; \n\t\t\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\t\telseif \n\t\t\t\t\t\t\t\t\tmodel=='HY-65HY-65(波特率9600)HY-65' then\n\t\t\t\t\t\t\t\t\tlocal stress_c=tonumber(alldataTable.data.instant_data[k].stress_c)\n\t\t\t\t\t\t\t\t\tlocal temp=tonumber(alldataTable.data.instant_data[k].temp)\n\t\t\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\tphysicalvalue=tonumber(stress_c),\n\t\t\t\t\t\t\t\t\t\t\ttemperature=tonumber(temp)\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\t\ttime=timenow, \n\t\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t\t}; \n\t\t\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\t\telseif \n\t\t\t\t\t\t\t\t\tmodel=='HY-65HY-65HY-65' then\n\t\t\t\t\t\t\t\t\tlocal stress_c=tonumber(alldataTable.data.instant_data[k].stress_c)\n\t\t\t\t\t\t\t\t\tlocal temp=tonumber(alldataTable.data.instant_data[k].temp)\n\t\t\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\tphysicalvalue=tonumber(stress_c),\n\t\t\t\t\t\t\t\t\t\t\ttemperature=tonumber(temp)\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\t\ttime=timenow, \n\t\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t\t}; \n\t\t\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlog.debug("JCLQ2018: moudleid=%s data:%s",device.props.pointId,json.encode(out))\n\t\t\t\t\t\t\n\t\t\t\t\t\tend\n\t\t\t\t\t\t\n\t\t\t\t\tend\n\t\t\t\t --更新endTime\n\t\t\t\t\tif endTime>tonumber(beginTime) then\n\t\t\t\t\t\tif redis.set(device.id.."_endTime", tostring(endTime)) then\n\t\t\t\t\t\t\tlog.debug("JCLQ2020 redis更新 set lasttime ok key=%s,value=%s",device.id.."_endTime",tostring(endTime))\n\t\t\t\t\t\tend\t\n\t\t\t\t\telse\n\t\t\t\t\t\tlog.debug("JCLQ2020 redis不更新 ")\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tlog.debug("JCLQ2018: request data error:%s body:%s",ack.code,ack.body) \n\t\t\t\tend\n\t\t\tend\t\n \n else\n log.debug("JCLQ2020: request data error:%s body:%s",ack.code,ack.body) \n end\n end\n\tctx:done(json.encode(out))\nend\n \nSleep=function(n)\n local t0 = os.clock()\n while os.clock() - t0 <= n do end\nend\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("JCLQ2020 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t -- log.debug("JCLQ2020:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t \n\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\tlog.debug("JCLQ2020 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\t\n\t\t\t \n \tif tonumber(moduleStrCheck)==tonumber(moduleNoId) then\n\t\t \t \n \n \t\t log.debug("JCLQ2020: m=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n\n \t \tend\n\t\tend\n else\n log.debug("JCLQ2020: subdevices是nil")\n \treturn nil\n end\nend\n\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\nunixtimestamp=function(datestr)\n -- 2018-4-28 16:10:12\n\tlog.debug("JCLQ2020 datestr=%s",datestr)\n local datelist = Split(datestr, " ");\n local datebegin = Split(datelist[1], "-");\n local dateend = Split(datelist[2], ":");\n local year = tonumber(datebegin[1]);\n\tlocal month = tonumber(datebegin[2]);\n\tlocal day = tonumber(datebegin[3]);\n local hour = tonumber(dateend[1]);\n local minute = tonumber(dateend[2]);\n local second = tonumber(dateend[3]);\n log.debug("JCLQ2020 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlog.debug("JCLQ2020 timenum=%s",timenum)\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\tlog.debug("JCLQ2020 recordTime=%s",recordTime)\n\treturn recordTime\nend INLINE 2018-06-19 09:40:17.591+08 2019-05-30 10:27:28.005+08 2018-06-19 \N
+46523fa3-833c-499c-b73e-3055e95fce65 hj_gasDetector_2501 \N 1.0 0d656fb5-b8d8-4066-8dd1-d2e46cf1707b 0d656fb5-b8d8-4066-8dd1-d2e46cf1707b f 0d656fb5-b8d8-4066-8dd1-d2e46cf1707b Lua \n\nstart=function()\n log.debug("start %s, ctx=", "hj_gasDetector_2501.lua",json.encode(ctx.device))\n\tif tonumber(device.props.moduleId) > 255 then\n local errout={\n data ={},\n result = {code = 1004,msg = 'module is Invalid'}\n }\n\n local errresult = json.encode(errout)\n ctx:done(errresult)\n end\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) --1: CMD 3\n buff=iota.appendHexByte(buff, device.props.channelId, endian) --1: 通道号\n buff=iota.appendHexByte(buff, 0x00, endian) \n \tbuff=iota.appendHexByte(buff, 0x00, endian) --1: CMD 1\n buff=iota.appendHexByte(buff, 0x01, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n \n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n --0103040025999e moduleId=1 channelId=1\n --"concentration": 37\n local Concentration = iota.hexToShort(hex,3,'B')\n local elongation = 0\n out.data = {\n concentration = Concentration\n }\n\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n log.debug(string.sub(data,1,12))\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = 'CMD is not right,0x03'\n errcode = 1001\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n \n\n INLINE 2017-11-29 09:21:07.569+08 2018-02-28 18:32:12.187+08 2017-11-27 \N
+672258f5-8e0b-43b1-8e33-39a92693774e 4543 \N 4 43 475d6577-d638-4b9c-a4de-35f6ddd51240 475d6577-d638-4b9c-a4de-35f6ddd51240 f 475d6577-d638-4b9c-a4de-35f6ddd51240 Lua 345 INLINE 2018-01-30 10:32:13.398+08 2018-01-30 10:32:13.398+08 2018-01-30 \N
+8f22983b-fc23-4271-a52b-10d40511ca00 testTcp \N 1.0 8e1adf17-9018-4c44-bc9b-ff70bcca029a 8e1adf17-9018-4c44-bc9b-ff70bcca029a f 8e1adf17-9018-4c44-bc9b-ff70bcca029a Lua --//04 项目资料/2017-07/南京基泰沉降监测项目/MCU32数据采集说明书.pdf\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--32个通道\n--测试536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3355494e2056313d322e3334352056323d302e3030332049333d32302e3030302049343d302e3030302056353d302e39382049363d312e35362049373d322e3134352056383d312e323030201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n--24个通道\n--536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n start=function()\n -- log.debug("load script %s, moduleId=%s", "geot_3300.lua", device.props.moduleId or "[nil]")\n -- log.debug("geot_3300:".."LUA: ctx is =%s", json.encode(device))\n ok,resp=ctx:ssend("01020304",15000)\n -- log.debug("geot_3300:".."测试下发01020304正常")\n end\n\nonData=function(hex)\n log.debug("tcp12306 收到数据=%s", hex)\n\tlog.debug("tcp12306 device =%s", json.encode(device))\n local out={\n data ={},\n result = {},\n type=2\n }\n physicalvalue=hex\n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue=physicalvalue\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=device.id,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlog.debug("geot_3300:(振弦) Phy结果=%s",Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n local resultData =json.encode(out)\n log.debug("geot_3300resultData=%s,hex=%s", json.encode(out),hex)\n ctx:notify(resultData)\n\nend\n\n\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n\n INLINE 2018-06-19 11:34:29.651+08 2018-06-19 11:34:29.651+08 2018-06-19 \N
+2dffaa68-111b-4b1d-89c4-2a14a6b8c64e cs_temp_1160 \N 创思温度协议 1.0 111647f0-416f-4e83-83fa-846fa9806308 111647f0-416f-4e83-83fa-846fa9806308 f 111647f0-416f-4e83-83fa-846fa9806308 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, ctx=", "cs_temp_1160.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local sData = toStrHex(hex)\n local temperature = string.sub(sData,13,string.len(sData)-1)\n \n out.data = { --需要测试\n temp = temperature\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n --iota.checkPlusSum16\n return true\n--crc\nend\n\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n INLINE 2017-09-25 10:51:44.807+08 2018-02-28 18:32:12.188+08 2017-09-25 \N
+bda73ab5-87db-4bba-a807-ddc03a8b2a4b Pressure_Opine_9008 \N 1.0 2b45f147-f84e-43e1-9a5c-39ffe5f7c52c 2b45f147-f84e-43e1-9a5c-39ffe5f7c52c f 2b45f147-f84e-43e1-9a5c-39ffe5f7c52c Lua --[[\n协议号: 9008;\n协议名: modbus 压力变送器.\n]]--lucas\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "Pressure_Opine_9008.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序 01 04 00 00 00 02 71 cb 模块1\n\t-- 模块号\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE); -- 1: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x04, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);-- 2: 读取寄存器地址\n buff=iota.appendHexByte(buff, 0x00, BE);\n buff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x02, BE);-- 3: \t读取寄存器数量\n\tlocal temp=buff;--交换CRC16高低位\n\ttemp=iota.appendHexCrc(temp, 'B' ,0) --CRC16\n\tlocal crcH=string.sub(temp,-2,-1)\n\tlocal crcL=string.sub(temp,-4,-3)\n\tbuff=buff..crcH;\n\tbuff=buff..crcL;\t\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 0104044411B3338a54 压强582.8 moduleId=1\n--原始数据\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\n\telse\n\t\t\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal pressure = iota.hexToFloat(data, 3,'B');\n\t\t\n\t\t\n\t\tout.data = {\n\t\tpressure=pressure,\n\t\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction IsValid(data)\n\tif string.len(data)/2 ~=9 or iota.hexToByte(data, 1,'B')~=0x04 then\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 1001\n\t\treturn true\n\tend\n\t\n\treturn false\n\t\nend\n INLINE 2017-09-16 15:13:54.919+08 2018-02-28 18:32:12.189+08 2017-09-16 \N
+7aac1370-3321-4738-9717-9dbe62d413b5 hc_vibratingWir_1403 \N 上海华测创时振弦采集仪协议 1.0 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 f 4cb97284-0871-46d4-baf9-17d494f6db64 Lua --//01 协议文档/5月第3周/上海华测创时/振弦采集仪通讯协议.doc\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nstart=function()\n log.debug("start %s, moduleId=%s channel = %s ", "hc_1403",device.uplink.props.module or 'nil',device.uplink.props.channel or 'nil')\nlocal endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n log.debug("hc_1403 根设备 名称 : data is =%s", device.name)\n log.debug("hc_1403 根设备devices : data is =%s", json.encode(device))\n \tfor index,child in pairs(subdevices) do\n\t\t log.debug("hc_1403 子设备subdevices=%s : data is =%s", index,json.encode(child))\n \t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("hc_1403 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t moduleNo=child.props.moduleId\n\t\t\t channelNo=child.props.channelId \n\t\t\t log.debug("hc_1403 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n \t--local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t \n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n log.debug("hc_1403 模块%s通道%s的deviceId是%s:",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexByte(buff, 0x48, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0x43, endian) \n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\n\t\t\tbuff=iota.appendHexByte(buff, 1, endian) -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian) -- 1: 通道号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\t\t\tbuff=iota.appendHexWord(buff, 0, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0) \n\t\t\tbuff=iota.appendHexByte(buff, 0xAF, endian) \t\t\t\t\t\t\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n log.debug("hc_1403 模块%s通道%s的数据接收成功,开始解析",moduleNo,channelNo) \n\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("hc_1403 模块%s通道%s的数据接收失败",moduleNo,channelNo) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("hc_1403 subdevices是nil")\n \treturn nil\n end\n\t\t\n\tlocal resultData =json.encode(out)\n log.debug("hc_1403 out序列化结果 : out is =%s", json.encode(out))\n ctx:done(resultData)\t\n\t\n\t\nend\n--4843000015040301a8774945000000000000000000006778af\n--K=1\n--F0=2\n--Kt=3\n--T0=4\n--moduleId=5380\n--channelId=1\n--formula=ε=ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)\n--"phy": -16,\n--"frequency": -1.3727142151112332e-14,\n--"temperature": 0\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n\t--local subModuleId=subDevice.props.moduleId or subDevice.uplink.props.module\n\t--local subChannelId=subDevice.props.channelId or child.uplink.props.channel\n\tlog.debug("hc_1403:模块%s通道%s的deviceId是:%s",subModuleId,subChannelId,subDevice.id)\n local ErrorCode = IsValid(hex,tostring(subModuleId),tostring(subChannelId))\n if ErrorCode then \n \n \n\t\tlocal Frequency = iota.hexToFloat(hex, 8,'B',32); -- 65=1100101\n local Temp = iota.hexToFloat(hex, 12,'B',2);\n\t\t--自己新加上的 当温度出现负值时,需要处理\n\t\tif(Temp>6000)then \n\t\t\tTemp=Temp-6553.5\n\t\tend\n\t\tlog.debug("hc_1403:模块%s通道%s的原始值是:freq=%s,Temp=%s",subModuleId,subChannelId,freq,Temp)\n log.debug("hc_1403:模块%s通道%s的参数值是:=%s",subModuleId,subChannelId,json.encode(subDevice.uplink.capabilities[1].formula))\n \n\t\tlocal Phy=0\n --if subDevice.device.formula == "ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)" then --振弦公式\t\t\n\t\t\t\tlocal K = subDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t--local K2 = subDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t--local K3 = subDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\tlocal Fo = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\tlocal Kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal To = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\tlog.debug("hc_1403:振弦模块:公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\tif K ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\tlog.debug("hc_1403 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\telse\n\t\t\t\t\tlog.debug("hc_1403 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\tlocal Fi=Frequency \n\t\t\t\t\tPhy = K*Fi^2-(K*Fo^2)+Kt*(Temp-To)\n\t\t\t\t\tlog.debug("当前的Phy是:%s",Phy)\n\t\t\t\tend \n\t\t--end\n \n \n \n\t\tsubData.data={\n\t\t\t\t\tfrequency=string.format("%0.3f",Frequency),\n\t\t\t\t\ttemperature=string.format("%0.3f",Temp),\n \tphysicalvalue=string.format("%0.3f",Phy)\n\t\t\t\t\t}\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n log.debug('hc_1403:模块%s通道%s开始校验数据',moduleId,channelId)\n if data == nil or string.len(data)/2 ~= 25 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('hc_1403:模块%s通道%s 数据 长度校验失败:Data is nil or invalid length=%s',moduleId,channelId,string.len(data)/2)\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x48 or iota.hexToByte(data,1,'B') ~= 0x43 or iota.hexToByte(data,24,'B') ~= 0xaf then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n\t\tlog.debug('hc_1403:模块%s通道%s 数据校验失败:Hex CMD False:错误码=1003',moduleId,channelId)\n return false\n end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,4,'B'))\n\tif moduleId~= moduleStr then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug('hc_1403:模块%s通道%s 模块号校验失败:Invalid acq moduleId=%s',moduleId,channelId,moduleStr)\n return false\n end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,7,'B'))\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('hc_1403:模块%s通道%s 通道号校验失败:Invalid acq channelId=%s',moduleId,channelId,channelStr)\n\t\treturn false\n\tend\t\t\n log.debug('hc_1403:模块%s通道%s校验数据通过!!!',moduleId,channelId)\n return true\nend INLINE 2017-11-25 11:51:35.863+08 2020-01-06 15:00:44.988+08 2017-11-25 \N
+9c5e1617-0ca4-4ca1-aec1-dfb0bd25a0a8 geot_1407_485 \N 基泰单通道采集仪 485数字信号 模块 1.0 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 f d3f1aa63-8397-45a4-af26-15a0f91d1e13 Lua --//04 项目资料/2017-05/南京基泰/基泰单通道 单点协议示例.doc\n--require "functions" -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {} //设备信息\nprotocol=> {} //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\n-- start=function () \n\t-- log.debug("start %s, ctx=%s", "geot_1407.lua",json.encode(device.moduleId))\n -- ok,resp=ctx:ssend("0102030405060708",15000)\n -- log.debug("geot_1407:测试下发正常")\n-- end\n--moduleId=98 通道1 \n--ff8000620027100144595bd8cc024456de1600036494187c40116444e59d5d126444e59d5df053--振弦设备\n--ff8000620027100144595bd8cc024456de1600036494187c40116444e59d5df053--485设备\n--"frequency": 1355.3293337783257,\n--"temperature": 1836.917603\n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "geot_1407_485", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("geot_1407_485 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("geot_1407_485 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n\t\tbuff=iota.appendHexByte(buff, 0xFF, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x80, endian)\n buff=iota.appendHexWord(buff, moduleNo, endian) -- 模块号\n \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x0D, endian)\n buff=iota.appendHexByte(buff, 0x83, endian)\t\t\n buff=iota.appendHexByte(buff, 0x01, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x02, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x03, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x11, endian)\t\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n \t\tlog.debug("geot_1407_485 is SSending !")\n ok=ctx:asend(buff) \nend\n\n\nonData=function (hex)\n\t--主动上传式\n\tlog.debug("geot_1407_485:Received=>%s",hex)\n\tlocal out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n\t}\n\t\n\t\n\tlocal moduleNoStr\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNoStr=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("geot_1407_485 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNoStr,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNoStr=device.props.moduleId\t\t\n\t\t\tlog.debug("geot_1407_485 设备模块通道 属性获取 m=%s 接口props=%s",moduleNoStr,json.encode(device.uplink.props))\n\t\tend\n\t\n\t\n\t\n\tlocal ErrorCode = IsValid(hex,moduleNoStr)\n\tif ErrorCode then\n\t\tlocal moduleNo = iota.hexToShort(hex,2,'B') \t\n\t\tlog.debug("geot_1407_485:moduleNo=%s",moduleNo)\n\t\tlocal IDX_DIRECTION_X=29;\n\t\t local index=string.sub(hex,IDX_DIRECTION_X*2+1,IDX_DIRECTION_X*2+1)\n\t\t\t local modulu=string.sub(hex,IDX_DIRECTION_X*2+2,IDX_DIRECTION_X*2+2)..string.sub(hex,IDX_DIRECTION_X*2-1,IDX_DIRECTION_X*2)..string.sub(hex,IDX_DIRECTION_X*2-3,IDX_DIRECTION_X*2-2) --= iota.hexToUShort(hex, IDX_DIRECTION_X,'B')\n \t\t--log.debug("geot_1407_485 模数=%s",index,modulu)\n \t\tif(index=='8') then\n modulu=-1*tonumber(modulu)\n \t\t end\n log.debug("geot_1407_485 解析index=%s,模数=%s",index,modulu)\n\t\t\t --插入单通道数据表\n\t\t\t \n\t\t\t--获取通道设备deviceId \n local channelNo=1\n log.debug("geot_1407_485:模块号=%s,通道号=%s",moduleNo,channelNo)\n local childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\t\t\t--\n local deviceId\n if childDevice~=nil then\n \tdeviceId=childDevice.id\n log.debug("geot_1407_485:(振弦)子设备原形childDevice=%s",json.encode(childDevice))\n \tlog.debug("geot_1407_485:(振弦)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t--if childDevice.device.formula=="P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)" then --公式目前无法获取\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n \t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n \t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n --local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n --local To = childDevice.uplink.capabilities[1].formula.props.To\n log.debug("geot_1407_485:(振弦)子设备:m=%s,c=%s:公式参数=%s,%s,%s,%s,%s,%s",moduleNo,channelNo,K1,K2,K3,Fo,To,Kt)\n if K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil then --or Kt==nil or To==nil \n Phy=nil\n \t\tlog.debug("geot_1407_485:模块号=%s,通道号=%s 参数无效 当前的Frequency是:%s",moduleNo,channelNo,Frequency)\n else\n \t\tlog.debug("geot_1407_485:模块号=%s,通道号=%s 参数有效 当前的modulu是:%s",moduleNo,channelNo,modulu)\n local Fi=modulu --公式计算带入模数\n \t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)--+Kt*(Temp-To)\n log.debug("geot_1407_485:当前的Phy是:%s",Phy)\n end \n\t\t\t\t--else\n\t\t\t\t--log.debug("geot_1407_485:(振弦)子设备:m=%s,c=%s device.formula为nil"..tostring(moduleNo),tostring(channelNo))\n -- end\n else\n log.debug("geot_1407_485:(振弦)子设备:m=%s,c=%s deviceId为nil"..tostring(moduleNo),tostring(channelNo))\n end\n\t\t\tlocal data1={\n\t\t\t data={\t\t\t\t\t\t\n \t\t\tphysicalvalue=tonumber(string.format("%5.3f",Phy)),,\n\t\t\t\t\t\t\t},\n\t\t\t\tdevice=deviceId,\n \t\t\t\ttype=1 ,\n\t\t\t}\n\t\t\ttable.insert(out.data,data1)\t\t \t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n\tlog.debug("geot_1407_485 resultData=%s",resultData)\n\tctx:notify(resultData)\n --ctx:done(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("geot_1407_485 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("geot_1407_485:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("geot_1407_485 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t log.debug("geot_1407_485 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t \t if tostring(channelStrCheck)== tostring(channelNoId) then\n \n \t\t log.debug("geot_1407_485: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("geot_1407_485: subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function (data,moduleNoStrCheck)\n\tlog.debug('geot_1407_485:开始校验数据')\n if data == nil or string.len(data)/2 ~= 33 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n return false\n end\n\n\tif iota.hexToByte(data,0,'B') ~= 0xFF then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\t\n\t\n\tlocal moduleR = tostring(iota.hexToShort(data,2,'B'))\n\tif moduleR ~=tostring(moduleNoStrCheck) then\n errormsg = 'module is invalid='..moduleR\n errcode = 1003\n return false\n end\n log.debug('geot_1407_485:校验通过')\n\treturn true\t\nend INLINE 2018-05-11 09:47:31.457+08 2018-05-18 16:14:28.234+08 2018-05-11 \N
+018f9be4-aa05-45e1-9fbe-ef52acd6970e qy_wind_9216 \N 邯郸清易风速协议 1.0 f37cd019-7796-443e-9467-97aec7656620 f37cd019-7796-443e-9467-97aec7656620 f f37cd019-7796-443e-9467-97aec7656620 Lua \nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\nstart=function()\n log.debug("start %s, ctx=", "qy_wind_9216.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,500)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n end\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\n local speedofWind = bit:_or(bit:_lshift(iota.hexToByte(hex,3,'B'),8),iota.hexToByte(hex,4,'B'))/10.0\n out.data = {\n windSpeed = speedofWind\n }\n\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 or iota.hexToByte(data,2,'B') ~= 0x02 then\n errormsg = 'CMD is not right'\n errcode = 1001\n \treturn false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2017-09-12 20:23:37.278+08 2018-02-28 18:32:12.196+08 2017-09-12 \N
+25ba6551-67b9-4b04-85a8-314b0da4cef6 sxcg_inclination_1 \N 超高精度数字双轴倾角传感器 1.0 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 f 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 Lua start=function()\n log.debug("start %s, device=%s", "sxcg_inclination_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0xaa, endian) \n buff=iota.appendHexByte(buff, 8, endian) \n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0xbb, endian)\n\n -- aa080103000000bb\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n log.debug("recv %s, ctx=%s", "sxcg_inclination_1.lua",hex)\n --5517018300013841010035350030500066\n --"temp": 30.5,\n\t--"xDegree": 1.3841,\n\t--"yDegree": -0.3535\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==34) then\n\n local xSign=1\n if string.sub(hex,9,10)=='01' then\n xSign=-1\n end\n\n local ySign=1\n if string.sub(hex,17,18)=='01' then\n ySign=-1\n end \n\n local tSign=1\n if string.sub(hex,25,26)=='01' then\n tSign=-1\n end\n local xDegree = tonumber(string.sub(hex,11,16))/10000*tonumber(xSign)\n local yDegree = tonumber(string.sub(hex,19,24))/10000*tonumber(ySign)\n local temp = tonumber(string.sub(hex,27,32))/10000*tonumber(tSign)\n out.data = {\n xDegree=xDegree,\n yDegree=yDegree,\n temp=temp\n }\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("recv %s, ctx=%s", "sxcg_inclination_1.lua",json.encode(out))\n return json.encode(out)\nend\n INLINE 2018-02-06 16:56:06.443+08 2018-02-28 18:32:12.197+08 2018-02-06 \N
+526f9775-e8e0-4d37-ac18-304e20c79c6a hj_gasDetector_2501 \N 盐城恒嘉气体检测传感器协议 1.0 352bd9cd-bfc9-433a-be60-afa9421c71bf 352bd9cd-bfc9-433a-be60-afa9421c71bf f 352bd9cd-bfc9-433a-be60-afa9421c71bf Lua \n\nstart=function()\n log.debug("start %s, ctx=", "hj_gasDetector_2501.lua",json.encode(ctx.device))\n\tif tonumber(device.props.moduleId) > 255 then\n local errout={\n data ={},\n result = {code = 1004,msg = 'module is Invalid'}\n }\n\n local errresult = json.encode(errout)\n ctx:done(errresult)\n end\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) --1: CMD 3\n buff=iota.appendHexByte(buff, device.props.channelId, endian) --1: 通道号\n buff=iota.appendHexByte(buff, 0x00, endian) \n \tbuff=iota.appendHexByte(buff, 0x00, endian) --1: CMD 1\n buff=iota.appendHexByte(buff, 0x01, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n \n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n -- 0103040025999e moduleId=1 channelId=1\n --"concentration": 37\n local Concentration = iota.hexToShort(hex,3,'B')\n local elongation = 0\n out.data = {\n concentration = Concentration\n }\n\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n log.debug(string.sub(data,1,12))\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = 'CMD is not right,0x03'\n errcode = 1001\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n \n\n INLINE 2017-09-05 10:39:06.783+08 2018-02-28 18:32:12.197+08 2017-09-05 \N
+872da9a0-9b0f-48d0-9767-c090a8d895af bjftxd_laser_9501 \N 北京飞拓信激光测距仪协议 1.0 4f9eb22c-4ad8-4b77-a5a2-dc6eca00dd82 4f9eb22c-4ad8-4b77-a5a2-dc6eca00dd82 f 4f9eb22c-4ad8-4b77-a5a2-dc6eca00dd82 Lua \nstart=function()\n log.debug("start %s, ctx=", "bjftxd_laser_9501.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n ctx:done(json.encode(errout))\n \n else\n buff=iota.appendHexByte(buff, 0xCC, endian) -- 1: 指令: 0xCC \n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 1: moduleId\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,500)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n end\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n -- 2 2 1 4 4 2\n -- 3255303033303032\n local index,ismodule = IsModule(hex)\n local datastr = toStrHex(hex)\n\n local pdata = string.sub(datastr,index, index+5);\n local len = tonumber(pdata) / 1000.0; --m\n \t\n out.data = {\n length = len\n }\n if ismodule == false then \n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n --return json.endcode(out)\n end\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n local str = toStrHex(data)\n if string.sub(str,2,2) == 'U' or string.sub(str,3,3) == 'U' then\n return true\n else \n errormsg = 'Data is invalid'\n errcode = 1001\n return false\n end\nend\n\nIsModule=function(data)\n local moduleNo = ''\n \n local str = toStrHex(data)\n \tlocal startIndex = string.find(str,'U')\n\n if startIndex > 2 then\n moduleNo = string.sub(str,1,2)\n startIndex = startIndex + 1\n local invalid = false\n if device.props.moduleId == moduleNo then invalid = true else errormsg = 'moduleId is invalid' errcode = 1004 end \n \n return startIndex,invalid\n else \n local d = iota.hexToByte(data,0,'B')\n if d >=48 and d <=57 then\n moduleNo = string.sub(str,1,1)\n startIndex = startIndex + 1\n local invalid = false\n if device.props.moduleId == moduleNo or tonumber(device.props.moduleId)==d then invalid = true else errormsg = 'moduleId is invalid' errcode = 1001 end \n return startIndex,invalid\n else\n startIndex = startIndex + 1\n local invalid = false\n if tonumber(device.props.moduleId)==d then invalid = true else errormsg = 'moduleId is invalid' errcode = 1001 end \n return startIndex,invalid\n end \n end\n return startIndex,invalid\nend\n \n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2017-09-02 14:50:22.489+08 2018-02-28 18:32:12.198+08 2017-08-31 \N
+457f4d30-bbd7-4608-84f6-c6249675c7eb test1 \N 1 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f f16833ab-a4a4-45f5-9b39-ad2c66e488f6 Lua start=function()\n log.debug("LUA http server start")\nend\n\nonData=function(data)\n log.debug("ondata http_server %s", json.encode(data))\n ack = {type="http", code=201, body="good"}\n ctx:asend(ack)\n ctx:notify\nend INLINE 2018-09-06 17:07:18.601+08 2018-12-17 17:44:20.176+08 2018-09-06 \N
+078cc06c-c4e7-4863-8a2a-7e080b162bf9 JM_1550 \N 开始采集 1.0 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c f 5b2dc320-50f8-4461-87fc-03b66e3e5e4c Lua --//D:\\SVN\\201812项目\\20181207待接入项目\\1、北京为韵科技--康飞\\长沙金码动态电阻应变仪指令及换算.pdf\n\nstart =function()\n log.debug('jm_1550 devices=%s', json.encode(device))\n local endian = 'B'\n \n local moduleNo = device.uplink.props.module\n if string.len(moduleNo)<8 then --采集箱编号8位\n local strlen=8-string.len(moduleNo)\n \tfor i=1,strlen do\n moduleNo='0'..moduleNo\n end \n end\n \n local buff_str = '#'..moduleNo..'f!'\n local buff = StrToHex(buff_str)\n ctx:asend(buff)\n log.debug('jm_1550 发送读取指令 asend=>%s', buff)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n return json.encode(out)\nend\n\n\n-- 字符串 -> Hex\nStrToHex = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend INLINE 2019-02-13 09:45:34.188+08 2019-04-28 09:39:13.34+08 2019-02-13 \N
+228b069f-74d0-4863-983c-c33d126a4c02 zt_acqUint_4500 \N 南通中天采集仪协议 1.0 ca9092a8-c707-4783-9d79-f50f05048927 ca9092a8-c707-4783-9d79-f50f05048927 f ca9092a8-c707-4783-9d79-f50f05048927 Lua --//02 协议分析/2017-03/南通中天/提供V2.4版数据采集器命令集.pdf\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\nstart=function()\n log.debug("load script %s, moduleId=%s", "zt_4500.lua", device.uplink.props.module or "[nil]")\n\tlocal buff=''\n local buffstr='LA'\n local moduleNo=tonumber(device.uplink.props.module) \n buffstr=buffstr..string.format("%03d",moduleNo)\n buffstr=buffstr..'/LDCMD/1$'\n log.debug("zt_4500: buffstr= %s",buffstr)\n buff_request=StrToHex(buffstr)\n\tlog.debug("zt_4500: buff_request= %s",buff_request)\n ok,resp=ctx:ssend(buff_request,15000)--同步下发)\n\tlocal result='{}'\n\tif ok then\t \n\t\tresult = unmarshall(resp,resp)--解析所有数据\n\telse\n\t\tlog.debug("zt_4500:模块%s通道%s的数据接收失败",moduleNo,channelNo) \n\tend\n\tlog.debug('zt_4500:out序列化')\n\tlocal resultData =json.encode(result)\n log.debug("zt_4500:out序列化结果 : out is =%s", json.encode(out))\n ctx:done(resultData)\nend\n--2409494409592D4D2D442D482D4D09426174745F566F6C746167655F6D56094D6F6973315F6D56094D6F6973315F25094D6F6973325F6D56094D6F6973325F25094D6F6973335F6D56094D6F6973335F25094D6F6973345F6D56094D6F6973345F25094D6F6973355F6D56094D6F6973355F25094D6F6973365F6D56094D6F6973365F25094D6F6973375F6D56094D6F6973375F25094D6F6973385F6D56094D6F6973385F25095261696E66616C6C636F756E74095261696E46616C6C5F6D6D0D0A24094C4130303109323031372D30332D33302031323A3035093132333835093030313509302E3130093030313409302E3130093030313409302E3130093030313409302E3130093030313409302E3130093030313409302E3130093030313409302E3130093030313409302E313009303030303009302E30302020200D0A\nunmarshall=function(hex)\n log.debug("zt_4500:".."LUA: onData: data is =%s", hex)\n\t\n log.debug("zt_4500:".."LUA:subdevices : data is =%s", json.encode(device.dnlinks[1].devices))\n\n local out={\n data ={},\n result = {},\n type=2\n }\n \n\n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n allResponse=HexToStr(hex)\n\t\tallResponse = string.gsub(allResponse,'\\r','\\n')\n print("zt_4500:allResponse是 %s",allResponse)\n --获取子字符串表\n local sData=Split(allResponse,'\\n')\n\n allResponse = string.gsub(allResponse,'\\r','\\n')\n print("zt_4500:allResponse是 %s",allResponse)\n --获取子字符串表\n local sData=Split(allResponse,'\\n')\n\n local len=table_leng(sData)\n\t\tfor k=len,1,-1 do\n if sData[k]=='' or sData[k]==nil then\n table.remove (sData,k) \n end\n end\n\t\t\n\t\t\n local title = Split(sData[1],'\\t')\n local dataresult = Split(sData[2],'\\t')\n local index = IndexOf(title,'ID')\n local moduleNo = string.sub(dataresult[index],3,-1)--模块号\n index = IndexOf(title,'Y-M-D-H-M')\n local timestr = dataresult[index]\n index = IndexOf(title,'Batt_Voltage_mV')\n local voltagestr = dataresult[index]\n\n\n\n local offset = 1\n local title_len=table_leng(title)\n for k=1,title_len,1 do \n local key = string.format("Mois%s", offset)\n if string.find(title[k],key) then \n local data1 = tonumber(dataresult[k+1])--datalist\n local data2 = tonumber(dataresult[k])\n\t\t\t\tlocal channelNo=offset\n\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\t\t\t\tlocal deviceId\n\t\t\t\tif childDevice~=nil then\n\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\tend\n\t\t\t\tlog.debug('zt_4500:模块%s通道%s的deviceId=%s',moduleNo,channelNo,deviceId)\n\t\t\t\tlocal rawData = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tdata1=data1,\n\t\t\t\t\t\t\t\tdata2=data2,\n\t\t\t\t\t\t\t\tvoltagestr=voltagestr,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t}\n\t\t\t\ttable.insert(out.data,rawData)\t\n offset = offset + 1\n k=k+1\n end\n end\n\t\t\n\t\tlocal channelNo=offset --通道号\n if Contains(title,'Rainfallcount') and Contains(title,'RainFall_mm') then\n index = IndexOf(title,'RainFall_mm')\n local rain = tonumber(dataresult[index])\n index = IndexOf(title,'Rainfallcount')\n local rainv = tonumber(dataresult[index])\n\n\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\t\t\tlocal deviceId\n\t\t\tif childDevice~=nil then\n\t\t\t\tdeviceId=childDevice.id\t\t\t\n\t\t\tend\n\t\t\tlocal rawData = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\train=rain,\n\t\t\t\t\t\t\t\trainv=rainv,\n\t\t\t\t\t\t\t\tvoltagestr=voltagestr,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t}\n\t\t\ttable.insert(out.data,rawData)\t\t\t\n end\n \n else\n out.result = {code = errcode, msg = errormsg}\n end\n return out\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n moduleNoId=tonumber(moduleNoId)\n channelNoId=tonumber(channelNoId)\n if device.dnlinks[1].devices ~=nil then\n log.debug("moduleId= "..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n \tif child.uplink.props.module==tostring(moduleNoId) then\n\t\t \t if child.uplink.props.channel == tostring(channelNoId) then\n log.debug("zt_4500 DeviceInfo是:"..tostring(child.deviceId))\n \t\t log.debug("zt_4500 子设备原形child=%s",json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("zt_4500 subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function(checkdata)\n log.debug("zt_4500 校验开始")\n if checkdata == nil or string.len(checkdata)/2 <= 3 then\n errormsg = 'Data is nil or length is not right'\n errcode = 1001\n return false\n end\n if iota.hexToByte(checkdata,0,'B') ~= 0x24 or iota.hexToByte(checkdata,1,'B') ~= 0x09 or iota.hexToByte(checkdata,string.len(checkdata)/2-1,'B') ~= 0x0a then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n--crc\n log.debug("zt_4500 校验通过")\n return true\nend\n\n\n -- 字符串 -> Hex\nStrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n-- Hex-> 字符串 \nHexToStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n\nIndexOf=function(table,str) \n local pp = 0\n for k,v in pairs(table) do\n if str == v then\n pp = k\n return pp\n end\n end\n return -1\nend \n\nContains=function(table,str)\n for k,v in pairs(table) do\n if str == v then\n return true\n end\n end\n return false\nend INLINE 2017-09-09 13:49:28.644+08 2018-12-14 11:35:13.775+08 2018-03-08 \N
+471b754b-0904-451b-96a3-a5e8c6a6ee2b xy_LiquidLevel_1931 \N 1.0 3e663c2d-1b5c-4742-aef3-a0c1368cc4b3 3e663c2d-1b5c-4742-aef3-a0c1368cc4b3 f 3e663c2d-1b5c-4742-aef3-a0c1368cc4b3 Lua --//04 项目资料/2017-07/北京星移/CYW11通用型投入式液位变送器.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "xy_LiquidLevel_1931", device.props.moduleId or "[nil]")\n\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian) \t\t\n buff=iota.appendHexByte(buff, 0x01, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n end\nend\n--01030202acb959\n--moduleId=1\n--"liquidLevel": 1710,\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\n local LiquidLevel = iota.hexToShort(hex,3,'B')*5/2.0;\n \n out.data = {\n liquidLevel = LiquidLevel, \n }\n\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 or iota.hexToByte(data,2,'B') ~= 0x02 then\n errormsg = 'CMD is not right'\n errcode = 1001\n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid ack moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2017-11-30 11:47:09.516+08 2018-02-28 18:32:12.2+08 2017-11-30 \N
+625ea754-8015-430d-afef-ca20ec2efa06 mk_accelertation_1 \N 单轴加速度 1.0 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca f c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, ctx=%s", "mk_accelertation_1.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--AA01030803EBE4E8\n--"accelertation": 1003\n local out={\n data ={},\n result = {}\n }\n log.debug("recv %s, ctx=%s", "mk_accelertation_1.lua",data)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local moduleNo = iota.hexToByte(hex,1,'B')\n \n local modulenumber= tonumber(device.props.moduleId)\n local valCmd = iota.hexToByte(hex,3,'B') \n if valCmd == 0x08 and moduleNo==modulenumber then\n \n local accelertation = iota.hexToShort(hex,4,'B')\n out.data = { \n accelertation=accelertation\n }\n\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_accelertation_1.lua",json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = 1001, msg = "Is not validated"}\n end\n else\n out.result = {code = errcode, msg = errormsg}\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_accelertation_1.lua",json.encode(out))\n ctx:notify(resultData)\n end\n \nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n --iota.checkPlusSum16\n return true\n--crc\nend\n\n\n\n INLINE 2018-01-08 10:45:53.614+08 2018-02-28 18:32:12.201+08 2018-01-08 \N
+44a576ba-470c-4115-8e33-f2a80145060c anXin_9028_Settlemen \N 安信标准协议 沉降 1.0 5c2a5b34-3127-4921-bf54-49378012c0b0 5c2a5b34-3127-4921-bf54-49378012c0b0 f 5c2a5b34-3127-4921-bf54-49378012c0b0 Lua --[[\n协议号: 9028;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "AnXin_9028.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n -- ff41584a000a000101379c\n\tlocal BE='B'\n\tlocal buff=''; \n\tbuff=iota.appendHexByte(buff, 0xFF, BE); -- 1: 帧头\n\tbuff=iota.appendHexByte(buff, 0x41, BE);\n\tbuff=iota.appendHexByte(buff, 0x58, BE);\n\tbuff=iota.appendHexByte(buff, 0x4a, BE);\n buff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x0a, BE); -- 2 :设备类型0a 静力水准,\n buff=iota.appendHexByte(buff, 0x00, BE); \n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE); -- 3: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x01, BE); --功能码 0x01采集\n\tbuff=iota.appendHexCrc(buff, 'B' ,0) --CRC16\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 ff41584a000a0004800000f6180aa5cead 沉降63mm 温度27.25° moduleId=4\n--原始数据 \nfunction protocol_decode(da)\n \n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug(data)\n\t--判断数据有效性\t\t\t\n if string.len(data)/2 ~=17 then\n\t\tlocal message = 'Invalid Msg, len='\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\t\n\tend\n\tlocal startbyte_1 = iota.hexToByte(data, 0,'B');\n\tlocal startbyte_2 = iota.hexToByte(data, 1,'B');\n\tlocal startbyte_3 = iota.hexToByte(data, 2,'B');\n\tlocal startbyte_4 = iota.hexToByte(data, 3,'B');\n\tlocal devicetype = iota.hexToByte(data, 5,'B'); -- :设备类型0a 温湿度,\n\t\n\tif startbyte_1 ~= 0xFF or startbyte_2 ~= 0x41 or startbyte_3 ~= 0x58 or startbyte_4 ~= 0x4a or devicetype ~= 0x0a then\n\t\tlog.debug("帧头错误")\n else\n log.debug("帧头正确")\n\tend\n \t\t\t\t\n\t\n log.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal distance = iota.hexToInt(data,9,'B')/1000.0;\n local temp = iota.hexToShort(data, 13,'B')/100.0;\n log.debug("沉降等于:%s,温度等于:%s",distance,temp)\n\t\t\n\t\tout.data = {\n\t\tDistance=distance,\n Temp=temp\n\t\t};\t\n\t return json.encode(out)\nend\n INLINE 2017-08-31 16:47:40.673+08 2018-02-28 18:32:12.201+08 2017-08-31 \N
+43291a09-50f1-4287-8c7c-b51503799fd1 sxcg_liquidLevel_1 \N 上海隼星 1.0 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 f 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "sxcg_liquidLevel_1934.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("sxcg_liquidLevel_1934 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("sxcg_liquidLevel_1934 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) -- 水位2 水温1\n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("sxcg_liquidLevel_1934,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t log.debug("sxcg_liquidLevel_1934 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n--0103040012d687007d0000\nunmarshall=function(hex,moduleNoStr)\n log.debug("sxcg_liquidLevel_1934 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local level =iota.hexToInt(hex,3,'B')\n\t\tlocal temperature =iota.hexToUShort(hex,7,'B')/10\n\t\t\n log.debug("sxcg_liquidLevel_1934 m=%s,temperature=%s ",moduleNoStr,temperature)\n out.data = { \n level=level,\n\t\t\ttemperature=temperature\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("sxcg_liquidLevel_1934 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 11 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2017-11-16 16:43:25.91+08 2018-08-15 10:59:26.663+08 2018-08-15 \N
+e0bea2c7-c789-4c48-8005-ebd569755d61 tcpXY \N 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start=function()\n log.debug("gr_2512 发送数据=01020304")\n ok,resp=ctx:asend("01020304",5000)\nend\n\nonData=function(hex)\n log.debug("gr_2512 收到数据=%s", hex)\n\tlog.debug("gr_2512 device =%s", json.encode(device))\n local out={\n data ={},\n result = {},\n type=2\n }\n\t\n\t\n\n\tlocal data=hex\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\tlog.debug('gr_2512 数据有效')\n\t\n\t local k=0.0;\n\t\tlocal unit=''\n\t\tlocal k_index=string.sub(data,11,12)\n\t\tif k_index=='01' then\n\t\t k=1.0\n\t\t unit = "ug/m3"; --PM2.5\n\t\t elseif k_index=='02' then\n\t\t k=1.0\n\t\t unit = "ug/m3"; --PM10\n\t\t elseif k_index=='03' then\n\t\t k=1.0\n\t\t unit = "ppb"; --SO2\n\t\t elseif k_index=='04' then\n\t\t k=1.0\n\t\t unit = "ppb"; --NO2\n\t\t elseif k_index=='05' then\n\t\t k=0.001\n\t\t unit = "ppm"; --CO\n\t\t elseif k_index=='06' then\n\t\t k=0.01\n\t\t unit = "ppb"; --O3\n\t\t elseif k_index=='09' then\n\t\t k=0.01\n\t\t unit = "% RH"; --湿度\n\t\t elseif k_index=='0a' then\n\t\t k=0.1\n\t\t unit = "℃"; --温度\n\t\t else\n\t\t log.debug('gr_2512 无匹配数据类型')\t\t \n\t\tend\n\t\t--log.debug('k是'..k)\n\t\tlocal Concentration = 0.0;\n\t\tlocal gasType=string.sub(data,13,14)\n \n\t\tif gasType=='20' then\n\t\t\tConcentration=iota.hexToInt(data,9,'L')\n\t\telseif gasType=='40' then\n\t\t\tConcentration=iota.hexToShort(data,9,'L')\n\t\telseif gasType=='43' then\n\t\t\tConcentration=iota.hexToShort(data,9+1,'L')*(-1)^tonumber(string.sub(data,9,10),16) \t\t\n end\n\t\tlocal moduleId = tonumber(string.sub(data,1,2),16);\n local channelId = tonumber(string.sub(data,11,12),16);\n\t\tlog.debug('gr_2512 moduleId=%s,channelId=%s',moduleId,channelId)\n\t\tlocal childDevice=getDeviceInfo(moduleId,channelId) \n\t\tif childDevice~=nil then\n\t\t\tlocal data1 = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tconcentration= Concentration*k\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t}\n\n\t\t\ttable.insert(out.data,data1)\n end\t\t\t\n\telse\n out.result = {code = errorcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n\n\t--/湿度13,其他15,心跳10\n\tlocal datalength=string.len(data)\n\tif string.len(data)/2 ==15 or string.len(data)/2 ==13 or string.len(data)/2 ==10 then\n\telse\n\t errormsg = 'data length is wrong'\n errorcode = 1001\n return false\n end\n\t\n if string.sub(data,1,2) == '77' or string.sub(data,3,4) == '77' or string.sub(data,5,6) == '77' or string.sub(data,7,8) == '2e' then\n --心跳直接放入\n\t\treturn true\n end\n\n\tif string.sub(data,9,10) ~= '01' or string.sub(data,15,16) ~= '00'then\n errormsg = 'Data is Invalid'\n errorcode = 1001\n return false\n end\n \n return true\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("gr_2512 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t -- log.debug("gr_2512:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t \n\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\tlog.debug("gr_2512 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\t\n\t\t\t \n \tif tonumber(moduleStrCheck)==tonumber(moduleNoId) then\n\t\t \t \n if tonumber(channelStrCheck)==tonumber(channelNoId) then\n\t\t\t\t\tlog.debug("gr_2512: m=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n\t\t\t\t\treturn child\n\t\t\t\tend\n\n \t \tend\n\t\tend\n else\n log.debug("gr_2512: subdevices是nil")\n \treturn nil\n end\nend\n\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n\n INLINE 2018-06-19 16:50:06.449+08 2018-06-19 17:09:25.099+08 2018-06-19 \N
+8a27161a-7fe3-47bf-a269-648c94121266 FS_LF_XW \N 同 信为9102 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua \nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\n\nstart=function()\n log.debug("start %s, ctx=", "FS_LF_XW.lua",json.encode(ctx.device))\n\t\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("FS_LF_XW 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("FS_LF_XW 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\tif tonumber(moduleNo) > 255 then\n local errout={\n data ={},\n result = {code = 1004,msg = 'Invalid moduleId,moduleId >= 255'}\n }\n\n local errresult = json.encode(errout)\n ctx:done(errresult)\n end\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 0x04, endian) --1: CMD 4\n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n \tbuff=iota.appendHexByte(buff, 0x02, endian) --1: CMD 1\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("FS_LF_XW m=%s received=%s",moduleNo,hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n -- 010404800101488222\n local data_by = 0\n local elongation = 0\n if iota.hexToByte(hex,1,'B') == 0x04 then\n local by = string.sub(hex,7,15) --data\n local sign = 1\n data_by = iota.hexToByte(by,0,'B') \n if data_by >= 0x80 then\n data_by = bit:_and(data_by , 0x7f)\n sign = -1\n end\n local integer = bit:_or(bit:_lshift(bit:_and(data_by , 0xffff) , 8) , iota.hexToByte(by,1,'B')) * sign\n local decim = bit:_or(bit:_lshift(bit:_and(iota.hexToByte(by,2,'B') , 0xffff) , 8) , iota.hexToByte(by,3,'B')) /1000 * sign\n\n elongation = integer + decim\n out.data = {\n length=elongation\n }\n else \n local cmd = iota.hexToByte(hex,2,'B')\n if cmd == 0x06 then \n out.result = {\n code = 1005,\n msg = '功能号错误'\n }\n elseif cmd == 0x05 then \n out.result = {\n code = 1005,\n msg = '寄存器错误'\n }\n elseif cmd == 0x04 then \n out.result = {\n code = 1005,\n msg = '正常操作发生异常'\n }\n end\n end\n\n\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data,moduleNoStrCheck)\n if data == nil or (string.len(data)/2 ~= 9 and string.len(data)/2 ~=5) then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x04 and iota.hexToByte(data,1,'B') ~= 0x84 then\n errormsg = 'CMD is not right,0x04/0x84'\n errcode = 1001\n return false\n end\n if tostring(moduleNoStrCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\n errormsg = 'Invalid moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n \n\n INLINE 2018-05-16 17:24:13.078+08 2018-05-17 10:51:25.987+08 2018-05-16 \N
+95936e79-012a-4439-87a6-0a08f6c419e5 JM_1551 \N 停止采集指令 1.0 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c f 5b2dc320-50f8-4461-87fc-03b66e3e5e4c Lua --//D:\\SVN\\201812项目\\20181207待接入项目\\1、北京为韵科技--康飞\\长沙金码动态电阻应变仪指令及换算.pdf\n\nstart =function()\n log.debug('jm_1550 devices=%s', json.encode(device))\n local endian = 'B'\n \n local moduleNo = device.uplink.props.module\n if string.len(moduleNo)<8 then --采集箱编号8位\n local strlen=8-string.len(moduleNo)\n \tfor i=1,strlen do\n moduleNo='0'..moduleNo\n end \n end\n \n local buff_str = '#'..moduleNo..'Z!'\n local buff = StrToHex(buff_str)\n ctx:asend(buff)\n log.debug('jm_1550 发送读取指令 asend=>%s', buff)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n return json.encode(out)\nend\n\n\n-- 字符串 -> Hex\nStrToHex = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend INLINE 2019-04-20 17:19:29.785+08 2019-04-28 09:39:28.295+08 2019-04-20 \N
+2a2d8e77-444a-4911-9f33-9de3b1dff1c8 mk_accelertation_3 \N 三轴加速度 1.0 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca f c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, ctx=%s", "mk_accelertation_3.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--aa0407030d660eb70000ad58\n--"xDegree": 3.43,\n--"yDegree": 3.767,\n--"zDegree": 0\n local out={\n data ={},\n result = {}\n }\n log.debug("recv %s, ctx=%s", "mk_accelertation_3.lua",data)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local moduleNo = iota.hexToByte(hex,1,'B')\n \n local modulenumber= tonumber(device.props.moduleId)\n local valCmd = iota.hexToByte(hex,3,'B') \n if valCmd == 0x16 and moduleNo==modulenumber then\n \n local xAccelertation = iota.hexToShort(hex,4,'B')\n local yAccelertation = iota.hexToShort(hex,6,'B')\n local zAccelertation = iota.hexToShort(hex,8,'B')\n out.data = { \n xAccelertation = xAccelertation,\n yAccelertation = yAccelertation,\n zAccelertation = zAccelertation\n }\n\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_accelertation_3.lua",json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = 1001, msg = "Is not validated"}\n end\n else\n out.result = {code = errcode, msg = errormsg}\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_accelertation_3.lua",json.encode(out))\n ctx:notify(resultData)\n end\n \nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n --iota.checkPlusSum16\n return true\n--crc\nend\n\n\n\n INLINE 2018-01-08 11:00:40.723+08 2018-02-28 18:32:12.202+08 2018-01-08 \N
+dc9c3a5d-cfcf-4676-bd75-2314053e2cf6 anXin_Settlemen_9028 \N 安信标准协议 静力水准(请求应答) 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --[[\n协议号: 9028;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "anXin_Settlemen_9028.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n -- ff41584a000a000101379c\n\tlocal BE='B'\n\tlocal buff=''; \n\tbuff=iota.appendHexByte(buff, 0xFF, BE); -- 1: 帧头\n\tbuff=iota.appendHexByte(buff, 0x41, BE);\n\tbuff=iota.appendHexByte(buff, 0x58, BE);\n\tbuff=iota.appendHexByte(buff, 0x4a, BE);\n buff=iota.appendHexWord(buff, 10, BE) -- 2: 类型=1\n buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 3: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x01, BE); --功能码 0x01采集\n\tbuff=iota.appendHexCrc(buff, 'B' ,0) --CRC16\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 ff41584a000a0004800000f6180aa5cead 沉降63mm 温度27.25° moduleId=4\n--moduleId=4 \nfunction protocol_decode(da)\n \n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug(data)\n\t--判断数据有效性\t\t\t\n if string.len(data)/2 ~=17 then\n\t\tlocal message = 'Invalid Msg, len='\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\t\n\telse\n\tlocal startbyte_1 = iota.hexToByte(data, 0,'B');\n\tlocal startbyte_2 = iota.hexToByte(data, 1,'B');\n\tlocal startbyte_3 = iota.hexToByte(data, 2,'B');\n\tlocal startbyte_4 = iota.hexToByte(data, 3,'B');\n\tlocal devicetype = iota.hexToByte(data, 5,'B'); -- :设备类型0a 温湿度,\n\t\n\tif startbyte_1 ~= 0xFF or startbyte_2 ~= 0x41 or startbyte_3 ~= 0x58 or startbyte_4 ~= 0x4a or devicetype ~= 0x0a then\n\t\tlog.debug("帧头错误")\n else\n log.debug("帧头正确")\n\tend\n \t\t\t\t\n\t\n log.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal distance = iota.hexToInt(data,9,'B')/1000.0;\n local temp = iota.hexToShort(data, 13,'B')/100.0;\n log.debug("沉降等于:%s,温度等于:%s",distance,temp)\n\t\t\n\t\tout.data = {\n\t\tdistance=distance,\n temperature=temp\n\t\t};\n end\n\t return json.encode(out)\nend\n INLINE 2017-08-31 16:33:23.005+08 2019-12-23 15:20:18.182+08 2017-08-27 \N
+3a675e96-bee4-48ae-85c8-643b40bb29fd jzyg_fsfx \N 1.0 e54b85b0-151e-4b74-b360-a8ae65addd46 e54b85b0-151e-4b74-b360-a8ae65addd46 f e54b85b0-151e-4b74-b360-a8ae65addd46 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "jzyg_fsfx.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("jzyg_fsfx 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("jzyg_fsfx 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 3, endian) -- 1: 指令: 0x03 = 采集\n\tbuff=iota.appendHexWord(buff, 0x00, endian) -- 2: 0x00 起始地址低位 寄存器数据高位\n\tbuff=iota.appendHexWord(buff, 0x02, endian) -- 2: 0x02 起始地址低位 寄存器数据高位\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000) --发送指令\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\n \n local speed = iota.hexToUShort(hex,3,'B')/10\n\t\tlocal direction = iota.hexToUShort(hex,5,'B')/10\n\n \n out.data = {\n speed=speed,\n\t\t\tdirection=direction\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('jzyg_fsfx开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('jzyg_fsfx数据校验通过')\n return true\n--crc\nend\n\n INLINE 2020-11-02 10:08:07.078+08 2020-11-02 10:14:27.912+08 2020-11-02 \N
+0dc05dea-ad41-48eb-8f4b-4b2b20ae87fe jinan_weight_9802 \N 济南大学奇石缘称重 1.0 1b5ae589-18e9-4263-96b2-dd30c0357ae1 1b5ae589-18e9-4263-96b2-dd30c0357ae1 f 1b5ae589-18e9-4263-96b2-dd30c0357ae1 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--测试AAAAF0AC010000D0DE480008E048003F7B9700E10700000B000000010000000B0000000B0000000B000000008E4F00000000000B00000037000000020000000000000001000000BE150000988A4F0001000000F88D4F005CCF2800A3E0C577008E4F00C0B6B4A84238363039BEAF0000000000323031372D382D325F31362D32322D32362D36303831395F382E6A7067A7D8092C00000020BBD268B0D02800B961B66170CF2800D0DE4800F8DC2800D58C8F7686509F41FEFFFFFFDA988D7624E3D361008E4F000800000031000000E8854F00E8854F00A0D028007C784B0074E3D361008E4F00E8854F0024D02800A0D028007C784B0000000000000000009F6BD461A0D0280000000000A4D02800C754AD6AE8854F0024D02800010000006B0200000900000000454B001600000000000000DC104A00008E4F0088D028004FD7A9681900000030BBD26880D0280000C6F161B8704B0000854F00C8104A0000000000160000000000000000000000E5E89B000000000028000000C8D1280000454B001061AE68B8D02800D0DF5700E1EBAE0000000000C8D128003CFC280004DFAC000000000028000000C8D12800E0E953004C03EEEE\nstart=function()\n log.debug("start %s, ctx=", "jinan_weight_9802.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local IDX_Start = 0 -- 起始指令\n local IDX_CMD = 2; -- 命令字 \n local IDX_DataLen = 3; -- 数据长度\n\n--数据域 内的索引号\n local IDX_cDevNum = 0; -- 设备编号\n local IDX_lDataHCode = 1; -- 数据标号H\n local IDX_lDataCode = 2; -- 数据标号L\n local IDX_iYear = 3; -- 年\n local IDX_cMonth = 4; -- 月\n local IDX_cDay = 5; -- 日\n local IDX_cHour = 6; -- 时\n local IDX_cMin = 7; -- 分\n local IDX_cSec = 8; -- 秒\n local IDX_iMilSec = 9; -- 毫秒\n local IDX_iLane = 10; -- 车道\n local IDX_cVehicleType = 11; -- 车型\n local IDX_fSpeed = 12;--车速\n local IDX_iAxleCnt = 13; -- 轴数\n local IDX_iAxleDis = 14; -- 轴距cm\n local IDX_cDriction = 15; -- 方向\n local IDX_fSumWeight = 16; -- 总重\n local IDX_fAxleWeight_1 = 17; -- 轴一重量\n local IDX_fAxleWeight_2 = 18; -- 轴二重量\n local IDX_fAxleWeight_3 = 29; -- 轴三重量\n local IDX_fAxleWeight_4 = 20; -- 轴四重量\n local IDX_fAxleWeight_5 = 21; -- 轴五重量\n local IDX_fAxleWeight_6 = 22; -- 轴六重量\n local IDX_licence = 23; -- 车牌号\n local IDX_frontPic64=24; --前图片文件名称\n local IDX_backtPic64=25;--后图片文件名称\n local IDX_sidePic64=26;--旁边图片文件名称\n local IDX_upPic64=27;--旁边图片文件名称\n local IDX_Movie64=28;--视频文件名称\n\n\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local data=string.sub(hex,15,-5)--获取数据域\n\n local Channel = iota.hexToUInt(data,IDX_iLane*4,'L') --车道号\n local Carmodel =iota.hexToUInt(data,IDX_cVehicleType*4,'L') --车型号\n local Speed = iota.hexToUInt(data,IDX_fSpeed*4,'L')--车速\n local Axisnum = iota.hexToUInt(data,IDX_iAxleCnt*4,'L')--轴数\n local Totalbase = iota.hexToUInt(data,IDX_iAxleDis*4,'L')--轴距cm\n local Direction = iota.hexToUInt(data,IDX_cDriction*4,'L')--车向\n local FSumWeight = iota.hexToUInt(data,IDX_fSumWeight*4,'L')--总重\n\n local FAxleWeight_1 = iota.hexToUInt(data,IDX_fAxleWeight_1*4,'L')-- 轴一重量\n local FAxleWeight_2 = iota.hexToUInt(data,IDX_fAxleWeight_2*4,'L')-- 轴二重量\n local FAxleWeight_3 = iota.hexToUInt(data,IDX_fAxleWeight_3*4,'L')-- 轴三重量\n local FAxleWeight_4 = iota.hexToUInt(data,IDX_fAxleWeight_4*4,'L')-- 轴四重量\n local FAxleWeight_5 = iota.hexToUInt(data,IDX_fAxleWeight_5*4,'L')-- 轴五重量\n local FAxleWeight_6 = iota.hexToUInt(data,IDX_fAxleWeight_6*4,'L')-- 轴六重量\n \n --local ddd=string.sub(data,2*4*IDX_licence+1,2*4*(IDX_licence)+4); \n --local ddd2=string.sub(data,2*4*(IDX_licence)+5,2*4*(IDX_licence)+8);\n --local ddd1=string.sub(data,2*4*(IDX_licence)+9,2*4*(IDX_licence)+18);\n\n local Licence1 = unicode2gb2312(string.sub(data,2*4*(IDX_licence)+1,2*4*(IDX_licence)+4))--车牌颜色\n local Licence2 = unicode2gb2312(string.sub(data,2*4*(IDX_licence)+5,2*4*(IDX_licence)+8))--车牌归属地\n local Licence3 = toStrHex(string.sub(data,2*4*(IDX_licence)+9,2*4*(IDX_licence)+18))--5位数字或字母\n local licence4_1=string.sub(data,2*4*(IDX_licence)+19,2*4*(IDX_licence)+20)\n local licence4\n --车牌最后一位 的16进制开头是3 是数字,否者可能是汉字 \n if(string.sub(licence4_1,1,1)=='3') then\n licence4 = toStrHex(licence4_1)--第6位数字\n else\n licence4_1=string.sub(data,2*4*(IDX_licence)+19,2*4*(IDX_licence)+22)\n licence4 = unicode2gb2312(licence4_1)--第6位汉字\n end\n local Licence=Licence1..Licence2..Licence3..licence4;\n \n out.data = { \n channel = Channel,\n carmodel= Carmodel,\n speed = Speed,\n axisnum=Axisnum,\n totalBase = Totalbase,\n direction = Direction,\n fSumWeight= FSumWeight, \n axieWeight1 = AxieWeight1,\n axieWeight2 = AxieWeight2,\n axieWeight3 = AxieWeight3,\n axieWeight4 = AxieWeight4,\n axieWeight5 = AxieWeight5,\n axieWeight6 = AxieWeight6,\n licence = Licence\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n local len=string.len(data)/2\n if hexToByte(data,0,'L') ~= 0xaa or \n hexToByte(data,1,'L') ~= 0xaa or \n hexToByte(data,len-2,'L') ~= 0xee or \n hexToByte(data,len-1,'L') ~= 0xee then\n errormsg = 'is not match weight buffer .'\n errcode = 1001\n return false\n end\n --if len ~=\n --rrormsg = 'weight buffer length is not enough.'\n return true\n--crc\nend\n\nfunction unicode2gb2312(src)\n\tlocal map_tb={["冀"] = "BCBD",["豫"] = "D4A5",["云"] = "D4C6",["辽"] = "C1C9",["黑"] = "BADA",["湘"] = "CFE6",["皖"] = "CDEE",\n ["鲁"] = "C2B3",["新"] = "D0C2",["苏"] = "CBD5",["浙"] = "D5E3",["赣"] = "B8D3",["鄂"] = "B6F5",["桂"] = "B9F0", \n ["甘"] = "B8CA",["晋"] = "BDFA",["蒙"] = "C3C9",["陕"] = "C9C2",["吉"] = "BCAA",["闽"] = "C3F6",["贵"] = "B9F3", \n ["粤"] = "D4C1",["青"] = "C7E0",["藏"] = "B2D8",["川"] = "B4A8",["宁"] = "C4FE",["琼"] = "C7ED",["渝"] = "D3E5", \n ["京"] = "BEA9",["津"] = "BDF2",["沪"] = "BBA6",["深"] = "C9EE",["学"] = "D1A7",["白"] = "B0D7",["蓝"] = "C0B6",\n ["黄"] = "BBC6",["黑"] = "BADA",["学"] = "D1A7",["使"] = "CAB9",["警"] = "BEAF"}\t\n\tfor k,v in pairs(map_tb) do\n if v == string.format("%X",tonumber(src,16)) then\n return k\n end\n end\n return " "\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend INLINE 2017-11-09 16:29:53.827+08 2018-02-28 18:32:12.204+08 2017-11-07 \N
+d923ce84-8f85-4e60-94c4-e91819015eeb simulator \N 1 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua function unhex( input )\n return (input:gsub( "..", function(c)\n return string.char( tonumber( c, 16 ) )\n end))\nend\n\nstart=function()\nend\n\nonData=function(data)\n local dataJson = unhex(data)\n log.debug("simulator: devices data = %s", dataJson)\n ctx:notify(dataJson)\nend INLINE 2018-11-23 20:44:16.517+08 2018-11-24 16:06:45.061+08 2018-11-23 \N
+333f9eaa-379c-4293-a159-a26f133e42be CZJTM_api_3003 \N 1.0 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 f d5fa5193-b237-4a60-b82a-165c033e2596 Lua \nstart = function()\n log.debug('CZJTM_api_3003 start device=%s', json.encode(device))\n\n local out = {\n type = 2,\n data = {},\n result = {}\n }\n local datareq = {\n type = 'http',\n url = '', --url=http://www.jsjtm.com.cn:8080/api/RawData/GetRawDataList\n method = 'get',\n header = {}\n }\n local Account = device.props.Account\n datareq.url = device.props.Url .. '?Account=' .. Account\n local PassWord = device.props.PassWord\n datareq.url = datareq.url .. '&PassWord=' .. PassWord\n local ModuleCode = device.props.ModuleCode\n datareq.url = datareq.url .. '&ModuleCode=' .. ModuleCode\n local ModuleAddress = device.props.ModuleAddress\n datareq.url = datareq.url .. '&ModuleAddress=' .. ModuleAddress\n\n local beginTime\n local endTime\n local r1, r1ok = redis.get(device.id .. '_endTime')\n log.debug('CZJTM_api_3003 r1=%s,r1ok=%s', r1, r1ok)\n if r1ok and r1 ~= nil then\n beginTime = tonumber(r1)\n log.debug('CZJTM_api_3003 r1=%s,r1ok=%s,beginTime=%s', r1, r1ok, beginTime)\n else\n beginTime = os.time()\n --第一次默认当前时间\n redis.set(device.id .. '_endTime', tostring(beginTime))\n log.debug('CZJTM_api_3003 第一次默认当前时间 r1=%s,r1ok=%s', r1, r1ok)\n end\n\n local BeginTime = TimestampToDateTime(beginTime)\n --'2019-03-16%2017:30:00' --默认启始时间\n datareq.url = datareq.url .. '&BeginTime=' .. BeginTime\n\n --endTime 为首次提取数据过多,endtime-begintime 最大时间差不超过2小时\n endTime = os.time() --记录数据时间,多组数据取最大的结束时间\n local timeSPan = endTime - beginTime\n if timeSPan > 7200 then\n endTime = beginTime + 7200\n end\n\n local EndTime = TimestampToDateTime(endTime) --默认启始时间\n datareq.url = datareq.url .. '&EndTime=' .. EndTime\n --获取上次记录时间\n\n -- local beginTimeNum=ConvertToTimestamp(beginTime)\n\n log.debug('CZJTM_api_3003 begintime=%s,endtime=%s,data url=%s', beginTime, endTime, datareq.url)\n\n datareq.ContentType = 'application/json'\n\n --get发送\n local dataok, dataack = ctx:ssend(datareq, 10000)\n if not dataok or dataack == nil then\n out.result = {\n code = 1001,\n msg = '超时'\n }\n else --OK\n log.debug('CZJTM_api_3003: dataok=%s,dataack=%s', dataok, json.encode(dataack))\n if dataack.code == 200 and dataack.body ~= '' then -- http应答\n alldataTable = json.decode(dataack.body) -- 有数据\n --{\n -- "ErrorCode": 0,\n -- "IsSuccess": false,\n -- "Msg": "账号或密码错误",\n -- "Result": null\n --}\n if alldataTable.IsSuccess ~= false then\n local module_data = alldataTable.Result --数据\n log.debug('CZJTM_api_3003 校验有无有效数据module_data[1].RD_DataTime=%s', module_data[1].RD_DataTime)\n if module_data[1].RD_DataTime ~= nil and module_data[1].RD_DataTime ~= '' then --RD_DataTime": null\n for k, v in pairs(module_data) do --遍历每个模块\n --log.debug('CZJTM_api_3003 k=%s, value=%s', k, json.encode(v))\n local moduleCode = v.RD_ModuleCode\n local moduleNo = v.RD_ModuleAddress\n local timeStr = v.RD_DataTime\n local timenow = unixtimestamp(timeStr)\n --log.debug( 'CZJTM_api_3003 moduleCode=%s,moduleNo=%s,timeStr=%s,timenow=%s,beginTime=%s,timenum=%s,k=%s, value=%s',\n -- moduleCode,\n -- moduleNo,\n -- timeStr,\n -- timenow,\n -- beginTime,\n -- timenum,\n -- k,\n -- json.encode(v)\n -- )\n\n if beginTime <= timenum then --timenum在unixtimestamp全局变量\n --endTime = timenum --时间每次固定死了\n --log.debug('CZJTM_api_3003 beginTime=%s,endTime=%s', beginTime, endTime)\n\n local sensorsData = v.RD_Sensors\n if sensorsData ~= nil then\n for k_sensor, v_sensor in ipairs(sensorsData) do --遍历传感器数据\n local sensorChannelId = v_sensor.RD_Sensoradd\n local sensorData = v_sensor.RD_Datas\n\n local childDevice = getDeviceInfo(moduleNo, sensorChannelId)\n --\n if childDevice ~= nil then\n if moduleCode == '0101' then\n local physicalvalue = tonumber(sensorData[1])\n -- log.debug('CZJTM_api_3003 physicalvalue=%s timess=%s ', physicalvalue, timeStr)\n -- log.debug('CZJTM_api_3003 type(timess)=%s ,unixtimestamp(timess)=%s', type(timeStr), unixtimestamp(timeStr))\n local data1 = {\n data = {\n physicalvalue = physicalvalue\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n --log.debug('CZJTM_api_3003 moduleNo=%s,sensorChannelId=%s,data1=%s', moduleNo, sensorChannelId, json.encode(data1))\n end\n end\n end\n end\n else\n log.debug('CZJTM_api_3003 beginTime=[%s] > timenum=[%s]', beginTime, timenum)\n end\n\n --获取通道设备deviceId\n end\n --更新endTime\n if endTime > tonumber(beginTime) then\n if redis.set(device.id .. '_endTime', tostring(endTime)) then\n log.debug('CZJTM_api_3003 redis更新 set lasttime ok key=%s,value=%s', device.id .. '_endTime', tostring(endTime))\n end\n else\n log.debug('CZJTM_api_3003 redis不更新 ')\n end\n end\n else\n out.result = {\n code = 1002,\n msg = alldataTable.Msg\n }\n end\n else\n log.debug('CZJTM_api_3003 request data error:%s body:%s', ack.code, ack.body)\n end\n end\n local resultStr = json.encode(out)\n log.debug('CZJTM_api_3003 resultStr=%s', resultStr)\n ctx:done(resultStr)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("CZJTM_api_3003 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n -- log.debug("CZJTM_api_3003:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n --log.debug('CZJTM_api_3003 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n\n if tonumber(moduleStrCheck) == tonumber(moduleNoId) and tonumber(channelStrCheck) == tonumber(channelNoId) then\n log.debug('CZJTM_api_3003: m=%s,c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n else\n log.debug('CZJTM_api_3003: subdevices是nil')\n return nil\n end\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\nunixtimestamp = function(datestr)\n -- 2018-4-28 16:10:12\n log.debug('CZJTM_api_3003 datestr=%s', datestr)\n local datelist = Split(datestr, ' ')\n local datebegin = Split(datelist[1], '-')\n local dateend = Split(datelist[2], ':')\n local year = tonumber(datebegin[1])\n local month = tonumber(datebegin[2])\n local day = tonumber(datebegin[3])\n local hour = tonumber(dateend[1])\n local minute = tonumber(dateend[2])\n local second = tonumber(dateend[3])\n --log.debug('CZJTM_api_3003 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s', year, month, day, hour, minute, second)\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n -- log.debug('CZJTM_api_3003 timenum=%s', timenum)\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n -- log.debug('CZJTM_api_3003 recordTime=%s', recordTime)\n return recordTime\nend\n\nTimestampToDateTime = function(TimestampNum)\n local Date1 = os.date('%Y-%m-%d', TimestampNum)\n --'2019-03-16%2017:30:00' --默认启始时间\n local Date2 = os.date('%H:%M:%S', TimestampNum)\n --'2019-03-16%2017:30:00' --默认启始时间\n local result_datetime = Date1 .. '%20' .. Date2\n return result_datetime\nend\n\nConvertToTimestamp = function(datetimeStr)\n -- 2018-4-28 16:10:12\n log.debug('CZJTM_api_3003 datetimeStr=%s', datetimeStr)\n local datelist = Split(datestr, '%20')\n --不支持直接空格?\n local datebegin = Split(datelist[1], '-')\n local dateend = Split(datelist[2], ':')\n local year = tonumber(datebegin[1])\n local month = tonumber(datebegin[2])\n local day = tonumber(datebegin[3])\n local hour = tonumber(dateend[1])\n local minute = tonumber(dateend[2])\n local second = tonumber(dateend[3])\n log.debug('CZJTM_api_3003 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s', year, month, day, hour, minute, second)\n num = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n return num\nend INLINE 2019-03-15 11:37:43.703+08 2019-06-06 09:56:44.628+08 2019-03-15 \N
+ae53766c-e071-432d-a0be-046430485033 we \N we ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\nstart=function()\n\tlog.debug("start load fs_1401 moudle = %s ",device.uplink.props.module)\n --log.debug("fs_1401 root device = %s", json.encode(device))\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n \n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n \tfor index,child in pairs(subdevices) do \n \t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("fs_1401 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t moduleNo=child.props.moduleId\n\t\t\t channelNo=child.props.channelId \n\t\t\t log.debug("fs_1401 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n\t\t -- local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t\n\n\t\t\tlog.debug("fs_1401 module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tlocal result='{}'\n if ok then \n\t\t\t result = unmarshall(resp,child,tostring(moduleNo),tostring(channelNo))--解析单条数据\n\t\t\t table.insert(out.data,result)\n\t\t\telse\n local errorSubData={\n data ={},\n device=child.id,\n type=1 \n }\n errorSubData.result = {code=1001,msg='通道采集超时'} \n \t\ttable.insert(out.data,errorSubData)\n\t\t\t log.debug("fs_1401 module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("fs_1401:".."subdevices是nil")\n \treturn nil\n end\n\tlocal resultData =json.encode(out)\n ctx:done(resultData)\nend\n\n\n--000A000181016F0044E59D5D43BA104741CF000094A8 moduleId=1 channelID=1\n--000A0FA681096F0044E59D5D43BA104741CF00009659 moduleId=4006 channelID=9 原始值 frequency=1836.918 temp=25.875 \nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n\t--local subModuleId=module\n\t--local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n log.debug("fs_1401 module=%s,channel=%s [%s] recv=[%s].",subModuleId,subChannelId,subDevice.id,hex)\n if ErrorCode then \n\t\tlocal temp=iota.hexToByte(hex,4,'L')/10\n\t\tlocal tempState=iota.hexToByte(hex,6,'L')/10\n\t\tlocal temp1=iota.hexToByte(hex,8,'L')/10\n\t\tlocal temp2=iota.hexToByte(hex,10,'L')/10\n\t\tlocal temp3=iota.hexToByte(hex,12,'L')/10\n\t\tlocal temp4=iota.hexToByte(hex,14,'L')/10\n\t\tif temp~= 0 or tempState ~= 0 or temp1~= 0 then\n\t\t\tif temp ~=0 then\n\t\t\t\tif tempState ~=0 then\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE_TEMPWIRE'\n\t\t\t\terrcode = 140103\n\t\t\t\tlog.debug('fs_1401 ERR_VIBRW_FREWIRE_TEMPWIRE. module=%s,channel=%s ',subModuleId,subChannelId)\t\t\t \n\t\t\t\tend\t\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE'\n\t\t\t\terrcode = 140101\n\t\t\t\t\n\t\t\tend\t\t\t\t\t\t\n\t\t\terrormsg = 'ERR_VIBRW_TEMPWIRE'\n\t\t\terrcode = 140102\n\t\tend\n\t\t\n\t\t\n log.debug("fs_1401 module=%s,channel=%s [%s] [freq=%s,am=%s,temp=%s].",subModuleId,subChannelId,subDevice.id,freq,am,temp) \n\t\tlocal Phy=0\n --if subDevice.device.formula == "ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)" then --振弦公式\n\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K or 0\n\t\t\t\tlocal kt = subDevice.uplink.capabilities[1].formula.props.Kt or 0\n\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo or 0\n\t\t\t\tlocal t0 = subDevice.uplink.capabilities[1].formula.props.To or 0\n log.debug("fs_1401 module=%s,channel=%s [%s] formula params :k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",subModuleId,subChannelId,subDevice.id,k,kt,f0,t0,freq,temp,am)\n\t\t\t if k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\tend\n\t\t--end\n\t\tsubData.data={\n\t\t\t\t\ttemperatureState=tempState,\n\t\t\t\t\ttemperature=temp,\n\t\t\t\t\ttemperature1=temp1\n \ttemperature2=temp2\n\t\t\t\t\ttemperature3=temp3\n\t\t\t\t\ttemperature4=temp4\n\t\t\t\t\t}\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\n\nIsValid=function(data,moduleId,channelId)\n if data == nil or string.len(data)/2 ~= 22 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('fs_1401 : Data is nil or invalid length. module=%s channel=%s recv = %s',moduleId,channelId,data)\n return false\n end\n if iota.hexToByte(data,4,'B') == 0xc0 then\n errcode = 1001\n errormsg = 'Modbus Error Code ' \n\t\tlog.debug('fs_1401 : Modbus Error Code = %s. module=%s channel=%s recv = %s',iota.hexToByte(data,5,'B'),moduleId,channelId,data)\n return false\n end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,2,'B'))\n\tif moduleId~= moduleStr then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug('fs_1401 : module error [errmodule=%s]. module=%s channel=%s recv = %s',moduleStr,moduleId,channelId,data)\n return false\n end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,5,'B'))\n\tif(channelStr=='0') then\n\t channelStr='1'\n\tend\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('fs_1401 : channel error [errchannel=%s]. module=%s channel=%s recv = %s',channelStr,moduleId,channelId,data)\n\t\treturn false\n\tend\n return true\nend\n INLINE 2019-03-19 09:32:30.845+08 2019-03-22 13:24:12.166+08 2019-03-19 \N
+cba36de4-2915-4b24-8c57-4ff0f78e202c gmkj_7500 \N 下发采集版 1.0 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 f 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 Lua --20180917项目资料提交\\2 桥梁监测--东南大学--梁少龙\\10730008 GM8050 MODBUS-RTU通讯协议(V2.0).doc\n\nstart=function()\n log.debug('start %s, ctx=%s', 'gmkj__7500.lua', json.encode(device))\n\n local endian = 'B'\n local buff = ''\n \n -- 调试指令\n -- ok, resp = ctx:ssend('010310000048413c', 15000)\n --ok, resp = ctx:ssend('01030200000445b1', 15000)\n \n -- ok, resp = ctx:ssend('01060200000149B2', 5000)\n --ok, resp = ctx:ssend('0106020100011872', 5000)\n --\n -- ok, resp = ctx:ssend('0106100300033d0b', 5000)\n -- ok, resp = ctx:ssend('01031003000170ca', 5000)\n \n moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n buff = iota.appendHexByte(buff, moduleNo, endian)\n buff = iota.appendHexByte(buff, 0x14, endian)\n buff = iota.appendHexByte(buff, 0x03, endian)\n buff = iota.appendHexByte(buff, 0x00, endian)\n buff = iota.appendHexByte(buff, 0x02, endian)\n buff = iota.appendHexByte(buff, 0x00, endian)\n buff = iota.appendHexCrc(buff, 'L', 0)\n\n log.debug('gmkj__7500,m=%s, send=%s', moduleNo, buff)\n ok, resp = ctx:ssend(buff, 15000)\n local result = '{}'\n if ok then\n result = unmarshall(resp, moduleNo)\n ctx:done(result)\n else\n --\n local errout = {\n data = {},\n result = {}\n }\n errout.result = {code = 1001, msg = '采集超时'}\n ctx:done(errout)\n end\nend\n\n--0114040044C1147444C169C144C1B7AE44C2101444C2763444C3065E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044C2ADE0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044C1BAC70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097A6\n\nunmarshall =function(hex, moduleNoStr)\n log.debug('gmkj__7500 收到数据=%s', hex)\n\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local data = hex\n\n local ErrorCode = IsValid(hex, moduleNoStr)\n if ErrorCode then\n log.debug('gmkj__7500 数据有效')\n\n local alldata = {}\n\n --分析单类数据\n for i = 1, 32 * 8, 1 do\n local wavelength = iota.hexToFloat(hex, i * 4, 'B')\n alldata[i] = tonumber(string.format('%0.4f', wavelength))\n end\n log.debug('gmkj__7500 通道1数据1=%s,通道8数据32=%s', alldata[1], alldata[256])\n --遍历设备 匹配数据\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n\n if subdevices ~= nil then\n local moduleNo_sub = tonumber(device.uplink.props.module) --模块\n for index_channel, channelDevice in pairs(subdevices) do\n local channelNo_sub = tonumber(channelDevice.uplink.props.channel) --通道\n for index_node, nodeDevice in pairs(channelDevice.dnlinks[1].devices) do\n local nodeNo_sub = tonumber(nodeDevice.uplink.props.node) --通道\n --log.debug("gmkj__7500 子设备模块通道 接口获取 m=%s,c=%s,n=%s ",moduleNo_sub,channelNo_sub,nodeNo_sub)\n local keyIndex = (channelNo_sub - 1) * 32 + nodeNo_sub\n local WaveLength = alldata[keyIndex]\n local temperature\n if nodeDevice.uplink.capabilities[1].formula.metaid == 'c4f1e8d6-82f3-4436-b65e-4d1a8474612e' then --温度公式\n local WTo = nodeDevice.uplink.capabilities[1].formula.props.WTo\n local Kwt = nodeDevice.uplink.capabilities[1].formula.props.Kwt\n local To = nodeDevice.uplink.capabilities[1].formula.props.To\n if WTo == nil or Kwt == nil or To == nil then\n temperature = nil\n else\n temperature = (WaveLength - WTo) * 1000 * Kwt + To\n end\n local data_temp = {\n data = {\n wavelength = tonumber(string.format('%0.3f', WaveLength)),\n physicalvalue = tonumber(string.format('%0.2f', temperature))\n },\n device = nodeDevice.id,\n type = 1\n }\n\n table.insert(out.data, data_temp)\n elseif nodeDevice.uplink.capabilities[1].formula.metaid == '83c9a688-5f70-472f-abce-c1c127ce189b' then --应变公式 ε= [(W - Wo)-(WT-WTo)*Kt/Kwt]*1000.0/K\n local cn = nodeDevice.uplink.capabilities[1].formula.props.cn --关联的温度通道与节点如5,12\n local Wo = nodeDevice.uplink.capabilities[1].formula.props.Wo --应变波长初值Wo\n local Kt = nodeDevice.uplink.capabilities[1].formula.props.Kt --应变的温度系数Kt\n local K = nodeDevice.uplink.capabilities[1].formula.props.K --应变系数K\n\n local Kwt --温度的温度系数Kt\n local WTo --T0温度波长值WTo\n \n if cn ~= nil and Wo ~= nil and Kt ~= nil and K ~= nil then\n local linkInformation = Split(cn, ',')\n local link_tempDevice_channel = linkInformation[1]\n local link_tempDevice_node = linkInformation[2]\n local w_device = getDeviceInfo(link_tempDevice_channel, link_tempDevice_node)\n\n if w_device ~= nil then\n Kwt = w_device.uplink.capabilities[1].formula.props.Kwt --温度的温度系数Kt\n WTo = w_device.uplink.capabilities[1].formula.props.WTo --T0温度波长值WTo\n\n\t\t\t\t\t\t\t\tlocal keyIndex_linkTempDevice = (link_tempDevice_channel - 1) * 32 + link_tempDevice_node\n \t\t\tlocal WaveLength_linkTempDevice = alldata[keyIndex_linkTempDevice]\n\t\t\t\t\t\t\t\tlocal physicalvalue=((WaveLength-Wo)-(WaveLength_linkTempDevice-WTo)*Kwt/Kt)*1000/K\n\n local data_strain = {\n data = {\n wavelength = tonumber(string.format('%0.3f', WaveLength)),\n physicalvalue = tonumber(string.format('%0.3f', physicalvalue))\n },\n device = nodeDevice.id,\n type = 1\n }\n\n table.insert(out.data, data_strain)\n end\n end\n end\n end\n end\n end\n else\n out.result = {code = errorcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n return resultData\nend\n\nIsValid = function(data, moduleStr)\n local checkLen = string.len(data) / 2\n if data == nil or checkLen ~= 1030 then\n errormsg = string.format('无效的数据长度=%s≠1030', checkLen)\n errcode = 1003\n log.debug('gmkj__7500 数据校验失败 %s ', errormsg)\n return false\n end\n\n local checkModule = iota.hexToByte(data, 0, 'B')\n if tostring(moduleStr) ~= tostring(checkModule) then\n errormsg = string.format('无效的模块号=%s≠%s', checkModule, moduleStr)\n errcode = 1004\n log.debug('gmkj__7500 数据校验失败 %s ', errormsg)\n return false\n end\n return true\n --crc\nend\n\n--获取传感器信息\nfunction getDeviceInfo(channelStr,nodeStr)\n\t--log.debug("gmkj__7500:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n\tif device.dnlinks ~= nil then\n\t\tlocal subdevices = device.dnlinks[1].devices\n\t\tfor i,subdevice in pairs(subdevices) do\n\n\t\t\tlocal submodule=subdevice.uplink.props.module\n\t\t\t--判断是否是3层采集仪结构\n\t\t\tif json.encode(subdevice.dnlinks)~="{}" then\n\t\t\t\t--log.debug("gmkj__7500:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n\t\t\t\tfor k,sublink in pairs(subdevice.dnlinks) do\n\t\t\t\t\tlocal sensorchannel=subdevice.uplink.props.channel\n\t\t\t\t\t--log.debug("gmkj__7500:sublink=%s",json.encode(sublink))\n\t\t\t\t\tfor u,sub_subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t--log.debug("gmkj__7500:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\tlocal sensornode=sub_subdevice.uplink.props.node\n\t\t\t\t\t\t\n\t\t\t\t\t\tif tostring(sensorchannel) == channelStr and tostring(sensornode)==nodeStr then\n\t\t\t\t\t\t\tlog.debug("gmkj__7500:m=%s,c=%s 3 拜安匹配到设备=%s",moduleid,channel,json.encode(sub_subdevice))\n\n\t\t\t\t\t\t\treturn sub_subdevice\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\t--log.debug("gmkj__7500:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\telse\n\n\t\t\t\tlocal subchannel=subdevice.uplink.props.channel\n\t\t\t\tlog.debug("gmkj__7500:两层结构 m=%s,c=%s 设备=%s",submodule,subchannel,json.encode(subdevice))\n\t\t\t\tif tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then\n\t\t\t\t\tlog.debug("gmkj__7500:m=%s,c=%s 2安信匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n\t\t\t\t\treturn subdevice\n\t\t\t\telse\n\t\t\t\t\tlog.debug("gmkj__7500 has no device module=%s channel=%s,[submodule=%s,subchannel=%s]",moduleid,channel,submodule,subchannel)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tlog.debug("gmkj__7500 has no device module=%s channel=%s",moduleid,channel)\n\t\treturn nil -- 没有找到匹配的传感器\n\telse\n\t\tlog.debug("gmkj__7500 has no subdevices.")\n\t\treturn nil -- 没有子设备\n\tend\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n INLINE 2018-10-10 09:29:58.574+08 2020-07-30 13:38:50.874+08 2018-10-10 \N
+f98f678a-503a-40a9-aba3-37c6033901dd FS-ZWY-XX \N 直线位移传感器 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n协议号: 1.0;\n协议名: FS-ZWY-XX\n]]--liankang\nstart=function ()\n log.debug("FS-ZWY-XX start %s, ctx=%s",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("FS-ZWY-XX encoded")\n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("FS-ZWY-XX decoded")\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE); -- 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x03, BE); -- 功能码 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n buff=iota.appendHexByte(buff, 0x00, BE); -- 读取寄存器起始地址 00 00\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x02, BE); -- 读取寄存器数量 00 02\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- CRC16 小端字节序\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 直线位移\n-- 01 03 04 00 33 2B FF 54 8C(长度为51.172mm)\n-- 01030400332BFF548C\n-- 原始数据\nfunction protocol_decode(da)\n\tlocal data = da;\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t-- 判断数据有效性\n\tif inValid(da) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telse\n\t\tlog.debug("数据有效")\n\t\tlocal hexLenStr = string.sub(data, 7, 14)\n\t\tlog.debug("hexLenStr = %s ", hexLenStr)\n\t\tlocal lenInteger = iota.hexToUShort(hexLenStr, 0, 'B') \t-- 十进制整数位\n\t\tlog.debug("lenInteger = %d ", lenInteger)\n\t\tlocal lenDecimal = iota.hexToUShort(hexLenStr, 2, 'B') / 65536 -- 十进制小数位\n\t\tlog.debug("lenDecimal = %f ", lenDecimal)\n\t\tlocal len = lenInteger + lenDecimal\n\n\n\t\tout.data = {\n\t\t\tlength = getPreciseDecimal(len, 3), -- 控制浮点数进度为3位小数,四舍五入\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 9 or iota.hexToByte(data, 1,'B') ~= 0x03 then -- 长度不等于 9 或者 读第二个字节,功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n\n\n\n--- nNum 源数字\n--- n 小数位数\n--- 四舍五入\nfunction getPreciseDecimal(nNum, n)\n if type(nNum) ~= "number" then\n return nNum;\n end\n n = n or 0;\n n = math.floor(n)\n if n < 0 then\n n = 0;\n\tend\n local nDecimal = 10 ^ n\n local nTemp = math.floor(nNum * nDecimal + 0.5);\n local nRet = nTemp / nDecimal;\n return nRet;\nend\n INLINE 2019-12-06 14:25:09.187+08 2019-12-27 15:24:57.238+08 2019-12-06 \N
+65b7fa36-3a28-48e9-9f56-20d2277d7a63 cn_flow_2309 \N 苍南气体流量计协议 1.0 b4b3a303-1848-4507-bec8-d33983641e32 b4b3a303-1848-4507-bec8-d33983641e32 f b4b3a303-1848-4507-bec8-d33983641e32 Lua \nstart=function ()\n\tlog.debug("start %s, ctx=%s", "cn_flow_2309",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlocal result='{}'\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE); -- 1: module\n\tbuff=iota.appendHexByte(buff, 0x03, BE);-- 1: cmd\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x0A, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x15, BE);-- 3: \t\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) --CRC16\n\treturn buff\nend\n\n-- decode\n--17032A1701101442063FB72B808E6FE3593FA566198C77B80000000000000000004083F8704336729D000000009400\n--moduleId=23\n--"normalInstanceFlow": 0,\n--"normalTotalFlow": 0.04179458465283403,\n--"pressure": 182.447708,\n--"standardInstanceFlow": 0,\n--"standardTotalFlow": 0.09050754048793176,\n--"temp": 4.124077\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\tlocal out={\n\tdata ={},\n\tresult = {}\n\t}\n\tif string.len(data)/2 ~=47 or iota.hexToByte(data, 1,'B')~=0x03 or iota.hexToByte(data, 2,'B')~=0x2A then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\n\telseif iota.hexToByte(data,0,'B') ~= tonumber(device.props.moduleId) then\n\t\tlocal message = 'Invalid moduleId,'\n\t\tout.result = {code=1004,msg=message}\n\t\tout.data = {}\n\telse\n\t\t\n\t\tlog.debug(string.format('decode: %s', data));\n\n\t\tlocal stFlow = hexToDouble(data,9,'B')\n\t\tlocal siFlow = iota.hexToFloat(data,25,'B')\n\t\tlocal ntFlow = hexToDouble(data,17,'B')\n\t\tlocal niFlow = iota.hexToFloat(data,29,'B')\n\t\tlocal temperature = iota.hexToFloat(data,33,'B')\n\t\tlocal pre = iota.hexToFloat(data,37,'B')\n\t\tout.data = {\n\t\t\tstandardTotalFlow=stFlow,\n\t\t\tstandardInstanceFlow=siFlow,\n\t\t\ttemp=temperature,\n\t\t\tpressure=pre,\n\t\t\tnormalTotalFlow=ntFlow,\n\t\t\tnormalInstanceFlow=niFlow\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\n\nhexToDouble=function(hex,index,endian)\n local stacklen = string.len(hex)\n if stacklen < 3 then\n return nil\n end\n local buff = string.sub(hex,2*index+1,2*(index+8))\n local data = 0\n if endian == 'B' then\n\n local d = tonumber(string.sub(buff,1,3),16)\n local f = tonumber('1'..string.sub(buff,4,16),16)\n\n data = (-1)^0 * f *(2^(-52)* 2^(d-1023)) \n return data\n elseif endian == 'L' then\n local bi = ''\n for i=1,8 do\n bi = bi..string.sub(buff,-2*(i),-1*(2*i-1))\n end\n\n local dl = tonumber(string.sub(bi,1,3),16)\n local fl = tonumber('1'..string.sub(bi,4,16),16)\n\n data = (-1)^0 * fl *(2^(-52)* 2^(dl-1023)) \n return data\n else\n return nil\n end \nend INLINE 2017-09-09 16:20:37.213+08 2018-02-28 18:32:12.204+08 2017-09-09 \N
+cba2303c-cdd4-477f-8bff-49ff734cfcd6 hbxh_PM_2513 \N 1.0 f7d6caec-f4d1-4641-92bf-5f918ea8d13c f7d6caec-f4d1-4641-92bf-5f918ea8d13c f f7d6caec-f4d1-4641-92bf-5f918ea8d13c Lua \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "hbxh_PM_2513", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t local cmd_str="pm10chr$"\n\t\tlocal cmd_hex=StrToHex(cmd_str)\n \t\tlog.debug("hbxh_PM_2513 SSend cmd=%s",cmd_hex)\n ok,resp=ctx:ssend(cmd_hex,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n else\n log.debug("hbxh_PM_2513 SSend error! resp=%s",resp)\n end\n ctx:done(result)\nend\n\n--434F4E433D31352020202C323120202024\n--15\n--21\nunmarshall=function(hex)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then \n \n\t\tlocal data_str=HextoStr(hex)\n\t\tlocal data_str_sub=string.sub(data_str,6,-2)\n local allResponse=Split(data_str_sub,',')\n\t\tlocal pm_worked=tonumber(allResponse[1])\n\t\tlocal pm_standard=tonumber(allResponse[2])\n \t\t --pmworked=pm_worked,\n out.data = {\n\t\t\tpmstandard=pm_standard\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data)\n log.debug('hbxh_PM_2513 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 <= 7 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if string.sub(data,1,10) ~= "434f4e433d" then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n \n log.debug('hbxh_PM_2513 数据校验通过')\n return true\n--crc\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n -- 字符串 -> Hex\nStrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n-- Hex-> 字符串 \nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n\t\n \n INLINE 2018-04-03 11:34:04.465+08 2018-05-17 09:16:30.552+08 2018-04-03 \N
+0571b781-2713-4381-a8d3-3e54717eb15a shyx_TempHum_1134 \N 1.0 345ebe97-ed2b-44ca-b5a3-8d0597ca4db1 345ebe97-ed2b-44ca-b5a3-8d0597ca4db1 f 345ebe97-ed2b-44ca-b5a3-8d0597ca4db1 Lua -- //01 协议文档/6月第4周/上海域信测控技术有限公司/PKTH300A智能温湿度变送器使用说明书.pdf\n--[[\n协议号: 1134;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n log.debug("load script %s, moduleId=%s", "shyx_TempHum_1134.lua", device.props.moduleId or "[nil]")\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff,500)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n\t-- 模块号\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE); -- 1: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x03, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);-- 2: 读取寄存器地址\n buff=iota.appendHexByte(buff, 0x00, BE);\n buff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x02, BE);-- 3: \t读取寄存器数量\n\tlocal temp=buff;--交换CRC16高低位\n\ttemp=iota.appendHexCrc(temp, 'B' ,0) --CRC16\n\tlocal crcH=string.sub(temp,-2,-1)\n\tlocal crcL=string.sub(temp,-4,-3)\n\tbuff=buff..crcH;\n\tbuff=buff..crcL;\t\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 010304ffdd01645a66 moduleId=1\n--原始数据 温度-3.5,湿度35.6 \nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\n\telse\n\t\t\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal temp = iota.hexToShort(data, 3,'B')/10.0;\n\t\tlocal hum = iota.hexToShort(data, 5,'B')/10.0;\t\t\t\n\t\t\n\t\tout.data = {\n\t\ttemp=temp,\n\t\thum=hum\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction IsValid(data)\n\tif string.len(data)/2 ~=9 or iota.hexToByte(data, 1,'B')~=0x03 then\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 1001\n\t\treturn true\n\tend\n\t\n\treturn false\n\t\nend\n INLINE 2017-09-11 20:27:14.342+08 2018-02-28 18:32:12.204+08 2017-09-11 \N
+1d9b604c-5ac9-4064-90cc-b23edf04c575 anXin_vibrating_1408 \N 安信振弦 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "anXin_vibrating_1408.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0xFF, endian) --1: 帧头\n buff=iota.appendHexByte(buff, 0x41, endian)\n buff=iota.appendHexByte(buff, 0x58, endian)\n buff=iota.appendHexByte(buff, 0x4a, endian)\n buff=iota.appendHexWord(buff, 1, endian) -- 2: 类型=1\n buff=iota.appendHexWord(buff, device.props.moduleId, endian) -- 3: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 4: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 5: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,500)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==18) then\n -- 2 2 1 4 4 2\n -- \n \n --print("parsing data", hex)\n local freqH = iota.hexToShort(hex,10,'B');\n local freqL = iota.hexToShort(hex,12,'B')/10000.0;\n local freq=freqH+freqL;\n local temp = iota.hexToShort(hex,14,'B')/100.0;\n out.data = {\n Freq=freq,\n Temp=temp\n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2017-09-02 17:20:46.428+08 2018-02-28 18:32:12.205+08 2017-09-02 \N
+b78abeef-fbe0-4ecf-9a73-9f343bc5800e th_Weight_9807 \N 1.0 e7d33a6c-15b9-405b-bf65-a6c054704291 e7d33a6c-15b9-405b-bf65-a6c054704291 f e7d33a6c-15b9-405b-bf65-a6c054704291 Lua --//http://www.smowo.com/newweb/Uploads/2016/06/21/5768dd9a5c048.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "th_Weight_9807", device.props.moduleId or "[nil]")\n\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian) \t\t\n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n end\nend\n--FF03040000030D24C9\n--moduleId=255\n--weight = 0.781\n\nunmarshall=function(hex)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\n local weight = iota.hexToInt(hex,3,'B')/1000.0;\n out.data = {\n weight = weight\n }\n\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 or iota.hexToByte(data,2,'B') ~= 0x04 then\n errormsg = 'CMD is not right'\n errcode = 1001\n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid ack moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2017-12-06 15:15:08.366+08 2018-02-28 18:32:12.206+08 2017-12-06 \N
+f59cbddd-927c-47e7-97d6-964d8abdd184 rf_inclination_1534 \N 北京瑞芬双轴倾角仪协议 1.0 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 f 85ba98a3-b552-4bcf-a736-30b525492481 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n----/02 协议分析/2016-08-25/北京瑞芬_ACA826T全温补高精度双轴数字输出型倾角仪.pdf\n\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \nstart=function()\n log.debug("start %s, ctx=", "rf_inclination_1534.lua",json.encode(device))\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("rf_inclination_1534 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("rf_inclination_1534 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\t\n if tonumber(moduleNo) > 255 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255'}\n ctx:done(json.encode(errout))\n else\n \n buff=iota.appendHexByte(buff, 0x68, endian) -- 1: 指令: 0x03 = 采集\n buff=iota.appendHexByte(buff, 4, endian)\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 4, endian)\n buff=buff..string.format("%02X",checkPlusSum(buff,1,3)) --CheckPlusSum\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\n end\nend\n\nunmarshall=function(hex,moduleStr)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n --68100C8400002008100025280000000025\n --moduleId=1\n --"angleX": 0.2008,\n\t --"angleY": -0.2528\n local xFirst = bit:_and(bit:_rshift(iota.hexToByte(hex,4,'B'),4),0x0F)\n local xData = tonumber(string.sub(hex,13,16))/10000.0\n\n local yFirst = bit:_and(bit:_rshift(iota.hexToByte(hex,8,'B'),4),0x0F)\n local yData = tonumber(string.sub(hex,21,24))/10000.0\n\n if xFirst == 0x01 then\n xData = -xData\n end\n if yFirst == 0x01 then\n yData = -yData\n end\n out.data = {\n anglex=xData,\n angley=yData,\n }\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 17 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x68 or iota.hexToByte(data,3,'B') ~= 0x84 or iota.hexToByte(data,1,'B') ~= 0x10 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,2,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug("rf_inclination_1534 moduleCheck=%s[%s] ",moduleCheck,iota.hexToByte(data,2,'B'))\n return false\n end\n return true\n--crc\nend\n\nPadLeft=function(cnt,num,hex)\n local len = string.len(tostring(hex))\n local offset = cnt -tonumber(len)\n if offset == 0 then \n return hex\n else\n for i = 1,offset do \n hex = tostring(num)..tostring(hex)\n end\n end\n return hex\nend\n\ncheckPlusSum=function(data,startindex,endindex)\n local sum = 0\n for i=startindex,endindex do\n if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)),16)) % 0xffff\n end\n end \n sum = bit:_and(sum ,0xff)\n return sum\nend INLINE 2017-09-21 11:16:10.23+08 2018-05-16 15:26:37.1+08 2017-09-19 \N
+277490e2-f0f8-4aa6-b04a-0b05a1466059 mh_salinity_2900 \N 杭州迈煌盐分浓度传感器协议 1.0 bfb251a3-a9ca-40cd-bc85-9671b0d102f1 bfb251a3-a9ca-40cd-bc85-9671b0d102f1 f bfb251a3-a9ca-40cd-bc85-9671b0d102f1 Lua \nstart=function()\n log.debug("start %s, ctx=", "mh_salinity_2900.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x2A, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n end\nend\n--02030200193d8e moduleId=2 \n--"salinity": 25\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\n local Salinity = iota.hexToShort(hex,3,'B')\n out.data = {\n salinity = Salinity\n }\n\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = 'CMD is not right'\n errcode = 1001\n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2017-09-14 20:22:03.089+08 2018-02-28 18:32:12.207+08 2017-09-12 \N
+4f567512-fd50-45b1-8ffd-b635123d9749 GZMxieyi \N 高支模协议 1.0 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe f 1b2d8739-627e-4b7d-9480-3eee6e9396fe Lua -- INLINE 2018-07-23 15:38:31.292+08 2018-07-23 15:38:31.292+08 2018-07-23 \N
+8ef51f2f-b169-4e69-9a5c-d471d6c03e76 JL-Spectrum \N 1.0 19d97e00-b313-443e-b2cd-40bce48c0f05 19d97e00-b313-443e-b2cd-40bce48c0f05 f 19d97e00-b313-443e-b2cd-40bce48c0f05 Lua start=function()\n log.debug("JL-Spectrum: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n log.debug("JL-Spectrum: Data=%s",hex)\n local out={\n data ={},\n result = {}\n }\n --52533B323031352D30312D30312030303A30303B31303135313233343B3130303B32303135313233343B34303B3130303B343B373B413B303B31363B613B313030302E3B423B303B32393B633B3138303B423B313B33303B683B31302E303B423B323B33313B613B352E303B433B303B393B633B302E30313B443B303B333B613B37322E303B443B313B353B613B32352E30303B323034320D0A\n\tlocal sData= toStrHex(hex)\n log.debug("JL-Spectrum: sData=%s",sData)\n\tlocal spliteData = Split(sData,'\\t')\n\tlog.debug("JL-Spectrum: spliteData=%s",spliteData[8])\n out.data.soilwater = tonumber(spliteData[3])\n \tlocal st = tonumber(spliteData[4])\n \tif (st ~= nil) then\n out.data.soiltemp = (st-32)/1.8\n end\n out.data.soilcond = tonumber(spliteData[5])\n out.data.soilwater2 = tonumber(spliteData[6])\n \tlocal st2 = tonumber(spliteData[7])\n \tif (st2 ~= nil) then\n \tout.data.soiltemp2 = (st2-32)/1.8\n \tend\n\tout.data.radiation = tonumber(spliteData[8])\n \tout.data.humidity = tonumber(spliteData[9])\n \tlocal t = tonumber(spliteData[10])\n \tif (t ~= nil) then\n \tout.data.temperature = (t-32)/1.8\n end\n out.data.rainfall = tonumber(spliteData[11])\n out.data.winddirection = tonumber(spliteData[12])\n out.data.windspeed = tonumber(spliteData[13])\n out.data.wind = tonumber(spliteData[14])\n \n local resultData =json.encode(out)\n log.debug("JL-Spectrum: weather=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n INLINE 2018-10-11 09:49:57.951+08 2018-11-07 09:45:15.044+08 2018-10-11 \N
+92fe46e5-a379-4416-83ad-63157315a8b1 fs-microPower-2045 \N 扬尘 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug('fs_microPower_w : devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n if data ~= nil then\n log.debug('fs_microPower_w : devices data =%s', data)\n ParseData(data)\n else\n log.error('fs_microPower_w : recvd content is nil')\n end\nend\n\nfunction ParseData(data)\n out = {\n data = {},\n result = {},\n type = 2\n }\n if string.sub(data, 1, 2) == '01' and string.sub(data, -2, -1) == 'fa' then --振动数据\n log.debug('fs_microPower_w : 振动数据 data =%s', data)\n local package = iota.hexToShort(data, 8, 'L')\n local packagecount = iota.hexToShort(data, 10, 'L')\n local datpackage = string.sub(data, 41, -9)\n local moduleid = iota.hexToShort(data, 16, 'L')\n\n local req1 = ''\n local req2 = ''\n local req = ''\n req1 = iota.appendHexByte(req1, 01, 'L') -- 0-3 压缩协议 4-7 协议版本\n req1 = iota.appendHexByte(req1, 0x02, 'L')\n req1 = iota.appendHexWord(req1, 0x0007, 'L')\n req1 = iota.appendHexWord(req1, 0x0000, 'L')\n\n req2 = iota.appendHexWord(req2, package, 'L')\n req2 = iota.appendHexWord(req2, packagecount, 'L')\n req2 = iota.appendHexWord(req2, 0x0000, 'L')\n req2 = iota.appendHexWord(req2, 0x0000, 'L')\n req2 = iota.appendHexWord(req2, moduleid, 'L')\n req2 = iota.appendHexWord(req2, 0x0000, 'L')\n local checkdat = req1 .. req2\n local checksum = HeadCheckSum(checkdat)\n req = req1\n req = iota.appendHexWord(req, checksum, 'L')\n req = req .. req2\n req = iota.appendHexWord(req, package, 'L')\n req = iota.appendHexByte(req, 0, 'L')\n req = iota.appendHexByte(req, 0, 'L')\n req = iota.appendHexByte(req, 0, 'L')\n req = iota.appendHexByte(req, 0, 'L')\n req = iota.appendHexByte(req, 0, 'L')\n req = req .. '00000000'\n req = iota.appendHexCrc(req, 'L', 0) --校验\n local crc16 = string.sub(req, -4, -1)\n req = string.sub(req, 1, -13)\n req = req .. crc16\n req = iota.appendHexByte(req, 0, 'L')\n req = iota.appendHexByte(req, 0xfa, 'L')\n log.debug('fs_microPower_w: datfileback: %s', req)\n ctx:asend(req, 20000)\n\n if package == packagecount then\n local r1, ok = redis.get(device.id .. '_mpzd')\n log.debug('fs_microPower_w: 解析dat:r1= %s', r1)\n ParseFileDat(r1)\n else\n if package == 1 then\n local firstpackage = string.sub(datpackage, -80, -1)\n redis.set(device.id .. '_mpzd', firstpackage)\n log.debug('fs_microPower_w: 接收dat:datpackage= %s', firstpackage)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据首包'\n }\n }\n ctx:notify(json.encode(re))\n else\n local r1, ok = redis.get(device.id .. '_mpzd')\n log.debug('fs_microPower_w: 接收dat:r1= %s package=%s', r1, package)\n local data = r1 .. datpackage\n redis.set(device.id .. '_mpzd', data)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据'\n }\n }\n ctx:notify(json.encode(re))\n end\n end\n else -- 非振动数据\n if string.sub(data, 13, 16) == '8a00' then\n local rtumodule = iota.hexToShort(data, 3, 'B')\n local power = iota.hexToByte(data, 13, 'B')\n log.debug('fs_microPower_w: 剩余电量: %s', power)\n local strdevice = toHexStr(json.encode(device))\n strdevice = iota.appendHexCrc(strdevice, 'B', 0)\n local crc = string.sub(strdevice, -4, -1)\n log.debug('fs_microPower_w : devices crc =%s', crc)\n local r1, ok = redis.get(device.id .. '_mpset')\n if ok and r1 ~= nil then\n if crc == r1 then\n log.debug('fs_microPower_w : 配置无修改')\n local req = ''\n req = iota.appendHexByte(req, 0xfe, 'B') --帧头\n req = iota.appendHexWord(req, 0x000c, 'B') --设备号:0x0B,多通道数据采集系统\n req = iota.appendHexWord(req, rtumodule, 'B') --模块号\n req = iota.appendHexByte(req, 0x01, 'B') --命令源\n req = iota.appendHexWord(req, 0x0A01, 'B') --指令\n req = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n req = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n req = iota.appendHexByte(req, os.date('%m'), 'B')\n req = iota.appendHexByte(req, os.date('%d'), 'B')\n req = iota.appendHexByte(req, os.date('%H'), 'B')\n req = iota.appendHexByte(req, os.date('%M'), 'B')\n req = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n req = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req = iota.appendHexByte(req, 0, 'B') -- 是否下发\n --req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req = iota.appendHexWord(req, 0, 'B') --当前版本\n req = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n req = iota.appendHexCrc(req, 'B', 0) --校验\n req = iota.appendHexByte(req, 0xef, 'B') --帧尾\n log.debug('fs_microPower_w: 苏醒帧返回: %s', req)\n ctx:asend(req, 20000)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置无修改'\n }\n }\n ctx:notify(json.encode(re))\n else\n log.debug('fs_microPower_w : 配置有修改')\n local req = ''\n req = iota.appendHexByte(req, 0xfe, 'B') --帧头\n req = iota.appendHexWord(req, 0x000c, 'B') --设备号:0x0B,多通道数据采集系统\n req = iota.appendHexWord(req, rtumodule, 'B') --模块号\n req = iota.appendHexByte(req, 0x01, 'B') --命令源\n req = iota.appendHexWord(req, 0x0A01, 'B') --指令\n req = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n req = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n req = iota.appendHexByte(req, os.date('%m'), 'B')\n req = iota.appendHexByte(req, os.date('%d'), 'B')\n req = iota.appendHexByte(req, os.date('%H'), 'B')\n req = iota.appendHexByte(req, os.date('%M'), 'B')\n req = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n req = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req = iota.appendHexByte(req, 1, 'B') -- 是否下发\n --req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req = iota.appendHexWord(req, 0, 'B') --当前版本\n req = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n req = iota.appendHexCrc(req, 'B', 0) --校验\n req = iota.appendHexByte(req, 0xef, 'B') --帧尾\n log.debug('fs_microPower_w: 苏醒帧返回: %s', req)\n ctx:asend(req, 20000)\n redis.set(device.id .. '_mpset', tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n else\n log.debug('fs_microPower_w : 配置初次配置')\n local req = ''\n req = iota.appendHexByte(req, 0xfe, 'B') --帧头\n req = iota.appendHexWord(req, 0x000c, 'B') --设备号:0x0B,多通道数据采集系统\n req = iota.appendHexWord(req, rtumodule, 'B') --模块号\n req = iota.appendHexByte(req, 0x01, 'B') --命令源\n req = iota.appendHexWord(req, 0x0A01, 'B') --指令\n req = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n req = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n req = iota.appendHexByte(req, os.date('%m'), 'B')\n req = iota.appendHexByte(req, os.date('%d'), 'B')\n req = iota.appendHexByte(req, os.date('%H'), 'B')\n req = iota.appendHexByte(req, os.date('%M'), 'B')\n req = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n req = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req = iota.appendHexByte(req, 1, 'B') -- 是否下发\n --req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req = iota.appendHexWord(req, 0, 'B') --当前版本\n req = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n req = iota.appendHexCrc(req, 'B', 0) --校验\n req = iota.appendHexByte(req, 0xef, 'B') --帧尾\n log.debug('fs_microPower_w: 苏醒帧返回: %s', req)\n ctx:asend(req, 20000)\n redis.set(device.id .. '_mpset', tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n end\n\n if string.sub(data, 13, 16) == '8a02' then\n log.debug('fs_microPower_w : 设备休眠')\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '设备休眠'\n }\n }\n ctx:notify(json.encode(re))\n end\n\n local rtumodule = iota.hexToShort(data, 3, 'B')\n if string.sub(data, 13, 16) == '8601' then\n local time = os.date('%Y-%m-%dT%H:%M:%S+08:00', os.time({year = iota.hexToShort(data, 15, 'B'), month = iota.hexToByte(data, 17, 'B'), day = iota.hexToByte(data, 18, 'B'), hour = iota.hexToByte(data, 19, 'B'), min = iota.hexToByte(data, 20, 'B'), sec = iota.hexToByte(data, 21, 'B')}))\n local sensorCount = iota.hexToByte(data, 26, 'B')\n\n local isover = iota.hexToByte(data, 25, 'B') --尾包\n local datalength = 0\n local firststart = 27\n for i = 1, sensorCount, 1 do\n firststart = firststart + datalength\n local sensorType = iota.hexToByte(data, firststart, 'B')\n local module = iota.hexToShort(data, firststart + 3, 'B')\n local channel = iota.hexToByte(data, firststart + 2, 'B')\n datalength = iota.hexToByte(data, firststart + 1, 'B') + 6\n if sensorType == 0 then --振弦\n local childDevice = getZxDeviceInfo(module, channel)\n local rst = {\n data = {\n frequency = iota.hexToFloat(data, firststart + 12, 'B'),\n am = iota.hexToFloat(data, firststart + 16, 'B'),\n temperature = iota.hexToFloat(data, firststart + 20, 'B')\n },\n device = childDevice.id,\n type = 1,\n time = time\n }\n table.insert(out.data, rst)\n end\n if sensorType == 1 then --485\n local childDevice = getDeviceInfo(module, channel)\n local protocalCode = iota.hexToShort(data, firststart + 6, 'B')\n log.debug('fs_microPower_w: protocalCode: %s', protocalCode)\n if protocalCode == 1503 or protocalCode == 1502 then --测斜\n local rst = {\n data = {\n anglex = iota.hexToFloat(data, firststart + 12, 'B'),\n angley = iota.hexToFloat(data, firststart + 16, 'B'),\n temperature = iota.hexToFloat(data, firststart + 20, 'B')\n },\n device = childDevice.id,\n type = 1,\n time = time\n }\n table.insert(out.data, rst)\n end\n\n if protocalCode == 9102 then --裂缝\n local childDevice = getDeviceInfo(module, channel)\n local rst = {\n data = {\n length = iota.hexToFloat(data, firststart + 12, 'B')\n },\n device = childDevice.id,\n type = 1,\n time = time\n }\n table.insert(out.data, rst)\n end\n\n if protocalCode == 1102 then --温湿度\n local childDevice = getDeviceInfo(module, channel)\n local rst = {\n data = {\n temperature = iota.hexToFloat(data, firststart + 12, 'B'),\n humidity = iota.hexToFloat(data, firststart + 16, 'B')\n },\n device = childDevice.id,\n type = 1,\n time = time\n }\n table.insert(out.data, rst)\n end\n\n if protocalCode == 9002 then --压差\n local childDevice = getDeviceInfo(module, channel)\n local rst = {\n data = {\n physicalvalue = iota.hexToFloat(data, firststart + 12, 'B'),\n frequency = iota.hexToFloat(data, firststart + 16, 'B'),\n temperature = iota.hexToFloat(data, firststart + 20, 'B')\n },\n device = childDevice.id,\n type = 1,\n time = time\n }\n table.insert(out.data, rst)\n end\n if protocalCode == 2045 then --扬尘\n local datacnt = iota.hexToByte(data, firststart + 11, 'B')\n log.debug('fs_microPower_w: 2405')\n local childDevice = getDeviceInfo(module, channel)\n local rst = {\n data = {\n pm25 = tonumber(string.format('%0.0f', iota.hexToFloat(data, firststart + 12, 'B'))),\n pm10 = tonumber(string.format('%0.0f', iota.hexToFloat(data, firststart + 16, 'B'))),\n noise = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 20, 'B'))),\n temp = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 24, 'B'))),\n humidity = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 28, 'B'))),\n windspeed = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 32, 'B'))),\n winddir = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 36, 'B')))\n },\n device = childDevice.id,\n type = 1,\n time = time\n }\n\n rst.result={}\n if rst.data.pm25 <= 0 or rst.data.pm25 > 700 then\n --out.result.code = 5001\n rst.result.code = 5001\n if rst.result.msg ~= nil then\n -- out.result.msg = out.result.msg .. '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of [0,700]'\n rst.result.msg = rst.result.msg .. '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of (0,700]'\n else\n -- out.result.msg = '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of [0,700]'\n rst.result.msg = '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of (0,700]'\n end\n rst.data.pm25 = nil\n end\n if rst.data.pm10 <= 0 or rst.data.pm10 > 700 then\n --out.result.code = 5001\n rst.result.code = 5001\n if rst.result.msg ~= nil then\n -- out.result.msg = out.result.msg .. '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of [0,700]'\n rst.result.msg = rst.result.msg .. '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of (0,700]'\n else\n -- out.result.msg = '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of [0,700]'\n rst.result.msg = '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of (0,700]'\n end\n rst.data.pm10 = nil\n end\n if rst.data.windspeed < 0 or rst.data.windspeed > 24.5 then\n -- out.result.code = 5001\n rst.result.code = 5001\n if rst.result.msg ~= nil then\n --out.result.msg = rst.result.msg .. '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n rst.result.msg = rst.result.msg .. '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of (0,24.5]'\n else\n -- out.result.msg = '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n rst.result.msg = '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n end\n rst.data.windspeed = nil\n end\n if rst.data.winddir < 0 or rst.data.winddir > 360 then\n --out.result.code = 5001\n rst.result.code = 5001\n if rst.result.msg ~= nil then\n --out.result.msg = rst.result.msg .. '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n rst.result.msg = rst.result.msg .. '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of (0,360]'\n else\n --out.result.msg = '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n rst.result.msg = '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n end\n rst.data.winddir = nil\n end\n if rst.data.temp < -40 or rst.data.temp > 60 then\n --out.result.code = 5001\n rst.result.code = 5001\n if rst.result.msg ~= nil then\n --out.result.msg = rst.result.msg .. '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n rst.result.msg = rst.result.msg .. '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n else\n -- out.result.msg = '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n rst.result.msg = '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n end\n rst.data.temp = nil\n end\n if rst.data.humidity <= 0 or rst.data.humidity > 100 then\n --out.result.code = 5001\n rst.result.code = 5001\n if rst.result.msg ~= nil then\n -- out.result.msg = rst.result.msg .. '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n rst.result.msg = rst.result.msg .. '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n else\n --out.result.msg = '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n rst.result.msg = '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of (0,100]'\n end\n rst.data.humidity = nil\n end\n if rst.data.noise < 0 or rst.data.noise > 200 then\n --out.result.code = 5001\n rst.result.code = 5001\n if rst.result.msg ~= nil then\n --out.result.msg = rst.result.msg .. '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n rst.result.msg = rst.result.msg .. '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n else\n --out.result.msg = '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n rst.result.msg = '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n end\n rst.data.noise = nil\n end\n log.debug('fs_microPower_w: insert')\n table.insert(out.data, rst)\n end\n end\n end\n log.debug('fs_microPower_w: dataresult: %s', json.encode(out))\n local req = ''\n req = iota.appendHexByte(req, 0xfe, 'B') --帧头\n req = iota.appendHexWord(req, 0x000c, 'B') --设备号:0x0B,多通道数据采集系统\n req = iota.appendHexWord(req, rtumodule, 'B') --模块号\n req = iota.appendHexByte(req, 0x01, 'B') --命令源\n req = iota.appendHexWord(req, 0x0601, 'B') --指令\n req = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req = iota.appendHexWord(req, 0x0000, 'B') --数据区长度\n req = iota.appendHexCrc(req, 'B', 0) --校验\n req = iota.appendHexByte(req, 0xef, 'B') --帧尾\n log.debug('fs_microPower_w: databack: %s', req)\n ctx:asend(req, 20000)\n ctx:notify(json.encode(out))\n end\n end\nend\n\nfunction Deploy()\n local total = totalSensors()\n log.debug('fs_microPower_w : totalSensors =%s', total)\n local over = 0\n local onepag = 0\n local totallength = 3\n local buff = ''\n\n for i, dnlink in pairs(device.dnlinks) do\n for j, subdevice in pairs(dnlink.devices) do\n over = over + 1\n onepag = onepag + 1\n if subdevice.props.sensortype == 'zx' then\n totallength = totallength + 18\n buff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff = iota.appendHexByte(buff, 0x00, 'B') --传感器类型\n local settingvib = tonumber(subdevice.uplink.props.colgain) + tonumber(subdevice.uplink.props.incentive) * math.pow(2, 1) + tonumber(subdevice.uplink.props.checkoption) * math.pow(2, 2) + tonumber(subdevice.uplink.props.vibratspectrum) * math.pow(2, 3) + tonumber(subdevice.uplink.props.vibratsamplfreq) * math.pow(2, 4) + tonumber(subdevice.uplink.props.incentivemethod) * math.pow(2, 6)\n log.debug('fs_microPower_w : settingvib =%s', settingvib)\n buff = iota.appendHexByte(buff, settingvib, 'B') --选项1\n buff = iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff = iota.appendHexByte(buff, 0x05, 'B') --长度\n buff = iota.appendHexByte(buff, subdevice.uplink.props.k, 'B') --振弦采集参数\n buff = iota.appendHexWord(buff, subdevice.uplink.props.f0, 'B') --振弦频率初值\n buff = iota.appendHexByte(buff, 0x00, 'B') --上传频谱ID\n buff = iota.appendHexByte(buff, 0x01, 'B') --采集选项\n end\n if subdevice.props.sensortype ~= 'zx' and subdevice.props.sensortype ~= 'zd' then\n totallength = totallength + 18\n buff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff = iota.appendHexByte(buff, 0x01, 'B') --传感器类型\n local setting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n log.debug('fs_microPower_w : setting =%s', setting)\n buff = iota.appendHexByte(buff, setting, 'B') --选项1\n buff = iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B') --选项2\n buff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff = iota.appendHexByte(buff, 0x0c, 'B') --长度\n buff = iota.appendHexFloat(buff, subdevice.uplink.props.pmtpf, 'B') --阈值\n buff = iota.appendHexFloat(buff, subdevice.uplink.props.pmten, 'B') --阈值\n buff = iota.appendHexFloat(buff, 0x00, 'B') --0\n end\n if subdevice.props.sensortype == 'zd' then\n totallength = totallength + 31\n buff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff = iota.appendHexByte(buff, 0x04, 'B') --传感器类型\n buff = iota.appendHexByte(buff, 0x00, 'B') --选项1\n buff = iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff = iota.appendHexByte(buff, 0x12, 'B') --长度\n buff = iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B') --定时采样间隔\n buff = iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B') --定时采样时长\n buff = iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B') --加速度触发采样时长\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B') --采样频率\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B') --滤波频率\n\n buff = iota.appendHexWord(buff, 0x42c8, 'B')\n buff = iota.appendHexWord(buff, 0x0000, 'B')\n buff = iota.appendHexWord(buff, 0x4248, 'B')\n buff = iota.appendHexWord(buff, 0x0000, 'B')\n local trigger1 = tonumber(subdevice.uplink.props.triggerlevel) * 10\n buff = iota.appendHexByte(buff, trigger1, 'B') --触发加速度\n buff = iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B') --加速度范围\n buff = iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B') --滞后点数\n end\n if over == 8 or onepag == total then\n local buffhead = ''\n buffhead = iota.appendHexByte(buffhead, 0xfe, 'B') --帧头\n buffhead = iota.appendHexWord(buffhead, 0x000c, 'B') --设备号:0x0c,多通道数据采集系统\n buffhead = iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B') --模块号\n buffhead = iota.appendHexByte(buffhead, 0x01, 'B') --命令源\n buffhead = iota.appendHexWord(buffhead, 0x0306, 'B') --指令\n buffhead = iota.appendHexWord(buffhead, 0x0000, 'B') --消息ID\n buffhead = iota.appendHexWord(buffhead, totallength, 'B') --数据区长度\n if onepag == total then\n buffhead = iota.appendHexByte(buffhead, 0x01, 'B') --尾包\n else\n buffhead = iota.appendHexByte(buffhead, 0x00, 'B') --尾包\n end\n buffhead = iota.appendHexByte(buffhead, total, 'B') --采集指令总通道指令个数\n buffhead = iota.appendHexByte(buffhead, over, 'B') --该分包通道指令个数\n buff = buffhead .. buff\n buff = iota.appendHexCrc(buff, endian, 0) --校验\n buff = iota.appendHexByte(buff, 0xef, 'B') --帧尾\n local ok, ack = ctx:ssend(buff, 20000)\n log.debug('fs_microPower_w : deploy back =%s', ack)\n buff = ''\n if over == 8 then\n over = 0\n end\n totallength = 3\n if onepag == total then\n log.debug('fs_microPower_w 配置下发完成')\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置下发完成'\n }\n }\n ctx:notify(json.encode(re))\n end\n end\n end\n end\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid, channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i, dnlink in pairs(device.dnlinks) do\n for j, subdevice in pairs(dnlink.devices) do\n if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n log.debug('fs_microPower_w has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('fs_microPower_w has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid, channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i, dnlink in pairs(device.dnlinks) do\n for j, subdevice in pairs(dnlink.devices) do\n if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n log.debug('fs_microPower_w has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('fs_microPower_w has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n log.debug('fs_microPower_w : dat content =%s', dathex)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local offset = 0\n local t = iota.hexToShort(dathex, offset, 'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex, offset, 'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex, offset, 'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex, offset, 'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex, offset, 'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId, channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex, offset, 'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex, offset, 'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex, offset, 'B') + 2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex, offset, 'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex, offset, 'B')\n offset = offset + 4\n log.debug('fs_microPower_w deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s', deviceId, channel, samplefreq, filterfreq, gainamplifier, triggertype, year, mon, day, hour, min, sec)\n\n local floatcount = (string.len(dathex) / 2 - 40) / 4\n log.debug('fs_microPower_w begin parse')\n local vols = {}\n for i = 1, floatcount do\n offset = 40 + (i - 1) * 4\n vols[i] = iota.hexToFloat(dathex, offset, 'L', 6)\n end\n log.debug('fs_microPower_w finish parse')\n\n local rst = {\n data = {\n _data_type = 'vib',\n physicalvalue = vols,\n sampleFreq = samplefreq,\n filterFreq = filterfreq,\n gainAmplifier = gainamplifier,\n triggerType = triggertype,\n version = version\n },\n device = subdevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', os.time({year = year, month = mon, day = day, hour = hour, min = min, sec = sec}))\n }\n table.insert(out.data, rst)\n log.debug('fs_microPower_w cloudvibrate=%s', json.encode(out))\n ctx:notify(json.encode(out))\n else\n log.debug('fs_microPower_w not found device module=%s channel=%s', deviceId, channel)\n end\nend\n\nfunction totalSensors()\n local sensorcnt = 0\n for i, dnlink in pairs(device.dnlinks) do\n sensorcnt = #(dnlink.devices) + sensorcnt\n end\n return sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n\nfunction HeadCheckSum(data)\n local sum = 0\n local len = string.len(data)\n log.debug('fs_microPower_w: len: %s', len)\n for i = 1, len, 4 do\n local te = tonumber(string.sub(data, i, i + 3), 16)\n log.debug('fs_microPower_w: te: %s', te)\n sum = sum + tonumber(te)\n end\n log.debug('fs_microPower_w: sum: %s', sum)\n return 0xffff - sum\nend INLINE 2018-10-24 10:35:48.217+08 2019-01-19 17:35:57.408+08 2018-10-24 \N
+118e4efb-d115-4765-b805-129460d51153 fs_peopleCounAJS_985 \N 485报文类似websocket 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n\nend\n\nlocal cacheCount={inCount=0,outCount=0,offlineData={inCount=0,outCount=0}}\n\nonData = function(hex)\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n local result = protocol_decode(hex, moduleNo)\n\n local isheart=mayHeart(hex,moduleNo)\n \n if isheart==false then\n log.debug('fs_peopleCounter_985 result=%s', result)\n ctx:notify(result)\n end\nend\n\nfunction mayHeart(hex,moduleNo)\n if string.len(hex)/2==12 and string.sub(hex,1,2)=='cc' then \n local yearNow=tonumber(os.date('%Y'))\n\t\tlocal monthNow=tonumber(os.date('%m'))\n\t\tlocal dayNow=tonumber(os.date('%d'))\n\t\tlocal hourNow = tonumber(os.date('%H'))\n\t\tlocal minNow = tonumber(os.date('%M'))\n\t\tlocal secNow = tonumber(os.date('%S'))\n log.debug("fs_peopleCounter_985\t应答时间 %s,%s,%s,%s,%s,%s",yearNow,monthNow,dayNow,hourNow,minNow,secNow)\n\t\tlocal resp_buff=string.sub(hex,1,20)..'1800'\n\t\tresp_buff = iota.appendHexWord(resp_buff, yearNow, 'L')\n resp_buff = iota.appendHexWord(resp_buff, 0, 'L')\n\t\tresp_buff = iota.appendHexWord(resp_buff, monthNow, 'L')\n \tresp_buff = iota.appendHexWord(resp_buff, 0, 'L')\n\t\tresp_buff = iota.appendHexWord(resp_buff, dayNow, 'L')\n \tresp_buff = iota.appendHexWord(resp_buff, 0, 'L')\n\t\tresp_buff = iota.appendHexWord(resp_buff, hourNow, 'L')\n \t\tresp_buff = iota.appendHexWord(resp_buff, 0, 'L')\n\t\tresp_buff = iota.appendHexWord(resp_buff, minNow, 'L')\n \tresp_buff = iota.appendHexWord(resp_buff, 0, 'L')\n\t\tresp_buff = iota.appendHexWord(resp_buff, secNow, 'L')\n \tresp_buff = iota.appendHexWord(resp_buff, 0, 'L')\n\t\tctx:asend(resp_buff)\n log.debug('fs_peopleCounter_985 心跳应答=%s[%s]', resp_buff,string.len(resp_buff)/2)\n\t\t\n\t\t--更新缓存的时间\n\t\tcacheCount.time=os.time()\n\t\t--汇总进出数据+离线数据\n\t\tcacheCount.inCount=cacheCount.inCount + cacheCount.offlineData.inCount\n\t\tcacheCount.outCount=cacheCount.outCount + cacheCount.offlineData.outCount\n\t\tcacheCount.offlineData.inCount=0\n\t\tcacheCount.offlineData.outCount=0\n\t\t\n\t\tif redis.set(device.id.."_count", json.encode(cacheCount)) then\n\t\t\tlog.debug("fs_peopleCounter_985 redis更新 set cacheCount ok key=%s,value=%s",device.id.."_count",json.encode(cacheCount))\n\t\tend\t\n\t\t\n\t\t\n \treturn true \n end\n\t\n return false\nend\n\nfunction protocol_encode(moduleNoStr)\n\nend\n\n--ccc0c5da1997980000000000 心跳\n--正确回复 ddc0c5da1997980000002c000100000000000000010000000000000001000000b20700000100000009000000090000000a00000000000000\n--原始数据 --"inCount": 130,\n-- "outCount": 16\nfunction protocol_decode(hex, moduleNoCheck)\n local data = hex\n --存储结果\n local out = {\n type = 1,\n data = {},\n result = {}\n }\n log.debug(data)\n --判断数据有效性\n local ErrorCode = IsValid(hex, moduleNoCheck)\n \n if ErrorCode then\n \tctx:asend(hex)--数据需要回传 设备确认平台已经收到\n -- local inBytesStr = string.sub(hex, 2 * 4 + 1, 2 * 4 + 16)\n -- local outBytesStr = string.sub(hex, 2 * 12 + 1, 2 * 12 + 16)\n --log.debug('fs_peopleCounter_985 修改')\n local inCount = iota.hexToUInt(hex,16,'L') --getCount(inBytesStr) -- :进人数\n local outCount = iota.hexToUInt(hex,20,'L') -- :出人数\n\t\t\n\t\t--判断缓存中是否有更新时间,若无,说明被重启过,从redis更新\n\t\tif cacheCount.time then\n\t\t\n\t\telse\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_count") --获取上次记录时间\n\t\t\tlog.debug("fs_peopleCounter_985 r1=%s,r1ok=%s",r1,r1ok)\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tcacheCount=json.decode(r1)\n\t\t\t\tlog.debug("fs_peopleCounter_985 r1=%s,r1ok=%s,beginTime=%s",r1,r1ok,beginTime)\t\t\t\t\n\t\t\telse\t\n\t\t\t\tlog.debug("fs_peopleCounter_985 redis读取失败 r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t--读取失败 将漏掉的记录一下\n\t\t\t\tcacheCount.offlineData.inCount=cacheCount.offlineData.inCount+inCount\n\t\t\t\tcacheCount.offlineData.outCount=cacheCount.offlineData.outCount+outCount\n\t\t\tend\n\t\tend\n\t\t\n \tcacheCount.inCount=cacheCount.inCount+inCount\n \tcacheCount.outCount=cacheCount.outCount+outCount\n local year = iota.hexToUInt(hex,32,'L') \n\t\tlocal month=iota.hexToUInt(hex,36,'L') \n \tlocal day=iota.hexToUInt(hex,40,'L') \n \t local hour=iota.hexToUInt(hex,44,'L') \n local min=iota.hexToUInt(hex,48,'L') \n local sec=iota.hexToUInt(hex,52,'L') \n\t local time=string.format('%04d-%02d-%02d %02d:%02d:%02d',year,month,day,hour,min,sec)\n out.data = {\n \t\t--time=time,\n inCount = cacheCount.inCount,\n outCount = cacheCount.outCount,\n stayCount = cacheCount.inCount - cacheCount.outCount\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n return json.encode(out)\nend\n\nIsValid = function(data, deviceModule)\n log.debug('fs_peopleCounter_985 开始校验 data=%s', data)\n local dataLen = string.len(data) / 2\n if data == nil or dataLen ~= 56 then\n errormsg = string.format('数据长度无效=%s≠22', dataLen)\n errcode = 1002\n return false\n end\n if iota.hexToByte(data, 0, 'B') ~= 0xdd then\n errormsg = 'CMD is not right'\n errcode = 1003\n return false\n end\n --local dataModule = string.sub(data,2*2+1,2*2+12)\n --if tonumber(deviceModule) ~= dataModule then\n -- errormsg = string.format('无效的模块号=%s≠%s', dataModule, deviceModule)\n -- errcode = 1004\n -- return false\n --end\n return true\nend\n\n--校验和8\nCS8 = function(start, buff)\n local lcr = 0\n for i = start, string.len(buff) / 2 - 1 do\n lcr = lcr + tonumber(string.sub(buff, 1 + 2 * i, 2 * (i + 1)), 16)\n end\n local value =256- bit.band(lcr, 0x7f)\n return string.format('%02x',value)\nend\n\ngetCount = function(bytes_8)\n local bytes_len = string.len(bytes_8) / 2\n local count = 0\n for i = 0, bytes_len - 1, 1 do\n local num = tonumber(string.sub(bytes_8, -2 * i - 2, -2 * i - 1))\n count = count + num * math.pow(10, i)\n end\n return count\nend INLINE 2021-02-23 10:39:26.53+08 2021-03-03 10:52:29.122+08 2021-02-23 \N
+00fa01a7-10b5-4908-ac97-d08ded49b59d zxnt_GDGS_7800 \N 1.0 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 f6ce26a9-3ae2-4845-9e60-cbeae08428e4 f f6ce26a9-3ae2-4845-9e60-cbeae08428e4 Lua start = function()\n log.debug('zxnt_GDGS_7800 device=%s', json.encode(device))\n ok = ctx:asend('01020304')\nend\n\nonData = function(hex)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n local moduleNo = device.uplink.props.module\n log.debug('zxnt_GDGS_7800 m=%s, recv =%s', moduleNo, hex)\n --local channelCounts = 8 --device.props.channelCount\n --local allDataLen = 6 + channelCounts * (4 * 30 + 2)\n --local singleChannelDataLen = 4 * 30 + 2\n local ErrorCode = IsValid(hex, moduleNo)\n local dataHex = string.sub(hex, 9, -1) --数据域\n local subData = dataHex\n local subData_len = string.len(subData) / 2\n\n local allSensorDatas = {}\n if ErrorCode then\n while (subData_len >= 5) do\n local channelNo = tonumber(string.sub(subData, 1, 2))\n local nodeSensorCounts = tonumber(string.sub(subData, 3, 4)) --光栅个数\n for i = 1, nodeSensorCounts, 1 do\n local dataindex = (2 + 3 * (i - 1)) * 2 + 1\n local X1 = string.sub(subData, dataindex, dataindex + 1)\n local X2 = string.sub(subData, dataindex + 2, dataindex + 3)\n local X3 = string.sub(subData, dataindex + 4, dataindex + 5)\n local frequency = (19625000 - (tonumber(X1, 16) * 65536 + tonumber(X2, 16) * 256 + tonumber(X3, 16))) / 100\n\n local keyStr = string.format('%s,%s', channelNo, i-1) --通道节点号 都是从0开始\n allSensorDatas[keyStr] = 299792458/frequency\n end\n\n --subData 删去已解析部分\n subData = string.sub(subData, 4 + 6 * nodeSensorCounts + 1, -1)\n subData_len = string.len(subData) / 2\n end\n\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n\n if subdevices ~= nil then\n local moduleNo_sub = tonumber(device.uplink.props.module) --模块\n for index_channel, channelDevice in pairs(subdevices) do\n local channelNo_sub = tonumber(channelDevice.uplink.props.channel) --通道\n for index_node, nodeDevice in pairs(channelDevice.dnlinks[1].devices) do\n local nodeNo_sub = tonumber(nodeDevice.uplink.props.node) --节点\n --log.debug("zxnt_GDGS_7800 子设备模块通道 接口获取 m=%s,c=%s,n=%s ",moduleNo_sub,channelNo_sub,nodeNo_sub)\n local keyIndex = string.format('%s,%s', channelNo_sub, nodeNo_sub)\n local WaveLength = allSensorDatas[keyIndex]\n local temperature\n if nodeDevice.uplink.capabilities[1].formula.metaid == '02079e63-b1de-4da9-8424-ebded758b627' and WaveLength~=nil then --温度公式\n local WTo = nodeDevice.uplink.capabilities[1].formula.props.WTo\n local Kwt = nodeDevice.uplink.capabilities[1].formula.props.Kwt\n local To = nodeDevice.uplink.capabilities[1].formula.props.To\n if WTo == nil or Kwt == nil or To == nil then\n temperature = nil\n else\n temperature = (WaveLength - WTo) * 1000 * Kwt + To\n end\n local data_temp = {\n data = {\n wavelength = tonumber(string.format('%0.3f', WaveLength)),\n physicalvalue = tonumber(string.format('%0.2f', temperature))\n },\n device = nodeDevice.id,\n type = 1\n }\n\n table.insert(out.data, data_temp)\n elseif nodeDevice.uplink.capabilities[1].formula.metaid == 'a9bc6a3e-3aae-4ee7-a354-c174ea0577f5' and WaveLength~=nil then --应变公式 ε= [(W - Wo)-(WT-WTo)*Kt/Kwt]*1000.0/K\n local cn = nodeDevice.uplink.capabilities[1].formula.props.cn --关联的温度通道与节点如5,12\n local Wo = nodeDevice.uplink.capabilities[1].formula.props.Wo --应变波长初值Wo\n local Kt = nodeDevice.uplink.capabilities[1].formula.props.Kt --应变的温度系数Kt\n local K = nodeDevice.uplink.capabilities[1].formula.props.K --应变系数K\n\n local Kwt --温度的温度系数Kt\n local WTo --T0温度波长值WTo\n\n if cn ~= nil and Wo ~= nil and Kt ~= nil and K ~= nil then\n local linkInformation = Split(cn, ',')\n local link_tempDevice_channel = linkInformation[1]\n local link_tempDevice_node = linkInformation[2]\n local w_device = getDeviceInfo(link_tempDevice_channel, link_tempDevice_node)\n\n if w_device ~= nil then\n Kwt = w_device.uplink.capabilities[1].formula.props.Kwt --温度的温度系数Kt\n WTo = w_device.uplink.capabilities[1].formula.props.WTo --T0温度波长值WTo\n\n --local keyIndex_linkTemp = (link_tempDevice_channel - 1) * 32 + link_tempDevice_node\n local WaveLength_linkTemp = allSensorDatas[cn]\n local physicalvalue = ((WaveLength - Wo) - (WaveLength_linkTemp - WTo) * Kwt / Kt) / K\n\n local data_strain = {\n data = {\n wavelength = tonumber(string.format('%0.3f', WaveLength)),\n physicalvalue = tonumber(string.format('%0.3f', physicalvalue))\n },\n device = nodeDevice.id,\n type = 1\n }\n\n table.insert(out.data, data_strain)\n end\n end\n end\n end\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n log.debug('zxnt_GDGS_7800 m=%s,data=%s', moduleNo, json.encode(out))\n local result = json.encode(out)\n ctx:notify(result)\nend\n\nIsValid = function(data, deviceModule, dataLenCheck)\n local checklength = string.len(data) / 2\n if data == nil or checklength < 6 then\n errormsg = string.format('数据无效')\n errcode = 1002\n return false\n end\n\n local cmdlength = tonumber(string.sub(data, 5, 8), 16)\n if checklength ~= cmdlength then\n errormsg = string.format('数据长度无效=%s[%s]', checklength, cmdlength)\n errcode = 1002\n return false\n end\n\n local dataCMD = string.sub(data, 3, 4)\n if dataCMD ~= '02' then\n errormsg = string.format('无效的功能码≠0x02[0x%s]', dataCMD)\n errcode = 1003\n return false\n end\n local dataModule = string.sub(data, 1, 2)\n if tonumber(dataModule, 16) ~= tonumber(deviceModule) then\n errormsg = string.format('无效的模块号=%s[%s]', dataModule, dataModule)\n errcode = 1003\n return false\n end\n return true\n --crc\nend\n\n--获取传感器信息\nfunction getDeviceInfo(channelStr, nodeStr)\n --log.debug("zxnt_GDGS_7800:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices\n for i, subdevice in pairs(subdevices) do\n local submodule = subdevice.uplink.props.module\n --判断是否是3层采集仪结构\n if json.encode(subdevice.dnlinks) ~= '{}' then\n --log.debug("zxnt_GDGS_7800:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n for k, sublink in pairs(subdevice.dnlinks) do\n local sensorchannel = subdevice.uplink.props.channel\n --log.debug("zxnt_GDGS_7800:sublink=%s",json.encode(sublink))\n for u, sub_subdevice in pairs(sublink.devices) do\n --log.debug("zxnt_GDGS_7800:sensor=%s",json.encode(subdevice))\n local sensornode = sub_subdevice.uplink.props.node\n\n if tostring(sensorchannel) == channelStr and tostring(sensornode) == nodeStr then\n log.debug('zxnt_GDGS_7800:m=%s,c=%s 3 拜安匹配到设备=%s', moduleid, channel, json.encode(sub_subdevice))\n\n return sub_subdevice\n else\n --log.debug("zxnt_GDGS_7800:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n end\n end\n end\n else\n local subchannel = subdevice.uplink.props.channel\n --log.debug('zxnt_GDGS_7800:两层结构 m=%s,c=%s 设备=%s', submodule, subchannel, json.encode(subdevice))\n if tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then\n log.debug('zxnt_GDGS_7800:m=%s,c=%s 2安信匹配到设备=%s', moduleid, channel, json.encode(subdevice))\n return subdevice\n else\n --log.debug('zxnt_GDGS_7800 has no device module=%s channel=%s,[submodule=%s,subchannel=%s]', moduleid, channel, submodule, subchannel)\n end\n end\n end\n log.debug('zxnt_GDGS_7800 has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('zxnt_GDGS_7800 has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend INLINE 2019-03-22 10:08:31.722+08 2019-04-09 10:19:29.028+08 2019-03-22 \N
+f82eec29-fd92-496d-a98e-02dc2e22cf9d fs_waterLevel_1561 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start =function()\n log.debug('start %s, moduleId=%s', 'fs_waterLevel_1561.lua', device.props.moduleId or 'nil')\n\n local endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) --返回雷达当前水位值,单位为mm\n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) -- 水位\n buff=iota.appendHexCrc(buff, 'L' ,0) \n ok, resp = ctx:ssend(buff, 15000)\n local result = '{}'\n if ok then\n result = unmarshall(resp, moduleNo)\n else\n local errorout={\n data ={},\n result = {}\n }\n \t errorout.result = {code=1001,msg="采集超时"}\n result=json.encode(errorout)\n end\n ctx:done(result)\nend\n--01 03 00 03 00 02 0000\n--010304000003040000 772mm \n\nunmarshall =function(hex,moduleNoStr)\n log.debug("fs_waterLevel_1561 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local length =iota.hexToUShort(hex,3,'B')/100.0\n log.debug("fs_waterLevel_1561 m=%s,length=%s ",moduleNoStr,length)\n out.data = { \n length=length\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("fs_waterLevel_1561 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n\nIsValid = function(data, moduleNoStrCheck)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = string.format('无效的数据,长度=%s',string.len(data)/2)\n errcode = 1002\n return false\n end\n \n local dataModule=iota.hexToByte(data,0,'B')\n if tostring(moduleNoStrCheck) ~= tostring(dataModule) then\t\n errormsg = string.format('无效的模块号=%s[%s]',moduleNoStrCheck,dataModule)\n errcode = 1003\n return false\n end\n return true\n --crc\nend\n\n\nisValidParameter = function(...)\n local paras = {...}\n for k, v in pairs(paras) do\n -- log.debug('k=%s,v=%s',k,v)\n local isNum = IsNumberic(v)\n --log.debug('isNum=%s',isNum)\n if isNum == false then\n return false\n end\n end\n return true\nend\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend INLINE 2019-11-20 09:27:30.249+08 2019-11-20 17:19:45.759+08 2019-11-20 \N
+f9058abc-d879-4c5e-9f2d-40e8962ba5fe RT_ZS_BZ \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n log.debug("start %s, ctx=", "RT_ZS_BZ.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n \tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=tonumber(device.uplink.props.module) --模块 通道 优先接口获取\t\t\t\n\t\tlog.debug("RT_ZS_BZ 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\t moduleNo=device.props.moduleId \n\t\t log.debug("RT_ZS_BZ 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\tlocal moduleNo=device.props.moduleId or device.uplink.props.module \n\t--log.debug("RT_ZS_BZ moduleNo=%s 接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n buff=buff..string.format("%02X",tonumber(moduleNo)) -- 1: 模块号\n\tbuff=buff.."0300000001"\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n\n ok,resp=ctx:ssend(buff,15000)\n\tlog.debug("RT_ZS_BZ:发送数据=%s",buff)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n\t\tlog.debug("RT_ZS_BZ 接收数据=%s,解析值=%s",resp,result)\n\t\tctx:done(result)\n end\n \nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)>=14) then\n\n local noise = iota.hexToShort(hex,3,'B');\n\t\tnoise = noise/10.0\n out.data = {\n noise=noise\n };\n else\n local message = string.format('Invalid Msg, hex=%s,len=%s',hex,string.len(hex))\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n \n\n INLINE 2020-01-17 15:39:03.213+08 2020-01-17 16:07:57.256+08 2020-01-17 \N
+20051464-5ac9-47e7-940f-04b066d61a18 Asmik_Phn_4600 \N 1.0 49c6faf4-6972-4d51-9e7c-c6df38c9686c 49c6faf4-6972-4d51-9e7c-c6df38c9686c f 49c6faf4-6972-4d51-9e7c-c6df38c9686c Lua --//02 协议分析/2017-04/优先接入/彩色无纸记录仪\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "Asmik_Phn_4600", device.props.moduleId or "[nil]")\n\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff,(device.props.channelId-1)*2, endian)\n buff=iota.appendHexByte(buff, 0x00, endian) \t\t\n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n end\nend\n--010404397942775647\n--moduleId=1\n--channelId=1\n--"liquidLevel": 61.806126\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local sub_hex=string.sub(hex,7,7+7)\n sub_hex_BE=string.sub(sub_hex,-4,-1)..string.sub(sub_hex,1,4)\n local pressure = iota.hexToFloat(sub_hex_BE,0,'B');\n \n out.data = {\n pressure = pressure \n }\n\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x04 then\n errormsg = 'CMD is not right'\n errcode = 1001\n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid ack moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2017-12-06 11:46:32.85+08 2018-02-28 18:32:12.209+08 2017-12-06 \N
+38b8ea7c-27c3-4c8e-b667-80bd1f78d911 shzr_RN620 \N 1.0 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f 8d2f03c7-32a2-42e4-befc-7dde5c965472 Lua --//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shzr_RN620", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shzr_RN620 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x03, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,4000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("shzr_RN620 SSend error!")\n end\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local length\t = iota.hexToShort(hex,3,'B')/100\n\t\tlocal temperature\t = iota.hexToShort(hex,5,'B')/100\n \n \n out.data = {\n\t\t\tlength\t=length,\n\t\t\ttemperature\t=temperature\t\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('shzr_RN620 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x04 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shzr_RN620 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2020-03-26 11:00:53.98+08 2020-03-26 16:11:32.289+08 2020-03-26 \N
+c103cba2-1c09-493e-8db1-37394ad65637 nengh_YF_8301 \N 土壤盐分电导率一体化传感器协议 1.0 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b f ad0cd544-aed4-4670-9d17-f3e717a9a59b Lua \n--D:\\SVN\\201811项目\\智慧农业待接入设备\\NH51Y土壤盐分电导率一体化传感器说明书V1.1-170510.pdf\nstart=function()\n local endian = 'B'\n local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("nengh_YF_ 设备模块通道 接口获取 m=%s ",moduleNo)\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("nengh_YF_,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t log.debug("nengh_YF_ m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("nengh_YF_ m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local saltContent =iota.hexToUShort(hex,3,'B')\n \tlocal conductivity =iota.hexToUShort(hex,5,'B')\n out.data = { \n saltContent=saltContent,\n \t\tconductivity=conductivity/100\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("nengh_YF_ m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2018-11-19 10:59:47.33+08 2018-12-13 11:26:51.618+08 2018-11-19 \N
+d6f1dfe7-d20a-48bf-ac33-419f33048c43 hc_vibrateWire_1403 \N 上海华测创时振弦采集仪协议 1.0 14332895-1778-42da-912a-4314147f2555 14332895-1778-42da-912a-4314147f2555 f 14332895-1778-42da-912a-4314147f2555 Lua --//01 协议文档/5月第3周/上海华测创时/振弦采集仪通讯协议.doc\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nstart=function()\n log.debug("start %s, moduleId=%s channel = %s ", "hc_1403",device.uplink.props.module or 'nil',device.uplink.props.channel or 'nil')\nlocal endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n log.debug("hc_1403 根设备 名称 : data is =%s", device.name)\n log.debug("hc_1403 根设备devices : data is =%s", json.encode(device))\n \tfor index,child in pairs(subdevices) do\n\t\t log.debug("hc_1403 子设备subdevices=%s : data is =%s", index,json.encode(child))\n \t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("hc_1403 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t moduleNo=child.props.moduleId\n\t\t\t channelNo=child.props.channelId \n\t\t\t log.debug("hc_1403 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n \t--local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t \n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n log.debug("hc_1403 模块%s通道%s的deviceId是%s:",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexByte(buff, 0x48, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0x43, endian) \n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\n\t\t\tbuff=iota.appendHexByte(buff, 1, endian) -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian) -- 1: 通道号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\t\t\tbuff=iota.appendHexWord(buff, 0, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0) \n\t\t\tbuff=iota.appendHexByte(buff, 0xAF, endian) \t\t\t\t\t\t\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n log.debug("hc_1403 模块%s通道%s的数据接收成功,开始解析",moduleNo,channelNo) \n\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("hc_1403 模块%s通道%s的数据接收失败",moduleNo,channelNo) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("hc_1403 subdevices是nil")\n \treturn nil\n end\n\t\t\n\tlocal resultData =json.encode(out)\n log.debug("hc_1403 out序列化结果 : out is =%s", json.encode(out))\n ctx:done(resultData)\t\n\t\n\t\nend\n--4843000015040301a8774945000000000000000000006778af\n--K=1\n--F0=2\n--Kt=3\n--T0=4\n--moduleId=5380\n--channelId=1\n--formula=ε=ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)\n--"phy": -16,\n--"frequency": -1.3727142151112332e-14,\n--"temperature": 0\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n\t--local subModuleId=subDevice.props.moduleId or subDevice.uplink.props.module\n\t--local subChannelId=subDevice.props.channelId or child.uplink.props.channel\n\tlog.debug("hc_1403:模块%s通道%s的deviceId是:%s",subModuleId,subChannelId,subDevice.id)\n local ErrorCode = IsValid(hex,tostring(subModuleId),tostring(subChannelId))\n if ErrorCode then \n \n \n\t\tlocal Frequency = iota.hexToFloat(hex, 8,'B',32); -- 65=1100101\n local Temp = iota.hexToFloat(hex, 12,'B',2);\n\t\tlog.debug("hc_1403:模块%s通道%s的原始值是:freq=%s,Temp=%s",subModuleId,subChannelId,freq,Temp)\n log.debug("hc_1403:模块%s通道%s的参数值是:=%s",subModuleId,subChannelId,json.encode(subDevice.uplink.capabilities[1].formula))\n \n\t\tlocal Phy=0\n --if subDevice.device.formula == "ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)" then --振弦公式\t\t\n\t\t\t\tlocal K = subDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t--local K2 = subDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t--local K3 = subDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\tlocal Fo = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\tlocal Kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal To = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\tlog.debug("hc_1403:振弦模块:公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\tif K ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\tlog.debug("hc_1403 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\telse\n\t\t\t\t\tlog.debug("hc_1403 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\tlocal Fi=Frequency \n\t\t\t\t\tPhy = K*Fi^2-(K*Fo^2)+Kt*(Temp-To)\n\t\t\t\t\tlog.debug("当前的Phy是:%s",Phy)\n\t\t\t\tend \n\t\t--end\n \n \n \n\t\tsubData.data={\n\t\t\t\t\tfrequency=string.format("%0.3f",Frequency),\n\t\t\t\t\ttemperature=string.format("%0.3f",Temp),\n \tphysicalvalue=string.format("%0.3f",Phy)\n\t\t\t\t\t}\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n log.debug('hc_1403:模块%s通道%s开始校验数据',moduleId,channelId)\n if data == nil or string.len(data)/2 ~= 25 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('hc_1403:模块%s通道%s 数据 长度校验失败:Data is nil or invalid length=%s',moduleId,channelId,string.len(data)/2)\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x48 or iota.hexToByte(data,1,'B') ~= 0x43 or iota.hexToByte(data,24,'B') ~= 0xaf then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n\t\tlog.debug('hc_1403:模块%s通道%s 数据校验失败:Hex CMD False:错误码=1003',moduleId,channelId)\n return false\n end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,4,'B'))\n\tif moduleId~= moduleStr then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug('hc_1403:模块%s通道%s 模块号校验失败:Invalid acq moduleId=%s',moduleId,channelId,moduleStr)\n return false\n end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,7,'B'))\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('hc_1403:模块%s通道%s 通道号校验失败:Invalid acq channelId=%s',moduleId,channelId,channelStr)\n\t\treturn false\n\tend\t\t\n log.debug('hc_1403:模块%s通道%s校验数据通过!!!',moduleId,channelId)\n return true\nend INLINE 2017-09-04 19:06:17.153+08 2018-03-28 16:21:23.473+08 2017-08-31 \N
+1e2ed006-51a1-4136-9de9-03451e5aee80 xs_Weather_2408 \N 13要素气象站 1.0 dbfb6012-f2a3-4e35-b214-d014eba687e4 dbfb6012-f2a3-4e35-b214-d014eba687e4 f dbfb6012-f2a3-4e35-b214-d014eba687e4 Lua --//04 项目资料/2017-09/绵阳湘蜀电子-气象站监测/自动气象站通讯协议和标准MODBUS协议.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "xs_Weather_2408", device.moduleId or "[nil]")\n\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("xs_Weather_2408 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("xs_Weather_2408 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n\t\n\t\n\t\n if tonumber(moduleNo) > 255 or tonumber(moduleNo) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian) \t\t\n buff=iota.appendHexByte(buff, 0x10, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n end\n ctx:done(result)\n end\nend\n--0103207FFF7FFF00C3FF3D7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF0000\n--moduleId=1\n--"co2": 0,\n--"direction": 0,\n--"humidity": 0,\n--"illumination": 0,\n--"pm25": 0,\n--"pressure": 0,\n--"radiation": 0,\n--"rainFall": 0,\n--"soilHumidity": 0,\n--"soilTemp": -19.5,\n--"speedWind": 0,\n--"temp": 19.5,\n--"ultravioletRadiation": 0\n\nunmarshall=function(hex,moduleStr)\n log.debug("xs_Weather_2408 receiced data=%s", hex) \n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n log.debug('xs_Weather_2408 开始解析')\n --模拟byte[]\n\t local data={}\n\t for i=0,string.len(hex)-1,2 do\n\t local j=i/2\n\t\t data[j]=string.sub(hex,i+1,i+2)\n\t\tend\n\t --默认无效数据0x7F(无效/未连接) 替换为0x00\n\t\tfor i=3,table_leng(data)-1,1 do\n\t if data[i]=='7f' then\n if data[i+1]=='ff' then\n\t\t data[i]='00'\n data[i+1]='00'\n end\n\t\t end\t \n\t\tend\n\t log.debug('xs_Weather_2408 计算结果'..data[3]..data[4])\n\t\tlocal speedWind = iota.hexToShort(data[3]..data[4],0,'B') * 0.1;--//风速\n \t\tlocal rainFall = iota.hexToShort(data[5]..data[6],0,'B')*0.1;--//雨量\n local temp = iota.hexToShort(data[7]..data[8],0,'B') * 0.1;--//温度\n local soilTemp = iota.hexToShort(data[9]..data[10],0,'B') * 0.1;--//土壤温度\n local pressure = iota.hexToShort(data[11]..data[12],0,'B') * 0.1;--//气压\n local radiation = iota.hexToShort(data[13]..data[14],0,'B');--//总辐射\n local direction = iota.hexToShort(data[15]..data[16],0,'B');--//风向\n local soilHumidity = iota.hexToShort(data[17]..data[17],0,'B') * 0.1;--//土壤湿度\n local humidity = iota.hexToShort(data[19]..data[20],0,'B') * 0.1;--//湿度\n local ultravioletRadiation = iota.hexToShort(data[21]..data[22],0,'B');--//紫外辐射\n local illumination = iota.hexToShort(data[23]..data[24],0,'B');--//光照度\n local co2 = iota.hexToShort(data[25]..data[26],0,'B');--//CO2\n local pm25 = iota.hexToShort(data[27]..data[28],0,'B');--//PM2.5\n\t\n \n out.data = {\n speedWind=speedWind,\n\t\t\t\trainFall=rainFall,\n\t\t\t\ttemp=temp,\n\t\t\t\tsoilTemp=soilTemp,\n\t\t\t\tpressure=pressure,\n\t\t\t\tradiation=radiation,\n\t\t\t\tdirection=direction,\n\t\t\t\tsoilHumidity=soilHumidity,\n\t\t\t\thumidity=humidity,\n\t\t\t\tultravioletRadiation=ultravioletRadiation,\n\t\t\t\tillumination=illumination,\n\t\t\t\tco2=co2,\n\t\t\t\tpm25=pm25\n }\n\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data,moduleStrCheck)\n if data == nil or string.len(data)/2 ~= 37 then\n errormsg = 'Data is nil or InvalidLength'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = 'CMD is not right'\n errcode = 1001\n return false\n end\n if tostring(moduleStrCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid ack moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n INLINE 2017-12-05 10:44:21.903+08 2018-03-30 10:58:01.406+08 2017-12-03 \N
+0519be85-6999-49e5-a49d-0a5702bd60f6 fs_vibrateWire_1401 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\nstart=function()\n\t--log.debug("start load fs_1401 moudle = %s ",device.uplink.props.module)\n --log.debug("fs_1401 root device = %s", json.encode(device))\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n \n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n \tfor index,child in pairs(subdevices) do \n \t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("fs_1401 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t moduleNo=child.props.moduleId\n\t\t\t channelNo=child.props.channelId \n\t\t\t log.debug("fs_1401 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n\t\t -- local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexWord(buff, 10, endian) ---2: 传感器类型\n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x01, endian) -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian) -- 1: 通道号\n\t\t\tbuff=iota.appendHexByte(buff, 0x67, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0)\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlog.debug("fs_1401 module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tlocal result='{}'\n if ok then \n\t\t\t result = unmarshall(resp,child,tostring(moduleNo),tostring(channelNo))--解析单条数据\n\t\t\t table.insert(out.data,result)\t\t\t\t\n\t\t\telse\n local errorSubData={\n data ={},\n device=child.id,\n type=1 \n }\n errorSubData.result = {code=1001,msg='通道采集超时'} \n \t\ttable.insert(out.data,errorSubData)\n\t\t\t log.debug("fs_1401 module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("fs_1401:".."subdevices是nil")\n \treturn nil\n end\n\tlocal resultData =json.encode(out)\n \tlog.debug("fs_1401 module=%s,result=%s .",moduleNo,json.encode(out))\n ctx:done(resultData)\nend\n\n\n--000A000181016F0044E59D5D43BA104741CF000094A8 moduleId=1 channelID=1\n--000A0FA681096F0044E59D5D43BA104741CF00009659 moduleId=4006 channelID=9 原始值 frequency=1836.918 temp=25.875 \nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n\t--local subModuleId=module\n\t--local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n log.debug("fs_1401 module=%s,channel=%s [%s] recv=[%s].",subModuleId,subChannelId,subDevice.id,hex)\n if ErrorCode then \n\t\tlocal freState=iota.hexToByte(hex,7,'B')%16\n\t\tlocal tempState=iota.hexToByte(hex,7,'B')-16\n\t\t\n\t\tif freState ~= 0 or tempState ~= 0 then\n\t\t\tif freState ~=0 then\n\t\t\t\tif tempState ~=0 then\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE_TEMPWIRE'\n\t\t\t\terrcode = 140103\n\t\t\t\tlog.debug('fs_1401 ERR_VIBRW_FREWIRE_TEMPWIRE. module=%s,channel=%s ',subModuleId,subChannelId)\t\t\t \n\t\t\t\tend\t\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE'\n\t\t\t\terrcode = 140101\n\t\t\t\t\n\t\t\tend\t\t\t\t\t\t\n\t\t\terrormsg = 'ERR_VIBRW_TEMPWIRE'\n\t\t\terrcode = 140102\n\t\tend\n\t\t\n\t\tlocal freq=iota.hexToFloat(hex,8,'B',3)\n\t\tlocal am=iota.hexToFloat(hex,12,'B',3)\n local temp = iota.hexToFloat(hex,16,'B',3)\n log.debug("fs_1401 module=%s,channel=%s [%s] [freq=%s,am=%s,temp=%s].",subModuleId,subChannelId,subDevice.id,freq,am,temp) \n\t\tlocal Phy=0\n\t\tlocal formulaId=subDevice.uplink.capabilities[1].formula.metaid --公式id\n\t\tlog.debug("fs_1401 公式id=%s",formulaId)\n\t\t--振弦公式\n if subDevice.uplink.capabilities[1].formula.metaid == '265b6e0c-ccfe-4cbd-bde2-362c37e12a44' then --在iota中查找\n\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K or 0\n\t\t\t\tlocal kt = subDevice.uplink.capabilities[1].formula.props.Kt or 0\n\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo or 0\n\t\t\t\tlocal t0 = subDevice.uplink.capabilities[1].formula.props.To or 0\n log.debug("fs_1401 module=%s,channel=%s [%s] formula params :k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",subModuleId,subChannelId,subDevice.id,k,kt,f0,t0,freq,temp,am)\n\t\t\t if k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\tend\n\t\t\t\t--无公式 --温度传感器用\n\t\telseif subDevice.uplink.capabilities[1].formula.metaid == '7db881d1-76ee-4a11-b932-c658d8d0eaed' then --在iota中查找\n\t\t--\n\t\tend\n\t\tsubData.data={\n\t\t\t\t\tfrequency=freq,\n\t\t\t\t\ttemperature=temp,\n\t\t\t\t\tam=am,\n \tphysicalvalue=Phy\n\t\t\t\t\t}\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\n\nIsValid=function(data,moduleId,channelId)\n if data == nil or string.len(data)/2 ~= 22 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('fs_1401 : Data is nil or invalid length. module=%s channel=%s recv = %s',moduleId,channelId,data)\n return false\n end\n if iota.hexToByte(data,4,'B') == 0xc0 then\n errcode = 1001\n errormsg = 'Modbus Error Code ' \n\t\tlog.debug('fs_1401 : Modbus Error Code = %s. module=%s channel=%s recv = %s',iota.hexToByte(data,5,'B'),moduleId,channelId,data)\n return false\n end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,2,'B'))\n\tif moduleId~= moduleStr then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug('fs_1401 : module error [errmodule=%s]. module=%s channel=%s recv = %s',moduleStr,moduleId,channelId,data)\n return false\n end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,5,'B'))\n\tif(channelStr=='0') then\n\t channelStr='1'\n\tend\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('fs_1401 : channel error [errchannel=%s]. module=%s channel=%s recv = %s',channelStr,moduleId,channelId,data)\n\t\treturn false\n\tend\n return true\nend INLINE 2017-08-26 16:00:32.004+08 2019-12-13 11:23:41.903+08 2018-03-23 \N
+8ced906b-9db3-4efe-a448-3e197ed73a36 sonbest_wind_1 \N 搜博 1.0 095856ee-a9d4-4d58-9ecc-8e832e82ab8b 095856ee-a9d4-4d58-9ecc-8e832e82ab8b f 095856ee-a9d4-4d58-9ecc-8e832e82ab8b Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "sonbest_wind_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n \n \tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("sonbest_wind_1 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("sonbest_wind_1 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 1, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n -- 01 03 00 00 00 01 84 0A \n -- print("ssend=", ctx:ssend(buff,500) )\n log.debug("send %s, ctx=%s", "sonbest_wind_1.lua",buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n log.debug("recv %s, ctx=%s", "sonbest_wind_1.lua",hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==14) then\n \n -- 010302018CB871\n --"level": 3.96\n local windSpeed =iota.hexToShort(hex,3,'B')/100;\n \n out.data = {\n \n windSpeed=windSpeed,\n \n };\n else\n local message = "Invalid Msg, len is not rigth"\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("recv %s, ctx=%s", "sonbest_wind_1.lua",json.encode(out))\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2018-01-23 16:13:36.702+08 2018-03-30 08:21:38.753+08 2018-01-23 \N
+f62c8865-7064-4630-8ad6-60d29b34310d qx_illumination_2404 \N 邯郸光照传感器 1.0 cd7e9785-f93e-4d49-acf8-7ce7fe77c734 cd7e9785-f93e-4d49-acf8-7ce7fe77c734 f cd7e9785-f93e-4d49-acf8-7ce7fe77c734 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "qx_illumination_2404.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 3: 模块号\n buff=iota.appendHexByte(buff, 3, endian) -- 4: 指令: 0x01 = 采集\n buff=iota.appendHexWord(buff, 0, endian) \n buff=iota.appendHexWord(buff, 2, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 5: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==18) then\n \n --0203040000011f896b moduleId=2\n --"illumination": 287 \n --print("parsing data", hex)\n \n local Illumination =iota.hexToInt(hex,3,'B'); \n out.data = {\n illumination=Illumination\n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2017-09-04 20:41:15.964+08 2018-02-28 18:32:12.211+08 2017-09-04 \N
+4282373a-95d9-4b6e-97de-73fdd0b03407 zc_inclinometer_1505 \N ModBus固定杆式测斜仪采集协议 上海直川\t-宁波理工-海涛雷鸟 1.0 52e1e749-befb-43b5-82a2-cc176deaef5b 52e1e749-befb-43b5-82a2-cc176deaef5b f 52e1e749-befb-43b5-82a2-cc176deaef5b Lua --//PMO/02 产品协议/SavoirCloud/01 协议/3月第3周/上海直川电子科技/倾角传感器通讯协议-宁波理工-海涛雷鸟_上海直川电子科技.pdf\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n--[[\n协议号: 1505;\n协议名: ModBus固定杆式测斜仪采集协议 上海直川\t-宁波理工-海涛雷鸟\n]]--\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "zc_inclinometer_1505", device.props.moduleId or "[nil]")\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0xA1, endian) -- 1:帧头 0xA1\n buff=iota.appendHexByte(buff, device.props.moduleId, endian)-- 2: 模块号\n buff=iota.appendHexByte(buff, 0x13, endian) -- 3: 指令: 0x13 = 采集\n buff=iota.appendHexWord(buff, 0, endian) --4:\n buff=iota.appendHexByte(buff,LCR(buff),endian) -- 5: CRC\n\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n --print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n-- 帧头 模块 功能 采样数据长度 x角度 y角度 LCR\n-- 1 1 1 4 2 2 1\n--A11213000404DD8D9612\n--moduleId=18\n--"xDegree": 12.45,\n--"yDegree": -34.78\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\nlocal ErrorCode = IsValid(hex)\n if ErrorCode then \n local signx = 1\n local signy = 1\n local bytex1 = iota.hexToByte(hex,5,'B')\n local bytex2 = iota.hexToByte(hex,6,'B')\n if(bytex1>=0x80) then\n bytex1=bit:_and(bytex1,0x7f)\n signx=-1\n end\n local XDegree = bit:_or(bit:_lshift(bit:_and(bytex1 , 0xffff) , 8),bytex2) * signx / 100.0\n local bytey1 = iota.hexToByte(hex,7,'B')\n local bytey2 = iota.hexToByte(hex,8,'B')\n if(bytey1>=0x80) then\n bytey1=bit:_and(bytey1,0x7f)\n signy=-1\n end\n local YDegree = bit:_or(bit:_lshift(bit:_and(bytey1 , 0xffff) , 8),bytey2) * signy / 100.0 \n out.data = {\n xDegree = XDegree,\n yDegree = YDegree\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nLCR=function(buff)\n local lcr = 0\n for i = 0, string.len(buff)/2-1 do\n lcr = lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)\n end \n local value= bit:_and(lcr,0xff)\n \tlocal byte = 0xff - value\n return byte\nend \n\n\nIsValid=function(data)\n log.debug('开始校验数据')\n if data == nil or string.len(data)/2 ~= 10 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0xA1 or iota.hexToByte(data,2,'B') ~= 0x13 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,1,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('数据校验通过')\n return true\n--crc\nend\n \n\n\n \n\n INLINE 2017-08-28 20:00:08.145+08 2018-02-28 18:32:12.211+08 2017-08-28 \N
+e548ef12-9b49-480e-a000-57c0391c5bd0 bjeac_settlement_1 \N 沉降 1.0 5c2a5b34-3127-4921-bf54-49378012c0b0 5c2a5b34-3127-4921-bf54-49378012c0b0 f 5c2a5b34-3127-4921-bf54-49378012c0b0 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, moduleId : %s", "bjeac_settlement_1.lua",device.props.moduleId or "null")\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 1, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 3: 模块号\n buff=iota.appendHexByte(buff, 4, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 5: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n log.debug("bjeac_settlement_1 ssend : %s",buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n \nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n log.debug("bjeac_settlement_1 recved : %s",hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==24) then\n \n --0301000142f6cccd00001111\n --"settlement": 13660.3802214 \n --print("parsing data", hex)\n \n local settlement =iota.hexToFloat(hex,4,'B')*110.7; \n out.data = {\n settlement=settlement\n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("bjeac_settlement_1 data : %s", json.encode(out))\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2017-12-18 10:54:06.725+08 2018-02-28 18:32:12.212+08 2017-12-18 \N
+638699d6-576a-49d7-add9-fa5b05896d88 kst_corrosion_1 \N 腐蚀传感器 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua bit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\nstart=function()\n log.debug("start %s, ctx=", "gdyjs_lvdt_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff='' \n buff=iota.appendHexByte(buff, 0x55, endian) \n buff=iota.appendHexByte(buff, 0xaa, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x09, endian)\n buff=buff..device.props.moduleId \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x41, endian)\n buff=buff..device.uplink.props.channelId \n local sum = checkSum(buff,0,8)\n buff=iota.appendHexByte(buff, sum, endian) \n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,20000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n--55AA003B000141011105160E320C3F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000002A\n--moduleId=255 humidity": 71.4,"pressure": 100.05,"temperature": 25.73\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==118) then\n \n local rate=iota.hexToShort(hex,21,'B'); \n local current=iota.hexToShort(hex,25,'B'); \n \n out.data = {\n rate=rate,\n current=current\n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n\ncheckSum=function(data,startindex,endindex)\n local sum = 0\n for i=startindex,endindex-1 do\n if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n sum = (sum + iota.hexToByte(data,i,'B'))\n end\n end \n sum = bit:_and(sum , 0xff)\n return sum\nend \n INLINE 2017-12-06 11:41:59.984+08 2018-03-17 13:35:37.132+08 2017-12-06 \N
+1fccedae-daf9-41b3-9577-7ce5383902a2 gn_settlement \N 1.0 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 f c465666b-2fe0-4d50-9d21-74d919571ab4 Lua --//04 项目资料/2018-01/葛南 静力水准仪监测/JL-1静力水准仪协议.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "gn_settlement", device.props.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("gn_settlement 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("gn_settlement 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x04, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("gn_settlement:SSend error!")\n end\n ctx:done(result)\nend\n--cmd= 01030004000285ca\n--response=01030412e62e00031c\n--moduleId=1 \n--"settlement": 4838.180,\n\nunmarshall=function(hex,moduleNoStr)\n local out={\n data ={},\n result = {}\n }\t\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then \n \n local int_part = iota.hexToShort(hex,3,'B')\n local dec_part = iota.hexToShort(hex,5,'B')/65535.0\n local settlement=int_part+dec_part\n\t\tsettlement=tonumber(string.format("%5.3f",settlement))\n out.data = {\n\t\t\tlength=settlement\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNoStrCheck)\n log.debug('gn_settlement:开始校验数据%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNoStrCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('gn_settlement:数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2018-02-27 09:37:13.873+08 2018-04-17 11:49:56.964+08 2018-02-27 \N
+eecabea7-d741-4630-8968-e8abfc8f2d1a mas-pressure-9004 \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "Mas-pressure-9004", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t--全局\n out={\n data ={},\n result = {}\n }\t\t\n\tpoint = 0\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("Mas-pressure-9004 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n\t\tbuff=iota.appendHexByte(buff, 0x00, endian) \n\t\tbuff=iota.appendHexByte(buff, 0x03, endian) \n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x01, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("Mas-pressure-9004 SSend error!")\n end\n\t\tif out.data.oxygen~=nil then\n\t\t\tlog.debug('Mas-pressure-9004:'..'解析正常'..tostring(out.data.pressure))\n\t\t\tlocal bufft=''\n\t\t\tbufft=iota.appendHexByte(bufft, moduleNo, endian) -- 模块号\n\t\t\tbufft=iota.appendHexByte(bufft, 0x03, endian) \n\t\t\tbufft=iota.appendHexByte(bufft, 0x00, endian) \n\t\t\tbufft=iota.appendHexByte(bufft, 0x02, endian) \n\t\t\tbufft=iota.appendHexByte(bufft, 0x00, endian)\n\t\t\tbufft=iota.appendHexByte(bufft, 0x01, endian)\n\t\t\tbufft=iota.appendHexCrc(bufft, 'L' ,0) \n\t\t\tok,resp=ctx:ssend(bufft,15000)\n\t\t\tif ok then\n\t\t\t log.debug('Mas-pressure-9004:'..'采集成功 开始解析:'..resp)\n\t\t\t\tresult =unmarshalldata(resp,moduleNo) \n\t\t\t else\n\t\t\t\tlog.debug('Mas-pressure-9004:'..'采集失败')\n\t\t\tend\n\t\tend\n\t\tresult = json.encode(out)\n ctx:done(result)\nend\n--00 03 00 00 00 01 85 DB\n--00 03 02 00 00 85 84\n--moduleId=0\n--00 03 00 01 00 01 D4 1B\n--00 03 02 00 FA 05 C7\n\n\n\nunmarshall=function(hex,moduleStr)\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n point = = iota.hexToShort(hex,3,'B')\n else\n out.result = {code=errcode,msg=errormsg} \n end\n -- return json.encode(out)\nend\n\n \nunmarshalldata=function(hex,moduleStr)\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\t\tlocal pressure = iota.hexToShort(hex,3,'B')\n if point ~= 0 then\n out.data = {\n pressure=pressure/10*point\n\t\t\t}\n\t\telse\n\t\tout.data = {\n pressure=pressure\n\t\t\t}\t\n\t\tend\n else\n out.result = {code=errcode,msg=errormsg} \n end\n -- return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('Mas-pressure-9004 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('Mas-pressure-9004 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2018-10-11 15:43:09.515+08 2018-10-11 17:06:04.74+08 2018-10-11 \N
+1a60f41c-f6df-43a2-98f6-6b4d908caaba jjx_lvdt_9103 \N 拉杆式位移传感器LWF-R2_R5 1.0 a5f54e1b-45e0-47fd-a9f4-92ee009430ab a5f54e1b-45e0-47fd-a9f4-92ee009430ab f a5f54e1b-45e0-47fd-a9f4-92ee009430ab Lua start=function()\n log.debug("start %s, ctx=", "jjx_lvdt_9103.lua",json.encode(device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 1: 模块号 \n buff=iota.appendHexByte(buff, 3, endian) -- 2: 指令: 0x04 = 采集\n buff=iota.appendHexWord(buff, 1, endian) \n buff=iota.appendHexWord(buff, 4, endian) \n buff=iota.appendHexCrc(buff, endian ,0)\n \n local crcH=string.sub(buff,-2,-1)\n\tlocal crcL=string.sub(buff,-4,-3)\n buff=string.sub(buff,1,12)\n buff=buff..crcH\n buff=buff..crcL\n \n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n --print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)/2==13) then\n -- 模块 功能 数据长度 温度 CRC\n -- 1 1 1 2 2\n -- 01040203e8b98e\n --print("parsing data", hex)\n local sign=1\n local data7=iota.appendHexByte(hex,7,'B')\n if data7==0x80 then\n sign=-1\n end\n\n local elongationIndicator = iota.hexToInt(hex,3,'B')*sign*1.00;\n out.data = {\n elongationIndicator=elongationIndicator, \n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2017-09-16 10:56:00.168+08 2018-02-28 18:32:12.212+08 2017-09-16 \N
+070c5eec-4079-4fdf-bb29-80f9ecfaa377 kst_corrosion_1 \N 腐蚀传感器 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua bit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\nstart=function()\n log.debug("start %s, ctx=", "gdyjs_lvdt_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff='' \n buff=iota.appendHexByte(buff, 0x55, endian) \n buff=iota.appendHexByte(buff, 0xaa, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x09, endian)\n buff=buff..device.uplink.props.moduleId \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x41, endian)\n buff=buff..device.props.channelId \n local sum = checkSum(buff,0,8)\n buff=iota.appendHexByte(buff, sum, endian) \n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,20000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n--55AA003B000141011105160E320C3F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000002A\n--moduleId=255 humidity": 71.4,"pressure": 100.05,"temperature": 25.73\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==118) then\n \n local rate=iota.hexToShort(hex,21,'B'); \n local current=iota.hexToShort(hex,25,'B'); \n \n out.data = {\n rate=rate,\n current=current\n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n\ncheckSum=function(data,startindex,endindex)\n local sum = 0\n for i=startindex,endindex-1 do\n if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n sum = (sum + iota.hexToByte(data,i,'B'))\n end\n end \n sum = bit:_and(sum , 0xff)\n return sum\nend \n INLINE 2017-12-06 11:41:59.076+08 2018-03-17 13:36:33.361+08 2017-12-06 \N
+8eddc2aa-c465-4548-ad8a-c9f9b34c318c mk_inclination_2 \N 双轴倾角 1.0 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca f c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, ctx=%s", "mk_inclination_2.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--AA01051003EB03EB1111\n--"xDegree": 1.003,\n--"yDegree": 1.003\n local out={\n data ={},\n result = {}\n }\n log.debug("recv %s, ctx=%s", "mk_inclination_2.lua",data)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local moduleNo = iota.hexToByte(hex,1,'B')\n \n local modulenumber= tonumber(device.props.moduleId)\n local valCmd = iota.hexToByte(hex,3,'B') \n if valCmd == 0x10 and moduleNo==modulenumber then\n \n local xDegree = iota.hexToShort(hex,4,'B') / 1000.000\n local yDegree = iota.hexToShort(hex,6,'B') / 1000.000\n \n out.data = { \n xDegree = xDegree,\n yDegree = yDegree\n } \n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_inclination_2.lua",json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = 1001, msg = "Is not validated"}\n end\n else\n out.result = {code = errcode, msg = errormsg}\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_inclination_2.lua",json.encode(out))\n ctx:notify(resultData)\n end\n \nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n --iota.checkPlusSum16\n return true\n--crc\nend\n\n\n\n INLINE 2018-01-08 11:07:50.981+08 2018-02-28 18:32:12.213+08 2018-01-08 \N
+97f2de59-d075-4c34-97cf-acd1359ee65a anxin_idau_cloudvibr \N 提取云振动i文件解析 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start=function()\n log.debug("fs_idau_cloudvibrate : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n log.debug("fs_idau_cloudvibrate : recvd =%s", json.encode(data))\n if data ~=nil then\n if data.type == "idau/file" then \n if data.ext==".dat" then\n --log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n ParseFileDat(data.payload)\n else\n log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n end\n else\n log.error("fs_idau_cloudvibrate : content type is not file, error recvd type is %s", data.type)\n end\n else\n log.error("fs_idau_cloudvibrate : recvd content is nil")\n end\nend\n\n\nfunction ParseFileDat(dathex)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'B') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n log.debug("fs_idau_cloudvibrate deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n local floatcount = (string.len(dathex)/2-40)/4\n log.debug("fs_idau_cloudvibrate begin parse")\n local vols = {}\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n end\n log.debug("fs_idau_cloudvibrate finish parse")\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n samplefreq=samplefreq,\n filterfreq=filterfreq,\n amplification=gainamplifier,\n triggermode=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n }\n table.insert(out.data,rst)\n log.debug("fs_idau_cloudvibrate cloudvibrate=%s",json.encode(out))\n ctx:notify(json.encode(out))\n else\n log.debug("fs_idau_cloudvibrate not found device module=%s channel=%s",deviceId,channel)\n end\nend\n\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n --log.debug("anxin_file_transfer search device module=%s channel=%s",moduleid,channel)\n if device.dnlinks ~= nil then\n if tostring(device.uplink.props.module) == tostring(moduleid) then\n local subdevices = device.dnlinks[1].devices \n for i,subdevice in pairs(subdevices) do\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n --log.debug("anxin_file_transfer search done. module=%s channel=%s",subdevice.uplink.props.module,subdevice.uplink.props.channel)\n return subdevice\n end \n end\n end\n log.debug("fs_idau_cloudvibrate has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("fs_idau_cloudvibrate has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n INLINE 2018-05-22 14:43:13.993+08 2018-05-23 14:59:14.785+08 2018-05-22 \N
+2cf8a814-f993-4420-8aa3-7fa891995667 mk_windSpeed_1 \N 风速 1.0 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca f c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, ctx=%s", "mk_windSpeed_1.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--AA01094a03EB0000000000000000\n--"windSpeed": 100.3\n local out={\n data ={},\n result = {}\n }\n log.debug("recv %s, ctx=%s", "mk_windSpeed_1.lua",data)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local moduleNo = iota.hexToByte(hex,1,'B')\n \n local modulenumber= tonumber(device.props.moduleId)\n local valCmd = iota.hexToByte(hex,3,'B') \n if valCmd == 0x4a and moduleNo==modulenumber then\n local windSpeed = iota.hexToShort(hex,4,'B') / 10.0\n out.data = { \n windSpeed=windSpeed\n }\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_windSpeed_1.lua",json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = 1001, msg = "Is not validated"}\n end\n else\n out.result = {code = errcode, msg = errormsg}\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_windSpeed_1.lua",json.encode(out))\n ctx:notify(resultData)\n end\n \nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n --iota.checkPlusSum16\n return true\n--crc\nend\n\n\n\n INLINE 2018-01-08 11:42:09.762+08 2019-04-26 14:26:20.767+08 2018-01-08 \N
+6026c019-d4d7-4a8e-969e-03ca957ba814 yf_laser_9505 \N 北京亚飞激光测距协议 1.0 6414b423-5567-4672-ae65-db92b076e8e8 6414b423-5567-4672-ae65-db92b076e8e8 f 6414b423-5567-4672-ae65-db92b076e8e8 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, ctx=", "yf_laser_9505.lua",json.encode(device))\n local endian = 'B'\n local buff='' -- 2: 类型=1\n local buffer ={}\n buff = iota.appendHexByte(buff, 0x3a, endian)\n table.insert(buffer,0x3a)\n buff = iota.appendHexByte(buff, device.props.moduleId, endian)\n table.insert(buffer,device.props.moduleId)\n buff = iota.appendHexByte(buff, 0x05, endian)\n table.insert(buffer,0x05)\n buff = iota.appendHexByte(buff, 0x00, endian)\n table.insert(buffer,0x00)\n local byte = CheckPlusSum(buffer, 1, 4)\n buff = buff..string.format("%02X",byte) --crcsum\n buff = iota.appendHexByte(buff, 0x0d, endian)\n buff = iota.appendHexByte(buff, 0x0a, endian)\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n--3a0105010204000905550d0a moduleId=1\n--"length": 12.409500000000001\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local Data ={}\n local resp = ""\n local len = Calculation(hex)\n out.data = {\n length = len\n }\n else\n message = 'Invalid Msg, len='..string.len(hex)\n out.result = {code = errcode, msg = message}\n end\n return json.encode(out)\nend\n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 12 then \n errormsg = 'Data is nil or Length not right'\n errcode = 1001\n return false\n elseif iota.hexToByte(data,0,'B') ~= 0x3a or iota.hexToByte(data,10,'B') ~= 0x0d or iota.hexToByte(data,11,'B') ~= 0x0a then\n errormsg = 'Data is Invalid'\n errcode = 1001\n return false\n else \n return true\n end\n --iota.checkPlusSum16\n\n return true\n--crc\nend\n\nfunction CheckPlusSum(package, startIndex, endIndex)\n local sum = 0\n for i = startIndex, endIndex do\n sum = (sum + package[i]) % 0xffff\n end \n local result = sum --& 0xff\n return result\nend\n\n\nfunction Calculation(data)\n local len = 0\n for i=0, string.len(data)/2 -1 do\n if i>=3 and i<9 then\n if i == 3 then \n len = len + tonumber(iota.hexToByte(data,i,'B') * 10)\n elseif i == 4 then\n len = len + tonumber(iota.hexToByte(data,i,'B'))\n elseif i == 5 then\n len = len + tonumber(iota.hexToByte(data,i,'B') * 0.1)\n elseif i == 6 then\n len = len + tonumber(iota.hexToByte(data,i,'B') * 0.01)\n elseif i == 7 then \n len = len + tonumber(iota.hexToByte(data,i,'B') * 0.001)\n else \n len = len + tonumber(iota.hexToByte(data,i,'B') * 0.0001)\n end\n end\n end\n return len \nend INLINE 2017-08-24 19:26:49.021+08 2018-02-28 18:32:12.213+08 2017-08-24 \N
+c3ff71d9-c748-4bb8-a264-c8c2ce35c061 jcj_temp_1138 \N 北京九纯健温度协议 1.0 ed254182-aeaf-4f3c-9ee6-480154f64cae ed254182-aeaf-4f3c-9ee6-480154f64cae f ed254182-aeaf-4f3c-9ee6-480154f64cae Lua start=function()\n log.debug("start %s, ctx=", "jcj_temp_1155.lua",json.encode(device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 1: 模块号 \n buff=iota.appendHexByte(buff, 4, endian) -- 2: 指令: 0x04 = 采集\n \tlocal channelNo = 2*(tonumber(device.props.channelId) - 1)\n buff=iota.appendHexWord(buff, channelNo, endian) \n buff=iota.appendHexWord(buff, 1, endian) -- 3: 类型=1\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 4: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n --print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)/2==7) then\n -- 模块 功能 数据长度 温度 CRC\n -- 1 1 1 2 2\n -- 01040203e8b98e\n --print("parsing data", hex)\n \n local temp = iota.hexToShort(hex,3,'B')/10.0;\n out.data = {\n temp=temp, \n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2017-09-29 14:56:57.987+08 2018-02-28 18:32:12.215+08 2017-09-29 \N
+03ad066f-654d-4ca0-be8d-5260028f35e5 jitai_degree_1890 \N 1.0 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 f d3f1aa63-8397-45a4-af26-15a0f91d1e13 Lua --// 04 项目资料/2018-03/南京基泰集成箱设备协议/GT-MI600倾角仪.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "jitai_1890", device.props.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jitai_1890 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jitai_1890 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\t\n\t\tlog.debug("jitai_1890 moduleNo=%s interface module=%s, property moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n\t\tbuff=iota.appendHexByte(buff, 0xf9, endian) \n buff=iota.appendHexByte(buff, 0xf9, endian) \n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号 485接口获取\n\t\tlog.debug("jitai_1890 发送采集命令=%s",buff)\n ok,resp=ctx:ssend(buff,15000)\n\t\t\n local result='{}'\n if ok then\n result = unmarshall(resp,tostring(moduleNo))\n \t\tlog.debug("jitai_1890 result=%s",result)\n else\n log.debug("jitai_1890 SSend error!")\n end\n ctx:done(result)\nend\n\n--F5F501\n--moduleId=1\n--15028765 \n\nunmarshall=function(hex,module_str)\n\tlog.debug("jitai_1890 收到数据=%s",hex)\n local out={\n data ={},\n result = {}\n }\n\tlocal xDegree\n\tlocal yDegree\n\t\n local ErrorCode = IsValid(hex,module_str)\n if ErrorCode then \n local index_x=string.sub(hex,3,3)\n local str_num_x = string.sub(hex,4,8)\n local num_x=tonumber(str_num_x)\n \tif index_x=="8" then\n \t\tnum_x=-1 * num_x\n \tend\n \n \n\t\tlocal num_y\n if string.len(hex)/2==7 then\n \t\tlocal index_y=string.sub(hex,9,9)\n \tlocal str_num_y = string.sub(hex,10,14)\n \t num_y=tonumber(str_num_y)\n \t\tif index_y=="8" then\n\t\t\t\tnum_y=-1 * num_y\n\t\t\tend\t\t\t\n\t\tend\n\t\n\t\tlocal K1 = device.props.K1\n\t\tlocal K2 = device.props.K2\n\t\tlocal K3 = device.props.K3\n\t\tlocal Fo = device.props.Fo\n\t\tlog.debug("jitai_1890 公式参数=%s,%s,%s,%s",K1,K2,K3,Fo)\n\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil then\n\t\t\tlog.debug("jitai_1890 公式参数有nil")\n\t\telse\n\t\t\tlocal Fi=num_x --经过厂家确认 公式带入的是模数\n\t\t\txDegree = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)\n\t\t\txDegree=string.format("%0.2f",xDegree)\n\t\t\tif num_y~=nil then\n\t\t\t\tFi=num_y\n\t\t\t\tyDegree = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)\n \t\tyDegree=string.format("%0.2f",yDegree)\n\t\t\t\tlog.debug("jitai_1890 qr yDegree=%s",yDegree)\n\t\t\tend\n\t\tend \t\t\t\t\n out.data = {\n anglex=tonumber(xDegree),\n angley=tonumber(yDegree)\n \t\t\t }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,module_str_check)\n log.debug('jitai_1890:开始校验数据%s',data)\n if data == nil or (string.len(data)/2 ~=4 and string.len(data)/2 ~=7) then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if tonumber(module_str_check)~= tonumber(string.sub(data,1,2)) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug("jitai_1890 模块错误 module_str_check=%s ,tostring(string.sub(data,1,2)=%s",module_str_check,string.sub(data,1,2))\n return false\n end\n log.debug('jitai_1890:数据校验通过')\n return true\n--crc\nend\n INLINE 2018-11-06 19:33:02.495+08 2018-11-06 21:10:46.527+08 2018-11-06 \N
+092af94e-0a30-40bc-8f2b-c5eceea24d6a mk_votage_1 \N 电压 1.0 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca f c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, ctx=%s", "mk_votage_1.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--AA01094300EB0000000000000000\n--"votage": 235\n local out={\n data ={},\n result = {}\n }\n log.debug("recv %s, ctx=%s", "mk_votage_1.lua",data)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local moduleNo = iota.hexToByte(hex,1,'B')\n \n local modulenumber= tonumber(device.props.moduleId)\n local valCmd = iota.hexToByte(hex,3,'B') \n if valCmd == 0x43 and moduleNo==modulenumber then\n \n local votage = iota.hexToShort(hex,4,'B') \n out.data = { \n votage=votage\n }\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_votage_1.lua",json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = 1001, msg = "Is not validated"}\n end\n else\n out.result = {code = errcode, msg = errormsg}\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_votage_1.lua",json.encode(out))\n ctx:notify(resultData)\n end\n \nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n --iota.checkPlusSum16\n return true\n--crc\nend\n\n\n\n INLINE 2018-01-08 11:35:42.847+08 2018-02-28 18:32:12.216+08 2018-01-08 \N
+dce56237-048b-4d44-a741-069f30b89674 mlsensor_Liquid_1917 \N 上海蒙朗液位计 1.0 53eab53b-1a19-4820-b536-c5c56fda6e6f 53eab53b-1a19-4820-b536-c5c56fda6e6f f 53eab53b-1a19-4820-b536-c5c56fda6e6f Lua --//01 协议文档/6月第5周/上海蒙朗物联网科技有限公司/MP3530液位变送器(RS485).pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "mlsensor_Liquid_1917.lua", device.props.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 3: 模块号\n buff=iota.appendHexByte(buff, 3, endian) -- 4: 指令: 0x01 = 采集\n buff=iota.appendHexWord(buff, 4, endian) \n buff=iota.appendHexWord(buff, 1, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 5: CRC\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n \n--0103021388B512 moduleId=1\n--pressure": 500\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex)\n if ErrorCode then \n \n local Pressure =iota.hexToShort(hex,3,'B')/10.0; \n out.data = {\n pressure=Pressure\n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\n\nIsValid=function(data)\n log.debug('开始校验数据')\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('数据校验通过')\n return true\n--crc\nend\n \n\n\n \n\n INLINE 2017-09-06 18:56:06.402+08 2018-02-28 18:32:12.216+08 2017-09-06 \N
+f6817d17-36f6-41ce-ad3f-9103b236586a shjy_incline_3 \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "shjy_incline_3.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("shjy_incline_3 设备模块 m=%s ",moduleNo)\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) -- 读取9个寄存器\n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("shjy_incline_3,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '采集超时'} \n\t ctx:done(errout)\n\tend\nend\n--010300020004e5c9\n--0103085046000023200000bd61\nunmarshall=function(hex,moduleNoStr)\n log.debug("shjy_incline_3 [m=%s], recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\t \n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n local rangeStr=device.props.ranges\n local rangeArray=Split(rangeStr,',')\n log.debug("shjy_incline_3 [m=%s],范围=%s,%s",moduleNoStr,rangeArray[1],rangeArray[2])\n local anglex =iota.hexToUInt(hex,3,'L')*0.001 - rangeArray[2]\n\t\tlocal angley =iota.hexToUInt(hex,7,'L')*0.001 - rangeArray[2]\n\t\t\n --log.debug("shjy_incline_3 [m=%s],temperature=%s ",moduleNoStr,temperature)\n out.data = { \n anglex=tonumber(string.format("%0.3f",anglex)), \n\t\t\tangley=tonumber(string.format("%0.3f",angley)) \n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("shjy_incline_3 [m=%s],data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = string.format('数据长度无效=%s≠13',string.len(data)/2)\n errcode = 1002\n return false\n end\n \n local dataModule=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataModule) then\t\n errormsg = string.format('模块号无效=%s≠[%s]',dataModule,moduleCheck)\n errcode = 1003\n return false\n end\n return true\n--crc\nend\n\n \n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n INLINE 2018-12-24 11:00:38.354+08 2018-12-25 09:25:07.15+08 2018-12-24 \N
+4551eefd-3b2e-42e4-b314-f27e5157eecc rpkj_level_1 \N 上海融频电子科技有限公司 1.0 ef70d798-67c0-4772-9639-3d9b805f5941 ef70d798-67c0-4772-9639-3d9b805f5941 f ef70d798-67c0-4772-9639-3d9b805f5941 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "rpkj_level_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("rpkj_level_1 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("rpkj_level_1 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 4, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 2, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n -- 01040000000271cb\n log.debug("rpkj_level_1,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t log.debug("rpkj_level_1 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("rpkj_level_1 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n --01040442C800006E02 \n --"level": 100\n local level =iota.hexToFloat(hex,3,'B');\n \n out.data = { \n level=level \n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("rpkj_level_1 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2018-02-05 14:52:38.736+08 2018-05-17 14:12:06.154+08 2018-02-05 \N
+da2dc742-e8d6-4906-9581-128b6b5f3198 sxcg_inclination_2 \N 倾斜传感器通信协议 1.0 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 f 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "sxcg_inclination_2.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("sxcg_inclination_2 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("sxcg_inclination_2 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) -- 角度\n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("sxcg_inclination_2,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t log.debug("sxcg_inclination_2 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n--0503040001E422252A ---2.95\nunmarshall=function(hex,moduleNoStr)\n log.debug("sxcg_inclination_2 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local anglex=(iota.hexToInt(hex,3,'B')-125000)/360\n\t\t\n --log.debug("sxcg_inclination_2 m=%s,anglex=%s ",moduleNoStr,anglex)\n out.data = { \n\t\t\tanglex=anglex\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("sxcg_inclination_2 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2018-02-06 17:14:35.343+08 2018-08-15 10:59:17.266+08 2018-08-15 \N
+71f0c6f5-2830-448a-8bf4-d4992c8cee9a Wind_OSL_9201 \N 超声风速风向仪协议解析V2.0 1.0 9f1dab8d-8776-4895-af81-ece24218042c 9f1dab8d-8776-4895-af81-ece24218042c f 9f1dab8d-8776-4895-af81-ece24218042c Lua --// Documents/PMO/02 产品协议/外购产品协议/协议解析V2.0.pdf\n--[[\n协议号: 9201;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n log.debug("load script %s, moduleId=%s", "Wind_OSL_9201.lua", device.props.moduleId or "[nil]")\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序 02 04 10 04 00 08 b4 fe\n\t-- 模块号\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE); -- 1: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x04, BE);\n\tbuff=iota.appendHexByte(buff, 0x10, BE);-- 2: 读取寄存器地址\n buff=iota.appendHexByte(buff, 0x04, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n buff=iota.appendHexByte(buff, 0x08, BE);-- 3: \t读取寄存器数量\t\n\tlocal temp=buff;--交换CRC16高地位\n\ttemp=iota.appendHexCrc(temp, 'B' ,0) --CRC16\n\tlocal crcH=string.sub(temp,-2,-1)\n\tlocal crcL=string.sub(temp,-4,-3)\n\tbuff=buff..crcH;\n\tbuff=buff..crcL;\t\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 020410a5253db90943438600004190c7b0c0b7cd90 \n--原始数据 风速0.09 风向268.07 moduleId=2\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal windSpeed = Bytes2Float(data, 3);\n\t\tlocal windDirection= Bytes2Float(data,7);\t\t\t\n\t\t\n\t\tout.data = {\n\t\twindSpeed=windSpeed,\n\t\twindDirection=windDirection\n\t\t};\n else\n out.result = {code=errcode,msg=errormsg} \n\tend\n\treturn json.encode(out)\nend\n\nIsValid=function(data)\n log.debug('开始校验数据')\n if data == nil or string.len(data)/2 ~= 21 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x04 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('数据校验通过')\n return true\n--crc\nend\n\n\n\nfunction Bytes2Float(data,index)\n index=index*2\n\tdataStr1=string.sub(data,index+1,index+2);\n\tdataStr2=string.sub(data,index+3,index+4)\n\tdataStr3=string.sub(data,index+5,index+6)\n\tdataStr4=string.sub(data,index+7,index+8)\n\tdataStr=dataStr3..dataStr4\n\tdataStr=dataStr..dataStr1\n\tdataStr=dataStr..dataStr2\n --log.debug(string.format('转换后的字节: %s', dataStr));\n data1=iota.hexToFloat(dataStr, 0,'B');\n -- log.debug(string.format('转换的数: %s', data1));\n\treturn data1;\nend INLINE 2017-09-14 20:43:31.514+08 2018-02-28 18:32:12.216+08 2017-09-14 \N
+752b624d-000c-4f53-adfb-e6d12b8640af blm_tempHumi_1104 \N 北京宝力马传感技术有限公司 1.0 59924975-bf9a-49ef-8bb4-239e5eb716f4 59924975-bf9a-49ef-8bb4-239e5eb716f4 f 59924975-bf9a-49ef-8bb4-239e5eb716f4 Lua --// PMO/02 产品协议/SavoirCloud/01 协议/4月第3周/北京宝力马传感技术有限公司/通讯协议WS302M2A-5温湿度变送器使用说明书V3.0.1(中英)-华为专用-北京宝力马传感技术有限公司.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "blm_tempHumi_1104", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("blm_tempHumi_1104 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("blm_tempHumi_1104 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("blm_tempHumi_1104 SSend error!")\n end\n ctx:done(result)\nend\n\n--1203040025001908f3\n--moduleId=18 \n--"humidity": 2.5,\n--"temp": 3.7\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local temp = iota.hexToShort(hex,3,'B')/10.0\n local humidity = iota.hexToShort(hex,5,'B')/10.0\n \n out.data = {\n\t\t\ttemp=temp,\n\t\t\thumidity=humidity\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('blm_tempHumi_1104 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('blm_tempHumi_1104 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2017-12-13 12:00:14.021+08 2018-03-30 10:04:44.954+08 2017-12-11 \N
+aa7da275-9e58-4b7e-8fe4-7abbcb421491 sxcg_3400 \N 采集仪协议 1.0 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 f 8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12 Lua --//20180809新增项目资料提交\\上海隼星--边坡监测--康飞\\T440振弦采集仪接口协议.docx\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]]\n--32个通道\n--测试536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3355494e2056313d322e3334352056323d302e3030332049333d32302e3030302049343d302e3030302056353d302e39382049363d312e35362049373d322e3134352056383d312e323030201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n--24个通道\n--536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\nstart = function()\n -- log.debug("load script %s, moduleId=%s", "sxcg_3400.lua", device.props.moduleId or "[nil]")\n -- log.debug("sxcg_3400:".."LUA: ctx is =%s", json.encode(device))\n ok, resp = ctx:asend('01020304')\n -- log.debug("sxcg_3400:".."测试下发01020304正常")\nend\n\nonData =\n function(hex)\n log.debug('sxcg_3400收到数据=%s', hex)\n log.debug('sxcg_3400 device =%s', json.encode(device))\n log.debug('sxcg_3400subdevices data is =%s', json.encode(device.dnlinks[1].devices))\n\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n local ModuleChar = 'M=' --振弦\n local DigChar = 'Di' --测斜\n local VoltageChar = 'V=' --电压\n local CurrentChar = 'I=' --电流\n local WaterChar = 'Wa' --水文\n local ResistanceChar = 'R=' --电阻(差阻)\n\n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n sData = toStrHex(hex)\n log.debug('sxcg_3400:sData是 %s', sData)\n --获取子字符串表\n local allResponse = Split(sData, '\\n')\n --移除表内的“”和nil\n for k, v in ipairs(allResponse) do\n if v == '' or v == nil then\n table.remove(allResponse, k)\n log.debug('sxcg_3400:' .. '表内的“”和nil 移除元素为 ' .. tostring(allResponse[k]))\n end\n end\n\n --分析单类数据\n for k, v in ipairs(allResponse) do\n local singleData = Split(v, ' ')\n --移除单类数据中的空\n for kk, vv in ipairs(singleData) do\n if vv == '' or vv == nil then\n --print("移除元素为 ",singleData[kk])\n table.remove(singleData, kk)\n end\n end\n\n if k > 1 then\n local temp1 = singleData[2 + 1]\n local moudleStr = string.sub(singleData[2 + 1], 2, 2)\n local moduleNo = tonumber(moudleStr)\n --解析单条数据\n for kkk, vvv in ipairs(singleData) do\n log.debug('sxcg_3400:遍历解析单条数据 键=' .. tostring(kkk) .. ' 值=' .. tostring(vvv))\n\n local type_sensor = string.sub(string.gsub(singleData[kkk], '%d', ''), 1, 2)\n log.debug('sxcg_3400: type_sensor=' .. type_sensor)\n if string.len(type_sensor) >= 2 then\n --频率\n if type_sensor == ModuleChar then\n --local length = string.len(singleData[kkk]) - 3\n local tempLength = string.len(singleData[kkk + 1]) - 3\n local channelNo = tonumber(string.sub(singleData[kkk], 2, 2), 16)\n local Module = tonumber(string.sub(singleData[kkk], 4, -1))\n local tempData = string.sub(singleData[kkk + 1], 4, 4 + tempLength)\n local Frequency = math.sqrt(Module * 1000)\n local Temp\n local Phy\n if IsNumberic(tempData) then\n Temp = tonumber(tempData)\n else\n Temp = 0\n end\n --获取通道设备deviceId\n local childDevice = getDeviceInfo(moduleNo, channelNo)\n\n local deviceId\n if childDevice ~= nil then\n deviceId = childDevice.id\n log.debug('sxcg_3400:(振弦)子设备 模块%s,通道%s原型childDevice=%s', moduleNo, channelNo, json.encode(childDevice))\n log.debug('sxcg_3400:(振弦)子设备 模块%s,通道%s deviceId=%s ', moduleNo, channelNo, tostring(deviceId))\n local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local To = childDevice.uplink.capabilities[1].formula.props.To\n local Po = childDevice.uplink.capabilities[1].formula.props.Po\n log.debug('sxcg_3400:振弦模块: 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n Phy = nil\n log.debug('sxcg_3400 模块%s,通道%s 当前的Frequency是:%s,%s', moduleNo, channelNo, Frequency, Temp)\n else\n log.debug('sxcg_3400 当前的Frequency是:%s,%s', Frequency, Temp)\n local Fi = Module --经过厂家确认 公式带入的是模数\n Phy = K1 * Fi - (K1 * Fo) + Kt * (Temp - To) + Po\n log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n end\n elseif childDevice.uplink.capabilities[1].formula.metaid == 'a6bc41f8-f061-4714-acd6-7b839a4559fc' then\n --角度公式\n log.debug('sxcg_3400 振弦转角度 当前的Frequency是:%s,%s', Frequency, Temp)\n local Fi = Module --经过厂家确认 公式带入的是模数\n Phy = (Fi * 10 - 125000) / 3600\n log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n else\n log.debug('sxcg_3400 模块%s,通道%s当前无匹配公式', moduleNo, channelNo)\n end\n else\n log.debug('sxcg_3400:(振弦)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(channelNo))\n end\n\n --log.debug("sxcg_3400:振弦模块:公式%s",device.formula)\n\n local data1 = {\n data = {\n frequency = tonumber(string.format('%0.3f', Frequency)),\n temperature = tonumber(string.format('%0.2f', Temp)),\n physicalvalue = tonumber(string.format('%0.3f', Phy))\n },\n device = deviceId,\n type = 1\n }\n log.debug('sxcg_3400:(振弦) Phy结果=%s', Phy)\n table.insert(out.data, data1)\n end\n\n --电压\n if type_sensor == VoltageChar then\n local length = string.len(singleData[kkk]) - 3\n local channelNo = tonumber(string.sub(singleData[kkk], 2, 2), 16)\n local Voltage = tonumber(string.sub(singleData[kkk], 4, -1))\n local Phy\n --获取通道设备deviceId\n local childDevice = getDeviceInfo(moduleNo, channelNo)\n local deviceId\n if childDevice ~= nil then\n deviceId = childDevice.id\n log.debug('sxcg_3400:(电压)子设备原形childDevice=%s', json.encode(childDevice))\n log.debug('sxcg_3400:(电压)子设备deviceId: ' .. tostring(deviceId))\n local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local To = childDevice.uplink.capabilities[1].formula.props.To\n local Po = childDevice.uplink.capabilities[1].formula.props.Po\n log.debug('sxcg_3400:电压模块: 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n Phy = nil\n log.debug('sxcg_3400 模块%s,通道%s 当前的Voltage=%s', moduleNo, channelNo, Voltage)\n else\n log.debug('sxcg_3400 当前的Voltage=%s', Voltage)\n local Fi = Voltage\n Phy = K1 * Fi - (K1 * Fo) + Po\n log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n end\n end\n else\n log.debug('sxcg_3400:(电压)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(channelNo))\n end\n\n local data1 = {\n data = {\n voltage = Voltage,\n physicalvalue = Phy\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n end\n\n --电流\n if type_sensor == CurrentChar then\n local length = string.len(singleData[kkk]) - 3\n local channelNo = tonumber(string.sub(singleData[kkk], 2, 2), 16)\n local Current = tonumber(string.sub(singleData[kkk], 4, -1))\n local Phy\n --获取通道设备deviceId\n local childDevice = getDeviceInfo(moduleNo, channelNo)\n local deviceId\n if childDevice ~= nil then\n deviceId = childDevice.id\n log.debug('sxcg_3400:(电流)子设备原形childDevice=%s', json.encode(childDevice))\n log.debug('sxcg_3400:(电流)子设备deviceId: ' .. tostring(deviceId))\n local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local To = childDevice.uplink.capabilities[1].formula.props.To\n local Po = childDevice.uplink.capabilities[1].formula.props.Po\n log.debug('sxcg_3400:电流模块: 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n Phy = nil\n log.debug('sxcg_3400 模块%s,通道%s 当前的Current=%s', moduleNo, channelNo, Current)\n else\n log.debug('sxcg_3400 当前的Current=%s', Current)\n local Fi = Current\n Phy = K1 * Fi - (K1 * Fo) + Po\n log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n end\n end\n else\n log.debug('sxcg_3400:(电流)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(channelNo))\n end\n\n local data1 = {\n data = {\n current = Current,\n physicalvalue = Phy\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n end\n\n --水文\n if type_sensor == WaterChar then\n local Phy\n if string.sub(singleData[kkk], 1, 6) == 'Water1' then\n local waterData = GetSWData(singleData, kkk)\n\n for i = 1, 8, 1 do\n --获取通道设备deviceId\n local childDevice = getDeviceInfo(moduleNo, i)\n --\n local deviceId\n if childDevice ~= nil then\n deviceId = childDevice.id\n log.debug('sxcg_3400:(水文)子设备原形childDevice=%s', json.encode(childDevice))\n log.debug('sxcg_3400:(水文)子设备deviceId: ' .. tostring(deviceId))\n local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local To = childDevice.uplink.capabilities[1].formula.props.To\n local Po = childDevice.uplink.capabilities[1].formula.props.Po\n log.debug('sxcg_3400:电流模块: 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n Phy = nil\n log.debug('sxcg_3400 模块%s,通道%s 当前的Frequency是:%s,%s', moduleNo, channelNo, Frequency, Temp)\n else\n log.debug('sxcg_3400 当前的Frequency是:%s,%s', Frequency, Temp)\n local Fi = waterData[i]\n Phy = K1 * Fi - (K1 * Fo) + Kt * (Temp - To) + Po\n log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n end\n end\n else\n log.debug('sxcg_3400:(水文)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(i))\n end\n local data1 = {\n data = {\n waterdata = waterData[i],\n physicalvalue = Phy\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n end\n\n --测斜\n if type_sensor == DigChar then\n local Phy\n local Temp\n if (string.sub(singleData[kkk], 1, 3) .. string.sub(singleData[kkk], 5, 5)) == 'Dig=' then\n local channelNo = tonumber(string.sub(singleData[kkk], 4, 4), 16)\n local Inclination = tonumber(string.sub(singleData[kkk], 6, -1))\n --获取通道设备deviceId\n local childDevice = getDeviceInfo(moduleNo, channelNo)\n local deviceId\n if childDevice ~= nil then\n deviceId = childDevice.id\n log.debug('sxcg_3400:(测斜)子设备原形childDevice=%s', json.encode(childDevice))\n log.debug('sxcg_3400:(测斜)子设备deviceId: ' .. tostring(deviceId))\n local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local To = childDevice.uplink.capabilities[1].formula.props.To\n local Po = childDevice.uplink.capabilities[1].formula.props.Po\n log.debug('sxcg_3400:电流模块: 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n Phy = nil\n log.debug('sxcg_3400 模块%s,通道%s 当前的Frequency是:%s,%s', moduleNo, channelNo, Frequency, Temp)\n else\n log.debug('sxcg_3400 当前的Frequency是:%s,%s', Frequency, Temp)\n local Fi = Inclination\n Phy = K1 * Fi - (K1 * Fo) + Kt * (Temp - To) + Po\n log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n end\n end\n else\n log.debug('sxcg_3400:(测斜)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(channelNo))\n end\n\n local data1 = {\n data = {\n inclination = Inclination,\n temperature = Temp,\n physicalvalue = Phy\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n end\n end\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n log.debug('sxcg_3400resultData=%s,hex=%s', json.encode(out), hex)\n ctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo =\n function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("sxcg_3400 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug('sxcg_3400 查询传感器的下行设备 json.encode(child.dnlinks)=%s,=={}?=%s', json.encode(child.dnlinks), json.encode(child.dnlinks) == '{}')\n --log.debug("sxcg_3400:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n --log.debug("sxcg_3400 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n else\n --log.debug("sxcg_3400 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.channelId\n end\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tostring(channelStrCheck) == tostring(channelNoId) then\n log.debug('sxcg_3400: m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('sxcg_3400: m=%s,c=%s subdevices是nil', moduleNoId, channelNoId)\n return nil\n end\nend\n\nIsValid = function(alldata)\n log.debug('sxcg_3400:' .. '校验开始')\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n return false\n end\n\n local length = getIndex(alldata)\n local data = string.sub(alldata, 1, length * 2)\n --log.debug("data:"..data)\n local plu16 = {}\n plu16[0] = string.sub(data, -8, -7)\n plu16[1] = string.sub(data, -6, -5)\n --local plusSum16Hi, plusSum16Lo = iota.hexCheckPlusSum16(data, 0, length - 4)\n -- log.debug("sxcg_3400:".."plu16[0]是:"..plu16[0])\n -- log.debug("sxcg_3400:".."plu16[1]是:"..plu16[1])\n -- log.debug("sxcg_3400:".."plusSum16Hi是:"..tostring(plusSum16Hi))\n -- log.debug("sxcg_3400:".."plusSum16Lo是:"..tostring(plusSum16Lo))\n --if tonumber(plu16[0],16)~=plusSum16Hi or tonumber(plu16[1],16)~=plusSum16Lo then\n -- errormsg = 'checkPlusSum16 is false'\n -- errcode = 1004\n -- return false\n -- end\n\n log.debug('sxcg_3400:' .. '校验通过')\n return true\nend\n\ngetIndex = function(data) --用于IsValid\n local len = string.len(data) / 2\n for n = 1, len do\n local value = string.sub(data, 2 * n - 1, 2 * n)\n if value == '0a' then\n return n\n end\n end\n return 0\nend\n\n--字符串ascii->字符\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend\n\nGetSWData = function(sData, j)\n local SW = {}\n\n local Water1 = tonumber(string.sub(sData[j], 8, -1))\n local Base1 = tonumber(string.sub(sData[j + 1], 7, -1))\n\n local Water2 = tonumber(string.sub(sData[j + 2], 8, -1))\n local Base2 = tonumber(string.sub(sData[j + 3], 7, -1))\n\n local MaxWinSpeed = tonumber(string.sub(sData[j + 4], 13, -1))\n local Direction = tonumber(string.sub(sData[j + 5], 11, -1))\n\n local AverWinSpeed = tonumber(string.sub(sData[j + 6], 14, -1))\n local RealTImeWinSpeed = tonumber(string.sub(sData[j + 7], 18, -1))\n\n local NowDirection = tonumber(string.sub(sData[j + 8], 11, -1))\n local AccRain = tonumber(string.sub(sData[j + 9], 9, -1))\n\n SW[1] = Water1 / 100 + Base1\n SW[2] = Water2 / 100 + Base2\n SW[3] = MaxWinSpeed\n SW[4] = Direction\n SW[5] = AverWinSpeed\n SW[6] = RealTImeWinSpeed\n SW[7] = NowDirection\n SW[8] = AccRain\n return SW\nend INLINE 2018-08-15 14:10:46.816+08 2019-03-05 10:54:09.229+08 2018-08-15 \N
+878d994c-6a4d-4bf2-81f2-d9ab291633d6 ytc_Weather_2410 \N 1.0 b8127c53-f372-4ef5-bad6-8520cde9e94f b8127c53-f372-4ef5-bad6-8520cde9e94f f b8127c53-f372-4ef5-bad6-8520cde9e94f Lua --//04 项目资料/2018-01/武汉云传通侧气象监测项目/YC-M800数据采集仪通信协议(V1.3).doc\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "ytc_Weather_2410", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n\t\n\tlocal moduleNo=tonumber(device.props.moduleId) \n\tlocal buff=''\n\tbuff=iota.appendHexByte(buff, moduleNo, endian) \n\tbuff=iota.appendHexByte(buff, 0x03, endian) \n\tbuff=iota.appendHexWord(buff, 0x00, endian) \n\tbuff=iota.appendHexWord(buff, 0x10, endian)\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)\n\tok,resp=ctx:ssend(buff,15000)\n\tlocal result='{}'\n\tif ok then\t\n\t\tlog.debug("ytc_Weather_2410:模块%s的采集仪数据接收成功,开始解析",moduleNo) \n\t\tresult = unmarshall(resp,out)--解析单条数据\n\telse\n\t\tlog.debug("ytc_Weather_2410:模块%s的采集仪数据接收失败",moduleNo) \n\tend\n\t\n\t\n\t\n\t\n\t\n\t\n\t\t\n\tlog.debug('ytc_Weather_2410:result序列化')\n\tlocal resultData =json.encode(result)\n log.debug("ytc_Weather_2410:out序列化结果 : out is =%s", resultData)\n ctx:done(resultData)\nend\n\n--010320002E00C302927FFF7FFF7FFF7FFF7FFF000000000000000000000000000000008A66\n--风速值:4.6米/秒 通道1\n--风向值:195°\t\t通道2\n--雨量值:65.8\t\t通道3\n\nunmarshall=function(hex,out)\n \n\t\n\tlocal module_Str=tostring(device.props.moduleId) \n\tlocal ErrorCode = IsValid(hex,module_Str)--subModuleId,subChannelId\n\tif ErrorCode then \n \n local rawData={}\n\t for i=1,16,1 do\n\t\t local hex_data=string.sub(hex,7+4*(i-1),7+4*i-1)\n\t\t\tif string.upper(hex_data)~="7FFF" then\t\t\t\n\t\t\t\trawData[i]=iota.hexToUShort(hex_data,0,'B')\n\t\t\t\tlog.debug("ytc_Weather_2410:i=%s,hex_data=%s",i,hex_data)\n\t\t end\t\t\n\t\tend\n\t\t\n\t\t\n\n\n\t\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\t\tif subdevices ~=nil then\n\t\t \n\t\t \n\t\t\tlog.debug("ytc_Weather_2410:LUA:子设备devices : data is =%s", json.encode(subdevices))\n\t\t\tfor index,child in pairs(subdevices) do\n\t\t\t\t\n\t\t\t \n\t\t\t local moduleNo=tonumber(child.props.moduleId) \n\t\t\t local channelNo=tonumber(child.props.channelId)\n\t\t\t log.debug("ytc_Weather_2410:模块%s通道%s的deviceId是%s:",moduleNo,channelNo,tostring(child.id))\n\t\t\t \n\t\t\t local k=tonumber(child.props.K) ---转换系数 传感器决定\n\t\t\t if rawData[channelNo]~=nil then\n\t\t\t\t\tlocal phy=rawData[channelNo]*k\n\t\t\t\t\tlocal subData={\n\t\t\t\t\t\t\t\tdata ={phy=tonumber(string.format("%5.2f",phy))},\n\t\t\t\t\t\t\t\tdevice=child.id,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t}\n\t\t\t\t table.insert(out.data,subData)\t\t\n\t\t\t else\n log.debug("ytc_Weather_2410:传感器m=%s,c=%s 数据不存在",moduleNo,channelNo)\t\t\t\t \n\t\t\t end\n\t\t\t \n\t\t\tend \n\t\t\t\n\t\telse\n\t\t\tlog.debug("ytc_Weather_2410:subdevices是nil")\t\t\n\t\tend\n\t\t\n\t\t-----\t\n\t\t\n\tend\n\treturn out\nend\n\n\n\n\nIsValid=function(data,moduleId)\n log.debug('ytc_Weather_2410:模块%s开始校验数据',moduleId)\n if data == nil or string.len(data)/2 ~= 37 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('ytc_Weather_2410:模块%s数据 长度校验失败:Data is nil or invalid length',moduleId)\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1003\n errormsg = 'CMD Error Code ' \n\t\tlog.debug('ytc_Weather_2410:模块%s 数据校验CMD 失败',moduleId)\n return false\n end\n\n\tlocal moduleStr=tostring(iota.hexToByte(data,0,'B'))\n\tif moduleId~= moduleStr then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug('ytc_Weather_2410:模块%s 模块号校验失败:Invalid acq moduleId=%s',moduleId,moduleStr)\n return false\n end\n\n log.debug('ytc_Weather_2410:模块%s数据校验通过!!!',moduleId)\n return true\nend\n\n\n\n INLINE 2018-02-09 13:59:15.133+08 2018-03-05 10:56:23.038+08 2018-02-09 \N
+c54c1a0b-dc02-4aca-99d6-466858cec28a lndy_flow_1970 \N 1.0 632bb218-8da7-4d91-b83d-70879c562d74 632bb218-8da7-4d91-b83d-70879c562d74 f 632bb218-8da7-4d91-b83d-70879c562d74 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "lndy_flow_1970.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("lndy_flow_1970 设备模块 m=%s ",moduleNo)\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x09, endian) -- 读取9个寄存器\n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("lndy_flow_1970,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '采集超时'} \n\t ctx:done(errout)\n\tend\nend\n--01034c614e00bc0b3b000000000000614e00bc0c140000\nunmarshall=function(hex,moduleNoStr)\n log.debug("lndy_flow_1970 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local transientFlow =iota.hexToUShort(hex,3,'B')+iota.hexToUShort(hex,5,'B')*65536\n\t\tlocal totalFlow =iota.hexToUShort(hex,15,'B')+iota.hexToUShort(hex,17,'B')*65536\n\t\t\n log.debug("lndy_flow_1970 m=%s,temperature=%s ",moduleNoStr,temperature)\n out.data = { \n transientFlow=transientFlow, --瞬时流量 L/h\n\t\t\ttotalFlow=totalFlow/100 --累计流量 m3\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("lndy_flow_1970 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 23 then\n errormsg = string.format('数据长度无效=%s',string.len(data)/2)\n errcode = 1002\n return false\n end\n \n local dataModule=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataModule) then\t\n errormsg = string.format('模块号无效=%s[%s]',dataModule,moduleCheck)\n errcode = 1003\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2018-12-21 15:04:53.44+08 2018-12-25 10:04:18.923+08 2018-12-21 \N
+a6a4d1f0-eb42-4da0-a288-68bb5bd5a5c8 1 \N 1 1 46ba69b4-f0e6-43d1-9d74-e6af9cf8f2fd 46ba69b4-f0e6-43d1-9d74-e6af9cf8f2fd f 46ba69b4-f0e6-43d1-9d74-e6af9cf8f2fd Lua 1 INLINE 2018-05-25 17:30:59.525+08 2018-05-25 17:30:59.525+08 2018-05-25 \N
+fc1d0f8f-7951-4f77-91ad-e254bb3f2d94 http \N 1 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f 56031544-f3e0-407f-9ffa-1a54742ecfa7 Lua start=function()\n local req={\n type="http",\n url="https://www.baidu.com/",\n method="GET",\n }\n local ok,resp=ctx:ssend(req,1000)\n log.debug("res.header=%s", json.encode(resp.header))\n \n out={\n value=resp.header,\n result={},\n }\n ctx:done(json.encode(out)) \nend INLINE 2018-08-17 11:16:09.873+08 2018-08-17 11:16:09.873+08 2018-08-17 \N
+d6ee4985-7231-43a4-9593-d0088b1f370d CPF_ecc_door_report \N 1.0 a0524b8e-f69f-421e-b306-124dd37f4f1c a0524b8e-f69f-421e-b306-124dd37f4f1c f a0524b8e-f69f-421e-b306-124dd37f4f1c Lua start=function()\n \nend\n\nonData=function(data)\n --channel = device.uplink.props.channel\n log.debug("CPF_ecc_door_report data=%s %s",data, string.sub(data,1,4))\n --03020301FF\n --0302 地址,03=3通道,01=干簧管闭合=关, 00=干簧管开=门开\n if data==nil or string.len(data)~=10 or string.sub(data,1,4) ~="0302" or string.sub(data,-2) ~="ff" then\n -- invalid data.\n return\n end\n local channel = tonumber(device.props.channel) or 1 -- 1\n local scnt=tonumber(device.props.doors) or 1\n local ch = iota.hexToByte(data,2,"B") -- 1\n local ismychannel= ((ch - channel) >=0 and (ch - channel)< scnt )\n --log.debug("CPF_ecc_door_report channel=%d ch=%d,scnt=%d, mych=%s",channel,ch,scnt,ismychannel)\n -- ch: 判定是否为当前通道开门,\n if not ismychannel then\n return\n end\n -- log.debug("CPF_ecc_door_report data=%s",data)\n door=ch - channel + 1 -- 门号\n stat=iota.hexToByte(data,3,"B")\n status= stat==1 and "0" or "1" -- 反转下。\n result={\n data={\n },\n type=1\n }\n if (door==1) then\n result.data.status_d1=status\n elseif (door==2) then\n result.data.status_d2=status\n elseif (door==3) then \n result.data.status_d3=status\n end\n log.debug("CPF_ecc_door_report result=%s",json.encode(result))\n ctx:notify(json.encode(result))\n end INLINE 2019-04-26 16:34:18.774+08 2019-05-18 23:04:04.854+08 2019-04-26 \N
+d6833ba5-fa57-4983-840c-096e456ea988 chemins_PH_2703 \N 1.0 ba38de11-b347-4100-a317-9c4c4a362f91 ba38de11-b347-4100-a317-9c4c4a362f91 f ba38de11-b347-4100-a317-9c4c4a362f91 Lua -- //01 协议文档/7月第3周烟台凯米斯仪器有限公司/PHG-200系列一体式在线PH变送器用户手册.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "chemins_PH_2703", device.props.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x04, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n else\n log.debug("SSend error!")\n end\n ctx:done(result)\nend\n\n--06030800620002010100012459\n--moduleId=6\n--ph=0.98,\n--temp=25.7\n\nunmarshall=function(hex)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then \n\n local ph_temp = iota.hexToShort(hex,3,'B')\n local ph_dot = iota.hexToShort(hex,5,'B')\n\t\tlocal ph = ph_temp/(10^ph_dot)\n\t\t\n\t\tlocal temp_temp = iota.hexToShort(hex,7,'B')\n local temp_dot = iota.hexToShort(hex,9,'B')\n\t\tlocal temp = temp_temp/(10^temp_dot)\n\t\t\n \n \n out.data = {\n ph=ph,\n\t\t\ttemp=temp\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data)\n log.debug('开始校验数据')\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('数据校验通过')\n return true\n--crc\nend\n\n\t\n \n INLINE 2017-12-07 15:11:35.06+08 2018-02-28 18:32:12.217+08 2017-12-07 \N
+31484d44-4700-4d3e-87ad-19cdd440d7cd thk_inclinometer_154 \N 天海科测斜 1.0 2a9970fa-f04b-4c68-b35f-0b4ce65eecac 2a9970fa-f04b-4c68-b35f-0b4ce65eecac f 2a9970fa-f04b-4c68-b35f-0b4ce65eecac Lua start=function()\n log.debug("start %s, ctx=", "thk_inclinometer_1548.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n -- log.debug("LUA: Unmarshall: data is %s", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n -- 5cca3affaa014c00\n if string.len(hex)>16 then\n hex=string.sub(hex,1,16)\n end\n print("ack truncated as: ",hex)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local X_axis =iota.hexToShort(hex,1,'B')/1000.0\n local Y_axis =iota.hexToShort(hex,3,'B')/1000.0\n \n out.data = { --需要测试\n xDegree = X_axis,\n yDegree = Y_axis\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n --iota.checkPlusSum16\n return true\n--crc\nend\n \n INLINE 2017-11-06 11:02:43.054+08 2018-02-28 18:32:12.218+08 2017-11-06 \N
+9d569abf-b544-4bd5-907a-218ea77f580b csyituo_temphum_1137 \N 亿拓通信协议通用 1.0 78cc8a41-1d48-4575-81ea-c08479cb15d4 78cc8a41-1d48-4575-81ea-c08479cb15d4 f 78cc8a41-1d48-4575-81ea-c08479cb15d4 Lua --//01 协议文档/智慧城市/亿拓通信协议通用-静力水准仪示例(集成商通用)(1).pdf\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "csyituo_temphum_1137.lua", device.props.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0xAA, endian) \n buff=iota.appendHexByte(buff, 0x75, endian)\n buff=iota.appendHexByte(buff, 0x10, endian) -- 4: 指令: 0x01 = 采集\n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0x0e, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=buff..device.props.moduleId\n local year =tonumber(os.date("%y"),16)\n buff=iota.appendHexByte(buff, year, endian)\n local month = tonumber(os.date("%m"),16)\n buff=iota.appendHexByte(buff, month, endian)\n local day = tonumber(os.date("%d"),16)\n buff=iota.appendHexByte(buff, day, endian)\n local hour = tonumber(os.date("%H"),16)\n buff=iota.appendHexByte(buff, hour, endian)\n local min = tonumber(os.date("%M"),16)\n buff=iota.appendHexByte(buff, min, endian)\n local sec = tonumber(os.date("%S"),16)\n buff=iota.appendHexByte(buff, sec, endian)\n local xor = CheckXor(0,buff)\n buff=iota.appendHexByte(buff, xor, endian)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\n--557A1000350028E47EEC010000D412032718175500BCFCD3F13C4B4601A2A1E320202AB5E7D7D3B2E2D0B1D2C7202020202020594835303130304100\n-- temp=18.8 humi= -81.3 moduleId=28E47EEC010000D4\nunmarshall=function(hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex)\n if ErrorCode then \n \n local Temp=iota.hexToShort(hex,20,'B')/10.0\n local Humi=iota.hexToShort(hex,22,'B')/10.0\n out.data = {\n temp=Temp,\n humi=Humi\n }\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\n\nIsValid=function(data)\n log.debug('开始校验数据')\n if data == nil or string.len(data)/2 ~= 60 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x55 or iota.hexToByte(data,1,'B') ~= 0x7A or iota.hexToByte(data,2,'B') ~= 0x10 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if string.upper(device.props.moduleId) ~= string.upper(string.sub(data,13,28)) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('数据校验通过')\n return true\n--crc\nend\n\n\nCheckXor=function(start,buff)\n local lcr = 0\n for i = start, string.len(buff)/2-1 do\n lcr = bit:_xor(lcr , tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n end \n return lcr\nend \n \n\n\n \n\n INLINE 2017-09-11 19:28:02.423+08 2018-02-28 18:32:12.218+08 2017-09-11 \N
+f351ad03-a539-4ec7-8a2c-429209e9c03a baian_file_transfer \N 1.0 1510d330-86c7-4950-ac34-695109bc07a8 1510d330-86c7-4950-ac34-695109bc07a8 f 1510d330-86c7-4950-ac34-695109bc07a8 Lua start=function()\n log.debug("baian_file_transfer : devices network =%s", json.encode(device))\n log.debug("baian_file_transfer get Start ")\nend\n\nonData=function(data)\n log.debug("baian_file_transfer 解析data ")\n if data ~=nil then\n if data.type == "idau/file" then \n if data.ext==".d" or data.ext==".dx" then\n log.debug("baian_file_transfer : recvd content = %s",data.payload)\n ParseFileD(data.payload)\n --else\n --log.error("baian_file_transfer : unsupported file type: %s", data.ext)\n end\n if data.ext==".dat" then\n --log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n ParseFileDat(data.payload)\n --else\n --log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n end\n else\n log.error("baian_file_transfer : content type is not file, error recvd type is %s", data.type)\n end\n else\n log.error("baian_file_transfer : recvd content is nil")\n end\nend\n\nfunction ParseFileDat(dathex)\n log.debug("baian_file_transfer : dat content =%s", dathex)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n log.debug("baian_file_transfer deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n local floatcount = (string.len(dathex)/2-40)/4\n log.debug("baian_file_transfer begin parse")\n local vols = {}\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n end\n log.debug("baian_file_transfer finish parse")\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n sampleFreq=samplefreq,\n filterFreq=filterfreq,\n gainAmplifier=gainamplifier,\n triggerType=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n }\n table.insert(out.data,rst)\n log.debug("baian_file_transfer deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n ctx:notify(json.encode(out))\n else\n log.debug("baian_file_transfer not found device module=%s channel=%s",deviceId,channel)\n end\nend\n\nfunction ParseFileD(content)\n local out={\n data ={},\n result = {},\n type=2\n }\n log.debug("baian_file_transfer : content =%s", content)\n local jsons=Split(content,'\\r')\n for k,v in pairs(jsons) do\n if v~=nil and v~='' then\n local jsondata = json.decode(v) \n if jsondata~=nil and jsondata ~='' then\n local childDevice=getDeviceInfo(jsondata.M,jsondata.C) \n if childDevice ~=nil then\n \t\t\t--log.debug("baian_file_transfer 设备类型=%s,%s",childDevice.props.sensortype,json.encode(childDevice))\n if childDevice.props.sensortype=='gnss' then\n local rst = {\n data={\n x = jsondata.RV[1] or 0,\n y = jsondata.RV[2] or 0,\n z = jsondata.RV[3] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000)) \n }\n table.insert(out.data,rst)\t\n end\n if childDevice.props.sensortype=='zd' then\n local rst = {\n data={\n ppv = jsondata.RV[1] or 0, \n pv = jsondata.RV[2] or 0, \n rms = jsondata.RV[3] or 0, \n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000)) \n }\n log.debug("baian_file_transfer:out data=%s",json.encode(data))\n table.insert(out.data,rst)\n end\n \n \t\t\tif childDevice.props.sensortype=='gdgs' then\n local rst = {\n data={\n wavelength = tonumber(string.format('%0.3f',jsondata.RV[1])),\n physicalvalue= tonumber(string.format('%0.3f',jsondata.PV[1])) \n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000)) \n }\n log.debug("baian_file_transfer:out data=%s",json.encode(data))\n table.insert(out.data,rst)\n end\n \t\t\tif childDevice.props.sensortype=='gdgszx' then\n local rst = {\n data={\n physicalvalue = jsondata.PV[1],\n temperature= jsondata.PV[2] \n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000)) \n }\n log.debug("baian_file_transfer:out data=%s",json.encode(data))\n table.insert(out.data,rst)\n end\n if childDevice.props.sensortype=='standard485' then\n \t\t\tlog.debug("baian_file_transfer standard485=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n data={ \n physicalvalue= jsondata.PV[1] \n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000)) \n }\n log.debug("baian_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n table.insert(out.data,rst)\n end\n else\n log.debug("baian_file_transfer line=%s childDevice is nil",k)\n end\n end\n end\n end\n log.debug("baian_file_transfer: dataresult: %s", json.encode(out))\n ctx:notify(json.encode(out)) \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n \tlog.debug("baian_file_transfer:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices \n for i,subdevice in pairs(subdevices) do\n\t\t\n\t\t\tlocal submodule=subdevice.uplink.props.module\n \t\t --判断是否是3层采集仪结构\n\t\t\tif json.encode(subdevice.dnlinks)~="{}" then\n \t\t--log.debug("baian_file_transfer:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n\t\t\t for k,sublink in pairs(subdevice.dnlinks) do\n\t\t\t\t\t\t--log.debug("baian_file_transfer:sublink=%s",json.encode(sublink))\n\t\t\t\t\t\tfor u,sub_subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t\t--log.debug("baian_file_transfer:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\t\tlocal sensornodeId=sub_subdevice.uplink.props.nodeid\n \t\t\t\tlocal sensorchannel=sub_subdevice.uplink.props.channelid\n\t\t\t\t\t\t\tif tostring(sensorchannel) == tostring(moduleid) and tonumber(sensornodeId)==tonumber(channel) then\n\t\t\t\t\t\t\t\tlog.debug("baian_file_transfer:m=%s,c=%s 3 拜安匹配到设备=%s",moduleid,channel,json.encode(sub_subdevice))\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treturn sub_subdevice\n \t\t\t\telse\n \t\t\t\t\t--log.debug("baian_file_transfer:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n\t\t\t\t\t\t\tend \n\t\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\n\t\t else\n \n local subchannel=subdevice.uplink.props.channel\n \t\tlog.debug("baian_file_transfer:两层结构 m=%s,c=%s 设备=%s",submodule,subchannel,json.encode(subdevice))\n if tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then \n log.debug("baian_file_transfer:m=%s,c=%s 2安信匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n return subdevice\n else\n log.debug("baian_file_transfer has no device module=%s channel=%s,[submodule=%s,subchannel=%s]",moduleid,channel,submodule,subchannel)\n end \n \tend\n end\n log.debug("baian_file_transfer has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("baian_file_transfer has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n INLINE 2018-08-16 10:41:53.704+08 2019-07-09 16:49:42.184+08 2018-11-22 \N
+58ca889b-c95f-4603-b017-b40f0208d831 000 \N 12 0cd4b88c-4fb9-4fb9-83c6-038e9a530b1a 0cd4b88c-4fb9-4fb9-83c6-038e9a530b1a f 0cd4b88c-4fb9-4fb9-83c6-038e9a530b1a Lua 更好几代人投影机 INLINE 2018-05-24 19:14:58.121+08 2018-05-24 19:14:58.121+08 2018-05-24 \N
+3cf58410-da32-4194-aca0-9adf94b1d3bf fs_waterLevel_1560 \N 原精波水位计 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start =function()\n log.debug('start %s, moduleId=%s', 'fs_waterLevel_1560.lua', device.props.moduleId or 'nil')\n\n local endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) --返回雷达当前水位值,单位为mm\n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) -- 水位\n buff=iota.appendHexCrc(buff, 'L' ,0) \n ok, resp = ctx:ssend(buff, 15000)\n local result = '{}'\n if ok then\n result = unmarshall(resp, moduleNo)\n else\n local errorout={\n data ={},\n result = {}\n }\n \t errorout.result = {code=1001,msg="采集超时"}\n result=json.encode(errorout)\n end\n ctx:done(result)\nend\n--01 03 00 03 00 02 0000\n--010304000003040000 772mm \n\nunmarshall =function(hex,moduleNoStr)\n log.debug("xmxd_liquidLevel_1950 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local length =iota.hexToUInt(hex,3,'B')\n log.debug("xmxd_liquidLevel_1950 m=%s,length=%s ",moduleNoStr,length)\n out.data = { \n length=length\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("xmxd_liquidLevel_1950 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n\nIsValid = function(data, moduleNoStrCheck)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = string.format('无效的数据,长度=%s',string.len(data)/2)\n errcode = 1002\n return false\n end\n \n local dataModule=iota.hexToByte(data,0,'B')\n if tostring(moduleNoStrCheck) ~= tostring(dataModule) then\t\n errormsg = string.format('无效的模块号=%s[%s]',moduleNoStrCheck,dataModule)\n errcode = 1003\n return false\n end\n return true\n --crc\nend\n\n\nisValidParameter = function(...)\n local paras = {...}\n for k, v in pairs(paras) do\n -- log.debug('k=%s,v=%s',k,v)\n local isNum = IsNumberic(v)\n --log.debug('isNum=%s',isNum)\n if isNum == false then\n return false\n end\n end\n return true\nend\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend INLINE 2018-12-03 10:26:46.761+08 2018-12-03 10:44:42.886+08 2018-12-03 \N
+c0f2f402-ab7b-40f7-ba47-a8e42e42b380 bjhk__7000 \N 1.0 7e13f613-ffd9-4865-800a-0ca768ab2a28 7e13f613-ffd9-4865-800a-0ca768ab2a28 f 7e13f613-ffd9-4865-800a-0ca768ab2a28 Lua --北京华康科技\n-- start=function()\n -- log.debug("load script %s, moduleId=%s", "bjhk_7000.lua", device.props.moduleId or "[nil]")\n -- log.debug("bjhk_7000:".."LUA: ctx is =%s", json.encode(device))\n -- ok,resp=ctx:ssend("01020304",15000)\n -- log.debug("bjhk_7000:".."测试下发01020304正常")\n --end\n\n \n \n \n start=function()\n log.debug("start %s, ctx=%s", "bjhk_7000.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\t buff=StrToHex("Hub --采集是3E646174616C6F673A==>datalog:\n errormsg = 'Data is Invalid'\n errorcode = 1001\n return false\n end\n \n return true\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("bjhk_7000 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t -- log.debug("bjhk_7000:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t \n\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t--log.debug("bjhk_7000 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\t\n\t\t\t \n \tif tonumber(moduleStrCheck)==tonumber(moduleNoId) then\n\t\t \t \n if tonumber(channelStrCheck)==tonumber(channelNoId) then\n\t\t\t\t\tlog.debug("bjhk_7000: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n\t\t\t\t\treturn child\n\t\t\t\tend \n \t \tend\n\t\tend\n else\n log.debug("bjhk_7000: subdevices是nil")\n \treturn nil\n end\nend\n\nStrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n--\nHexToStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\nunixtimestamp=function(datestr)\n --20180625-125251 \n\tlog.debug("bjhk_7000 datestr=%s",datestr)\n local year = tonumber(string.sub(datestr,1,4));\n\tlocal month = tonumber(string.sub(datestr,5,6));\n\tlocal day = tonumber(string.sub(datestr,7,8));\n local hour = tonumber(string.sub(datestr,10,11));\n local minute = tonumber(string.sub(datestr,12,13));\n local second = tonumber(string.sub(datestr,14,15));\n log.debug("bjhk_7000 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlog.debug("bjhk_7000 timenum=%s",timenum)\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\tlog.debug("bjhk_7000 recordTime=%s",recordTime)\n\treturn recordTime\nend INLINE 2018-06-22 17:20:42.143+08 2018-08-17 17:27:53.468+08 2018-06-22 \N
+2b9ab16b-82fd-4ade-9f6b-e9e0ee2cce71 mk_lvdt_1 \N lvdt 1.0 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca f c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, ctx=%s", "mk_lvdt_1.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--aa040340017a6832aa0503400a52a1\n--"lvdt": 3.78\n local out={\n data ={},\n result = {}\n }\n log.debug("recv %s, ctx=%s", "mk_lvdt_1.lua",data)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local moduleNo = iota.hexToByte(hex,1,'B')\n \n local modulenumber= tonumber(device.props.moduleId)\n local valCmd = iota.hexToByte(hex,3,'B') \n if valCmd == 0x40 and moduleNo==modulenumber then\n \n local lvdt = iota.hexToShort(hex,4,'B') /100.0\n out.data = { \n lvdt = lvdt\n }\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_lvdt_1.lua",json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = 1001, msg = "Is not validated"}\n end\n else\n out.result = {code = errcode, msg = errormsg}\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_lvdt_1.lua",json.encode(out))\n ctx:notify(resultData)\n end\n \nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n --iota.checkPlusSum16\n return true\n--crc\nend\n\n\n\n INLINE 2018-01-08 11:27:19.742+08 2018-02-28 18:32:12.224+08 2018-01-08 \N
+39322bd3-88ca-4203-8db7-60c93698aeb0 BK_WaterLevel \N 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "fs_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n buff=iota.appendHexWord(buff, 22, endian) -- 2: 类型=22\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n buff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 1: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n--0016261381F35D42830C36094DFE363C80FFE1F8CFEF40\n--moduleId=9747\n--"temp": 23.81,\n--"xDegree": -30,\n--"yDegree": -1.967921\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\n local scale = 1000000.00;\n --print("parsing data", hex)\n local Temp = iota.hexToShort(hex,11,'B')/100.0;\n local xa = iota.hexToInt(hex,13,'B')/scale;\n local ya = iota.hexToInt(hex,17,'B')/scale;\n \n out.data = {\n temperature=Temp,\n \tanglex = xa,\n \tangley = ya\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('fs_1503开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,4,'B') ~= 0x81 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo_check) ~= tostring(iota.hexToShort(data,2,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('fs_1503数据校验通过')\n return true\n--crc\nend\n\n INLINE 2019-03-20 15:27:40.946+08 2019-03-20 15:27:40.946+08 2019-03-20 \N
+fd08e5b1-9f9f-45d2-af57-13ae07de6891 CSXL_7600 \N 1.0 5619f241-827a-4e15-b2af-f2666e57ce48 5619f241-827a-4e15-b2af-f2666e57ce48 f 5619f241-827a-4e15-b2af-f2666e57ce48 Lua start=function()\n log.debug("CSXL_7600 devices=%s", json.encode(device))\n ctx:asend('01020304')\nend\n\nonData =function(hex)\n --主动上传式\n log.debug('CSXL_7600:Received=>%s', hex)\n local out = {\n type = 2,\n data = {},\n result = {}\n }\n\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n local ErrorCode = IsValid(hex, moduleNo)\n if ErrorCode then\n local sensorType = string.sub(hex, 5, 8)\n local IDX_data = 23\n if sensorType == '0001' then\n for i = 1, 36, 1 do\n local channelNo = i\n local subdata = string.sub(hex, 23 + (i - 1) * 16, 23 + (i) * 16-1)\n if subdata ~= '0000000000000000' then \n \t\t\t\n local Frequency = iota.hexToFloat(subdata, 0, 'B')\n local Temp = iota.hexToFloat(subdata, 4, 'B')\n --循环插入单通道数据表\n log.debug('CSXL_7600 模块号=%s,通道号=%s,subdata=%s', moduleNo, channelNo,subdata)\n local childDevice = getDeviceInfo(moduleNo, channelNo)\n --\n local deviceId\n if childDevice ~= nil then\n --else\n --log.debug("geot_1406:(振弦)子设备:m=%s,c=%s device.formula为nil"..tostring(moduleNo),tostring(channelNo))\n -- end\n deviceId = childDevice.id\n log.debug('CSXL_7600 (振弦)子设备原形childDevice=%s', json.encode(childDevice))\n log.debug('CSXL_7600 (振弦)子设备deviceId=' .. tostring(deviceId))\n\n --if childDevice.device.formula=="P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)" then --公式目前无法获取\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local K2 = childDevice.uplink.capabilities[1].formula.props.K2\n local K3 = childDevice.uplink.capabilities[1].formula.props.K3\n local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local To = childDevice.uplink.capabilities[1].formula.props.To\n log.debug('CSXL_7600:(振弦)子设备:m=%s,c=%s:公式参数=%s,%s,%s,%s,%s,%s', moduleNo, channelNo, K1, K2, K3, Fo, To, Kt)\n if K1 == nil or K2 == nil or K3 == nil or Fo == nil or Kt == nil or To == nil then\n Phy = nil\n log.debug('CSXL_7600:模块号=%s,通道号=%s 参数无效 当前的Frequency是:%s,Temp是%s', moduleNo, channelNo, Frequency, Temp)\n else\n log.debug('CSXL_7600:模块号=%s,通道号=%s 参数有效 当前的Frequency是:%s,Temp是%s', moduleNo, channelNo, Frequency, Temp)\n local Fi = Frequency\n Phy = K1 * Fi + K2 * Fi ^ 2 + K3 * Fi ^ 3 - (K1 * Fo + K2 * Fo ^ 2 + K3 * Fo ^ 3) + Kt * (Temp - To)\n log.debug('CSXL_7600:模块号=%s,通道号=%s 当前的Phy是:%s', moduleNo, channelNo, Phy)\n end\n else\n log.debug('CSXL_7600:(振弦)子设备:m=%s,c=%s deviceId为nil', tostring(moduleNo), tostring(channelNo))\n end\n local data1 = {\n data = {\n frequency = tonumber(string.format('%5.3f', Frequency)),\n temperature = tonumber(string.format('%5.3f', Temp)),\n physicalvalue = tonumber(string.format('%5.3f', Phy))\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n else\n --log.debug('CSXL_7600:(振弦)子设备:m=%s,c=%s 数据无效=0x0000000000000000', tostring(moduleNo), tostring(channelNo))\n end\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n ctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo =\n function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("CSXL_7600 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n log.debug('CSXL_7600:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n log.debug('CSXL_7600 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n else\n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.channelId\n log.debug('CSXL_7600 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n end\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tostring(channelStrCheck) == tostring(channelNoId) then\n log.debug('CSXL_7600: m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('CSXL_7600: subdevices是nil')\n return nil\n end\nend\n\nIsValid = function(data, moduleNoCheck)\n log.debug('CSXL_7600 [%s] 开始校验数据', moduleNoCheck)\n if data == nil or string.len(data) / 2 ~= 301 then\n errormsg = string.format('数据长度=%s≠301', string.len(data) / 2)\n errcode = 1002\n return false\n end\n\n local dataModule = tostring(iota.hexToShort(data, 0, 'B'))\n if moduleNoCheck ~= dataModule then\n errormsg = string.format('模块号=%s≠%s无效', moduleCheck, dataModule)\n errcode = 1003\n return false\n end\n log.debug('CSXL_7600 [%s] 校验通过', moduleNoCheck)\n return true\nend INLINE 2018-11-23 16:59:01.75+08 2018-12-10 15:39:56.111+08 2018-11-23 \N
+e28ad13d-52d4-4ef6-891e-82958b52ba44 LVDT_HY_9115 \N 裂缝计 1.0 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc f 06551138-8f00-4269-9a6d-4e5fa26c71cc Lua --"04 项目资料/2017-09/武汉华岩电子有限责任公司/HY65-ascii/传感器ASCII方式通讯控制协议.TXT"\n--测试\n--3635525830303154542B30303031393654FD36355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F7\nstart = function()\n log.debug('LVDT_HY_9115 start %s, device=%s', 'LVDT_HY_9115.lua', json.encode(device))\nend\n\nonData =function(hex)\n log.debug('LVDT_HY_9115 收到数据=%s',hex)\n local out = {\n type = 2,\n data = {},\n result = {}\n }\n\t\n local tempture\n local crackGap\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n log.debug('LVDT_HY_9115 数据有效=%s',hex)\n local data_str = HexToStr(hex)\n --转为字符串\n local sArray = Split(data_str, '65RX')\n --获取子字符串表\n\n for i = 1, #sArray do\n log.debug('LVDT_HY_9115 i=%s ,len=%s', i, #sArray)\n if sArray[i] ~= '' then\n log.debug('LVDT_HY_9115 sArray[%s]=%s', i, sArray[i])\n --循环插入单通道数据表\n log.debug(' LVDT_HY_9115 string.sub(sArray[%s],-3,-3)=%s', i, string.sub(sArray[i], -3, -3))\n if string.sub(sArray[i], -3, -3) == 'T' then\n --温度计算\n local t = string.sub(sArray[i], 6, 12)\n log.debug('LVDT_HY_9115 i=%s ,t=%s', i, t)\n tempture = tonumber(t) / 10.0\n else\n --裂缝计算\n local str_rawData = string.sub(sArray[i], 6, 12)\n log.debug('LVDT_HY_9115 i=%s ,str_rawData=%s', i, str_rawData)\n crackGap = tonumber(str_rawData) * 0.001\n log.debug('LVDT_HY_9115 i=%s ,crackGap=%s', i, tostring(crackGap))\n local channelNo = tonumber(string.sub(sArray[i], 1, 3))\n local subdevice = getDeviceInfo(1, channelNo) -- 只匹配通道号 不匹配模块号\n local data1 = {\n data = {\n length = crackGap,\n tempture = tempture\n },\n device = subdevice.id,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n end\n else\n log.debug('LVDT_HY_9115 数据无效')\n message = string.format('LVDT_HY_9115 无效的数据长度=%s', string.len(hex))\n out.result = {code = errcode, msg = message}\n end\n local resultData = json.encode(out)\n log.debug('LVDT_HY_9115 resultData=%s',resultData)\n ctx:notify(resultData)\nend\n\nIsValid = function(data)\n if iota.hexToByte(data, 0, 'B') ~= 0x36 or iota.hexToByte(data, 1, 'B') ~= 0x35 or iota.hexToByte(data, 2, 'B') ~= 0x52 or iota.hexToByte(data, 3, 'B') ~= 0x58 then\n errormsg = '数据无效[数据帧头与尾校验错误]'\n errcode = 1001\n return false\n end\n return true\nend\n\n--字符串ascii->字符\nHexToStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n--获取传感器信息\ngetDeviceInfo =\n function(moduleid, channel)\n log.debug('LVDT_HY_9115 查询子设备: moduleid=%s,channel=%s', moduleid, channel)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices\n for i, subdevice in pairs(subdevices) do\n local submodule = subdevice.uplink.props.module\n --判断是否是3层采集仪结构\n local dnlinkObject = json.encode(subdevice.dnlinks)\n if dnlinkObject ~= '{}' and dnlinkObject ~= 'null' then\n log.debug('LVDT_HY_9115 三层结构 m=%s, 设备=%s', submodule, json.encode(subdevice))\n for k, sublink in pairs(subdevice.dnlinks) do\n --log.debug("baian_file_transfer:sublink=%s",json.encode(sublink))\n for u, sub_subdevice in pairs(sublink.devices) do\n --log.debug("baian_file_transfer:sensor=%s",json.encode(subdevice))\n local sensormodule = sub_subdevice.uplink.props.module\n local sensorchannel = sub_subdevice.uplink.props.channel\n if tostring(sensormodule) == tostring(moduleid) and tonumber(sensorchannel) == tonumber(channel) then\n --log.debug('LVDT_HY_9115 m=%s,c=%s 3 拜安匹配到设备=%s', moduleid, channel, json.encode(sub_subdevice))\n\n return sub_subdevice\n else\n -- log.debug('LVDT_HY_9115 m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s', moduleid, sensormodule, channel, sensorchannel, json.encode(sub_subdevice))\n end\n end\n end\n else\n local subchannel = subdevice.uplink.props.channel\n -- log.debug('LVDT_HY_9115 两层结构 m=%s,c=%s 设备=%s', submodule, subchannel, json.encode(subdevice))\n if tonumber(subchannel) == tonumber(channel) then -- 只比较 模块号 tostring(submodule) == tostring(moduleid) and\n --log.debug('LVDT_HY_9115 m=%s,c=%s 2安信匹配到设备=%s', moduleid, channel, json.encode(subdevice))\n return subdevice\n else\n log.debug('LVDT_HY_9115 has no device module=%s channel=%s,[submodule=%s,subchannel=%s]', moduleid, channel, submodule, subchannel)\n end\n end\n end\n -- log.debug('LVDT_HY_9115 has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug('LVDT_HY_9115 has no subdevices.')\n return nil -- 没有子设备\n end\nend INLINE 2017-11-06 17:31:11.879+08 2019-01-18 18:19:32.73+08 2017-11-04 \N
+2e03f731-c82a-4513-ab1a-610b99c3d1a1 fm_flow_1 \N 富马流量计 1.0 10f6acf8-d569-4bb6-8f23-f97b1664d309 10f6acf8-d569-4bb6-8f23-f97b1664d309 f 10f6acf8-d569-4bb6-8f23-f97b1664d309 Lua start=function()\n log.debug("start %s, ctx=", "fm_flow_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 7, endian)\n buff=iota.appendHexByte(buff, 0xd6, endian)\n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0x06, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n --01030600bc614e00034f44\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==34) then\n \n local totalIntFlow=iota.hexToInt(hex,3,'B') \n local totalDecimalPiont=iota.hexToShort(hex,7,'B') \n local totalFlow=totalIntFlow/\tmath.pow(10,totalDecimalPiont)\n local transientIntFlow=iota.hexToInt(hex,9,'B') \n local transientDecimalPiont=iota.hexToShort(hex,13,'B') \n local transientFlow=transientIntFlow/\tmath.pow(10,transientDecimalPiont)\n out.data = {\n totalFlow=totalFlow,\n transientFlow=transientFlow\n }\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend INLINE 2017-11-22 15:22:18.834+08 2018-02-28 18:32:12.219+08 2017-11-22 \N
+6c84c330-794c-4d18-9113-6d2a91d2abd6 an \N 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua ---[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "fs_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n buff=iota.appendHexWord(buff, 2, endian) -- 2: 类型=1\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n buff=iota.appendHexWord(buff, tonumber(moduleNo), endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 03, endian) -- 1: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, "L" ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,5000) --下发的码流\n local result="{}"\n if ok then --下发是否成功\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end \n -- ctx:asend("hello")\n ctx:done(result) --协议完成打ctx:done ()\nend\n\n--0016261381F35D42830C36094DFE363C80FFE1F8CFEF40\n--moduleId=9747\n--"temp": 23.81,\n--"xDegree": -30,\n--"yDegree": -1.967921\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={ },\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr) --判断是否符合厂家协议\n if ErrorCode then \n\n local scale = 100.00;\n --print("parsing data", hex)\n local Temp = iota.hexToShort(hex,3,'B')/100.0-40;\n local Hem = iota.hexToInt(hex,5,'B')/scale;\n\t\tloc pres=iota.hexToInt(hex,7,'B')/scale;\n \n out.data = {\n temperature=Temp,\n \thumidity = Hem, \n\t\t\tpressure=pres,\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('fs_1503开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo_check) ~= tostring(iota.hexToShort(data,0,'B')) then\t--判读是否模块2\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('fs_1503数据校验通过')\n return true\n--crc\nend\n INLINE 2019-03-19 15:54:17.198+08 2019-03-19 18:04:47.432+08 2019-03-19 \N
+4ab9cad5-76ed-4cc1-99b0-9543fc1c0533 BDS_WSD \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: 产品协议/温湿度传感器FS-BDS-WSD通讯协议\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "BAS_ACQ.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\tlog.debug("BAS_TW 设备模块通道 接口获取 m=%s",moduleNo)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\tlog.debug("BDS_WSD 设备模块通道 属性获取 m=%s",moduleNo)\n\tend\n\t\n\t\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 3, endian) -- 1: 指令: 0x03 = 采集\n buff=iota.appendHexWord(buff, 1 ,endian) -- 2: 温湿度\n\tbuff=iota.appendHexWord(buff, 2 ,endian) -- 2:寄存器个数\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \tlocal data= iota.hexToShort(hex,3,'B')\n local Temp = (data - 2000)/100;\n local humidy = iota.hexToShort(hex,5,'B')/100;\n \n out.data = {\n Temp=Temp,\n \thumidy = humidy\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('BDS_WSD 开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleNo_check) ~= tonumber(string.sub(data,1,2)) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('fs_1503数据校验通过')\n return true\n--crc\nend\n\nonData=function()\nend\n INLINE 2019-04-17 14:50:21.701+08 2019-11-21 09:40:12.237+08 2019-04-17 \N
+d293d9df-57d3-4156-b626-195aece1b63c RN-200DW \N 温度传感器 1.0 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f 8d2f03c7-32a2-42e4-befc-7dde5c965472 Lua --// \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "RN-200DW ", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("RN-200DW 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("RN-200DW 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n \t\tbuff=iota.appendHexByte(buff, 0x00, endian) \t\t\n buff=iota.appendHexByte(buff, 0x01, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n\t\t\n\t\tlog.debug('RN-200DW %s buff111111',buff)\n\t\t\n\t\t\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("RN-200DW SSend error!")\n end\n ctx:done(result)\nend\n\n--010300000001840A\n--010302012B6D71\n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\n\t\tlocal Temp = iota.hexToShort(hex,3,'B')/10\n\t\tlog.debug('RN-200DW %s 温度',Temp)\n\t\t\n\t\t\n \n \n out.data = {\n\t\t\tTemp=Temp,\t\t\t\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n log.debug('RN-200DW %s 开始校验数据',data)\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n \n log.debug('RN-200DW 数据校验通过')\n return true\n\nend\n\n\n\t\n \n INLINE 2019-12-30 13:25:17.355+08 2019-12-30 13:40:24.354+08 2019-12-30 \N
+36938573-512e-46a3-a00f-1761d76ed4b0 fs_pressure_9005 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//01 协议文档/6月第1周/上海佑富实业有限公司/【佑富485协议】液位压力YF-17通信协议.doc\n--[[\n协议号: 9005;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n\tlog.debug("load script %s, moduleId=%s", "fs_pressure_9005", device.uplink.props.moduleId or "[nil]")\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fs_pressure_9005 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("fs_pressure_9005 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\tsendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n--010304be40e6121542\n--moduleId=1\n--"pressure": -0.188378\nfunction protocol_encode(moduleNoStr)\n\n\tlocal BE='B'\n\tlocal buff=''; \n\tbuff=iota.appendHexByte(buff, moduleNoStr, BE); -- 3: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x03, BE); --功能码 0x03采集 \n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x16, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n buff=iota.appendHexByte(buff, 0x02, BE);\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) --CRC16\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 \n--原始数据 \nfunction protocol_decode(hex,moduleNoCheck)\n \n\tlocal data = hex;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\t\t\t\n\tlocal ErrorCode = IsValid(hex,moduleNoCheck)\n if ErrorCode then\n log.debug('校验正确 开始解析')\n\tlog.debug(string.format('decode: %s', data));\n\tlocal pressure = iota.hexToFloat(data, 3,'B'); -- :压强\n\t\t\t\t\n\t\tout.data = {\n\t\tpressure=pressure\n\t\t};\t\n\telse\n out.result = {code=errcode,msg=errormsg} \n\tend\n\t return json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n log.debug('开始校验')\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or InvalidLength'\n errcode = 1001\n return false\n end\n log.debug('长度校验通过')\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = 'CMD is not right'\n errcode = 1001\n return false\n end\n log.debug('CMD校验通过')\n if moduleNoCheckStr ~= tostring(iota.hexToByte(data,0,'B')) then \t\n errormsg = 'Invalid ack moduleId'\n errcode = 1004\n return false\n end\n --log.debug('模块号校验通过')\n return true\nend\n INLINE 2017-12-05 14:51:15.523+08 2018-06-01 17:39:33.304+08 2017-12-05 \N
+d45fde71-90ee-49e8-bfdd-da76b23deb24 fs_cl \N 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start = function()\n log.debug("fs_cl:device=%s",json.encode(device))\n local req = {\n type = "idau",\n payload = ""\n }\n local mop = {\n M = "c_vibf2",\n O = "S",\n P = { } -- 荷载\n }\n\n\n local linkcnt = #(device.dnlinks)\n\n\n \tlocal trmode = 0\n \tif device.props.triggermode == "软件触发" then\n \ttrmode = 0\n end\n \tif device.props.triggermode == "模拟硬件触发" then\n \ttrmode = 1\n end\n \tif device.props.triggermode == "数字硬件触发" then\n \ttrmode = 2\n end\n \tif device.props.triggermode == "硬件模拟数字触发" then\n \ttrmode = 3\n end\n\n local demode = 0\n \tif device.props.devicermode == "从设备异步" then\n \tdemode = 0\n end\n \tif device.props.devicermode == "主设备异步" then\n \tdemode = 1\n end\n \tif device.props.devicermode == "主设备同步" then\n \tdemode = 2\n end\n local set = {\n \tID=tonumber(device.dnlinks[1].devices[1].uplink.props.module) or 1,\n PA=device.props.uploadprocess,\n TT = trmode, \n TI=tonumber(device.props.triggerint),\n DM=demode, --设备工作模式\n ISH=tonumber(device.props.hour),--间隔触发启动时间\n ISM=tonumber(device.props.minute),\n ISS=tonumber(device.props.second),\n IAS=tonumber(device.props.acqtimeint),--间隔触发采样时长\n TAS=tonumber(device.props.acqtiming),--定时触发采样时长\n TTS={},CHS ={}\n }\n mop.P = set\n local arry1 = false\n local arry2 = false\n local arry3 = false\n local arry4 = false\n local arry5 = false\n local arry6 = false\n\tlocal arry= Split(device.props.startiming1, ":")\n\tif arry[1] == "" then \n\n\telse\n\t\tlocal startiming1 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\ttable.insert(mop.P.TTS, startiming1)\n\t\tarry1 = true\n\tend\n\tarry= Split(device.props.startiming2, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\t\t\n\t\tlocal startiming2 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\ttable.insert(mop.P.TTS, startiming2)\n\t\tarry2 = true\n\tend\n\tarry= Split(device.props.startiming3, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\n\t\tlocal startiming3 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\ttable.insert(mop.P.TTS, startiming3)\n\t\tarry3 = true\n\tend\n\tarry= Split(device.props.startiming4, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\n\t\tlocal startiming4 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\ttable.insert(mop.P.TTS, startiming4)\n\t\tarry4 = true\n\tend\n\tarry= Split(device.props.startiming5, ":")\t\n\tif arry[1] == "" then \n\n\telse\t\n\t\tlocal startiming5 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\ttable.insert(mop.P.TTS, startiming5)\n\t\tarry5 = true\n\tend\n\tarry= Split(device.props.startiming6, ":")\t\n\tif arry[1] == "" then \n\n\telse\n\t\tlocal startiming6 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\t\n\t\ttable.insert(mop.P.TTS, startiming6)\n\t\tarry6 = true\n\tend\n\t\n \tfor i = 1, linkcnt, 1 do \n log.debug("fs_cl:dev=%s", json.encode(dev))\n local link = device.dnlinks[i]\n local dev = link.devices[1]\n local dev_inf = link.devices[1].uplink\n \tlocal samolepoint = tonumber(dev_inf.props.samplefreq) * tonumber(dev_inf.props.duration)\n \tlocal trirmode = 0\n if dev_inf.props.triggermode == "绝对值" then\n trirmode = 0\n end\n if dev_inf.props.triggermode == "上升沿" then\n trirmode = 1\n end\n if dev_inf.props.triggermode == "下降沿" then\n trirmode = 2\n end\n if dev_inf.props.triggermode == "峰峰值" then\n trirmode = 3\n end\n local joinmode = 0\n if dev_inf.props.triggerjoin == "不参与" then\n joinmode = 0\n end\n if dev_inf.props.triggerjoin == "参与" then\n joinmode = 1\n end\n\t\tif dev_inf.props.das == 'true' then\n\t\t\tdasvalue = 1\n\t\telse\n\t\t\tdasvalue = 0\n\t\tend\t\t\n local sensor = {\n CH = tonumber(dev_inf.props.channel),--通道号\n GA = tonumber(dev_inf.props.amplification),--GainAmplifier放大倍数\n SF = tonumber(dev_inf.props.samplefreq),--SampleFreq 采样频率\n FF = tonumber(dev_inf.props.filterfreq),--FilterFreq 过滤频率\n DA = tonumber(dev_inf.props.dcdriftadj),--DCDriftAdj 直流漂移校准参数\n DAS = dasvalue,--DAS, 硬件DA启用? \n AA = tonumber(dev_inf.props.amplitudeadj),--AmplitudeAdj 幅值修正参数\n TL = tonumber(dev_inf.props.triglevel),-- TriggerLevel 触发电平\n TM = trirmode,--TriggerMode触发方式\n TJ = joinmode,--TriggerJoin 参与触发方式\n SR = samolepoint ,--SampleRate 采样点数1\n LP = tonumber(dev_inf.props.lagpoint),--LagPoint 滞后点数\n }\n table.insert(mop.P.CHS, sensor) \n end\n\tlocal resultstr = json.encode(mop)\n\tresultstr =\tresultstr:gsub("\\"TTS\\":null","\\"TTS\\":[{},{},{},{},{},{}]")\n\tlog.debug("fs_cl finish resultstr = %s",resultstr)\n\tlocal darry= Split(resultstr,",")\n\n\n\t--\n\tlocal arrystr = ""\n\tif arry1 then\n\t\tlocal dstr = darry[25]..","..darry[26]..","\n\t\tlocal sttr = Split(darry[27],"}")\n\t\tdstr = dstr..sttr[1].."}"\n\t\tlog.debug("fs_cl:dstr=%s", dstr)\t\n\t\tlocal farry= Split(dstr,"}")\n\t\tlocal ff =farry[1]\n\t\tlog.debug("fs_cl:ff=%s", ff)\n\t\tff = ff.."},{},{},{},{},{},{}"\n\t\tlog.debug("fs_cl:ff1=%s", ff)\n\t\tlocal gstr = ff\n\t\t\n\t\tlocal v1 = string.sub(dstr,7,-1)\n\t\tlocal v2 = string.sub(gstr,7,-1)\n\t\tlog.debug("fs_cl:toto=%s too = %s", v1,v2)\n\t\tresultstr =\tresultstr:gsub(v1,v2)\n\t\tlog.debug("fs_cl:sd=%s", resultstr)\n\t\tif arry2 then\n\t\t\tif arry3 then\n\t\t\t\tif arry4 then\n\t\t\t\t\tif arry5 then\n\t\t\t\t\t\tif arry6 then\n\t\t\t\t\t\t\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\t\n\tend\n\tlog.debug("fs_cl finish parse = %s",resultstr)\n req.payload = resultstr\n \t\n log.debug("fs_cl request=%s", json.encode(req))\n\n local ok, ack = ctx:ssend(req, 60000)\n result = {\n result = nil,\n type = 1,\n data = {\n ack = json.encode(ack)\n }\n }\n log.debug("fs_cl result=%s", json.encode(result))\n ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n if t == "host" then\n return 1\n elseif t == "relay" then\n return 2\n end\n return 3\nend\n\nfunction Split(szFullString, szSeparator) \n\tlocal nFindStartIndex = 1 \n\tlocal nSplitIndex = 1 \n\tlocal nSplitArray = {} \n\twhile true do \n\t\tlocal nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) \n\t\tif not nFindLastIndex then \n\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) \n\t\t\tbreak \n\t\tend \n\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) \n\t\tnFindStartIndex = nFindLastIndex + string.len(szSeparator) \n\t\tnSplitIndex = nSplitIndex + 1 \n\tend \n\treturn nSplitArray \nend INLINE 2019-08-30 17:01:33.718+08 2019-08-30 19:59:13.521+08 2019-08-30 \N
+9e6be8c0-53f7-424e-8e67-adb671494261 testTemp \N 1.0 f88cbfa3-0609-45d9-92aa-5108b5a4ac6f f88cbfa3-0609-45d9-92aa-5108b5a4ac6f f f88cbfa3-0609-45d9-92aa-5108b5a4ac6f Lua -- INLINE 2018-12-08 09:58:54.543+08 2018-12-08 09:58:54.543+08 2018-12-08 \N
+f4443305-4848-4a3e-b1bc-f5ad10a87518 fs_renke_yc \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//04 项目资料/仁科扬尘/网络型采集器通信协议V11_201807261651431.docx\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]]\n--0100000001012000042b00000014d0\n--moduleId=1\n--channelId=1\n\nstart = function()\n log.debug('load script %s, moduleId=%s', 'rk_yc', device.props.moduleId or '[nil]')\nend\n\nonData = function(hex)\n local out = {\n data = {},\n result = {}\n }\n local device_module = device.props.moduleId or device.uplink.props.module\n local data = hex\n log.debug('rk_yc [%s] onData hex=%s ', device_module, hex)\n local ErrorCode = IsValid(hex)\n if ErrorCode == true then\n if string.sub(data, 21, 22) == '33' and (string.sub(data, 23, 24) == '1d' or string.sub(data, 23, 24) == '1D') then\n --登陆命令\n local req = '6888888888888868'\n local endian = 'B'\n req = iota.appendHexByte(req, 0x20, endian)\n req = iota.appendHexByte(req, 0x06, endian)\n req = iota.appendHexByte(req, 0x00 + 0x33, endian)\n req = iota.appendHexByte(req, 0x1D, endian)\n local len = string.len(data)\n local moduleNo = string.sub(data, -12, -5)\n log.debug('rk_yc [%s] moduleNo=%s ', device_module, moduleNo)\n local moduleId1 = string.sub(moduleNo, 1, 2)\n local moduleId2 = string.sub(moduleNo, 3, 4)\n local moduleId3 = string.sub(moduleNo, 5, 6)\n local moduleId4 = string.sub(moduleNo, 7, 8)\n\n req = iota.appendHexByte(req, tonumber(moduleId1, 16), endian)\n req = iota.appendHexByte(req, tonumber(moduleId2, 16), endian)\n req = iota.appendHexByte(req, tonumber(moduleId3, 16), endian)\n req = iota.appendHexByte(req, tonumber(moduleId4, 16), endian)\n\n crc = LCR(0, req)\n log.debug('rk_yc [%s] crc=%s ', device_module, crc)\n req = iota.appendHexByte(req, crc, endian)\n req = iota.appendHexByte(req, 0x16, endian)\n log.debug('rk_yc [%s] ssend req=%s ', device_module, req)\n local ok, ack = ctx:ssend(req, 3000)\n end\n if string.sub(data, 21, 22) == '36' and (string.sub(data, 23, 24) == '1d' or string.sub(data, 23, 24) == '1D') then\n --节点1\n log.debug('rk_yc [%s] 解析数据', device_module)\n local datahex = string.sub(data, 25, 34)\n local data11, data12 = Calc(datahex, 3)\n local data1 = string.format('%02X', data11 - 0x33) .. string.format('%02X', data12 - 0x33)\n local data21, data22 = Calc(datahex, 7)\n local data2 = string.format('%02X', data21 - 0x33) .. string.format('%02X', data22 - 0x33)\n --节点2\n datahex = string.sub(data, 35, 44)\n local data31, data32 = Calc(datahex, 7)\n local data3 = string.format('%02X', data31 - 0x33) .. string.format('%02X', data32 - 0x33)\n --节点3\n datahex = string.sub(data, 45, 54)\n local data41, data42 = Calc(datahex, 3)\n local data51, data52 = Calc(datahex, 7)\n local data4 = string.format('%02X', data41 - 0x33) .. string.format('%02X', data42 - 0x33)\n local data5 = string.format('%02X', data51 - 0x33) .. string.format('%02X', data52 - 0x33)\n\n --节点4\n datahex = string.sub(data, 55, 64)\n local data61, data62 = Calc(datahex, 3)\n local data71, data72 = Calc(datahex, 7)\n local data6 = string.format('%02X', data61 - 0x33) .. string.format('%02X', data62 - 0x33)\n local data7 = string.format('%02X', data71 - 0x33) .. string.format('%02X', data72 - 0x33)\n --节点6\n datahex = string.sub(data, 75, 84)\n local data81, data82 = Calc(datahex, 7)\n local data8 = string.format('%02X', data81 - 0x33) .. string.format('%02X', data82 - 0x33)\n --节点7\n datahex = string.sub(data, 85, 94)\n local data91, data92 = Calc(datahex, 7)\n local data9 = string.format('%02X', data91 - 0x33) .. string.format('%02X', data92 - 0x33)\n\n local pm10 = iota.hexToShort(data1, 0, 'L')\n local pm25 = iota.hexToShort(data2, 0, 'L')\n local noise = iota.hexToShort(data3, 0, 'L') / 10\n local humidity = iota.hexToShort(data5, 0, 'L') / 10\n local temperature = iota.hexToShort(data4, 0, 'L') / 10\n local wind = iota.hexToShort(data6, 0, 'L')\n local speed = iota.hexToShort(data7, 0, 'L') / 10\n local direction = iota.hexToShort(data8, 0, 'L')\n local TSP = iota.hexToShort(data9, 0, 'L')\n\n out.data = {\n temperature = tonumber(string.format('%0.1f', temperature)),\n humidity = tonumber(string.format('%0.1f', humidity)),\n pm25 = tonumber(string.format('%0.0f', pm25)),\n pm10 = tonumber(string.format('%0.0f', pm10)),\n noise = tonumber(string.format('%0.1f', noise)),\n speed = tonumber(string.format('%0.1f', speed)),\n direction = tonumber(string.format('%0.1f', direction)),\n wind = tonumber(string.format('%0.1f', wind)),\n TSP = tonumber(string.format('%0.1f', TSP))\n }\n if out.data.pm25 < 0 or out.data.pm25 > 700 then\n out.result.code = 5001\n out.result.msg = 'data outof range!!'\n out.data = {}\n end\n if out.data.pm10 < 0 or out.data.pm10 > 700 then\n out.result.code = 5001\n out.result.msg = 'data outof range!!'\n out.data = {}\n end\n if out.data.speed < 0 or out.data.speed > 24.5 then\n out.result.code = 5001\n out.result.msg = 'data outof range!!'\n out.data = {}\n end\n if out.data.direction < 0 or out.data.direction > 360 then\n out.result.code = 5001\n out.result.msg = 'data outof range!!'\n out.data = {}\n end\n if out.data.temperature < -40 or out.data.temperature > 60 then\n out.result.code = 5001\n out.result.msg = 'data outof range!!'\n out.data = {}\n end\n if out.data.humidity < 0 or out.data.humidity > 100 then\n out.result.code = 5001\n out.result.msg = 'data outof range!!'\n out.data = {}\n end\n if out.data.noise < 0 or out.data.noise > 200 then\n out.result.code = 5001\n out.result.msg = 'data outof range!!'\n out.data = {}\n end\n local req = '6888888888888868'\n local endian = 'B'\n req = iota.appendHexByte(req, 0x20, endian)\n req = iota.appendHexByte(req, 0x06, endian)\n req = iota.appendHexByte(req, 0x03 + 0x33, endian)\n req = iota.appendHexByte(req, 0x1D, endian)\n local moduleNo = string.sub(data, -12, -5)\n log.debug('rk_yc [%s] moduleNo1=%s ', device_module, moduleNo)\n local moduleId1 = string.sub(moduleNo, 1, 2)\n local moduleId2 = string.sub(moduleNo, 3, 4)\n local moduleId3 = string.sub(moduleNo, 5, 6)\n local moduleId4 = string.sub(moduleNo, 7, 8)\n req = iota.appendHexByte(req, tonumber(moduleId1, 16), endian)\n req = iota.appendHexByte(req, tonumber(moduleId2, 16), endian)\n req = iota.appendHexByte(req, tonumber(moduleId3, 16), endian)\n req = iota.appendHexByte(req, tonumber(moduleId4, 16), endian)\n crc = LCR(0, req)\n req = iota.appendHexByte(req, crc, endian)\n req = iota.appendHexByte(req, 0x16, endian)\n local ok, ack = ctx:ssend(req, 3000)\n end\n else\n -- statements\n out.result = {code = errorcode, msg = errormsg}\n end\n \tlog.debug('rk_yc [%s] out =%s ', device_module, json.encode(out))\n local resultData = json.encode(out)\n ctx:notify(resultData)\nend\n\nIsValid = function(data)\n local datalength = string.len(data)\n if string.len(data) / 2 == 22 or string.len(data) / 2 == 89 then\n else\n errormsg = 'data length is wrong'\n errorcode = 1001\n return false\n end\n\n if\n string.sub(data, 1, 2) ~= '68' or string.sub(data, 3, 4) ~= '88' or string.sub(data, 5, 6) ~= '88' or\n string.sub(data, 7, 8) ~= '88'\n then\n errormsg = 'Data is Invalid'\n errorcode = 1001\n return false\n end\n\n return true\nend\n\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n--字符串ascii->字符\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--校验和\nLCR = function(start, data)\n --log.debug('rk_yc data=%s ', data)\n local sum = 0\n for i = start, string.len(data) / 2 - 1 do\n if string.sub(data, 1 + 2 * i, 2 * (i + 1)) ~= '' then\n sum = (sum + tonumber(string.sub(data, 1 + 2 * i, 2 * (i + 1)), 16)) % 0xffff\n end\n end\n sum = bit.band(sum, 0xff)\n return sum\nend\n\n--校验和\nCalc = function(data, offset)\n --log.debug('rk_yc splitdata=%s ', data)\n local data1 = tonumber(string.sub(data, offset, offset + 1), 16)\n local data2 = tonumber(string.sub(data, offset + 2, offset + 3), 16)\n if tonumber(string.sub(data, offset, offset + 1), 16) < 0x33 then\n data1 = tonumber('1' .. string.sub(data, offset, offset + 1), 16)\n end\n if tonumber(string.sub(data, offset + 2, offset + 3), 16) < 0x33 then\n data2 = tonumber('1' .. string.sub(data, offset + 2, offset + 3), 16)\n end\n --log.debug('rk_yc splitdata1=%s splitdata1=%s', data1, data2)\n return data1, data2\nend\n INLINE 2018-12-03 15:01:14.34+08 2020-05-29 17:51:10.875+08 2018-12-03 \N
+666451eb-2cea-4777-83de-e5d671a5be5f ryzh_co2_2510 \N 锐研智华 1.0 e3655afc-a2a8-4bc3-801a-9c3019705a27 e3655afc-a2a8-4bc3-801a-9c3019705a27 f e3655afc-a2a8-4bc3-801a-9c3019705a27 Lua --//04 项目资料/2017-08/兰州/兰州大学光照、温室压和二氧化碳的项目/ry-vs09-485二氧化碳说明书.doc\nstart=function()\n log.debug("start %s, ctx=", "ryzh_co2_2510.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 1, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n ok,resp=ctx:ssend(buff,20000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n--0103020014B84B\n--moduleId=1\n--"co2": 20\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)/2==7) then\n \n local co2=iota.hexToShort(hex,3,'B') \n out.data = {\n co2=co2\n \n }\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend INLINE 2017-11-16 16:55:01.822+08 2018-02-28 18:32:12.221+08 2017-11-16 \N
+22419cd8-d0d1-4f79-92f4-17976bd5dd42 jcj_temp_1155 \N 北京九纯健JCJ100R 1.0 ed254182-aeaf-4f3c-9ee6-480154f64cae ed254182-aeaf-4f3c-9ee6-480154f64cae f ed254182-aeaf-4f3c-9ee6-480154f64cae Lua start=function()\n log.debug("start %s, ctx=", "jcj_temp_1155.lua",json.encode(device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 1: 模块号 \n buff=iota.appendHexByte(buff, 4, endian) -- 2: 指令: 0x04 = 采集\n buff=iota.appendHexWord(buff, 0, endian) \n buff=iota.appendHexWord(buff, 1, endian) -- 3: 类型=1\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 4: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n --print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)/2==7) then\n -- 模块 功能 数据长度 温度 CRC\n -- 1 1 1 2 2\n -- 01040203e8b98e moduleId=1\n --print("parsing data", hex)\n \n local temp = iota.hexToShort(hex,3,'B')/10.0;\n out.data = {\n temp=temp, \n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Temp":'..temp..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2017-08-28 19:50:41.085+08 2018-02-28 18:32:12.222+08 2017-08-26 \N
+97b6dd76-4b4c-42e7-88a4-52e338aab627 jdhs_gas_2511 \N 聚到合盛 1.0 ff0414b7-505b-4d85-bb09-f99bac5262a1 ff0414b7-505b-4d85-bb09-f99bac5262a1 f ff0414b7-505b-4d85-bb09-f99bac5262a1 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("load script %s, moduleId=%s", "jdhs_gas_2511.lua", device.props.moduleId or "[nil]")\nend\n\nonData=function(hex)\n log.debug("jdhs_gas_2511 onData(%s), dev=%s", hex, json.encode(device) )\n local out={\n type=1,\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local PM10 =iota.hexToInt(hex,3,'B')\n local PM25 =iota.hexToInt(hex,11,'B')\n local TSP =iota.hexToInt(hex,19,'B')\n out.data = { --需要测试\n PM25 = PM25,\n PM10 = PM10,\n TSP=TSP\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("jdhs_gas_2511 Data -- %s",json.encode(out))\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n local moduleNo=iota.hexToByte(data,0,'B')\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n if tonumber(device.props.moduleId)~=moduleNo then\n errormsg = 'moduleId is wrong'\n errcode = 1001\n return false\n end \n --iota.checkPlusSum16\n return true\n--crc\nend\n\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n INLINE 2017-10-31 15:04:32.708+08 2018-02-28 18:32:12.222+08 2017-10-29 \N
+d7b4876b-9c7a-4446-a47a-0d99d98b117b jzyg_weather_26 \N 锦州阳光气象科技有限公司 1.0 e54b85b0-151e-4b74-b360-a8ae65addd46 e54b85b0-151e-4b74-b360-a8ae65addd46 f e54b85b0-151e-4b74-b360-a8ae65addd46 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("load script %s, moduleId=%s", "jzyg_weather_26.lua", device.props.moduleId or "[nil]")\nend\n\nonData=function(hex)\n --350001030C17122007400703FF03FF007D007D007D007D007D010C0254FF9A2855FF99001700700068010E02F702F700CA008700171EA61FAA007A12AC00907171\n log.debug("jzyg_weather_26 onData(%s), dev=%s", hex, json.encode(device) )\n local out={\n type=1,\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local radiation1day =iota.hexToShort(hex,11,'B')*0.001\n local radiation2day =iota.hexToShort(hex,13,'B')*0.001\n local groundTemperature1 =iota.hexToShort(hex,15,'B')*0.1\n local groundTemperature2 =iota.hexToShort(hex,17,'B')*0.1\n local groundTemperature3 =iota.hexToShort(hex,19,'B')*0.1\n local groundTemperature4 =iota.hexToShort(hex,21,'B')*0.1\n local groundTemperature5 =iota.hexToShort(hex,23,'B')*0.1\n local temperature =iota.hexToShort(hex,25,'B')*0.1\n local humidity =iota.hexToShort(hex,27,'B')*0.1\n local dewPoint =iota.hexToShort(hex,29,'B')*0.01\n local airPressure =iota.hexToShort(hex,31,'B')*0.1\n local altitude =iota.hexToShort(hex,33,'B')*1\n local windSpeed =iota.hexToShort(hex,35,'B')*0.1\n local windSpeed2mins =iota.hexToShort(hex,37,'B')*0.1\n local windSpeed10mins =iota.hexToShort(hex,39,'B')*0.1\n local windDirection =iota.hexToShort(hex,41,'B')*1\n local radiation1 =iota.hexToShort(hex,43,'B')*1\n local radiation2 =iota.hexToShort(hex,45,'B')*1\n local groundHumidity =iota.hexToShort(hex,47,'B')*0.1\n local voltage =iota.hexToShort(hex,49,'B')*0.1\n local rainfall =iota.hexToShort(hex,51,'B')*0.1\n local visibility =iota.hexToShort(hex,53,'B')*1\n local visibility10mins =iota.hexToShort(hex,55,'B')*1\n local sunshine =iota.hexToShort(hex,57,'B')*1\n local CO2 =iota.hexToShort(hex,59,'B')*0.1\n local eCompass =iota.hexToShort(hex,61,'B')\n\n out.data = { --需要测试\n radiation1day = radiation1day,\n radiation2day = radiation2day,\n groundTemperature1=groundTemperature1,\n groundTemperature2=groundTemperature2,\n groundTemperature3=groundTemperature3,\n groundTemperature4=groundTemperature4,\n groundTemperature5=groundTemperature5,\n temperature=temperature,\n humidity=humidity,\n dewPoint=dewPoint,\n airPressure=airPressure,\n altitude=altitude,\n windSpeed=windSpeed,\n radiation1=radiation1,\n windSpeed2mins=windSpeed2mins,\n windSpeed10mins=windSpeed10mins,\n windDirection=windDirection,\n radiation1=radiation1,\n radiation2=radiation2,\n groundHumidity=groundHumidity,\n voltage=voltage,\n rainfall=rainfall,\n visibility=visibility,\n visibility10mins=visibility10mins,\n sunshine=sunshine,\n CO2=CO2,\n eCompass=eCompass,\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("jzyg_weather_26 Data -- %s",json.encode(out))\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n local module_check=iota.hexToShort(data,1,'B')\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jzyg_weather_26 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jzyg_weather_26 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n if tonumber(moduleNo)~=module_check then\n errormsg = 'moduleId is wrong'\n errcode = 1001\n return false\n end \n if string.len(data)~=130 then\n errormsg = 'length is not fit'\n errcode = 1001\n return false\n end \n --iota.checkPlusSum16\n return true\n--crc\nend\n\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n INLINE 2017-12-20 10:06:01.932+08 2018-03-30 09:47:11.934+08 2017-12-20 \N
+a2497ec0-71a1-4611-85eb-12a18c8aaa34 galaxyz_laser_9502 \N 上海盖勒克激光测距传感器 1.0 4544878d-c203-4924-a38f-5486d69d7613 4544878d-c203-4924-a38f-5486d69d7613 f 4544878d-c203-4924-a38f-5486d69d7613 Lua bit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n \nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n--02 协议分析/2017-03/1月第2周/华东--上海盖勒克--激光测距传感器/GLS-B40 说明书--上海盖勒克.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "galaxyz_laser_9502.lua", device.props.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module\n\telse\n\t\tmoduleNo=device.props.moduleId\n\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 3: 模块号\n buff=iota.appendHexByte(buff, 6, endian) -- 4: 指令: 0x01 = 采集\n buff=iota.appendHexByte(buff, 2, endian) -- 4: 指令: 0x01 = 采集\n buff=iota.appendHexByte(buff,LCR(buff),endian) -- 5: CRC\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n \tlog.debug("laser_9502:m=%s out=%s",moduleNo,result)\n\t\tctx:done(result)\n\telse\n\t log.debug("laser_9502: m=%s,received is not ok ",moduleNo)\n end\n \nend\n\n--6406823030302e333131c1\n--moduleId=100\n--"distance": 0.311\nunmarshall=function(hex,moduleNoStr)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n log.debug("laser_9502: m=%s,received hex=%s",moduleNoStr,hex)\n if IsValid(hex,moduleNoStr) then\n \n local len1=iota.hexToByte(hex,3,'B')\n local len2=iota.hexToByte(hex,4,'B')\n local len3=iota.hexToByte(hex,5,'B')\n local len4=iota.hexToByte(hex,6,'B')\n local len5=iota.hexToByte(hex,7,'B')\n local len6=iota.hexToByte(hex,8,'B')\n local len7=iota.hexToByte(hex,9,'B')\n\n local length=string.char(len1,len2,len3,len4,len5,len6,len7) \n log.debug("laser_9502: m=%s ,length=%s",moduleNoStr,length)\n local Distance=tonumber(length) * 1000 -- m --> mm\n out.data = {\n distance=Distance\n }\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else \n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n\nLCR=function(buff)\n local lcr = 0\n for i = 0, string.len(buff)/2-1 do\n lcr = lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)\n end \n lcr = bit:_rshift(lcr,8) + bit:_and(lcr,0xff)\n \tlcr = lcr + bit:_rshift(lcr,8)\n \tlocal value = bit:_and(bit:_not(lcr) + 1,0xff)\n return value\nend \n \nIsValid=function(data,moduleStrCheck)\n log.debug('laser_9502:开始校验 data=%s',data)\n if data == nil or string.len(data)/2 ~= 11 then\n errormsg = 'Data is nil or InvalidLength'\n errcode = 1001\n return false\n end\n log.debug("laser_9502: "..'长度校验通过')\n if iota.hexToByte(data,1,'B') ~= 0x06 or iota.hexToByte(data,2,'B') ~= 0x82 then\n errormsg = 'CMD is not right'\n errcode = 1001\n return false\n end\n log.debug("laser_9502: "..'CMD校验通过')\n if tostring(moduleStrCheck) ~= tostring(iota.hexToByte(data,0,'B')) then \t\n errormsg = 'Invalid ack moduleId'\n errcode = 1004\n return false\n end\n log.debug("laser_9502: m=%s 数据校验通过",moduleStrCheck)\n return true\nend\n\n\n \n\n INLINE 2017-09-07 19:39:25.018+08 2018-04-16 18:22:01.406+08 2017-09-03 \N
+cbf73de3-cf1e-400f-b1b6-af60c861a09f hzyz_mass_5301 \N 805TS & 805BS 1.0 b1797f0b-c735-409e-89f5-ab695859f076 b1797f0b-c735-409e-89f5-ab695859f076 f b1797f0b-c735-409e-89f5-ab695859f076 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "hzyz_mass_5301.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\tlocal moduleNo=device.uplink.props.module \n\tlog.debug("hzyz_mass_5301 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\n buff=iota.appendHexByte(buff,0x01, endian) \n buff=iota.appendHexByte(buff, 0x30, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexByte(buff, 0x47, endian) \n\tbuff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x74, endian) \n\n log.debug("hzyz_mass_5301,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '采集超时'} \n\t log.debug("hzyz_mass_5301 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n--01310220202020313037324b4720033b\n--1072kg\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("hzyz_mass_5301 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local hexMass =string.sub(hex,7,-11)\n\t\tlocal mass =tonumber(HextoStr(hexMass))\n\t\t\n log.debug("hzyz_mass_5301 m=%s,temperature=%s ",moduleNoStr,temperature)\n out.data = { \n mass=tonumber(string.format('%0.3f',mass))\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("hzyz_mass_5301 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 16 then\n errormsg = string.format('数据长度无效[%s]≠16',string.len(data)/2)\n errcode = 1002\n return false\n end\n \n if string.sub(data, 1, 2) ~= '01' then\n errormsg = string.format('无效的数据指令=%s', data)\n errcode = 1003\n return false\n end\n return true\n--crc\nend\n\n \nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n INLINE 2018-12-08 17:36:00.638+08 2018-12-14 09:48:36.219+08 2018-12-08 \N
+8338feff-fcd2-4920-9601-149a610d9887 hg_Inclination_1515 \N 1.0 91d43dcc-b4ec-4aba-91d9-2b1509cff4db 91d43dcc-b4ec-4aba-91d9-2b1509cff4db f 91d43dcc-b4ec-4aba-91d9-2b1509cff4db Lua --//01 协议文档/5月第1周/上海辉格科技发展有限公司/SST20 通讯协议 -- RS485 ModBus协议 V1.1 2014-10-20.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "hg_Inclination_1515", device.props.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0xe8, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x03, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n else\n log.debug("SSend error!")\n end\n ctx:done(result)\nend\n\n --0104068540008a1f7c56f2\n --moduleId=1 range=(-10,10)\n --"angleX": -19.180272835474717,\n\t\t--"angleY": 0.08423108615375224,\n\t\t--"temp": 30.74739829706717\n\nunmarshall=function(hex)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then \n\t\tlocal range=device.props.range\n local subrange=split(range,',')\n --log.debug('subrange[1]'..subrange[1])\n --去除括号\n subrange[1]=string.sub(subrange[1],2,-1)\n subrange[2]=string.sub(subrange[2],1,-2)\n local angleX = iota.hexToShort(hex,3,'B')/32767.0*(tonumber(subrange[2])-tonumber(subrange[1]))\n local angleY = iota.hexToShort(hex,5,'B')/32767.0*(tonumber(subrange[2])-tonumber(subrange[1]))\n local temp=iota.hexToShort(hex,7,'B')/32767.0*125.0\n \n out.data = {\n angleX=angleX,\n angleY = angleY,\n\t\t\ttemp=temp\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data)\n log.debug('开始校验数据')\n if data == nil or string.len(data)/2 ~= 11 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x04 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('数据校验通过')\n return true\n--crc\nend\n\nsplit=function(s, delim)\n if type(delim) ~= "string" or string.len(delim) <= 0 then\n return\n end\n\n local start = 1\n local t = {}\n while true do\n local pos = string.find (s, delim, start, true) -- plain find\n if not pos then\n break\n end\n\n table.insert (t, string.sub (s, start, pos - 1))\n start = pos + string.len (delim)\n end\n table.insert (t, string.sub (s, start))\n\n return t\nend\n\t\n \n INLINE 2017-12-06 09:41:17.413+08 2018-02-28 18:32:12.222+08 2017-12-06 \N
+e5eeef06-b9fc-4418-8874-308658cdc66d ml_Level_1910 \N 1.0 f319cb97-0bfb-4e76-a02d-89c4ce98f5b4 f319cb97-0bfb-4e76-a02d-89c4ce98f5b4 f f319cb97-0bfb-4e76-a02d-89c4ce98f5b4 Lua --//01 协议文档/6月第4周/上海麦伦仪表有限公司/分体PS/超声波液位仪ModBus标准协议.doc\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "ml_Level_1910", device.props.moduleId or "[nil]")\n\n\t\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\n if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x02, endian)\n buff=iota.appendHexByte(buff, 0x00, endian) \t\t\n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\n end\nend\n--020308406449ba3fb76c8bbdb2\n--moduleId=2\n--level = 3567, \n--emptyHigh=1433\n\nunmarshall=function(hex)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\n local level = iota.hexToFloat(hex,3,'B')*1000.0;\n local emptyHigh=iota.hexToFloat(hex,7,'B')*1000.0;\n out.data = {\n level = level, \n\t\t\temptyHigh=emptyHigh\n }\n\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = 'CMD is not right'\n errcode = 1001\n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid ack moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2017-12-06 13:39:02.208+08 2018-02-28 18:32:12.222+08 2017-12-06 \N
+598d9e9a-4e6f-4ce0-b6f0-1f2b825fb7fc nengh_FM_1 \N PM 1.0 ad0cd544-aed4-4670-9d17-f3e717a9a59b ad0cd544-aed4-4670-9d17-f3e717a9a59b f ad0cd544-aed4-4670-9d17-f3e717a9a59b Lua bit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n\nstart=function()\n log.debug("start %s, moduleId=%s", "nengh_FM_1.lua",device.props.moduleId or "null")\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 1: 模块号 \n buff=iota.appendHexByte(buff, 4, endian) -- 2: 指令: 0x04 = 采集\n buff=iota.appendHexWord(buff, 1, endian) \n buff=iota.appendHexWord(buff, 2, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0)\n \n\n log.debug("nengh_FM_1 ssend= %s", buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n log.debug("nengh_FM_1: Unmarshall data is %s", hex)\n --4f0404007b00490000\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==18) then\n \n local PM10 = iota.hexToShort(hex,3,'B')\n local PM25 = iota.hexToShort(hex,5,'B')\n\n out.data = {\n PM10=PM10,\n PM25=PM25, \n }\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n\n\n \n\n\n \n\n INLINE 2017-11-23 10:22:58.429+08 2018-02-28 18:32:12.222+08 2017-11-21 \N
+6bf88814-ee3c-4c50-b47e-e60248e91670 mqtt \N 1 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f 56031544-f3e0-407f-9ffa-1a54742ecfa7 Lua start=function()\n --[[\n log.debug("start")\n local msg={\n o="u",\n t="DeviceMeta",\n k={\n id="08c0c71f-fa68-4ae4-bae0-5ab9e27f2f75"\n }\n }\n local req={\n type="mqtt",\n payload=json.encode(msg),\n }\n print("req=",json.encode(req))\n local ack,ok=ctx:asend(req, 2000) \n print("result = ", ok, ack)\n ctx:notify("{}")\n ]]--\nend\n\nonData=function(data)\n if data ~=nil then\n log.debug("ondata %s", json.encode(data))\n end\nend\n\nctx:notify INLINE 2018-08-17 11:26:44.619+08 2018-12-17 17:29:35.141+08 2018-08-17 \N
+6e53d045-d373-4098-9ee3-93ceceaf2323 CZJTM_acqunit_3001 \N 1.0 d5fa5193-b237-4a60-b82a-165c033e2596 d5fa5193-b237-4a60-b82a-165c033e2596 f d5fa5193-b237-4a60-b82a-165c033e2596 Lua start=function()\n --log.debug("CZJTM_acqunit_3001 root device = %s", json.encode(device))\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n \n\t\t\t\n\t\t\t\n\t\t\tlocal projectId=0\n\t\t\tlocal buff='f00f'\n\t\t\tbuff=iota.appendHexWord(buff, 10, endian) ---2: 传感器类型\n\t\t\t--buff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x01, endian) -- 1: 指令: 0x01 = 采集\n\t\t\t--buff=iota.appendHexByte(buff, channelNo, endian) -- 1: 通道号\n\t\t\tbuff=iota.appendHexByte(buff, 0x67, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0)\n \tlocal resultData =json.encode(out)\n ctx:done(resultData)\nend INLINE 2019-01-21 14:22:49.184+08 2019-01-21 14:22:49.184+08 2019-01-21 \N
+e1b859b1-b04b-4faa-95a8-8d0b006d392d klha_tempHumi_1105 \N 1.0 352a31c7-1e5e-4c52-85f6-2fa692d0fda9 352a31c7-1e5e-4c52-85f6-2fa692d0fda9 f 352a31c7-1e5e-4c52-85f6-2fa692d0fda9 Lua --//PMO/02 产品协议/SavoirCloud/01 协议/3月第5周/北京昆仑海岸传感技术有限公司/2014&2015选型手册-北京昆仑海岸传感技术有限公司.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "klha_tempHumi_1105", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("klha_tempHumi_1105 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("klha_tempHumi_1105 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n buff=iota.appendHexByte(buff,moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n buff=iota.appendHexCrc(buff, 'B' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("SSend error!")\n end\n ctx:done(result)\nend\n\n--01030400250019322a\n--moduleId=1 \n--"humidity": 2.5,\n--"temp": 3.7\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local temp = iota.hexToShort(hex,3,'B')/10.0\n local humidity = iota.hexToShort(hex,5,'B')/10.0\n \n out.data = {\n\t\t\ttemp=temp,\n\t\t\thumidity=humidity\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('开始校验数据')\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleStrCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2017-12-12 14:28:50.236+08 2018-03-30 10:14:44.858+08 2017-12-12 \N
+fa70ca44-5363-495f-ba20-8572ecd3b398 fs_cloudvibrate_mop \N 云振动配置下发 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n --log.debug("fs_cloudvibrate_mop:device=%s",json.encode(device))\n local req = {\n type = "idau",\n payload = ""\n }\n local mop = {\n M = "c_vibf2",\n O = "S",\n P = { } -- 荷载\n }\n\n\n local linkcnt = #(device.dnlinks[1].devices)\n --log.debug("fs_cloudvibrate_mop:linkcnt=%d",linkcnt)\n\n \tlocal trmode = 0\n \tif device.props.triggermode == "软件触发" then\n \ttrmode = 0\n end\n \tif device.props.triggermode == "模拟硬件触发" then\n \ttrmode = 3\n end\n \tif device.props.triggermode == "数字硬件触发" then\n \ttrmode = 5\n end\n \tif device.props.triggermode == "硬件模拟数字触发" then\n \ttrmode = 6\n end\n\n local demode = 0\n \tif device.props.devicermode == "从设备异步" then\n \tdemode = 0\n end\n \tif device.props.devicermode == "主设备异步" then\n \tdemode = 2\n end\n \tif device.props.devicermode == "主设备同步" then\n \tdemode = 1\n end\n local set = {\n \tID=tonumber(device.dnlinks[1].devices[1].uplink.props.module) or 1,\n PA=device.props.uploadprocess,\n TT = trmode, \n TI=tonumber(device.props.triggerint),\n DM=demode, --设备工作模式\n ISH=tonumber(device.props.hour),--间隔触发启动时间\n ISM=tonumber(device.props.minute),\n ISS=tonumber(device.props.second),\n IAS=tonumber(device.props.acqtimeint),--间隔触发采样时长\n TAS=tonumber(device.props.acqtiming),--定时触发采样时长\n TTS={},CHS ={}\n }\n mop.P = set\n\tlocal arry= Split(device.props.startiming1, ":")\n\tif arry[1] == "" then \n\n\telse\n\t\tlocal startiming1 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming1)\n\tend\n\tarry= Split(device.props.startiming2, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\t\t\n\t\tlocal startiming2 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming2)\n\tend\n\tarry= Split(device.props.startiming3, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\n\t\tlocal startiming3 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming3)\n\tend\n\tarry= Split(device.props.startiming4, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\n\t\tlocal startiming4 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming4)\n\tend\n\tarry= Split(device.props.startiming5, ":")\t\n\tif arry[1] == "" then \n\n\telse\t\n\t\tlocal startiming5 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming5)\n\tend\n\tarry= Split(device.props.startiming6, ":")\t\n\tif arry[1] == "" then \n\n\telse\n\t\tlocal startiming6 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\t\n\t\t--table.insert(mop.P.TTS, startiming6)\n\tend\n\t\n \tfor i = 1, linkcnt, 1 do \n local link = device.dnlinks[1]\n local dev = link.devices[i]\n\t\t--log.debug("fs_cloudvibrate_mop:dev=%s", json.encode(dev))\n local dev_inf = link.devices[i].uplink\n \tlocal samolepoint = tonumber(dev_inf.props.samplefreq) * tonumber(dev_inf.props.duration)\n \tlocal trirmode = 0\n if dev_inf.props.triggermode == "绝对值" then\n trirmode = 0\n end\n if dev_inf.props.triggermode == "上升沿" then\n trirmode = 1\n end\n if dev_inf.props.triggermode == "下降沿" then\n trirmode = 2\n end\n if dev_inf.props.triggermode == "峰峰值" then\n trirmode = 3\n end\n local joinmode = 0\n if dev_inf.props.triggerjoin == "不参与" then\n joinmode = 0\n end\n if dev_inf.props.triggerjoin == "参与" then\n joinmode = 1\n end\n\t\tif dev_inf.props.amplification == "1" then\n\t\t\tamplify = 0\n end\n\t\tif dev_inf.props.amplification == "10" then\n\t\t\tamplify = 1\n end\n\t\tif dev_inf.props.amplification == "100" then\n\t\t\tamplify = 2\n end\t\t\n\t\tif dev_inf.props.amplification == "1000" then\n\t\t\tamplify = 3\n end \n\t\tif dev_inf.props.das == 'true' then\n\t\t\tdasvalue = 1\n\t\telse\n\t\t\tdasvalue = 0\n\t\tend\t\t\n\t\t\n local sensor = {\n CH = tonumber(dev_inf.props.channel),--通道号\n GA = amplify,--GainAmplifier放大倍数\n SF = tonumber(dev_inf.props.samplefreq),--SampleFreq 采样频率\n FF = tonumber(dev_inf.props.filterfreq),--FilterFreq 过滤频率\n DA = tonumber(dev_inf.props.dcdriftadj),--DCDriftAdj 直流漂移校准参数\n DAS = dasvalue,--DAS, 硬件DA启用? \n AA = tonumber(dev_inf.props.amplitudeadj),--AmplitudeAdj 幅值修正参数\n TL = tonumber(dev_inf.props.triglevel),-- TriggerLevel 触发电平\n TM = trirmode,--TriggerMode触发方式\n TJ = joinmode,--TriggerJoin 参与触发方式\n SR = samolepoint ,--SampleRate 采样点数1\n LP = tonumber(dev_inf.props.lagpoint),--LagPoint 滞后点数\n }\n table.insert(mop.P.CHS, sensor) \n end\n\tlocal resultstr = json.encode(mop)\n\tresultstr =\tresultstr:gsub(":null",":[{},{},{},{},{},{}]")\n\t--log.debug("fs_cloudvibrate_mop finish parse = %s",resultstr)\n req.payload = resultstr\n \t\n log.debug("fs_cloudvibrate_mop request=%s", resultstr)\n\n local ok, ack = ctx:ssend(req, 60000)\n result = {\n result = nil,\n type = 1,\n data = {\n ack = json.encode(ack)\n }\n }\n log.debug("fs_cloudvibrate_mop result=%s", json.encode(result))\n ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n if t == "host" then\n return 1\n elseif t == "relay" then\n return 2\n end\n return 3\nend\n\nfunction Split(szFullString, szSeparator) \n\tlocal nFindStartIndex = 1 \n\tlocal nSplitIndex = 1 \n\tlocal nSplitArray = {} \n\twhile true do \n\t\tlocal nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) \n\t\tif not nFindLastIndex then \n\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) \n\t\t\tbreak \n\t\tend \n\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) \n\t\tnFindStartIndex = nFindLastIndex + string.len(szSeparator) \n\t\tnSplitIndex = nSplitIndex + 1 \n\tend \n\treturn nSplitArray \nend INLINE 2018-09-19 14:43:18.829+08 2020-07-24 17:38:17.842+08 2018-09-19 \N
+2ed40a11-7a2b-4aa7-a649-28b9d72efbf8 yyzn_Analog_1801 \N 云扬智能 储液罐监测 模拟量采集模块 1.0 275e6287-8ef6-4bc1-8e57-72f3d6404d8f 275e6287-8ef6-4bc1-8e57-72f3d6404d8f f 275e6287-8ef6-4bc1-8e57-72f3d6404d8f Lua --//01 协议文档/5月第3周/上海华测创时/振弦采集仪通讯协议.doc\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nstart=function()\n log.debug("load script %s, moduleId=%s", "yyzn_1801.lua", device.props.moduleId or "[nil]") \nlocal endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n \n log.debug("yyzn_1801:LUA:根设备devices : data is =%s", json.encode(subdevices))\n \tfor index,child in pairs(subdevices) do\n\t\t log.debug("yyzn_1801:LUA:子设备subdevices=%s : data is =%s", index,json.encode(subdevices))\n \tlocal moduleNo=tonumber(child.props.moduleId) \n local channelNo=tonumber(child.props.channelId)\n if child.uplink.props ~='null' then \n \t moduleNo=tonumber(child.uplink.props.module) \n channelNo=tonumber(child.uplink.props.channel)\n end\n log.debug("yyzn_1801:模块%s通道%s的deviceId是%s:",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\t \n\t\t\tbuff=iota.appendHexByte(buff, moduleNo, endian)\n buff=iota.appendHexByte(buff, 0x03, endian) \n\n\t\t\tbuff=iota.appendHexWord(buff, channelNo+3, endian) -- 1: 通道号 \n\t\t\tbuff=iota.appendHexWord(buff, 0x01, endian)\t\n\t\t\tbuff=iota.appendHexCrc(buff, 'L',0) \n\t\t\t\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n log.debug("yyzn_1801:模块%s通道%s的数据接收成功,开始解析",moduleNo,channelNo) \n\t\t\tresult = unmarshall(resp,child)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("yyzn_1801:模块%s通道%s的数据接收失败",moduleNo,channelNo) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("yyzn_1801:".."subdevices是nil")\n \treturn nil\n end\n\t\t\n\tlog.debug('yyzn_1801:out序列化')\n\tlocal resultData =json.encode(out)\n log.debug("yyzn_1801:out序列化结果 : out is =%s", json.encode(out))\n ctx:done(resultData)\t\n\t\n\t\nend\n\n\n-- 0103023a28aafa analog=14.888\nunmarshall=function(hex,subDevice)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n\tlocal subModuleId=subDevice.props.moduleId\n\tlocal subChannelId=subDevice.props.channelId\n if subDevice.uplink.props ~='null' then \n moduleNo=subDevice.uplink.props.module\n channelNo=subDevice.uplink.props.channel\n end\n\tlog.debug("yyzn_1801:模块%s通道%s的deviceId是:%s",subModuleId,subChannelId,subDevice.id)\n local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n if ErrorCode then \n \n \n\t\tlocal rawData = iota.hexToShort(hex,3,'B')*0.001;\n\t\tlog.debug("yyzn_1801:模块%s通道%s的原始值是:rawData=%s",subModuleId,subChannelId,rawData)\n log.debug("yyzn_1801:模块%s通道%s的参数值是:=%s",subModuleId,subChannelId,json.encode(subDevice.uplink.capabilities[1].props))\n \n\t\tlocal Phy=0\n --if subDevice.device.formula == "phy = (dH - dL) / (aH-aL) *(data1-aL) + dL" then --模拟量采集模块数据转换公式\n\t\t\t\tlocal aH = subDevice.uplink.capabilities[1].formula.props.aH\n\t\t\t\tlocal aL = subDevice.uplink.capabilities[1].formula.props.aL\n\t\t\t\tlocal dH = subDevice.uplink.capabilities[1].formula.props.dH\n\t\t\t\tlocal dL = subDevice.uplink.capabilities[1].formula.props.dL\n\t\t\t\tphy = (dH - dL) / (aH-aL) *(rawData-aL) + dL;\n\t\t log.debug("yyzn_1801:模块%s通道%s的a=%s,b=%s,phy=%s",subModuleId,subChannelId,a,b,Phy)\n\t\t--end\n \n \n --analog=tonumber(string.format("%0.3f",rawData)),\n\t\tsubData.data={\n \tphysicalvalue=tonumber(string.format("%0.3f",phy))\n\t\t\t\t\t}\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n log.debug('yyzn_1801:开始校验数据')\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n \n--crc\n \t--判断数据有效性\t\t\t\n local crcH = iota.hexToByte(data,5,'B');\t \n local crcL = iota.hexToByte(data, 6,'B');\t\n\n log.debug("yyzn_1801:crcH等于:%s",crcH)\n log.debug("yyzn_1801:crcL等于:%s",crcL)\n --判断CRC16正确性\n local checkCrc16=string.sub(data,-4,-1)\n --log.debug("checkCrc16等于:%s",checkCrc16)\n local dataCopy=string.sub(data,1,-5)\n dataCopy=iota.appendHexCrc(dataCopy, 'B' ,0)\n --log.debug("yyzn_1801:dataCopy+CRC等于:%s",dataCopy)\n local dataCopycrcH = iota.hexToByte(dataCopy,5,'B');\t \n local dataCopycrcL = iota.hexToByte(dataCopy, 6,'B');\t\n\n --log.debug("yyzn_1801:dataCopycrcH等于:%s",dataCopycrcH)\n --log.debug("yyzn_1801:dataCopycrcL等于:%s",dataCopycrcL)\n local isCheckCrcOK=(crcH==dataCopycrcL and crcL==dataCopycrcH)\n if isCheckCrcOK ~=true then \n \tlog.debug("yyzn_1801:isCheckCrcOK等于:%s",isCheckCrcOK)\n errormsg = 'Hex crc16 False'\n errcode = 1004\n return false\n end\n log.debug('yyzn_1801:数据校验通过')\n return true\nend INLINE 2017-08-28 14:23:56.418+08 2018-05-21 15:18:52.437+08 2017-08-26 \N
+d246da1e-bc3c-4ecc-9afa-d4d0137a3e89 协议-kafak \N 1 56031544-f3e0-407f-9ffa-1a54742ecfa7 56031544-f3e0-407f-9ffa-1a54742ecfa7 f 56031544-f3e0-407f-9ffa-1a54742ecfa7 Lua start=function()\n log.debug("start")\n local msg={\n payload="testing kafka..."\n }\n local req={\n type="kafka",\n payload=json.encode(msg),\n }\n print("req=",json.encode(req))\n local ack,ok=ctx:asend(req, 2000) \n print("result = ", ok, ack)\n ctx:notify("{}")\nend\n\nonData=function(data)\n log.debug("ondata")\nend\n\n\n\n INLINE 2018-08-17 11:35:24.175+08 2018-12-17 17:29:01.949+08 2018-08-17 \N
+a51beec3-ab8a-4ab2-9796-21189779b36c 123456 \N 1.12 5080baff-a15e-42e5-ae75-58f9b31c4576 5080baff-a15e-42e5-ae75-58f9b31c4576 f 5080baff-a15e-42e5-ae75-58f9b31c4576 Lua ‘’;ji'j'jp'jp'\njopjpoidffdbjhsdf\nsjdfksdjfzkdjsa\ndjfsdjfjsdfnjsfdj\n INLINE 2018-05-28 13:57:00.23+08 2018-05-28 14:02:13.536+08 2018-05-28 \N
+4c032273-d5ed-46a2-b362-da219224cac5 123456 \N 1.12 5080baff-a15e-42e5-ae75-58f9b31c4576 5080baff-a15e-42e5-ae75-58f9b31c4576 f 5080baff-a15e-42e5-ae75-58f9b31c4576 Lua 020202\n\nsdfgbasd\n阿瑟的符号就开始对方as\n按实际东方会计师的 INLINE 2018-05-28 14:34:05.065+08 2018-05-28 14:34:05.065+08 2018-05-28 \N
+1e3a9533-745a-4c0d-a998-256576a85cab anxin_inclinometer_1 \N 测斜,主动上传 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start=function()\n log.debug("anxin_inclinometer_1.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n log.debug("anxin_inclinometer_1.lua: Data, ctx=%s",hex)\n local out={\n data ={},\n result = {}\n }\n --ff41584a23313832363036333634323923ffffffffffffff000200010cf15b0b9ffe00010002ffffffff4f18eeee\n\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local xData = iota.hexToShort(hex,34,'B')/1000.0;\n local yData = iota.hexToShort(hex,36,'B')/1000.0;\n --local zData = iota.hexToShort(hex,38,'B')/1000.0;\n --local temp = iota.hexToShort(hex,40,'B')/100.0;\n \n out.data = { \n anglex=xData,\n angley=yData,\n --anglez=zData,\n --temperature=temp\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("anxin_inclinometer_1: cloudvibrate=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'anxin_inclinometer_1:Data is nil'\n errcode = 1001\n return false\n end\n local length= iota.hexToByte(data,28,'B')\n if (string.len(data)/2~=(length+34)) then\n errormsg = 'anxin_inclinometer_1:Data length is wrong'\n errcode = 1001\n return false\n end\n local moduleId= iota.hexToShort(data,26,'B')\n if (device.uplink.props.module~=tostring(moduleId)) then\n errormsg = 'anxin_inclinometer_1:module is wrong'\n errcode = 1001\n return false\n end\n local subdata=string.sub(data,1,-9)\n local crc=iota.appendHexCrc(subdata, 'B' ,0)\n log.debug("anxin_inclinometer_1.lua: crc, ctx=%s",crc)\n local subdatacrc=string.sub(data,1,-5)\n log.debug("anxin_inclinometer_1.lua: subdatacrc, ctx=%s",subdatacrc)\n if (string.lower(crc)~=string.lower(subdatacrc)) then\n errormsg = 'anxin_inclinometer_1:crc is wrong'\n errcode = 1001\n return false\n end\n \n return true\n \nend\n \n INLINE 2018-05-28 10:10:38.927+08 2018-05-28 15:30:52.961+08 2018-05-28 \N
+d3970047-c379-4882-af09-b7ecea4bd65a fs_Inclin_OLD_1500 \N 老版本测斜fs_Inclination_OLD_1500 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/09固定测斜协议.xls\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "fs_Inclination_OLD_1500", device.uplink.props.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("fs_Inclination_OLD_1500 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("fs_Inclination_OLD_1500 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n\t\t\n\t\tbuff=iota.appendHexByte(buff, 0xfe, endian) \n buff=iota.appendHexByte(buff, 0x43, endian) \n buff=iota.appendHexByte(buff, 0x58, endian) \t\t\n buff=iota.appendHexWord(buff, device.uplink.props.moduleId, endian) -- 模块号\n\t\tbuff=buff.."00000000000000000000"\n local xorbuff=iota.hexCheckXorSum(buff,0) \n \t\tbuff=iota.appendHexByte(buff, xorbuff, endian)\n log.debug("fs_Inclination_OLD_1500 xorbuff是"..xorbuff)\n\t\tbuff=iota.appendHexByte(buff, 0xef, endian)\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug(" fs_Inclination_OLD_1500 SSend error ok is false!")\n end\n ctx:done(result)\nend\n\n--fe4358000020cc0b002f1c0d002c0313ef\n--moduleId=8396\n--"angleX": 0.7911111111111111,\n--"angleY": -0.7341666666666666\n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local xminus = iota.hexToByte(hex,7,'B')\n local xdegree = iota.hexToByte(hex,8,'B')\n\t\tlocal xcent = iota.hexToByte(hex,9,'B')/60.0\n\t\tlocal xsec = iota.hexToByte(hex,10,'B')/3600.0\n\t\t\n\t\tlocal yminus = iota.hexToByte(hex,11,'B')\n local ydegree = iota.hexToByte(hex,12,'B')\n\t\tlocal ycent = iota.hexToByte(hex,13,'B')/60.0\n\t\tlocal ysec = iota.hexToByte(hex,14,'B')/3600.0\n \n\t local angleX = xdegree + xcent + xsec;\n local angleY = ydegree + ycent + ysec;\n\t \n\t if (xminus == 0x0D) then \n angleX = -angleX;\n\t\tend \n if (yminus == 0x0D) then\n angleY = -angleY;\n\t\tend\n out.data = {\n\t\t\tanglex=angleX,\n\t\t\tangley=angleY\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('fs_Inclination_OLD_1500 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 17 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0xfe or iota.hexToByte(data,1,'B') ~= 0x43 or iota.hexToByte(data,2,'B') ~= 0x58 or iota.hexToByte(data,16,'B') ~= 0xef then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if moduleStrCheck ~= tostring(iota.hexToUShort(data,5,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('fs_Inclination_OLD_1500 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2017-12-14 16:32:48.218+08 2018-06-21 17:04:40.831+08 2017-12-14 \N
+154ad249-521a-4c6b-b5d5-d0b54aaf71bc anXin_LVDT_9113 \N 安信LVDT(请求应答) 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0xFF, endian) --1: 帧头\n buff=iota.appendHexByte(buff, 0x41, endian)\n buff=iota.appendHexByte(buff, 0x58, endian)\n buff=iota.appendHexByte(buff, 0x4a, endian)\n buff=iota.appendHexWord(buff, 5, endian) -- 2: 类型=1\n buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 3: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 4: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 5: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,4000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==30) then\n -- 2 2 1 4 4 2\n -- \n \n --print("parsing data", hex)\n local distance = iota.hexToInt(hex,9,'B')/ 10000\n out.data = {\n distance=distance\n }\n \n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2017-08-31 19:39:19.72+08 2019-12-23 15:40:21.917+08 2017-08-28 \N
+fffec7fc-706e-4f38-bb9e-8a6b284d28bf ryzh_temphumi_1165 \N 锐研智华 温湿度气压 1.0 e3655afc-a2a8-4bc3-801a-9c3019705a27 e3655afc-a2a8-4bc3-801a-9c3019705a27 f e3655afc-a2a8-4bc3-801a-9c3019705a27 Lua -- //04 项目资料/2017-08/兰州/兰州大学光照、温室压和二氧化碳的项目/RY-WSY301-485温湿压.doc\nstart=function()\n log.debug("start %s, ctx=", "ryzh_temphumi_1165.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,20000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n--FF030619AD1BE427155A2C \n--moduleId=255 humidity": 71.4,"pressure": 100.05,"temperature": 25.73\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==22) then\n \n local Temperature=iota.hexToShort(hex,3,'B')/100.0-40; \n local Humidity=iota.hexToShort(hex,5,'B')/100.0; \n local Pressure =iota.hexToShort(hex,7,'B')/100.0; \n out.data = {\n temperature=Temperature,\n humidity=Humidity,\n pressure=Pressure\n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend INLINE 2017-10-31 16:21:09.151+08 2018-02-28 18:32:12.223+08 2017-10-27 \N
+37eb4d94-3143-426f-bb36-bbb57cc647b5 ReShinel_Laser_9513 \N 1.0 88b38dff-0f2e-4ff5-bc36-089db915aac6 88b38dff-0f2e-4ff5-bc36-089db915aac6 f 88b38dff-0f2e-4ff5-bc36-089db915aac6 Lua -- //04 项目资料/2017-06/上海誉煊-干滩水库/最新协议/上海誉煊电子技术有限公司激光测距传感器ModBus协议.pdf\n--[[\n协议号: 9513;\n协议名: modbus 激光测距.\n]]--lucas\nstart=function ()\n log.debug("load script %s, moduleId=%s", "ReShinel_Laser_9513.lua", device.props.moduleId or "[nil]")\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序 01 03 00 92 00 02 65 e6 模块1\n\t-- 模块号\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE); -- 1: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x03, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);-- 2: 读取寄存器地址\n buff=iota.appendHexByte(buff, 0x92, BE);\n buff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x02, BE);-- 3: \t读取寄存器数量\n\tlocal temp=buff;--交换CRC16高地位\n\ttemp=iota.appendHexCrc(temp, 'B' ,0) --CRC16\n\tlocal crcH=string.sub(temp,-2,-1)\n\tlocal crcL=string.sub(temp,-4,-3)\n\tbuff=buff..crcH;\n\tbuff=buff..crcL;\t\n\treturn buff\nend\n\n-- returns: 结果, 原始值, 计算后值\n--正确回复 01030400000B10FCCF moduleId=1\n--原始数据 距离0.2832*1000 mm\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n log.debug(string.format('decode: %s', data));\t\n\t\t--计算原始值\n\t\tlocal distance = iota.hexToInt(data, 3,'B')/10000.0;\n \tout.data = {\n\t\tdistance=distance*1000\t\n\t\t};\t\n\telse\t\t\t\t\n\t\tout.result = {code=errcode,msg=errormsg} \t\t\t\t\t\t\n\tend\n\treturn json.encode(out)\nend\n\nIsValid=function(data)\n log.debug('开始校验数据')\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('数据校验通过')\n return true\n--crc\nend\n INLINE 2017-09-12 20:25:06.782+08 2018-02-28 18:32:12.223+08 2017-09-12 \N
+1e488dad-bc1e-4572-b36c-f1e48ded987e dongshuan \N 东爽写的 1.0 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 f 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 Lua --//D:\\SVN\\201808项目\\20180828项目资料提交\\3、北京数泰项目--康飞\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\nstart=function()\n ctx:asend("010203")\n log.debug("shutaiDT14300 device=%s", json.encode(device))\nend\n\nonData=function(hex,index)\n log.debug("shutaiDT14300 hex=%s[%s] type(index)=[%s]",hex,index,type(index))\n if index==2 then\n ok=ctx:asend("670d0a") --"g/n/r" DT运行当前工作计划\n ctx:sleep(1)\n ok=ctx:asend("2f480d0a") --"/H/n/r" DT 按照指定格式 上报数据\n end\n\t--log.debug("shutaiDT14300 device =%s", json.encode(device))\n \n local out={\n data ={},\n result = {},\n type=2\n }\n \n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n sData=HextoStr(hex)\n log.debug("shutaiDT14300 sData= %s",sData)\n --获取子字符串表\n local allResponse=Split(sData,";")\n local allResponseCount=table_leng(allResponse)\n --移除表内的“”和nil\n for i=allResponseCount,1,-1 do\n v=allResponse[i]\n if v=='' or v==nil or string.len(v)<10 then\n table.remove(allResponse,i)\n --log.debug("shutaiDT14300 表内的“”和nil 移除元素k=%s v=%s",i,v)\n end\n end\n\n --分析单类数据\n local resplength=table_leng(allResponse)\n local phys={} --存储所有通道物理量\n local moduleNo --模块号 \n local dateTimeStr\n local timenow\n for k,v in ipairs(allResponse) do\n dataIndex=string.sub(v,1,1)--单条数据首字母 D为设备信息 ,A为数据\n\n if dataIndex=='D' then\n local otherData=Split(v,',')\n moduleNo=otherData[2]\n local dateStr=otherData[4]\n local timeStr=otherData[5]\n dateTimeStr=string.format("%s %s",dateStr,timeStr)\n timenow=unixtimestamp(dateTimeStr)\n elseif dataIndex=='A' then\n local singleData=Split(v,',')\n for sensorKey,sensorValue in ipairs(singleData) do\n if sensorKey>2 then\n phys[sensorKey-2]=singleData[sensorKey]\n end\n end\n end\n end\n\n --匹配数据部分\n \t\t\t\n -- local childDevice={}--测试用\n -- childDevice.id=123 --测试用\n\n for index,childDevice in pairs(device.dnlinks[1].devices) do\n log.debug("shutaiDT14300 遍历子设备 是否匹配设备child=%s",json.encode(childDevice))\n \n local channelStrCheck=childDevice.uplink.props.channel\n log.debug("shutaiDT14300 子设备模块通道 接口获取 c=%s ",channelStrCheck)\n local relatedChannel= Split(channelStrCheck,',')\n local valueNum=table_leng(relatedChannel)\n \n if childDevice.props.sensortype=='zx' then\n local Frequency_index=tonumber(relatedChannel[1])\n local Temperature_index=tonumber(relatedChannel[2])\n local Frequency=tonumber(phys[Frequency_index])\n local Temperature=tonumber(phys[Temperature_index])\n if childDevice.uplink.capabilities[1].formula.metaid == "ff2de59e-fd95-42c6-93cc-d827da25dd0c" then --在iota中查找\n\n local K = childDevice.uplink.capabilities[1].formula.props.K \n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local To = childDevice.uplink.capabilities[1].formula.props.To\n -- log.debug("shutaiDT14300 振弦通道[%s] 公式参数 k=%s,Kt=%s,Fo=%s,To=%s",channelStrCheck,K,Kt,Fo,To)\n if K ==nil or Kt ==nil or Fo==nil or To==nil then\n Phy=nil\n -- log.debug("shutaiDT14300 振弦通道[%s] f=%s,t=%s 参数项为nil",channelStrCheck,Frequency,Temperature)\n else\n --log.debug("shutaiDT14300 振弦通道[%s] f=%s,t=%s",channelStrCheck,Frequency,Temperature)\n Phy = K*(Frequency^2-Fo^2)+Kt*(Temperature-To)\n --log.debug("shutaiDT14300 振弦通道[%s]当前的Phy=%s,f=%s",channelStrCheck,Phy,Frequency)\n local data1 = {\n data={\n frequency=tonumber(string.format("%0.3f",Frequency)),\n temperature=tonumber(string.format("%0.2f",Temperature)),\n physicalvalue=tonumber(string.format("%0.3f",Phy))\n },\n device=childDevice.id,\n time=timenow,\n type=1 \n }\n -- log.debug("shutaiDT14300: 振弦通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data,data1)\n end \n end \n\t\t\telseif childDevice.props.sensortype=='dw' then\n\t\t\t local Resistance_index=tonumber(relatedChannel[15])\n\t\t\t\tlocal Resistance=phys[Resistance_index]\n\t\t\t\t \n\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == "5a40c554-1256-4aec-b591-0202fc0f267a" then\n\t\t\t\t \n\t\t\t\t\tlocal a = childDevice.uplink.capabilities[1].formula.props.a\n local b = childDevice.uplink.capabilities[1].formula.props.b\n\t\t\t\t\tif a==nil or b==nil then\n\t\t\t\t\tPhy=nil\t\t\t\t\n\t\t\t\t\telse \t\t\t\t\t\n\t\t\t\t local y=a*Math.Log(Resistance)+b\n\t\t\t\t local data1 = {\n data={\n Y=tonumber(string.format("%0.3f",y)),\n \n resistance=tonumber(string.format("%0.3f",Resistance))\n },\n device=childDevice.id,\n time=timenow,\n type=1 \n }\n\t\t\t\t\t\t\t table.insert(out.data,data1)\n end \n end\t\t\t\t\t\t\t\t\t\t\t\n \n\t\t\telseif childDevice.props.sensortype=='dt' then\n local value1_index=tonumber(relatedChannel[1])\n local value1=tonumber(phys[value1_index])\t\n\t\t\t\tlocal value2\n\t\t\t\tif value1<144.8 then\n\t\t\t\t\tvalue2=0\n\t\t\t\telseif value1>874.9 then\n\t\t\t\t value2=15\n\t\t\t\telseif value1>=144.8 and value1<=279.7 then\n\t\t\t\t\tvalue2=3*(value1-144.8)/134.9+3\n\t\t\t\telseif value1>279.7 and value1<=365.9 then\n\t\t\t\t\tvalue2=3*(value1-279.7)/86.2+6\n\t\t\t\telseif value1>365.9 and value1<=531.5 then\n\t\t\t\t\tvalue2=3*(value1-365.9)/165.9+9\n\t\t\t\telseif value1>531.5 and value1<=663.2 then\n\t\t\t\t\tvalue2=3*(value1-531.5)/131.7+12\n\t\t\t\telseif value1>663.2 and value1<=874.9 then\n\t\t\t\t\tvalue2=3*(value1-663.2)/211.7+15\n\t\t\t\tend\n log.debug("shutaiDT14300 standard通道[%s] Temperature=%s",channelStrCheck,Temperature)\n local data1 = {\n data={ \n\t\t\t\t\t\tphysicalvalue=value2\n },\n device=childDevice.id,\n time=timenow,\n type=1 \n }\n log.debug("shutaiDT14300 standard通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data,data1)\n \n\t\t\telseif childDevice.props.sensortype=='dy' then\n local Temperature_index=tonumber(relatedChannel[1])\n local Vx_index=tonumber(relatedChannel[2])\n local Vy_index=tonumber(relatedChannel[3])\n local Temperature=tonumber(phys[Temperature_index])\n local Vx=phys[Vx_index]\n local Vy=phys[Vy_index]\n\t\t\t\t\n if childDevice.uplink.capabilities[1].formula.metaid == "ed2744e0-eecf-42f0-8732-65fcd7e46d24" then --在iota中查找\n \n local Kx = childDevice.uplink.capabilities[1].formula.props.Kx\n local Ky = childDevice.uplink.capabilities[1].formula.props.Ky \n local Vo = childDevice.uplink.capabilities[1].formula.props.Vo\n\n -- log.debug("shutaiDT14300 倾角通道[%s] 公式参数 Kx=%s,Ky=%s,Vo=%s",channelStrCheck,Kx,Ky,Vo)\n if Kx ==nil or Ky==nil or Vo==nil then\n Phy=nil\n -- log.debug("shutaiDT14300 倾角通道[%s] Vx=%s,Vy=%s 参数项为nil",channelStrCheck,Vx,Vy)\n else\n -- log.debug("shutaiDT14300 倾角通道[%s] Vx=%s,Vy=%s",channelStrCheck,Vx,Vy)\n local AngleX = Kx*(Vx-Vo)\n local AngleY = Ky*(Vy-Vo)\n -- log.debug("shutaiDT14300 倾角通道[%s] AngleX=%s,AngleY=%s Temperature=%s",channelStrCheck,AngleX,AngleY,Temperature)\n local data1 = {\n data={\n anglex=tonumber(string.format("%0.3f",AngleX)),\n angley=tonumber(string.format("%0.3f",AngleY)),\n temperature=tonumber(string.format("%0.3f",Temperature))\n },\n device=childDevice.id,\n time=timenow,\n type=1 \n }\n -- log.debug("shutaiDT14300: 倾角通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data,data1)\n end \n end\n\t\t\telseif childDevice.props.sensortype=='db' then\n\t\t\t local Frequency_index=tonumber(relatedChannel[1])\n local Temperature_index=tonumber(relatedChannel[2])\n local Frequency=tonumber(phys[Frequency_index])\n local Temperature=tonumber(phys[Temperature_index])\n\t\t\t\t \n\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == "f4e36088-8943-4147-b898-324dafb20220" then\n\t\t\t\t \n\t\t\t\t\tlocal K = childDevice.uplink.capabilities[1].formula.props.K \n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local X0 = childDevice.uplink.capabilities[1].formula.props.X0\n local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0\n -- log.debug("shutaiDT14300 振弦通道[%s] 公式参数 k=%s,Kt=%s,Fo=%s,To=%s",channelStrCheck,K,Kt,Fo,To)\n if K ==nil or K1 ==nil or X0==nil or Y0==nil then\n Phy=nil\n -- log.debug("shutaiDT14300 振弦通道[%s] f=%s,t=%s 参数项为nil",channelStrCheck,Frequency,Temperature)\n else\n --log.debug("shutaiDT14300 振弦通道[%s] f=%s,t=%s",channelStrCheck,Frequency,Temperature)\n Phy = K*(Frequency-X0)+K1*(Temperature-Y0)\n --log.debug("shutaiDT14300 振弦通道[%s]当前的Phy=%s,f=%s",channelStrCheck,Phy,Frequency)\n local data1 = {\n data={\n voltage_ratio=tonumber(string.format("%0.3f",Frequency)),\n temperature=tonumber(string.format("%0.2f",Temperature)),\n physicalvalue=tonumber(string.format("%0.3f",Phy))\n },\n device=childDevice.id,\n time=timenow,\n type=1 \n }\n -- log.debug("shutaiDT14300: 振弦通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data,data1)\n end \n end\t\n elseif childDevice.props.sensortype=='dz' then\n\t\t\t local Frequency_index=tonumber(relatedChannel[1])\n local Temperature_index=tonumber(relatedChannel[2])\n local Frequency=tonumber(phys[Frequency_index])\n local Temperature=tonumber(phys[Temperature_index])\n\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == "dc0acbb1-de4d-4fd3-af87-c61d4b7bdf52" then\n\t\t\t\t \n\t\t\t\t\tlocal K = childDevice.uplink.capabilities[1].formula.props.K \n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local X0 = childDevice.uplink.capabilities[1].formula.props.X0\n local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0\n -- log.debug("shutaiDT14300 振弦通道[%s] 公式参数 k=%s,Kt=%s,Fo=%s,To=%s",channelStrCheck,K,Kt,Fo,To)\n if K ==nil or K1 ==nil or X0==nil or Y0==nil then\n Phy=nil\n -- log.debug("shutaiDT14300 振弦通道[%s] f=%s,t=%s 参数项为nil",channelStrCheck,Frequency,Temperature)\n else\n --log.debug("shutaiDT14300 振弦通道[%s] f=%s,t=%s",channelStrCheck,Frequency,Temperature)\n Phy = K*((Frequency^2)/1000-X0)+K1*(Temperature-Y0)\n --log.debug("shutaiDT14300 振弦通道[%s]当前的Phy=%s,f=%s",channelStrCheck,Phy,Frequency)\n local data1 = {\n data={\n frequency=tonumber(string.format("%0.3f",Frequency)),\n temperature=tonumber(string.format("%0.2f",Temperature)),\n physicalvalue=tonumber(string.format("%0.3f",Phy)),\n },\n device=childDevice.id,\n time=timenow,\n type=1 \n }\n -- log.debug("shutaiDT14300: 振弦通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data,data1)\n end \n end\t\t\t\t\t\t\t\t\n\t\t\telseif childDevice.props.sensortype=='dm' then\n\t\t\t local Frequency_index=tonumber(relatedChannel[1])\n \n local Frequency=tonumber(phys[Frequency_index])\n \n\t\t\t\t \n\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == "5773316d-3a54-4974-86d6-eff99007cf04" then\n\t\t\t\t \n\t\t\t\t\tlocal K = childDevice.uplink.capabilities[1].formula.props.K \n \n -- log.debug("shutaiDT14300 振弦通道[%s] 公式参数 k=%s,Kt=%s,Fo=%s,To=%s",channelStrCheck,K,Kt,Fo,To)\n if K ==nil then\n Phy=nil\n -- log.debug("shutaiDT14300 振弦通道[%s] f=%s,t=%s 参数项为nil",channelStrCheck,Frequency,Temperature)\n else\n --log.debug("shutaiDT14300 振弦通道[%s] f=%s,t=%s",channelStrCheck,Frequency,Temperature)\n Phy = K*(Frequency-4)\n --log.debug("shutaiDT14300 振弦通道[%s]当前的Phy=%s,f=%s",channelStrCheck,Phy,Frequency)\n local data1 = {\n data={\n \n physicalvalue=tonumber(string.format("%0.3f",Phy))\n },\n device=childDevice.id,\n time=timenow,\n type=1 \n }\n -- log.debug("shutaiDT14300: 振弦通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data,data1)\n end \n end\t\n\t\t\t\telseif childDevice.props.sensortype=='standard' then\n local value1_index=tonumber(relatedChannel[1])\n local value1=tonumber(phys[value1_index])\t\n\t\t\t\tlocal value2\n\t\t\t\tif valueNum>1 then\n\t\t\t\t\tlocal value2_index=tonumber(relatedChannel[2])\n\t\t\t\t\tvalue2=tonumber(phys[value2_index])\t\n\t\t\t\t\tvalue2=tonumber(string.format("%0.2f",value2))\n\t\t\t\t\t\n\t\t\t\tend\n log.debug("shutaiDT14300 standard通道[%s] Temperature=%s",channelStrCheck,Temperature)\n local data1 = {\n data={ \n physicalvalue=tonumber(string.format("%0.2f",value1)),\n\t\t\t\t\t\tphysicalvalue2=value2\n },\n device=childDevice.id,\n time=timenow,\n type=1 \n }\n log.debug("shutaiDT14300 standard通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data,data1)\n end\t\t\t\t\n\t\t\t\t\t\t\t\t \n end\n\n else\n ok=ctx:asend("2f480d0a") --"/H/n/r" DT 按照指定格式 上报数据\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("shutaiDT14300 resultData=%s,hex=%s", json.encode(out),hex)\n ctx:notify(resultData)\n\nend\n\n\n\nIsValid=function(alldata)\n log.debug("shutaiDT14300 校验开始")\n if string.len(alldata) <10 then\n errormsg = 'allData is invalid'\n errcode = 1001\n return false\n end\n\n if string.sub(alldata,1,4)~='442c' then\n\t errormsg = 'allData header is invalid'\n errcode = 1001\n return false\n\t\n\tend\n\n log.debug("shutaiDT14300 校验通过")\n return true\nend\n\n\n--字符串ascii->字符\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\n\nend\n\nunixtimestamp=function(datestr)\n -- 2018/4/28 16:10:12\n\tlog.debug("shutaiDT14300 datestr=%s",datestr)\n local datelist = Split(datestr, " ");\n local datebegin = Split(datelist[1], "/");\n local dateend = Split(datelist[2], ":");\n local year = tonumber(datebegin[1]);\n\tlocal month = tonumber(datebegin[2]);\n\tlocal day = tonumber(datebegin[3]);\n local hour = tonumber(dateend[1]);\n local minute = tonumber(dateend[2]);\n local second = tonumber(dateend[3]);\n --log.debug("shutaiDT14300 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\t--log.debug("shutaiDT14300 timenum=%s",timenum)\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\t--log.debug("shutaiDT14300 recordTime=%s",recordTime)\n\treturn recordTime\nend INLINE 2019-12-30 16:55:50.187+08 2019-12-30 16:58:33.351+08 2019-12-30 \N
+33386019-d751-44bb-b39d-198ba7d892ff tlsf_Inclina_1506 \N 倾角传感器协议 1.0 fc6696f3-32e6-42c8-b8de-8409f5bfe865 fc6696f3-32e6-42c8-b8de-8409f5bfe865 f fc6696f3-32e6-42c8-b8de-8409f5bfe865 Lua bit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n\nstart=function()\n log.debug("start %s, ctx=", "tlsf_Inclina_1506.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("tlsf_Inclina_1506 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("tlsf_Inclina_1506 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n buff=iota.appendHexByte(buff, 0xA1, endian) \n buff=iota.appendHexByte(buff, moduleNo, endian) -- 3: 模块号\n buff=iota.appendHexByte(buff, 0x04, endian) -- 4: 指令: 0x01 = 采集\n buff=iota.appendHexByte(buff, 0xAF, endian)\n buff=iota.appendHexByte(buff, 0X00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x10, endian) -- 4: 指令: 0x01 = 采集\n local check=CS(3,buff)\n buff=buff..check -- 5: checkSum\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex,moduleNoStr)\n --print("LUA: Unmarshall: data is ", hex)\n --A1AF0D0201001003000123AA00004488B0\n \t--"xDegree": 74.666,\n\t--"yDegree": 17.544\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n\tlocal ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local power=iota.hexToByte(hex,7,'B')\n local xInt=iota.hexToInt(hex,8,'B')\n local yInt=iota.hexToInt(hex,12,'B')\n \n local XDegree=xInt/10^power\n local YDegree=yInt/10^power \n out.data = {\n xDegree=XDegree,\n yDegree=YDegree\n }\n else\n\t\t out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 17 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if string.lower(string.sub(data,1,2))~='a1' then\n\t\terrormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n\tend\n -- if tonumber(moduleCheck) ~=iota.hexToByte(data,1,'B') then\t\n -- errormsg = 'Invalid acq moduleId'\n -- errcode = 1004\n -- return false\n -- end\n return true\n--checkSum\nend\n\nCS=function(start,buff)\n local lcr = 0\n for i = start, string.len(buff)/2-1 do\n lcr = lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)\n end \n local value= string.format("%#x",lcr)\n local byte = string.sub(value,string.len(value)-1,string.len(value))\n return byte\nend \n \n\n\n \n\n INLINE 2017-09-09 11:37:31.894+08 2018-07-10 10:44:25.326+08 2017-09-03 \N
+7356f652-5fb4-4cbf-bedc-53a840d6285d Upload_ax_vibrating_ \N Upload_ax_vibrating_1408 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --//05 标准文档/安信标准协议.xlsx\n\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "Upload_ax_vibrating_1408.lua", device.props.moduleId or "[nil]")\nend\n\n\n--ff41584a230102030405060708091011230001000126f00102030401010203040102C0C0EEEE\nonData=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n\t local frequency_z=iota.hexToShort(hex,28,'B')\n local frequency_x=iota.hexToShort(hex,30,'B')/1000.0\n\t\tlocal frequency=frequency_z+frequency_x\n local temp =iota.hexToShort(hex,32,'B')/100.0\n \n out.data = { --需要测试\n frequency = frequency,\n temp = temp\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n log.debug('开始校验数据')\n local aaa=iota.hexToByte(data,1,'B')\n log.debug("aaa是"..tostring(aaa))\n if data == nil or string.len(data)/2 ~= iota.hexToByte(data,21,'B') then\n --errormsg = 'Data is nil or invalid'\n --errcode = 1001\n --return false\n end\n if iota.hexToByte(data,0,'B') ~= 0xFF or iota.hexToByte(data,1,'B') ~= 0x41 or iota.hexToByte(data,2,'B') ~= 0x58 or iota.hexToByte(data,3,'B') ~= 0x4A then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if device.props.moduleId ~= tostring(iota.hexToUShort(data,19,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n\tif device.props.channelId ~= tostring(iota.hexToByte(data,27,'B')) then\t\n errormsg = 'Invalid acq channelId'\n errcode = 1004\n return false\n end\n log.debug('数据校验通过')\n return true\n--crc\n--crc\nend\n\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n INLINE 2017-12-25 16:33:05.778+08 2018-02-28 18:32:12.223+08 2017-12-25 \N
+26f76eda-aff3-4ae9-82ec-a523a51dde17 mk_humi_1 \N 湿度 1.0 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca f c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, ctx=%s", "mk_humi_1.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--AA010206309F90\n--"humi": 48\n local out={\n data ={},\n result = {}\n }\n log.debug("recv %s, ctx=%s", "mk_humi_1.lua",data)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local moduleNo = iota.hexToByte(hex,1,'B')\n \n local modulenumber= tonumber(device.props.moduleId)\n local valCmd = iota.hexToByte(hex,3,'B') \n if valCmd == 0x06 and moduleNo==modulenumber then\n \n local humi =iota.hexToByte(hex,4,'B') \n out.data = { \n humi=humi\n }\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_humi_1.lua",json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = 1001, msg = "Is not validated"}\n end\n else\n out.result = {code = errcode, msg = errormsg}\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_humi_1.lua",json.encode(out))\n ctx:notify(resultData)\n end\n \nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n --iota.checkPlusSum16\n return true\n--crc\nend\n\n\n\n INLINE 2018-01-08 11:03:45.32+08 2018-02-28 18:32:12.224+08 2018-01-08 \N
+c26a8950-e810-48a4-a491-d817c5765747 mk_windDirection_1 \N 风向 1.0 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca f c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, ctx=%s", "mk_windDirection_1.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--AA01094b03EB0000000000000000\n--"windDirection": 1.003\n local out={\n data ={},\n result = {}\n }\n log.debug("recv %s, ctx=%s", "mk_windDirection_1.lua",data)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local moduleNo = iota.hexToByte(hex,1,'B')\n \n local modulenumber= tonumber(device.props.moduleId)\n local valCmd = iota.hexToByte(hex,3,'B') \n if valCmd == 0x4b and moduleNo==modulenumber then\n local windDirection = iota.hexToShort(hex,4,'B') / 1000.0\n out.data = { \n windDirection=windDirection\n }\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_windDirection_1.lua",json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = 1001, msg = "Is not validated"}\n end\n else\n out.result = {code = errcode, msg = errormsg}\n local resultData =json.encode(out)\n log.debug("recv %s, ctx=%s", "mk_windDirection_1.lua",json.encode(out))\n ctx:notify(resultData)\n end\n \nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n --iota.checkPlusSum16\n return true\n--crc\nend\n\n\n\n INLINE 2018-01-08 11:38:55.827+08 2018-02-28 18:32:12.224+08 2018-01-08 \N
+7f9f00f9-1b47-4a0e-a210-cd495fa0711d TDxieyi \N 塔吊设备协议 1.0 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe f 1b2d8739-627e-4b7d-9480-3eee6e9396fe Lua -- INLINE 2018-07-23 15:16:48.59+08 2019-03-13 17:17:05.516+08 2018-07-23 \N
+dd9d12d0-a0ee-44d4-9ba5-9887b1057881 LVDT_HY_9116 \N 下发采集 1.0 06551138-8f00-4269-9a6d-4e5fa26c71cc 06551138-8f00-4269-9a6d-4e5fa26c71cc f 06551138-8f00-4269-9a6d-4e5fa26c71cc Lua --"04 项目资料/2017-09/武汉华岩电子有限责任公司/HY65-ascii/传感器ASCII方式通讯控制协议.TXT"\n--测试\n--3635525830303154542B30303031393654FD36355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F7\n--require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, device=%s", "LVDT_HY_9116.lua",json.encode(device))\n\t\n local endian = 'B'\n\tlocal moduleNo=device.uplink.props.module \n\tlocal cmdStr="65TX"\n\tlocal addressStr=string.format("%03s",moduleNo)\n\tcmdStr=cmdStr..addressStr.."S0"\n log.debug("LVDT_HY_9116 cmdStr=%s",cmdStr)\n\tlocal cmdHex=StrToHex(cmdStr)\n\tlocal sum8Hex=string.format("%02x",getSum8(0,cmdHex))\n -- log.debug("LVDT_HY_9116,m=%s, sum8Hex=%s",moduleNo,sum8Hex)\n local buff=cmdHex..sum8Hex\n\t\t\t\n\n log.debug("LVDT_HY_9116,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n log.debug("LVDT_HY_9116 result=%s",result)\n\t\tctx:done(result)\n else\n\t\tlocal errout={\n\t\t data ={},\n\t\t result = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '采集超时'} \n\t ctx:done(json.encode(errout))\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n log.debug('LVDT_HY_9116 收到数据=%s',hex)\n local out = {\n type = 1,\n data = {},\n result = {}\n }\n\t\n local physicalvalue\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n log.debug('LVDT_HY_9116 数据有效=%s',hex)\n local data_str = HexToStr(hex)\n --转为字符串\n \n --获取子字符串表\n if data_str ~= '' then\n log.debug('LVDT_HY_9116 data_str=%s', data_str)\n \n if string.sub(data_str, -3, -3) == 'T' then\n --温度计算\n local t = string.sub(data_str, 10, 16)\n log.debug('LVDT_HY_9116 ,t=%s', t)\n physicalvalue = tonumber(t) / 10.0\n else\n --裂缝计算\n local str_rawData = string.sub(data_str, 10, 16)\n log.debug('LVDT_HY_9116 i=%s ,str_rawData=%s', i, str_rawData)\n physicalvalue = tonumber(str_rawData) * 0.001\n log.debug('LVDT_HY_9116 i=%s ,crackGap=%s', i, tostring(crackGap))\n local channelNo = tonumber(string.sub(data_str, 1, 3))\n \t\t\tlocal sensortype=device.props.sensorType\n if sensortype=='YB' then\n physicalvalue=string.format("%0.1f",physicalvalue)\n \t\t\tend\n end\n \t\t\tout.data = {\n physicalvalue = physicalvalue\n }\n end\n else\n log.debug('LVDT_HY_9116 数据无效')\n message = string.format('LVDT_HY_9116 无效的数据长度=%s', string.len(hex))\n out.result = {code = errcode, msg = message}\n end\n local resultData = json.encode(out)\n return json.encode(out)\nend\n\n\nIsValid = function(data)\n if iota.hexToByte(data, 0, 'B') ~= 0x36 or iota.hexToByte(data, 1, 'B') ~= 0x35 or iota.hexToByte(data, 2, 'B') ~= 0x52 or iota.hexToByte(data, 3, 'B') ~= 0x58 then\n errormsg = '数据无效[数据帧头与尾校验错误]'\n errcode = 1001\n return false\n end\n return true\nend\n\n--字符串ascii->字符\nHexToStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n -- 字符串 -> BCD\nStrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n--获取传感器信息\ngetDeviceInfo =function(moduleid, channel)\n log.debug('LVDT_HY_9116 查询子设备: moduleid=%s,channel=%s', moduleid, channel)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices\n for i, subdevice in pairs(subdevices) do\n local submodule = subdevice.uplink.props.module\n --判断是否是3层采集仪结构\n local dnlinkObject = json.encode(subdevice.dnlinks)\n if dnlinkObject ~= '{}' and dnlinkObject ~= 'null' then\n log.debug('LVDT_HY_9116 三层结构 m=%s, 设备=%s', submodule, json.encode(subdevice))\n for k, sublink in pairs(subdevice.dnlinks) do\n --log.debug("baian_file_transfer:sublink=%s",json.encode(sublink))\n for u, sub_subdevice in pairs(sublink.devices) do\n --log.debug("baian_file_transfer:sensor=%s",json.encode(subdevice))\n local sensormodule = sub_subdevice.uplink.props.module\n local sensorchannel = sub_subdevice.uplink.props.channel\n if tostring(sensormodule) == tostring(moduleid) and tonumber(sensorchannel) == tonumber(channel) then\n log.debug('LVDT_HY_9116 m=%s,c=%s 3 拜安匹配到设备=%s', moduleid, channel, json.encode(sub_subdevice))\n\n return sub_subdevice\n else\n log.debug('LVDT_HY_9116 m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s', moduleid, sensormodule, channel, sensorchannel, json.encode(sub_subdevice))\n end\n end\n end\n else\n local subchannel = subdevice.uplink.props.channel\n log.debug('LVDT_HY_9116 两层结构 m=%s,c=%s 设备=%s', submodule, subchannel, json.encode(subdevice))\n if tonumber(subchannel) == tonumber(channel) then -- 只比较 模块号 tostring(submodule) == tostring(moduleid) and\n log.debug('LVDT_HY_9116 m=%s,c=%s 2安信匹配到设备=%s', moduleid, channel, json.encode(subdevice))\n return subdevice\n else\n log.debug('LVDT_HY_9116 has no device module=%s channel=%s,[submodule=%s,subchannel=%s]', moduleid, channel, submodule, subchannel)\n end\n end\n end\n log.debug('LVDT_HY_9116 has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('LVDT_HY_9116 has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\n\ngetSum8=function(start,buff)\n local lcr = 0\n for i = start, string.len(buff)/2-1 do\n lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n end \n local value= bit.band(lcr,0xff) \n return value\nend INLINE 2018-12-27 20:15:48.837+08 2019-01-07 17:00:58.392+08 2018-12-27 \N
+32d06cb0-ba6b-44d3-90aa-a768cb50cfed szkrm_TempHum_1154 \N 1.0 7208e2c1-ccf7-46f5-b073-bbab61904cf2 7208e2c1-ccf7-46f5-b073-bbab61904cf2 f 7208e2c1-ccf7-46f5-b073-bbab61904cf2 Lua --//01 协议文档/9月第4周/华南,深圳市永阳新能源科技有限公司,温湿度传感器,485通讯协议/永阳YY-TF100湿度探头及协议.pdf\n--[[\n协议号: 1154;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "szkrm_TempHum_1154.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n\t-- 模块号\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE); -- 1: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x04, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);-- 2: 读取寄存器地址\n buff=iota.appendHexByte(buff, 0x00, BE);\n buff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x02, BE);-- 3: \t读取寄存器数量\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) --CRC16\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 01040419e81c9af447 moduleId=1\n--原始数据 温度26.32,湿度73.22\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\tif string.len(data)/2 ~=9 or iota.hexToByte(data, 1,'B')~=0x04 or iota.hexToByte(data, 2,'B')~=0x04 then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\n\telse\n\t\t\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal Temp = (iota.hexToShort(data, 3,'B')-4000)/100.0;\n\t\tlocal Humi = iota.hexToShort(data, 5,'B')/100.0;\t\t\t\n\t\t\n\t\tout.data = {\n\t\ttemp=Temp,\n\t\thumi=Humi\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n INLINE 2017-09-07 18:26:20.549+08 2018-02-28 18:32:12.224+08 2017-09-07 \N
+08df99de-ea9b-409c-9f5c-fda7f51b2ef9 jcwl_settlement_1 \N 北京杰成物联科技有限公司 1.0 299decdb-5902-4e11-afcb-9e08926723fc 299decdb-5902-4e11-afcb-9e08926723fc f 299decdb-5902-4e11-afcb-9e08926723fc Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "jcwl_settlement_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jcwl_settlement_1 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jcwl_settlement_1 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n buff=iota.appendHexByte(buff, moduleNo, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0x55, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0x0a, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 5: CRC\n\n ----01030055000ad5dd\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==50) then\n \n --01031402AA00000000000000000000999A3F9900020000A899 \n --"thickness": 1.2,\n --"temp": 25.02857454545457,\n --"state": 2,\n --print("parsing data", hex)\n \n local temp =(iota.hexToShort(hex,3,'B')*1.607566-1000)/3.85;\n local thicknessData=string.sub(hex,35,38)..string.sub(hex,31,34)\n local thickness =iota.hexToFloat(thicknessData,0,'B'); \n local state=iota.hexToShort(hex,19,'B')\n out.data = {\n \n temp=temp,\n thickness=thickness,\n state=state\n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2017-12-19 16:43:27.718+08 2018-03-29 16:53:38.585+08 2017-12-19 \N
+94086d83-438d-4730-9c51-771e4a2e3d12 Meacon_PH \N 1.0 849e9b08-1181-436a-a106-cc6b0d3ffdc5 849e9b08-1181-436a-a106-cc6b0d3ffdc5 f 849e9b08-1181-436a-a106-cc6b0d3ffdc5 Lua \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "Meacon_PH", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\t--全局\n out={\n data ={},\n result = {}\n }\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("Meacon_PH 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n\t\tbuff=iota.appendHexByte(buff, 0x00, endian) \n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x01, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("Meacon_PH SSend error!")\n end\n\t\tif out.data.ph~=nil then\n\t\t\tlog.debug('Meacon_PH:'..'PH解析正常'..tostring(out.data.pressure))\n\t\t\tlocal bufft=''\n\t\t\tbufft=iota.appendHexByte(bufft, moduleNo, endian) -- 模块号\n\t\t\tbufft=iota.appendHexByte(bufft, 0x03, endian) \n\t\t\tbufft=iota.appendHexByte(bufft, 0x00, endian) \n\t\t\tbufft=iota.appendHexByte(bufft, 0x01, endian)\n\t\t\tbufft=iota.appendHexByte(bufft, 0x00, endian)\n\t\t\tbufft=iota.appendHexByte(bufft, 0x01, endian)\n\t\t\tbufft=iota.appendHexCrc(bufft, 'L' ,0) \n\t\t\tok,resp=ctx:ssend(bufft,15000)\n\t\t\tif ok then\n\t\t\t log.debug('Meacon_PH:'..'温度采集成功 开始解析温度:'..resp)\n\t\t\t\tresult_temp =tempunmarshall(resp,moduleNo) \n\t\t\t else\n\t\t\t\tlog.debug('Meacon_PH:'..'温度采集失败')\n\t\t\tend\n\t\tend\n\t\tresult = json.encode(out)\n ctx:done(result)\nend\n--00 03 00 00 00 01 85 DB\n--00 03 02 00 00 85 84\n--moduleId=0\n--00 03 00 01 00 01 D4 1B\n--00 03 02 00 FA 05 C7\n\n\n\nunmarshall=function(hex,moduleStr)\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local ph = iota.hexToShort(hex,3,'B')\n \n out.data = {\n ph=ph/100.0,\n\t\t\ttemp=0\n\t\t\t}\n else\n out.result = {code=errcode,msg=errormsg} \n end\n -- return json.encode(out)\nend\n\n \ntempunmarshall=function(hex,moduleNo_t)\n\tlocal ErrorCode = IsValid(hex,moduleNo_t)\n if ErrorCode then\n\t\n local temp = iota.hexToShort(hex,3,'B')\n \n out.data.temp = temp/10.0\n\n else\n out.result = {code=errcode,msg=errormsg}\n end\n -- return json.encode(out)\nend\n\n\nIsValid=function(data,moduleStrCheck)\n log.debug('Meacon_PH 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('Meacon_PH 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2018-10-08 14:33:16.075+08 2018-10-11 11:06:09.617+08 2018-10-08 \N
+daf77d68-0e8a-4215-94b5-fa3255e04fdc ky_lvdt_1600 \N 1.0 ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c f ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c Lua --// PMO/02 产品协议/SavoirCloud/01 协议/4月第3周/北京宝力马传感技术有限公司/通讯协议WS302M2A-5温湿度变送器使用说明书V3.0.1(中英)-华为专用-北京宝力马传感技术有限公司.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "ky_lvdt_1600", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("ky_lvdt_1600 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("ky_lvdt_1600 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x03, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("ky_lvdt_1600 SSend error!")\n end\n ctx:done(result)\nend\n\n--1203040025001908f3\n--moduleId=18 \n--"length":1024 \n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local length = iota.hexToInt(hex,3,'B')/65535.0\n \n \n out.data = {\n\t\t\tlength=length\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('ky_lvdt_1600 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('ky_lvdt_1600 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2018-05-29 11:34:39.65+08 2019-06-19 10:12:32.73+08 2018-05-29 \N
+85e2b97b-2221-4c86-96cb-1daf90b1118f ZZ-SG \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --字符串ascii->字符\nstart=function()\n log.debug("SG: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n log.debug("SG: Data=%s",hex)\n\t--全局\n out={\n data ={},\n result = {}\n }\n\n local sData= toStrHex(hex)\n log.debug("SG: sData=%s",sData)\n local spliteData = Split(sData,'&&')\n\tlocal deviceData = Split(spliteData[1],';')\n \n\tlocal moduledata = Split(deviceData[5],'=')\n\tlocal module = tonumber(moduledata[2]) --模块号\n\tlog.debug("SG: deviceData=%s",module)\n\tlocal Data = Split(spliteData[2],';')\n\tlocal timedata = Split(Data[1],'=')\n\tlocal time = tonumber(timedata[2]) --时间\n\t\n\tfor key,value in pairs(Data) do\n\t\tAllot(value)\n\n\tend\n\t\n\n\n local resultData =json.encode(out)\n log.debug("SG: result=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n-- allot 函数\nAllot=function(datastr)\n\tlocal name = Split(datastr,'=')\n\t\n\tif name[1] == 'a34004-Rtd' then \n\t\tlocal pm25 = tonumber(string.format('%0.0f',tonumber(name[2])))\n\t\tif pm25 <= 0 or pm25 > 700 then \n\t\t\tout.data.pm25=nil\n\t\t\tout.result.code = 5001\n \t\tif out.result.msg ~= nil then\n\t\t\t\tout.result.msg = out.result.msg .. "[pm2.5] out of ranges pm2.5:"..tostring(pm25).." is out of[0,700]"\t\n \telse\n \t\tout.result.msg = "[pm2.5] out of ranges pm2.5:"..tostring(pm25).." is out of[0,700]"\t\n \tend\n \telse\n \t\tout.data.pm25=pm25\n\t\tend\n\telseif name[1] == 'a34002-Rtd' then \n\t\tlocal pm10 = tonumber(string.format('%0.0f',tonumber(name[2])))\n\t\tif pm10 <= 0 or pm10 > 700 then \n\t\t\tout.data.pm10=nil\n\t\t\tout.result.code = 5001\n \t\tif out.result.msg ~= nil then\n\t\t\t\tout.result.msg = out.result.msg .. "[pm10] out of ranges pm10:"..tostring(pm10).." is out of[0,700]"\t\n \telse\n \t\tout.result.msg = "[pm10] out of ranges pm10:"..tostring(pm10).." is out of[0,700]"\t\n \tend\n \telse\n\t\t out.data.pm10=pm10\n\t\tend\t\t\n\telseif name[1] == 'a01007-Rtd' then \n\t\tlocal speed = tonumber(string.format('%0.1f',tonumber(name[2])))\n\t\tif speed < 0 or speed > 24.5 then \n\t\t\tout.data.speed=nil\n \t\tlog.debug("SG:out.data.speed=nil")\n\t\t\tout.result.code = 5001\n \t\tif out.result.msg ~= nil then\n\t\t\t\tout.result.msg = out.result.msg.."[speed] out of speed:"..tostring(speed).." is out of[0,24.5]"\t\n \telse\n \t\tout.result.msg = "[speed] out of speed:"..tostring(speed).." is out of[0,24.5]"\t\n \tend\n \telse\n \t\tout.data.speed=speed\n\t\tend\t\t\n\telseif name[1] == 'a01008-Rtd' then \n\t\tlocal direction = tonumber(string.format('%0.1f',tonumber(name[2])))\n\t\tif direction < 0 or direction > 360 then \n\t\t\tout.data.direction=nil\n\t\t\tout.result.code = 5001\n \t\tif out.result.msg ~= nil then\n\t\t\t\tout.result.msg = out.result.msg.."[direction] out of direction:"..tostring(direction).." is out of[0,360]"\t\n \telse\n \t\tout.result.msg = "[direction] out of direction:"..tostring(direction).." is out of[0,360]"\t\n \tend\n \telse\n \t\tout.data.direction=direction\n\t\tend\t\t\t\n\telseif name[1] == 'a01001-Rtd' then\n\t\tlocal temperature = tonumber(string.format('%0.1f',tonumber(name[2])))\n\t\tif temperature < -40 or temperature > 60 then \n\t\t\tout.data.temperature=nil\n\t\t\tout.result.code = 5001\n\t\t\tout.result.msg = "[temperture] out of temperture pm10:"..tostring(temperature).." is out of[-40,60]"\t\n \telse\n \t\tout.data.temperature=temperature\n\t\tend\t\t\n\telseif name[1] == 'a01002-Rtd' then\n\t\tlocal humidity = tonumber(string.format('%0.1f',tonumber(name[2])))\n\t\tif humidity <= 0 or humidity > 100 then \n\t\t\tout.data.humidity=nil\n\t\t\tout.result.code = 5001\n \t\tif out.result.msg ~= nil then\n\t\t\t\tout.result.msg = out.result.msg.."[humidity] out of humidity :"..tostring(humidity).." is out of[0,100]"\t\n else\n \tout.result.msg = "[humidity] out of humidity :"..tostring(humidity).." is out of[0,100]"\t\n end\n \telse\n \t\tout.data.humidity=humidity\n\t\tend\t\t\n\telseif name[1] == 'LA-Rtd' then\n\t\tlocal noise = tonumber(string.format('%0.1f',tonumber(name[2])))\n\t\tif noise < 0 or noise > 200 then \n\t\t\tout.data.noise=nil\n\t\t\tout.result.code = 5001\n \t\tif out.result.msg ~= nil then\n\t\t\t\tout.result.msg =out.result.msg.. "[noise] out of noise :"..tostring(noise).." is out of[0,200]"\t\n \telse\n \t\tout.result.msg = "[noise] out of noise :"..tostring(noise).." is out of[0,200]"\t\n \tend\n \telse \n \t\tout.data.noise=noise\n\t\tend\t\t\n\telse\n\t\n\tend\nend\n\n INLINE 2018-11-02 17:21:13.21+08 2019-01-04 17:21:58.334+08 2018-11-02 \N
+3e1d46a6-f0b7-4db2-87c7-027e6c5b65c6 iOTA Configure Sync \N 1.0.0 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f f16833ab-a4a4-45f5-9b39-ad2c66e488f6 Lua start= function()\n log.debug("mqtt edge config sync start")\n local edgeMetaId = device.deviceMetaId\n local edgeId = device.id\n local topic = string.format("/conf/edge/%s/%s/sync/request", edgeMetaId, edgeId) \n local request = {\n id = uuid.v4(),\n payload = {\n -- edge config\n edge = {},\n -- devices config\n devices = {}\n }\n }\n -- edge interface and capabilities\n request.payload.edge = createDevice(device)\n -- 仅两层结构?\n if device.dnlinks ~= nil then\n for i, dl in ipairs(device.dnlinks) do\n if dl.devices ~= nil then\n for j, d in ipairs(dl.devices) do\n local dv = createDevice(d)\n if dv ~= nil then\n table.insert(request.payload.devices, dv)\n end\n end\n end\n end\n end\n local iOTAMQTTMessage = {\n type = "iota_mqtt",\n topic = topic,\n payload = json.encode(request)\n }\n local result, response = ctx:ssend(iOTAMQTTMessage)\n local payload = json.decode(response.payload)\n if request.id == payload.id then\n log.debug("------------- %s ", json.encode(response))\n ctx:done("{}")\n end\nend\n\n--[[\n 设备转换\n]]--\ncreateDevice=function(dev)\n if dev == nil then\n return nil\n end\n local device = {\n id = dev.id,\n name = dev.name,\n deviceMetaId = dev.deviceMetaId,\n props = dev.props,\n -- other ...\n interfaces = {}\n }\n if dev.uplink ~= nil then\n local interface = createInterface(dev.uplink)\n if interface ~= nil then\n table.insert(device.interfaces, interface)\n end\n end\n return device\nend\n\n--[[\n 接口转换\n]]--\ncreateInterface=function(inf)\n if inf == nil then\n return nil\n end\n local interface = {\n id = inf.id,\n name = inf.name,\n props = inf.props,\n capabilities = {}\n }\n if inf.capabilities ~= nil then\n for i, cap in ipairs(inf.capabilities) do\n local capability = createCapability(cap)\n if capability ~= nil then\n table.insert(interface.capabilities, capability)\n end\n end\n end\n return interface\nend\n\n--[[\n 能力转换\n]]--\ncreateCapability=function(cap)\n if cap == nil then\n return nil\n end\n local capability = {\n id = cap.id,\n capabilityMetaId = cap.capabilityMetaId,\n name = cap.name,\n props = cap.props,\n }\n return capability\nend\n\nonData=function()\nend INLINE 2019-07-06 16:49:33.225+08 2019-07-24 16:23:05.916+08 2019-07-06 \N
+f6f903f9-bd32-4fa0-9305-074458402bd5 fs_door_1503 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//04 D:\\SVN\\201903项目\\厕所电动门\\[说明书]USR-IO808-GR_V1.0.3.pdf \nstart=function()\n\nend\n\nonData=function(hex)\n\tlocal result="{}"\n\tresult = unmarshall(hex)\n log.debug("jm_lvdt_1553:结果out=%s",result) \n ctx:notify(result)\nend \nunmarshall=function(hex)\n\tlocal moduleNo=device.uplink.props.module\n log.debug("fs_door_1503 m=%s, recv =%s",moduleNo,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n\t local moduleNo=device.uplink.props.module\n local ErrorCode = IsValid(hex,moduleNo)\n if ErrorCode then\n local diS=string.sub(hex,15,16)\n local diState=getBit8(diS)\n\t\t\n out.data = { \n DI1=diState[1],\n\t\t\tDI2=diState[2],\n\t\t\tDI3=diState[3],\n\t\t\tDI4=diState[4],\n\t\t\tDI5=diState[5],\n\t\t\tDI6=diState[6],\n\t\t\tDI7=diState[7],\n\t\t\tDI8=diState[8]\t\t\t\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("fs_door_1503 m=%s,data=%s",moduleNo,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,deviceModule)\n\tlocal checkLen=string.len(data)/2\n if data == nil or checkLen~= 11 then\n errormsg = string.format('无效的数据长度=%s≠11',checkLen)\n errcode = 1002\n return false\n end\n local dataModule=iota.hexToByte(data,0,'B')\n if tonumber(deviceModule) ~= dataModule then\t\n errormsg = string.format('无效的模块号=%s≠%s',dataModule,deviceModule)\n errcode = 1003\n return false\n end\n return true\n--crc\nend\n\n \ngetBit8=function(byteStr)\n local byteTable={}\n local byteNum=tonumber(byteStr,16)\n --log.debug("fs_door_1503 byteNum =%s,byteStr=%s",byteNum,byteStr)\n local bit1=bit.band(byteNum,0x01)\n local bit2=bit.band(byteNum,0x02)\n local bit3=bit.band(byteNum,0x04)\n local bit4=bit.band(byteNum,0x08)\n local bit5=bit.band(byteNum,0x10)\n local bit6=bit.band(byteNum,0x20)\n local bit7=bit.band(byteNum,0x40)\n local bit8=bit.band(byteNum,0x80)\n\n byteTable[1]=math.modf(bit1/0x01)\n byteTable[2]=math.modf(bit2/0x02)\n byteTable[3]=math.modf(bit3/0x04)\n byteTable[4]=math.modf(bit4/0x08)\n byteTable[5]=math.modf(bit5/0x10)\n byteTable[6]=math.modf(bit6/0x20)\n byteTable[7]=math.modf(bit7/0x40)\n byteTable[8]=math.modf(bit8/0x80)\n return byteTable\nend\n INLINE 2019-03-14 11:19:12.509+08 2019-05-17 11:15:41.55+08 2019-03-14 \N
+9376f5bd-295c-489d-a21a-5bb68e15392e fs_temp_1103 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "fs_temp_1103", device.uplink.props.module or "[nil]")\n local buff='' \n\tlocal result='{}'\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\tlog.debug("fs_temp_1103 设备模块 m==%s ",moduleNo)\n\t\n\t\n\tlocal dotNumber=readDot(moduleNo)\n\tif dotNumber~=nil then\n\t\t\tbuff=iota.appendHexByte(buff,moduleNo, 'B') \n\t\t\tbuff=iota.appendHexByte(buff, 0x03, 'B') \n\t\t\tbuff=iota.appendHexWord(buff, 0x04, 'B') \n\t\t\tbuff=iota.appendHexWord(buff, 0x01, 'B') \t\n\t\t\tbuff=iota.appendHexCrc(buff, 'L' ,0) \n\n\t\t\tok,resp=ctx:ssend(buff,10000)\n\t\t\tlog.debug('fs_temp_1103 发送 读数 读取指令=%s',buff)\n\t\t\n\t\t\tlog.debug('fs_temp_1103 接收数据=%s',resp)\n\t\t\tif ok then\n\t\t\tresult=unmarshall_temp(resp,moduleNo,dotNumber)\n\t\t\telse\n\t\t\t log.debug('fs_temp_1103 数据采集失败')\n\t\t\tend\n\tend\n \n \n \n ctx:done(result)\nend\n\n\nreadDot=function(deviceModule)\n\t --下发 dot读取指令\n\t local dot_number\n\t\tlocal buff_dot=''\n\t\t\n\t\tbuff_dot=iota.appendHexByte(buff_dot,deviceModule, 'B') \n\t\tbuff_dot=iota.appendHexByte(buff_dot, 0x03, 'B') \n\t\tbuff_dot=iota.appendHexWord(buff_dot, 0x03, 'B') \n\t\tbuff_dot=iota.appendHexWord(buff_dot, 0x01, 'B') \t\n\t\tbuff_dot=iota.appendHexCrc(buff_dot, 'L' ,0) \t\n\t ok1,resp1=ctx:ssend(buff_dot,10000)\n log.debug('fs_temp_1103 发送 读取小数指令=%s,ok1=%s,resp1=%s',buff_dot,ok1,resp1)\n if ok1 then\n dot_number = unmarshall_dot(resp1,deviceModule)\t \n end\n\t return dot_number\nend\n\n\nunmarshall_dot=function(hex,moduleStr)\n\n\tlocal dot_Num\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n dot_Num = iota.hexToUShort(hex,3,'B');\n log.debug('fs_temp_1103 小数点位=%s',dot_Num)\n end\n return dot_Num\nend\n\n\n\nunmarshall_temp=function(hex,moduleStr,dot_Num)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local temperature = iota.hexToShort(hex,3,'B')/10^dot_Num;\n out.data = {\n temperature = temperature\n };\n\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\n\n\n\n\nIsValid=function(data,moduleNo_check)\n log.debug('fs_temp_1103 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 < 7 or string.len(data)/2 > 7 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1002\n errormsg = '返回功能码不是0x03' \n return false\n end\n \tlocal dataModule=tostring(iota.hexToByte(data,0,'B'))\n if moduleNo_check ~= dataModule then\t\n errormsg = string.format('数据内模块号[%s]不匹配设备模块号[%s]',dataModule,moduleNo_check)\n errcode = 1004\n return false\n end\n log.debug('数据校验通过')\n return true\n--crc\nend\n INLINE 2019-10-10 10:27:34.901+08 2020-09-03 18:36:04.614+08 2019-10-10 \N
+ff261e2f-e34f-4f1c-933a-aec8cac3b02f RK_MOP \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--68a0a1a2a3a4a568010243c3 +CS +16H CS=(68a0a1a2a3a4a56801021090的累加和)\n-- cmd=68|88|88|88|88|88|88|68|20|0E|35|B3|34|2F|33|37|33|33|33|73|9C|96|34|73|C8|16\nstart=function()\n log.debug("start %s, ctx=%s", "renke_dn.lua",json.encode(ctx.device))\n\n local endian = 'B'\n local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\n\tlocal moduleId1 = string.sub(moduleNo,1,2)\n\tlocal moduleId2 = string.sub(moduleNo,3,4)\n\tlocal moduleId3 = string.sub(moduleNo,5,6)\n\tlocal moduleId4 = string.sub(moduleNo,7,8)\n\tlocal num = device.props.num\n\tlocal number = 262\n\tif num == "PM2.5系数A" then \n\t\tnumber = 262\n\telseif num == "PM2.5系数B" then\n\t\tnumber = 263\n\telseif num == "PM10系数A" then\n\t\tnumber = 251\n\telseif num == "PM10系数B" then\n\t\tnumber = 252\n\telseif num == "噪声系数A" then\n\t\tnumber = 287\n\telseif num == "噪声系数B" then\n\t\tnumber = 288\n\telseif num == "温度系数B" then\n\t\tnumber = 302\n\telseif num == "湿度系数B" then\n\t\tnumber = 313\n\telseif num == "风速系数B" then\n\t\tnumber = 338\n\telseif num == "联动阈值" then\n\t\tnumber = 259\n\telseif num == "控制回差" then\n\t\tnumber = 261 \n\tend\n\tlocal value = device.props.value\n\tbuff="6888888888888868200E35B334"\n \tlog.debug("renke_dn, number = %s",number)\t\n\tlocal numberstr =''\n\tnumberstr = iota.appendHexWord(numberstr, tonumber(number), endian)\n\tlocal num1 = tonumber(string.sub(numberstr,3,4),16)\n\tif num1 ~= nil then \n\t\tnum1 = num1 + 0x33\n\t\tif num1 > 255 then\n\t\t\tnum1 = num1 -0x100\n\t\tend\n\tend\n\tbuff=iota.appendHexByte(buff, num1, endian)\n\tlocal num2 = tonumber(string.sub(numberstr,1,2),16)\n\tif num2 ~= nil then \n\t\tnum2 = num2 + 0x33\n\t\tif num2 > 255 then\n\t\t\tnum2 = num2 - 0x100\n\t\tend\n\tend\t\n\tbuff=iota.appendHexByte(buff, num2, endian)\n\n\tbuff = buff.."37"\n\tlocal hex = iota.floatToHex(tonumber(value))--"00004040"\n --log.debug("renke_dn, hex = %s,value = %s",hex,tostring(value))\t\n\tlocal hex1 = tonumber(string.sub(hex,7,8),16) \n \tif hex1 ~= nil then\n \t\thex1 = hex1 + 0x33\n\t\tif hex1 > 255 then\n\t\t\thex1 = hex1 - 0x100\n\t\tend\n end\n log.debug("renke_dn,sec2 hex1 = %d",hex1)\t\n\tbuff=iota.appendHexByte(buff, hex1, endian)\n\tlocal hex2 = tonumber(string.sub(hex,5,6),16)\n if hex2 ~= nil then\n \t\thex2 = hex2 + 0x33\n\t\tif hex2 > 255 then\n\t\t\thex2 = hex2 - 0x100\n\t\tend\t\t\n end\n\tbuff=iota.appendHexByte(buff, hex2, endian)\n \n\tlocal hex3 = tonumber(string.sub(hex,3,4),16)\n if hex3 ~= nil then\n \t\thex3 = hex3 + 0x33\n\t\tif hex3 > 255 then\n\t\t\thex3 = hex3 - 0x100\n\t\tend\t\t\t\n end\n\tbuff=iota.appendHexByte(buff, hex3, endian)\n\tlocal hex4 = tonumber(string.sub(hex,1,2),16)\n if hex4 ~= nil then\n \t\thex4 = hex4 + 0x33\n\t\tif hex4 > 255 then\n\t\t\thex4 = hex4 - 0x100\n\t\tend\t\t\t\n end \n\tbuff=iota.appendHexByte(buff, hex4, endian)\n \t--log.debug("renke_dn,sec buff=%s",buff)\n\tlocal module4 = tonumber(moduleId4,16)\n if module4 ~= nil then\n \t\tmodule4 = module4 + 0x33\n\t\tif module4 > 255 then\n\t\t\tmodule4 = module4 - 0x100\n\t\tend\t\t\t\n end \n\tbuff=iota.appendHexByte(buff, module4, endian)\n\tlocal module3 = tonumber(moduleId3,16)\n if module3 ~= nil then\n \t\tmodule3 = module3 + 0x33\n\t\tif module3 > 255 then\n\t\t\tmodule3 = module3 - 0x100\n\t\tend\t\t\t\n end \n\tbuff=iota.appendHexByte(buff, module3, endian)\n\tlocal module2 = tonumber(moduleId2,16)\n if module2 ~= nil then\n \t\tmodule2 = module2 + 0x33\n\t\tif module2 > 255 then\n\t\t\tmodule2 = module2 - 0x100\n\t\tend\t\t\t\t\n end \n\tbuff=iota.appendHexByte(buff, module2, endian) \n\tlocal module1 = tonumber(moduleId1,16)\n if module1 ~= nil then\n \t\tmodule1 = module1 + 0x33\n\t\tif module1 > 255 then\n\t\t\tmodule1 = module1 - 0x100\n\t\tend\t\t\t\t\n end \n\tbuff=iota.appendHexByte(buff, module1, endian)\n\t--buff="fefefefe"..buff..CheckPlusSum(buff,0,string.len(buff)/2)..'16'\n\tcrc=LCR(0,buff)\n\tbuff=iota.appendHexByte(buff, crc, endian)\n\tbuff=buff.."16"\n --log.debug("renke_dn,buff=%s",buff)\n ok,resp=ctx:ssend(buff,15000)\n\tlog.debug("renke_dn,resp=%s",resp)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t ctx:done(json.encode(errout))\n\tend\nend\n\nunmarshall=function(hex)\n\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\tif string.len(hex) ~= 44 then\n\t\tout.result.code = 1001\n\t\tout.result.msg ="retry, responde is not right"\n\tend\n return json.encode(out)\nend\n\nLCR=function(start,data)\n --log.debug("rk_yc data=%s ",data)\n local sum = 0\n for i=start, string.len(data)/2-1 do\n if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)),16)) % 0xffff\n end\n end \n sum = bit.band(sum ,0xff)\n return sum\nend \n\n INLINE 2019-03-06 14:08:39.634+08 2019-05-17 11:16:44.694+08 2019-03-06 \N
+466e226f-a04e-4c91-8328-438a2c4628b2 lora \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n 函数:\n ssend: 同步发送数据到设备\n asend: 异步发送数据到设备\n notify: 通知平台解析完成的数据\n done: 采集完成, 结束当前采集过程.\n]] \nstart=function()\n log.debug("fslora2:start %s", "lora.lua")\nend\n\n-- 收到数据\nonData=function(data,pindex) \n local len=string.len(data)\n\tlocal module = string.sub(device.uplink.props.deveui,-4,-1)\n\tlocal modulecode = string.sub(data,1,4)\n\tlocal r=nil\n\tif module == modulecode then\n\t\tlocal code = iota.hexToByte(data,8,'B');\n\t\tlog.debug("fslora2:onData %s len %s code %s",data,len,tostring(code))\n\t\t\n\t\tlocal msgid,r1ok = redis.get(device.id)\n\t\tif len >= 70 and tostring(msgid) ~= string.sub(data,9,12) then \t\t\n\t\t\tr=parseData(data)\n\t\telseif len==54 and tostring(msgid) ~= string.sub(data,9,12)then\n\t\t\tlocal message = 'nil Data!'\n\t\t\tlocal errcode = 0\n\t\t\tlog.debug("fslora2 errorcode %s",tostring(code))\n\t\t\tif tonumber(code) == 1 then \n\t\t\t\tmessage = '无配置'\n\t\t\t\terrcode = 10010007 \n\t\t\telseif tonumber(code) == 2 then \n\t\t\t\tmessage = '模块号获取失败'\n\t\t\t\terrcode = 30010101\n\t\t\telseif tonumber(code) == 3 then \n\t\t\t\tmessage = '电量不足'\n\t\t\t\terrcode = 60010002 \n\t\t\telseif tonumber(code) == 4 then \n\t\t\t\tmessage = '断路'\n\t\t\t\terrcode = 30010022\n\t\t\telseif tonumber(code) == 5 then \n\t\t\t\tmessage = '短路'\n\t\t\t\terrcode = 30010023 \n\t\t\telseif tonumber(code) == 6 then \n\t\t\t\tmessage = '超时'\n\t\t\t\terrcode = 30030001 \n\t\t\tend\n\t\t\tlocal errorcode={\n\t\t\t data ={},\n\t\t\t result = {code=errcode,msg=message},\n\t\t\t type = 1\n\t\t\t}\n\t\t\tr = json.encode(errorcode)\n\t\telse\n\t\t\tlocal s={\n\t\t\t data =result,\n\t\t\t result = {},\n\t\t\t type = 1\n\t\t\t}\n\t\t r = json.encode(s)\n\t\tend\n\telse \n\t\tlocal errorcode={\n\t\t data ={},\n\t\t result = {code=30010101,msg="数据异常,发错数据"},\n\t\t type = 1\n\t\t}\n\t\tr = json.encode(errorcode)\n\tend\n local msg = r\n log.debug("fslora2:Parsed:%s",msg)\n ctx:notify(msg)\n \tif tostring(msgid) ~= string.sub(data,9,12) then\n \treply(data)\n end\nend\n\nparseData=function(data)\n -- 51长度: 头 25, 数据24, 尾2\n \tlog.debug("fslora2:parseData")\n\tparseWakeup(data)--打印设备信息\n\tlocal module = device.pr\n local node = string.sub(data,1,4)\n local sentype = iota.hexToByte(data,16,'B');\n local time=os.date("%Y-%m-%dT%H:%M:%S+08:00")--,os.time({year = iota.hexToShort(data,17,'B'), month = iota.hexToByte(data,19,'B'), day =iota.hexToByte(data,20,'B'), hour =iota.hexToByte(data,21,'B'), min =iota.hexToByte(data,22,'B'), sec = iota.hexToByte(data,23,'B')}))\n local data1 = iota.hexToFloat(data,25,'B');\n local data2 = nil\n \tlocal len=string.len(data)\n \tif len == 74 then\n \tdata2 = iota.hexToFloat(data,29,'B');\n end\n local data3 = nil\n \tif len == 78 then\n \tdata2 = iota.hexToFloat(data,29,'B');\n \tdata3 = iota.hexToFloat(data,33,'B');\n end\n\tlocal out={\n data ={},\n result = {},\n type = 2\n }\n \tlocal subdevices = device.dnlinks[1].devices\n\tlocal subDevice = nil\n\tlocal subData={\n data ={},\n device=nil,\n type = 1,\n time=time\n }\t\n\tif subdevices ~=nil then\n\t\tfor index,child in pairs(subdevices) do \n\t\t\tsubDevice = child\n\t\t\tsubData.device = child.id\n\t\tend\n\tend\n\tlocal hour =iota.hexToByte(data,21,'B')\n\tlocal min =iota.hexToByte(data,22,'B')\n\tlocal acqnumber = tonumber(hour)*60 + tonumber(min)\n\tif tonumber(sentype) == 0 then --振弦\n \tlog.debug("fslora2:parseData振弦 subDevice = %s",json.encode(subDevice))\n\t\tlocal Phy=0\n\t\tif subDevice ~= nil then\n\t\t\tlocal k = subDevice.uplink.props.k or 0\n\t\t\tlocal kt = subDevice.uplink.props.kt or 0\n\t\t\tlocal f0 = subDevice.uplink.props.f0 or 0\n\t\t\tlocal t0 = subDevice.uplink.props.t0 or 0\n\t\t\tlog.debug("fslora2:parseData振弦 k =%s,kt=%s,f0=%s,t0=%s",k,kt,f0,t0)\n\t\t\t\n\t\t\tif k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\tPhy =k * (data1 ^ 2 - f0 ^ 2) + kt * (data3 - t0)\n\t\t\tend\n\t\t\tsubData.data = {frequency=data1, am=data2,temperature=data3,physicalvalue=Phy}\n \t\tlog.debug("fslora2:parseData振弦 subData.data =%s",json.encode(subData.data))\n\t\t\ttable.insert(out.data,subData)\n\t\t\t\n\t\tend\n\telseif tonumber(sentype) == 1 then --杆式测斜\n\t\tsubData.data = {anglex=data1, angley=data2,temperature=data3,_acq_number=acqnumber or 1000}\n\t\t\n\t\ttable.insert(out.data,subData)\n\telseif tonumber(sentype) == 2 then --盒式测斜\n\t\tsubData.data = {anglex=data1, angley=data2,temperature=data3,_acq_number=acqnumber or 1000}\n\t\ttable.insert(out.data,subData)\n\telseif tonumber(sentype) == 3 then --压差\n\t\tsubData.data = {pressure=data1,temp =data2}\n\t\ttable.insert(out.data,subData)\n\telseif tonumber(sentype) == 4 then --裂缝计\n\t\tsubData.data = {length=data1}\n\t\ttable.insert(out.data,subData)\n\telseif tonumber(sentype) == 5 then --三轴加速度\n\t\tsubData.data = {degreex=data1, degreey=data2}\n\t\ttable.insert(out.data,subData)\n\telse\n\n\tend\n \tlog.debug("fslora:parseData out = %s",json.encode(out))\n return json.encode(out)\nend\n\nparseWakeup=function(data)\n local node = string.sub(data,1,4)\n local power = iota.hexToByte(data,9,'B');\n\tlocal version = "V"..tostring(iota.hexToShort(data,12,'B')/100)\n\tlocal history = iota.hexToShort(data,14,'B')\n \tlog.debug("fslora2 node %s power %s version %s historycount %s",tostring(node),tostring(power),version,tostring(history))\nend\n\nreply=function(data)\n\tlocal node = string.sub(data,1,4)\n\tlocal msgid = string.sub(data,9,12)\t\n\tlocal buff = node.."0402"..msgid.."0009"\n\tlocal interval = device.props.interval\n \tlocal deviceid = tostring(device.dnlinks[1].devices[1].id)\n \tredis.set(device.id,msgid, tonumber(interval)+2)\n \tctx:sleep(3)\n\tlocal r1,r1ok = redis.get("iota_device_"..deviceid) --获取阈值超出时采集粒度\n \t\n\tif r1 ~= nil and r1ok then \n\t \tlocal value = Split(r1,":")\n\t\tlocal r = string.sub(value[2],1,1)\n\t\tlog.debug("fslora2 value %s r1 %s",r1,r)\n\t\tlocal level = tonumber(r)\n\t\tif level == 0 then \n\t\t\tinterval = tonumber(device.props.interval)\n \t\tlog.debug("fslora2 interval value %s ",tostring(interval))\n\t\telseif level == 1 then \n\t\t\tinterval = tonumber(device.props.interval1)\n \t\tlog.debug("fslora2 interval value %s ",tostring(interval))\n\t\telseif level == 2 then \n\t\t\tinterval = tonumber(device.props.interval2)\n \t\tlog.debug("fslora2 interval value %s ",tostring(interval))\n\t\telseif level == 3 then \n\t\t\tinterval = tonumber(device.props.interval3)\n \t\tlog.debug("fslora2 interval value %s ",tostring(interval))\n\t\telse\n\t\tend\n \t\n\tend\n\tbuff = iota.appendHexWord(buff, tonumber(interval), 'B')\n\tlocal year = os.date("%Y")\n\tlocal month = os.date("%m")\n\tlocal day = os.date("%d")\n\tlocal hour = os.date("%H")\n\tlocal minute = os.date("%M")\n\tlocal second = os.date("%S")\n\tbuff = iota.appendHexWord(buff, tonumber(year), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(month), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(day), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(hour), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(minute), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(second), 'B')\n\tbuff = iota.appendHexCrc(buff,'B',0)\n \tlog.debug("fslora2 buff %s",buff)\n\tctx:asend(buff)\n\t\n\tlog.debug("fslora2 set redies device %s msgid %s ",deviceid,msgid)\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend \n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n INLINE 2018-11-22 18:16:02.687+08 2019-07-30 09:29:14.457+08 2018-11-22 \N
+420f3efe-9304-4bb6-bdcb-d62235c8476c Campbell_01 \N 1.0 f38c8678-6245-4d4c-b6c2-b753ffe51a91 f38c8678-6245-4d4c-b6c2-b753ffe51a91 f f38c8678-6245-4d4c-b6c2-b753ffe51a91 Lua onData = function()\nend\n\nstart = function()\n log.debug('Campbell_01 loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n log.debug('Campbell_01 device=%s', json.encode(device))\n out = {\n type = 2,\n data = {},\n result = {}\n }\n local endian = 'B'\n local buff = ''\n local moduleNo\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = device.uplink.props.module\n --模块通道优先接口获取\n\n log.debug('Campbell_01设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n else\n moduleNo = device.props.moduleId\n\n log.debug('Campbell_01设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n end\n local registerCount=device.props.registerCount\n buff = iota.appendHexByte(buff, moduleNo, endian)\n --1:模块号\n buff = buff .. '030001'\n\tbuff = iota.appendHexWord(buff, registerCount, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug('Campbell_01 END buff = %s', buff)\n\n ok, resp = ctx:ssend(buff, 15000)\n\n if ok then\n local ErrorCode = IsValidOut(resp)\n if ErrorCode then\n log.debug('Campbell_01 数据有效=%s', resp)\n local allSubData = getAllDatas(resp)\n\t\tlog.debug('Campbell_01 allSubData=%s',json.encode(allSubData))\n --发送指令\n local subdevices = device.dnlinks[1].devices\n\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do --插入16个通道\n \tlog.debug('Campbell_01 child=%s', json.encode(child))\n channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t--if allSubData[channelNo]~=nil and allSubData[channelNo]>500 then\n \tlog.debug('Campbell_01 解析通道%s数据', channelNo)\n \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n \ttable.insert(out.data, result)\n \t--end\n end\n end\n else\n log.debug('Campbell_01 数据无效=%s', resp)\n out.result = {code = ercode, msg = erormsg}\n end\n else\n log.debug('Campbell_01 ok=false')\n out.result = {code = '1002', msg = 'ok=false'}\n end\n\n local resultData = json.encode(out)\n log.debug('Campbell_01 resultData=%s', resultData)\n ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n local DataList = {}\n local subDataArea = string.sub(hexStr, 7, -21)\n\t log.debug('Campbell_01 subDataArea=%s', subDataArea)\n local dataCount = string.len(subDataArea) / 8\n\t log.debug('Campbell_01 dataCount=%s', dataCount)\n for i = 1, dataCount do\n local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 8 + 1, (i - 1) * 8 + 8)\n\t\tlocal singleChannelDataHex1=string.sub(singleChannelDataHex,1,4)\n\t\tlocal singleChannelDataHex2=string.sub(singleChannelDataHex,5,8)\n\t\tlocal aa=singleChannelDataHex2 .. singleChannelDataHex1\n\t\tlog.debug('Campbell_01 singleChannelDataHex=%s', singleChannelDataHex)\n if aa=='ffffffff' then \n\t\t DataList[i]=0\n\t\telse\n\t\t DataList[i]= iota.hexToFloat(aa,0,'B')\n\t\tend\n\t\tlog.debug('Campbell_01 i=%s, DataList[i]=%s', i,DataList[i])\n \n end\n return DataList\n\t--log.debug('Campbell_01 DataList=%s', json.encode(DataList))\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n log.debug('Campbell_01 datatable=%s', json.encode(datatable))\n local subData = {\n type = 1,\n data = {},\n device = '',\n result = {}\n }\n\t\n\n local physicalvalue = datatable[subChannelId]\n \n singleData = {\n data = {\n\t\t\t \n physicalvalue = physicalvalue\n },\n device = childDevice.id,\n type = 1\n }\n\n return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n if device.dnlinks ~= nil then\n for k, dnlink in pairs(device.dnlinks) do\n for v, subdevice in pairs(dnlink.devices) do\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n log.debug('Campbell_01 has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('Campbell_01 has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\nIsValidOut = function(checkdata)\n log.debug('Campbell_01 开始校验数据=%s', checkdata)\n\n local hexHeader = iota.hexToByte(checkdata, 1, 'B')\n if hexHeader ~= 0x03 then\n ercode = 1001\n erormsg = 'HexCMD False'\n log.debug('Campbell_01 HexCMDFalse[%s]', hexHeader)\n return false\n end\n return true\n --crc\nend INLINE 2020-07-01 13:43:46.208+08 2020-07-08 08:56:52.781+08 2020-07-01 \N
+b377a3bf-8fe3-4007-b408-eb7b0158f988 jz_Inclination_1206 \N 1.0 3da5d630-ee41-4e97-8ca6-0c3cc6c9c486 3da5d630-ee41-4e97-8ca6-0c3cc6c9c486 f 3da5d630-ee41-4e97-8ca6-0c3cc6c9c486 Lua \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "jz_Inclination_1206", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jz_Inclination_1206 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, 'L')\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x02, 'L')\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("jz_Inclination_1206 SSend error!")\n end\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local angleX = iota.hexToShort(hex,3,'B')/100;\n local angleY=iota.hexToShort(hex,5,'B')/100;\n out.data = {\n\t\t\tangleX = angleX, \n\t\t\tangleY = angleY\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('jz_Inclination_1206 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('jz_Inclination_1206 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2019-12-06 11:33:08.793+08 2019-12-17 14:08:37.449+08 2019-12-06 \N
+64b4bff2-0b22-4b07-b732-9a80e5a5f8f9 lanju_5600 \N 1.0 d7992dd9-6356-40b2-ae7d-78cb5508b40c d7992dd9-6356-40b2-ae7d-78cb5508b40c f d7992dd9-6356-40b2-ae7d-78cb5508b40c Lua --D:\\SVN\\201902项目\\蓝居恶臭设备\\设备通信协议V2018.pdf\nstart = function()\n log.debug('lanju_5600 start module %s, ctx=', json.encode(device.uplink.props.module))\n --unixtimestamp('20190311134857')\nend\n\nonData = function(hex)\n log.debug('lanju_5600 Data=%s', hex)\n --全局\n out = {\n data = {},\n result = {}\n }\n\n local sData = toStrHex(hex)\n log.debug('lanju_5600 sData=%s', sData)\n local spliteData = Split(sData, '&&')\n local deviceData = Split(spliteData[1], ';')\n\n local moduledata = Split(deviceData[4], '=')\n local module = tonumber(moduledata[2]) --模块号\n log.debug('lanju_5600 deviceData=%s', module)\n local Data = Split(spliteData[2], ';')\n local timedata = Split(Data[1], '=')\n local timenum = timedata[2] --时间\n local recordTime=unixtimestamp(timenum)\n out.time=recordTime\n for key, value in pairs(Data) do\n Allot(value)\n end\n\n local resultData = json.encode(out)\n\n log.debug('lanju_5600 result=%s', json.encode(out))\n ctx:notify(resultData)\nend\n\n--23233031313853543d32323b434e3d323031313b50573d3132333435363b4d4e3d383838383838383832353334383931333b43503d26264461746154696d653d32303139303331313133343835373b4832532d5274643d332e303b4e48332d5274643d302e303b564f432d5274643d303b4f552d5274643d303b2626663135630d0a\n\n\n\n--字符串ascii->字符\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n-- allot 函数\nAllot = function(datastr)\n local name = Split(datastr, '=')\n\n if name[1] == 'PM25-Rtd' then\n local pm25 = tonumber(string.format('%0.3f', tonumber(name[2])))\n\n out.data.pm25 = pm25\n elseif name[1] == 'PM10-Rtd' then\n local pm10 = tonumber(string.format('%0.3f', tonumber(name[2])))\n\n out.data.pm10 = pm10\n elseif name[1] == 'NO2-Rtd' then\n local no2 = tonumber(string.format('%0.3f', tonumber(name[2])))\n\n out.data.no2 = no2\n elseif name[1] == 'SO2-Rtd' then\n local so2 = tonumber(string.format('%0.3f', tonumber(name[2])))\n\n out.data.so2 = so2\n elseif name[1] == 'TEMP-Rtd' then\n local temperature = tonumber(string.format('%0.3f', tonumber(name[2])))\n\n out.data.temperature = temperature\n elseif name[1] == 'HUMI-Rtd' then\n local humidity = tonumber(string.format('%0.3f', tonumber(name[2])))\n\n out.data.humidity = humidity\n elseif name[1] == 'H2S-Rtd' then\n local h2s = tonumber(string.format('%0.3f', tonumber(name[2])))\n out.data.h2s = h2s\n elseif name[1] == 'NH3-Rtd' then\n local nh3 = tonumber(string.format('%0.3f', tonumber(name[2])))\n out.data.nh3 = nh3\n elseif name[1] == 'VOC-Rtd' then\n local voc = tonumber(string.format('%0.3f', tonumber(name[2])))\n out.data.voc = voc\n elseif name[1] == 'OU-Rtd' then\n local ou = tonumber(string.format('%0.3f', tonumber(name[2])))\n out.data.ou = ou\n else\n end\nend\n\n\nunixtimestamp=function(dateStr)\n log.debug('lanju_5600 时间结算前=%s', dateStr)\n local year = tonumber(string.sub(dateStr,1,4));\n\tlocal month = tonumber(string.sub(dateStr,5,6));\n\tlocal day = tonumber(string.sub(dateStr,7,8));\n local hour = tonumber(string.sub(dateStr,9,10));\n local minute = tonumber(string.sub(dateStr,11,12));\n local second = tonumber(string.sub(dateStr,13,14));\n local timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n log.debug('lanju_5600 时间结算后=%s', recordTime)\n\treturn recordTime\nend INLINE 2019-03-12 09:47:09.354+08 2019-07-08 15:37:18.628+08 2019-03-12 \N
+68657c7b-5f8f-48a1-b49f-46e274358782 anXin_LVDT \N LVDT 主动上报(标准协议) 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start=function()\n log.debug("anxin_rain.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n local moduleStr=device.uplink.props.module\n log.debug("anxin_rain [%s] Data, ctx=%s",moduleStr,hex)\n local out={\n data ={},\n result = {}\n\t\n }\n \n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n\t local distance = iota.hexToInt(hex,24,'B')/10000\n\t local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anxin_rain timeStr=%s",timeStr)\n dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anxin_rain dateTimeStr=%s",dateTimeStr)\n timenow = unixtimestamp(dateTimeStr)\n\t\t\t\t\n\t\t out={\n\t\t\t\t data={ \n\t\t\t\t distance=distance\n\t\t\t\t },\n\t\t\t\t\ttime=timenow\n\t\t\t\t }\n \n \n \n \n \t\n local resultData =json.encode(out)\n log.debug("anxin_rain [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = errcode, msg = errormsg}\n ctx:done(json.encode(out))\n end \nend\n\nIsValid=function(data,deviceModule)\n if data == nil then\n errormsg = 'anxin_rain:Data is nil'\n errcode = 1001\n \tlog.debug("anxin_rain [%s] %s",deviceModule,errormsg)\n return false\n end\n\n local dataModule= iota.hexToShort(data,6,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('anxin_rain module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("anxin_rain [%s] %s",deviceModule,errormsg)\n return false\n end\n\n log.debug("anxin_rain [%s] 校验通过",deviceModule)\n return true\n \nend\n \nunixtimestamp = function(datestr)\n \n local year = tonumber(string.sub(datestr,1,4))\n local month = tonumber(string.sub(datestr,5,6))\n local day = tonumber(string.sub(datestr,7,8))\n local hour = tonumber(string.sub(datestr,9,10))\n local minute = tonumber(string.sub(datestr,11,12))\n local second = tonumber(string.sub(datestr,13,14))\n\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2019-12-23 15:47:29.045+08 2019-12-23 15:49:05.677+08 2019-12-23 \N
+6832b04d-9188-4104-99aa-7ed91c3c2391 shsd_level_18626 \N 1.0 6708aba6-65f9-4ec3-bfc2-227628154ff3 6708aba6-65f9-4ec3-bfc2-227628154ff3 f 6708aba6-65f9-4ec3-bfc2-227628154ff3 Lua --D:\\SVN\\201812项目\\20181221新增项目资料\\3 东北大学弓长岭露天矿--林邦杰\\水准仪协议说明书V1.2-2.pdf\nstart=function()\n log.debug("start %s, ctx=%s", "shsd_level_18626.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 4, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 4, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("shsd_level_18626,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '采集超时'} \n\t log.debug("shsd_level_18626 m=%s, ok is false",moduleNo)\n\t ctx:done(json.encode(errout))\n\tend\nend\n--020400000004f1fa\n--02040842C8000041C8000072AE\n--"pressure": 100\n--temperature:25\nunmarshall=function(hex,moduleNoStr)\n log.debug("shsd_level_18626 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n local pressure =iota.hexToFloat(hex,3,'B')\n\t\tlocal temperature =iota.hexToFloat(hex,7,'B');\n out.data = { \n pressure=string.format("%0.3f",pressure),\n\t\t\ttemperature=string.format("%0.2f",temperature)\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("shsd_level_18626 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = string.format('无效的数据长度=%s≠%s',string.len(data)/2,13)\n errcode = 1001\n return false\n end\n \n local dataModule=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataModule) then\t\n errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2019-01-07 11:05:19.032+08 2019-01-29 16:57:59.789+08 2019-01-07 \N
+9ad0fa84-5152-49ae-a277-01a96513528c weiyun_txt_transfer \N 1.0 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 f 650f75b2-4e3f-4393-8edb-0308c73e15b6 Lua start = function()\n log.debug('weiyun_txt_transfer device=%s', json.encode(device))\nend\n\nonData = function(data)\n log.debug('weiyun_txt_transfer start')\n if data ~= nil then\n if data.type == 'idau/file' then\n if data.ext == '.txt' then\n --log.debug("weiyun_txt_transfer recvd content = %s",data.payload)\n ParseFileTxt(data.payload)\n else\n log.debug('weiyun_txt_transfer unsupported file type: %s', data.ext)\n end\n else\n log.error('weiyun_txt_transfer 不支持的格式 recvd type is %s', data.type)\n end\n else\n log.error('weiyun_txt_transfer recvd content is nil')\n end\nend\n\nfunction ParseFileTxt(content)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local dataStrs = Split(content, '|\\r\\n')\n -- local dataLineCounts = table_leng(dataStrs)\n -- log.debug("weiyun_txt_transfer dataLineCounts=%s", dataLineCounts)\n local sensorsDataCount = {} --记录所有 传感器 数据数量\n local sensorsData = {} --记录所有 传感器 数据\n local sensorTime\n --解析 第一条数据\n local headStr=string.sub(dataStrs[2],1,5)\n log.debug('weiyun_txt_transfer 2 headStr=%sKK,hex=%s',headStr,strToHex(headStr))\n for lineNo, singleTimeData in pairs(dataStrs) do\n --log.debug("weiyun_txt_transfer singleTimeData=%s", singleTimeData)\n \n if string.len(singleTimeData)>20 then\n local singleTime_moduleDatas = Split(singleTimeData, '|\\t')\n --解析 单模块数据\n \n for moduleNo, mDatas in pairs(singleTime_moduleDatas) do\n --log.debug('weiyun_txt_transfer singleTime_moduleData_Counts=%s,dataCounts[1]=%s', singleTime_moduleData_Counts, mDatas)\n --解析 单通道数据\n singleTime_moduleData = string.gsub(mDatas, '\\t\\t', '') --singleTime_moduleDatas[moduleNo]\n --log.debug('weiyun_txt_transfer m=%s,singleTime_moduleData=%s', moduleNo, singleTime_moduleData)\n --去掉2个空格的情况\n local singleTime_channelDatas = Split(singleTime_moduleData, '\\t')\n\n --通道1开始\n local channelNo = 1\n for k, channelData in pairs(singleTime_channelDatas) do\n local str_head = string.sub(channelData, 1, 1)\n if str_head == '"' or sensorTime == nil then\n local timeStr = string.sub(channelData, 2, -2)\n sensorTime = unixtimestamp(timeStr)\n else\n local sensorData = tonumber(channelData)\n -- log.debug("k=%s,sensorData=%s[%s] ",k,sensorData,channelData)\n\n local sensorName = string.format('%s,%s', moduleNo, channelNo)\n --第一次添加数据\n if sensorsDataCount[sensorName] == nil then\n sensorsDataCount[sensorName] = 1\n\n sensorsData[sensorName] = {sensorData}\n else\n --sensorsData[sensorName].data.sampleFreq=lineNo\n --log.debug('sensorsData.data.physicalvalue=%s', json.encode(sensorsData))\n sensorsDataCount[sensorName] = sensorsDataCount[sensorName] + 1\n table.insert(sensorsData[sensorName], sensorData)\n end\n\n channelNo = channelNo + 1\n end\n end\n end\n end\n end\n log.debug('weiyun_txt_transfer 合并前')\n --合并数据\n for k, v in pairs(sensorsData) do\n local sensorAddress = Split(k, ',')\n local moduleNo = sensorAddress[1]\n local channelNo = sensorAddress[2]\n local childDevice = getDeviceInfo(moduleNo, channelNo)\n if childDevice ~= nil then\n local data1 = {\n data = {\n physicalvalue = v,\n _data_type = 'vib',\n sampleFreq = sensorsDataCount[k]\n },\n device = childDevice.id,\n time = sensorTime,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n local resultStr = json.encode(out)\n log.debug('weiyun_txt_transfer resultStr=%s', resultStr)\n ctx:notify(resultStr)\nend\n\n--获取传感器信息\ngetDeviceInfo =\n function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("geot_3300 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug('weiyun_txt_transfer 查询m=%s c=%s 设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n\n local moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n local channelStrCheck = child.uplink.props.channel\n --log.debug('weiyun_txt_transfer 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tostring(channelStrCheck) == tostring(channelNoId) then\n --log.debug('weiyun_txt_transfer m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('weiyun_txt_transfer m=%s c=%s subdevices=nil', tostring(moduleNoId), tostring(channelNoId))\n return nil\n end\nend\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\nunixtimestamp = function(dateStr)\n --2018-12-29,14:13:25\n dateStr = string.gsub(dateStr, ' ', '')\n local datelist = Split(dateStr, ',')\n local datebegin = Split(datelist[1], '-')\n local dateend = Split(datelist[2], ':')\n local year = tonumber(datebegin[1])\n local month = tonumber(datebegin[2])\n local day = tonumber(datebegin[3])\n local hour = tonumber(dateend[1])\n local minute = tonumber(dateend[2])\n local second = tonumber(dateend[3])\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n return recordTime\nend\n\n\nstrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2019-01-08 16:00:28.194+08 2019-02-14 13:37:38.28+08 2019-01-08 \N
+72df2fd5-cf83-449e-8581-0e7860bd0e06 M300 \N GNSS 1.0 2abdd5b8-eda7-4f9d-b63c-e16753db1ef1 2abdd5b8-eda7-4f9d-b63c-e16753db1ef1 f 2abdd5b8-eda7-4f9d-b63c-e16753db1ef1 Lua --[[\n测试数据\n{\n "type":"http",\n "code":200,\n "body":"{\\"data\\":[{\\"pointId\\":8005,\\"recordTime\\":1516101950000,\\"x\\":2498030.7828,\\"y\\":506126.4067,\\"z\\":90.6906},{\\"pointId\\":8005,\\"recordTime\\":1516147175000,\\"x\\":2498030.7607,\\"y\\":506126.3922,\\"z\\":90.7774}]}"\n}\n]]--\nstart=function()\n log.debug("M300 start moudleid=%s", device.props.pointId or "nil")\n --local apiname="findmm.record.queryByPointId"\n\tlocal req = {\n type= "http",\n url=device.uplink.props.url.."%s/data?startTime=%s&endTime=%s",\n \t--url="http://218.3.150.108:7003/gnss/%s/data?startTime=%s&endTime=%s", \n \tmethod="get",\n \tcontent="text/html",\n header={},\n }\n local param={\n pointId= tonumber(device.props.pointId),\n pageNo=1, \n pageSize=1, \n }\n local beginTime=tostring(stringToTime(device.props.beginTime)*1000)\n local r1,ok = redis.get(device.id.."_endTime")\n if ok and r1~=nil then\n beginTime=r1 -- 1200000\n end\n local endTime=os.time()*1000\n\n req.url=string.format(req.url,device.props.pointId,beginTime,endTime)\n log.debug("M300 moudleid=%s request url=%s",device.props.pointId,req.url)\n \n local ok,ack=ctx:ssend(req,4000)\n\n if ack==nil then\n log.debug("M300 moudleid=%s result=%s,ack= nil",device.props.pointId,ok)\n else\n log.debug("M300 moudleid=%s result=%s,ack=%s",device.props.pointId,ok,json.encode(ack))\n end\n\n local out={\n type = 2,\n data ={},\n result = {}\n }\n if not ok or ack==nil then\n out.result={\n code=1002,\n msg="timeout",\n }\n else --OK\n if ack.code==200 and ack.body ~="" then -- http应答\n qx=json.decode(ack.body) -- 有数据\n log.debug("M300 ack=%s",ack.body)\n local items = #qx.data or 0\n log.debug("M300 totalItems=%d", items)\n if items > 0 then\n for i=1,items,1 do\n local item= qx.data[i]\n local data1 = {\n data={\n x=item.x*1000 or 0,\n y=item.y*1000 or 0,\n z=item.z*1000 or 0,\n },\n device=device.id,\n \t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(item.recordTime)/1000)),\n type=1 \n }; \n table.insert(out.data,data1)\n\t\t\t\t\t--log.debug("M300 moudleid=%s set beginTime = %s , endtime = %s",device.props.pointId,beginTime,item.recordTime)\n\t\t\t\t\tif tonumber(beginTime) < tonumber(item.recordTime) then\n\t\t\t\t\t\tbeginTime = item.recordTime\n\t\t\t\t\t\t--log.debug("M300 moudleid=%s Replace beginTime = %s ",device.props.pointId,beginTime)\n\t\t\t\t\tend\n end\n\t\t\t\t\n log.debug("M300 moudleid=%s out:%s",device.props.pointId,json.encode(out))\n\t\t\t\t--log.debug("M300 moudleid=%s set lasttime ok key=%s,value=%s",device.props.pointId,device.id.."_endTime",beginTime)\n\t\t\t\tif redis.set(device.id.."_endTime", tostring(beginTime)) then\n\t\t\t\t\tlog.debug("M300 moudleid=%s redis set beginTime = %s ",device.props.pointId,tostring(beginTime))\n\t\t\t\tend\n\t\t\t\t\n\t\t\t\t--log.debug("M300 step redis moudleid=%s ",device.props.pointId)\n\t\t\t--\t\n\t\t\n ctx:done(json.encode(out))\n else\n log.debug("M300 moudleid=%s has not new data",device.props.pointId)\n end\n else\n log.debug("M300 moudleid=%s request data error:%s body:%s",device.props.pointId,ack.code,ack.body) \n end\n end\nend\n \nstringToTime=function( timeString ) --yyyyMMddHHmmss to 时间戳\n local yyyy = tonumber(string.sub(timeString , 1, 4)) \n local MM = tonumber(string.sub(timeString , 5, 6)) \n local DD = tonumber(string.sub(timeString , 7, 8))\n local HH = tonumber(string.sub(timeString , 9, 10))\n local mm = tonumber(string.sub(timeString , 11, 12))\n local ss = tonumber(string.sub(timeString , 13, 14))\n return os.time({year = yyyy, month = MM, day =DD, hour =HH, min =mm, sec = ss}) \nend \n\n INLINE 2020-07-20 09:55:57.115+08 2020-07-20 09:56:26.083+08 2020-07-20 \N
+bc33df8d-ef27-4fa0-92cd-770a83216eee fs_cloudvibrate_mopy \N 云振动配置下发 1.0 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f 67c8b9e9-38d6-4c9a-8772-9c96d78121ed Lua start = function()\n log.debug("fs_cloudvibrate_mopyx:device=%s",json.encode(device))\n local req = {\n type = "idau",\n payload = ""\n }\n local mop = {\n M = "c_vibf2",\n O = "S",\n P = { } -- 荷载\n }\n\n\n local linkcnt = #(device.dnlinks[1].devices)\n --log.debug("fs_cloudvibrate_mopyx:linkcnt=%d",linkcnt)\n\n \tlocal trmode = 0\n \tif device.props.triggermode == "软件触发" then\n \ttrmode = 0\n end\n \tif device.props.triggermode == "模拟硬件触发" then\n \ttrmode = 3\n end\n \tif device.props.triggermode == "数字硬件触发" then\n \ttrmode = 5\n end\n \tif device.props.triggermode == "硬件模拟数字触发" then\n \ttrmode = 6\n end\n\n local demode = 0\n \tif device.props.devicermode == "从设备异步" then\n \tdemode = 0\n end\n \tif device.props.devicermode == "主设备异步" then\n \tdemode = 2\n end\n \tif device.props.devicermode == "主设备同步" then\n \tdemode = 1\n end\n local set = {\n \tID=tonumber(device.dnlinks[1].devices[1].uplink.props.module) or 1,\n PA=device.props.uploadprocess,\n TT = trmode, \n TI=tonumber(device.props.triggerint),\n DM=demode, --设备工作模式\n ISH=tonumber(device.props.hour),--间隔触发启动时间\n ISM=tonumber(device.props.minute),\n ISS=tonumber(device.props.second),\n IAS=tonumber(device.props.acqtimeint),--间隔触发采样时长\n TAS=tonumber(device.props.acqtiming),--定时触发采样时长\n TTS={},CHS ={}\n }\n mop.P = set\n\tlocal arry= Split(device.props.startiming1, ":")\n\tif arry[1] == "" then \n\n\telse\n\t\tlocal startiming1 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming1)\n\tend\n\tarry= Split(device.props.startiming2, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\t\t\n\t\tlocal startiming2 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming2)\n\tend\n\tarry= Split(device.props.startiming3, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\n\t\tlocal startiming3 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming3)\n\tend\n\tarry= Split(device.props.startiming4, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\n\t\tlocal startiming4 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming4)\n\tend\n\tarry= Split(device.props.startiming5, ":")\t\n\tif arry[1] == "" then \n\n\telse\t\n\t\tlocal startiming5 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming5)\n\tend\n\tarry= Split(device.props.startiming6, ":")\t\n\tif arry[1] == "" then \n\n\telse\n\t\tlocal startiming6 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\t\n\t\t--table.insert(mop.P.TTS, startiming6)\n\tend\n\t\n \tfor i = 1, linkcnt, 1 do \n local link = device.dnlinks[1]\n local dev = link.devices[i]\n\t\t--log.debug("fs_cloudvibrate_mopyx:dev=%s", json.encode(dev))\n local dev_inf = link.devices[i].uplink\n \tlocal samolepoint = tonumber(dev_inf.props.samplefreq) * tonumber(dev_inf.props.duration)\n \tlocal trirmode = 0\n if dev_inf.props.triggermode == "绝对值" then\n trirmode = 0\n end\n if dev_inf.props.triggermode == "上升沿" then\n trirmode = 1\n end\n if dev_inf.props.triggermode == "下降沿" then\n trirmode = 2\n end\n if dev_inf.props.triggermode == "峰峰值" then\n trirmode = 3\n end\n local joinmode = 0\n if dev_inf.props.triggerjoin == "不参与" then\n joinmode = 0\n end\n if dev_inf.props.triggerjoin == "参与" then\n joinmode = 1\n end\n\t\tif dev_inf.props.amplification == "1" then\n\t\t\tamplify = 0\n end\n\t\tif dev_inf.props.amplification == "10" then\n\t\t\tamplify = 1\n end\n\t\tif dev_inf.props.amplification == "100" then\n\t\t\tamplify = 2\n end\t\t\n\t\tif dev_inf.props.amplification == "1000" then\n\t\t\tamplify = 3\n end \n\t\tif dev_inf.props.das == 'true' then\n\t\t\tdasvalue = 1\n\t\telse\n\t\t\tdasvalue = 0\n\t\tend\t\t\n\t\t\n local sensor = {\n CH = tonumber(dev_inf.props.channel),--通道号\n GA = amplify,--GainAmplifier放大倍数\n SF = tonumber(dev_inf.props.samplefreq),--SampleFreq 采样频率\n FF = tonumber(dev_inf.props.filterfreq),--FilterFreq 过滤频率\n DA = tonumber(dev_inf.props.dcdriftadj),--DCDriftAdj 直流漂移校准参数\n DAS = dasvalue,--DAS, 硬件DA启用? \n AA = tonumber(dev_inf.props.amplitudeadj),--AmplitudeAdj 幅值修正参数\n TL = tonumber(dev_inf.props.triglevel),-- TriggerLevel 触发电平\n TM = trirmode,--TriggerMode触发方式\n TJ = joinmode,--TriggerJoin 参与触发方式\n SR = samolepoint ,--SampleRate 采样点数1\n LP = tonumber(dev_inf.props.lagpoint),--LagPoint 滞后点数\n }\n\t\t--log.debug("fs_cloudvibrate_mopyx:sensor=%s", json.encode(sensor))\n table.insert(mop.P.CHS, sensor) \n end\n\tlocal resultstr = json.encode(mop)\n\tresultstr =\tresultstr:gsub(":null",":[{},{},{},{},{},{}]")\n\t--log.debug("fs_cloudvibrate_mopyx finish parse = %s",resultstr)\n req.payload = resultstr\n \t\n log.debug("fs_cloudvibrate_mopyx request=%s", resultstr)\n\n local ok, ack = ctx:ssend(req, 60000)\n result = {\n result = nil,\n type = 1,\n data = {\n ack = json.encode(ack)\n }\n }\n log.debug("fs_cloudvibrate_mopyx result=%s", json.encode(result))\n ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n if t == "host" then\n return 1\n elseif t == "relay" then\n return 2\n end\n return 3\nend\n\nfunction Split(szFullString, szSeparator) \n\tlocal nFindStartIndex = 1 \n\tlocal nSplitIndex = 1 \n\tlocal nSplitArray = {} \n\twhile true do \n\t\tlocal nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) \n\t\tif not nFindLastIndex then \n\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) \n\t\t\tbreak \n\t\tend \n\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) \n\t\tnFindStartIndex = nFindLastIndex + string.len(szSeparator) \n\t\tnSplitIndex = nSplitIndex + 1 \n\tend \n\treturn nSplitArray \nend INLINE 2019-08-22 11:35:09.014+08 2020-07-24 17:45:13.732+08 2019-08-22 \N
+c3959333-6b5d-4537-9433-6a547bdfb63c BJlrk_angle_RG931 \N LRK-RG931无线倾角仪 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --字符串ascii->字符\nstart=function()\n log.debug("BJ: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n log.debug("bj: Data=%s",hex)\n\t--全局\n out={\n data ={},\n result = {}\n }\n\n local sData= toStrHex(hex)\n log.debug("BJ: sData=%s",sData)\n local spliteData = Split(sData,'&&')\n\t log.debug("BJ: spliteData=%s",spliteData)\n\t\n\tfor key,value in pairs(spliteData) do\n\t\tAllot(value)\n\n\tend\n\n local resultData =json.encode(out) --输出传递到平台上\n log.debug("BJ: result=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex) \n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--string split函数 分割相应的字符\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n-- allot 函数 分割的字符分到各个table\nAllot = function(datastr)\n local pollutantTypes = Split(datastr, ';') --把datastr分割datastr为上面的value\n for key, value in pairs(pollutantTypes) do \n\t\tlog.debug("BJ value=%s", value)\n local name = Split(value, ':')\n\t\tlog.debug('到这ba')\n\t\tlog.debug("BJ name[1]=%s", name[1])\n if name[1] == 'GPS_DEV_J' then\n local GPS_DEV_J = tonumber(string.format('%0.2f', tonumber(name[2])))\n if GPS_DEV_J < 0 or GPS_DEV_J > 700 then\n out.data.GPS_DEV_J= nil\n log.debug('bj [%s]out.data.GPS_DEV_J=nil')\n out.result.code = 5001\n if out.result.msg ~= nil then\n out.result.msg =\n out.result.msg .. '[speed] out of GPS_DEV_J:' .. tostring(GPS_DEV_J) .. ' is out of[0,700]'\n else\n out.result.msg = '[speed] out of GPS_DEV_J:' .. tostring(GPS_DEV_J) .. ' is out of[0,700]'\n end\n else\n out.data.GPS_DEV_J = GPS_DEV_J\n end\n elseif name[1] == 'GPS_DEV_W' then\n local GPS_DEV_W = tonumber(string.format('%0.2f', tonumber(name[2])))\n if GPS_DEV_W < 0 or GPS_DEV_W > 700 then\n out.data.GPS_DEV_W = nil\n log.debug('FME [%s]out.data.GPS_DEV_W=nil')\n out.result.code = 5001\n if out.result.msg ~= nil then\n out.result.msg =\n out.result.msg .. '[speed] out of speed:' .. tostring(GPS_DEV_W) .. ' is out of[0,24.5]'\n else\n out.result.msg = '[speed] out of speed:' .. tostring(GPS_DEV_W) .. ' is out of[0,24.5]'\n end\n else\n out.data.GPS_DEV_W = GPS_DEV_W\n end\n\t\telseif name[1] == 'BAT_DL' then\n local BAT_DL = tonumber(string.format('%0.0f', tonumber(name[2])))\n if BAT_DL < 0 or BAT_DL > 700 then\n out.data.BAT_DL = nil\n log.debug('FME [%s]out.data.BAT_DL=nil')\n out.result.code = 5001\n if out.result.msg ~= nil then\n out.result.msg =\n out.result.msg .. '[speed] out of speed:' .. tostring(BAT_DL) .. ' is out of[0,24.5]'\n else\n out.result.msg = '[speed] out of speed:' .. tostring(BAT_DL) .. ' is out of[0,24.5]'\n end\n else\n out.data.BAT_DL = BAT_DL\n end\t\n elseif name[1] == ' QJY_SZX' then\n\t\t\tlog .debug('进来了么')\n local QJY_SZX = tonumber(string.format('%0.4f', tonumber(name[2])))\n\t\t\tlog .debug('就是这了')\n\t\t\tlog .debug("BJ: QJY_SZX=%s",QJY_SZX)\n if QJY_SZX < 0 or QJY_SZX > 70000 then\n out.data.QJY_SZX = nil\n out.result.code = 5001\n out.result.msg = '[QJY_SZX] out of QJY_SZX pm10:' .. tostring(QJY_SZX) .. ' is out of[-40,60]'\n else\n out.data.QJY_SZX =QJY_SZX\n end\n elseif name[1] == 'QJY_SZY' then\n local QJY_SZY = tonumber(string.format('%0.4f', tonumber(name[2])))\n if QJY_SZY < 0 or QJY_SZY > 7000 then\n out.data.QJY_SZY = nil\n out.result.code = 5001\n out.result.msg = '[QJY_SZY] out of QJY_SZY pm10:' .. tostring(QJY_SZY) .. ' is out of[-40,60]'\n else\n out.data.QJY_SZY =QJY_SZY\n end\n elseif name[1] == ' QJY_SZNH' then\n\t\t\tlog.debug('这里有没有')\n local QJY_SZNH = tonumber(string.format('%0.4f', tonumber(name[2])))\n if QJY_SZNH < 0 or QJY_SZNH > 7000 then\n out.data.QJY_SZNH = nil\n out.result.code = 5001\n out.result.msg = '[QJY_SZNH] out of QJY_SZNH pm10:' .. tostring(QJY_SZNH) .. ' is out of[-40,60]'\n else\n out.data.QJY_SZNH =QJY_SZNH\n end\n elseif name[1] == 'QJY_WD' then\n local QJY_WD = tonumber(string.format('%0.1f', tonumber(name[2])))\n if QJY_WD < 0 or QJY_WD > 200 then\n out.data.QJY_WD = nil\n out.result.code = 5001\n if out.result.msg ~= nil then\n out.result.msg =\n out.result.msg .. '[QJY_WD] out of noise :' .. tostring(QJY_WD) .. ' is out of[0,200]'\n else\n out.result.msg = '[QJY_WD] out of QJY_WD :' .. tostring(QJY_WD) .. ' is out of[0,200]'\n end\n else\n out.data.QJY_WD = QJY_WD\n end\n else\n end\n end\nend INLINE 2019-04-04 10:05:46.81+08 2019-04-19 09:38:07.282+08 2019-04-04 \N
+75267b8b-deeb-49a4-b3f8-0c775ea41cb0 qm_waterquality_2600 \N 常规五参数水质监测仪协议 1.0 d3684da7-e6e5-4925-a09f-dc80904a6b3a d3684da7-e6e5-4925-a09f-dc80904a6b3a f d3684da7-e6e5-4925-a09f-dc80904a6b3a Lua --//01 协议文档/智慧城市/河流断面监测/mu900通讯协议.pdf\nstart=function()\n local endian = 'B'\n local buff=''\n local result={\n data ={},\n result = {}\n }\n local mo = tonumber(device.uplink.props.module)\n \tif mo == nil then \n \tmo = 1\n end\n if mo > 255 or mo < 1 then\n errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n ctx:done(json.encode(errout))\n else\n buff=iota.appendHexByte(buff,mo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n buff=iota.appendHexByte(buff, 0x82, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x0A, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000)\n if ok then\n result = unmarshall(resp)\n end\n end\n local resultStr=json.encode(result)\n log.debug('resultStr=%s',resultStr)\n \tctx:done(resultStr)\nend\n--010314407ab3d541ca2afc410855d80000000044b12b013d19\n--moduleId=1\n--"PH": 3.917226,\n--"conductivity": 1417.343872,\n--"oxy": 8.520958,\n--"temp": 25.270988,\n--"turbidity": 0\nunmarshall=function(hex)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local pH = iota.hexToFloat(hex,3,'B')\n local temperature = iota.hexToFloat(hex,7,'B')\n local oxygen = iota.hexToFloat(hex,11,'B') \n local Conductivity = iota.hexToFloat(hex,15,'B')\n local Turbidity = iota.hexToFloat(hex,19,'B')\n out.data = {\n PH = pH,\n temp = temperature,\n oxy = oxygen,\n turbidity = Turbidity,\n conductivity = Conductivity\n }\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return out\nend\n \n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 25 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = 'CMD is not right'\n errcode = 1001\n return false\n end\n if device.uplink.props.module ~= tostring(iota.hexToByte(data,0,'B')) then\n \t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2017-09-14 18:58:23.435+08 2019-08-14 17:23:06.196+08 2017-09-14 \N
+a45d8866-5e4f-48fc-a646-8462d4a516a6 fs_inclinometer_1502 \N ModBus固定盒式测斜仪采集协议 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "fs_1502", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff=''\n buff=iota.appendHexWord(buff, 21, endian) -- 2: 类型=21\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_1502 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_1502 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\tlog.debug("fs_1502 moduleNo=%s 接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n buff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 1: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n log.debug("fs_1502 ssend=%s",buff )\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo) \n \tlog.debug('fs_1502 module %s result = %s',moduleNo,result)\n ctx:done(result)\n else\n\n end\n\nend\n\n\n\n--00152228818FEA0D710E400FCBFFF50877FFF96B7B789E\n--moduleId=8744 \n--"temp": 40.43,\n--"xDegree": -0.718729,\n--"yDegree": -0.431237\n--print("parsing data", hex)\n\n\nunmarshall=function(hex,moduleStr)\n\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local scale=1000000.00;\n local Temp = iota.hexToShort(hex,11,'B')/100.0;\n local xa = iota.hexToInt(hex,13,'B')/scale;\n local ya = iota.hexToInt(hex,17,'B')/scale;\n out.data = {\n temperature=Temp,\n anglex = tonumber(string.format("%5.2f",xa)),\n angley = tonumber(string.format("%5.2f",ya))\n };\n\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n log.debug('fs_1502 module %s 开始校验数据%s',moduleNo_check,data)\n if data == nil or string.len(data)/2 ~= 23 then\n errormsg = 'Data is nil or invalid'\n errcode = 1002\n return false\n end\n \n if iota.hexToByte(data,4,'B') ~= 0x81 then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n return false\n end\n\t--local moduleNo_check=device.props.moduleId or device.uplink.props.module\n local dataModule=iota.hexToShort(data,2,'B')\n if tostring(moduleNo_check) ~= tostring(dataModule) then\t\n errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNo_check,dataModule)\n errcode = 1004\n return false\n end\n log.debug('fs_1502 module %s 数据校验通过',moduleNo_check)\n return true\n--crc\nend\n \n\n\n \n\n INLINE 2017-08-28 19:48:05.651+08 2019-11-21 11:01:43.28+08 2017-08-26 \N
+997039c0-458d-4302-a91d-147382abfc99 CT_SafeStep \N 安全步距 1.0 aed14e79-005c-4916-afac-c1b60faeca1b aed14e79-005c-4916-afac-c1b60faeca1b f aed14e79-005c-4916-afac-c1b60faeca1b Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: 安全步距说明书.pdf\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "CT_SafeStep.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n \n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("CT_SS 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("CT_SS 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\tlocal count = #(device.dnlinks)\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 地址\n buff=iota.appendHexByte(buff, 3, endian) -- 1: 指令: 0x01 = 采集\n\tbuff=iota.appendHexWord(buff, 1, endian) -- 2: 起始地址\n\tbuff=iota.appendHexWord(buff, count, endian) \t\t --寄存器数量\n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 2,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\tlocal length = iota.hexToByte(data,2,'B')\n\tfor i=1,length/2 do\n\t\tlocal outdata = {\n\t\t\ttype = 1,\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t\tlocal step = iota.hexToShort(data,3 + 2*(i-1),'B')\n\t\toutdata.data.step = step\n\t\tlocal childDevice=getDeviceInfo(i)\n\t\toutdata.device = childDevice.id\n\t\ttable.insert(out.data,outdata)\n\tend\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('CT_SS开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('CT_SS数据校验通过')\n return true\n--crc\nend\n\n --获取传感器信息\nfunction getDeviceInfo(channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for k, dnlink in pairs(device.dnlinks) do\n for v, subdevice in pairs(dnlink.devices) do\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n log.debug('savoir_485 has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('savoir_485 has no subdevices.')\n return nil -- 没有子设备\n end\nend INLINE 2019-04-09 11:32:09.098+08 2019-04-09 15:31:05.797+08 2019-04-09 \N
+03ba9b30-1d60-4da2-b9ff-1de9b514300c lora2.0 \N 2.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n 函数:\n ssend: 同步发送数据到设备\n asend: 异步发送数据到设备\n notify: 通知平台解析完成的数据\n done: 采集完成, 结束当前采集过程.\n]] \nstart=function()\n log.debug("fslora2:start %s", "lora.lua")\nend\n\n-- 收到数据\nonData=function(data,pindex) \n local len=string.len(data)\n\tlocal module = string.sub(device.uplink.props.deveui,-4,-1)\n\tlocal modulecode = string.sub(data,1,4)\n\tlocal r=nil\n\tif module == modulecode then\n\t\tlocal code = iota.hexToByte(data,8,'B');\n\t\tlog.debug("fslora2:onData %s len %s code %s",data,len,tostring(code))\n\t\t\n\t\tlocal msgid,r1ok = redis.get(device.id)\n\t\tif len >= 70 and tostring(msgid) ~= string.sub(data,9,12) then \t\t\n\t\t\tr=parseData(data)\n\t\telseif len==54 and tostring(msgid) ~= string.sub(data,9,12)then\n\t\t\tlocal message = 'nil Data!'\n\t\t\tlocal errcode = 0\n\t\t\tlog.debug("fslora2 errorcode %s",tostring(code))\n\t\t\tif tonumber(code) == 1 then \n\t\t\t\tmessage = '无配置'\n\t\t\t\terrcode = 10010007 \n\t\t\telseif tonumber(code) == 2 then \n\t\t\t\tmessage = '模块号获取失败'\n\t\t\t\terrcode = 30010101\n\t\t\telseif tonumber(code) == 3 then \n\t\t\t\tmessage = '电量不足'\n\t\t\t\terrcode = 60010002 \n\t\t\telseif tonumber(code) == 4 then \n\t\t\t\tmessage = '断路'\n\t\t\t\terrcode = 30010022\n\t\t\telseif tonumber(code) == 5 then \n\t\t\t\tmessage = '短路'\n\t\t\t\terrcode = 30010023 \n\t\t\telseif tonumber(code) == 6 then \n\t\t\t\tmessage = '超时'\n\t\t\t\terrcode = 30030001 \n\t\t\tend\n\t\t\tlocal errorcode={\n\t\t\t data ={},\n\t\t\t result = {code=errcode,msg=message},\n\t\t\t type = 1\n\t\t\t}\n\t\t\tr = json.encode(errorcode)\n\t\telse\n\t\t\tlocal s={\n\t\t\t data =result,\n\t\t\t result = {},\n\t\t\t type = 1\n\t\t\t}\n\t\t r = json.encode(s)\n\t\tend\n\telse \n\t\tlocal errorcode={\n\t\t data ={},\n\t\t result = {code=30010101,msg="数据异常,发错数据"},\n\t\t type = 1\n\t\t}\n\t\tr = json.encode(errorcode)\n\tend\n local msg = r\n log.debug("fslora2:Parsed:%s",msg)\n ctx:notify(msg)\n \tif tostring(msgid) ~= string.sub(data,9,12) then\n \treply(data)\n end\nend\n\nparseData=function(data)\n -- 51长度: 头 25, 数据24, 尾2\n \tlog.debug("fslora2:parseData")\n\tparseWakeup(data)--打印设备信息\n\tlocal module = device.pr\n local node = string.sub(data,1,4)\n local sentype = iota.hexToByte(data,16,'B');\n local time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,17,'B'), month = iota.hexToByte(data,19,'B'), day =iota.hexToByte(data,20,'B'), hour =iota.hexToByte(data,21,'B'), min =iota.hexToByte(data,22,'B'), sec = iota.hexToByte(data,23,'B')}))\n local data1 = iota.hexToFloat(data,25,'B');\n local data2 = nil\n \tlocal len=string.len(data)\n \tif len == 74 then\n \tdata2 = iota.hexToFloat(data,29,'B');\n end\n local data3 = nil\n \tif len == 78 then\n \tdata2 = iota.hexToFloat(data,29,'B');\n \tdata3 = iota.hexToFloat(data,33,'B');\n end\n\tlocal out={\n data ={},\n result = {},\n type = 2\n }\n \tlocal subdevices = device.dnlinks[1].devices\n\tlocal subDevice = nil\n\tlocal subData={\n data ={},\n device=nil,\n type = 1,\n time=time\n }\t\n\tif subdevices ~=nil then\n\t\tfor index,child in pairs(subdevices) do \n\t\t\tsubDevice = child\n\t\t\tsubData.device = child.id\n\t\tend\n\tend\n\tlocal hour =iota.hexToByte(data,21,'B')\n\tlocal min =iota.hexToByte(data,22,'B')\n\tlocal acqnumber = tonumber(hour)*60 + tonumber(min)\n\tif tonumber(sentype) == 0 then --振弦\n \tlog.debug("fslora2:parseData振弦 subDevice = %s",json.encode(subDevice))\n\t\tlocal Phy=0\n\t\tif subDevice ~= nil then\n\t\t\tlocal k = subDevice.uplink.props.k or 0\n\t\t\tlocal kt = subDevice.uplink.props.kt or 0\n\t\t\tlocal f0 = subDevice.uplink.props.f0 or 0\n\t\t\tlocal t0 = subDevice.uplink.props.t0 or 0\n\t\t\tlog.debug("fslora2:parseData振弦 k =%s,kt=%s,f0=%s,t0=%s",k,kt,f0,t0)\n\t\t\t\n\t\t\tif k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\tPhy =k * (data1 ^ 2 - f0 ^ 2) + kt * (data3 - t0)\n\t\t\tend\n\t\t\tsubData.data = {frequency=data1, am=data2,temperature=data3,physicalvalue=Phy}\n \t\tlog.debug("fslora2:parseData振弦 subData.data =%s",json.encode(subData.data))\n\t\t\ttable.insert(out.data,subData)\n\t\t\t\n\t\tend\n\telseif tonumber(sentype) == 1 then --杆式测斜\n\t\tsubData.data = {anglex=data1, angley=data2,temperature=data3,_acq_number=acqnumber or 1000}\n\t\t\n\t\ttable.insert(out.data,subData)\n\telseif tonumber(sentype) == 2 then --盒式测斜\n\t\tsubData.data = {anglex=data1, angley=data2,temperature=data3,_acq_number=acqnumber or 1000}\n\t\ttable.insert(out.data,subData)\n\telseif tonumber(sentype) == 3 then --压差\n\t\tsubData.data = {pressure=data1,temp =data2}\n\t\ttable.insert(out.data,subData)\n\telseif tonumber(sentype) == 4 then --裂缝计\n\t\tsubData.data = {length=data1}\n\t\ttable.insert(out.data,subData)\n\telseif tonumber(sentype) == 5 then --三轴加速度\n\t\tsubData.data = {degreex=data1, degreey=data2}\n\t\ttable.insert(out.data,subData)\n\telse\n\n\tend\n \tlog.debug("fslora:parseData out = %s",json.encode(out))\n return json.encode(out)\nend\n\nparseWakeup=function(data)\n local node = string.sub(data,1,4)\n local power = iota.hexToByte(data,9,'B');\n\tlocal version = "V"..tostring(iota.hexToShort(data,12,'B')/100)\n\tlocal history = iota.hexToShort(data,14,'B')\n \tlog.debug("fslora2 node %s power %s version %s historycount %s",tostring(node),tostring(power),version,tostring(history))\nend\n\nreply=function(data)\n\tlocal node = string.sub(data,1,4)\n\tlocal msgid = string.sub(data,9,12)\t\n\tlocal buff = node.."0402"..msgid.."0009"\n\tlocal interval = device.props.interval\n \tlocal deviceid = tostring(device.dnlinks[1].devices[1].id)\n \tredis.set(device.id,msgid, tonumber(interval)+2)\n \tctx:sleep(3)\n\tlocal r1,r1ok = redis.get("iota_device_"..deviceid) --获取阈值超出时采集粒度\n \t\n\tif r1 ~= nil and r1ok then \n\t \tlocal value = Split(r1,":")\n\t\tlocal r = string.sub(value[2],1,1)\n\t\tlog.debug("fslora2 value %s r1 %s",r1,r)\n\t\tlocal level = tonumber(r)\n\t\tif level == 0 then \n\t\t\tinterval = tonumber(device.props.interval)\n \t\tlog.debug("fslora2 interval value %s ",tostring(interval))\n\t\telseif level == 1 then \n\t\t\tinterval = tonumber(device.props.interval1)\n \t\tlog.debug("fslora2 interval value %s ",tostring(interval))\n\t\telseif level == 2 then \n\t\t\tinterval = tonumber(device.props.interval2)\n \t\tlog.debug("fslora2 interval value %s ",tostring(interval))\n\t\telseif level == 3 then \n\t\t\tinterval = tonumber(device.props.interval3)\n \t\tlog.debug("fslora2 interval value %s ",tostring(interval))\n\t\telse\n\t\tend\n \t\n\tend\n\tbuff = iota.appendHexWord(buff, tonumber(interval), 'B')\n\tlocal year = os.date("%Y")\n\tlocal month = os.date("%m")\n\tlocal day = os.date("%d")\n\tlocal hour = os.date("%H")\n\tlocal minute = os.date("%M")\n\tlocal second = os.date("%S")\n\tbuff = iota.appendHexWord(buff, tonumber(year), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(month), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(day), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(hour), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(minute), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(second), 'B')\n\tbuff = iota.appendHexCrc(buff,'B',0)\n \tlog.debug("fslora2 buff %s",buff)\n\tctx:asend(buff)\n\t\n\tlog.debug("fslora2 set redies device %s msgid %s ",deviceid,msgid)\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend \n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n INLINE 2019-01-22 15:05:36.886+08 2019-06-20 10:24:46.03+08 2019-01-22 \N
+f186407a-b804-4ce8-ac19-989d7296dba7 shzr_temp_ZCT330M-SW \N NB访问电信平台 1.0 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f 8d2f03c7-32a2-42e4-befc-7dde5c965472 Lua --[[\n测试数据\n{\n "type":"http",\n "code":200,\n "body":"{\\"data\\":[{\\"pointId\\":8005,\\"recordTime\\":1516101950000,\\"x\\":2498030.7828,\\"y\\":506126.4067,\\"z\\":90.6906},{\\"pointId\\":8005,\\"recordTime\\":1516147175000,\\"x\\":2498030.7607,\\"y\\":506126.3922,\\"z\\":90.7774}]}"\n}\n]]--\n\n--http://iot.zc-sensor.com/nbiot/informationApi/getCurrentData.shtml?equipmentId=863716040678390\nstart=function()\n log.debug("shzr_temp_ZCT330M-SW start moudleid=%s", device.props.pointId or "nil")\n --local apiname="findmm.record.queryByPointId"\n\t local pointIds = device.props.pointId \n\tlocal req = {\n type= "http",\n -- url=device.uplink.props.url.."%s/data?startTime=%s&endTime=%s",\n\t\t--url=device.uplink.props.url,\n\t\turl="http://iot.zc-sensor.com/nbiot/informationApi/getCurrentData.shtml?",\n\t\t\n\t\t--http://iot.zc-sensor.com/nbiot/informationApi/getCurrentData.shtml?equipmentId=000000000000000\n \t--url="http://218.3.150.108:7003/gnss/%s/data?startTime=%s&endTime=%s", \n \tmethod="get",\n \tcontent="text/html",\n header={},\n } \n req.url=req.url.."equipmentId="..device.props.pointId\n log.debug("shzr_temp_ZCT330M-SW: 0000moudleid=%s request url=%s",device.props.pointId,req.url)\n local ok,ack=ctx:ssend(req,7000)\n if ack==nil then\n log.debug("shzr_temp_ZCT330M-SW: 1111moudleid=%s result=%s,ack= nil",device.props.pointId,ok)\n else\n log.debug("shzr_temp_ZCT330M-SW: 2222moudleid=%s result=%s,ack=%s",device.props.pointId,ok,json.encode(ack))\n end\n\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\t if ack.body ~="" then -- http应答\n qx=json.decode(ack.body) -- 有数据\n\t\t\t\n log.debug("44444shzr_temp_ZCT330M-SW ack=%s",ack.body)\n\t\t\tlog.debug("shzr_temp_ZCT330M-SW ack=%s",qx)\n\t\t\tlocal angleXs=qx['angleX']\n\t\t\tlog.debug('shzr_temp_ZCT330M-SW [%s] angleXs', angleXs)\n\t\t\tlocal angleXss=tonumber(angleXs)\n\t\t\tlocal angleYs=qx['angleY']\n\t\t\tlog.debug('shzr_temp_ZCT330M-SW [%s] angleYs', angleYs)\n\t\t\tlocal angleYss=tonumber(angleYs)\n\t\t\tlocal powers=qx['power']\n\t\t\tlog.debug('shzr_temp_ZCT330M-SW [%s] powers', powers)\n\t\t\tlocal powerss=tonumber(powers)\n\n\t\t\t out.data = {\n angleX=angleXss,\n\t\t\tangleY=angleYss,\n power=powerss\n }\n\t\t\t\t\tlog.debug("shzr_temp_ZCT330M-SW: 12121212121json.encode(out)%s",json.encode(out))\n\t\t\t ctx:done(json.encode(out))\n\n else\n log.debug("7777777shzr_temp_ZCT330M-SW: moudleid=%s request data error:%s body:%s",device.props.pointId,ack.code,ack.body) \n end\n \n\n\nend\n \n\n INLINE 2019-09-12 16:51:53.155+08 2019-11-15 12:00:35.188+08 2019-09-12 \N
+46011659-84f6-49cb-bfa0-69b295acb333 beijingzjzt_weight \N 测重 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s", "fs_weight_9803.lua")\nend\n\nonData=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n local out={\n data ={},\n result = {}\n }\n local IDX_Start = 0 -- 起始指令\n\tlocal IDX_CMD = 1; -- 数据字节\n local IDX_axeisCount = 2; -- 轴数\n local IDX_year = 6\n\tlocal IDX_month =5\n\tlocal IDX_day = 4\n local IDX_hour = 7\n local IDX_minute =8\n local IDX_second = 9\n\tlocal IDX_second1 = 10\n\tlocal IDX_Sequence=18; --序列号\n\tlocal IDX_CarModle = 22; -- 车类型\n\tlocal IDX_Roadway = 30; -- 车道号\n\tlocal IDX_Speed=32; --速度\n\tlocal IDX_AxieWeight1 = 34; -- 轴一P1重量\n local IDX_AxieWeight2 = 36; -- 轴二p1重量\n\tlocal IDX_AxieWeight3 = 38; -- 轴三p1重量\n\tlocal IDX_AxieWeight4 = 40; -- 轴四p1重量\n\tlocal IDX_AxieWeight5 = 42; -- 轴五p1重量\n\tlocal IDX_AxieWeight6 = 44; -- 轴六p1重量\n\tlocal IDX_AxieWeight7 = 46; -- 轴七p1重量\n\tlocal IDX_AxieWeight8 = 48; -- 轴八p1重量\n\tlocal IDX_AxieWeight9 = 50; -- 轴九p1重量\n\tlocal IDX_AxieWeight10 = 52; -- 轴十p1重量\n\tlocal IDX_AxieWeight11 = 54; -- 轴一P2重量\n local IDX_AxieWeight12 = 56; -- 轴二p2重量\n\tlocal IDX_AxieWeight13 = 58; -- 轴三p2重量\n\tlocal IDX_AxieWeight14 = 60; -- 轴四p2重量\n\tlocal IDX_AxieWeight15 = 62; -- 轴五p2重量\n\tlocal IDX_AxieWeight16 = 64; -- 轴六p2重量\n\tlocal IDX_AxieWeight17 = 66; -- 轴七p2重量\n\tlocal IDX_AxieWeight18 = 68; -- 轴八p2重量\n\tlocal IDX_AxieWeight19 = 70; -- 轴九p2重量\n\tlocal IDX_AxieWeight20 = 72; -- 轴十p2重量\n\tlocal IDX_TotalBase1 =74; -- 轴距一\n\tlocal IDX_TotalBase2 =76; -- 轴距二\n\tlocal IDX_TotalBase3 =78; -- 轴距三\n local IDX_TotalBase4 =80; -- 轴距四\n\tlocal IDX_TotalBase5 =82; -- 轴距五\n\tlocal IDX_TotalBase6 =84; -- 轴距六\n\tlocal IDX_TotalBase7 =86; -- 轴距七\n\tlocal IDX_TotalBase8 =88; -- 轴距八\n\tlocal IDX_TotalBase9 =90; -- 轴距九\n\tlocal IDX_Carlength = 92; -- 车长\n\tlocal IDX_Sensor=106; --传感器是否失效\n\tlocal IDX_Temp=110; --温度\n\tlocal IDX_Effective=112; --有效值\n\t local IDX_Weight = 114; -- 重量\n\t local IDX_Cardirection = 120; -- 方向\n\n\t local axiStart = iota.hexToByte(hex,IDX_Start,'B'); --起始位\n log.debug("startw %s", "fs_weight_9803.lua")\n \n \n\tlocal axiCMD = iota.hexToByte(hex,IDX_CMD); -- 数据字节\n\t\n local axisnum = iota.hexToUShort(hex,IDX_axeisCount,'L'); -- 轴数\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then \n local year = iota.hexToByte(hex,IDX_year,"B")\n\t log.debug("fs_weight_9803 year=%s",year)\n if year ~= nil then\n year= year + 2000\n end\n\t\tlocal month =iota.hexToByte(hex,IDX_month,"B")\n log.debug("fs_weight_9803 year=%s",year)\n\t\tlocal day = iota.hexToByte(hex,IDX_day,"B")\n\t\tlocal hour = iota.hexToByte(hex,IDX_hour,"B")\n\t\tlocal minute = iota.hexToByte(hex,IDX_minute,'B')\n\t\tlocal second1 = iota.hexToByte(hex,IDX_second,'B')\n\t\tlocal second2= iota.hexToByte(hex,IDX_second1,'B')\n\t\tlocal second=second1.."."..second2\n\t\tlog.debug("fs_weight_9803 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n\t\tlocal timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\t\tlog.debug("fs_weight_9803 timenum=%s",timenum)\n\t\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\t\tlog.debug("fs_weight_9803 recordTime=%s",recordTime)\n\t\tlocal axieSequence = iota.hexToFloat(hex,IDX_sequence,'L'); --序列号\n\t --车型\n\t\tlocal Modle1rist=string.sub(hex,45,47);\n\t\tlocal axieCarModle =toStrHex(Modle1rist)\n\t\tlocal axieRoadway = iota.hexToUShort(hex,IDX_Roadway,'L') --车道号\n\t\tlocal axieSpeed = iota.hexToUShort(hex,IDX_Speed,'L') --速度\n\t\tlocal axieWeight1 = iota.hexToShort(hex,IDX_AxieWeight1,'L') --轴一P1重量\n\t\tlocal axieWeight2 = iota.hexToShort(hex,IDX_AxieWeight2,'L') --轴二p1重量\n\t\tlocal axieWeight3 = iota.hexToShort(hex,IDX_AxieWeight3,'L') --轴三p1重量\n\t\tlocal axieWeight4 = iota.hexToShort(hex,IDX_AxieWeight4,'L')\n\t\tlocal axieWeight5 = iota.hexToShort(hex,IDX_AxieWeight5,'L')\n\t\tlocal axieWeight6 = iota.hexToShort(hex,IDX_AxieWeight6,'L')\n\t\tlocal axieWeight7 = iota.hexToShort(hex,IDX_AxieWeight7,'L')\n\t\tlocal axieWeight8 = iota.hexToShort(hex,IDX_AxieWeight8,'L')\n\t\tlocal axieWeight9 = iota.hexToShort(hex,IDX_AxieWeight9,'L')\n\t\tlocal axieWeight10 = iota.hexToShort(hex,IDX_AxieWeight10,'L')\n\t\tlocal axieWeight11 = iota.hexToShort(hex,IDX_AxieWeight11,'L')\n\t\tlocal axieWeight12 = iota.hexToShort(hex,IDX_AxieWeight12,'L')\n\t\tlocal axieWeight13 = iota.hexToShort(hex,IDX_AxieWeight13,'L')\n\t\tlocal axieWeight14 = iota.hexToShort(hex,IDX_AxieWeight14,'L')\n\t\tlocal axieWeight15 = iota.hexToShort(hex,IDX_AxieWeight15,'L')\n\t\tlocal axieWeight16 = iota.hexToShort(hex,IDX_AxieWeight16,'L')\n\t\tlocal axieWeight17 = iota.hexToShort(hex,IDX_AxieWeight17,'L')\n\t\tlocal axieWeight18 = iota.hexToShort(hex,IDX_AxieWeight18,'L')\n\t\tlocal axieWeight19 = iota.hexToShort(hex,IDX_AxieWeight19,'L')\n\t\tlocal axieWeight20 = iota.hexToShort(hex,IDX_AxieWeight20,'L')\n\t\tlocal axieTotalBase1 = iota.hexToShort(hex,IDX_TotalBase1,'L'); -- 轴距一\n\t\tlocal axieTotalBase2 = iota.hexToShort(hex,IDX_TotalBase2,'L'); -- 轴距二\n\t\tlocal axieTotalBase3 = iota.hexToShort(hex,IDX_TotalBase3,'L'); -- 轴距三\n\t\tlocal axieTotalBase4 = iota.hexToShort(hex,IDX_TotalBase4,'L'); -- 轴距四\n\t\tlocal axieTotalBase5 = iota.hexToShort(hex,IDX_TotalBase5,'L'); -- 轴距五\n\t\tlocal axieTotalBase6 = iota.hexToShort(hex,IDX_TotalBase6,'L'); -- 轴距六\n\t\tlocal axieTotalBase7 = iota.hexToShort(hex,IDX_TotalBase7,'L'); -- 轴距七\n\t\tlocal axieTotalBase8 = iota.hexToShort(hex,IDX_TotalBase8,'L'); -- 轴距八\n\t\tlocal axieTotalBase9 = iota.hexToShort(hex,IDX_TotalBase9,'L'); -- 轴距九\n\t\tlocal axieCarlength= iota.hexToShort(hex, IDX_Carlength,'L'); -- 车长\n\t\tlocal axieEffective= iota.hexToShort(hex, IDX_Effective,'L'); -- 有效值\n\t\tlocal axieTemp= iota.hexToShort(hex,IDX_Temp,'L'); --温度\n \tlog.debug("fs_weight_9803 axieTemp=%s",axieTemp);\n\t\tif axieTemp~= nil then\n axieTemp = axieTemp -100\n end\n\t\tlocal axieWeight = iota.hexToUInt(hex,IDX_Weight,'L'); --重量\n\t\tlocal axieCardirection= iota.hexToShort(hex,IDX_Cardirection,'L') --方向\n\t\tout.data = {\n\t\t CMD =axiCMD,\n\t\t\tCardirection = axieCardirection,\n\t\t\tSequence = axieSequence,\n\t\t\tshaftnum=axisnum,\n axieCarModle = axieCarModle1rist,\n axieRoadway= axieRoadway,\n\t\t\tSpeed= Speed,\n axieWeight1 = axieWeight1,\n axieWeight2= axieWeight2,\n axieWeight3= axieWeight3,\n axieWeight4= axieWeight4,\n axieWeight5= axieWeight5,\n axieWeight6= axieWeight6,\n axieWeight7= axieWeight7,\n axieWeight8= axieWeight8,\n\t\t\taxieWeight9= axieWeight9,\n\t\t\taxieWeight10= axieWeight10,\n\t\t\taxieWeight11= axieWeight11,\n\t\t\taxieWeight12= axieWeight12,\n\t\t\taxieWeight13= axieWeight13,\n\t\t\taxieWeight14= axieWeight14,\n\t\t\taxieWeight15= axieWeight15,\n\t\t\taxieWeight16= axieWeight16,\n\t\t\taxieWeight17= axieWeight17,\n\t\t\taxieWeight18= axieWeight18,\n\t\t\taxieWeight19= axieWeight19,\n\t\t\taxieWeight20= axieWeight20,\n\t\t\taxieTotalBase1=axieTotalBase1,\n axieTotalBase2=axieTotalBase2,\n axieTotalBase3=axieTotalBase3,\n axieTotalBase4=axieTotalBase4,\n axieTotalBase5=axieTotalBase5,\n axieTotalBase6=axieTotalBase6,\n axieTotalBase7=axieTotalBase7,\n axieTotalBase8=axieTotalBase8,\n\t\t\taxieTotalBase9=axieTotalBase9,\n\t\t\tCarlength=axieCarlength,\n Sensor=axieSensor, \n temperature = axieTemp,\n\t\t\tEffective = axieEffective,\n\t\t\tWeight= axieWeight,\n\t\t\tTime=recordTime\n }\t\t\n\t\t\n\t\t--out.time=recordTime\n else\n out.result = {code=errcode,msg=errormsg} \n end\n\t\n local resultData =json.encode(out)\n ctx:notify(resultData)\nend\n\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\nIsValid=function(data)\n log.debug('BK_WaterLevel开始校验数据')\n \n if iota.hexToUShort(data,IDX_Sensor,'L') == 0x01 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if iota.hexToUShort(data,axiStart,'L') == 0x02 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n log.debug('BK_WaterLevel数据校验通过')\n return true\n--crc\nend\n\n\n INLINE 2019-03-25 17:29:01.726+08 2019-05-13 14:08:50.929+08 2019-03-25 \N
+e9449473-2655-42a6-9523-50f4da34bba0 fs-microPower-2405 \N 2.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n\tlog.debug('fs_microPower_test : devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n local dataLen=string.len(data)/2\n\tif data ~= nil and dataLen>10 then --长度校验\n \t\tlocal dtuid = device.uplink.props.id\n\t\t\t--log.debug('fs_microPower_test : dtuid= %s devices data =%s', dtuid,data)\n\t\t\tParseData(data)\n\telse\n\t\t\tlog.error('fs_microPower_test : recvd content is nil')\n\tend\nend\n\nfunction ParseData(data)\n\tout = {\n\t\t\tdata = {},\n\t\t\tresult = {},\n\t\t\ttype = 2\n\t}\n log.debug('fs_microPower_test dtuId=%s, receive数据 data =%s',device.uplink.props.id ,data)\n\tif string.sub(data, 1, 2) == '01' and string.sub(data, -2, -1) == 'fa' then --振动数据\n\t\t\t--log.debug('fs_microPower_test : 振动数据 data =%s', data)\n\t\t\tlocal package = iota.hexToShort(data, 8, 'L')\n\t\t\tlocal packagecount = iota.hexToShort(data, 10, 'L')\n\t\t\tlocal datpackage = string.sub(data, 41, -9)\n\t\t\tlocal moduleid = iota.hexToShort(data, 16, 'L')\n\n\t\t\tlocal req1 = ''\n\t\t\tlocal req2 = ''\n\t\t\tlocal req = ''\n\t\t\treq1 = iota.appendHexByte(req1, 01, 'L') -- 0-3 压缩协议 4-7 协议版本\n\t\t\treq1 = iota.appendHexByte(req1, 0x02, 'L')\n\t\t\treq1 = iota.appendHexWord(req1, 0x0007, 'L')\n\t\t\treq1 = iota.appendHexWord(req1, 0x0000, 'L')\n\n\t\t\treq2 = iota.appendHexWord(req2, package, 'L')\n\t\t\treq2 = iota.appendHexWord(req2, packagecount, 'L')\n\t\t\treq2 = iota.appendHexWord(req2, 0x0000, 'L')\n\t\t\treq2 = iota.appendHexWord(req2, 0x0000, 'L')\n\t\t\treq2 = iota.appendHexWord(req2, moduleid, 'L')\n\t\t\treq2 = iota.appendHexWord(req2, 0x0000, 'L')\n\t\t\tlocal checkdat = req1 .. req2\n\t\t\tlocal checksum = HeadCheckSum(checkdat)\n\t\t\treq = req1\n\t\t\treq = iota.appendHexWord(req, checksum, 'L')\n\t\t\treq = req .. req2\n\t\t\treq = iota.appendHexWord(req, package, 'L')\n\t\t\treq = iota.appendHexByte(req, 0, 'L')\n\t\t\treq = iota.appendHexByte(req, 0, 'L')\n\t\t\treq = iota.appendHexByte(req, 0, 'L')\n\t\t\treq = iota.appendHexByte(req, 0, 'L')\n\t\t\treq = iota.appendHexByte(req, 0, 'L')\n\t\t\treq = req .. '00000000'\n\t\t\treq = iota.appendHexCrc(req, 'L', 0) --校验\n\t\t\tlocal crc16 = string.sub(req, -4, -1)\n\t\t\treq = string.sub(req, 1, -13)\n\t\t\treq = req .. crc16\n\t\t\treq = iota.appendHexByte(req, 0, 'L')\n\t\t\treq = iota.appendHexByte(req, 0xfa, 'L')\n\t\t\t--log.debug('fs_microPower_test: datfileback: %s', req)\n\t\t\tctx:asend(req, 20000)\n\n\t\t\tif package == packagecount then\n\t\t\t\t\tlocal r1, ok = redis.get(device.id .. '_mpzd')\n\t\t\t\t\t--log.debug('fs_microPower_test: 解析dat:r1= %s', r1)\n\t\t\t\t\tParseFileDat(r1)\n\t\t\telse\n\t\t\t\t\tif package == 1 then\n\t\t\t\t\t\t\tlocal firstpackage = string.sub(datpackage, -80, -1)\n\t\t\t\t\t\t\tredis.set(device.id .. '_mpzd', firstpackage)\n\t\t\t\t\t\t\t--log.debug('fs_microPower_test: 接收dat:datpackage= %s', firstpackage)\n\t\t\t\t\t\t\tlocal re = {\n\t\t\t\t\t\t\t\t\tresult = nil,\n\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\tack = '振动数据首包'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tctx:notify(json.encode(re))\n\t\t\t\t\telse\n\t\t\t\t\t\t\tlocal r1, ok = redis.get(device.id .. '_mpzd')\n\t\t\t\t\t\t\t--log.debug('fs_microPower_test: 接收dat:r1= %s package=%s', r1, package)\n\t\t\t\t\t\t\tlocal data = r1 .. datpackage\n\t\t\t\t\t\t\tredis.set(device.id .. '_mpzd', data)\n\t\t\t\t\t\t\tlocal re = {\n\t\t\t\t\t\t\t\t\tresult = nil,\n\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\tack = '振动数据'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tctx:notify(json.encode(re))\n\t\t\t\t\tend\n\t\t\tend\n\telse -- 非振动数据\n\t\t\tif string.sub(data, 13, 16) == '8a00' then\n\t\t\t\t\tlocal rtumodule = iota.hexToShort(data, 3, 'B')\n\t\t\t\t\tlocal power = iota.hexToByte(data, 13, 'B')\n\t\t\t\t\tlog.debug('fs_microPower_test: 剩余电量: %s', power)\n\t\t\t\t\tlocal strdevice = toHexStr(json.encode(device))\n\t\t\t\t\tstrdevice = iota.appendHexCrc(strdevice, 'B', 0)\n\t\t\t\t\tlocal crc = string.sub(strdevice, -4, -1)\n\t\t\t\t\t--log.debug('fs_microPower_test : devices crc =%s', crc)\n\t\t\t\t\tlocal r1, ok = redis.get(device.id .. '_mpset')\n\t\t\t\t\tif ok and r1 ~= nil then\n\t\t\t\t\t\t\tif crc == r1 then\n\t\t\t\t\t\t\t\t\t--log.debug('fs_microPower_test : 配置无修改')\n\t\t\t\t\t\t\t\t\tlocal req = ''\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0xfe, 'B') --帧头\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x000c, 'B') --设备号:0x0B,多通道数据采集系统\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, rtumodule, 'B') --模块号\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0x01, 'B') --命令源\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0A01, 'B') --指令\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%m'), 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%d'), 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%H'), 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%M'), 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0, 'B') -- 是否下发\n\t\t\t\t\t\t\t\t\t--req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n\t\t\t\t\t\t\t\t\treq = iota.appendHexCrc(req, 'B', 0) --校验\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0xef, 'B') --帧尾\n\t\t\t\t\t\t\t\t\tlog.debug('fs_microPower_test: dtuid: %s,苏醒帧返回: %s', device.uplink.props.id,req)\n\t\t\t\t\t\t\t\t\tctx:asend(req, 20000)\n\t\t\t\t\t\t\t\t\tlocal re = {\n\t\t\t\t\t\t\t\t\t\t\tresult = nil,\n\t\t\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\t\t\tack = '配置无修改'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tctx:notify(json.encode(re))\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlog.debug('fs_microPower_test : 配置有修改')\n\t\t\t\t\t\t\t\t\tlocal req = ''\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0xfe, 'B') --帧头\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x000c, 'B') --设备号:0x0B,多通道数据采集系统\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, rtumodule, 'B') --模块号\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0x01, 'B') --命令源\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0A01, 'B') --指令\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%m'), 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%d'), 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%H'), 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%M'), 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, 1, 'B') -- 是否下发\n\t\t\t\t\t\t\t\t\t--req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n\t\t\t\t\t\t\t\t\treq = iota.appendHexCrc(req, 'B', 0) --校验\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0xef, 'B') --帧尾\n\t\t\t\t\t\t\t\t\tlog.debug('fs_microPower_test: dtuid: %s,苏醒帧返回: %s', device.uplink.props.id,req)\n\t\t\t\t\t\t\t\t\tctx:asend(req, 20000)\n\t\t\t\t\t\t\t\t\tredis.set(device.id .. '_mpset', tostring(crc))\n\t\t\t\t\t\t\t\t\tctx:sleep(2)\n\t\t\t\t\t\t\t\t\tDeploy() --配置\n\t\t\t\t\t\t\tend\n\t\t\t\t\telse\n\t\t\t\t\t\t\tlog.debug('fs_microPower_test : 配置初次配置')\n\t\t\t\t\t\t\tlocal req = ''\n\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0xfe, 'B') --帧头\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x000c, 'B') --设备号:0x0B,多通道数据采集系统\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, rtumodule, 'B') --模块号\n\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0x01, 'B') --命令源\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0A01, 'B') --指令\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%m'), 'B')\n\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%d'), 'B')\n\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%H'), 'B')\n\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%M'), 'B')\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n\t\t\t\t\t\t\treq = iota.appendHexByte(req, 1, 'B') -- 是否下发\n\t\t\t\t\t\t\t--req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n\t\t\t\t\t\t\treq = iota.appendHexCrc(req, 'B', 0) --校验\n\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0xef, 'B') --帧尾\n\t\t\t\t\t\t\tlog.debug('fs_microPower_test: dtuid: %s,苏醒帧返回: %s', device.uplink.props.id,req)\n\t\t\t\t\t\t\tctx:asend(req, 20000)\n\t\t\t\t\t\t\tredis.set(device.id .. '_mpset', tostring(crc))\n\t\t\t\t\t\t\tctx:sleep(2)\n\t\t\t\t\t\t\tDeploy() --配置\n\t\t\t\t\tend\n\t\t\tend\n\n\t\t\tif string.sub(data, 13, 16) == '8a02' then\n\t\t\t\t\tlog.debug('fs_microPower_test : 设备休眠')\n\t\t\t\t\tlocal re = {\n\t\t\t\t\t\t\tresult = nil,\n\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\tack = '设备休眠'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx:notify(json.encode(re))\n\t\t\tend\n\n\t\t\tlocal rtumodule = iota.hexToShort(data, 3, 'B')\n\t\t\tif string.sub(data, 13, 16) == '8601' then\n\t\t\t\t\tlocal time = os.date('%Y-%m-%dT%H:%M:%S+08:00', os.time({year = iota.hexToShort(data, 15, 'B'), month = iota.hexToByte(data, 17, 'B'), day = iota.hexToByte(data, 18, 'B'), hour = iota.hexToByte(data, 19, 'B'), min = iota.hexToByte(data, 20, 'B'), sec = iota.hexToByte(data, 21, 'B')}))\n\t\t\t\t\tlocal sensorCount = iota.hexToByte(data, 26, 'B')\n\n\t\t\t\t\tlocal isover = iota.hexToByte(data, 25, 'B') --尾包\n\t\t\t\t\tlocal datalength = 0\n\t\t\t\t\tlocal firststart = 27\n\t\t\t\t\tfor i = 1, sensorCount, 1 do\n\t\t\t\t\t\t\tfirststart = firststart + datalength\n\t\t\t\t\t\t\tlocal sensorType = iota.hexToByte(data, firststart, 'B')\n\t\t\t\t\t\t\tlocal module = iota.hexToShort(data, firststart + 3, 'B')\n\t\t\t\t\t\t\tlocal channel = iota.hexToByte(data, firststart + 2, 'B')\n \t\t\t\t\t--log.debug('fs_microPower_test: dtuid: %s,module返回: %s', device.uplink.props.id,tostring(module))\n\t\t\t\t\t\t\tdatalength = iota.hexToByte(data, firststart + 1, 'B') + 6\n\t\t\t\t\t\t\tif sensorType == 0 then --振弦\n\t\t\t\t\t\t\t\t\tlocal childDevice = getZxDeviceInfo(module, channel)\n\t\t\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data, firststart + 12, 'B'),\n\t\t\t\t\t\t\t\t\t\t\t\t\tam = iota.hexToFloat(data, firststart + 16, 'B'),\n\t\t\t\t\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data, firststart + 20, 'B')\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\t\t\ttime = time\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttable.insert(out.data, rst)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif sensorType == 1 then --485\n\t\t\t\t\t\t\t\t\tlocal childDevice = getDeviceInfo(module, channel)\n\t\t\t\t\t\t\t\t\tlocal protocalCode = iota.hexToShort(data, firststart + 6, 'B')\n\t\t\t\t\t\t\t\t\tlog.debug('fs_microPower_test: protocalCode: %s', protocalCode)\n\t\t\t\t\t\t\t\t\tif protocalCode == 1503 or protocalCode == 1502 then --测斜\n\t\t\t\t\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tanglex = iota.hexToFloat(data, firststart + 12, 'B'),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tangley = iota.hexToFloat(data, firststart + 16, 'B'),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data, firststart + 20, 'B')\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttime = time\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\ttable.insert(out.data, rst)\n\t\t\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t\t\tif protocalCode == 9102 then --裂缝\n\t\t\t\t\t\t\t\t\t\t\tlocal childDevice = getDeviceInfo(module, channel)\n\t\t\t\t\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data, firststart + 12, 'B')\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttime = time\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\ttable.insert(out.data, rst)\n\t\t\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t\t\tif protocalCode == 1102 then --温湿度\n\t\t\t\t\t\t\t\t\t\t\tlocal childDevice = getDeviceInfo(module, channel)\n\t\t\t\t\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data, firststart + 12, 'B'),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thumidity = iota.hexToFloat(data, firststart + 16, 'B')\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttime = time\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\ttable.insert(out.data, rst)\n\t\t\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t\t\tif protocalCode == 9002 then --压差\n\t\t\t\t\t\t\t\t\t\t\tlocal childDevice = getDeviceInfo(module, channel)\n\t\t\t\t\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tphysicalvalue = iota.hexToFloat(data, firststart + 12, 'B'),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data, firststart + 16, 'B'),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data, firststart + 20, 'B')\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttime = time\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\ttable.insert(out.data, rst)\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\tif protocalCode == 2045 then --扬尘\n\t\t\t\t\t\t\t\t\t\t\tlocal datacnt = iota.hexToByte(data, firststart + 11, 'B')\n\t\t\t\t\t\t\t\t\t\t\tlog.debug('fs_microPower_test dtuId=%s: 2405',device.uplink.props.id)\n\t\t\t\t\t\t\t\t\t\t\tlocal childDevice = getDeviceInfo(module, channel)\n \t\t\t\t\t\t\t\t--log.debug('fs_microPower_test dtuId=%s: childDevice =%s',device.uplink.props.id,childDevice)\n\t\t\t\t\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpm25 = tonumber(string.format('%0.0f', iota.hexToFloat(data, firststart + 12, 'B'))),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpm10 = tonumber(string.format('%0.0f', iota.hexToFloat(data, firststart + 16, 'B'))),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnoise = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 20, 'B'))),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttemp = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 24, 'B'))),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thumidity = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 28, 'B'))),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twindspeed = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 32, 'B'))),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twinddir = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 36, 'B')))\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttime = time\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t--log.debug('fs_microPower_test dtuId=%s,result: %s', device.uplink.props.id,json.encode(rst))\n\t\t\t\t\t\t\t\t\t\t\trst.result={}\n\t\t\t\t\t\t\t\t\t\t\tif rst.data.pm25 == nil then\n\t\t\t\t\t\t\t\t\t\t\t\trst.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = 'data parse error'\n\t\t\t\t\t\t\t\t\t\t\t\tlog.debug('fs_microPower_test parse error dtuId=%s: 2405 data =%s',device.uplink.props.id,data)\n\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\tif rst.data.pm25 <= 0 or rst.data.pm25 > 700 then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif rst.result.msg ~= nil then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t -- out.result.msg = out.result.msg .. '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of [0,700]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = rst.result.msg .. '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of (0,700]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t -- out.result.msg = '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of [0,700]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of (0,700]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.data.pm25 = nil\n\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\tif rst.data.pm10 <= 0 or rst.data.pm10 > 700 then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif rst.result.msg ~= nil then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t -- out.result.msg = out.result.msg .. '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of [0,700]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = rst.result.msg .. '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of (0,700]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t -- out.result.msg = '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of [0,700]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of (0,700]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.data.pm10 = nil\n\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\tif rst.data.windspeed < 0 or rst.data.windspeed > 24.5 then\n\t\t\t\t\t\t\t\t\t\t\t\t\t -- out.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif rst.result.msg ~= nil then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.msg = rst.result.msg .. '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = rst.result.msg .. '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of (0,24.5]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t -- out.result.msg = '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.data.windspeed = nil\n\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\tif rst.data.winddir < 0 or rst.data.winddir > 360 then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif rst.result.msg ~= nil then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.msg = rst.result.msg .. '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = rst.result.msg .. '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of (0,360]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.msg = '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.data.winddir = nil\n\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\tif rst.data.temp < -40 or rst.data.temp > 60 then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif rst.result.msg ~= nil then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.msg = rst.result.msg .. '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = rst.result.msg .. '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t -- out.result.msg = '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.data.temp = nil\n\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\tif rst.data.humidity <= 0 or rst.data.humidity > 100 then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif rst.result.msg ~= nil then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t -- out.result.msg = rst.result.msg .. '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = rst.result.msg .. '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.msg = '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of (0,100]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.data.humidity = nil\n\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\tif rst.data.noise < 0 or rst.data.noise > 200 then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif rst.result.msg ~= nil then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.msg = rst.result.msg .. '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = rst.result.msg .. '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.msg = '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.data.noise = nil\n\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\tlog.debug('fs_microPower_test: insert')\n\t\t\t\t\t\t\t\t\t\t\ttable.insert(out.data, rst)\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\tlog.debug('fs_microPower_test dtuId=%s,dataresult: %s', device.uplink.props.id,json.encode(out))\n\t\t\t\t\tlocal req = ''\n\t\t\t\t\treq = iota.appendHexByte(req, 0xfe, 'B') --帧头\n\t\t\t\t\treq = iota.appendHexWord(req, 0x000c, 'B') --设备号:0x0B,多通道数据采集系统\n\t\t\t\t\treq = iota.appendHexWord(req, rtumodule, 'B') --模块号\n\t\t\t\t\treq = iota.appendHexByte(req, 0x01, 'B') --命令源\n\t\t\t\t\treq = iota.appendHexWord(req, 0x0601, 'B') --指令\n\t\t\t\t\treq = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n\t\t\t\t\treq = iota.appendHexWord(req, 0x0000, 'B') --数据区长度\n\t\t\t\t\treq = iota.appendHexCrc(req, 'B', 0) --校验\n\t\t\t\t\treq = iota.appendHexByte(req, 0xef, 'B') --帧尾\n\t\t\t\t\tlog.debug('fs_microPower_test: databack: %s', req)\n\t\t\t\t\tctx:asend(req, 20000)\n\t\t\t\t\tctx:notify(json.encode(out))\n\t\t\tend\n\tend\nend\n\nfunction Deploy()\n\tlocal total = totalSensors()\n\tlog.debug('fs_microPower_test : totalSensors =%s', total)\n\tlocal over = 0\n\tlocal onepag = 0\n\tlocal totallength = 3\n\tlocal buff = ''\n\n\tfor i, dnlink in pairs(device.dnlinks) do\n\t\t\tfor j, subdevice in pairs(dnlink.devices) do\n\t\t\t\t\tover = over + 1\n\t\t\t\t\tonepag = onepag + 1\n\t\t\t\t\tif subdevice.props.sensortype == 'zx' then\n\t\t\t\t\t\t\ttotallength = totallength + 18\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x00, 'B') --传感器类型\n\t\t\t\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\t\t\t\tend\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlocal settingvib = tonumber(colgain) + tonumber(incentive) * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n\t\t\t\t\t\t\t--log.debug('fs_microPower_test : settingvib =%s', settingvib)\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, settingvib, 'B') --选项1\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x05, 'B') --选项2\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x05, 'B') --长度\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.k, 'B') --振弦采集参数\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, subdevice.uplink.props.f0, 'B') --振弦频率初值\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x00, 'B') --上传频谱ID\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x01, 'B') --采集选项\n\t\t\t\t\tend\n\t\t\t\t\tif subdevice.props.sensortype ~= 'zx' and subdevice.props.sensortype ~= 'zd' then\n\t\t\t\t\t\t\ttotallength = totallength + 18\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x01, 'B') --传感器类型\n\t\t\t\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\t\t\t\tend\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlocal setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n\t\t\t\t\t\t\t--log.debug('fs_microPower_test : setting =%s', setting)\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, setting, 'B') --选项1\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B') --选项2\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x5C, 'B') --长度\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.pmtpf, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.pmten, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, 0x00, 'B') --0\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.pm25a, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.pm25b, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.pm10a, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.pm10b, 'B') --参数\n \t\t\t\t\tlog.debug('fs_microPower_test : pm deploy buff =%s', buff)\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.noisea, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.noiseb, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.tempa, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.tempb, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.humia, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.humib, 'B') --参数\t\t\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.speeda, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.speedb, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.directiona, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.directionb, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, 0x00, 'B') --参数\t\t\t\t\t\t\n\t\t\t\t\tend\n\t\t\t\t\tif subdevice.props.sensortype == 'zd' then\n\t\t\t\t\t\t\ttotallength = totallength + 31\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x04, 'B') --传感器类型\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x00, 'B') --选项1\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x05, 'B') --选项2\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x12, 'B') --长度\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B') --定时采样间隔\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B') --定时采样时长\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B') --加速度触发采样时长\n\t\t\t\t\t\t\t--buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B') --采样频率\n\t\t\t\t\t\t\t--buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B') --滤波频率\n\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x42c8, 'B')\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x0000, 'B')\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x4248, 'B')\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x0000, 'B')\n\t\t\t\t\t\t\tlocal trigger1 = tonumber(subdevice.uplink.props.triggerlevel) * 10\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, trigger1, 'B') --触发加速度\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B') --加速度范围\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B') --滞后点数\n\t\t\t\t\tend\n\t\t\t\t\tif over == 8 or onepag == total then\n\t\t\t\t\t\t\tlocal buffhead = ''\n\t\t\t\t\t\t\tbuffhead = iota.appendHexByte(buffhead, 0xfe, 'B') --帧头\n\t\t\t\t\t\t\tbuffhead = iota.appendHexWord(buffhead, 0x000c, 'B') --设备号:0x0c,多通道数据采集系统\n\t\t\t\t\t\t\tbuffhead = iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B') --模块号\n\t\t\t\t\t\t\tbuffhead = iota.appendHexByte(buffhead, 0x01, 'B') --命令源\n\t\t\t\t\t\t\tbuffhead = iota.appendHexWord(buffhead, 0x0306, 'B') --指令\n\t\t\t\t\t\t\tbuffhead = iota.appendHexWord(buffhead, 0x0000, 'B') --消息ID\n\t\t\t\t\t\t\tbuffhead = iota.appendHexWord(buffhead, totallength, 'B') --数据区长度\n\t\t\t\t\t\t\tif onepag == total then\n\t\t\t\t\t\t\t\t\tbuffhead = iota.appendHexByte(buffhead, 0x01, 'B') --尾包\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tbuffhead = iota.appendHexByte(buffhead, 0x00, 'B') --尾包\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tbuffhead = iota.appendHexByte(buffhead, total, 'B') --采集指令总通道指令个数\n\t\t\t\t\t\t\tbuffhead = iota.appendHexByte(buffhead, over, 'B') --该分包通道指令个数\n\t\t\t\t\t\t\tbuff = buffhead .. buff\n\t\t\t\t\t\t\tbuff = iota.appendHexCrc(buff, endian, 0) --校验\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0xef, 'B') --帧尾\n\t\t\t\t\t\t\tlocal ok, ack = ctx:ssend(buff, 20000)\n\t\t\t\t\t\t\tlog.debug('fs_microPower_test : deploy back =%s', ack)\n\t\t\t\t\t\t\tbuff = ''\n\t\t\t\t\t\t\tif over == 8 then\n\t\t\t\t\t\t\t\t\tover = 0\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\ttotallength = 3\n\t\t\t\t\t\t\tif onepag == total then\n\t\t\t\t\t\t\t\t\tlog.debug('fs_microPower_test 配置下发完成')\n\t\t\t\t\t\t\t\t\tlocal re = {\n\t\t\t\t\t\t\t\t\t\t\tresult = nil,\n\t\t\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\t\t\tack = '配置下发完成'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tctx:notify(json.encode(re))\n\t\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\tend\n\tend\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid, channel)\n\tif device.dnlinks ~= nil then\n\t\t\t--local subdevices = device.dnlinks[1].devices\n\t\t\tfor i, dnlink in pairs(device.dnlinks) do\n\t\t\t\t\tfor j, subdevice in pairs(dnlink.devices) do\n\t\t\t\t\t\t\tif tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n\t\t\t\t\t\t\t\t\treturn subdevice\n\t\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\tend\n\t\t\tlog.debug('fs_microPower_test has no device module=%s channel=%s', moduleid, channel)\n\t\t\treturn nil -- 没有找到匹配的传感器\n\telse\n\t\t\tlog.debug('fs_microPower_test has no subdevices.')\n\t\t\treturn nil -- 没有子设备\n\tend\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid, channel)\n\tif device.dnlinks ~= nil then\n\t\t\t--local subdevices = device.dnlinks[1].devices\n\t\t\tfor i, dnlink in pairs(device.dnlinks) do\n\t\t\t\t\tfor j, subdevice in pairs(dnlink.devices) do\n\t\t\t\t\t\t\tif tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n\t\t\t\t\t\t\t\t\treturn subdevice\n\t\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\tend\n\t\t\tlog.debug('fs_microPower_test has no device module=%s channel=%s', moduleid, channel)\n\t\t\treturn nil -- 没有找到匹配的传感器\n\telse\n\t\t\tlog.debug('fs_microPower_test has no subdevices.')\n\t\t\treturn nil -- 没有子设备\n\tend\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n\tlocal nFindStartIndex = 1\n\tlocal nSplitIndex = 1\n\tlocal nSplitArray = {}\n\twhile true do\n\t\t\tlocal nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n\t\t\tif not nFindLastIndex then\n\t\t\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n\t\t\t\t\tbreak\n\t\t\tend\n\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n\t\t\tnFindStartIndex = nFindLastIndex + string.len(szSeparator)\n\t\t\tnSplitIndex = nSplitIndex + 1\n\tend\n\treturn nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n\t--log.debug('fs_microPower_test : dat content =%s', dathex)\n\tlocal out = {\n\t\t\tdata = {},\n\t\t\tresult = {},\n\t\t\ttype = 2\n\t}\n\tlocal offset = 0\n\tlocal t = iota.hexToShort(dathex, offset, 'B')\n\toffset = offset + 2\n\tlocal l = iota.hexToShort(dathex, offset, 'B')\n\toffset = offset + 2\n\tlocal version = iota.hexToByte(dathex, offset, 'B') -- 版本号\n\toffset = offset + 1\n\tlocal channel = iota.hexToByte(dathex, offset, 'B') -- 通道号\n\toffset = offset + 1\n\tlocal deviceId = iota.hexToShort(dathex, offset, 'L') -- 设备ID\n\n\tlocal subdevice = getDeviceInfo(deviceId, channel) -- 找到设备继续解析\n\tif subdevice ~= nil then\n\t\t\toffset = offset + 2\n\t\t\tlocal samplefreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 采样频率\n\t\t\toffset = offset + 4\n\t\t\tlocal filterfreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 滤波频率\n\t\t\toffset = offset + 4\n\t\t\tlocal gainamplifier = iota.hexToByte(dathex, offset, 'B') -- 放大倍数\n\t\t\toffset = offset + 1\n\t\t\tlocal triggertype = iota.hexToByte(dathex, offset, 'B') -- 触发方式\n\t\t\toffset = offset + 1\n\t\t\tlocal year = iota.hexToByte(dathex, offset, 'B') + 2000\n\t\t\toffset = offset + 1\n\t\t\tlocal mon = iota.hexToByte(dathex, offset, 'B')\n\t\t\toffset = offset + 1\n\t\t\tlocal day = iota.hexToByte(dathex, offset, 'B')\n\t\t\toffset = offset + 1\n\t\t\tlocal hour = iota.hexToByte(dathex, offset, 'B')\n\t\t\toffset = offset + 1\n\t\t\tlocal min = iota.hexToByte(dathex, offset, 'B')\n\t\t\toffset = offset + 1\n\t\t\tlocal sec = iota.hexToByte(dathex, offset, 'B')\n\t\t\toffset = offset + 1\n\t\t\toffset = offset + 12\n\t\t\tlocal Ldata = iota.hexToInt(dathex, offset, 'B')\n\t\t\toffset = offset + 4\n\t\t\tlog.debug('fs_microPower_test deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s', deviceId, channel, samplefreq, filterfreq, gainamplifier, triggertype, year, mon, day, hour, min, sec)\n\n\t\t\tlocal floatcount = (string.len(dathex) / 2 - 40) / 4\n\t\t\t--log.debug('fs_microPower_test begin parse')\n\t\t\tlocal vols = {}\n\t\t\tfor i = 1, floatcount do\n\t\t\t\t\toffset = 40 + (i - 1) * 4\n\t\t\t\t\tvols[i] = iota.hexToFloat(dathex, offset, 'L', 6)\n\t\t\tend\n\t\t\t--log.debug('fs_microPower_test finish parse')\n\n\t\t\tlocal rst = {\n\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t_data_type = 'vib',\n\t\t\t\t\t\t\tphysicalvalue = vols,\n\t\t\t\t\t\t\tsampleFreq = samplefreq,\n\t\t\t\t\t\t\tfilterFreq = filterfreq,\n\t\t\t\t\t\t\tgainAmplifier = gainamplifier,\n\t\t\t\t\t\t\ttriggerType = triggertype,\n\t\t\t\t\t\t\tversion = version\n\t\t\t\t\t},\n\t\t\t\t\tdevice = subdevice.id,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\ttime = os.date('%Y-%m-%dT%H:%M:%S+08:00', os.time({year = year, month = mon, day = day, hour = hour, min = min, sec = sec}))\n\t\t\t}\n\t\t\ttable.insert(out.data, rst)\n\t\t\t--log.debug('fs_microPower_test cloudvibrate=%s', json.encode(out))\n\t\t\tctx:notify(json.encode(out))\n\telse\n\t\t\tlog.debug('fs_microPower_test not found device module=%s channel=%s', deviceId, channel)\n\tend\nend\n\nfunction totalSensors()\n\tlocal sensorcnt = 0\n\tif device.dnlinks ~= nil then\n\t\tfor i, dnlink in pairs(device.dnlinks) do\n\t\t\t\tsensorcnt = #(dnlink.devices) + sensorcnt\n\t\tend\n\tend\n\treturn sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr = function(str)\n\tlocal len = string.len(str)\n\tlocal hex = ''\n\tfor i = 1, len do\n\t\t\tlocal bi = string.byte(str, i)\n\t\t\thex = hex .. string.format('%02X', bi)\n\tend\n\treturn hex\nend\n\nfunction HeadCheckSum(data)\n\tlocal sum = 0\n\tlocal len = string.len(data)\n\t--log.debug('fs_microPower_test: len: %s', len)\n\tfor i = 1, len, 4 do\n\t\t\tlocal te = tonumber(string.sub(data, i, i + 3), 16)\n\t\t\tlog.debug('fs_microPower_test: te: %s', te)\n\t\t\tsum = sum + tonumber(te)\n\tend\n\t--log.debug('fs_microPower_test: sum: %s', sum)\n\treturn 0xffff - sum\nend INLINE 2019-01-21 17:40:06.748+08 2020-11-23 16:23:09.288+08 2019-01-21 \N
+5ed1c355-baee-4949-bc0b-e59ede0b4f85 anXin_temHum_1130 \N 安信温湿度协议(请求应答) 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --[[\n协议号: 9028;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "anXin_Settlemen_9028.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n -- ff41584a000a000101379c\n\tlocal BE='B'\n\tlocal buff=''; \n\tbuff=iota.appendHexByte(buff, 0xFF, BE); -- 1: 帧头\n\tbuff=iota.appendHexByte(buff, 0x41, BE);\n\tbuff=iota.appendHexByte(buff, 0x58, BE);\n\tbuff=iota.appendHexByte(buff, 0x4a, BE);\n buff=iota.appendHexWord(buff, 3, BE) -- 2: 类型=1\n buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 3: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x01, BE); --功能码 0x01采集\n\tbuff=iota.appendHexCrc(buff, 'B' ,0) --CRC16\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 ff41584a000a0004800000f6180aa5cead 沉降63mm 温度27.25° moduleId=4\n--moduleId=4 \nfunction protocol_decode(da)\n \n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug(data)\n\t--判断数据有效性\t\t\t\n if string.len(data)/2 ~=15 then\n\t\tlocal message = 'Invalid Msg, len='\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\t\n\telse\n\tlocal startbyte_1 = iota.hexToByte(data, 0,'B');\n\tlocal startbyte_2 = iota.hexToByte(data, 1,'B');\n\tlocal startbyte_3 = iota.hexToByte(data, 2,'B');\n\tlocal startbyte_4 = iota.hexToByte(data, 3,'B');\n\tlocal devicetype = iota.hexToByte(data, 5,'B'); -- :设备类型0a 温湿度,\n\t\n\tif startbyte_1 ~= 0xFF or startbyte_2 ~= 0x41 or startbyte_3 ~= 0x58 or startbyte_4 ~= 0x4a or devicetype ~= 0x0a then\n\t\tlog.debug("帧头错误")\n else\n log.debug("帧头正确")\n\tend\n \t\t\t\t\n\t\n log.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal temperature\t = iota.hexToShort(data,9,'B')/100\n local humidity = iota.hexToShort(data, 11,'B')/100\n \n\t\t\n\t\tout.data = {\n\t\ttemperature\t=temperature,\n humidity\t=humidity\t\n\t\t};\n end\n\t return json.encode(out)\nend\n INLINE 2017-08-29 19:07:13.721+08 2019-12-23 16:18:46.793+08 2017-08-21 \N
+158509e9-b030-42ba-8330-46ef28dfb38b VOC_ys7 \N 人流量统计萤石 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua \nstart=function()\n log.debug("YSC5Si start device=%s", json.encode(device.props))\n\tlocal req = {\n type= "http",\n url='', -- https://open.ys7.com/api/lapp/token/get 获取token\n \tmethod="post",\n header={}\n }\n\treq.url=device.props.tokenUrl\n log.debug("YSC5Si: url=%s",req.url)\n req.ContentType='application/x-www-form-urlencoded'\n \n local param={\n appKey = device.props.username,\n appSecret = device.props.secret\n }\n\treq.url = req.url.."?appKey="..param.appKey.."&appSecret="..param.appSecret\n log.debug("YSC5Si:param="..json.encode(param))\n local ok,ack=ctx:ssend(req,4000)\n\n if ack==nil then\n log.debug("YSC5Si: ok=%s",ok)\n else\n log.debug("YSC5Si: ok=%s,token=%s",ok,ack.body)\n end\n local out={\n data ={},\n result = {}\n }\n if not ok or ack==nil then\n out.result={\n code=1002,\n msg="timeout",\n }\n else --OK\n if ack.code==200 or ack.code==60022 and ack.body ~="" then -- http应答\n local dataTable=json.decode(ack.body)\n \tlocal token=dataTable.data.accessToken \n \n\t\t\t --请求数据\n\t\t\tlocal datareq = {\n\t\t\t\t\t\ttype= "http",\n\t\t\t\t\t\turl='https://open.ys7.com/api/lapp/passengerflow/hourly', -- 当天每小时时间\n\t\t\t\t\t\tmethod="post",\n\t\t\t\t\t\theader={}\n\t\t\t\t\t}\n\n\t\t\tdatareq.ContentType='application/x-www-form-urlencoded'\n\t\t\t\n\t\t\tlocal param={\n\t\t\t accessToken = token,\n\t\t\t deviceSerial = device.props.deviceSerial\n\t\t\t}\n\t\t\tdatareq.url=datareq.url.."?accessToken="..param.accessToken.."&deviceSerial="..param.deviceSerial.."&channelNo=1"\n\t\t\tlog.debug("YSC5Si:GetDayData param ="..json.encode(param))\t\t\t\t\n\t\t --get发送\n\t\t\t local dataok,dataack=ctx:ssend(datareq,4000)\n\t\t\t\n\t\t\tif not dataok or dataack==nil then\n\t\t\t\tout.result={\n\t\t\t\tcode=1002,\n\t\t\t\tmsg="timeout",\n\t\t\t\t}\n\t\t\telse --OK\n\t\t\t\tif dataack.code==200 and dataack.body ~="" then -- http应答\n\t\t\t\t\talldataTable=json.decode(dataack.body) -- 有数据\n\t\t\t\t\tlog.debug("YSC5Si: Data Get Result:%s ",dataack.body) \n\t\t\t\t\tlocal instant_data=alldataTable.data\n\t\t\t\t\tlocal timetable = os.date("*t", os.time()); -->os.date用法\n\t\t\t\t\tlocal hourtime = timetable.hour\n\t\t\t\t\tif instant_data ~= nil then\n\t\t\t\t\t\tfor key,value in pairs(instant_data) do \n\t\t\t\t\t\t\tif (hourtime - 1) == value.hourIndex then\n\t\t\t\t\t\t\t\tout.data.inflow = value.inFlow\n\t\t\t\t\t\t\t\tout.data.outflow = value.outFlow\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tlog.debug("YSC5Si: request data error:%s body:%s",ack.code,ack.body) \n\t\t\t\tend\n\t\t\tend\t\n \n else\n log.debug("YSC5Si: request data error:%s body:%s",ack.code,ack.body) \n end\n end\n\tlog.debug("YSC5Si: DResult:%s ",json.encode(out))\n\tctx:done(json.encode(out))\nend\n \nonData=function()\n\nend\n INLINE 2019-04-30 09:41:17.578+08 2019-05-06 16:25:25.257+08 2019-04-30 \N
+9b35efe3-e7d0-4364-b398-5a4a7d10ab20 soilDT14301 \N 1.0 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 f 679f43f2-ff7d-440f-9e36-6ad3beb8d574 Lua --//D:\\SVN\\201808项目\\20180828项目资料提交\\3、北京数泰项目--康飞 --修改部分模块输出名称,添加通用性\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]]\nstart = function()\n ok = ctx:asend('0102')\n log.debug('soilDT14301 device =%s', json.encode(device))\nend\n\nonData =\n function(hex, index)\n log.debug('soilDT14301 7777888888=%s[%s] type(index)=[%s]', hex, index, type(index))\n if index == 2 then\n ok = ctx:asend('670d0a') --"g/n/r" DT运行当前工作计划\n ctx:sleep(1)\n ok = ctx:asend('2f480d0a') --"/H/n/r" DT 按照指定格式 上报数据\n end\n\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n sData = HextoStr(hex)\n log.debug('soilDT14301 sData是 %s', sData)\n --获取子字符串表\n local allResponse = Split(sData, ';')\n log.debug("soilDT14301 allResponse=%s",json.encode(allResponse))\n local allResponseCount = table_leng(allResponse)\n --移除表内的“”和nil\n for i = allResponseCount, 1, -1 do\n v = allResponse[i]\n if v == '' or v == nil or string.len(v) < 10 then\n table.remove(allResponse, i)\n log.debug('soilDT14301 表内的“”和nil 移除元素k=%s v=%s', i, v)\n end\n end\n\n --分析单类数据\n local resplength = table_leng(allResponse)\n local phys = {} --存储所有通道物理量\n local moduleNo --模块号\n local dateTimeStr\n local timenow\n for k, v in ipairs(allResponse) do\n dataIndex = string.sub(v, 1, 1)\n --单条数据首字母 D为设备信息 ,A为数据\n\n if dataIndex == 'D' then\n local otherData = Split(v, ',')\n moduleNo = otherData[2]\n local dateStr = otherData[4]\n local timeStr = otherData[5]\n dateTimeStr = string.format('%s %s', dateStr, timeStr)\n timenow = unixtimestamp(dateTimeStr)\n elseif dataIndex == 'A' then\n local singleData = Split(v, ',')\n for sensorKey, sensorValue in ipairs(singleData) do\n if sensorKey > 2 then\n phys[sensorKey - 2] = singleData[sensorKey]\n end\n end\n end\n end\n\n --匹配数据部分\n\n -- local childDevice={}--测试用\n -- childDevice.id=123 --测试用\n\n for index, childDevice in pairs(device.dnlinks[1].devices) do\n log.debug('soilDT14301 遍历子设备 是否匹配设备child=%s', json.encode(childDevice))\n\n local channelStrCheck = childDevice.uplink.props.channel\n log.debug('soilDT14301 子设备模块通道 接口获取 c=%s ', channelStrCheck)\n local relatedChannel = Split(channelStrCheck, ',')\n local valueNum = table_leng(relatedChannel)\n\n if childDevice.props.sensortype == 'zx' then\n local Frequency_index = tonumber(relatedChannel[1])\n local Temperature_index = tonumber(relatedChannel[2])\n local Frequency = tonumber(phys[Frequency_index])\n local Temperature = tonumber(phys[Temperature_index])\n \t\tlog.debug("soilDT14301 振弦通道[%s]",channelStrCheck)\n if childDevice.uplink.capabilities[1].formula.metaid == '0d1ad29d-fa86-4af0-bf45-16a19f2fd8d9' then --在iota中查找\n local K = childDevice.uplink.capabilities[1].formula.props.K\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local To = childDevice.uplink.capabilities[1].formula.props.To\n log.debug("soilDT14301 振弦通道[%s] 公式参数 k=%s,Kt=%s,Fo=%s,To=%s",channelStrCheck,K,Kt,Fo,To)\n if K == nil or Kt == nil or Fo == nil or To == nil then\n log.debug("soilDT14301 振弦通道[%s] f=%s,t=%s 参数项为nil",channelStrCheck,Frequency,Temperature)\n Phy = nil\n else\n log.debug("soilDT14301 振弦通道[%s] f=%s,t=%s",channelStrCheck,Frequency,Temperature)\n\t\t\t\t\t\tif tostring(Temperature) ~= "nil" then\n\t\t\t\t\t\t\tPhy = K * (Frequency ^ 2 - Fo ^ 2) + Kt * (Temperature - To)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tPhy = K * (Frequency ^ 2 - Fo ^ 2) \n\t\t\t\t\t\tend\n log.debug("soilDT14301 振弦通道[%s]当前的Phy=%s,f=%s",channelStrCheck,Phy,Frequency)\n local data1 = {\n data = {\n frequency = tonumber(string.format('%0.3f', Frequency)),\n temperature = tonumber(string.format('%0.2f', Temperature)),\n physicalvalue = tonumber(string.format('%0.3f', Phy))\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n log.debug("soilDT14301: 振弦通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data, data1)\n end\n end\n \n elseif childDevice.props.sensortype == 'duowei' then\n\t\t\t local xLength_index = tonumber(relatedChannel[1])\n\t\t\t\tlocal yLength_index = tonumber(relatedChannel[2])\n\t\t\t\tlocal xCoordinate_index = tonumber(relatedChannel[3])\n\t\t\t\tlocal yCoordinate_index = tonumber(relatedChannel[4])\n\t\t\t\tlocal zCoordinate_index = tonumber(relatedChannel[5])\n\t\t\t\tlocal xAcceleration_index = tonumber(relatedChannel[6])\n\t\t\t\tlocal yAcceleration_index = tonumber(relatedChannel[7])\n\t\t\t\tlocal zAcceleration_index = tonumber(relatedChannel[8])\n\t\t\t\tlocal temperature_index = tonumber(relatedChannel[9])\n local temperature = phys[temperature_index]\n\t\t\t\tlocal xLength = phys[xLength_index]\n\t\t\t\tlocal yLength = phys[yLength_index]\n\t\t\t\tlocal xCoordinate = phys[xCoordinate_index]\n\t\t\t\tlocal yCoordinate = phys[yCoordinate_index]\n\t\t\t\tlocal zCoordinate = phys[zCoordinate_index]\n\t\t\t\tlocal xAcceleration = phys[xAcceleration_index]\n\t\t\t\tlocal yAcceleration = phys[yAcceleration_index]\n\t\t\t\tlocal zAcceleration = phys[zAcceleration_index]\n\t\t\t\tlocal data1 = {\n data = {\n temperature=temperature,\n zAcceleration = zAcceleration,\n yAcceleration = yAcceleration,\n xAcceleration = xAcceleration,\n\t\t\t\t\t\t\t\txLength = xLength,\n\t\t\t\t\t\t\t\tyLength = yLength,\n\t\t\t\t\t\t\t\tyCoordinate = yCoordinate,\n\t\t\t\t\t\t\t\tzCoordinate = zCoordinate,\n\t\t\t\t\t\t\t\txCoordinate = xCoordinate\n\t\t\t\t\t\t\t\t\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n log.debug("soilDT14301: 多维位移通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data, data1)\n \n \n elseif childDevice.props.sensortype == 'dy' then\n local Vx_index = tonumber(relatedChannel[1])\n local Vx = phys[Vx_index]\n local Vy\n local Temperature\n if valueNum == 2 then\n local Temperature_index = tonumber(relatedChannel[2])\n Temperature = tonumber(phys[Temperature_index])\n elseif valueNum == 3 then\n local Vy_index = tonumber(relatedChannel[2])\n local Temperature_index = tonumber(relatedChannel[3])\n Vy = phys[Vy_index]\n Temperature = tonumber(phys[Temperature_index])\n Temperature = tonumber(string.format('%0.3f', Temperature))\n end\n\n if childDevice.uplink.capabilities[1].formula.metaid == '5116bca0-de6b-4f0b-b995-31c9801ee401' then --在iota中查找\n local Kx = childDevice.uplink.capabilities[1].formula.props.Kx\n local Ky = childDevice.uplink.capabilities[1].formula.props.Ky\n local Vo = childDevice.uplink.capabilities[1].formula.props.Vo\n\n -- log.debug("soilDT14301 电压通道[%s] 公式参数 Kx=%s,Ky=%s,Vo=%s",channelStrCheck,Kx,Ky,Vo)\n if Kx == nil or Ky == nil or Vo == nil then\n -- log.debug("soilDT14301 电压通道[%s] Vx=%s,Vy=%s 参数项为nil",channelStrCheck,Vx,Vy)\n Phy = nil\n else\n -- log.debug("soilDT14301 电压通道[%s] Vx=%s,Vy=%s",channelStrCheck,Vx,Vy)\n local value1 = Kx * (Vx - Vo)\n value1 = tonumber(string.format('%0.3f', value1))\n\n local value2\n if valueNum == 3 then\n value2 = Ky * (Vy - Vo)\n value2 = tonumber(string.format('%0.3f', value2))\n end\n -- log.debug("soilDT14301 电压通道[%s] value1=%s,AngleY=%s Temperature=%s",channelStrCheck,value1,value2,Temperature)\n local data1 = {\n data = {\n voltage=Vx,\n physicalvalue = value1,\n physicalvalue2 = value2,\n temperature = Temperature\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n log.debug("soilDT14301: 倾角通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data, data1)\n end\n end\n elseif childDevice.props.sensortype == 'standard' then\n local value1_index = tonumber(relatedChannel[1])\n local Value1 = tonumber(phys[value1_index])\n Value1 = tonumber(string.format('%0.2f', Value1))\n local Value2\n local Temperature\n if valueNum == 2 then\n local value2_index = tonumber(relatedChannel[2])\n Value2 = tonumber(phys[value2_index])\n Value2 = tonumber(string.format('%0.2f', Value2))\n log.debug('soilDT14301 standard通道[%s] Temperature=%s', channelStrCheck, Temperature)\n elseif valueNum == 3 then\n local value2_index = tonumber(relatedChannel[2])\n Value2 = tonumber(phys[value2_index])\n Value2 = tonumber(string.format('%0.2f', Value2))\n\n local value3_index = tonumber(relatedChannel[3])\n value3 = tonumber(phys[value3_index])\n value3 = tonumber(string.format('%0.2f', value3))\n Temperature = value3\n log.debug('soilDT14301 standard通道[%s] Temperature=%s', channelStrCheck, Temperature)\n end\n local data1 = {\n data = {\n physicalvalue = Value1,\n physicalvalue2 = Value2,\n temperature = Temperature\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n log.debug('soilDT14301: standard通道[%s]data=%s', channelStrCheck, json.encode(data1))\n table.insert(out.data, data1)\n end\n end\n else\n ok = ctx:asend('2f480d0a') --"/H/n/r" DT 按照指定格式 上报数据\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n log.debug('soilDT14301 resultData=%s,hex=%s', json.encode(out), hex)\n ctx:notify(resultData)\nend\n\nIsValid = function(alldata)\n log.debug('soilDT14301 校验开始')\n if string.len(alldata) < 10 then\n errormsg = string.format('返回数据[%s],校验长度<10',alldata)\n errcode = 1002\n return false\n end\n\n if string.sub(alldata, 1, 4) ~= '442c' then\n errormsg =string.format( '返回数据[%s],帧头错误≠442c',alldata)\n errcode = 1003\n return false\n end\n\n log.debug('soilDT14301 校验通过')\n return true\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend\n\nunixtimestamp = function(datestr)\n -- 2018/4/28 16:10:12\n log.debug('soilDT14301 datestr=%s', datestr)\n local datelist = Split(datestr, ' ')\n local datebegin = Split(datelist[1], '/')\n local dateend = Split(datelist[2], ':')\n local year = tonumber(datebegin[1])\n local month = tonumber(datebegin[2])\n local day = tonumber(datebegin[3])\n local hour = tonumber(dateend[1])\n local minute = tonumber(dateend[2])\n local second = tonumber(dateend[3])\n --log.debug("soilDT14301 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n --log.debug("soilDT14301 timenum=%s",timenum)\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --log.debug("soilDT14301 recordTime=%s",recordTime)\n return recordTime\nend INLINE 2019-02-22 15:17:02.082+08 2020-03-27 14:56:31.141+08 2019-02-22 \N
+c697ae48-746d-44c4-9b53-03b49de402c1 shjy_acqunit_1600 \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --010700000000b40a --下发采集\n--010300070044f438 --下发读取\n--0103885ca4d651457f6000451bb19a4515599a4514266600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e1d\nstart = function()\n log.debug('shjy_acqunit_1600 device=%s', json.encode(device))\n local buff = ''\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n\n buff = iota.appendHexByte(buff, moduleNo, endian)\n buff = buff .. '0700000000'\n buff = iota.appendHexCrc(buff, 'L', 0)\n ctx:asend(buff)\n ctx:sleep(70)\n --ctx:sleep(2) --测试\n local buff_read = ''\n buff_read = iota.appendHexByte(buff_read, moduleNo, endian)\n buff_read = buff_read .. '0300070044'\n buff_read = iota.appendHexCrc(buff_read, 'L', 0)\n ok, resp = ctx:ssend(buff_read, 15000)\n local result = '{}'\n if ok then\n result = unmarshall(resp, moduleNo)\n ctx:done(result)\n else\n --\n local errout = {\n data = {},\n result = {}\n }\n errout.result = {code = 1004, msg = 'time is out and ok is false'}\n log.debug('shjy_acqunit_1600 m=%s, ok is false', moduleNo)\n ctx:done(errout)\n end\nend\n\nunmarshall = function(hex, moduleNoStr)\n log.debug('shjy_acqunit_1600 m=%s, recv =%s', moduleNoStr, hex)\n local out = {\n type = 2,\n data = {},\n result = {}\n }\n\n local ErrorCode = IsValid(hex, moduleNoStr)\n if ErrorCode then\n local allDatas = {}\n for i = 1, 32, 1 do\n allDatas[i] = iota.hexToFloat(hex, 11 + (i - 1) * 4, 'B')\n local childDevice = getDeviceInfo(moduleNoStr, i)\n if childDevice ~= nil then\n if childDevice.uplink.capabilities[1].formula.metaid == '583a326f-d743-4f66-b60d-89b60c35e439' then --振弦公式\n local k = childDevice.uplink.capabilities[1].formula.props.K\n\n local f0 = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\tlocal kt= childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\n\t\t\t local t0 = childDevice.uplink.capabilities[1].formula.props.T0\n \t\t\tlocal freq =allDatas[i]\n log.debug('shjy_acqunit_1600 module=%s,channel=%s [%s] formula params :k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil then\n Phy = k * (freq ^ 2 - f0 ^ 2)\n end\n end\n\n local singleData = {\n data = {\n rawValue = allDatas[i],\n physicalvalue = Phy\n },\n device = childDevice.id,\n type = 1\n }\n\n log.debug('shjy_acqunit_1600 m=%s,c=%s,singleData=%s', moduleNoStr, (i + 1) / 2, json.encode(singleData))\n table.insert(out.data, singleData)\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local result_Str = json.encode(out)\n log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n return result_Str\nend\n\nIsValid = function(data, deviceModule)\n if data == nil or string.len(data) / 2 ~= 141 then\n errormsg = 'Data is nil or invalidLen=' .. string.len(data) / 2\n errcode = 1001\n return false\n end\n\n local cmd = string.sub(data, 3, 4)\n if cmd ~= '03' then\n errormsg = 'Data is nil or invalidLen=' .. string.len(data) / 2\n errcode = 1001\n return false\n end\n local dataModule = iota.hexToByte(data, 0, 'B')\n if tonumber(deviceModule) ~= dataModule then\n errormsg = string.format('无效的模块号')\n errcode = 3\n return false\n end\n return true\n --crc\nend\n\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("shjy_acqunit_1600 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n -- log.debug('shjy_acqunit_1600 查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n local moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n local channelStrCheck = child.uplink.props.channel\n --log.debug('shjy_acqunit_1600 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tonumber(channelStrCheck) == tonumber(channelNoId) then\n log.debug('shjy_acqunit_1600 m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('shjy_acqunit_1600 subdevices是nil')\n return nil\n end\nend\n\n\n--onData=function(hex)\n --end\n INLINE 2019-04-03 14:47:59.252+08 2019-05-31 08:49:11.411+08 2019-04-03 \N
+32590ab5-aa81-4219-bb35-9529dbe852dd fs_waterUpLoad_1901 \N 智慧水务 设备上报数据 代理TCP转DTU 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua \n--字符串ascii->字符\nstart = function()\n log.debug('fs_waterUpLoad_1901 start module %s, ctx=', json.encode(device))\nend\n\nonData = function(hex)\n log.debug('fs_waterUpLoad_1901 Data=%s', hex)\n --全局\n out = {\n data = {},\n result = {}\n }\n\n local sData = toStrHex(hex)\n log.debug('fs_waterUpLoad_1901 sData=%s', sData)\n local spliteData = Split(sData, '&&')\n local deviceData = Split(spliteData[1], ';')\n\n local QN=Split(deviceData[1], '=')[2]\n\n local moduledata = Split(deviceData[5], '=')\n local module = moduledata[2] --模块号\n log.debug('fs_waterUpLoad_1901 deviceData=%s', module)\n local Data = Split(spliteData[2], ';')\n local timedata = Split(Data[1], '=')\n local time = tonumber(timedata[2]) --时间\n local ack = GnerateAck(QN,module)\n local sendBuff = toHexStr(ack)..'0d0a' \n ctx:asend(sendBuff) -- 第二个参数超时时间\n for key, value in pairs(Data) do\n Allot(value)\n end\n local resultData = json.encode(out)\n log.debug('fs_waterUpLoad_1901 result=%s', json.encode(out))\n ctx:notify(resultData)\nend\n\nGnerateAck = function(QN,module)\n local ackstr = string.format('QN=%s;ST=91;CN=9014;PW=123456;MN=%s;Flag=8;CP=&&&&',QN,module)\n local len=string.len(ackstr)\n \t local hexs=toHexStr(ackstr)\n \tlocal crc16=checkCRC16_ANSI(hexs)\n local ackStrAll=string.format('##%04d',len)..ackstr..crc16\n return ackStrAll\nend\n\n--字符串ascii->字符\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n-- allot 函数\nAllot = function(datastr)\n local name = Split(datastr, '=')\n local singleData\n\n if name[1] == 'w01001-Cou' then\n --out.data.ph = ph\n singleData = Split(name[2], ',')\n --pH值\n local ph = tonumber(singleData[1])\n elseif name[1] == 'w01010-Cou' then\n --out.data.temperature = temperature\n singleData = Split(name[2], ',')\n --水温\t℃\n local temperature = tonumber(singleData[1])\n elseif name[1] == 'w01014-Cou' then --电导率\tuS/cm\n --out.data.conductivity = conductivity\n singleData = Split(name[2], ',')\n local conductivity = tonumber(singleData[1])\n elseif name[1] == 'w01009-Cou' then --溶解氧\tmg/L\n --out.data.oxy = oxy\n singleData = Split(name[2], ',')\n local oxy = tonumber(singleData[1])\n elseif name[1] == 'w01003-Cou' then --浑浊度\tNTU\n --out.data.turbidity = turbidity\n singleData = Split(name[2], ',')\n local turbidity = tonumber(singleData[1])\n elseif name[1] == 'w01016-Cou' then --叶绿素a\tug/L\n --out.data.chlorophyll_a = chlorophyll_a\n singleData = Split(name[2], ',')\n local chlorophyll_a = tonumber(singleData[1])\n elseif name[1] == 'w01022-Cou' then --蓝绿藻\tmg/L\n --out.data.cyanophycean = cyanophycean\n singleData = Split(name[2], ',')\n local cyanophycean = tonumber(singleData[1])\n elseif name[1] == 'w22001-Cou' then --石油类 mg/L\n --out.data.oil = oil\n singleData = Split(name[2], ',')\n local oil = tonumber(singleData[1])\n elseif name[1] == 'w21011-Avg' then --总磷(以P计)mg/L\n singleData = Split(name[2], ',')\n local totalPhosphorus = tonumber(singleData[1])\n out.data.totalPhosphorus = totalPhosphorus\n else\n end\nend\n\n\nfunction checkCRC16_ANSI(buff)\n local len=string.len(buff)/2\n local crc16=0xffff\n for i = 1, len, 1 do\n crc16=math.modf(crc16/256)\n local buff_i_str=string.sub(buff,2*i-1,2*i)\n local buff_i=tonumber(buff_i_str,16)\n crc16=bit.bxor(crc16, buff_i)\n for j = 1, 8, 1 do\n local byte_bit=crc16%2\n if byte_bit==1 then\n crc16=bit.bxor(math.modf(crc16/2), 0xa001)\n else\n crc16=math.modf(crc16/2)\n end\n end\n\n\n end\n return string.format("%04x",crc16)\nend INLINE 2020-01-06 14:38:54.218+08 2020-04-22 09:18:34.912+08 2020-01-06 \N
+d0c49ede-2200-49db-bd7b-c9535e387848 soil_DAS_BSIL-D1 \N 1.0 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 f 679f43f2-ff7d-440f-9e36-6ad3beb8d574 Lua --//02 协议分析/2016-09-23/BGK协议 v2.0.doc\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]]\nstart = function()\n log.debug('load script %s, moduleId=%s', 'BGK_4000', device.props.moduleId or '[nil]')\n local endian = 'B'\n local buff = ''\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n if subdevices ~= nil then\n log.debug('BSIL-D1:LUA:subdevices : data is =%s', json.encode(subdevices))\n for index, child in pairs(subdevices) do\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n channelNo = tonumber(child.uplink.props.channel)\n log.debug('BSIL-D1 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ', moduleNo, channelNo, json.encode(moduleNo), child.props.moduleId)\n else\n moduleNo = child.props.moduleId\n channelNo = child.props.channelId\n log.debug('BSIL-D1 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s', moduleNo, channelNo, json.encode(child.uplink.props))\n end\n\n log.debug('BSIL-D1:模块%s通道%s的deviceId是%s:', moduleNo, channelNo, tostring(child.id))\n --log.debug("BSIL-D1:子通道设备原型child=%s",json.encode(child))\n local cmdstr = string.format('%02d', tonumber(moduleNo)) .. '21' .. string.format('%02d', tonumber(channelNo))\n log.debug('BSIL-D1:模块%s通道%s的cmdstr是:%s', moduleNo, channelNo, cmdstr)\n local lcr_str = LCR(cmdstr)\n lcr_str = string.upper(lcr_str)\n --转大写字符\n log.debug('BSIL-D1:模块%s通道%s的lcr_str是:%s', moduleNo, channelNo, lcr_str)\n local request_asciiStr = ':' .. ':' .. cmdstr .. lcr_str\n log.debug('BSIL-D1:模块%s通道%s的request_asciiStr是:%s', moduleNo, channelNo, request_asciiStr)\n local buff = toHexStr(request_asciiStr)\n buff = iota.appendHexByte(buff, 0x0d, endian)\n buff = iota.appendHexByte(buff, 0x0a, endian)\n ok, resp = ctx:ssend(buff, 15000)\n local result = '{}'\n if ok and type(resp) ~= 'table' then --and json.encode(resp)~="null"\n log.debug('BSIL-D1:模块%s通道%s的数据接收成功,开始解析=%s,type=%s,json.encode=%s,type(resp)==table=%s', moduleNo, channelNo, resp, type(resp), json.encode(resp), type(resp) == 'table')\n result = unmarshall(resp, child, moduleNo, channelNo)\n --解析单条数据\n table.insert(out.data, result)\n else\n log.debug('BSIL-D1:模块%s通道%s的数据接收失败', moduleNo, channelNo)\n end\n end\n else\n log.debug('BSIL-D1 subdevices是nil')\n return nil\n end\n\n log.debug('BSIL-D1 out序列化')\n local resultData = json.encode(out)\n log.debug('BSIL-D1 out序列化结果 : out is =%s', json.encode(out))\n ctx:done(resultData)\nend\n\n--3A3031323130312B302E3030303030202B39393737363036440D0A\n--moduleId=1,channelId=1\n-- "frequency": 0,\n--"phy": -80.6607188196787,\n--"temperature": -71.01792619970792\n\nunmarshall = function(hex, childDevice, subModuleId, subChannelId)\n local subData = {\n data = {},\n device = childDevice.id,\n type = 1\n }\n\n log.debug('BSIL-D1:模块%s通道%s的deviceId是:%s', subModuleId, subChannelId, json.encode(childDevice))\n local ErrorCode = IsValid(hex, subModuleId, subChannelId)\n if ErrorCode then\n --码流转string\n local responseStr = toStrHex(hex)\n log.debug('BSIL-D1:模块%s通道%s的解析字符串是:%s', subModuleId, subChannelId, responseStr)\n local freStr = string.sub(responseStr, 8, 15)\n local freq = tonumber(freStr)\n local data1 = tonumber(string.format('%5.3f', freq))\n local resistanceStr = string.sub(responseStr, 16, 23)\n local dResistance = tonumber(resistanceStr)\n log.debug('BSIL-D1:模块%s通道%s的原始值是:freStr=%s,resistanceStr=%s', subModuleId, subChannelId, freStr, resistanceStr)\n --阻值转温度计算公式常数A,B,C\n local A = 1.4051\n local B = 2.369\n local C = 1.019\n local temp = 1 / (A * math.pow(10, -3) + B * math.pow(10, -4) * math.log(dResistance) + C * math.pow(10, -7) * math.pow(math.log(dResistance), 3)) - 273.2\n temp = tonumber(string.format('%3.2f', temp))\n local Phy\n if childDevice.uplink.capabilities[1].formula.metaid == '60039eec-76e3-47ec-9024-32d1bbd55287' then --振弦公式 metaid\n local k = childDevice.uplink.capabilities[1].formula.props.K or nil\n local kt = childDevice.uplink.capabilities[1].formula.props.Kt or nil\n local f0 = childDevice.uplink.capabilities[1].formula.props.Fo or nil\n local t0 = childDevice.uplink.capabilities[1].formula.props.To or nil\n log.debug('BSIL-D1:模块%s通道%s的公式计算参数是:k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s', subModuleId, subChannelId, k, kt, f0, t0, freq, temp)\n if k ~= nil and kt ~= nil and f0 ~= nil and t0 ~= nil then\n Phy = k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n log.debug('BSIL-D1:模块%s通道%s的phy是:%s', subModuleId, subChannelId, Phy)\n end\n end\n\n if childDevice.uplink.capabilities[1].formula.metaid == '121058ad-ddc3-41a9-bd75-36e58162a204' then --基康倾角仪转换公式D=G×L(R1-R0) metaid\n local Rx0 = childDevice.uplink.capabilities[1].formula.props.Rx0 or nil\n local Ry0 = childDevice.uplink.capabilities[1].formula.props.Ry0 or nil\n local G = childDevice.uplink.capabilities[1].formula.props.G or nil\n local L = childDevice.uplink.capabilities[1].formula.props.L or nil\n log.debug('BSIL-D1:模块%s通道%s的公式计算参数是:Rx0=%s,Ry0=%s,G=%s,L=%s', subModuleId, subChannelId, Rx0, Ry0, G, L)\n if Rx0 ~= nil and Ry0 ~= nil and G ~= nil and L ~= nil then\n anglex = data1\n changedx = G * L * (data1 - Rx0)\n angley = dResistance\n changedy = G * L * (dResistance - Ry0)\n log.debug('BSIL-D1:模块%s通道%s的anglex=%s,angley=%s', subModuleId, subChannelId, anglex, angley)\n end\n end\n\n if childDevice.uplink.capabilities[1].formula.metaid == '1a7e610f-1da2-4a2c-bbce-2faa2ead0ba9' then --模拟量线性转换数字量公式\n local dH = childDevice.uplink.capabilities[1].formula.props.dH or nil\n local dL = childDevice.uplink.capabilities[1].formula.props.dL or nil\n local aH = childDevice.uplink.capabilities[1].formula.props.aH or nil\n local aL = childDevice.uplink.capabilities[1].formula.props.aL or nil\n log.debug('BSIL-D1:模块%s通道%s的公式计算参数是:dH=%s,dL=%s,aH=%s,aL=%s', subModuleId, subChannelId, dH, dL, aH, aL)\n if dH ~= nil and dL ~= nil and aH ~= nil and aL ~= nil then\n Phy = (dH - dL) / (aH - aL) * (data1 - aL) + dL\n log.debug('BSIL-D1:模块%s通道%s的phy是:%s', subModuleId, subChannelId, Phy)\n end\n end\n if childDevice.uplink.capabilities[1].formula.metaid == '5c22c26c-2a9e-439f-b585-2d5e1031fc23' then --定制公式 P=K2*(R1-R0)^2+K1*(R1-R0)+C\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1 or nil\n local K2 = childDevice.uplink.capabilities[1].formula.props.K2 or nil\n local R0 = childDevice.uplink.capabilities[1].formula.props.R0 or nil\n local C = childDevice.uplink.capabilities[1].formula.props.C or nil\n local P = childDevice.uplink.capabilities[1].formula.props.P or 1 --用于原始数据转换 比例\n log.debug('BSIL-D1:模块%s通道%s的公式计算参数是:K1=%s,K2=%s,R0=%s,C=%s,P=%s', subModuleId, subChannelId, K1, K2, R0, C, P)\n if K1 ~= nil and K2 ~= nil and R0 ~= nil and C ~= nil then\n R1 = freq ^ P\n Phy = K2 * (R1 - R0) ^ 2 + K1 * (R1 - R0) + C\n Phy = tonumber(string.format('%6.3f', Phy))\n log.debug('BSIL-D1:模块%s通道%s的phy是:%s', subModuleId, subChannelId, Phy)\n end\n end\n\n subData.data = {\n frequency = freq,\n modulus = data1, --模拟量\n temperature = temp,\n physicalvalue = Phy, --物理量\n anglex = anglex,\n angley = angley,\n changedx = changedx,\n changedy = changedy\n }\n else\n subData.result = {code = errcode, msg = errormsg}\n end\n return subData\nend\n\nLCR = function(buff)\n log.debug('BSIL-D1:lcr buff=%s', buff)\n local lcr = 0\n for i = 0, string.len(buff) / 2 - 1 do\n lcr = lcr + tonumber(string.sub(buff, 1 + 2 * i, 2 * (i + 1)), 16)\n end\n log.debug('BSIL-D1:lcr累加结果%s', tonumber(lcr))\n lcr = lcr % 255\n local value = 0xff - lcr + 1\n local lcrResult_str = string.sub(string.format('%#x', value), 3, -1)\n --去除0x\n log.debug('BSIL-D1:lcr校验结果%s', lcrResult_str)\n return lcrResult_str\nend\n\nIsValid = function(data, moduleId, channelId)\n log.debug('BSIL-D1:模块%s通道%s开始校验数据=%s', moduleId, channelId, data)\n if data == nil or string.len(data) / 2 ~= 27 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n log.debug('BSIL-D1:模块%s通道%s 数据校验失败:Data is nil or invalid length', moduleId, channelId)\n return false\n end\n if iota.hexToByte(data, 0, 'B') ~= 0x3a or iota.hexToByte(data, 25, 'B') ~= 0x0d or iota.hexToByte(data, 26, 'B') ~= 0x0a then\n errcode = 1001\n errormsg = 'Hex CMD False '\n log.debug('BSIL-D1:模块%s通道%s 数据校验失败:Data is nil or invalid length', moduleId, channelId)\n return false\n end\n\n --码流转string\n local checkStr = toStrHex(data)\n log.debug('BSIL-D1:模块%s通道%s 数据校验:checkStr=%s', moduleId, channelId, checkStr)\n local moduleStr = string.sub(checkStr, 2, 3)\n --local channelStr = string.sub(checkStr, 6, 7)\n local error_index=string.sub(checkStr, 8, 8)\n if tonumber(moduleStr) ~= tonumber(moduleId) then\n errormsg = string.format('Invalid acq moduleId=%s[%s]', moduleStr, moduleId)\n errcode = 1004\n log.debug('BSIL-D1:模块%s通道%s 数据校验失败:Invalid acq moduleId=%s', moduleId, channelId, moduleStr)\n return false\n end\n\n --[[if tonumber(channelStr) ~= tonumber(channelId) then\n errormsg = string.format('Invalid acq channelId=%s[%s]', channelStr, channelId)\n errcode = 1004\n log.debug('BSIL-D1:模块%s通道%s 数据校验失败:Invalid acq channelId=%s', moduleId, channelId, channelStr)\n return false\n end--]]\n\n if error_index == 'E' then\n errormsg = string.format('error data=%s[%s]',data,checkStr)\n errcode = 1004\n log.debug('BSIL-D1:模块%s通道%s 数据校验失败 %s', moduleId, channelId, errormsg)\n return false\n end\n\n log.debug('BSIL-D1:模块%s通道%s校验数据通过!!!', moduleId, channelId)\n return true\nend\n\ngetIndex = function(data) --用于IsValid\n local len = string.len(data) / 2\n for n = 1, len do\n local value = string.sub(data, 2 * n - 1, 2 * n)\n if value == '0a' then\n return n\n end\n end\n return 0\nend\n\n--HEX字符串->ascii字符串\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend INLINE 2019-05-23 13:33:05.387+08 2019-05-29 08:37:36.758+08 2019-05-23 \N
+ef6ef551-0434-444e-aa94-12a2c6cfe513 bjca_mop \N 1.0 17e2c509-1128-42d6-89b5-5058d7a2a5cd 17e2c509-1128-42d6-89b5-5058d7a2a5cd f 17e2c509-1128-42d6-89b5-5058d7a2a5cd Lua start = function()\n local endian = 'B'\n\tlocal buff=''\n\tlocal cycle=string.format('%08x', tonumber(device.props.cycle))\n\t log.debug("bjcamop cycle=%s", cycle)\n buff = '111100011604'\n\tbuff = buff .. cycle\n\tlocal yh=CS(buff)\n buff = 'FE' .. buff\n\tbuff=iota.appendHexByte(buff,yh, endian) \n\tbuff = buff .. '0d0a'\n \n\n log.debug("bjcamop buff=%s", buff)\n local ok, ack = ctx:ssend(buff, 20000)\n\t\n\t out = {\n result = nil,\n type = 1,\n data = {\n ack = iota.hexToByte(ack,33,'B')\n }\n }\n\n\t\n\tlog.debug("bjcamop out=%s",json.encode(out))\n\n\n ctx:done(json.encode(out))\nend\nCS=function(buff)\n local lcr = 0\n for i = 0, string.len(buff)/2-1 do\n lcr =bit.bxor(lcr,tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)) \n end\n\t\t\t\n return lcr\nend \n\n INLINE 2020-12-24 14:36:41.455+08 2020-12-24 17:22:05.07+08 2020-12-24 \N
+9143cf8f-4fb3-4e7c-9a9c-c674d088d655 FM-C-SX \N 风速风向协议 1.0.1 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n协议号: 1.0;\n协议名: FM-C-SX\n]]--kiki\n\nstart=function ()\n log.debug("FM-C-SXstart %s, ctx=%s",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("FM-C-SX encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("FM-C-SX decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE); -- 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x03, BE); -- 功能码 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE); \n buff=iota.appendHexByte(buff, 0x2A, BE); -- 读取寄存器起始地址 00 00\n\tbuff=iota.appendHexByte(buff, 0x00, BE); \n\tbuff=iota.appendHexByte(buff, 0x02, BE); -- 读取寄存器数量 2\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- CRC16 小端字节序\t\n\treturn buff\nend\n\n-- decode \n-- returns: 结果\n\n\n-- 原始数据\nfunction protocol_decode(da)\n\t\n\t-- 存储结果\n\tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n \n -- 判断数据有效性\n if inValid(da) then\n local message = 'Invalid Msg,'\n out.result = {code=5001,msg=message}\n out.data = {}\n else\n log.debug("数据有效")\n \n\n\t\tlocal windSpeed = iota.hexToShort(da, 3, 'B' )\n\t\tlocal windDirection = iota.hexToShort(da, 5, 'B')\n\n\n\t\tout.data = {\n --windSpeed = windSpeed,\t\t\t\n\t\t\twindSpeed = string.format("%.3f",windSpeed/10.00),\n\t\t\t--windDirection = string.format("%.3f",windDirection/10.00) ,\n windDirection = windDirection/10 ,\n\t\t};\n end\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif iota.hexToByte(data, 1,'B') ~= 0x03 then -- 读第二个字节,功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n INLINE 2021-01-14 14:35:46.616+08 2021-01-19 11:32:45.735+08 2021-01-14 \N
+227ec3db-dca7-4164-91f6-b59aabfaf84d geot_1604 \N 雨量计协议 1.0 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 f d3f1aa63-8397-45a4-af26-15a0f91d1e13 Lua start=function()\n log.debug("GT-Ra1.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n\tlocal moduleStr=device.uplink.props.module\n log.debug("GT-Ra1.lua: Data, ctx=%s",hex)\n local out={\n data ={},\n result = {}\n }\n --536E3D3030303036204163635261696E3D20202031322E346D6D0D0A\n\t--53 6E 3D 30 30 30 30 36 20 41 63 63 52 61 69 6E 3D 20 20 20 31 32 2E 34 6D 6D 0D 0A\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n\t\n\t local rainfal =toStrHex(string.sub(hex, 37, 48))\n local rainfals=tonumber(rainfal)\n\t\tlog.debug("GT-Ra1 temperature=%s",rainfals) \n out.data = { \n rainfall =rainfals\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("GT-Ra1: cloudvibrate=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\nIsValid=function(data,deviceModule)\n if data == nil then\n errormsg = 'GT-Ra1:Data is nil'\n errcode = 1001\n return false\n end\n log.debug("GT-Ra1---1---- [%s] %s",deviceModule)\n\tlocal moduleid = toStrHex(string.sub(data,7, 16))\n log.debug("GT-Ra1----2--- [%s] %s",moduleid)\n\tif (deviceModule~=moduleid) then\n\t errormsg = 'GT-Ra1:crc is wrong'\n errcode = 1001\n \tlog.debug("GT-Ra1 [%s] %s",deviceModule,errormsg)\n return false\n end\n\t\n \n return true\n \nend\n\n--HEX字符串->ascii字符串\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n \n INLINE 2018-04-03 09:12:41.303+08 2019-07-19 16:41:54.233+08 2018-04-03 \N
+451da24b-91ad-43ba-8980-317b9aa1f9bf nb_door_mop_1504 \N 配和小程序 or App 确认告警使用 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --F:\\SVN\\202010项目\\飞尚NB协议\\平台通讯协议草案.docx\n--另外到时候是小程序或者APP上给了解除报警消息才下发解除指令的\n--目前测是上报报警就触发解除报警。\n\n--关于设备 解除绑定 只要设备上按一下 就需要强制解除用户绑定 (平台上删除结构物)\n\n--ff000c85000001000051cdff 解绑指令\n--ff000c8a00000100093f8000003f80000002dbf2ff 告警指令\nstart = function()\n local out = {\n type = 1,\n data = {},\n result = {}\n }\n local moduleNo = device.uplink.props.module\n local paramStr = capability.param --小程序或app调用接口的时候 带参数进来 区分是确认告警 还是 确认解绑\n log.debug('nb_door_mop_1504 [%s] capability=%s', moduleNo, paramStr)\n if paramStr == 'gjqr' then\n log.debug('nb_door_mop_1504 [%s] capability=%s', moduleNo, paramStr)\n ackToDevice(paramStr, moduleNo)\n local result = json.encode(out)\n ctx:done(result)\n else\n log.debug('nb_door_mop_1504 [%s] 非法能力请求参数 !=gjqr ,capability=%s', moduleNo, paramStr)\n end\nend\n\nackToDevice = function(ackCmd, moduleNo)\n local mid = '0001'\n if ackCmd == 'gjqr' then\n local ackHex = 'ff000c' .. getAckCmd(ackCmd) .. mid .. '0000'\n ackHex = iota.appendHexCrc(ackHex, 'B', 0)\n ackHex = ackHex .. 'ff'\n local ok = ctx:asend(ackHex)\n log.debug('nb_door_mop_1504 平台应答[%s], ack= %s', getAckCmd(ackCmd), ackHex)\n end\nend\n\ngetAckCmd = function(deviceCmd)\n local dict = {\n ['gjqr'] = '6000'\n --停止报警\n }\n return dict[deviceCmd]\nend INLINE 2020-11-03 11:24:24.315+08 2020-11-03 11:47:10.407+08 2020-11-03 \N
+c93d239c-120b-4078-9b3e-4b0d80f6707c jnch_plc485_2000 \N 1.0 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e f 30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e Lua start = function()\n --log.debug('start load jnch_2000 moudle = %s ', device.uplink.props.module)\n log.debug("jnch_2000 root device = %s", json.encode(device))\n local endian = 'B'\n local buff = ''\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n local moduleNo = tonumber(device.uplink.props.module) --模块 通道 优先接口获取\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do\n \n local channelNo = tonumber(child.uplink.props.plcaddress)\n log.debug('jnch_2000 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ', moduleNo, channelNo, json.encode(moduleNo), child.props.moduleId)\n\n local buff = ''\n buff = iota.appendHexByte(buff, moduleNo, endian)\n buff = iota.appendHexByte(buff, 0x03, endian)\n buff = iota.appendHexByte(buff, 0x00, endian)\n buff = iota.appendHexByte(buff, channelNo - 40001, endian)\n buff = iota.appendHexByte(buff, 0x00, endian)\n buff = iota.appendHexByte(buff, 0x02, endian)\n buff = iota.appendHexCrc(buff, 'L', 0)\n ok, resp = ctx:ssend(buff, 15000)\n log.debug('jnch_2000 module=%s,channel=%s ssend=[%s].', moduleNo, channelNo, buff)\n local result = '{}'\n if ok then\n result = unmarshall(resp, child, tostring(moduleNo), tostring(channelNo))\n --解析单条数据\n table.insert(out.data, result)\n else\n log.debug('jnch_2000 module=%s,channel=%s [%s] recvd data error.', moduleNo, channelNo, child.id)\n end\n end\n else\n log.debug('jnch_2000 subdevices是nil')\n return nil\n end\n local resultData = json.encode(out)\n ctx:done(resultData)\nend\n\nunmarshall = function(hex, subDevice, subModuleId, subChannelId)\n local subData = {\n data = {},\n device = subDevice.id,\n type = 1\n }\n\n local ErrorCode = IsValid(hex, subModuleId, subChannelId)\n log.debug('jnch_2000 module=%s,channel=%s [%s] recv=[%s].', subModuleId, subChannelId, subDevice.id, hex)\n if ErrorCode then\n local Phy = iota.hexToFloat(hex, 3, 'B')\n\n subData.data = {\n physicalvalue = tonumber(string.format('%0.3f', Phy))\n }\n else\n subData.result = {code = errcode, msg = errormsg}\n end\n return subData\nend\n\nIsValid = function(data, moduleId, channelId)\n local dataLength = string.len(data) / 2\n if data == nil or dataLength ~= 9 then\n errormsg = string.format('无效的数据长度=%s≠9', dataLength)\n errcode = 1002\n return false\n end\n local dataCMD = string.sub(data, 3, 4)\n if dataCMD ~= '03' then\n errcode = 1002\n errormsg = 'Modbus功能吗≠03'\n return false\n end\n\n local dataModule = tostring(iota.hexToByte(data, 0, 'B'))\n if moduleId ~= dataModule then\n errormsg = string.format('无效的模块号=%s≠%s', dataModule, moduleId)\n errcode = 1002\n return false\n end\n return true\nend\n INLINE 2019-03-26 17:29:47.105+08 2019-03-27 10:12:53.79+08 2019-03-26 \N
+a760c8c5-d868-4f17-aa69-1d008ce0b8d5 test \N 22 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f f 8ec5f3e2-2dbe-41bd-bdb4-034203f0964f Lua te INLINE 2019-04-15 17:18:21.793+08 2019-04-15 17:18:21.793+08 2019-04-15 \N
+804cd4ec-75ac-41e1-bdfa-ed5b8c6cadd3 fs_gnss_disaster \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n测试数据\n{\n "type":"http",\n "code":200,\n "body":"{\\"data\\":[{\\"pointId\\":8005,\\"recordTime\\":1516101950000,\\"x\\":2498030.7828,\\"y\\":506126.4067,\\"z\\":90.6906},{\\"pointId\\":8005,\\"recordTime\\":1516147175000,\\"x\\":2498030.7607,\\"y\\":506126.3922,\\"z\\":90.7774}]}"\n}\n]]--\nstart=function()\n --log.debug("fs_d_gnss start moudleid=%s", device.props.pointId or "nil")\n --local apiname="findmm.record.queryByPointId"\n\tlocal req = {\n type= "http",\n url=device.uplink.props.url.."%s/data?startTime=%s&endTime=%s",\n \t--url="http://218.3.150.108:7003/gnss/%s/data?startTime=%s&endTime=%s", \n \tmethod="get",\n \tcontent="text/html",\n header={},\n }\n local param={\n pointId= tonumber(device.props.pointId),\n pageNo=1, \n pageSize=1, \n }\n local beginTime=tostring(stringToTime(device.props.beginTime)*1000)\n local r1,ok = redis.get(device.id.."_endTime")\n if ok and r1~=nil then\n beginTime=r1 -- 1200000\n end\n local endTime=os.time()*1000\n\n req.url=string.format(req.url,device.props.pointId,beginTime,endTime)\n --log.debug("fs_d_gnss moudleid=%s request url=%s",device.props.pointId,req.url)\n \n local ok,ack=ctx:ssend(req,4000)\n\n if ack==nil then\n log.debug("fs_d_gnss moudleid=%s result=%s,ack= nil",device.props.pointId,ok)\n else\n log.debug("fs_d_gnss moudleid=%s result=%s,ack=%s",device.props.pointId,ok,json.encode(ack))\n end\n\n local out={\n type = 2,\n data ={},\n result = {}\n }\n if not ok or ack==nil then\n out.result={\n code=1002,\n msg="timeout",\n }\n else --OK\n if ack.code==200 and ack.body ~="" then -- http应答\n qx=json.decode(ack.body) -- 有数据\n --log.debug("fs_d_gnss ack=%s",ack.body)\n local items = #qx.data or 0\n --log.debug("fs_d_gnss totalItems=%d", items)\n\t\t\tlocal data1 ={}\n if items > 0 then\n for i=1,items,1 do\n local item= qx.data[i]\n data1 = {\n data={\n x=item.x*1000 or 0,\n y=item.y*1000 or 0,\n z=item.z*1000 or 0,\n },\n device=device.id,\n \t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(item.recordTime)/1000)),\n type=1 \n }; \n table.insert(out.data,data1)\n\t\t\t\t\t--log.debug("fs_d_gnss moudleid=%s set beginTime = %s , endtime = %s",device.props.pointId,beginTime,item.recordTime)\n\t\t\t\t\tif tonumber(beginTime) < tonumber(item.recordTime) then\n\t\t\t\t\t\tbeginTime = item.recordTime\n\t\t\t\t\t\t--log.debug("fs_d_gnss moudleid=%s Replace beginTime = %s ",device.props.pointId,beginTime)\n\t\t\t\t\tend\n end\n\t\t\t\t\n log.debug("fs_d_gnss moudleid=%s out:%s",device.props.pointId,json.encode(out))\n\t\t\t\t--log.debug("fs_d_gnss moudleid=%s set lasttime ok key=%s,value=%s",device.props.pointId,device.id.."_endTime",beginTime)\n\t\t\t\tif redis.set(device.id.."_endTime", tostring(beginTime)) then\n\t\t\t\t\tlog.debug("fs_d_gnss moudleid=%s redis set beginTime = %s ",device.props.pointId,tostring(beginTime))\n\t\t\t\tend\n\t\t\t\t\n\t\t\t\t--log.debug("fs_d_gnss step redis moudleid=%s ",device.props.pointId)\n\t\t\t\tlocal disport = device.props.disport\n\t\t\t\tlog.debug("fs_d_gnss ack disport=%s",disport)\n\n\t\t\t\tif disport~=nil then\n\t\t\t\t\t-------上报江西地灾平台-------\n\t\t\t\t\tlocal title= "L1_GP_1"\n\t\t\t\t\tlocal req = {\n\t\t\t\t\t\t\ttype= "http",\n\t\t\t\t\t\t\turl="http://171.34.52.5:10021/api/devices/datapoints?type=1",\n\t\t\t\t\t\t\tmethod="post",\n\t\t\t\t\t\t\tContentType="application/json",\n\t\t\t\t\t\t\theader={},\n\t\t\t\t\t\t}\n\t\t\t\t\tlocal x = data1.data.x or 0\n\t\t\t\t\tlocal y = data1.data.y or 0\n\t\t\t\t\tlocal z = data1.data.z or 0\n\t\t\t\t\tlog.debug("fs_d_gnss x=%s y :%s z %s",x,y,z)\n\t\t\t\t\tlocal bodystr = '{"'..disport..'":{"'..title..'":"'..tostring(x)..','..tostring(y)..','..tostring(z)..'"}}'\n\t\t\t\t\tlog.debug("fs_d_gnss bodystr :%s",bodystr)\n\t\t\t\t\tlocal apikey = device.props.password\n\t\t\t\t\tbodystr = '{"deviceId":"'..disport..'","apikey":"'..apikey..'","data":'..bodystr..'}'\n\t\t\t\t\tlog.debug("fs_d_gnss bodystr2 :%s",bodystr)\n\t\t\t\t\treq.body = bodystr\n\t\t\t\t\tlocal ok,ack=ctx:ssend(req,4000)\n\t\t\t\t\tlog.debug("fs_d_gnss ack disaster=%s",ack.body)\n\t\t\t\tend\n\t\t\t\tctx:done(json.encode(out))\n else\n log.debug("fs_d_gnss moudleid=%s has not new data",device.props.pointId)\n end\n else\n log.debug("fs_d_gnss moudleid=%s request data error:%s body:%s",device.props.pointId,ack.code,ack.body) \n end\n end\nend\n \nstringToTime=function( timeString ) --yyyyMMddHHmmss to 时间戳\n local yyyy = tonumber(string.sub(timeString , 1, 4)) \n local MM = tonumber(string.sub(timeString , 5, 6)) \n local DD = tonumber(string.sub(timeString , 7, 8))\n local HH = tonumber(string.sub(timeString , 9, 10))\n local mm = tonumber(string.sub(timeString , 11, 12))\n local ss = tonumber(string.sub(timeString , 13, 14))\n return os.time({year = yyyy, month = MM, day =DD, hour =HH, min =mm, sec = ss}) \nend \n\n INLINE 2021-02-19 14:14:29.597+08 2021-02-19 16:46:22.653+08 2021-02-19 \N
+bd2808a9-fbd4-4f04-a674-d3604806b95c shjy_temp_angle \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_temp_angle", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp_angle 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x16, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x06, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,4000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("shjy_temp_angle SSend error!")\n end\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local anglex = iota.hexToFloat(hex,3,'B')\n local angley = iota.hexToFloat(hex,7,'B')\n\t\tlocal temp = iota.hexToFloat(hex,11,'B')\n \n out.data = {\n\t\t\tanglex=tonumber(string.format('%0.3f',anglex)),\n\t\t\tangley=tonumber(string.format('%0.3f',angley)),\n\t\t\ttemperature=tonumber(string.format('%0.1f',temp))\t\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('shjy_temp_angle 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 17 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shjy_temp_angle 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2019-06-27 17:10:59.735+08 2019-09-18 09:32:32.835+08 2019-06-27 \N
+e377b8e2-0507-407d-859a-64fbc0b4af19 Bracelet_server \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug('Bracelet_server LUA http server start')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n --log.debug('Bracelet_server [%s] hex=%s type=%s', moduleNo, json.encode(httpbody), type(httpbody.Body))\n local params = json.decode(httpbody.Body)\n\n \t--log.debug('Bracelet_server [] %s',json.encode(params))\n \tlocal param = ""\n for k,v in pairs(params) do\n if k ~="id" then\n \t\tparam = json.decode(k)\n \tend\n end\n --log.debug("Bracelet_server param = %s ",json.encode(param))\n if string.match(httpbody.URL ,"pull/pedometerdata/parse") ~= nil then\t\t\n\t\tlocal imei = param.imei\n\t\tlocal timeBegin = param.time_begin\n\t\tlocal value = param.value\n\t\tlocal childDevice = getDeviceInfo("1")\n\t\tlocal night = Split(tostring(timeBegin)," ")\n\t\tlocal nhour = Split(tostring(night[2]),":")\n\t\tlocal ndate = Split(tostring(night[1]),"-")\n\t\tlocal timspa = os.time({year =tonumber(ndate[1]), month = tonumber(ndate[2]), day =tonumber(ndate[3]), hour =tonumber(nhour[1]), min =tonumber(nhour[2]), sec = 00})\n\t\tlocal rst = {\n\t\t\t\tdata = {\n\n\t\t\t\t\t\tstepvalue = value\n\t\t\t\t\t},\n\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\ttime = os.date("%Y-%m-%dT%H:%M:%S+08:00",timspa)\n\t\t\t\t}\n\t\ttable.insert(out.data, rst)\n\t\t--log.debug('Bracelet_server [%s] pedometerdata:%s', moduleNo,json.encode(rst))\n\t\t--log.debug('Bracelet_server: dataresult: %s', json.encode(out))\n\t\tctx:notify(json.encode(out))\t\t\n elseif string.match(httpbody.URL ,"pull/heartratedata/parse") ~= nil then\t\t\n\t\tlocal imei = param.imei\n\t\tlocal timeBegin = param.time_begin\n\t\tlocal heartRate = param.heartrate\n\t\tlocal childDevice = getDeviceInfo("2")\n\t\tlocal night = Split(tostring(timeBegin)," ")\n\t\tlocal nhour = Split(tostring(night[2]),":")\n\t\tlocal ndate = Split(tostring(night[1]),"-")\n\t\tlocal timspa = os.time({year =tonumber(ndate[1]), month = tonumber(ndate[2]), day =tonumber(ndate[3]), hour =tonumber(nhour[1]), min =tonumber(nhour[2]), sec = 00})\n\t\tlocal rst = {\n\t\t\t\tdata = {\n\n\t\t\t\t\t\theartrate = heartRate\n\t\t\t\t\t},\n\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\ttime = os.date("%Y-%m-%dT%H:%M:%S+08:00",timspa)\n\t\t\t\t}\n\t\ttable.insert(out.data, rst)\n\t\t--log.debug('Bracelet_server [%s] heartratedata:%s', moduleNo,json.encode(rst))\n\t\t--log.debug('Bracelet_server: dataresult: %s', json.encode(out))\n\t\tctx:notify(json.encode(out))\t\t\n elseif string.match(httpbody.URL ,"pull/locationdata/parse") ~= nil then\t \n\t\tlocal imei = tonumber(param.imei)\n\t\tlocal timeBegin = tostring(param.time_begin)\n\t\tlocal isReply =tostring(param.is_reply)\n\t\tlocal isTrack = tostring(param.is_track)\n\t\tlocal city = tostring(param.city)\n\t\tlocal address = tostring(param.address)\n\t\tlocal lon = tonumber(param.lon)\n\t\tlocal lat = tonumber(param.lat)\n\t\tlocal ltype = tonumber(param.type)\n\t\tlocal childDevice = getDeviceInfo("3")\n\t\tlocal night = Split(tostring(timeBegin)," ")\n\t\tlocal nhour = Split(tostring(night[2]),":")\n\t\tlocal ndate = Split(tostring(night[1]),"-")\n\t\tlocal timspa = os.time({year =tonumber(ndate[1]), month = tonumber(ndate[2]), day =tonumber(ndate[3]), hour =tonumber(nhour[1]), min =tonumber(nhour[2]), sec = 00})\n\t\tlocal rst = {\n\t\t\t\tdata = {\n\n\t\t\t\t\t\tcity = city,\n\t\t\t\t\t\taddress = address,\n\t\t\t\t\t\tlon = lon,\n\t\t\t\t\t\tlat = lat,\n\t\t\t\t\t\tltype = ltype,\n\t\t\t\t\t\tisReply = isReply,\n\t\t\t\t\t\tisTrack = isTrack\n\t\t\t\t\t},\n\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\ttime = os.date("%Y-%m-%dT%H:%M:%S+08:00",timspa)\n\t\t\t\t}\n\t\ttable.insert(out.data, rst)\t \n\t\t--log.debug('Bracelet_server [%s] locationdata:%s', moduleNo,json.encode(rst))\n\t\t--log.debug('Bracelet_server: dataresult: %s', json.encode(out))\n\t\tctx:notify(json.encode(out))\t\t\n elseif string.match(httpbody.URL ,"pull/falldata/parse") ~= nil then\t\t\n\t\tlocal imei = param.imei\n\t\tlocal timeBegin = param.time_begin\n\t\tlocal city = param.city\n\t\tlocal address = param.address\n\t\tlocal lon = param.lon\n\t\tlocal lat = param.lat\n\t\tlocal ftype = param.type\n\t\tlocal childDevice = getDeviceInfo("7")\n\t\tlocal night = Split(tostring(timeBegin)," ")\n\t\tlocal nhour = Split(tostring(night[2]),":")\n\t\tlocal ndate = Split(tostring(night[1]),"-")\n\t\tlocal timspa = os.time({year =tonumber(ndate[1]), month = tonumber(ndate[2]), day =tonumber(ndate[3]), hour =tonumber(nhour[1]), min =tonumber(nhour[2]), sec = 00})\n\t\t--log.debug('Bracelet_server [%s] timspa: %s', moduleNo,timspa)\n\t\tlocal rst = {\n\t\t\t\tdata = {\n\t\t\t\t\t\tcity = city,\n\t\t\t\t\t\taddress = address,\n\t\t\t\t\t\tlon = lon,\n\t\t\t\t\t\tlat = lat,\n\t\t\t\t\t\tftype = ftype\n\t\t\t\t\t},\n\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\ttime = os.date("%Y-%m-%dT%H:%M:%S+08:00",timspa)\n\t\t\t\t}\n\t\ttable.insert(out.data, rst)\t \n\t\t--log.debug('Bracelet_server [%s] falldata:%s', moduleNo,json.encode(rst))\n\t\t--log.debug('Bracelet_server: dataresult: %s', json.encode(out))\n\t\tctx:notify(json.encode(out))\t\t\t\n\telseif string.match(httpbody.URL ,"pull/sleepdata/parse") ~= nil then\n\t\tlocal imei = param.imei\n\t\tlocal timeBegin = param.time_begin\n\t\tlocal timeEnd = param.time_end\n\t\tlocal total = param.total\n\t\tlocal interval = param.interval\n\t\tlocal data = param.data\n\t\tlocal sleep = Split(tostring(data),"|")\n\t\tlocal night = Split(tostring(timeBegin)," ")\n\t\tlocal nhour = Split(tostring(night[2]),":")\n\t\tlocal ndate = Split(tostring(night[1]),"-")\n\t\tlocal minute = (23-tonumber(nhour[1]))*60+(60-tonumber(nhour[2]))\n\t\tlocal morning = Split(tostring(timeEnd)," ")\n\t\tlocal mhour = Split(tostring(morning[2]),":")\n\t\tminute = minute + tonumber(mhour[1])*60+tonumber(mhour[2])\n\t\tlocal cnt = minute/tonumber(interval)\n\t\t--log.debug('Bracelet_server [%s] cnt:%s minute: %s', moduleNo,cnt,minute)\n\t\tlocal offset = 0\n\t\tlocal count = {}\n\t\tlocal sleeptype = {}\n\t\tlocal timspa = os.time({year =tonumber(ndate[1]), month = tonumber(ndate[2]), day =tonumber(ndate[3]), hour =tonumber(nhour[1]), min =tonumber(nhour[2]), sec = 00})\n\t\t--log.debug('Bracelet_server [%s] timspa: %s', moduleNo,timspa)\n\t\tlocal addtime = tonumber(interval)*60\n\t\t--log.debug('Bracelet_server [%s] addtime: %s', moduleNo,addtime)\t\n\t\tfor k,v in pairs(sleep) do\n\t\t\toffset = offset + 1\n\t\t\tlocal value = Split(tostring(v),",")\n\t\t\tif cnt >= offset then\t\t\t\t\n\t\t\t\tlocal count=tostring(value[2])\n\t\t\t\tlocal sleeptype=tostring(value[1])\n\t\t\t\tlocal childDevice = getDeviceInfo("4")\n\t\t\t\ttimspa = timspa+addtime\n\t\t\t\tlocal Begintime = os.date("%Y-%m-%dT%H:%M:%S+08:00",timspa)\n\t\t\t\ttable.remove(out.data)\n\t\t\t\t\n\t\t\t\tlocal rst = {\n\t\t\t\t\t\tdata = {\n\n\t\t\t\t\t\t\t\ttimeBegin = tostring(timeBegin),\n\t\t\t\t\t\t\t\ttimeEnd = tostring(timeEnd),\n\t\t\t\t\t\t\t\ttotal = tostring(total),\n\t\t\t\t\t\t\t\tinterval = tostring(interval),\n\t\t\t\t\t\t\t\tcount = tostring(count),\n\t\t\t\t\t\t\t\tsleeptype = tostring(sleeptype)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\ttime = Begintime\n\t\t\t\t\t\t}\n\t\t\t\ttable.insert(out.data, rst)\t\t\t\t\n\t\t\t\t--log.debug('Bracelet_server [%s] timspa2: %s', moduleNo,timspa)\n\t\t\t\t--log.debug('Bracelet_server [%s] sleepdata:%s', moduleNo,json.encode(rst))\n\t\t\t\t--log.debug('Bracelet_server: dataresult: %s', json.encode(out))\n\t\t\t\tctx:notify(json.encode(out))\t\n\t\t\tend\n\t\tend\t\n elseif string.match(httpbody.URL ,"pull/powerdata/parse") ~= nil then\t\t\n \t--log.debug('Bracelet_server [%s]powerdata ', moduleNo)\n\t\tlocal imei = param.imei\n\t\tlocal timeBegin = param.time_begin\n\t\tlocal ptype = param.type\n\t\tlocal power = param.remaining_power\n\t\tlocal childDevice = getDeviceInfo("5")\n\t\tlocal night = Split(tostring(timeBegin)," ")\n\t\tlocal nhour = Split(tostring(night[2]),":")\n\t\tlocal ndate = Split(tostring(night[1]),"-")\n\t\tlocal timspa = os.time({year =tonumber(ndate[1]), month = tonumber(ndate[2]), day =tonumber(ndate[3]), hour =tonumber(nhour[1]), min =tonumber(nhour[2]), sec = 00})\n\t\tlocal rst = {\n\t\t\t\tdata = {\n\t\t\t\t\t\tptype = ptype,\n\t\t\t\t\t\tpower = power\n\t\t\t\t\t},\n\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\ttime = os.date("%Y-%m-%dT%H:%M:%S+08:00",timspa)\n\t\t\t\t}\n\t\ttable.insert(out.data, rst)\t\n\t\t--log.debug('Bracelet_server [%s] powerdata:%s', moduleNo,json.encode(rst))\n\t\t--log.debug('Bracelet_server: dataresult: %s', json.encode(out))\n\t\tctx:notify(json.encode(out))\t\t\n elseif string.match(httpbody.URL ,"pull/sosdata/parse") ~= nil then\t\t\n\t\tlocal imei = param.imei\n\t\tlocal timeBegin = param.time_begin\n\t\tlocal city = param.city\n\t\tlocal address = param.address\n\t\tlocal lon = param.lon\n\t\tlocal lat = param.lat\n\t\tlocal stype = param.type\n\t\tlocal heartrate = param.heartrate\n\t\tlocal childDevice = getDeviceInfo("6")\n\t\tlocal night = Split(tostring(timeBegin)," ")\n\t\tlocal nhour = Split(tostring(night[2]),":")\n\t\tlocal ndate = Split(tostring(night[1]),"-")\n\t\tlocal timspa = os.time({year =tonumber(ndate[1]), month = tonumber(ndate[2]), day =tonumber(ndate[3]), hour =tonumber(nhour[1]), min =tonumber(nhour[2]), sec = 00})\n\t\tlocal rst = {\n\t\t\t\tdata = {\n\n\t\t\t\t\t\tcity = city,\n\t\t\t\t\t\taddress = address,\n\t\t\t\t\t\tlon = lon,\n\t\t\t\t\t\tlat = lat,\n\t\t\t\t\t\tstype = stype,\n\t\t\t\t\t\theartrate = heartrate\n\t\t\t\t\t},\n\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\ttime = os.date("%Y-%m-%dT%H:%M:%S+08:00",timspa)\n\t\t\t\t}\n\t\ttable.insert(out.data, rst)\t \n\t\t--log.debug('Bracelet_server [%s] sosdata:%s', moduleNo,json.encode(rst))\n\t\t--log.debug('Bracelet_server: dataresult: %s', json.encode(out))\n\t\tctx:notify(json.encode(out))\n end\n\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i, dnlink in pairs(device.dnlinks) do\n for j, subdevice in pairs(dnlink.devices) do\n if tostring(subdevice.uplink.props.module) == tostring(moduleid) then\n return subdevice\n end\n end\n end\n --log.debug('Bracelet_server has no device module=%s moudledd=%s', moduleid, tostring(subdevice.uplink.props.moduleid) )\n return nil -- 没有找到匹配的传感器\n else\n --log.debug('Bracelet_server has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend INLINE 2019-01-05 10:21:39.301+08 2020-04-16 10:00:23.528+08 2019-01-05 \N
+5afcddd3-ab1d-4054-a530-478860d650ec hj_level_1543 \N 1.0 4cb97284-0871-46d4-baf9-17d494f6db64 4cb97284-0871-46d4-baf9-17d494f6db64 f 4cb97284-0871-46d4-baf9-17d494f6db64 Lua \nstart=function()\n log.debug("hj_level_1543 device=%s",json.encode(device))\n\t\n local endian = 'B'\n local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("hj_level_1543,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t log.debug("hj_level_1543 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n--0103023458af7e 13400\nunmarshall=function(hex,moduleNoStr)\n log.debug("hj_level_1543 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local length =iota.hexToUShort(hex,3,'B')\n \n out.data = { \n length=length \n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("hj_level_1543 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,deviceModule)\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n local dataModule=iota.hexToByte(data,0,'B')\n if tonumber(deviceModule) ~= dataModule then\t\n errormsg = string.format('无效的模块号')\n errcode = 3\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2019-03-27 16:20:07.447+08 2019-03-27 16:20:07.447+08 2019-03-27 \N
+d58ecc11-f676-48e3-b96e-1bb9f468720c hnli \N 温湿度 1.0 736d5c22-d6ac-4577-9782-0f95345ea1d5 736d5c22-d6ac-4577-9782-0f95345ea1d5 f 736d5c22-d6ac-4577-9782-0f95345ea1d5 Lua start=function()\n log.debug("hnli.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n log.debug("hnli.lua: Data, ctx=%s",hex)\n local out={\n data ={},\n result = {}\n }\n --ff 41 58 4a 23 86 62 62 04 14 51 58 30 23 00 03 00 01 04 f0 01 16 02 23 D5 07 ee ee\n\t--ff41584a238662620414515830230003000104f001160223D507eeee\n\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local temperature =iota.hexToShort(hex,20,'B')/10;\n\t\tlog.debug("hnli temperature=%s",temperature)\n local humidity = iota.hexToShort(hex,22,'B')/10;\n log.debug("hnli humidity=%s",humidity)\n \n out.data = { \n temperatures=temperature,\n humiditys=humidity\n --anglez=zData,\n --temperature=temp\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("hnli: cloudvibrate=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'hnli:Data is nil'\n errcode = 1001\n return false\n end\n\tlocal sensorType= iota.hexToShort(data,14,'B')\n\tif (sensorType~=3) then\n errormsg = string.format('anfang_inclinometer_1:sensorType is wrong=%s',sensorType)\n errcode = 1001\n return false\n end\n\tlocal subdata=string.sub(data,1,-9)\n local crc=iota.appendHexCrc(subdata, 'B' ,0)\n log.debug("anfang_inclinometer_1.lua: crc, ctx=%s",crc)\n local subdatacrc=string.sub(data,1,-5)\n log.debug("anfang_inclinometer_1.lua: subdatacrc, ctx=%s",subdatacrc)\n if (string.lower(crc)~=string.lower(subdatacrc)) then\n errormsg = string.format('anfang_inclinometer_1:crc[%s]≠[%s]',subdatacrc,crc)\n errcode = 1001\n return false\n end\n\t\n \n return true\n \nend\n \n INLINE 2019-06-27 16:19:33.652+08 2019-07-23 09:43:09.934+08 2019-06-27 \N
+17314a0b-eb69-402e-9907-19db709a84ea gdjiangwei_pressure \N 压力变送器 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "fs_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\tbuff=buff.."0103"\n buff=iota.appendHexWord(buff, tonumber(moduleNo), 'L') -- 2: 模块号\n buff=buff.."0001 " -- 1: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000) --下发的码流\n \n\tif ok then --下发是否成功\n result = unmarshall(resp)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n\t\t\n end \n -- ctx:asend("hello")\n ctx:done(result) --协议完成打ctx:done ()\nend\n\n--0016261381F35D42830C36094DFE363C80FFE1F8CFEF40\n--moduleId=9747\n--"temp": 23.81,\n--"xDegree": -30,\n--"yDegree": -1.967921\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={ },\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr) --判断是否符合厂家协议\n if ErrorCode then \n\n \n --print("parsing data", hex)\n local pres= iota.hexToUShort(hex,3,'B');\n\t\tlog.debug("savoir_485 pres= %d",pres)\n pres=tonumber(pres)/10\n\t\tpres=pres..0.0\n out.data = {\n pressure=pres,\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('fs_1503开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,0,'B') ~= 0x01 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n \n log.debug('fs_1503数据校验通过')\n return true\n--crc\nend\n\n INLINE 2019-04-01 14:02:15.172+08 2019-04-02 17:57:32.955+08 2019-04-01 \N
+2f0ce240-e503-4e31-8460-e1b29564c31c fs_YC_FME \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n --log.debug('FME [%s] start module %s, ctx=', json.encode(device.uplink.props.module))\nend\n\nonData = function(hex)\n --全局\n out = {\n data = {},\n result = {}\n }\n\n local sData = HextoStr(hex)\n\n local spliteData = Split(sData, '&&')\n local deviceData = Split(spliteData[1], ';')\n\n local moduledata = Split(deviceData[4], '=')\n local MN = moduledata[2] --MN号 唯一识别\n log.debug('FME [%s] sData=%s', MN, sData)\n local Data = Split(spliteData[2], ';')\n local timedata = Split(Data[1], '=')\n local time = timedata[2] --时间\n\n for key, value in pairs(Data) do\n Allot(value)\n end\n\n local resultData = json.encode(out)\n log.debug('FME [%s] result=%s', json.encode(out))\n ctx:notify(resultData)\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n-- allot 函数\nAllot = function(datastr)\n local pollutantTypes = Split(datastr, ',')\n for key, value in pairs(pollutantTypes) do\n local name = Split(value, '=')\n if name[1] == 'PM10-Avg' then\n local pm10 = tonumber(string.format('%0.0f', tonumber(name[2])))\n if pm10 <= 0 or pm10 > 700 then\n out.data.pm10 = nil\n out.result.code = 5001\n if out.result.msg ~= nil then\n out.result.msg =\n out.result.msg .. '[pm10] out of ranges pm10:' .. tostring(pm10) .. ' is out of[0,700]'\n else\n out.result.msg = '[pm10] out of ranges pm10:' .. tostring(pm10) .. ' is out of[0,700]'\n end\n else\n out.data.pm10 = pm10\n end\n elseif name[1] == 'PM25-Avg' then\n local pm25 = tonumber(string.format('%0.1f', tonumber(name[2])))\n if pm25 < 0 or pm25 > 700 then\n out.data.pm25 = nil\n log.debug('FME [%s]out.data.pm25=nil')\n out.result.code = 5001\n if out.result.msg ~= nil then\n out.result.msg =\n out.result.msg .. '[speed] out of pm25:' .. tostring(pm25) .. ' is out of[0,700]'\n else\n out.result.msg = '[speed] out of pm25:' .. tostring(pm25) .. ' is out of[0,700]'\n end\n else\n out.data.pm25 = pm25\n end\n elseif name[1] == 'W02-Avg' then\n local speed = tonumber(string.format('%0.1f', tonumber(name[2])))\n if speed < 0 or speed > 24.5 then\n out.data.speed = nil\n log.debug('FME [%s]out.data.speed=nil')\n out.result.code = 5001\n if out.result.msg ~= nil then\n out.result.msg =\n out.result.msg .. '[speed] out of speed:' .. tostring(speed) .. ' is out of[0,24.5]'\n else\n out.result.msg = '[speed] out of speed:' .. tostring(speed) .. ' is out of[0,24.5]'\n end\n else\n out.data.speed = speed\n end\n elseif name[1] == 'W01-Avg' then\n local direction = tonumber(string.format('%0.1f', tonumber(name[2])))\n if direction < 0 or direction > 360 then\n out.data.direction = nil\n out.result.code = 5001\n if out.result.msg ~= nil then\n out.result.msg =\n out.result.msg .. '[direction] out of direction:' .. tostring(direction) .. ' is out of[0,360]'\n else\n out.result.msg = '[direction] out of direction:' .. tostring(direction) .. ' is out of[0,360]'\n end\n else\n out.data.direction = direction\n end\n elseif name[1] == 'T01-Avg' then\n local temperature = tonumber(string.format('%0.1f', tonumber(name[2])))\n if temperature < -40 or temperature > 60 then\n out.data.temperature = nil\n out.result.code = 5001\n out.result.msg = '[temperture] out of temperture pm10:' .. tostring(temperature) .. ' is out of[-40,60]'\n else\n out.data.temperature = temperature\n end\n elseif name[1] == 'H01-Avg' then\n local humidity = tonumber(string.format('%0.1f', tonumber(name[2])))\n if humidity <= 0 or humidity > 100 then\n out.data.humidity = nil\n out.result.code = 5001\n if out.result.msg ~= nil then\n out.result.msg =\n out.result.msg .. '[humidity] out of humidity :' .. tostring(humidity) .. ' is out of[0,100]'\n else\n out.result.msg = '[humidity] out of humidity :' .. tostring(humidity) .. ' is out of[0,100]'\n end\n else\n out.data.humidity = humidity\n end\n elseif name[1] == 'B03-Avg' then\n local noise = tonumber(string.format('%0.1f', tonumber(name[2])))\n if noise < 0 or noise > 200 then\n out.data.noise = nil\n out.result.code = 5001\n if out.result.msg ~= nil then\n out.result.msg =\n out.result.msg .. '[noise] out of noise :' .. tostring(noise) .. ' is out of[0,200]'\n else\n out.result.msg = '[noise] out of noise :' .. tostring(noise) .. ' is out of[0,200]'\n end\n else\n out.data.noise = noise\n end\n elseif name[1] == 'R01-Avg' then\n local rain = tonumber(string.format('%0.1f', tonumber(name[2])))\n if rain < 0 or rain > 2000 then\n out.data.rain = nil\n out.result.code = 5001\n if out.result.msg ~= nil then\n out.result.msg =\n out.result.msg .. '[rain] out of rain :' .. tostring(rain) .. ' is out of[0,200]'\n else\n out.result.msg = '[rain] out of rain :' .. tostring(rain) .. ' is out of[0,200]'\n end\n else\n out.data.rain = rain\n end\n elseif name[1] == 'P01-Avg' then\n local pressure = tonumber(string.format('%0.1f', tonumber(name[2])))\n if pressure < 0 or pressure > 200 then\n out.data.pressure = nil\n out.result.code = 5001\n if out.result.msg ~= nil then\n out.result.msg =\n out.result.msg .. '[pressure] out of noise :' .. tostring(pressure) .. ' is out of[0,200]'\n else\n out.result.msg = '[pressure] out of pressure :' .. tostring(pressure) .. ' is out of[0,200]'\n end\n else\n out.data.pressure = pressure\n end\n else\n end\n end\nend INLINE 2019-03-31 14:09:32.882+08 2019-04-01 14:33:11.05+08 2019-03-31 \N
+e9efde3c-7a62-4df8-b112-22384afc7c24 R485 \N 温度 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --require"functions"--公共函数\n--[[\n可用函数包:\nlog:日志\nconvertor:转换\nconn:链接\n全局变量:\nctx:(只读)\ndevice=>{}//设备信息\nprotocol=>{}//协议信息\ninterface=>{}//接口信息\nssend:同步发送数据\nasend:异步发送数据\ndone:完成处理.\nnotify:通知结果\n]]\n--//协议参考文档:Documents/PMO/02产品协议/我司产品协议/通信协议/ModBus统一通信协议.xls\nstart=function()\n\tlog.debug("savoir_485 loadscript%s,moduleId=%s","BK_WaterLevel.lua",device.uplink.props.module or "[nil]")\n\t\n\n\tout={\n\t\t\t\ttype=2,\n\t\t\t\tdata={},\n\t\t\t\tresult={}\n\t\t\t\t}\n\tlocal endian='B'\n\tlocal buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props)~='null'then\n\t\tmoduleNo=device.uplink.props.module--模块通道优先接口获取\n\t\t\n\t\tlog.debug("savoir_485设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("savoir_485设备模块通道属性获取m=%s,c=%s接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\tbuff=iota.appendHexByte(buff,moduleNo,endian)--1:模块号\n\tbuff=buff.."03010B001D"--1:指令:采集\n\tbuff=iota.appendHexCrc(buff,endian,0)--2:CRC\n\tok,resp=ctx:ssend(buff,15000)--发送指令\n\tlocal ErrorCode=IsValid(resp)\n\tlocal subdevices=device.dnlinks[1].devices\n\tlog.debug("savoir_485 device 子设备模块通道 接口获取 ,c=%s ",json.encode(device))\n\tif subdevices ~=nil then\n\tlog.debug("savoir_485 subdevices 子设备模块通道 接口获取 ,c=%s ",json.encode(subdevices))\n\t offsetvalue = 13\n \t for index,child in pairs(subdevices) do --插入16个通道\n \t\t\t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\t\tlog.debug("savoir_485 uplink 子设备模块通道 接口获取 ,c=%s ",channelNo)\n\t\t\t else\n\t\t\t\t channelNo=child.props.channelId \n\t\t\t\t log.debug("savoir_485 子设备模块通道 属性获取,c=%s ",channelNo)\n\t\t\t end\n\t\t\t\tif ErrorCode then \t\n\t\t\t\t\t--offsetvalue=(channelNo-1)*2+13\n\t\t\t\t\tresult=unmarshall(resp,channelNo,offsetvalue ) ---插入数据\n\t\t\t\t\t table.insert(out.data,result)\n\t\t\t\t\t\n\t\t\t\telse\n\t\t\t\t out.result = {code=errcode,msg=errormsg} \n\t\t\t\tend\t\n\n\t\t\t\t\n\t end\n \n\n\tend\n\nlocal resultData =json.encode(out)\n--ctx:asend("hello")\nctx:done(resultData)\nend\n\n\nunmarshall=function(hex,subChannelId,offset )\nlog.debug("savoir_485 unmarshall offset = %d",offset)\nlocal subData={\n type=1,\n data={},\n\t\tdevice="", \n result={}\n }\nlocal ctemp=iota.hexToShort(hex,offset ,'B')/10\nlocal ErrorCode=IsValidOut(resp,ctemp,offset)\nif ErrorCode then\n\n\t--localscale=1000000.00;\n\t--print("parsingdata",hex)\n\tlocal length=iota.hexToByte(hex,2,"B")\n\tlocal analogquan1=iota.hexToUShort(hex,3,"B")\n\tlocal analogquan2=iota.hexToUShort(hex,5,'B')\n\tlocal Tempmax=iota.hexToShort(hex,7,'B')/10\n\tlocal Tempmin=iota.hexToShort(hex,9,'B')/10\t\n\tlog.debug("savoir_485 Tempmin= %d",Tempmin)\n\tlocal k=length/2-5\n\tlog.debug("savoir_485 k = %d",k)\n\tlocal Temp=iota.hexToShort(hex,offset ,'B')/10\n\n\t\n\tlog.debug("savoir_485 temp = %d",Temp)\n\tlog.debug("savoir_485 offsetvalue=%d",offset)\n\n\t\n\tlog.debug("savoir_485")\n\tchild=getDeviceInfo( subChannelId)\n\tlog.debug("savoir_485 child=%s",child)\n\tsubData.data={ \n\t\t\t\t\ttemperature=Temp\n\t\t\t\t\t}\n\tsubData.device = \tchild.id\n\tlog.debug("savoir_485 subData.device=%s",subData.device)\n\tlog.debug("savoir_485 subData.temperature=%s,channel =%s",subData.data.temperature,tostring(subChannelId))\n\treturn subData\nelse\n\tout.result = {code=ercode,msg=erormsg} \nend\n\nend\n --获取传感器信息\nfunction getDeviceInfo( channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for k, dnlink in pairs(device.dnlinks) do\n for v, subdevice in pairs(dnlink.devices) do\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n log.debug('savoir_485 has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('savoir_485 has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\t\n\nIsValid=function(data)\n\tlog.debug('savoir_485开始校验数据')\n\tlocal dataex=string.sub(data,1,-5) \t--crc 校验的具体步骤\n\tlog.debug("savoir_485 dataex=%s",dataex)\n\tlocal reply=iota.appendHexCrc(dataex,'L',0)\n\tlog.debug("savoir_485 reply=%s",reply)\n\tlocal replydadt= string.sub(reply,123,126)\n if string.sub(data,123,126)== replydadt then\n\t\terrormsg='Invalidacqhyperpyrexia'\n\t\terrcode=1004\n\t\treturn false\n\tend\n\tif iota.hexToByte(data,1,'B')~=0x03 then\n\tlog.debug("savoir_485 iota.hexToByte=%s",iota.hexToByte)\n\t\terrcode=1001\n\t\terrormsg='HexCMDFalse'\n\t\treturn false\n\tend\n\tlog.debug("savoir_485ert0")\n\t\n\tlog.debug('savoir_485数据校验通过')\n\treturn true\n--crc\nend\nIsValidOut=function(data,Temp,offset)\n\tlog.debug('savoir_485即将开始校验数据')\n\n\tif iota.hexToShort(data,7,'L')==-9999 then\n\t\tercode=1001\n\t\terormsg='HexCMD False'\n\t\tlog.debug('savoir_485 HexCMDFalse')\n\t\treturn false\n\tend\n\tlog.debug('savoir_485 TTTemp=%s offset = %s',tostring(Temp),offset)\n if Temp==-999.9 then\n\t\n\t\tercode=1001\n\t\terormsg='evey temperature Invalidacqhyperpyrexia'\n\t\treturn false\n\tend\n\t\tlocal a=string.sub(data,11,11) \n\tlog.debug('savoir_485a=%s',type(a))\n\tif a==0x00 then\t\n\t\terormsg='Invalidacqhyperpyrexia'\n\t\tlog.debug('savoir_485 Invalidacqhyperpyrexia')\n\t\tercode=1002\n\t\treturn false\n\tend\n\tif string.sub(data,12,12)==0x00 then\t\n\t\terormsg='InvalidacqThetemperatureistoolow'\n\t\tercode=1002\n\t\treturn false\n\tend\t\n\t\n\n\t\treturn true\n--crc\nend\n INLINE 2019-03-27 11:05:50.803+08 2019-04-18 14:53:35.202+08 2019-03-27 \N
+e88b9b4b-85da-411c-bff3-39a9513f30a7 dfa \N feaf 1 a83dd8eb-87e6-4594-9729-6d0783c1d6e3 a83dd8eb-87e6-4594-9729-6d0783c1d6e3 f a83dd8eb-87e6-4594-9729-6d0783c1d6e3 Lua grtsghrtd INLINE 2019-03-29 16:41:13.188+08 2019-03-29 16:41:13.188+08 2019-03-29 \N
+a92e19e7-5ed2-4b53-8bd5-781c242f27f6 sxhr_level_2019 \N 1.0 802a6ad5-5ee7-4234-8c91-32aa074a0685 802a6ad5-5ee7-4234-8c91-32aa074a0685 f 802a6ad5-5ee7-4234-8c91-32aa074a0685 Lua --D:\\SVN\\201907项目\\高精度压力式水位水温计陕西恒瑞HR8003型新版选型.pdf\nstart=function()\n log.debug("start %s, ctx=%s", "sxhr_level_2019.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module \n\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x05, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("sxhr_level_2019,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '超时'} \n\t ctx:done(json.encode(errout))\n\tend\nend\n\n--5f0300010005d977\n--5f030a00000000012300000000367e\n--"level": \n--"temperature": \n--"pressure": \nunmarshall=function(hex,moduleNoStr)\n log.debug("sxhr_level_2019 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local level =iota.hexToInt(hex,3,'B')\n\t\tlocal temperature =iota.hexToShort(hex,7,'B')/10\n\t\tlocal pressure =iota.hexToInt(hex,9,'B')\n \n out.data = { \n level=tonumber(string.format("%0.3f",level)),\n\t\t\ttemperature\t=tonumber(string.format("%0.2f",temperature)),\n\t\t\tpressure=tonumber(string.format("%0.3f",pressure)),\t\t\t\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("sxhr_level_2019 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n\tlocal checkLen=string.len(data)/2\n if data == nil or checkLen~= 15 then\n errormsg = string.format('无效的数据长度=%s≠15',checkLen)\n errcode = 1002\n return false\n end\n local dataModule=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataModule) then\t\n errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n errcode = 1003\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2019-07-22 15:59:48.28+08 2019-07-22 16:01:33.03+08 2019-07-22 \N
+80c16a27-2bdf-48f6-ab20-690c3926ec7a jitai_degree_1888 \N MI6000倾角仪 单轴 1.0 d3f1aa63-8397-45a4-af26-15a0f91d1e13 d3f1aa63-8397-45a4-af26-15a0f91d1e13 f d3f1aa63-8397-45a4-af26-15a0f91d1e13 Lua --// 04 项目资料/2018-03/南京基泰集成箱设备协议/GT-MI600倾角仪.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "jitai_1888", device.props.moduleId or "[nil]")\n log.debug('jitai_1888 device=%s', json.encode(device))\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jitai_1888 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jitai_1888 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\t\n\t\tlog.debug("jitai_1888 moduleNo=%s interface module=%s, property moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n\t\tbuff=iota.appendHexByte(buff, 0xf5, endian) \n buff=iota.appendHexByte(buff, 0xf5, endian) \n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号 485接口获取\n\t\tlog.debug("jitai_1888 发送采集命令=%s",buff)\n ok,resp=ctx:ssend(buff,15000)\n\t\t\n local result='{}'\n if ok then\n result = unmarshall(resp,tostring(moduleNo))\n else\n log.debug("jitai_1888 SSend error!")\n end\n ctx:done(result)\nend\n\n--F5F501\n--moduleId=1\n--15028765 \n\nunmarshall=function(hex,module_str)\n\tlog.debug("jitai_1888 收到数据=%s",hex)\n local out={\n data ={},\n result = {}\n }\n\tlocal xDegree\n\tlocal yDegree\n\t\n local ErrorCode = IsValid(hex,module_str)\n if ErrorCode then \n local index_x=string.sub(hex,3,3)\n local str_num_x = string.sub(hex,4,8)\n local num_x=tonumber(str_num_x)\n \tif index_x=="8" then\n \t\tnum_x=-1 * num_x\n \tend\n \n \n\t\tlocal num_y\n if string.len(hex)/2==7 then\n \t\tlocal index_y=string.sub(hex,9,9)\n \tlocal str_num_y = string.sub(hex,10,14)\n \t num_y=tonumber(str_num_y)\n \t\tif index_y=="8" then\n\t\t\t\tnum_y=-1 * num_y\n\t\t\tend\t\t\t\n\t\tend\n\t\n\t\tlocal K1 = device.props.K1\n\t\tlocal K2 = device.props.K2\n\t\tlocal K3 = device.props.K3\n\t\tlocal Fo = device.props.Fo\n\t\tlog.debug("jitai_1888 公式参数=%s,%s,%s,%s",K1,K2,K3,Fo)\n\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil then\n\t\t\tlog.debug("jitai_1888 公式参数有nil")\n\t\telse\n\t\t\tlocal Fi=num_x --经过厂家确认 公式带入的是模数\n\t\t\txDegree = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)\n\t\t\txDegree=string.format("%0.2f",xDegree)\n\t\t\tif num_y~=nil then\n\t\t\t\tFi=num_y\n\t\t\t\tyDegree = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)\n \t\tyDegree=string.format("%0.2f",yDegree)\n\t\t\t\tlog.debug("jitai_1888 yDegree=%s",yDegree)\n\t\t\tend\n\t\tend \t\t\t\t\n out.data = {\n\t\t\tanglex=tonumber(xDegree),\n \t\tangley=tonumber(yDegree)\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,module_str_check)\n log.debug('jitai_1888:开始校验数据%s',data)\n if data == nil or (string.len(data)/2 ~=4 and string.len(data)/2 ~=7) then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if tonumber(module_str_check)~= tonumber(string.sub(data,1,2)) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug("jitai_1888 模块错误 module_str_check=%s ,tostring(string.sub(data,1,2)=%s",module_str_check,string.sub(data,1,2))\n return false\n end\n log.debug('jitai_1888:数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2018-03-15 17:16:37.707+08 2019-05-17 11:14:43.367+08 2018-03-15 \N
+8f7fdf16-7f6e-4bc7-8e4c-bd964a4a02ed gdjiangwei_noncurren \N 静力水准仪 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "fs_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n buff=iota.appendHexWord(buff, tonumber(moduleNo), 'L') -- 2: 模块号\n buff=buff.."0300000001 " -- 1: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000) --下发的码流\n \n \n\tlog.debug('能不能输出呀不能输出呀')\n\tif ok then --下发是否成功\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n\t\t\n\t\t\n\t\t log.debug("rs_485 code=%d",code)\n end \n -- ctx:asend("hello")\n ctx:done(result) --协议完成打ctx:done ()\nend\n\n--0016261381F35D42830C36094DFE363C80FFE1F8CFEF40\n--moduleId=9747\n--"temp": 23.81,\n--"xDegree": -30,\n--"yDegree": -1.967921\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={ },\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr) --判断是否符合厂家协议\n if ErrorCode then \n\n \n --print("parsing data", hex)\n\t\t\n\t\n local noncurrent= iota.hexToUShort(hex,3,'B');\n\t\t--log.debug("savoir_485 pres= %d",pres)\n \n out.data = {\n noncurrent=noncurrent,\n };\n \n else\n\t\tlog.debug('到没到这丫')\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('fs_1503开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n\t\tlog.debug("rs_485 errcode=%d",errcode)\n errormsg = 'Hex CMD False ' \n return false\n end\n \n log.debug('fs_1503数据校验通过')\n return true\n--crc\nend\n\n INLINE 2019-04-01 15:32:24.962+08 2019-04-12 09:34:39.808+08 2019-04-01 \N
+3dc26404-5272-4fbc-97f2-8493009c06ac Trash_server \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug("Trash_server:device=%s",json.encode(device))\n--根据经纬度获取天气\n\tlocal location = device.props.location\n local url = "https://www.icb-admin.com/api/trash/trashlist"\n\n\t--Sleep(1)\n\t --请求数据\n\tlocal req = {\n\t\t\t\ttype= "http",\n\t\t\t\turl=url, \n\t\t\t\tmethod="POST",\n\n \t\t\tcontenttype="application/json",\n \t\t\tbody = "{\\"username\\":\\"feishang\\"}"\n\t\t\t}\n\t --post发送\n\tlocal dataok,dataack=ctx:ssend(req,3000)\n\tlocal wd = nil\n\tout = {\n\t\tdata = {},\n\t\tresult ={}\n }\n\n\tif not dataok or json.encode(dataack) ~=nil then\t\t\n \t--log.debug("Trash_server recived data is not nil!")\n\t\tlocal moduleid = device.uplink.props.id\n\t\tGetData(dataack,moduleid)\n\telse\n\t\t--log.debug("Trash_server recived data is ni")\n\tend\t\n\t\t\t\n--数据推送\n\tlog.debug("Trash_server restult %s",json.encode(out))\n ctx:done(json.encode(out))\nend\n\n\n\nfunction GetData(data,moduleid)\n\t--log.debug("Trash_server DisplayWeather: %s",json.encode(data.body))\n\tlocal rt_data=json.decode(data.body) -- 有数据\n\t\n\tfor k,v in pairs(rt_data.trash_list)do\n\t\tif tostring(v.sn) == tostring(moduleid) then\t\t\t\n\t\t\tlocal lat = tonumber(v.lat)\n\t\t\tlocal lon = tonumber(v.lng)\n\t\t\t \t\t\n \t\tlocal table = v.sort_list\n\t\t\tfor j,t in pairs(v.trash_status)do --获取box_num和sort_name 对应关系\n \t\t\n\t\t\t\tlocal name = tostring(t.sort_name)\n\t\t\t\tlocal num = tonumber(t.box_num)\n\t\t\t\tlog.debug("Trash_server GetData num : %s",tostring(num))\n\t\n\t\t\t\tout.data.lat = lat\n\t\t\t\tout.data.lon = lon\n\n\t\t\t\tfor t,r in pairs(table)do\t\t\t\t\n\t\t\t\t\tif name == tostring(r.sort_name) then \t\t\t\t\t\t\t\n\t\t\t\t\t\tlocal high = tonumber(r.trash_high)\n \t\t\tlog.debug("Trash_server GetData high: %s",high)\n\t\t\t\t\t\tif num == 1 then \n\t\t\t\t\t\t\tout.data.high1 = high\n\t\t\t\t\t\telseif num == 2 then\n\t\t\t\t\t\t\tout.data.high2 = high\n\t\t\t\t\t\telseif num == 3 then\n\t\t\t\t\t\t\tout.data.high3 = high\n\t\t\t\t\t\telseif num == 4 then\n\t\t\t\t\t\t\tout.data.high4 = high\n\t\t\t\t\t\telseif num == 5 then\n\t\t\t\t\t\t\tout.data.high5 = high\n\t\t\t\t\t\telseif num == 6 then\n\t\t\t\t\t\t\tout.data.high6 = high\n\t\t\t\t\t\telseif num == 7 then\n\t\t\t\t\t\t\tout.data.high7 = high\n\t\t\t\t\t\telseif num == 8 then\n\t\t\t\t\t\t\tout.data.high8 = high\n\t\t\t\t\t\telseif num == 9 then\n\t\t\t\t\t\t\tout.data.high9 = high\n\t\t\t\t\t\telseif num == 10 then\n\t\t\t\t\t\t\tout.data.high10 = high\n\t\t\t\t\t\telseif num == 11 then\n\t\t\t\t\t\t\tout.data.high11 = high\n\t\t\t\t\t\telseif num == 12 then\n\t\t\t\t\t\t\tout.data.high12 = high\n\t\t\t\t\t\telseif num == 13 then\n\t\t\t\t\t\t\tout.data.high13 = high\n\t\t\t\t\t\tend\n \t\tout.time=os.date("%Y-%m-%dT%H:%M:%S+08:00",r.createtime)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\nend\n\n\n INLINE 2019-01-18 16:52:04.056+08 2019-05-17 14:58:47.601+08 2019-01-18 \N
+048fbfb1-71d8-439a-ba37-9ff68aeeecc2 自己测试 \N 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua zcxc INLINE 2019-08-14 10:56:47.91+08 2019-08-14 10:57:38.332+08 2019-08-14 \N
+d667ae82-81b1-4f2e-94ba-9e7c4741101b jzyg-EC-A3fs \N 1.0 e54b85b0-151e-4b74-b360-a8ae65addd46 e54b85b0-151e-4b74-b360-a8ae65addd46 f e54b85b0-151e-4b74-b360-a8ae65addd46 Lua --// 风速风向传感器\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "EC-1A3 ", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("EC-1A3 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("EC-1A3 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n \t\tbuff=iota.appendHexByte(buff, 0x00, endian) \t\t\n buff=iota.appendHexByte(buff, 0x06, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n\t\t\n\t\tlog.debug('EC-1A3 %s buff111111',buff)\n\t\t\n\t\t\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("EC-1A3 SSend error!")\n end\n ctx:done(result)\nend\n\n--01030004000285ca\n--01030409c49900d202 \n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\t\t\t\n local speed = iota.hexToShort(hex,3,'B')/10\n\t\tlog.debug('EC-1A3 %s 风速',speed)\n\t\tlocal direction = iota.hexToShort(hex,5,'B')/10\n\t\tlog.debug('EC-1A3 %s 风向',direction)\n\t\tlocal verdirection = iota.hexToShort(hex,7,'B')/10\n\t\tlog.debug('EC-1A3 %s 垂直风向',verdirection)\n\t\tlocal xdirection = iota.hexToShort(hex,9,'B')/10\n\t\tlog.debug('EC-1A3 %s x轴风向',xdirection)\n\t\tlocal ydirection = iota.hexToShort(hex,11,'B')/10\n\t\tlog.debug('EC-1A3 %s y轴风向',ydirection)\n\t\tlocal zdirection = iota.hexToShort(hex,13,'B')/10\n\t\tlog.debug('EC-1A3 %s z轴风向',zdirection)\n\t\t\n \n \n out.data = {\n\t\t\tspeed=speed,\n\t\t\tdirection=direction,\n\t\t\tverdirection=verdirection,\n\t\t\txdirection=xdirection,\n\t\t\tydirection=ydirection,\n\t\t\tzdirection=zdirection\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n log.debug('EC-1A3 %s 开始校验数据',data)\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n \n log.debug('EC-1A3 数据校验通过')\n return true\n\nend\n\n\n\t\n \n INLINE 2019-08-08 09:00:49.431+08 2019-08-21 16:02:06.499+08 2019-08-08 \N
+b45287f0-ebb9-4479-8090-b85009e199f0 mas_lf \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --//04 项目资料/仁科扬尘/网络型采集器通信协议V11_201807261651431.docx\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n --0100000001012000042b00000014d0\n--moduleId=1\n--channelId=1\n\nstart=function()\n log.debug("load script %s, moduleId=%s", "mas_lf", device.props.moduleId or "[nil]")\nend\n\nonData=function(hex)\n local out={\n data ={},\n result = {}\n }\n\tlocal result=json.encode(hex)\n \tlocal str = toStrHex(hex)\n \tlog.debug("mas_lf onData hex = %s",str)\n\tlocal djs=Split(str,',')\n\tlocal channel = 0\n\tlocal frequency = 0\n\tlocal temp = nil\n\tlocal electricity = nil\n\tlocal GSM = nil\n\tfor k,v in ipairs(djs) do\n\t\tif v~='' and v~=nil then\n\t\t\tlocal dj=json.decode(v)\n\t\t\tlog.debug("mas_lf onData key = %d v =%s",k,v)\n\t\t\tif k == 1 then \n\t\t\t\tlocal errdata = Split(v,':')\n\n\t\t\t\tlocal errstr = tostring(errdata[2])\n\t\t\t\terrstr = string.sub(errstr,2,-2)\n\t\t\t\tlog.debug("mas_lf onData errdata = %s",errstr)\n\t\t\t\tlocal ErrorCode = IsValid(errstr)\n\n\t\t\t\tif ErrorCode ~= true then\n\t\t\t\t local result = json.encode(out)\n\t\t\t\t ctx:notify(result)\n\t\t\t\t return\n\t\t\t\tend\t\t\t\n\t\t\telseif k == 7 then --channel\n\t\t\t\tlocal data = Split(v,':')\n\t\t\t\tchannelId = tostring(data[2])\n\t\t\telseif k == 8 then --collectedValue1\n\t\t\t\tlocal data = Split(v,':')\n\t\t\t\tcollectedValue1 = tostring(data[2])\n\t\t\telseif k == 9 then --collectedValue2\n\t\t\t\tlocal data = Split(v,':')\n\t\t\t\tcollectedValue2 = tostring(data[2])\n\t\t\telseif k == 10 then --collectedValue3\n\t\t\t\tlocal data = Split(v,':')\n\t\t\t\tcollectedValue3 = tostring(data[2])\n\t\t\telseif k == 11 then --electricity\n\t\t\t\tlocal data = Split(v,'%')\n\t\t\t\tlocal datastr = tostring(data[1])\n\t\t\t\tlocal data1 = Split(datastr,':')\n\t\t\t\tlocal data1str = tostring(data1[2])\n\t\t\t\telectricity = data1str.."%"\n\t\t\telseif k == 12 then --GSM\n\t\t\t\tlocal data = Split(v,':')\n\t\t\t\tGSM = tostring(data[2])\t \t\t\t\t\n\t\t\tend\n\t\tend\n\tend\n\n\tlog.debug("mas_lf temperature:%s,frequency:%s electricity:%s.GSM:%s",collectedValue1,collectedValue2,electricity,GSM)\n\tlocal power = tonumber(device.props.electricity)\n \tlocal ele =tonumber(data1str)\n \tif ele ~= nil and power ~= nil then\n if ele < power then\n out.result={code = 1002,msg="electricity too low"}\n end\n end\n \t\tlocal Phy=0\n --if subDevice.device.formula == "ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)" then --振弦公式\n\t\t\n local k = device.props.k or 0\n local kt = device.props.kt or 0\n local f0 = device.props.f0 or 0\n local t0 = device.props.t0 or 0\n --设备不再计算 直接输出物理量\n --if k~=nil and kt~=nil and f0~=nil and t0~=nil and collectedValue1 ~=nil and collectedValue2 ~= nil then\n --Phy =k * (collectedValue1 ^ 2 - f0 ^ 2) + kt * (collectedValue2 - t0)\n --end\n\t--out.data.temp = collectedValue2\n\tout.data.physicalvalue = collectedValue1\n \t--out.data.physicalvalue = Phy\n\n\tlocal resultData =json.encode(out)\n ctx:notify(resultData)\n \nend\n\nIsValid=function(data)\n\tlog.debug("mas_lf onData errdata1 = %s",data)\n\tif data == "success" then\n\telse\n\t errormsg = 'data is wrong'\n errorcode = 1001\n return false\n end\n return true\nend\n\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n --string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend INLINE 2019-03-08 17:07:17.281+08 2019-09-09 14:09:03.52+08 2019-03-08 \N
+7c5f67f4-aa30-4f95-bc24-3de551e8dc36 scg_Vibrating_14000 \N 复制上海建工的 1.0 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f 8d2f03c7-32a2-42e4-befc-7dde5c965472 Lua \nstart = function()\n log.debug('scg_Vibrating_14000 device=%s', json.encode(device))\nend\n\nlocal dataCounts = 0\n\n--0102030405060708190a17323a000000060201365906c7ba -- 1和4通道\n--0102030405060708150a17323a000000060201365906c7ba \t -- 1和3通道\nlocal isCycleTimeUpdated = 0\n\nlocal sendCount_updateTime = 0\nonData = function(httpbody)\n local dataid = device.uplink.props.id\n log.debug('scg_Vibrating_14000 [%s] httpbody===>%s[%s],', dataid, json.encode(httpbody), dataCounts)\n --主动上传式\n --local hex = httpbody.Body\n local bodyStr = httpbody.Body\n if bodyStr ~= nil or bodyStr ~= '' then\n local obj = json.decode(bodyStr)\n local hex = obj.pkg\n log.debug('scg_Vibrating_14000 1111111 [%s] hex=%s', dataid, hex)\n --调度重启,尝试获取记录结果\n \n local out = {\n type = 2,\n data = {},\n result = {}\n }\n local messageId_hex\n local ErrorCode = IsValid(hex, dataid)\n if ErrorCode then\n local hasCycleTimeUpdated = (isCycleTimeUpdated ~= tonumber(device.props.cycletime))\n if dataCounts == 0 or hasCycleTimeUpdated then\n local getdataCounts = getRedisValue('datacounts')\n if getdataCounts ~= nil then\n dataCounts = dataCounts\n end\n\n local getisCycleTimeUpdated = getRedisValue('iscycletimeupdated')\n if getisCycleTimeUpdated ~= nil then\n isCycleTimeUpdated = tonumber(getisCycleTimeUpdated) --上次的采集周期\n end\n end\n\n log.debug('scg_Vibrating_14000 [%s] dataCounts=%s,LastCycleTimeUpdated=%s,props.cycletime=%s,hasCycleTimeUpdated=%s', dataid, dataCounts, isCycleTimeUpdated, device.props.cycletime, hasCycleTimeUpdated)\n dataCounts = (dataCounts + 1) % 0x100 --计数\n local dataCounts_hex = string.format('%02x', dataCounts)\n redis.set(device.id .. 'datacounts', tostring(dataCounts)) --存储记录\n log.debug('scg_Vibrating_14000 [%s] Received=>%s[%s],', dataid, hex, dataCounts)\n\n local moduleNo = string.sub(hex, 1, 16)\n messageId_hex = string.sub(hex, 17, 18)\n log.debug('scg_Vibrating_14000 [%s] moduleNo=%s,messageId_hex=%s', dataid, moduleNo, messageId_hex)\n\n --解析messageID\n local messageId_bitTable = getBits(messageId_hex)\n local datatimeHexStr = string.sub(hex, 19, 26)\n\n local year = string.format('%02x', tonumber(os.date('%y', os.time())))\n local month = string.format('%02x', tonumber(os.date('%m', os.time())))\n datatimeHexStr = year .. month .. datatimeHexStr\n local datetime = hexDateStrToDate(datatimeHexStr)\n log.debug('scg_Vibrating_14000 [%s] 时间datetime=%s', dataid, datetime)\n local dataArea = string.sub(hex, 27, -1)\n log.debug('scg_Vibrating_14000 [%s] dataArea=%s', dataid, dataArea)\n\n --遍历\n for i = 1, 8, 1 do\n local voltage\n local Frequency\n local Resistance\n local LnR\n local temperature\n local deviceId\n local len_dataArea = string.len(dataArea)\n if messageId_bitTable[i] == 1 and len_dataArea >= dataTypesLen[i] then --当前标志位数据存在\n if i < 5 then --频率数据\n local subData = string.sub(dataArea, 1, 10)\n dataArea = string.sub(dataArea, 11, -1)\n local frequency_str = string.sub(subData, 1, 6)\n local resistance_Str = string.sub(subData, 7, 10)\n\n Frequency = tonumber(frequency_str, 16) / 100\n Resistance = tonumber(resistance_Str, 16)\n\t\t\t\t\t\t\n LnR = math.log(Resistance)\n\t\t\t\t\t\t\n\n --循环插入单通道数据表\n\n --获取通道设备deviceId\n local channelNo = i\n log.debug('scg_Vibrating_14000 [%s] 模块号=%s,通道号=%s,frequency_str=%s[%s],resistance_Str=%s[%s]', dataid, moduleNo, channelNo, frequency_str, Frequency, resistance_Str, Resistance)\n local childDevice = getDeviceInfo(moduleNo, channelNo)\n --\n\n if childDevice ~= nil then\n deviceId = childDevice.id\n log.debug('scg_Vibrating_14000 (振弦)子设备原形childDevice=%s', json.encode(childDevice))\n log.debug('scg_Vibrating_14000 (振弦)子设备deviceId: ' .. tostring(deviceId))\n\n \n local a = childDevice.uplink.capabilities[1].formula.props.A\n local b = childDevice.uplink.capabilities[1].formula.props.B\n local c = childDevice.uplink.capabilities[1].formula.props.C\n local e = childDevice.uplink.capabilities[1].formula.props.E\n\t\t\t\t\t\t\t\tlocal c0= childDevice.uplink.capabilities[1].formula.props.C0\n\t\t\t\t\t\t\t\tlocal g= childDevice.uplink.capabilities[1].formula.props.G\n\t\t\t\t\t\t\t\tlocal k= childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\t\t\tlocal r0= childDevice.uplink.capabilities[1].formula.props.R0\n\t\t\t\t\t\t\t\tlocal t0= childDevice.uplink.capabilities[1].formula.props.T0\n log.debug('scg_Vibrating_14000 [%s] (振弦)子设备:m=%s,c=%s:公式参数a=%s,b=%s,c=%s', dataid, moduleNo, channelNo, a, b, c)\n log.debug('scg_Vibrating_14000 [%s] 4444447777a',a )\n\t\t\t\t\t\t\t log.debug('scg_Vibrating_14000 [%s] 4444488888b',b )\n\t\t\t\t\t\t\t log.debug('scg_Vibrating_14000 [%s] 4444499999c',c )\n\t\t\t\t\t\t\t if a ~= nil and b ~= nil and c ~= nil then\n temperature = 1 / (a + b * LnR + c * LnR ^ 3) - 273.2 --无温度补偿\n temperature = tonumber(string.format('%0.2f', temperature))\n log.debug('scg_Vibrating_14000 [%s] 模块号=%s,通道号=%s 当前的temperature=%s', dataid, moduleNo, channelNo, temperature)\n end\n\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000 [%s] 44444455555temperature',temperature )\n\t\t\t\t\t\t\t if childDevice.uplink.capabilities[1].formula.metaid == 'd4c1a662-bfbc-4e70-8744-1604711d65db' then --混凝土结构\n\t\t\t\n\t\t\t\t\t\t\t\t\tif e ~= nil and c0 ~= nil and g ~= nil and k ~= nil and r0 ~= nil and t0 ~= nil then\n\t\t\t\t\t\t\t\t\t\tphy=e * (g * c0 * (Resistance-r0) + k * (temperature-t0))\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == 'abc52bef-269a-4be1-82f0-5d3626a3ca44' then --钢结构\n\t\t\t\t\t\t\t\t\tlocal y1= childDevice.uplink.capabilities[1].formula.props.Y1\n\t\t\t\t\t\t\t\t\tlocal y2= childDevice.uplink.capabilities[1].formula.props.Y2\n\t\t\t\t\t\t\t\t\tif e ~= nil and c0 ~= nil and g ~= nil and y1 ~= nil and r0 ~= nil and t0 ~= nil and y2 ~= nil then\n\t\t\t\t\t\t\t\t\t\tphy = e * (g * c0 * (Resistance-r0) + (temperature-t0) * (y1-y2))\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000 [%s] 444444temperature',temperature )\n\t\t\t\t\t\t\t--\t04d11a24-68c7-4a80-bfc1-ffb924f24296\n\t\t\t\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == '86dd2c3f-ab82-4e7a-8766-5f8af99c2de9' then --裂缝计\n \n\t\t\t\t\t\t\t\t\tlocal K= childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000 [%s] K1111111111111(振弦)子设备:childDevice.uplink.capabilities[1].formula.props.K',K )\n\t\t\t\t\t\t\t\t\tlocal G= childDevice.uplink.capabilities[1].formula.props.G\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000 [%s] G1111111111111(振弦)子设备:childDevice.uplink.capabilities[1].formula.props.G',G )\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000 [%s] 232323Resistance',Resistance )\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000 [%s] 444444temperature',temperature )\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000 [%s] 55555r0',r0 )\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000 [%s] 66666t0',t0 )\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000 [%s]Frequency2333565677Frequency',Frequency )\n\t\t\t\t\t\t\t\t\tResistance=Frequency^2/1000\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000 [%s]Resistance22222222Resistance',Resistance )\n\t\t\t\t\t\t\t\t\tphy = G * (Resistance-r0) + (temperature-t0) * K\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000 [%s]phy22222222phy',phy)\n\t\t\t\t\t\t\t\t\tphy=tonumber(string.format('%0.3f',phy))\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000 [%s]phy222222223436456phy',phy )\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tend\n else\n log.debug('scg_Vibrating_14000 [%s] (振弦)子设备:m=%s,c=%s deviceId为nil', dataid, moduleNo, channelNo)\n end\n local data1 = {\n data = {\n frequency = Frequency,\n resistance = Resistance,\n voltage = voltage,\n temperature = temperature,\n\t\t\t\t\t\t\t\tphysicalvalue=phy\n },\n device = deviceId,\n type = 1,\n time = datetime\n }\n table.insert(out.data, data1)\n else --电压 错误码 心跳 扩展\n local subData = string.sub(dataArea, 1, 2)\n dataArea = string.sub(dataArea, 3, -1)\n if i == 5 then --电压数据\n voltage = (tonumber(subData, 16) + 175) / 100\n elseif i == 6 then --错误码\n debug_code = 1003\n debug_msg = subData .. '_' .. debugErrorMsg[tonumber(subData, 16)]\n out.result = {code = debug_code, msg = debug_msg}\n end\n end\n end\n end\n\n --返回数据\n sendAck(dataid, messageId_hex, dataCounts_hex)\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n log.debug('scg_Vibrating_14000 [%s] resultData=%s', dataid, resultData)\n\n ctx:notify(resultData)\n end\nend\n\nasend_HttpResponse = function(ackID, bodyString)\n ack = {type = 'http', code = 200, body = bodyString}\n log.debug('scg_Vibrating_14000 [%s] 应答=%s', ackID, json.encode(ack))\n ctx:asend(ack)\nend\nsendAck = function(dataId, uplinkmessageid, uplinkDataCounter)\n log.debug('scg_Vibrating_14000 [%s] uplinkmessageid=%s,uplinkDataCounter=%s', dataId, uplinkmessageid, uplinkmessageid)\n\n --下发返回前 判断 当前设备 cycletime与之前的存储是否一致\n\n if uplinkmessageid ~= nil then\n if tonumber(isCycleTimeUpdated) == tonumber(device.props.cycletime) or sendCount_updateTime > 10 then\n local resp_hex = '800301' .. uplinkmessageid .. uplinkDataCounter\n asend_HttpResponse(dataId, resp_hex)\n else\n --首次收到数据下发采集周期 配置\n --d000000e1003010102\n local cycleTime = string.format('%08x', tonumber(device.props.cycletime))\n --log.debug('scg_Vibrating_14000 [%s] 下发 cycleTime=%s ,isCycleTimeUpdated=%s', dataId, cycleTime, isCycleTimeUpdated)\n local resp_hex = 'd0' .. cycleTime .. '0301' .. uplinkmessageid .. uplinkDataCounter\n log.debug('scg_Vibrating_14000 [%s] 下发 resp_hex=%s,cycleTime=%s ,isCycleTimeUpdated=%s,sendCount_updateTime=%s', dataId, resp_hex, cycleTime, isCycleTimeUpdated, sendCount_updateTime)\n asend_HttpResponse(dataId, resp_hex)\n sendCount_updateTime = sendCount_updateTime + 1\n end\n end\nend\n\ngetRedisValue = function(keyStr)\n log.debug('scg_Vibrating_14000 getRedisValue,keyStr=%s', keyStr)\n local keyValue\n local r1, r1ok = redis.get(device.id .. keyStr) --获取上次记录时间\n if r1ok ~= false then\n keyValue_redis = r1\n log.debug('scg_Vibrating_14000 r1=%s,r1ok=%s[%s],%s=%s', r1, r1ok, type(r1ok), keyStr, keyValue_redis)\n if keyValue_redis ~= nil then\n keyValue = tonumber(keyValue_redis)\n else\n log.debug('scg_Vibrating_14000 redis get dataCounts=nil')\n end\n else\n log.debug('scg_Vibrating_14000 r1=%s,r1ok=%s[%s],%s=%s', r1, r1ok, type(r1ok), keyStr, keyValue_redis)\n end\n return keyValue\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n for index, child in pairs(device.dnlinks[1].devices) do\n if child.uplink.props.module == tostring(moduleNoId) then\n if child.uplink.props.channel == tostring(channelNoId) then\n --log.debug('scg_Vibrating_14000 m=%s,c=%s 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('scg_Vibrating_14000 m=%s,c=%s subdevices=nil', moduleNoId, channelNoId)\n return nil\n end\nend\n\nIsValid = function(data, d_index)\n log.debug('scg_Vibrating_14000 开始校验数据=%s', data)\n local datalen = string.len(data) / 2\n if data == nil or datalen <= 9 then\n errormsg = string.format('Data is nil or invalid length=%s', datalen)\n errcode = 1002\n log.debug('scg_Vibrating_14000 [%s] errormsg=%s', d_index, errormsg)\n return false\n end\n data = string.sub(data, 17, -1)\n --去除id\n local msgId = string.sub(data, 1, 2)\n local msgtype = string.sub(data, 5, 6)\n if msgId == '80' and msgtype == 'ff' then --debug信息\n debugMsg = HextoStr(string.sub(data, 7, -1))\n errormsg = string.format('debugmsg=%s', debugMsg)\n errcode = 1003\n log.debug('scg_Vibrating_14000 [%s] debugmsg=%s', d_index, errormsg)\n return false\n elseif msgId == '80' and msgtype == '01' then --设备ack应答\n log.debug('scg_Vibrating_14000 [%s] 设备应答设置成功=%s', d_index, errormsg)\n redis.set(device.id .. 'iscycletimeupdated', tostring(device.props.cycletime)) --存储记录\n \t --如果平台刚更新配置周期,还未下发指令。设备就返回更新应答, 日志记录这种异常,厂家说可能出现,可能?\n if dataCounts == 0 or sendCount_updateTime ~=0 then\n log.debug('scg_Vibrating_14000 [%s] 异常 设备更新周期应答 dataCounts=%s,sendCount_updateTime=%s,ackdata=%s', d_index,dataCounts,sendCount_updateTime,data)\n end\n end\n return true\nend\n\ndataTypesLen = {5, 5, 5, 5, 1, 1, 1, 0}\n\ngetBits = function(byteStr)\n local bits = {}\n local byteNum = tonumber(byteStr, 16)\n local bitsTable = {}\n\n for i = 8, 1, -1 do\n local ex = 2 ^ (i - 1)\n if byteNum >= ex then\n --print(string.format('i=%s,byteNum=%s',i,byteNum))\n bitsTable[i] = 1\n byteNum = byteNum % ex\n else\n bitsTable[i] = 0\n end\n end\n return bitsTable\nend\n\nhexDateStrToDate = function(dateStr)\n -- 12 04 02 0F 24 38 ==> 18\n local year_ = 2000 + tonumber(string.sub(dateStr, 1, 2), 16)\n local month_ = tonumber(string.sub(dateStr, 3, 4), 16)\n local day_ = tonumber(string.sub(dateStr, 5, 6), 16)\n local hour_ = tonumber(string.sub(dateStr, 7, 8), 16)\n local minute_ = tonumber(string.sub(dateStr, 9, 10), 16)\n local second_ = tonumber(string.sub(dateStr, 11, 12), 16)\n\n timenum = os.time({year = year_, month = month_, day = day_, hour = hour_, min = minute_, sec = second_})\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --log.debug('scg_Vibrating_14000 timenum=%s,recordTime=%s, year_=%s,month_=%s,day_=%s,hour_=%s,minute_=%s,second_=%s',timenum,recordTime,year_,month_,day_,hour_,minute_,second_)\n return recordTime\nend\n\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\ndebugErrorMsg = {\n '电量过低,设备即将无法使用无线通讯,此时设备红灯闪烁',\n 'AIT不合法',\n 'SIT不合法',\n '传感器端口1打开,但检测不到传感器',\n '传感器端口2打开,但检测不到传感器',\n '传感器端口3打开,但检测不到传感器',\n '传感器端口4打开,但检测不到传感器',\n '传感器1参数不合法',\n '传感器2参数不合法',\n '传感器3参数不合法',\n '传感器4参数不合法',\n 'MESSAGEID不合法/MESSAGEID与数据长度不对应',\n '设备温度过高,超过85度',\n '设备温度过低,低于-45度',\n '开发错误,已保存至flash',\n '设备未知原因重启',\n '设备未知原因重新上电',\n '端口1/2/3/4传感器频率超出扫频范围,可能造成数据不准确',\n '传感器端口1/2/3/4打开,但监测不到任何传感器',\n '错误原因较多,导致错误栈满',\n '传感器端口1 超过4000HZ',\n '传感器端口2 超过4000HZ',\n '传感器端口3 超过4000HZ',\n '传感器端口4 超过4000HZ',\n 'AIT过小,自动设置为最小值60',\n 'AIT过大,大于最大值2147483647',\n 'ait不为零,但没有端口是打开的',\n '时间同步超时',\n '传感器端口均未接传感器'\n} INLINE 2019-09-19 09:30:52.136+08 2019-09-24 16:55:30.256+08 2019-09-19 \N
+a0c9fba8-70ea-4fc2-a16f-b308bbf77669 gx_pressure_6900 \N 原江威协议 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --D:\\SVN\\201812项目\\20181207待接入项目\\2、广东江威设备接入-孟凡侠\\R485通讯通讯协议.doc\nstart=function()\n local endian = 'B'\n local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("gx_pressure_6900 设备模块 m=%s ",moduleNo)\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("gx_pressure_6900,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '采集超时'} \n\t log.debug("gx_pressure_6900 m=%s, ok is false",moduleNo)\n\t ctx:done(json.encode(errout))\n\tend\nend\n--0103021388b512\n--"pressure": 5000\nunmarshall=function(hex,moduleNoStr)\n log.debug("gx_pressure_6900 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local pressure =iota.hexToShort(hex,3,'B')/10\n \n out.data = { \n pressure=tonumber(string.format('%0.3f',pressure))\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("gx_pressure_6900 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = string.format('返回数据长度无效=%s≠7',string.len(data)/2)\n errcode = 1002\n return false\n end\n \n local dataMoudle=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataMoudle) then\t\n errormsg = string.format('模块号无效=%s≠%s',dataMoudle,moduleCheck)\n errcode = 1003\n return false\n end\n return true\n--crc\nend\n INLINE 2019-01-19 15:13:24.71+08 2019-04-09 11:20:39.224+08 2019-01-19 \N
+9da84987-2b74-4e21-b24c-98592f025778 FS-LFXX-Z \N 裂缝计协议 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n协议号: 1.0;\n协议名: FS-LFXX-Z\n]]--liankang\nstart=function ()\n log.debug("FS-LFXX-Z start %s, ctx=%s", "Inclination_Sensor.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("FS-LFXX-Z encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("FS-LFXX-Z decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE); -- 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x04, BE); -- 功能码 04\n\tbuff=iota.appendHexByte(buff, 0x00, BE); \n buff=iota.appendHexByte(buff, 0x04, BE); -- 读取寄存器起始地址 00 04\n\tbuff=iota.appendHexByte(buff, 0x00, BE); \n\tbuff=iota.appendHexByte(buff, 0x02, BE); -- 读取寄存器数量 00 02\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- CRC16 小端字节序\t\n\treturn buff\nend\n\n-- decode \n-- returns: 结果, 裂缝距离\n-- 正确回复 01040480030242A315 裂缝距离 displacement : -3.0578\n-- 原始数据\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t-- 判断数据有效性\n\tif inValid(da) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telse\n\t\tlog.debug("数据有效")\n\n\t\tlocal plusOrMinus = bit:_and(iota.hexToByte(data, 3, 'B'), 0x80) -- 0为正号, 0x80为负号\n\t\tlog.debug("plusOrMinus = %x", plusOrMinus)\n\t\tlocal highInteger = bit:_and(iota.hexToByte(data, 3, 'B'), 0x7F) -- 整数高位\n\t\tlog.debug("highInteger= %x", highInteger)\n\n\t\t-- 替换整数高位\n\t\tlocal integerStr = ""\n\t\tintegerStr = iota.appendHexByte(integerStr, highInteger, 'B')\n\t\tlog.debug("intergerStr1 = %s", integerStr)\n\t\tintegerStr = integerStr..string.sub( data, 9, 10)\t-- 十六进制字符串\n\t\tlocal decimalStr = string.sub( data, 11, 14)\n\t\tlog.debug("intergerStr = %s", integerStr)\n\t\tlog.debug("decimalStr = %s", decimalStr)\n\t\t\n\t\tlocal integer = iota.hexToShort(integerStr, 0, 'B') \t-- 十进制数字\n\t\tlocal decimal = iota.hexToShort(decimalStr, 0, 'B')\n\n\t\tlocal displace \t\n\t\tif 0 == plusOrMinus then\n\t\t\tdisplace = integer + decimal / 10000\n\t\telse\t\n\t\t\tdisplace = -(integer + decimal / 10000)\n\t\tend\n\t\tout.data = {\n\t\t\tdisplacement = displace\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 9 or iota.hexToByte(data, 1,'B') ~= 0x04 then -- 长度不等于 9 或者 读第二个字节,功能码不等于04\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n\n--bit 操作\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\nend --bit:_and INLINE 2019-12-05 15:11:50.571+08 2019-12-06 11:04:36.637+08 2019-12-05 \N
+a7ab0713-69b3-41b8-ba9a-0ec08d57a2ba jclq_temp_ACA626T-3 \N 1.0 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 f a8df2f4a-3e2f-49f5-b1e2-b866493ade49 Lua bit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n\nstart=function()\n log.debug("start %s, ctx=", "jclq_temp_ACA626T-3.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0x68, endian)\n buff=iota.appendHexByte(buff, 4, endian) \n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jclq_temp_ACA626T-3 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jclq_temp_ACA626T-3 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) -- 1: 模块号 \n buff=iota.appendHexByte(buff, 4, endian) -- 2: 指令: 0x04 = 采集\n buff=iota.appendHexByte(buff,CS(1,buff),endian)\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,20000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo) \n end\n ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n\n --680D0084002010000000050500CB moduleId=0\n --"angleX": 2.01,\n\t--"angleY": 0,\n\t--"temp": 50.5\n\n log.debug("recv %s, ctx=%s", "jclq_temp_ACA626T-3.lua",hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==28) then \n\n local IDX_XDATA = 4 \n local IDX_YDATA = 7 \n local IDX_Temp = 10 \n\n local xFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA,'B') , 0xF0) , 4)\n local xSecondNum = bit:_and(iota.hexToByte(hex,IDX_XDATA,'B') , 0x0f) * 10\n local xThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_XDATA + 1,'B') , 0x0F) * 0.1\n local xForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_XDATA + 2,'B') , 0x0F) * 0.001\n\n local yFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA,'B') , 0xF0) , 4)\n local ySecondNum = bit:_and(iota.hexToByte(hex,IDX_YDATA,'B') , 0x0f) * 10\n local yThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_YDATA + 1,'B') , 0x0F) * 0.1\n local yForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_YDATA + 2,'B') , 0x0F) * 0.001\n\n local tFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp,'B') , 0xF0) , 4)\n local tSecondNum = bit:_and(iota.hexToByte(hex,IDX_Temp,'B') , 0x0f) * 10\n local tThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_Temp + 1,'B') , 0x0F) * 0.1\n local tForthNum =bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_Temp + 2,'B') , 0x0F) * 0.001\n\n local angleX = xSecondNum + xThirdNum + xForthNum\n local angleY = ySecondNum + yThirdNum + yForthNum\n local temp = tSecondNum + tThirdNum + tForthNum\n\n if (xFirst == 0x01) then \n angleX = -angleX\n end\n\n if (yFirst == 0x01) then\n angleY = -angleY\n end\n\n if (tFirst == 0x01) then\n temp = -temp\n end\n \n \n out.data = {\n anglex=angleX,\n angley=angleY,\n temperature=temp\n }\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("recv %s, ctx=%s", "jclq_temp_ACA626T-3.lua",json.encode(out))\n return json.encode(out)\nend\n\nCS=function(start,buff)\n local lcr = 0\n for i = start, string.len(buff)/2-1 do\n lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n end \n local value= bit:_and(lcr,0xff) \n return value\nend \n\n \n\n\n \n\n INLINE 2019-05-24 09:40:31.045+08 2019-05-24 18:07:19.505+08 2019-05-24 \N
+fb1db37d-4ca2-4e71-9b30-7ead94407adc jsywcg_Inclination \N 倾角传感器 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "ywcg_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("ywcg 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("ywcg 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\tbuff=buff.."0103"\n buff=iota.appendHexWord(buff, tonumber(moduleNo), 'endian') -- 2: 模块号\n buff=buff.."0004 " -- 1: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000) --下发的码流\n \n\tif ok then --下发是否成功\n result = unmarshall(resp)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n\t\t\n end \n -- ctx:asend("hello")\n ctx:done(result) --协议完成打ctx:done ()\nend\n\n--01030001000415C9\n--010308C0054FDF3FBE147B7478\n--"xDegree": -2.083000°\n--"yDegree":1.485000°\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={ },\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr) --判断是否符合厂家协议\n if ErrorCode then \n\n \n --print("parsing data", hex)\n local xangle= iota.hexToFloat(hex,3,'B');\n\t\tlog.debug("ywcg xangle= %d",xangle)\n\t\tlocal yangle= iota.hexToFloat(hex,7,'B');\n log.debug("ywcg yangle= %d",yangle)\n out.data = {\n xangle=xangle,\n\t\t\tyangle=yangle,\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('ywcg开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,0,'B') ~= 0x01 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n \n log.debug('ywcg 数据校验通过')\n return true\n\nend\n\n INLINE 2019-04-11 16:16:05.197+08 2019-04-19 09:38:38.455+08 2019-04-11 \N
+3bd4c565-aa1b-4597-ad7c-dddf5c35b3fb rpkj_level_1 \N 上海融频电子科技有限公司 1.0 c526123b-28bf-4a01-9c10-c630b8d0dec4 c526123b-28bf-4a01-9c10-c630b8d0dec4 f c526123b-28bf-4a01-9c10-c630b8d0dec4 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "rpkj_level_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("rpkj_level_1 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("rpkj_level_1 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 1, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n -- 01040000000271cb\n log.debug("rpkj_level_1,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t log.debug("rpkj_level_1 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("rpkj_level_1 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n --01040442C800006E02 \n --"level": 100\n local level =iota.hexToFloat(hex,3,'B');\n \n out.data = { \n level=level \n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("rpkj_level_1 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2018-01-19 11:30:57.223+08 2019-09-20 14:33:57.823+08 2018-01-19 \N
+ee33724a-0cca-49c0-b8b0-e0b979eb6527 Led_Push_Server \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug("Led_Push_server:device=%s",json.encode(device))\n\tlocal data = capability.param\n\tlocal _endatas = Split(data,",")\n\tlog.debug("_endatas %s",_endatas)\n\tlocal ack = nil\n\tfor k,v in pairs(_endatas) do\n\t\tlocal values = Split(v,"=")\n\t\tif values[1] == "number" then\n\t\t\tChangeSCreen(values[2])\n \t\tctx:sleep(3)\n\t\telseif values[1] == "data" then\n \t\tlog.debug("values %s",values[1])\n\t\t\tctx:sleep(3)\n\t\t\tCharterprotocol(values[2])\n \t\tctx:sleep(3)\n\t\tend\n\n\tend\n\t\n\n--数据推送\n result = {\n result = nil,\n type = 1,\n data = {\n ack = json.encode(ack)\n }\n }\n\tlog.debug("Led_Push_server:ack=%s", json.encode(ack))\n\n ctx:done(json.encode(result))\nend\n\n\n\n\nfunction ChangeSCreen(data)\n\t--log.debug("Led_Push_server ChangeSCreen")\n\n\n\tlocal moduleid = device.uplink.props.module\n \t--log.debug("Led_Push_server function ChangeSCreen() num %s",num)\n\tlocal str = ""\n\tstr ="EQ"..string.format("%03d",tonumber(moduleid))\n\tlocal buff = StrtoHex(str).."0103"\n\tbuff =iota.appendHexByte(buff,tonumber(data)).."0040"\n\t--log.debug("Led_Push_server function ChangeSCreen() buff%s",buff)\n\n\tctx:asend(buff)\n\nend\n\nfunction Charterprotocol(data)\n\tlog.debug("Led_Push_server Charterprotocol")\n\n \tlocal num =tostring (data)\n\n \t--log.debug("Led_server GetData:%s",_endatas)\n\tlocal moduleid = device.uplink.props.module\n\tlocal str = ""\n\tstr ="!#"..string.format("%03d",tonumber(moduleid))\n\t\n\tlocal buff = StrtoHex(str)..data..StrtoHex("$$")\n\t--log.debug("Led_Push_server Charterprotocol buff%s",buff)\n\tctx:asend(buff)\n\nend\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n\t--判断输入类型\n\tif (type(hex)~="string") then\n\t\treturn nil,"hex2str invalid input type"\n\tend\n\t--拼接字符串\n\tlocal index=1\n\tlocal ret=""\n\tfor index=1,hex:len() do\n \tlocal str = string.format("%02X",hex:sub(index):byte())\n \tret=ret..str\n\tend\n\treturn ret\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend INLINE 2019-01-19 14:54:14.428+08 2019-05-17 14:57:40.866+08 2019-01-19 \N
+e99ff603-3675-43ae-a516-403cf3d1a1b1 fshs_pressure_19001 \N 1.0 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d f 01fdd48b-2211-42be-9e66-b2a76c84567d Lua --D:\\SVN\\201812项目\\20181207待接入项目\\4、佛山顺德昊胜 沉降监测项目--康飞\\PTH-SZY100硅式静力水准仪通信协议.doc\nstart=function()\n log.debug("start %s, ctx=%s", "fshs_pressure_19001.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x16, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x12, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("fshs_pressure_19001,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '超时'} \n\t ctx:done(json.encode(errout))\n\tend\nend\n\n--0103001600122403\n--0103244174F2DD000000000000000042C800000000000042C800000000000047C350003F8DF6FE471F\n--"pressure": 15.309293,\n--"temperature": 1.1091\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("fshs_pressure_19001 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local pressure =iota.hexToFloat(hex,3,'B')\n\t\tlocal temperature =iota.hexToFloat(hex,35,'B')\n \n out.data = { \n pressure=tonumber(string.format("%0.2f",pressure)),\n\t\t\ttemperature\t=tonumber(string.format("%0.2f",temperature))\t\t\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("fshs_pressure_19001 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n\tlocal checkLen=string.len(data)/2\n if data == nil or checkLen~= 41 then\n errormsg = string.format('无效的数据长度=%s≠41',checkLen)\n errcode = 1002\n return false\n end\n local dataModule=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataModule) then\t\n errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n errcode = 1003\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2019-01-28 09:58:41.636+08 2019-01-28 10:07:14.633+08 2019-01-28 \N
+f80e7234-e166-424d-8115-f898bb1cabfd TestTCP \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --require "functions" -- 公共函数\n\nstart = function()\n --local checkstr="0105610000010000000000000000000000000000000000000000000000"\n --local aa=iota.appendHexCrc8(checkstr,0)\n log.debug('test_TCP device=%s', json.encode(device))\n ok = ctx:asend('010203')\nend\n\nonData = function(hex)\n --主动上传式\n --log.debug("test_TCP:Received=>%s",hex)\n devicePort = device.uplink.props.port\n log.debug('test_TCP port=%s Received=>%s', devicePort, hex)\n local out = {\n type = 1,\n data = {},\n result = {}\n }\n\n out.data = {\n hexData = HextoStr(hex)\n }\n\n local resultData = json.encode(out)\n log.debug('test_TCP devicePort=%s, resultData=%s', devicePort, resultData)\n ctx:notify(resultData)\nend\n\n--hex -> ASCII\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\nStrtoHex = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n INLINE 2019-06-19 13:57:35.131+08 2019-06-19 14:04:32.033+08 2019-06-19 \N
+e4ffc96e-8398-498d-a5f3-d1ad11efc13d fshs_pressure_19002 \N 1.0 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d f 01fdd48b-2211-42be-9e66-b2a76c84567d Lua --D:\\SVN\\201812项目\\20181207待接入项目\\4、佛山顺德昊胜 沉降监测项目--康飞\\PTH-SZY200磁式静力水准仪ModBus通讯协议(V2.0).doc\nstart=function()\n log.debug("start %s, ctx=%s", "fshs_pressure_19002.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("fshs_pressure_19002,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '超时'} \n\t ctx:done(json.encode(errout))\n\tend\nend\n--01030004000285ca\n--01030412e62e00031c\n--"pressure": 4838.12\nunmarshall=function(hex,moduleNoStr)\n log.debug("fshs_pressure_19002 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local pressure_int =iota.hexToUShort(hex,3,'B')\n local pressure_dot =iota.hexToUShort(hex,5,'B')\n \tlocal pressure=pressure_int+pressure_dot/65536\n out.data = { \n pressure=tonumber(string.format("%0.2f",pressure))\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("fshs_pressure_19002 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n\tlocal checkLen=string.len(data)/2\n if data == nil or checkLen~= 9 then\n errormsg = string.format('无效的数据长度=%s≠9',checkLen)\n errcode = 1002\n return false\n end\n local dataModule=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataModule) then\t\n errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n errcode = 1003\n return false\n end\n return true\n--crc\nend INLINE 2019-01-28 10:46:51.345+08 2019-02-18 15:51:13.318+08 2019-01-28 \N
+81808c6c-3007-4832-b2e0-bf51d0c3bf14 xbyq_httpMQTT \N 1.0 c8fac2b3-4360-47e4-91ab-2d6f3b3973e6 c8fac2b3-4360-47e4-91ab-2d6f3b3973e6 f c8fac2b3-4360-47e4-91ab-2d6f3b3973e6 Lua \nstart = function()\n log.debug('xbyq_httpMQTT device=%s', json.encode(device))\n\tlog.debug('xbyq_httpMQTT device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n\n log.debug('xbyq_httpMQTT', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n \n log.debug('xbyq_httpMQTT [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n\n\tlocal timeStamps=bodypkg['time']\n\tlog.debug('xbyq_httpMQTT [%s] 时间戳', tonumber(timeStamps))\n local allData=bodypkg['data']\n\tlog.debug('xbyq_httpMQTT 得到所有数据%s ', json.encode(allData))\n\n\tfor k,v in pairs(allData) do\n\t local serial_number=v.serial_number\n\t local source_data=v.source_data\n\t\tlocal childDevice = getDeviceInfos(moduleNo,serial_number)\n\t\t\t\tlog.debug('xbyq_httpMQTT 查询到子设备%s ', json.encode(childDevice))\t\t\n\t\t\t\tif\tchildDevice~=nil then\n\t\t\t\t\tlocal data1 = {\n data = {\n physicalvalue = source_data\n\t\t\t\t\t\t\t\n },\n device = childDevice.id,\n time=os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(timeStamps))),\n type = 1\n }\n\t\t\t\t\ttable.insert(out.data, data1)\n\t\t\t\telse\n\t\t\t\t\tlog.debug('xbyq_httpMQTT 子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\t\t\tend\n\tend \n log.debug('xbyq_httpMQTT [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\ngetDeviceInfos=function(moduleNo,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n log.debug("xbyq_httpMQTT 查询m=%s c=%s 子设备deviceId",tostring(moduleNo),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("xbyq_httpMQTT:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNo),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("xbyq_httpMQTT 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t log.debug("xbyq_httpMQTT 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n if tostring(channelStrCheck) == tostring(channelNoId) then\n log.debug('xbyq_httpMQTT: m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n \t\n\t\tend\n else\n log.debug("xbyq_httpMQTT: subdevices是nil")\n return nil\n end\nend\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend INLINE 2019-10-28 17:19:37.02+08 2019-11-05 08:51:53.764+08 2019-10-28 \N
+e32ab979-e242-4b6c-9637-17964d3f6dd9 gmkj__7501 \N 主动上报版本 1.0 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 f 7d1ecbc8-319d-43ec-9a0b-67d1f713fb36 Lua --20180917项目资料提交\\2 桥梁监测--东南大学--梁少龙\\10730008 GM8050 MODBUS-RTU通讯协议(V2.0).doc\nstart=function()\n -- log.debug("load script %s, moduleId=%s", "gmkj__7501.lua", device.props.moduleId or "[nil]")\n log.debug("gmkj__7501:".."LUA: ctx is =%s", json.encode(device))\n ok=ctx:asend("0102")\n -- log.debug("gmkj__7501:".."测试下发01020304正常")\nend\n\n \n \n \nonData=function(hex)\n\t\tlocal result="{}"\n\t\tmoduleNo=device.uplink.props.module --模块 \n resultData = unmarshall(hex,moduleNo)\n\t\tctx:notify(resultData)\nend\n \n \n --0114040044C1147444C169C144C1B7AE44C2101444C2763444C3065E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044C2ADE0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044C1BAC70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097A6\n \nunmarshall=function(hex,moduleNoStr)\n log.debug("gmkj__7501 收到数据=%s", hex)\n\t\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal data=hex\n\n\tlocal ErrorCode = IsValid(hex,moduleNoStr)\n\tif ErrorCode then\n\t\tlog.debug('gmkj__7501 数据有效')\n\t\t\n\t\tlocal alldata={}\n\n\t\t--分析单类数据\n for i=1,32*8,1 do\n\t\t\tlocal wavelength =iota.hexToFloat(hex,i*4,'B')\n\t\t\talldata[i]=tonumber(string.format("%0.4f",wavelength))\n\t\tend\n\t\tlog.debug("gmkj__7501 通道1数据1=%s,通道8数据32=%s",alldata[1],alldata[256])\n\t\t--遍历设备 匹配数据\n\t\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\t\t\t\n\t\tif subdevices ~=nil then\n\t\t\tlocal moduleNo_sub=tonumber(device.uplink.props.module) \t--模块 \n\t\t\tfor index_channel,channelDevice in pairs(subdevices) do \t\t\t\t\n\t\t\t\tlocal channelNo_sub=tonumber(channelDevice.uplink.props.channel)\t--通道 \n\t\t\t\tfor index_node,nodeDevice in pairs(channelDevice.dnlinks[1].devices) do \n\t\t\t\t\tlocal nodeNo_sub=tonumber(nodeDevice.uplink.props.node)\t--通道 \n\t\t\t\t\t--log.debug("gmkj__7501 子设备模块通道 接口获取 m=%s,c=%s,n=%s ",moduleNo_sub,channelNo_sub,nodeNo_sub)\n\t\t\t\t\tlocal keyIndex=(channelNo_sub-1)*32+nodeNo_sub\n \t\t\tlocal WaveLength=alldata[keyIndex] \n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t data={\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t wavelength=string.format('%0.3f',WaveLength) \n\t\t\t\t\t\t\t\t\t\t },\n\t\t\t\t\t\t\t\t\tdevice=nodeDevice.id,\n\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\t\n\t\t\n\telse\n out.result = {code = errorcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("gmkj__7501 m=%s resultData=%s ",moduleNoStr,resultData)\n return resultData\nend\n\n\nIsValid=function(data,moduleStr)\n local checkLen=string.len(data)/2\n if data == nil or checkLen ~= 1030 then\n\n errormsg =string.format('无效的数据长度=%s≠1030',checkLen)\n errcode = 1001\n log.debug("gmkj__7501 数据校验失败 %s ",errormsg)\n return false\n end\n \n local checkModule=iota.hexToByte(data,0,'B')\n if tostring(moduleStr) ~= tostring(checkModule) then\t\n errormsg = string.format('无效的模块号=%s≠%s',checkModule,moduleStr)\n errcode = 1004\n log.debug("gmkj__7501 数据校验失败 %s ",errormsg)\n return false\n end\n return true\n--crc\nend\n\n\n INLINE 2018-10-11 09:52:15.812+08 2019-01-23 16:31:30.714+08 2018-10-11 \N
+e7b120d0-2c54-4acf-b8c2-af18f962c558 shjy_Level_1935 \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "shjy_Level_1935.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("shjy_Level_1935,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '采集超时'} \n\t log.debug("shjy_Level_1935 m=%s, ok is false",moduleNo)\n\t ctx:done(json.encode(errout))\n\tend\nend\n--01040000000271CB\n--01040401ca1f7d1257\n--458.123\nunmarshall=function(hex,moduleNoStr)\n log.debug("shjy_Level_1935 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local levelinter =iota.hexToUShort(hex,3,'B')\n\t\tlocal leveldeci =iota.hexToUShort(hex,5,'B')/65535\n\t\tlocal level=levelinter+leveldeci \n out.data = { \n level=tonumber(string.format("%0.3f",level))\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("shjy_Level_1935 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2018-09-26 14:24:15.822+08 2019-01-29 16:46:31.646+08 2018-09-27 \N
+dca382da-547a-400b-8fbb-3a1bbd32b33b bsd_pressure_19010 \N 1.0 41258e4c-3278-4ea9-bbd8-9d0a83c4ad92 41258e4c-3278-4ea9-bbd8-9d0a83c4ad92 f 41258e4c-3278-4ea9-bbd8-9d0a83c4ad92 Lua --D:\\SVN\\201812项目\\20181221新增项目资料\\4 宝鸡百事得设备接入--于金哲\\dpi703rs485通信协议.doc\nstart=function()\n log.debug("start %s, ctx=%s", "baissde_pressure_19010.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module \n\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x16, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x12, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("baissde_pressure_19010,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '超时'} \n\t ctx:done(json.encode(errout))\n\tend\nend\n\n--0103001600122403\n--0103244174F2DD000000000000000042C800000000000042C800000000000047C350003F8DF6FE471F\n--"pressure": 15.309293,\n--"temperature": 1.1091\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("baissde_pressure_19010 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local pressure =iota.hexToFloat(hex,3,'B')\n\t\tlocal temperature =iota.hexToFloat(hex,35,'B')\n \n out.data = { \n pressure=tonumber(string.format("%0.3f",pressure)),\n\t\t\ttemperature\t=tonumber(string.format("%0.2f",temperature))\t\t\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("baissde_pressure_19010 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n\tlocal checkLen=string.len(data)/2\n if data == nil or checkLen~= 41 then\n errormsg = string.format('无效的数据长度=%s≠41',checkLen)\n errcode = 1002\n return false\n end\n local dataModule=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataModule) then\t\n errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n errcode = 1003\n return false\n end\n return true\n--crc\nend INLINE 2019-01-30 10:36:45.596+08 2019-01-30 11:06:09.095+08 2019-01-30 \N
+bf0f9241-ed4f-4e99-83c6-8160c16313ea nawei_liquid_1930 \N 纳微时代通讯协议 1.0 a8f32e64-9094-49d3-9da0-9a5abd4dd33d a8f32e64-9094-49d3-9da0-9a5abd4dd33d f a8f32e64-9094-49d3-9da0-9a5abd4dd33d Lua bit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\nstart=function()\n log.debug("nawei_liquid_1930 device=%s",json.encode(device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0x6e, endian) \n buff=iota.appendHexByte(buff, 0x75, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x07, endian) \n buff=iota.appendHexByte(buff, 0x20, endian)\n buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 3: 模块号\n local check=CS16(4,buff)\n buff=iota.appendHexWord(buff, check, endian) -- 5: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n log.debug('nawei_liquid_1930 ok=%s,resp=%s',ok,resp)\n ctx:done(result)\nend\n--6e75000bff200001000a0103000afe0000 --moduleId=1\n--"level": 28.14\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex)\n if ErrorCode then \n local le1=iota.hexToByte(hex,12,'B')\n local le2=iota.hexToByte(hex,13,'B')\n local le3=iota.hexToByte(hex,14,'B')\n local Level=(bit:_or(bit:_lshift(le1,16),bit:_or(bit:_lshift(le2,8),le3)))/100.0\n \n out.data = {\n length=Level\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nCS16=function(start,buff)\n local lcr = 0\n for i = start, string.len(buff)/2-1 do\n lcr = lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)\n end \n return lcr\nend \nIsValid=function(data)\n log.debug('nawei_liquid_1930 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 17 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,4,'B') ~= 0xff then\n errcode = 1001\n errormsg = 'nawei_liquid_1930 Hex CMD False ' \n return false\n end\n if tonumber(device.uplink.props.module) ~= iota.hexToShort(data,6,'B') then\t\n errormsg = 'nawei_liquid_1930 Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('nawei_liquid_1930 数据校验通过')\n return true\nend\n \n INLINE 2017-09-08 17:34:33.421+08 2019-02-12 10:55:23.626+08 2017-09-06 \N
+7c734114-6fa7-41a5-8f0c-ce0940aded18 fs_inclination_1503 \N 江西飞尚杆式测斜仪 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "fs_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n buff=iota.appendHexWord(buff, 22, endian) -- 2: 类型=22\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n buff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 1: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n--0016261381F35D42830C36094DFE363C80FFE1F8CFEF40\n--moduleId=9747\n--"temp": 23.81,\n--"xDegree": -30,\n--"yDegree": -1.967921\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\n local scale = 1000000.00;\n --print("parsing data", hex)\n local Temp = iota.hexToShort(hex,11,'B')/100.0;\n local xa = iota.hexToInt(hex,13,'B')/scale;\n local ya = iota.hexToInt(hex,17,'B')/scale;\n \n out.data = {\n temperature=Temp,\n \tanglex = xa,\n \tangley = ya\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('fs_1503开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1002\n return false\n end\n \n if iota.hexToByte(data,4,'B') ~= 0x81 then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo_check) ~= tostring(iota.hexToShort(data,2,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('fs_1503数据校验通过')\n return true\n--crc\nend\n\n INLINE 2017-09-04 09:31:46.287+08 2019-11-21 11:12:38.817+08 2017-09-02 \N
+dc5d5da7-4105-4b48-9969-e9da5c70a387 hnjs \N 加速度传感器 1.0 736d5c22-d6ac-4577-9782-0f95345ea1d5 736d5c22-d6ac-4577-9782-0f95345ea1d5 f 736d5c22-d6ac-4577-9782-0f95345ea1d5 Lua start=function()\n log.debug("hnjs.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n--加速度传感器\nonData=function(hex)\n log.debug("hnjs.lua: Data, ctx=%s",hex)\n local out={\n data ={},\n result = {}\n }\n --ff 41 58 4a 23 86 62 62 04 14 51 58 30 23 00 09 00 01 06 f0 01 16 01 65 01 54 50 82 eeee\n\t--ff41584a 23866262041451583023 0009 0001 06 f0 0116 0165 0154 5082 eeee\n\t--ff41584a238662620414515830230009000106f00116016501545082eeee\n\t\t\tlog.debug("hnjs 加速度=%s",hex)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\t\n local accelerationxx = iota.hexToShort(hex,20,'B')/100;\n log.debug("hnjs accelerationxx=%s",accelerationxx)\n\t\tlocal accelerationyy = iota.hexToShort(hex,22,'B')/100;\n\t\tlog.debug("hnjs accelerationyy=%s",accelerationyy)\n\t\tlocal accelerationzz =iota.hexToShort(hex,24,'B')/100;\n\t\tlog.debug("hnjs accelerationzz=%s",accelerationzz)\n \n out.data = { \n accelerationx=accelerationxx,\n\t\t\taccelerationy=accelerationyy,\n accelerationz=accelerationzz\n --anglez=zData,\n --temperature=temp\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("hnjs: cloudvibrate=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'hnjs:Data is nil'\n errcode = 1001\n return false\n end\n\tlocal sensorType= iota.hexToShort(data,14,'B')\n\tlog.debug("hnjs: -----sensorType=%s",sensorType)\n\tif (sensorType~=9) then\n errormsg = string.format('hnjs:sensorType is wrong=%s',sensorType)\n errcode = 1001\n return false\n end\n\tlocal subdata=string.sub(data,1,-9)\n local crc=iota.appendHexCrc(subdata, 'B' ,0)\n log.debug("hnjs.lua: crc, ctx=%s",crc)\n local subdatacrc=string.sub(data,1,-5)\n log.debug("hnjs.lua: subdatacrc, ctx=%s",subdatacrc)\n if (string.lower(crc)~=string.lower(subdatacrc)) then\n errormsg = string.format('anfang_inclinometer_1:crc[%s]≠[%s]',subdatacrc,crc)\n errcode = 1001\n return false\n end\n\t\n \n return true\n \nend\n \n INLINE 2019-07-23 09:33:19.172+08 2019-07-23 10:37:23.894+08 2019-07-23 \N
+d7580de5-0d54-4658-b81f-48ed26745fb4 fs_fire_1500 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//D:\\SVN\\201909项目\\智慧小区\\产品说明\\智能火灾报警-艾礼安(24h周期主动上报、事件上报)\\烟雾报警器艾礼安NB协议.docx\n\nstart = function()\n log.debug('fs_fire_1500 device=%s', json.encode(device))\nend\n\nlocal sendCount_updateTime = 0\n\n--c71803111026221303302208200010000000000000000000\nonData = function(httpbody)\n local dataid = device.uplink.props.id\n log.debug('fs_fire_1500 [%s] httpbody===>%s', dataid, json.encode(httpbody))\n --主动上传式\n --local hex = httpbody.Body\n local bodyStr = httpbody.Body\n if bodyStr ~= nil and bodyStr ~= '' then\n local obj = json.decode(bodyStr)\n local hex = obj.pkg\n\n local out = {\n data = {},\n result = {}\n }\n local ErrorCode = IsValid(hex, dataid)\n if ErrorCode then\n local messageId_hex\n local messageType = 'cycle'\n if string.len(hex) / 2 == 24 then --事件信息记录 包序号\n messageId_hex = string.sub(hex, -2, -1)\n messageType = 'event'\n end\n local moduleNo = tonumber(string.sub(hex, 15, 24))\n local cidCode = tonumber(string.sub(hex, 7, 10))\n local cidMessage = getCIDmessage(cidCode)\n local voltage = tonumber(string.sub(hex, 11, 12), 16) / 10\n local signals = tonumber(string.sub(hex, 13, 14))\n log.debug('fs_fire_1500 [%s] moduleNo=%s,cidCode=%s,voltage=%s,signals=%s', dataid, moduleNo, cidCode, voltage, signals)\n out.data = {\n cidCode = cidCode,\n cidMessage = cidMessage,\n voltage = voltage,\n signals = signals\n }\n\n sendAck(dataid, messageId_hex, messageType)\n if(messageType=='event') then\n out.result = {code = cidCode+70020000, msg = cidMessage}\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n log.debug('fs_fire_1500 [%s] resultData=%s', dataid, resultData)\n\n ctx:notify(resultData)\n else\n log.debug('fs_fire_1500 [%s] 数据解析为空 httpbody=%s', dataid, json.encode(httpbody))\n end\nend\n\nasend_HttpResponse = function(ackID, bodyString)\n ack = {type = 'http', code = 200, body = bodyString}\n log.debug('fs_fire_1500 [%s] 应答=%s', ackID, json.encode(ack))\n ctx:asend(ack)\nend\nsendAck = function(dataId, packageIndex, ackType)\n log.debug('fs_fire_1500 [%s] packageIndex=%s,ackType=%s', dataId, packageIndex, ackType)\n\n local resp_hex = ''\n if ackType == 'cycle' then --周期\n local timeHexStr = os.date('%H%M%S', os.time())\n log.debug('fs_fire_1500 [%s] 周期timeHexStr=%s', dataId, timeHexStr)\n resp_hex = '40c701' .. timeHexStr .. '23'\n asend_HttpResponse(dataId, resp_hex)\n elseif ackType == 'event' then --事件\n resp_hex = '40c703' .. packageIndex .. '23'\n asend_HttpResponse(dataId, resp_hex)\n end\nend\n\ngetCIDmessage = function(cid)\n local cidTable = {}\n cidTable[1100] = '24小时紧急'\n cidTable[1101] = '个人救护'\n cidTable[1110] = '火警报警'\n cidTable[1111] = '燃气报警'\n cidTable[1112] = '水浸报警'\n cidTable[1130] = '瞬时报警'\n cidTable[1384] = '无线探测器低压'\n cidTable[1140] = '温感报警'\n cidTable[1400] = '周期检测'\n cidTable[1485] = '巡更'\n cidTable[1609] = 'IP设置'\n cidTable[1702] = '无线探测器防拆'\n return cidTable[cid]\nend\n\nIsValid = function(data, d_index)\n log.debug('fs_fire_1500 开始校验数据=%s', data)\n local datalen = string.len(data) / 2\n if data == nil or (datalen ~= 12 and datalen ~= 24) then\n errormsg = string.format('Data is nil or invalid length=%s', datalen)\n errcode = 1002\n log.debug('fs_fire_1500 [%s] errormsg=%s', d_index, errormsg)\n return false\n end\n\n local hexHeader = string.sub(data, 1, 2)\n if hexHeader ~= 'c7' then\n errormsg = string.format('数据包头=%s≠c7', hexHeader)\n errcode = 1003\n log.debug('fs_fire_1500 [%s] debugmsg=%s', d_index, errormsg)\n return false\n end\n return true\nend INLINE 2019-10-14 16:01:29.423+08 2020-12-18 11:02:08.056+08 2019-10-14 \N
+95265997-3ebd-4e01-98d9-9d5a2caa3a7f JM_1549 \N 解析数据 1.0 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c f 5b2dc320-50f8-4461-87fc-03b66e3e5e4c Lua --//D:\\SVN\\201812项目\\20181207待接入项目\\1、北京为韵科技--康飞\\长沙金码动态电阻应变仪指令及换算.pdf\n--2438383838383838383838383838383830\n--000008b2bab0da80aaa5baaee2a9628098b525b2f5a8258075acaaac2aafa7ad\nstart = function()\nend\n\nlocal G_ascii\nlocal channelsTable\nonData = function(hex)\n --\n out = {\n data = {},\n result = {},\n type = 2\n }\n local moduleNo = device.uplink.props.module\n --log.debug('jm_1549 [%s]接收数据Received=>%s',moduleNo,hex)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n --默认16通道\n\n local dataType = string.sub(hex, 1, 2)\n\n if dataType == '24' then\n local reaponse_Str = HextoStr(hex)\n G_ascii = string.sub(reaponse_Str, 2, 17)\n redis.set(device.id .. 'G_ascii', G_ascii)\n channelsTable = GetValidChannelsNo(G_ascii)\n else\n --判断配置表是否为空,若空 读取redis\n if channelsTable == nil then\n local r1, r1ok = redis.get(device.id .. 'G_ascii') --获取上次记录时间\n --log.debug('jm_1549 r1=%s[%s],r1ok=%s[%s]', r1, type(r1), r1ok, type(r1ok))\n local G_ascii\n if r1ok ~= false then\n G_ascii = r1\n --log.debug('jm_1549 r1=%s,r1ok=%s[%s],G_ascii=%s', r1, r1ok, type(r1ok), G_ascii)\n if G_ascii ~= nil then\n channelsTable = GetValidChannelsNo(G_ascii)\n end\n else\n if G_ascii ~= nil then\n --log.debug('jm_1549 存入redis')\n redis.set(device.id .. 'G_ascii', G_ascii)\n else\n --log.debug('jm_1549 [%s]无法获取首次设备存储信息',moduleNo)\n end\n end\n else\n local dataStr = string.sub(hex, 5, -1)\n local index = 1\n for k, v in pairs(channelsTable) do --pairs 遍历所有 与ipairs 遍历连续下标\n local subDataHex = string.sub(dataStr, index, index + 3)\n index = index + 4\n local subData_Ln = string.sub(subDataHex, 1, 2)\n local subData_Hn = string.sub(subDataHex, 3, 4)\n local subData = tonumber(subData_Hn, 16) * 256 + tonumber(subData_Ln, 16)\n local subUm = subData / 65536 * 5 - 2.5\n --log.debug('jm_1549 subData=%s,subUm=%s', subData, subUm)\n local channelNo = k\n --获取通道设备deviceId\n local childDevice = getDeviceInfo(channelNo)\n\n if childDevice ~= nil then\n local deviceId = childDevice.id\n local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n if formulaId == '75a20e66-91ae-4d62-8f69-faef769091b1' then\n local k = childDevice.uplink.capabilities[1].formula.props.K\n local w = childDevice.uplink.capabilities[1].formula.props.W\n if k ~= nil and w ~= nil then\n local subPhy = 1000 * k * subUm / w\n local data1 = {\n data = {\n physicalvalue = tonumber(string.format('%0.3f', subPhy))\n },\n device = deviceId,\n type = 1\n }\n\n table.insert(out.data, data1)\n end\n elseif formulaId == '96e821da-a5f5-448b-9a60-b4e83202b252' then\n local k = childDevice.uplink.capabilities[1].formula.props.K\n local po = childDevice.uplink.capabilities[1].formula.props.Po\n if k ~= nil and po ~= nil then\n local subPhy = 1000 * k * subUm + po\n local data1 = {\n data = {\n physicalvalue = tonumber(string.format('%0.3f', subPhy))\n },\n device = deviceId,\n type = 1\n }\n\n table.insert(out.data, data1)\n end\n -- statements\n end\n end\n end\n end\n end\n else\n log.debug('jm_1549 [%s]数据校验失败=%s',moduleNo,hex)\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n ctx:notify(resultData)\nend\n\n-- 获取有效通道\nGetValidChannelsNo = function(str_G)\n local channelsTable = {}\n for i = 1, 16, 1 do\n local subChannel = string.sub(str_G, i, i)\n if subChannel == '8' then\n channelsTable[i] = 1\n end\n end\n return channelsTable\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug('jm_1549 channelId=' .. tostring(channelNoId))\n --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n for index, child in pairs(device.dnlinks[1].devices) do\n --if child.props.moduleId==tostring(moduleNoId) then\n if child.uplink.props.channel == tostring(channelNoId) then\n --log.debug('jm_1549 DeviceInfo=' .. tostring(child.deviceId))\n --log.debug('jm_1549 子设备child=%s', json.encode(child))\n return child\n end\n --end\n end\n else\n --log.debug('jm_1549 subdevices=nil')\n return nil\n end\nend\n\nIsValid = function(data)\n --log.debug('jm_1549:开始校验数据')\n if data == nil or string.len(data) / 2 < 16 then\n errcode = 1002\n errormsg = string.format('无效的数据长度=%s%s', string.len(data) / 2)\n return false\n end\n\n if string.sub(data, 1, 2) ~= '24' and string.sub(data, 1, 2) ~= '00' then -- and iota.hexToByte(data,0,'B') ~= 0x54\n errcode = 1003\n errormsg = string.format('数据帧头错误,不等于0x24')\n return false\n end\n\n -- if iota.hexToByte(data,dataLength-1,'B') ~= 0x21 then\n -- errcode = 1003\n -- errormsg = 'Hex CMD False '\n -- return false\n -- end\n --log.debug('jm_1549:校验通过')\n return true\nend\n-- 字符串 -> Hex\nStrToHex = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n\n-- Hex-> 字符串\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n INLINE 2019-01-07 20:09:57.596+08 2019-05-17 10:04:25.563+08 2019-01-07 \N
+5562830f-ef0d-4298-bb0e-609f632683e2 dianbiao_ \N 环保监测-电表 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//readingNumber\nstart=function()\n \tlocal endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) -- 1: 功能码\n buff=iota.appendHexWord(buff, 0x14 ,endian) -- 2: 数据地址\n buff=iota.appendHexWord(buff, 42 ,endian) --2:读取数据长度42\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n log.debug(string.format("fs_trwsd_1166 out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n ctx:done(result)\nend\n\n\n\n\n--6303540909092609180fbf0fcc0fb3000000000000000000000001000000000000000000000002000000000000000000000000ffffffff0000000a0000000a0000000b0000002003e803e803e803e80000138a000097a46231\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \t--A项电压\n \tlocal A_phase_volt= iota.hexToUShort(hex,3,'B')/10\n local B_phase_volt = iota.hexToUShort(hex,5,'B')/10\n local C_phase_volt = iota.hexToUShort(hex,7,'B')/10\n --AC线电压\n \t\tlocal AC_line_volt= iota.hexToUShort(hex,9,'B')/10\n local BC_line_volt = iota.hexToUShort(hex,11,'B')/10\n local CA_line_volt = iota.hexToUShort(hex,13,'B')/10\n \t--相电流\n \tlocal A_phase_current= iota.hexToUShort(hex,15,'B')/100\n local B_phase_current = iota.hexToUShort(hex,17,'B')/100\n local C_phase_current = iota.hexToUShort(hex,19,'B')/100\n local total_phase_current=iota.hexToUShort(hex,21,'B')/100\n \n --有功功率\n \tlocal A_active_power=iota.hexToUInt(hex,23,'B')/1000\n \t\tlocal B_active_power=iota.hexToUInt(hex,27,'B')/1000\n \tlocal C_active_power=iota.hexToUInt(hex,31,'B')/1000\n \tlocal total_active_power=iota.hexToUInt(hex,35,'B')/1000\n \n \t--无功功率\n \tlocal A_reactive_power=iota.hexToUInt(hex,39,'B')/1000\n \t\tlocal B_reactive_power=iota.hexToUInt(hex,43,'B')/1000\n \tlocal C_reactive_power=iota.hexToUInt(hex,47,'B')/1000\n \tlocal total_reactive_power=iota.hexToUInt(hex,51,'B')/1000\n \n --视在功率\n \tlocal A_apparent_power=iota.hexToUInt(hex,55,'B')/1000\n \t\tlocal B_apparent_power=iota.hexToUInt(hex,59,'B')/1000\n \tlocal C_apparent_power=iota.hexToUInt(hex,63,'B')/1000\n \tlocal total_apparent_power=iota.hexToUInt(hex,67,'B')/1000\n \n \t--功率因数\n \tlocal A_power_factor=iota.hexToUShort(hex,71,'B')/1000\n \t\tlocal B_power_factor=iota.hexToUShort(hex,73,'B')/1000\n \tlocal C_power_factor=iota.hexToUShort(hex,75,'B')/1000\n \tlocal total_power_factor=iota.hexToUShort(hex,77,'B')/1000\n \n \t--功率方向\n \tlocal power_director=iota.hexToUShort(hex,79,'B')\n \t\tlocal frequency=iota.hexToUShort(hex,81,'B')/100\n \tlocal total_energy=iota.hexToUInt(hex,83,'B')/100\n \n out.data = {\n A_phase_volt=A_phase_volt,\n B_phase_volt = B_phase_volt,\n C_phase_volt = C_phase_volt,\n --AC线电压\n \t\t AC_line_volt= AC_line_volt,\n BC_line_volt = BC_line_volt,\n CA_line_volt = CA_line_volt,\n \t--相电流\n \t A_phase_current= A_phase_current,\n B_phase_current =B_phase_current,\n C_phase_current = C_phase_current,\n total_phase_current=total_phase_current,\n \n --有功功率\n \t A_active_power=A_active_power,\n \t\t B_active_power=B_active_power,\n \t C_active_power=C_active_power,\n \t total_active_power=total_active_power,\n \n \t--无功功率\n \t-- A_reactive_power=A_reactive_power,\n \t\t-- B_reactive_power=B_reactive_power,\n \t-- C_reactive_power=C_reactive_power,\n \t-- total_reactive_power=total_reactive_power,\n \n --视在功率\n \t-- A_apparent_power=A_apparent_power,\n \t\t-- B_apparent_power=B_apparent_power,\n \t-- C_apparent_power=C_apparent_power,\n \t-- total_apparent_power=total_apparent_power,\n \n \t--功率因素\n \t A_power_factor=A_power_factor,\n \t\t B_power_factor=B_power_factor,\n \t C_power_factor=C_power_factor,\n \t total_power_factor=total_power_factor,\n \n \t--功率方向\n \t-- power_director=power_director,\n \t\t frequency=frequency,\n \t total_energy=total_energy\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('fs_trwsd_1166 开始校验数据 %s',data)\n if data == nil or string.len(data)/2~=89 then\n errormsg = string.format('Data is nil or invalid length=%s[%s]',string.len(data),89)\n errcode = 1002\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleNo_check) ~= tonumber(string.sub(data,1,2),16) then\t\n errormsg = string.format('模块号=%s≠%s',moduleNo_check,tonumber(string.sub(data,1,2),16) )\n errcode = 1004\n return false\n end\n log.debug('fs_trwsd_1166 数据校验通过')\n return true\n--crc\nend\n\nonData=function()\nend\n INLINE 2021-02-23 15:21:55.591+08 2021-02-24 15:49:28.289+08 2021-02-23 \N
+b0bb3d52-04e2-4852-9ad9-b5e8a7e4b543 shjy_LVDT_6100 \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug(" load script %s, moduleId=%s", " BJyh.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug(" BJyh 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\t\n\t\tlog.debug(" BJyh 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\tbuff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n\tlog.debug(" BJyh buff=%s",buff)\n buff=buff.."0300160002"\n\tlog.debug(" BJyh bufff=%s",buff)\n buff=iota.appendHexCrc(buff, "L",0) -- 2: CRC\n\tlog.debug(" BJyh buff2=%s",buff)\n ok,resp=ctx:ssend(buff,20000) --发送指令\n --local result="{}"\n if ok then\n\tlog.debug(" BJyh aaaaa")\n result = unmarshall(resp)\n -- print(string.format("out=%s,data=%s",resp, result))\n else\n log.debug(" BJyh cccc")\n end\n\tlog.debug(" BJyh result=%s",result)\n\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\tlog.debug(" BJyh vvvv")\n local ErrorCode = IsValid(hex)\n if ErrorCode then \n\t\tlog.debug("BJyh there")\n local length = iota.hexToFloat(hex,3,'B')\n\t\tlog.debug("BJyh temph=%s",length)\n\t\t\n\t\tlocal data=''\n\n out.data = {\n length=length\n };\n\t\tlog.debug("BJyh data=%s",data)\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\n\n\n\n\n\n\nIsValid=function(data)\n log.debug(' BJyh 开始校验数据')\n\n if iota.hexToByte(data,1,'B') ~= 0x03 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n log.debug(' BJyh 数据校验通过')\n return true\n--crc\nend INLINE 2018-06-21 09:33:36.576+08 2019-05-07 16:13:45.441+08 2018-06-21 \N
+d2f13e5e-dc6e-447c-b8f1-159f56c50f88 shjy_temp_ BK-JC01A \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_temp_ BK-JC01A", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp_ BK-JC01A 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x06, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexByte(buff, CS(buff), endian) -- 2: CRC16\n ok,resp=ctx:ssend(buff,4000)\n local result='{}'\n if ok then\n resultStr = unmarshall(resp,moduleNo)\n else\n log.debug("shjy_temp_ BK-JC01A SSend error!")\n \t\tout.result = {code=1001,msg='采集超时'} \n \t\tresultStr=json.encode(out)\n end\n ctx:done(resultStr)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\nlog.debug('shjy_temp_ BK-JC01A 解析数据=%s',hex)\n local out={\n\t type = 1,\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n\t local responseStr = toStrHex(string.sub(hex, 7, 22))\n\t\tlocal length=tonumber(responseStr)\n\t\tlog.debug('shjy_temp_ BK-JC01A 解析数据=%s',hex)\n out.data = {\n\t\t\tlength=length\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('shjy_temp_ BK-JC01A 开始校验数据=%s',data)\n --[[if data == nil or string.len(data)/2 ~= 12 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end]]--\n if iota.hexToByte(data,1,'B') ~= 0x06 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n return true\n--crc\nend\n\nCS=function(buff)\n local lcr = 0\n for i = 0, string.len(buff)/2-1 do\n lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n end\n log.debug('shjy_temp_ BK-JC01A:lcr累加结果%s', lcr)\t\n\tlocal value=bit.band(bit.bnot(lcr),0xff)+1 --按位取反再加1\n\tlog.debug('shjy_temp_ BK-JC01A:lcr累加结果1%s', value)\t\n return value\nend \n\n--HEX字符串->ascii字符串\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n\n\n\t\n \n INLINE 2019-06-28 11:09:02.07+08 2019-07-24 11:07:42.532+08 2019-06-28 \N
+12414de7-dac4-4966-aaa1-89db04cc97bf fs_temp_1102s \N 1.0 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f 67c8b9e9-38d6-4c9a-8772-9c96d78121ed Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n log.debug("start %s, ctx=", "fs_1102.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n \tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=tonumber(device.uplink.props.module) --模块 通道 优先接口获取\t\t\t\n\t\tlog.debug("fs_1102 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\t moduleNo=device.props.moduleId \n\t\t log.debug("fs_1102 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t--local moduleNo=device.props.moduleId or device.uplink.props.module \n\t--log.debug("fs_1102 moduleNo=%s 接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n buff=iota.appendHexWord(buff, 1, endian) -- 2: 类型=1\n buff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 1: 指令: 0x01 = 采集\n \tbuff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n\n ok,resp=ctx:ssend(buff,15000)\n\tlog.debug("fs_1102:发送数据=%s",buff)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n\t\tlog.debug("fs_1102 接收数据=%s,解析值=%s",resp,result)\n\t\tctx:done(result)\n end\n \nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)>=15) then\n -- 2 2 1 4 4 2\n -- 0001 26C6 81 0D6FFDA1 FFDACFBE F831\n --000107DE8112121213131313E1F9 \n -- moduleId= 结果0,0\n --print("parsing data", hex)\n local hum = iota.hexToFloat(hex,9,'B',2);\n local tem = iota.hexToFloat(hex,5,'B',2);\n out.data = {\n temperature=tem,\n humidity = hum\n };\n else\n local message = string.format('Invalid Msg, hex=%s,len=%s',hex,string.len(hex))\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n \n\n INLINE 2019-08-21 17:53:18.544+08 2019-08-21 17:53:18.544+08 2019-08-21 \N
+ebadb50f-4d2d-4e15-b1fc-0254cb12be3d aaa \N 1 269c619d-0aad-4523-a770-9b2f752ed30e 269c619d-0aad-4523-a770-9b2f752ed30e f 269c619d-0aad-4523-a770-9b2f752ed30e Lua f0810c0002181a00fe8046f0 INLINE 2019-09-24 11:33:25.809+08 2019-09-24 11:33:25.809+08 2019-09-24 \N
+35c34a5d-993a-4493-a0b0-d8841fd4bd31 CPF_ecc_get_temp \N CPFreshmart Energy Consumption Control 1.0 a0524b8e-f69f-421e-b306-124dd37f4f1c a0524b8e-f69f-421e-b306-124dd37f4f1c f a0524b8e-f69f-421e-b306-124dd37f4f1c Lua -- 测温。根据设备属性channel 判定是否为单通道读取。\n-- 若多通道读取,则读取 设备的 doors 属性判定通道数量\n-- errorCode:1001=读取温度错误,1002温度无效,1003=读取门磁错误,1004=温度/门无法读取\n--[[ \n测试数据 02030600D100D239F4\n1A18110519000100020003000400050006000700080F\ntemps=2\ndoors=4\ndevType=REFRIGERATOR\n]]--\nstart=function()\n --log.debug("CPF_ecc_get_temp started")\n local modbus_addr = 0x02 -- 温度传感器modbus地址\n local temp_cnt=1 -- 温区数量\n local door_cnt= 1 -- 门数量 \n local readtimeout=6000 -- timeout\n -- 按设备读取。\n local channel=0 -- 读取开始通道\n local start_addr=0 -- 起始地址\n\n -- 通道\n local channel = tonumber(device.props.channel) or 1\n local devType = device.props.devType or "REFRIGERATOR"\n if channel<=0 or channel>4 then -- invalid channel\n channel=1\n end\n -- 传感器数量(温区数量)\n if device.props.doors ~= nil then\n door_cnt=tonumber(device.props.doors) or 1\n if door_cnt<=0 or door_cnt>4 then\n door_cnt=1\n end\n else\n door_cnt=1\n end\n if device.props.temps ~=nil then\n temp_cnt=tonumber(device.props.temps) or 1\n if temp_cnt<=0 or temp_cnt>4 then\n temp_cnt=1\n end\n else\n temp_cnt=1\n end\n \n start_addr = channel -1 -- start from 0\n -- Modbus地址2+03+偏移量2+读取数量2\n local req=string.format("%02d03%04X%04X",modbus_addr,start_addr,temp_cnt)\n --log.debug("CPF_ecc_get_temp, start_addr=%d,sensors=%d",start_addr,temp_cnt)\n req=iota.appendHexCrc(req,"L",0)\n --log.debug("req=%s",req) --02030000000305F8\n ok,ack=ctx:ssend(req,readtimeout)\n -- log.debug("CPF_GET_TEMP_ACK=%s-%s,dev=%s",ok,ack,json.encode(device))\n -- ack=02030600D100CF00D139F4\n result={\n \ttype=1\n }\n local explen=6+temp_cnt*4+4 -- 期望长度,0203XX=头,4长度CRC,数据=4*传感器数量\n if ok and string.len(ack) == explen then\n local tmp1ok,tmp2ok,tmp3ok=true,true,true\n local err1,err2,err3="","",""\n result.data={}\n -- log.debug("mode=%s",channelMode)\n if devType ~= "REFRIGERATOR" then\n result.data.temperature,tmp1ok,err1=gettemp(ack,3,"T1",devType)\n else\n result.data.temp_1,tmp1ok,err1=gettemp(ack,3,"T1",devType)\n if temp_cnt>=2 then\n \tresult.data.temp_2,tmp2ok,err2=gettemp(ack,5,"T2",devType)\n \tend\n if temp_cnt>=3 then\n \tresult.data.temp_3,tmp3ok,err3=gettemp(ack,7,"T3",devType)\n end\n end\n --log.debug("has error!!! %s %s %s", tmp1ok,tmp2ok,tmp3ok)\n if not (tmp1ok and tmp2ok and tmp3ok) then\n -- invalid data\n local msg=err1..err2..err3\n result.result={\n code=1002,\n msg=string.sub(msg,1,string.len(msg)-1)\n }\n end\n -- 门时,读取\n if devType == "REFRIGERATOR" then\n \tresult=get_door_stat(channel,door_cnt,result)\n end\n else\n result.result={\n code= 1001,\n msg = string.format("Invalid temperature ack:%s",ack)\n }\n end\n --log.debug("CPF_ecc_get_temp result=%s", json.encode(result))\n ctx:done(json.encode(result))\nend\n\n-- 查询门状态,参考协议: CPF_get_door_stat \nfunction get_door_stat(channel,doors,result)\n local address="1A18110519"\n local cmd="8686860F"\n local readtimeout=5000\n local ok,ack=ctx:ssend(address..cmd, readtimeout)\n if channel <1 then channel=1 end\n if channel >8 then channel = 8 end\n if doors <1 then doors=1 end\n if doors >8 then doors = 8 end\n if doors> 8-channel+1 then doors=8-channel+1 end\n --log.debug("channel=%d, doors=%d",channel,doors)\n\n if ok and ack~=nil and string.len(ack) == 44 then\n -- address+ 01*16 +0F\n -- 1A18110519000100020003000400050006000700080F\n local p1,dn\n -- result.data={}\n for di=1,doors do\n p1 = 5+ (channel-1 + di-1)\n local dis=iota.hexToByte(ack,p1,'B')\n log.debug("door[%d] = %d", di, dis)\n dn=string.format("status_d%d",di)\n result.data[dn] = (dis==0 and "1" or "0")\n end\n else\n if result.result==nil then\n result.result={\n code=1003,\n \tmsg="Invalid doorstat ack:"..ack\n }\n else -- get temp error\n result.result.code=1004 -- both error.\n result.result.msg=result.result.msg..", invalid door stat ack"\n end \n end\n return result\nend\n\nfunction gettemp(ack,p,name,devType) \n local ackHex=string.sub(ack,p*2+1, p*2+4)\n if ackHex == "ffff" then --not link\n return nil,false,name.." NOT linked,"\n end \n local v=iota.hexToShort(ack,p,"B")\n -- log.debug("CPF_get_temp(%s,%d, %s=>%d)",ack, p,name,v)\n local t=0\n if v>10000 then\n t = (10000-v)/10.0\n else\n t = v/10.0\n end\n if t > 50 or t < -25 then -- Impossible Temp\n return t,false,name.." OutOfRange[-25,50],"\n end\n -- INDOORTEMPSENSOR 读数小于0\n if t < 0 and devType == "INDOORTEMPSENSOR" then\n return t,false,name.." OutOfRange[0,50],"\n end\n return t,true,""\nend\n\nonData=function(data)\n -- log.debug("CPF_ecc_get_temp.onData('%s')", data) -- HEX string.\nend INLINE 2019-04-26 16:10:11.741+08 2019-05-25 13:56:14.384+08 2019-04-26 \N
+504318da-e1b0-4c7b-b1a9-c959115c5235 hnyl \N 压力传感器 1.0 736d5c22-d6ac-4577-9782-0f95345ea1d5 736d5c22-d6ac-4577-9782-0f95345ea1d5 f 736d5c22-d6ac-4577-9782-0f95345ea1d5 Lua start=function()\n log.debug("hnyl.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n--压力传感器\nonData=function(hex)\n log.debug("hnyl.lua: Data, ctx=%s",hex)\n local out={\n data ={},\n result = {}\n }\n --ff41584a238662620414515830230008000102f0 0116 18 4Feeee\n\t--ff41584a238662620414515830230008000102f00116184Feeee\n\t--ff 41 58 4a 23 86 62 62 04 14 51 58 30 23 00 08 00 01 02 f0 01 16 18 4F eeee\n\t\n\t\t\tlog.debug("hnyl 压力传感器=%s",hex)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\t\n local forces = iota.hexToShort(hex,20,'B')/10;\n log.debug("hnyl forces=%s",forces)\n \n out.data = { \n force=forces\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("hnyl: cloudvibrate=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'hnyl:Data is nil'\n errcode = 1001\n return false\n end\n\tlocal sensorType= iota.hexToShort(data,14,'B')\n\tlog.debug("hnyl: -----sensorType=%s",sensorType)\n\tif (sensorType~=8) then\n errormsg = string.format('hnyl:sensorType is wrong=%s',sensorType)\n errcode = 1001\n return false\n end\n\tlocal subdata=string.sub(data,1,-9)\n local crc=iota.appendHexCrc(subdata, 'B' ,0)\n log.debug("hnyl.lua: crc, ctx=%s",crc)\n local subdatacrc=string.sub(data,1,-5)\n log.debug("hnyl.lua: subdatacrc, ctx=%s",subdatacrc)\n if (string.lower(crc)~=string.lower(subdatacrc)) then\n errormsg = string.format('anfang_inclinometer_1:crc[%s]≠[%s]',subdatacrc,crc)\n errcode = 1001\n return false\n end\n\t\n \n return true\n \nend\n \n INLINE 2019-07-23 09:43:49.005+08 2019-07-30 17:15:53.251+08 2019-07-23 \N
+73c4b266-e007-4f6f-88de-02c8c82b9aa4 lefu_settlement_1 \N 位移 1.0 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 f 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 Lua start=function()\n log.debug("anfang_inclinometer_1.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n local moduleStr=device.uplink.props.module\n log.debug("anfang_settlement_1 [%s] Data, ctx=%s",moduleStr,hex)\n local out={\n data ={},\n result = {}\n }\n --ff41584a23313832363036333634323923ffffffffffffff000500020cf15b0b9ffe01211111ffffffffF38Feeee\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n local length = iota.hexToInt(hex,34,'B')/10000.0000\n \n out.data = { \n length=length\n }\n local resultData =json.encode(out)\n log.debug("anfang_settlement_1 [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = errcode, msg = errormsg}\n ctx:done(json.encode(out))\n end \nend\n\nIsValid=function(data,deviceModule)\n if data == nil then\n errormsg = 'anfang_settlement_1:Data is nil'\n errcode = 1001\n \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n return false\n end\n local length= iota.hexToByte(data,28,'B')\n if (string.len(data)/2~=(length+34)) then\n errormsg = 'anfang_settlement_1:Data length is wrong'\n errcode = 1001\n \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n return false\n end\n local dataModule= iota.hexToShort(data,26,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('anfang_settlement_1 module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n return false\n end\n local sensorType= iota.hexToShort(data,24,'B')\n if (sensorType~=5) then\n errormsg = 'anfang_settlement_1:sensorType is wrong'\n errcode = 1001\n log.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n return false\n end\n local subdata=string.sub(data,1,-9)\n local crc=iota.appendHexCrc(subdata, 'B' ,0)\n log.debug("anfang_settlement_1.lua: crc, ctx=%s",crc)\n local subdatacrc=string.sub(data,1,-5)\n log.debug("anfang_settlement_1.lua: subdatacrc, ctx=%s",subdatacrc)\n if (string.lower(crc)~=string.lower(subdatacrc)) then\n errormsg = 'anfang_settlement_1:crc is wrong'\n errcode = 1001\n \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n return false\n end\n log.debug("anfang_settlement_1 [%s] 校验通过",deviceModule)\n return true\n \nend\n \n INLINE 2019-05-09 09:47:28.439+08 2019-05-09 15:30:12.516+08 2019-05-09 \N
+0e36fdd5-a0d5-4fc7-9337-906d98282bf2 CPF_get_energy \N Energy 1.0 a0524b8e-f69f-421e-b306-124dd37f4f1c a0524b8e-f69f-421e-b306-124dd37f4f1c f a0524b8e-f69f-421e-b306-124dd37f4f1c Lua --[[\n电量读取。\n参数:相电压(phaseVoltage): 220,380,表示当前设备检测的目标电压值是220还是380\n]]--\nstart=function()\n log.debug("CPF_get_energy start")\n modbus_addr = 0x01 -- 功率传感器modbus地址\n local phaseVoltage = tonumber(device.props.phaseVoltage or "220") --\n local initConsumption = device.props.initConsumption or 0.00\n \n \n local req=string.format("%02d040000000A",modbus_addr) --读取10个字节\n req=iota.appendHexCrc(req,"L",0)\n -- log.debug("req=%s",req) --01040000000700D\n ok,ack=ctx:ssend(req,3000)\n log.debug("CPF_GET_TEMP_ACK=%s-%s,dev=%s",ok,ack,json.encode(device))\n -- ack=01041408CD00F20000012E00000004000001F400370000D902\n result={\n type=1\n }\n if ok and string.len(ack)>=50 then\n --01041408CD00F20000012E00000004000001F400370000D902\n local crcok,crcmsg=checkCrc(ack)\n if (not crcok) then\n result.result={\n code=1003,\n msg=string.format("CRC error:%s",crcmsg)\n }\n else\n\t --crcok\n result.data={\n voltage=iota.hexToShort(ack,3,"B")/10.0, --08CD\n current=iota.hexToShort(ack,5,"B")/1000.0,--00F2\n power=iota.hexToInt(ack,7,"B")/10.0, --0000012E\n energy=iota.hexToInt(ack,11,"B",3)/1000.0 ,--00000004-KWH\n frequency=iota.hexToInt(ack,15,"B")/10.0, --000001F4,HZ\n factor=iota.hexToShort(ack,19,"B")/100.0 -- 0037\n }\n result.data.energy = tonumber(string.format("%.3f", result.data.energy))\n --[[\n if result.data.frequency<45 or result.data.frequency>55 or\n result.data.voltage < 180 or result.data.voltage>250 then\n result.result={\n code=1001,\n msg="Out of range:freq,voltage"\n }\n end\n ]]--\n result.data = convertPhase(result.data, phaseVoltage, initConsumption)\n end\n else\n result.result={\n code=1002,\n msg=string.format("Invalid ack:%s",ack)\n }\n end\n -- log.debug("CPF_get_energy done:%s-%s",ok,ack)\n ctx:done(json.encode(result)) \nend\n\n-- calculate 1phase to 3Phase\nfunction convertPhase(oldval,pv,ic)\n if pv==220 then\n oldval.energy = oldval.energy - ic -- initConsumption\n else\n -- 转换 220 为 380 系统。\n -- 防止设备重置\n --当前基准 \n local energyBase, ok = redis.hget(device.id, 'energyBase')\n if not ok then\n energyBase = 0\n else \n energyBase = tonumber(energyBase)\n end\n log.debug("CPF_get_energy energy base:%s", tostring(energyBase))\n \n oldval.voltage_1p = oldval.voltage\n oldval.power_1p = oldval.power\n oldval.energy_1p = oldval.energy\n oldval.power = getPrec(3*oldval.power_1p,1) -- 3*电压*电流*功率因素\n oldval.voltage = getPrec(1.732*oldval.voltage_1p,1) -- 相间电压\n oldval.energy = getPrec(3*oldval.energy_1p,3) - ic + energyBase -- 电能 功率对时间积分,和功率成功率线性关系\n \n local energyLastReading, lastOk = redis.hget(device.id, 'energyLastReading')\n if not lastOk then\n energyLastReading = 0\n else \n energyLastReading = tonumber(energyLastReading)\n end\n log.debug("CPF_get_energy current oldval.energy:%s", tostring(oldval.energy))\n log.debug("CPF_get_energy last reading:%s", tostring(energyLastReading))\n -- 重置,认为重置后归0,没有值微小偏差导致读数变小的情况\n if (oldval.energy < energyLastReading) then\n local newEnergyBase = energyLastReading + ic -- 消除 ic 的影响\n oldval.energy = oldval.energy + newEnergyBase - energyBase -- + NEW energy base / - old energy base\n redis.hset(device.id, 'energyBase', tostring(newEnergyBase))\n end\n redis.hset(device.id, 'energyLastReading', tostring(oldval.energy))\n end\n return oldval\nend\n\nfunction getPrec(nv,prec)\n fmt=string.format("%%3.%df",prec)\n return tonumber(string.format(fmt,nv))\nend\n\n--check crc,长度必须>=46(23)\nfunction checkCrc(ack)\n local crcstr= string.sub(ack,1,46)\n local crcorig=string.upper(string.sub(ack,-4))\n local crcchk=iota.appendHexCrc(crcstr,'L',0)\n crcchk = string.upper(string.sub(crcchk,-4))\n --log.debug("crc=%s - %s", string.upper(crcorig), string.upper(crcchk))\n return string.upper(crcorig)==string.upper(crcchk), 'exp:'..crcchk\nend INLINE 2019-04-28 16:35:30.717+08 2019-05-26 12:12:17.315+08 2019-04-28 \N
+3bc46801-ad7c-4787-a81f-8ad9b6e4bdd3 anxin_mop \N 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start = function()\n local cmd = capability.param\n log.debug("MOP:linkcnt=%s",cmd)\n update_mop(cmd)\n ctx:done(json.encode(out))\nend\n\n\n--需要配置更新\nupdate_mop = function(command)\n log.debug("MOP: update_mop command=%s",command)\n\n\n local tosend = StrtoHex(command)\n local ok, ack = ctx:ssend(tosend, 4000)\n log.debug("MOP : mop_sensor ssend ack:%s ok:%s",json.encode(ack),ok)\n result = {\n result = nil,\n type = 1,\n data = {\n ack = HextoStr(ack)\n }\n }\n log.debug("MOP : ack= %s",result.data.ack)\n ctx:notify(json.encode(result))\nend\n\n--字符串ascii->字符\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n --判断输入类型\n if (type(hex)~="string") then\n return nil,"hex2str invalid input type"\n end\n --拼接字符串\n local index=1\n local ret=""\n for index=1,hex:len() do\n local str = string.format("%02X",hex:sub(index):byte())\n if str == '0A' or str =='0a' then\n str = '0d0a' \n end \n if index == hex:len() then\n str = str..'0d0a'\n end\n ret=ret..str\n end\n return ret\nend INLINE 2019-06-25 17:14:21.844+08 2019-06-25 17:16:39.179+08 2019-06-25 \N
+9addbae0-b742-4fa1-9ecd-d5f0ee2b3889 mas_inclino_1503 \N 杆式测斜仪 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "fs_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n buff=iota.appendHexWord(buff, 22, endian) -- 2: 类型=22\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n buff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 1: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n--0016261381F35D42830C36094DFE363C80FFE1F8CFEF40\n--moduleId=9747\n--"temp": 23.81,\n--"xDegree": -30,\n--"yDegree": -1.967921\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\n local scale = 1000000.00;\n --print("parsing data", hex)\n local Temp = iota.hexToShort(hex,11,'B')/100.0;\n local xa = iota.hexToInt(hex,13,'B')/scale;\n local ya = iota.hexToInt(hex,17,'B')/scale;\n \n out.data = {\n temperature=Temp,\n \tanglex = xa,\n \tangley = ya\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('fs_1503开始校验数据data=%s',data)\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1002\n return false\n end\n \n local checkDataLen=string.len(data)\n if checkDataLen <= 7 then\n errormsg = string.format('长度校验无效,数据=%s',data)\n errcode = 1002\n return false\n end\n \n if iota.hexToByte(data,4,'B') ~= 0x81 then\n errcode = 1002\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo_check) ~= tostring(iota.hexToShort(data,2,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('fs_1503数据校验通过')\n return true\n--crc\nend\n\n INLINE 2018-06-25 11:26:42.107+08 2019-06-28 09:19:39.808+08 2018-06-25 \N
+bbd0c618-985d-47a7-b844-e4831697168b iOTA Dev Capability \N 1.0.0 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f f16833ab-a4a4-45f5-9b39-ad2c66e488f6 Lua start= function()\n log.debug("mqtt edge device capability start")\n local topic = "/capability/devices/%s/request"\n local request = {\n id = uuid.v4(),\n payload = json.decode(capability.param)\n }\n if request.payload == nil then\n request.payload = {}\n end\n request.payload.deviceId = device.id\n --[[\n 用于在网关侧来判定是否是相应channel的消息 -- InterfaceType 表中的固定值\n ]]--\n if device.uplink.type == "1" then\n request.channel = "serial"\n elseif device.uplink.type == "12" then\n request.channel = "mqtt"\n elseif device.uplink.type == "2" then\n request.channel = "zigbee"\n end\n request.payload.capabilityId = capability.id\n local iOTAMQTTMessage = {\n type = "iota_mqtt",\n topic = topic,\n payload = json.encode(request)\n }\n local result, response = ctx:ssend(iOTAMQTTMessage)\n if response == nil or response.payload == nil then\n ctx.done()\n return\n end\n local payload = json.decode(response.payload)\n if request.id == payload.id then\n log.debug("------------- %s ", json.encode(response))\n ctx:done(json.encode(payload.payload))\n end\nend\n\nonData= function()\nend INLINE 2019-07-06 16:50:48.869+08 2019-07-26 16:54:04.819+08 2019-07-06 \N
+fd763da6-2130-4510-81c8-d27986779983 KYDM-LP3MR910-GC1500 \N 1.0 ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c f ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c Lua --// PMO/02 产品协议/SavoirCloud/01 协议/4月第3周/北京宝力马传感技术有限公司/通讯协议WS302M2A-5温湿度变送器使用说明书V3.0.1(中英)-华为专用-北京宝力马传感技术有限公司.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "KYDM-LP3MR910-GC1500 ", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("KYDM-LP3MR910-GC1500 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("KYDM-LP3MR910-GC1500 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x04, endian)\n \t\tbuff=iota.appendHexByte(buff, 0x00, endian) \t\t\n buff=iota.appendHexByte(buff, 0x02, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("KYDM-LP3MR910-GC1500 SSend error!")\n end\n ctx:done(result)\nend\n\n--01030004000285ca\n--01030409c49900d202 \n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\t\t\t\n local inta = iota.hexToShort(hex,3,'B')\n\t\tlocal decimals=iota.hexToShort(hex,5,'B')/65535.0\n\t\tlocal length=inta+decimals\n \n \n out.data = {\n\t\t\tlength=length\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n log.debug('KYDM-LP3MR910-GC1500 开始校验数据',data)\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n \n log.debug('KYDM-LP3MR910-GC1500 数据校验通过')\n return true\n\nend\n\n\n\t\n \n INLINE 2019-06-18 10:59:06.956+08 2019-08-05 11:06:53.606+08 2019-06-18 \N
+5c2e0c0b-13d0-4c7f-926d-6448f4d9cbb7 anXin_temHum \N 温湿度 主动上报 标准协议 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start=function()\n log.debug("anxin_rain.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n local moduleStr=device.uplink.props.module\n log.debug("anxin_rain [%s] Data, ctx=%s",moduleStr,hex)\n local out={\n data ={},\n result = {}\n\t\n }\n \n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n\t local temperature = iota.hexToShort(hex,24,'B')/100\n local humidity = iota.hexToShort(hex, 26,'B')/100\n\t local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anxin_rain timeStr=%s",timeStr)\n dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anxin_rain dateTimeStr=%s",dateTimeStr)\n timenow = unixtimestamp(dateTimeStr)\n\t\t\t\t\n\t\t out={\n\t\t\t\t data={ \n\t\t\t\t humidity=humidity,\n temperature\t=temperature\n\t\t\t\t },\n\t\t\t\t\ttime=timenow\n\t\t\t\t }\n \n \n \n \n \t\n local resultData =json.encode(out)\n log.debug("anxin_rain [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = errcode, msg = errormsg}\n ctx:done(json.encode(out))\n end \nend\n\nIsValid=function(data,deviceModule)\n if data == nil then\n errormsg = 'anxin_rain:Data is nil'\n errcode = 1001\n \tlog.debug("anxin_rain [%s] %s",deviceModule,errormsg)\n return false\n end\n\n local dataModule= iota.hexToShort(data,6,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('anxin_rain module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("anxin_rain [%s] %s",deviceModule,errormsg)\n return false\n end\n\n log.debug("anxin_rain [%s] 校验通过",deviceModule)\n return true\n \nend\n \nunixtimestamp = function(datestr)\n \n local year = tonumber(string.sub(datestr,1,4))\n local month = tonumber(string.sub(datestr,5,6))\n local day = tonumber(string.sub(datestr,7,8))\n local hour = tonumber(string.sub(datestr,9,10))\n local minute = tonumber(string.sub(datestr,11,12))\n local second = tonumber(string.sub(datestr,13,14))\n\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2019-12-23 16:35:51.379+08 2019-12-23 16:49:13.399+08 2019-12-23 \N
+d6558744-85f3-42ee-8d1c-07aa74f60036 mas_microPower \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua start=function()\n log.debug("mas_microPower_1 : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n if data ~=nil then\n log.debug("mas_microPower_1 : devices data =%s",data)\n ParseData(data) \n else\n log.error("mas_microPower_1 : recvd content is nil")\n end\nend\n\n\nfunction ParseData(data)\n local out={\n data ={},\n result = {},\n type=2\n }\n if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then --振动数据\n log.debug("mas_microPower_1 : 振动数据 data =%s",data)\n local package=iota.hexToShort(data,8,'L')\n local packagecount=iota.hexToShort(data,10,'L')\n local datpackage=string.sub(data,41,-9)\n local moduleid=iota.hexToShort(data,16,'L')\n\n local req1 =''\n local req2 =''\n local req =''\n req1=iota.appendHexByte(req1, 01 , 'L') -- 0-3 压缩协议 4-7 协议版本\n req1=iota.appendHexByte(req1, 0x02 , 'L')\n req1=iota.appendHexWord(req1, 0x0007 , 'L')\n req1=iota.appendHexWord(req1, 0x0000 , 'L')\n \n req2=iota.appendHexWord(req2, package , 'L')\n req2=iota.appendHexWord(req2, packagecount , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, moduleid , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n local checkdat=req1..req2\n local checksum=HeadCheckSum(checkdat)\n req=req1\n req=iota.appendHexWord(req, checksum , 'L')\n req=req..req2\n req=iota.appendHexWord(req, package , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=req..'00000000'\n req=iota.appendHexCrc(req, 'L' ,0) --校验\n local crc16=string.sub(req,-4,-1)\n req=string.sub(req,1,-13)\n req=req..crc16\n req=iota.appendHexByte(req, 0 , 'L') \n req=iota.appendHexByte(req, 0xfa , 'L') \n log.debug("mas_microPower_1: datfileback: %s", req)\n ctx:asend(req, 20000)\n\n if package==packagecount then\n local r1,ok = redis.get(device.id.."_mpzd")\n log.debug("mas_microPower_1: 解析dat:r1= %s", r1)\n ParseFileDat(r1)\n else\n if package==1 then\n local firstpackage=string.sub(datpackage,-80,-1)\n redis.set(device.id.."_mpzd", firstpackage)\n log.debug("mas_microPower_1: 接收dat:datpackage= %s", firstpackage)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据首包'\n }\n }\n ctx:notify(json.encode(re))\n else\n local r1,ok = redis.get(device.id.."_mpzd")\n log.debug("mas_microPower_1: 接收dat:r1= %s package=%s", r1,package)\n local data=r1..datpackage\n redis.set(device.id.."_mpzd", data)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n end\n else \n\t \n\t -- 非振动数据\n if string.sub(data,13,16)=='8a00' then\n local rtumodule=iota.hexToShort(data,3,'B')\n local power =iota.hexToByte(data,13,'B')\n log.debug("mas_microPower_1: 剩余电量: %s", power)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\tlog.debug("mas_microPower_1: 版本固件: %s", ver)\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\t\t\tredis.set(device.id.."_version", tostring(ver))\t\t\t\n\n local strdevice= toHexStr(json.encode(device))\n strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n local crc=string.sub(strdevice,-4,-1)\n log.debug("mas_microPower_1 : devices crc =%s",crc)\n local r1,ok = redis.get(device.id.."_mpset")\n if ok and r1~=nil then\n if crc == r1 then\n log.debug("mas_microPower_1 : 配置无修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 0, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("mas_microPower_1: 苏醒帧返回: %s", req)\n ctx:asend(req, 20000)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置无修改'\n }\n }\n ctx:notify(json.encode(re))\n else\n log.debug("mas_microPower_1 : 配置有修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("mas_microPower_1: 苏醒帧返回: %s", req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n else\n log.debug("mas_microPower_1 : 配置初次配置")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("mas_microPower_1: 苏醒帧返回: %s", req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n end\n \n if string.sub(data,13,16)=='8a02' then\n log.debug("mas_microPower_1 : 设备休眠")\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '设备休眠'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n local rtumodule=iota.hexToShort(data,3,'B')\n if string.sub(data,13,16)=='8601' then\n local time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\tlog.debug("mas_microPower_1 r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver=r1\n\t\t\t\tlog.debug("mas_microPower_1 r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\tlog.debug("mas_microPower_1 powerstr=%s",powerstr)\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} \n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time \n\t\t\t}\n\t\t\ttable.insert(out.data,rst)\n local isover=iota.hexToByte(data,25,'B') --尾包\n local datalength=0\n local firststart=27\n for i=1,sensorCount,1 do\n firststart=firststart+datalength\n local sensorType=iota.hexToByte(data,firststart,'B')\n local module=iota.hexToShort(data,firststart+3,'B')\n local channel=iota.hexToByte(data,firststart+2,'B')\n datalength=iota.hexToByte(data,firststart+1,'B')+6\n if sensorType==0 then --振弦\n local childDevice=getZxDeviceInfo(module,channel)\n local rst = {\n data={\n frequency = iota.hexToFloat(data,firststart+12,'B'),\n am = iota.hexToFloat(data,firststart+16,'B'),\n temperature = iota.hexToFloat(data,firststart+20,'B')\t\t\t\t\t\n },\n device=childDevice.id,\n type=1,\n time=time \n }\n table.insert(out.data,rst)\n end\n if sensorType==1 then --485\n local childDevice=getDeviceInfo(module,channel)\n local protocalCode=iota.hexToShort(data,firststart+6,'B')\n if protocalCode==1503 or protocalCode==1502 then --测斜\n\t\t\t\t\tlog.debug("mas_microPower_1: 测斜: %s", protocalCode)\n \t\tlog.debug("mas_microPower_1: 测斜: %s, deviceid: %s", module,childDevice.id)\n local rst = {\n data={\n anglex = iota.hexToFloat(data,firststart+12,'B'),\n angley = iota.hexToFloat(data,firststart+16,'B'),\n temperature = iota.hexToFloat(data,firststart+20,'B')\n },\n device=childDevice.id,\n type=1,\n time=time \n }\t\t\t\t\t\n table.insert(out.data,rst)\n\t\t\t\t\t\tlog.debug("mas_microPower_1: 测斜: %s", json.encode(out))\n end\n \n if protocalCode==9102 then --裂缝\n local childDevice=getDeviceInfo(module,channel)\n local rst = {\n data={\n length = iota.hexToFloat(data,firststart+12,'B')\n },\n device=childDevice.id,\n type=1,\n time=time \n }\n table.insert(out.data,rst)\n end\n \n if protocalCode==1102 then --温湿度\n local childDevice=getDeviceInfo(module,channel)\n local rst = {\n data={\n temperature = iota.hexToFloat(data,firststart+12,'B'),\n humidity = iota.hexToFloat(data,firststart+16,'B') \n },\n device=childDevice.id,\n type=1,\n time=time \n }\n table.insert(out.data,rst)\n end\n \n if protocalCode==9002 then --压差\n local childDevice=getDeviceInfo(module,channel)\n local rst = {\n data={\n physicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n frequency = iota.hexToFloat(data,firststart+16,'B'),\n temperature = iota.hexToFloat(data,firststart+20,'B')\n },\n device=childDevice.id,\n type=1,\n time=time \n }\n table.insert(out.data,rst)\n end\n\t\t\t\t\tif protocalCode==9030 then --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509 then --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992 then --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\t\t\n end\n end \n log.debug("mas_microPower_1: dataresult: %s", json.encode(out))\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0601, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0000, 'B') --数据区长度\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("mas_microPower_1: databack: %s", req)\n ctx:asend(req, 20000)\n ctx:notify(json.encode(out)) \n end\n end\nend\n\nfunction Deploy()\n local total=totalSensors()\n log.debug("mas_microPower_1 : totalSensors =%s",total)\n local over=0\n local onepag=0\n local totallength=3\n local buff=''\n \n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n over=over+1\n onepag=onepag+1\n if subdevice.props.sensortype=='zx' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x00, 'B') --传感器类型\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n local settingvib = tonumber(colgain) + tonumber(incentive) * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n log.debug("mas_microPower_1 : settingvib =%s",settingvib)\n buff=iota.appendHexByte(buff, settingvib, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexByte(buff, subdevice.uplink.props.k, 'B') --振弦采集参数\n buff=iota.appendHexWord(buff, subdevice.uplink.props.f0, 'B') --振弦频率初值\n buff=iota.appendHexByte(buff, 0x00, 'B') --上传频谱ID\n buff=iota.appendHexByte(buff, 0x01, 'B') --采集选项\n end \n if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x01, 'B') --传感器类型\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n local setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n log.debug("mas_microPower_1 : setting =%s",setting)\n buff=iota.appendHexByte(buff, setting, 'B') --选项1 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B') --协议号\n buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B') --模块号\n buff=iota.appendHexByte(buff, 0x01, 'B') --子通道号\n end\n if subdevice.props.sensortype =='zd' then \n totallength=totallength+31 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x04, 'B') --传感器类型\n buff=iota.appendHexByte(buff, 0x00, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x12, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B') --定时采样间隔\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B') --定时采样时长\n buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B') --加速度触发采样时长\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B') --采样频率\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B') --滤波频率\n\n buff=iota.appendHexWord(buff, 0x42c8, 'B')\n buff=iota.appendHexWord(buff, 0x0000, 'B')\n buff=iota.appendHexWord(buff, 0x4248, 'B')\n buff=iota.appendHexWord(buff, 0x0000, 'B')\n local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n buff=iota.appendHexByte(buff, trigger1, 'B') --触发加速度\n buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B') --加速度范围\n buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B') --滞后点数\n\n end\n if over==8 or onepag==total then \n local buffhead=''\n buffhead=iota.appendHexByte(buffhead, 0xfe, 'B') --帧头\n buffhead=iota.appendHexWord(buffhead, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B') --模块号\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --命令源\n buffhead=iota.appendHexWord(buffhead, 0x0306, 'B') --指令\n buffhead=iota.appendHexWord(buffhead, 0x0000, 'B') --消息ID\n buffhead=iota.appendHexWord(buffhead, totallength, 'B') --数据区长度\n if onepag==total then\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --尾包\n else\n buffhead=iota.appendHexByte(buffhead, 0x00, 'B') --尾包\n end\n buffhead=iota.appendHexByte(buffhead, total, 'B') --采集指令总通道指令个数\n buffhead=iota.appendHexByte(buffhead, over, 'B') --该分包通道指令个数\n buff=buffhead..buff\n buff=iota.appendHexCrc(buff, endian ,0) --校验\n buff=iota.appendHexByte(buff, 0xef, 'B') --帧尾\n local ok, ack = ctx:ssend(buff, 20000)\n log.debug("mas_microPower_1 : deploy back =%s",ack)\n buff=''\n if over==8 then\n over=0\n end\n totallength=3\n if onepag==total then\n log.debug("mas_microPower_1 配置下发完成")\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置下发完成'\n }\n }\n ctx:notify(json.encode(re))\n end\n end \n end\n end \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n log.debug("mas_microPower_1 has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("mas_microPower_1 has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n log.debug("mas_microPower_1 has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("mas_microPower_1 has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n log.debug("mas_microPower_1 : dat content =%s", dathex)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n log.debug("mas_microPower_1 deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n local floatcount = (string.len(dathex)/2-40)/4\n log.debug("mas_microPower_1 begin parse")\n local vols = {}\n\t\tlocal mean = 0\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n log.debug("mas_microPower_1 finish parse")\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n sampleFreq=samplefreq,\n filterFreq=filterfreq,\n gainAmplifier=gainamplifier,\n triggerType=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n }\n table.insert(out.data,rst)\n \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\tlog.debug("mas_microPower_1 r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver=r1\n\t\t\tlog.debug("mas_microPower_1 r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("mas_microPower_1 powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t} \n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time \n\t\t}\n\t\ttable.insert(out.data,rstd)\n\t\tlog.debug("mas_microPower_1 cloudvibrate=%s",json.encode(out))\n ctx:notify(json.encode(out))\n else\n log.debug("mas_microPower_1 not found device module=%s channel=%s",deviceId,channel)\n end\nend\n\nfunction totalSensors()\n local sensorcnt=0\n for i,dnlink in pairs(device.dnlinks) do \n sensorcnt = #(dnlink.devices) + sensorcnt \n end\n return sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend \n\nfunction HeadCheckSum(data)\n local sum=0\n local len = string.len(data)\n log.debug("mas_microPower_1: len: %s", len)\n for i =1,len,4 do \n local te=tonumber(string.sub(data,i,i+3) ,16)\n log.debug("mas_microPower_1: te: %s", te)\n sum = sum+ tonumber(te)\n end\n log.debug("mas_microPower_1: sum: %s", sum)\n return 0xffff-sum\nend\n\n INLINE 2019-08-22 14:36:27.994+08 2019-09-04 17:34:11.099+08 2019-08-22 \N
+0362b1ec-f7ee-4a7e-b0ec-612320d76bbf shzr_DAS_RN-MICRO-32 \N 1.0 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f 8d2f03c7-32a2-42e4-befc-7dde5c965472 Lua --//01 协议文档/5月第3周/上海华测创时/振弦采集仪通讯协议.doc\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nstart=function()\n log.debug("start %s, moduleId=%s channel = %s ", "shry_zx",device.uplink.props.module or 'nil',device.uplink.props.channel or 'nil')\nlocal endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n log.debug("shry_zx 根设备 名称 : data is =%s", device.name)\n log.debug("shry_zx 根设备devices : data is =%s", json.encode(device))\n \tfor index,child in pairs(subdevices) do\n\t\t log.debug("shry_zx 子设备subdevices=%s : data is =%s", index,json.encode(child))\n \t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("shry_zx 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t moduleNo=child.props.moduleId\n\t\t\t channelNo=child.props.channelId \n\t\t\t log.debug("shry_zx 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n \t--local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t \n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n log.debug("shry_zx 模块%s通道%s的deviceId是%s:",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexByte(buff, 0x48, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0x43, endian) \n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\n\t\t\tbuff=iota.appendHexByte(buff, 1, endian) -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian) -- 1: 通道号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\t\t\tbuff=iota.appendHexWord(buff, 0, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0) \n\t\t\tbuff=iota.appendHexByte(buff, 0xAF, endian) \t\t\t\t\t\t\n\t\t\tok,resp=ctx:ssend(buff,4000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n log.debug("shry_zx 模块%s通道%s的数据接收成功,开始解析",moduleNo,channelNo) \n\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("shry_zx 模块%s通道%s的数据接收失败",moduleNo,channelNo) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("shry_zx subdevices是nil")\n \treturn nil\n end\n\t\t\n\tlocal resultData =json.encode(out)\n log.debug("shry_zx out序列化结果 : out is =%s", json.encode(out))\n ctx:done(resultData)\t\n\t\n\t\nend\n--4843000015040301a8774945000000000000000000006778af\n--K=1\n--F0=2\n--Kt=3\n--T0=4\n--moduleId=5380\n--channelId=1\n--formula=ε=ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)\n--"phy": -16,\n--"frequency": -1.3727142151112332e-14,\n--"temperature": 0\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n\t--local subModuleId=subDevice.props.moduleId or subDevice.uplink.props.module\n\t--local subChannelId=subDevice.props.channelId or child.uplink.props.channel\n\tlog.debug("shry_zx:模块%s通道%s的deviceId是:%s",subModuleId,subChannelId,subDevice.id)\n local ErrorCode = IsValid(hex,tostring(subModuleId),tostring(subChannelId))\n if ErrorCode then \n \n \n\t\tlocal Frequency = iota.hexToFloat(hex, 8,'B',32); -- 65=1100101\n local Temp = iota.hexToFloat(hex, 12,'B',2);\n\t\tlog.debug("shry_zx:模块%s通道%s的原始值是:freq=%s,Temp=%s",subModuleId,subChannelId,freq,Temp)\n log.debug("shry_zx:模块%s通道%s的参数值是:=%s",subModuleId,subChannelId,json.encode(subDevice.uplink.capabilities[1].formula))\n \n\t\tlocal Phy=0\n if subDevice.uplink.capabilities[1].formula.metaid == '2bd2a601-c351-4e47-bbbe-9a787efd6026' then --在iota中查找 --振弦公式\t\t\n\t\t\t\tlocal K = subDevice.uplink.capabilities[1].formula.props.K\n\n\t\t\t\tlocal Fo = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\tlocal Kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal To = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\tlog.debug("shry_zx:振弦模块:公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\tif K ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\tlog.debug("shry_zx 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\telse\n\t\t\t\t\tlog.debug("shry_zx 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\tlocal Fi=Frequency \n\t\t\t\t\tPhy = K*Fi^2-(K*Fo^2)+Kt*(Temp-To)\n\t\t\t\t\tlog.debug("当前的Phy是:%s",Phy)\n\t\t\t\tend \n\t\n\t\tsubData.data={\n\t\t\t\t\tfrequency=string.format("%0.3f",Frequency),\n\t\t\t\t\ttemperature=string.format("%0.3f",Temp),\n \tphysicalvalue=string.format("%0.3f",Phy)\n\t\t\t\t\t}\n\t\tend\n\t\tif subDevice.uplink.capabilities[1].formula.metaid == '8102b4e7-9f04-43f0-a644-5b89c281f52f' then --在iota中查找\n \n local R0 = subDevice.uplink.capabilities[1].formula.props.R0\n\t\t\t\t\tlocal G = subDevice.uplink.capabilities[1].formula.props.G\n\t\t\t\t\tlog.debug("shry_zx:电阻模块:公式48参数=%s,%s",R0,G)\n\t\t\t\t\tlocal A=1.4051*10^(-3)\n\t\t\t\t\tlocal B=2.369*10^(-4)\n\t\t\t\t\tlocal C=1.019*10^(-7)\n\t\t\t\t\tlocal a=1.0/3\n\t\t\t\t\tlocal y=1/(Temp+273.2)-A\n\t\t\t\t\tlog.debug("shry_zx 当前的y是:%s",y)\n\t\t\t\t\tlocal yy=(y/2/C)^2+(B/3/C)^3\n\t\t\t\t\tlog.debug("shry_zx 当前的yy是:%s",yy)\n\t\t\t\t\tlocal yy1=y/2/C+math.pow(yy,0.5)\n\t\t\t\t\tlog.debug("shry_zx 当前的yy1是:%s",yy1)\n\t\t\t\t\tlocal yy2=y/2/C-math.pow(yy,0.5)\n\t\t\t\t\tlog.debug("shry_zx 当前的yy2是:%s",yy2)\n\t\t\t\t\t\n\t\t\t\t\tlocal yyy1=math.pow(yy1,a)\n\t\t\t\t\tlog.debug("shry_zx 当前的yyy1是:%s",yyy)\n\t\t\t\t\tlocal yyy2=0\n\t\t\t\t\tif yy2<0 then\n\t\t\t\t\t\tyyy2=-math.pow(-yy2,a)\n\t\t\t\t\t\n\t\t\t\t\telse\n\t\t\t\t\t\tyyy2=math.pow(yy2,a)\n\t\t\t\t\n\t\t\t\t end\n\t\t\t\t\tlocal yyy=yyy1+yyy2\n\t\t\t\t\tlog.debug("shry_zx 当前的yyy是:%s",yyy)\n\t\t\t\t\tlocal R=math.exp(yyy)-18\n\t\t\t\t\tlog.debug("shry_zx 当前的电阻是:%s",R)\n\t\t\t\t\tif G ==nil or R0==nil then\n\t\t\t\t\t\tPhy=nil\n\t\t\t\t\telse\n\t\t\t\t\t\tPhy =G*(R-R0)\n\t\t\t\t\t\tlog.debug("当前的应变是:%s",Phy)\n\t\t\t\t\tend \n subData.data={\n\t\t\t\t\tresistance=string.format("%0.2f",R),\n\t\t\t\t\n \tphysicalvalue=string.format("%0.2f",Phy)\n\t\t\t\t\t}\t\t\t\t\n\t\tend\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n log.debug('shry_zx:模块%s通道%s开始校验数据',moduleId,channelId)\n if data == nil or string.len(data)/2 ~= 25 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('shry_zx:模块%s通道%s 数据 长度校验失败:Data is nil or invalid length=%s',moduleId,channelId,string.len(data)/2)\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x48 or iota.hexToByte(data,1,'B') ~= 0x43 or iota.hexToByte(data,24,'B') ~= 0xaf then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n\t\tlog.debug('shry_zx:模块%s通道%s 数据校验失败:Hex CMD False:错误码=1003',moduleId,channelId)\n return false\n end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,4,'B'))\n\tif moduleId~= moduleStr then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug('shry_zx:模块%s通道%s 模块号校验失败:Invalid acq moduleId=%s',moduleId,channelId,moduleStr)\n return false\n end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,7,'B'))\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('shry_zx:模块%s通道%s 通道号校验失败:Invalid acq channelId=%s',moduleId,channelId,channelStr)\n\t\treturn false\n\tend\t\t\n log.debug('shry_zx:模块%s通道%s校验数据通过!!!',moduleId,channelId)\n return true\nend INLINE 2019-06-24 17:02:04.441+08 2020-08-11 13:45:27.497+08 2019-06-24 \N
+ce96b9f4-f3b4-437b-8011-b7bd5166300c 测试协议 \N 1.0 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f f16833ab-a4a4-45f5-9b39-ad2c66e488f6 Lua start= function()\n log.debug("lua start")\n log.debug(iota.hexToInt("01041408CD00F20000012E00000004000001F400370000D902", 11, "B"))\nend\n\nonData=function(data) \n log.debug("on data")\nend INLINE 2019-04-26 12:56:57.385+08 2019-05-26 11:51:48.325+08 2019-04-26 \N
+d2e64245-7a53-43c4-a9a0-727155de89fe lefu_inclin_1 \N 测斜,主动上传 1.0 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 f 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 Lua start=function()\n log.debug("anfang_inclinometer_1.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n log.debug("anfang_inclinometer_1.lua: Data, ctx=%s",hex)\n local out={\n data ={},\n result = {}\n }\n --ff41584a23313832363036333634323923ffffffffffffff000200010cf15b0b9ffe00010002ffffffff4f18eeee\n\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local xData = iota.hexToShort(hex,34,'B')/1000.000;\n local yData = iota.hexToShort(hex,36,'B')/1000.000;\n --local zData = iota.hexToShort(hex,38,'B')/1000.000;\n --local temp = iota.hexToShort(hex,40,'B')/100.000;\n \n out.data = { \n anglex=xData,\n angley=yData,\n --anglez=zData,\n --temperature=temp\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("anfang_inclinometer_1: cloudvibrate=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'anfang_inclinometer_1:Data is nil'\n errcode = 1001\n return false\n end\n local length= iota.hexToByte(data,28,'B')\n if (string.len(data)/2~=(length+34)) then\n errormsg = 'anfang_inclinometer_1:Data length is wrong'\n errcode = 1001\n return false\n end\n \n local sensorType= iota.hexToShort(data,24,'B')\n if (sensorType~=2) then\n errormsg = string.format('anfang_inclinometer_1:sensorType is wrong=%s',sensorType)\n errcode = 1001\n return false\n end\n local moduleId= iota.hexToShort(data,26,'B')\n if (device.uplink.props.module~=tostring(moduleId)) then\n errormsg = 'anfang_inclinometer_1:module is wrong'\n errcode = 1001\n return false\n end\n local subdata=string.sub(data,1,-9)\n local crc=iota.appendHexCrc(subdata, 'B' ,0)\n log.debug("anfang_inclinometer_1.lua: crc, ctx=%s",crc)\n local subdatacrc=string.sub(data,1,-5)\n log.debug("anfang_inclinometer_1.lua: subdatacrc, ctx=%s",subdatacrc)\n if (string.lower(crc)~=string.lower(subdatacrc)) then\n errormsg = string.format('anfang_inclinometer_1:crc[%s]≠[%s]',subdatacrc,crc)\n errcode = 1001\n return false\n end\n \n return true\n \nend\n \n INLINE 2019-05-09 09:50:48.945+08 2019-05-09 09:50:48.945+08 2019-05-09 \N
+cc122ffc-2080-4bde-a20b-d8b14c47e413 fs_door_mop \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//04 D:\\SVN\\201903项目\\厕所电动门\\[说明书]USR-IO808-GR_V1.0.3.pdf\nstart = function()\n local rawParam = capability.param\n log.debug('fs_door_mop rawParam=%s', rawParam)\n local params = Split(rawParam, ',')\n local doorNo = params[1]\n local doorState = params[2]\n local msg = changeDoorState(doorNo, doorState)\n\n out = {\n result = nil,\n type = 1,\n data = {\n ack = msg\n }\n }\n log.debug('fs_door_mop responde=%s', msg)\n log.debug('fs_door_mop result=%s', json.encode(out))\n ctx:done(json.encode(out))\nend\n\nchangeDoorState = function(DOchannel_door, doorState_input)\n -- log.debug('fs_door_mop changeDoorState=(%s,%s)', DOchannel_door, doorState_input)\n local msg = ''\n local moduleNo = device.uplink.props.module\n local ErrorCode = IsParamValid(DOchannel_door, doorState_input)\n if ErrorCode then\n --声光提醒10秒\n local DOchannel_sound = DOchannel_door - 1\n local isSoundLightOK_open = changeDOSate(moduleNo, DOchannel_sound, 1)\n\n Sleep(2)\n --关闭声光报警\n local isSoundLightOK_close = changeDOSate(moduleNo, DOchannel_sound, 0)\n Sleep(2)\n --改变门状态\n local isDoorOK = changeDOSate(moduleNo, DOchannel_door, tonumber(doorState_input))\n\n --log.debug('fs_door_mop cmdResponse=%s,%s,%s', isSoundLightOK_open, isSoundLightOK_close, isDoorOK)\n if isDoorOK == true then\n msg = '门状态改变指令已经成功下达'\n end\n else\n msg = errormsg\n end\n\n return msg\nend\n\nchangeDOSate = function(deviceModule, DOid, Do_input)\n --log.debug('fs_door_mop changeDOSate=(%s,%s,%s)', deviceModule, DOid, Do_input)\n local buff = ''\n buff = iota.appendHexByte(buff, deviceModule, endian)\n local nextState\n if Do_input == 1 then\n nextState = 'ff00'\n else\n nextState = '0000'\n end\n buff = buff .. '0500'\n buff = iota.appendHexByte(buff, DOid, 'L')\n buff = buff .. nextState\n buff = iota.appendHexCrc(buff, 'L', 0)\n local ok, ack = ctx:ssend(buff, 5000)\n\n local checkBuff=string.lower(buff)\n if ack == checkBuff then\n --log.debug('fs_door_mop ack[%s] == buff[%s])', ack, checkBuff)\n return true\n else\n --log.debug('fs_door_mop ack[%s] ≠ buff[%s])', ack, checkBuff)\n return false\n end\nend\n\nSleep = function(n)\n local t0 = os.clock()\n while os.clock() - t0 <= n do\n end\nend\n\nIsParamValid = function(paramA, paramB)\n if paramA == nil or paramA == nil then\n errormsg = string.format('无效的参数格式,请检查')\n return false\n end\n\n local paramA_num = tonumber(paramA)\n local paramB_num = tonumber(paramB)\n if paramA_num == nil or paramB_num == nil then\n errormsg = string.format('无效的参数格式,请检查')\n return false\n end\n\n local isOu = IsOuNumber(paramA_num)\n if isOu == true then\n errormsg = string.format('门通道号必须是奇数,请检查')\n return false\n end\n\n if paramA_num > 8 then\n errormsg = string.format('门通道号必须小于8,请检查')\n return false\n end\n\n if paramB_num ~= 0 and paramB_num ~= 1 then\n errormsg = string.format('门通道状态必须是 0 或 1,请检查')\n return false\n end\n return true\nend\n\n--是否是偶数\nfunction IsOuNumber(num)\n local num1, num2 = math.modf(num / 2)\n --返回整数和小数部分\n if (num2 == 0) then\n return true\n else\n return false\n end\nend\n---------------------\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n INLINE 2019-03-22 15:59:11.594+08 2019-05-27 19:20:28.758+08 2019-03-22 \N
+c6ff5a63-12be-4695-87d7-bad84d211561 shjy_incline_1 \N 倾角asic 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_incline_1",device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t --6804000408\n\t\n\t\tlocal moduleNo = device.uplink.props.module --模块 通道 优先接口获取\t\t\n log.debug("shjy_incline_1 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, 0x68, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff,CS(1,buff),endian) \n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("shjy_incline_1 SSend error!")\n end\n ctx:done(result)\nend\n\n--68 0D 00 84 00 20 10 10 05 25 00 00 00 FB\n\n--moduleId=1 \n--"humidity": 2.5,\n--"temp": 3.7\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n local signx = tonumber(string.sub(hex,9,9))\n \n local anglex = tonumber(string.sub(hex,10,14))/100\n local signy = tonumber(string.sub(hex,15,15))\n local angley = tonumber(string.sub(hex,16,20))/100\n if signx==1 then\n anglex=anglex*-1\n end\n if signy==1 then\n angley=angley*-1\n end\n \n out.data = {\n anglex=anglex,\n angley=angley\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('shjy_incline_1 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 14 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,2,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shjy_incline_1 数据校验通过')\n return true\n--crc\nend\n\n--校验和8\nCS=function(start,buff)\n local lcr = 0\n for i = start, string.len(buff)/2-1 do\n lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n end \n local value= bit:_and(lcr,0xff) \n return value\nend \n\n\n\t\n \n\n INLINE 2018-06-27 13:49:25.531+08 2019-05-29 17:41:46.503+08 2018-06-27 \N
+f2c0be9e-1cf8-425f-befd-5cff3fac6fb1 shjy_BK_Q01B \N 1 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_BK_Q01B",device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t --68 04 00 04 08 \n\t\n\t\tlocal moduleNo = device.uplink.props.module --模块 通道 优先接口获取\t\t\n log.debug("shjy_BK_Q01B 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, 0x68, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff,CS(1,buff),endian) \n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("shjy_BK_Q01B SSend error!")\n end\n ctx:done(result)\nend\n\n--68 10 00 84 00 14 03 02 00 05 02 36 00 00 00 00 ea\n\n--68 10 00 84 0 0 14 03 02 0 0 05 02 36 00 00 00 00 ea\n\n--moduleId=1 \n--"humidity": 2.5,\n--"temp": 3.7\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n local signx = tonumber(string.sub(hex,9,9))\n \n local anglex = tonumber(string.sub(hex,10,16))/10000\n local signy = tonumber(string.sub(hex,17,17))\n local angley = tonumber(string.sub(hex,18,24))/10000\n if signx==1 then\n anglex=anglex*-1\n end\n if signy==1 then\n angley=angley*-1\n end\n \n out.data = {\n anglex=anglex,\n angley=angley\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('shjy_BK_Q01B 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 17 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,2,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shjy_BK_Q01B 数据校验通过')\n return true\n--crc\nend\n\nCS=function(start,buff)\n local lcr = 0\n for i = start, string.len(buff)/2-1 do\n lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n end \n local value= bit:_and(lcr,0xff) \n return value\nend \n\n\n\t\n \n\n INLINE 2019-05-29 18:08:22.812+08 2019-05-30 17:08:35.569+08 2019-05-29 \N
+103b5fb6-4f69-4647-a725-61dcaa938a17 httpNewXL \N 卸料平台 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug('httpNewXL LUA http server start')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {}\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n log.debug('httpNewXL [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n local bodydataStr = httpbody.Body\n --local id = httpbody.ID\n --log.debug('httpNewXL hex.id=%s type=%s', httpbody.id, type(httpbody.id))\n local bodydata = json.decode(bodydataStr)\n local hxzId = bodydata.HxzId\n local serverIP = '218.3.126.49'\n local port = '19700'\n local serverTime = getTimeNowStr()\n local url = httpbody.URL\n log.debug('httpNewXL [%s] url=%s type=%s', moduleNo, url, type(url))\n local urlsperts = Split(url, '/')\n local len_urlsperts = table_leng(urlsperts)\n local type_long = urlsperts[len_urlsperts]\n local cmd_types = Split(type_long, '?')\n local cmd_type = cmd_types[1]\n log.debug('httpNewXL [%s] cmd_type=%s', moduleNo, cmd_type)\n if cmd_type == 'LoginDataUnloadingPlatform' then\n local response_LoginData_bodyStr = string.format('{"cmd":"LoginDataUnloadingPlatform","data":{"RangeSetError":"0","NoWorkInterval":60,"WindSpeedSetError":"0","WorkInterval":20,"GpsSetError":"0","ServerIp":"%s","HxzId":"%s","WeightSetError":"0","ServerTime":"%s","HxzFactory":"DEYE","ErrorDelay":90,"HeartBeatInterval":15,"LeaseFlag":"0","LockFlag":"0","IdSetError":"0","RecordId":"63098da082984bd499217f2c980064ad","HeightSetError":"0","AngleSetError":"0","ObliguitySetError":"0","ServerPort":%s},"status":0}', serverIP, hxzId, serverTime, port)\n asend_HttpResponse(response_LoginData_bodyStr)\n elseif cmd_type == 'BaseDataUnloadingPlatform' then\n local response_BaseData_bodyStr = '{"cmd":"BaseDataUnloadingPlatform","data":{},"status":0}'\n asend_HttpResponse(response_BaseData_bodyStr)\n elseif cmd_type == 'RealtimeDataUnloadingPlatform' then --实时数据\n local response_RealtimeDataCrane_bodyStr = '{"cmd":"RealtimeDataUnloadingPlatform","data":{},"status":0}'\n asend_HttpResponse(response_RealtimeDataCrane_bodyStr)\n --获取实时数据\n local RTime = bodydata.RTime --单次工作完成时刻\n local Weight = bodydata.Weight\n local WeightPercent = bodydata.WeightPercent\n local ObliguityX = bodydata.ObliguityX\n local ObliguityY = bodydata.ObliguityY\n local WeightStatus = bodydata.WeightStatus\n local ObliguityXStatus = bodydata.ObliguityXStatus\n local ObliguityYStatus = bodydata.ObliguityYStatus\n local Obliguity= bodydata.Obliguity\n out.data = {\n Weight = tonumber(Weight)*1000,\n WeightPercent = tonumber(WeightPercent),\n ObliguityX = tonumber(ObliguityX),\n ObliguityY = tonumber(ObliguityY),\n WeightStatus = tonumber(WeightStatus),\n ObliguityXStatus = tonumber(ObliguityXStatus),\n ObliguityYStatus = tonumber(ObliguityYStatus),\n Obliguity= tonumber(Obliguity)\n }\n out.time = unixtimestamp(RTime, moduleNo)\n\n log.debug('httpNewXL [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n elseif cmd_type == 'GpsData' then\n local response_GpsData_bodyStr = '{"cmd":"GpsData","data":{},"status":0}'\n asend_HttpResponse(response_GpsData_bodyStr)\n elseif cmd_type == 'RuntimeData' then\n local response_RuntimeData_bodyStr = '{"cmd":"RuntimeData","data":{},"status":0}'\n asend_HttpResponse(response_RuntimeData_bodyStr)\n local isOnline = 0\n local isDownline = 0\n local RTime = ''\n local DownlineTime = bodydata.DownlineTime\n local OnlineTime = bodydata.OnlineTime\n log.debug('httpNewXL [%s] DownlineTime=%s,OnlineTime=%s', moduleNo, DownlineTime, OnlineTime)\n if DownlineTime ~= '' then\n isDownline = 1\n RTime = DownlineTime\n else\n isOnline = 1\n RTime = OnlineTime\n end\n out.data = {\n isDownline = isDownline,\n isOnline = isOnline\n }\n out.time = unixtimestamp(RTime, moduleNo)\n\n log.debug('httpNewXL [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n elseif cmd_type == 'AlarmDataUnloadingPlatform' then\n local response_AlarmData_bodyStr = '{"cmd":"AlarmDataUnloadingPlatform","data":{},"status":0}'\n asend_HttpResponse(response_AlarmData_bodyStr)\n\n local alarmType = bodydata.AlarmType\n local alarmStartTime = bodydata.StartTime\n local alarmEndTime = bodydata.EndTime\n log.debug('httpNewXL [%s] alarmType=%s,alarmStartTime=%s,alarmEndTime=%s', moduleNo, alarmStartTime, alarmEndTime)\n if alarmStartTime ~= '' then\n out.time = unixtimestamp(alarmStartTime, moduleNo)\n end\n out.data = {\n AlarmType = alarmType\n }\n log.debug('httpNewXL [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n elseif cmd_type == 'AlarmStartUnloadingPlatform' then\n local response_AlarmData_bodyStr = '{"cmd":"AlarmStartUnloadingPlatform","data":{},"status":0}'\n asend_HttpResponse(response_AlarmData_bodyStr)\n\n local alarmType = bodydata.AlarmType\n local alarmStartTime = bodydata.StartTime\n local alarmValue = bodydata.AlarmValue\n log.debug('httpNewXL [%s] alarmType=%s,alarmStartTime=%s,alarmValue=%s', moduleNo, alarmStartTime, alarmValue)\n if alarmStartTime ~= '' then\n out.time = unixtimestamp(alarmStartTime, moduleNo)\n end\n out.data = {\n AlarmType = alarmType,\n AlarmValue=alarmValue\n }\n log.debug('httpNewXL [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\n end\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body = bodyString}\n ctx:asend(ack)\nend\n\ngetTimeNowStr = function()\n --2018-4-28 16:10:12\n local timeNowNum = os.time()\n local timeNowStr = os.date('%Y-%m-%d %H:%M:%S', timeNowNum)\n return timeNowStr\nend\n\nunixtimestamp = function(datestr, moduleNoStr)\n -- 2018-4-28 16:10:12\n --log.debug("fs_tj_lf_station datestr=%s",datestr)\n local datelist = Split(datestr, ' ')\n local date = Split(datelist[1], '-')\n local time = Split(datelist[2], ':')\n local year = tonumber(date[1])\n local month = tonumber(date[2])\n local day = tonumber(date[3])\n local hour = tonumber(time[1])\n local minute = tonumber(time[2])\n local second = tonumber(time[3])\n --log.debug("fs_tj_lf_station year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n log.debug('httpNewXL [%s] recordTime=%s', moduleNoStr, recordTime)\n return recordTime\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n INLINE 2019-05-29 14:49:17.37+08 2019-06-03 09:24:31.772+08 2019-05-29 \N
+8a773405-5a90-4499-8157-5de3276b5744 jclq_temp_ACA626T-3 \N 转移到设备实际厂家目录下,原在聚创目录下 1.0 85ba98a3-b552-4bcf-a736-30b525492481 85ba98a3-b552-4bcf-a736-30b525492481 f 85ba98a3-b552-4bcf-a736-30b525492481 Lua bit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\n\nstart=function()\n log.debug("start %s, ctx=", "jclq_temp_ACA626T-3.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0x68, endian)\n buff=iota.appendHexByte(buff, 4, endian) \n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jclq_temp_ACA626T-3 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jclq_temp_ACA626T-3 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) -- 1: 模块号 \n buff=iota.appendHexByte(buff, 4, endian) -- 2: 指令: 0x04 = 采集\n buff=iota.appendHexByte(buff,CS(1,buff),endian)\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,20000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo) \n end\n ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n\n --680D0084002010000000050500CB moduleId=0\n --"angleX": 2.01,\n\t--"angleY": 0,\n\t--"temp": 50.5\n\n log.debug("recv %s, ctx=%s", "jclq_temp_ACA626T-3.lua",hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==28) then \n\n local IDX_XDATA = 4 \n local IDX_YDATA = 7 \n local IDX_Temp = 10 \n\n local xFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA,'B') , 0xF0) , 4)\n local xSecondNum = bit:_and(iota.hexToByte(hex,IDX_XDATA,'B') , 0x0f) * 10\n local xThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_XDATA + 1,'B') , 0x0F) * 0.1\n local xForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_XDATA + 2,'B') , 0x0F) * 0.001\n\n local yFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA,'B') , 0xF0) , 4)\n local ySecondNum = bit:_and(iota.hexToByte(hex,IDX_YDATA,'B') , 0x0f) * 10\n local yThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_YDATA + 1,'B') , 0x0F) * 0.1\n local yForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_YDATA + 2,'B') , 0x0F) * 0.001\n\n local tFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp,'B') , 0xF0) , 4)\n local tSecondNum = bit:_and(iota.hexToByte(hex,IDX_Temp,'B') , 0x0f) * 10\n local tThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_Temp + 1,'B') , 0x0F) * 0.1\n local tForthNum =bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_Temp + 2,'B') , 0x0F) * 0.001\n\n local angleX = xSecondNum + xThirdNum + xForthNum\n local angleY = ySecondNum + yThirdNum + yForthNum\n local temp = tSecondNum + tThirdNum + tForthNum\n\n if (xFirst == 0x01) then \n angleX = -angleX\n end\n\n if (yFirst == 0x01) then\n angleY = -angleY\n end\n\n if (tFirst == 0x01) then\n temp = -temp\n end\n \n \n out.data = {\n anglex=angleX,\n angley=angleY,\n temperature=temp\n }\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("recv %s, ctx=%s", "jclq_temp_ACA626T-3.lua",json.encode(out))\n return json.encode(out)\nend\n\nCS=function(start,buff)\n local lcr = 0\n for i = start, string.len(buff)/2-1 do\n lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n end \n local value= bit:_and(lcr,0xff) \n return value\nend \n\n \n\n\n \n\n INLINE 2019-05-30 10:13:46.237+08 2019-05-30 10:13:46.237+08 2019-05-30 \N
+52e623de-58b8-4c3d-a50a-5264735bda7b GPRS-Design \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --字符串ascii->字符\nstart=function()\n log.debug("Design: start module %s", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n log.debug("Design: Data=%s",hex)\n\t--全局\n out={\n data ={},\n result = {}\n }\n\t\n local sData= toStrHex(hex)\n log.debug("Design: sData=%s",sData)\n local spliteData = Split(sData,',')\n\tlocal ok = tostring(spliteData[5]) --是否为有效数据\n\tlocal cmd = tostring(spliteData[3])\n\t\n\tif ok == "A" then\t\t\n\t\tlocal modulestr = tostring(spliteData[2]) --模块号\n\t\tlocal datetime = tostring(spliteData[4]) --时间\n\t\tlocal hour = tonumber(string.sub(datetime,1,2))\n\t\tlocal minute = tonumber(string.sub(datetime,3,4))\n\t\tlocal second = tonumber(string.sub(datetime,5,6))\n\t\tlocal date = tostring(spliteData[12]) --年月日\n\t\tlocal year = 2000 + tonumber(string.sub(date,5,6))\n\t\tlocal month = tonumber(string.sub(date,3,4))\n\t\tlocal day = tonumber(string.sub(date,1,2))\n\t\tlocal NSsign = tostring(spliteData[7]) --N/S \n\t\tlocal latitude = tonumber(string.sub(spliteData[6],1,2)) --纬度 \n\t\tlocal latdata = tonumber(string.sub(spliteData[6],3,-1))/60\n\t\tlatitude = latitude + latdata\n\t\tlocal EWsign = tostring(spliteData[9]) --E/W \n\t\tlocal longitude = tonumber(string.sub(spliteData[8],1,3)) --经度\n\t\tlocal londata = tonumber(string.sub(spliteData[8],4,-1))/60\n\t\tlongitude = longitude + londata\n\t\tlog.debug("Design: module=%s,Time=%s",modulestr,datetime)\n\t\tlocal speed = 0\n\t\tif spliteData[10] == "" then \n\t\t\tspeed =tonumber(spliteData[10]) --速度\n\t\tend\n\t\tlocal direction = spliteData[11]\n\t\tif longitude == 0 or latitude == 0 then\n \t\tout.result = {code=1011,msg="无效数据"} \n \telse\n out.data.longitude = longitude\n out.data.latitude = latitude\n out.data.speed = speed\n \tend\n\telse \t\t\n\t\tout.result = {code=1011,msg="无效数据"} \n\tend\n\n\n local resultData =json.encode(out)\n log.debug("Design: result=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\nlocal len = string.len(str);\nlocal hex='';\nfor i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\nend\nreturn hex;\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n INLINE 2019-05-09 13:52:59.415+08 2019-05-31 11:04:22.203+08 2019-05-09 \N
+83ea3d9a-afdf-4200-a973-6f613946df5b JCLQ_T4 \N 返回的新数据结构解析 1.0 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 a8df2f4a-3e2f-49f5-b1e2-b866493ade49 f a8df2f4a-3e2f-49f5-b1e2-b866493ade49 Lua start = function()\n log.debug('JCLQ_T4 start moudleid=%s', device.props.pointId or 'nil')\n local req = {\n type = 'http',\n url = '', --https://api.yespowering.cn/login/\n method = 'post',\n header = {}\n }\n\n req.url = device.props.tokenUrl\n log.debug('JCLQ_T4: url=%s', req.url)\n log.debug('设备原型=' .. json.encode(device))\n req.header['agent'] = '0'\n req.header['language'] = 'zh'\n req.header['brandid'] = '38'\n req.ContentType = 'application/json'\n\n local param = {\n account = device.props.account,\n pw = device.props.pw\n }\n req.body = json.encode(param)\n log.debug('JCLQ_T4:param=' .. json.encode(param))\n local ok, ack = ctx:ssend(req, 4000)\n\n if ack == nil then\n log.debug('JCLQ_T4: ok=%s', ok)\n else\n log.debug('JCLQ_T4: ok=%s,token=%s', ok, ack.body)\n end\n local out = {\n type = 2,\n data = {},\n result = {}\n }\n if not ok or ack == nil then\n out.result = {\n code = 1002,\n msg = 'timeout'\n }\n else --OK\n if ack.code == 200 and ack.body ~= '' then -- http应答\n local dataTable = json.decode(ack.body)\n local token = dataTable.data.userinfo.token\n log.debug('JCLQ_T4: token=%s ', token)\n log.debug('JCLQ_T4 ack=%s', ack.body)\n\n Sleep(1)\n --请求数据\n local datareq = {\n type = 'http',\n url = '', --url=https://api.yespowering.cn/dev/data/?box_id=35E81PV005\n method = 'get',\n header = {}\n }\n local boxId = device.props.boxId\n datareq.url = device.props.dataUrl .. '?box_id=' .. string.upper(boxId)\n log.debug('JCLQ_T4: data url=%s', datareq.url)\n --log.debug("设备原型="..json.encode(device))\n datareq.header['agent'] = '0'\n datareq.header['language'] = 'zh'\n datareq.header['brandid'] = '38'\n datareq.header['token'] = token\n datareq.ContentType = 'application/json'\n\n --get发送\n local dataok, dataack = ctx:ssend(datareq, 4000)\n\n if not dataok or dataack == nil then\n out.result = {\n code = 1002,\n msg = 'timeout'\n }\n else --OK\n if dataack.code == 200 and dataack.body ~= '' then -- http应答\n alldataTable = json.decode(dataack.body) -- 有数据\n local instant_data = alldataTable.data.instant_data\n local model = alldataTable.data.protocol --获取云盒类型 通过协议判断\n\n local r1, r1ok = redis.get(device.id .. '_endTime') --获取上次记录时间\n log.debug('JCLQ_T4 r1=%s,r1ok=%s', r1, r1ok)\n if r1ok and r1 ~= nil then\n beginTime = r1\n log.debug('JCLQ_T4 r1=%s,r1ok=%s,beginTime=%s', r1, r1ok, beginTime)\n else\n beginTime = os.time()\n --第一次默认当前时间\n redis.set(device.id .. '_endTime', tostring(beginTime))\n log.debug('JCLQ_T4 r1=%s,r1ok=%s', r1, r1ok)\n end\n local endTime\n for k, v in ipairs(instant_data) do\n log.debug('JCLQ_T4 k=%s, value=%s', k, json.encode(v))\n local moduleNo = v.order_id\n local timeStr = v.datetime\n --获取通道设备deviceId\n local childDevice = getDeviceInfo(moduleNo, 1)\n --\n if childDevice ~= nil then\n local timess = alldataTable.data.instant_data[k].datetime\n local timenow = unixtimestamp(timess)\n\n endTime = timenum\n log.debug('JCLQ_T4 beginTime=%s,endTime=%s', beginTime, endTime)\n if endTime <= tonumber(beginTime) then\n log.debug('JCLQ_T4 数据未刷新beginTime=%s,endTime=%s', beginTime, endTime)\n break\n else\n log.debug('JCLQ_T4 数据刷新beginTime=%s,endTime=%s', beginTime, endTime)\n end\n\n if model == 'P002-D022-B0078-S001' then\n local anglex = tonumber(alldataTable.data.instant_data[k].anglex)\n local angley = tonumber(alldataTable.data.instant_data[k].angley)\n local temp = tonumber(alldataTable.data.instant_data[k].temp)\n\n log.debug('JCLQ_T4 type(timess)=%s ,unixtimestamp(timess)=%s', type(timess), unixtimestamp(timess))\n --time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(item.recordTime)/1000)),\n local data1 = {\n data = {\n anglex = anglex,\n angley = angley,\n temperature = temp\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n end\n\n log.debug('JCLQ_T4 moudleid=%s data:%s', device.props.pointId, json.encode(out))\n end\n end\n --更新endTime\n if endTime > tonumber(beginTime) then\n if redis.set(device.id .. '_endTime', tostring(endTime)) then\n log.debug('JCLQ_T4 redis更新 set lasttime ok key=%s,value=%s', device.id .. '_endTime', tostring(endTime))\n end\n else\n log.debug('JCLQ_T4 redis不更新 ')\n end\n else\n log.debug('JCLQ2018: request data error:%s body:%s', ack.code, ack.body)\n end\n end\n else\n log.debug('JCLQ_T4: request data error:%s body:%s', ack.code, ack.body)\n end\n end\n ctx:done(json.encode(out))\nend\n\nSleep = function(n)\n local t0 = os.clock()\n while os.clock() - t0 <= n do\n end\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("JCLQ_T4 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n -- log.debug("JCLQ_T4:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n log.debug('JCLQ_T4 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n\n if tonumber(moduleStrCheck) == tonumber(moduleNoId) then\n log.debug('JCLQ_T4: m=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n else\n log.debug('JCLQ_T4: subdevices是nil')\n return nil\n end\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\nunixtimestamp = function(datestr)\n -- 2018-4-28 16:10:12\n log.debug('JCLQ_T4 datestr=%s', datestr)\n local datelist = Split(datestr, ' ')\n local datebegin = Split(datelist[1], '-')\n local dateend = Split(datelist[2], ':')\n local year = tonumber(datebegin[1])\n local month = tonumber(datebegin[2])\n local day = tonumber(datebegin[3])\n local hour = tonumber(dateend[1])\n local minute = tonumber(dateend[2])\n local second = tonumber(dateend[3])\n log.debug('JCLQ_T4 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s', year, month, day, hour, minute, second)\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n log.debug('JCLQ_T4 timenum=%s', timenum)\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n log.debug('JCLQ_T4 recordTime=%s', recordTime)\n return recordTime\nend\n INLINE 2019-05-30 10:59:03.532+08 2019-05-31 11:26:11.07+08 2019-05-30 \N
+83f5296c-98a1-4222-a8eb-8e65d7e459cf mas_1101 \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --[[\n协议号: 1101;\n协议名: modbus 温湿度.\n]]--\n--协议参考文档: “统一协议-V2012-04-28.xls”\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\n\nstart=function ()\n log.debug("mas_1101:load script %s, moduleId=%s", "mas_1101", device.moduleId or "[nil]")\n \n \n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("mas_1101 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("mas_1101 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\tsendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tlog.debug("mas_1101:发送数据=%s",sendBuff)\n\tlocal result=""\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\t\tlog.debug("mas_1101:接收数据=%s",resp)\n\telse\n local errorOut={\n data ={},\n result = {}\n }\n\t\terrorOut.result = {code=1001,msg='采集超时'} \n result=json.encode(errorOut)\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode(moduleNo_str)\n\t-- 32字节. 大字序\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0xFC); -- 1: 1 帧头 去:FC,回 FD\n\tbuff=iota.appendHexByte(buff, 0x01); -- 1: 2 设备类型,温湿度=1\t\n\tbuff=iota.appendHexWord(buff, moduleNo_str, BE); -- 2: 3/4 模块号\n\tbuff=buff.."00".."00"; -- 1 1 : 5/6 无用\n\tbuff=iota.appendHexByte(buff, 0x01); -- 1: 7 指令\n\tfor i = 8,30 do -- 1: 8/30 填写0\n\t\tbuff=buff.."00";\n\t\ti = i+1;\n\tend\n\tlocal crc = checkCRC8(buff,2)\n \tcrc =PadLeft(2,0,crc)\n\tbuff=buff..crc -- 1: 31 CRC8 加总异或,2-30\n --log.debug('mas_1101:CRC8 Buff = %s',crc)\n\tbuff=iota.appendHexByte(buff, 0xCF); -- 1: 32 结尾\n\t--log.debug("mas_1101:start %s, ctx=%s ", "mas_1101.lua",buff)\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 FD01002300000100005541CC000000000000000000000000000000000000C4DF\n--temp=25.5 Hum=0.85 module=35\nfunction protocol_decode(da,moduleNoCheck)\n \n\tlocal data = da;\n\t\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug("mas_1101:收到数据%s",data)\n\t--判断数据有效性\t\t\t\n\t--0xFD固定帧头,01是温湿度设备类型 0xDF固定帧尾\n local ErrorCode = IsValid(data,moduleNoCheck)\n if ErrorCode then \n\n log.debug("数据有效")\n\t\t--计算温湿度\n\t\tlocal humH = iota.hexToByte(data, 8, 'B');\n log.debug("mas_1101:humH等于:%s",humH)\n\t\tlocal humL = iota.hexToByte(data, 9, 'B');\n log.debug("mas_1101:humL等于:%s",humL)\n\t\tlocal hum = (humH*256 + humL) / 100.0;\n\t\tlocal temp = iota.hexToFloat(data, 10, 'B');\n log.debug("mas_1101:temp等于:%s",temp)\n\n\t\tout.data = {\n\t\ttemp=temp,\n\t\thumid= hum,\n\t\t};\n else\n out.result = {code=errcode,msg=errormsg} \n end\n\treturn json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n log.debug('mas_1101:开始校验数据%s',data)\n local startbyte = iota.hexToByte(data,0,'B');\n \tlocal devicetype = iota.hexToByte(data,1,'B');\n \tlocal endbyte = iota.hexToByte(data,31,'B');\n if data == nil or string.len(data)/2 ~= 32 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \tif startbyte ~= 0xFD or devicetype ~= 0x01 or endbyte ~= 0xDF then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleNoCheckStr) ~= iota.hexToUShort(data,2,'B') then\t\n errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNoCheckStr,iota.hexToUShort(data,2,'B'))\n errcode = 1004\n return false\n end\n log.debug('mas_1101:数据校验通过')\n return true\n--crc\nend\n\nfunction checkCRC8(val,start)\n local CRC8Table ={\n 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,\n 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,\n 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,\n 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,\n 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,\n 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,\n 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,\n 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,\n 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,\n 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,\n 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,\n 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,\n 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,\n 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,\n 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,\n 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53\n }\n local c = 0\n for i = start, string.len(val)/2 do\n local b = iota.hexToByte(val,i-1,'B')\n local index = bit:_xor(c,b)\n c = CRC8Table[index+1];\n end\n local crc8 = string.format("%X",c)\n return crc8\nend\n\nPadLeft=function(cnt,num,hex)\n local len = string.len(tostring(hex))\n local offset = cnt -tonumber(len)\n if offset == 0 then \n return hex\n else\n for i = 1,offset do \n hex = tostring(num)..tostring(hex)\n end\n end\n return hex\nend\n\n\n INLINE 2019-06-21 13:56:57.004+08 2019-06-21 13:56:57.004+08 2019-06-21 \N
+e32a4670-d2d9-4e72-bfab-ca042c491f7d shjy_DAS_BK-ZC08w \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua onData = function()\nend\n\nstart = function()\n log.debug('BK-ZC08w loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n log.debug('BK-ZC08w device=%s', json.encode(device))\n out = {\n type = 2,\n data = {},\n result = {}\n }\n local endian = 'B'\n local buff = ''\n local moduleNo\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = device.uplink.props.module\n --模块通道优先接口获取\n\n log.debug('BK-ZC08w设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n else\n moduleNo = device.props.moduleId\n\n log.debug('BK-ZC08w设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n end\n buff = buff .. 'F7601269'\n buff = iota.appendHexByte(buff, moduleNo, endian)\n --1:模块号\n buff = buff .. '4010000102030405060708090A0B0C0D0E0F'\n --1:指令:采集\n local wCRCin = 0x0000\n local wCPoly = 0x1021\n local wChar = 0\n local usDataLen = string.len(buff) / 2\n log.debug('BK-ZC08w usDataLen = %s', usDataLen)\n local var = 0\n while usDataLen > 0 do\n var = var + 1\n wChar = string.sub(buff, var, var + 1)\n var = var + 1\n wChar = tonumber(wChar, 16)\n wChar = bit.lshift(wChar, 8) --左移\n wCRCin = bit.bxor(wCRCin, wChar)\n for i = 0, 7 do\n local value = bit.band(wCRCin, 0x8000)\n if value > 0 then\n wCRCin = bit.lshift(wCRCin, 1) --左移\n wCRCin = bit.bxor(wCRCin, wCPoly) --异或\n if wCRCin > 0xFFFF then\n wCRCin = wCRCin - 0x10000\n end\n else\n wCRCin = bit.lshift(wCRCin, 1) --左移\n if wCRCin > 0xFFFF then\n wCRCin = wCRCin - 0x10000\n end\n end\n end\n --log.debug("BK-ZC08w END wCRCin = %X",wCRCin)\n usDataLen = usDataLen - 1\n end\n buff = buff .. string.format('%04X', wCRCin)\n log.debug('BK-ZC08w END buff = %s', buff)\n --ctx:asend(buff)\n --ctx:sleep(10)\n\t--ctx:asend(buff)\n ok, resp = ctx:ssend(buff, 15000)\n\n if ok then\n local ErrorCode = IsValidOut(resp)\n if ErrorCode then\n log.debug('BK-ZC08w 数据有效=%s', resp)\n allSubData = getAllDatas(resp)\n --发送指令\n local subdevices = device.dnlinks[1].devices\n\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do --插入16个通道\n \tlog.debug('BK-ZC08w child=%s', json.encode(child))\n channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\tif allSubData[channelNo]~=nil and allSubData[channelNo]>500 then\n \tlog.debug('BK-ZC08w 解析通道%s数据', channelNo)\n \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n \ttable.insert(out.data, result)\n \tend\n end\n end\n else\n log.debug('BK-ZC08w 数据无效=%s', resp)\n out.result = {code = ercode, msg = erormsg}\n end\n else\n log.debug('BK-ZC08w ok=false')\n out.result = {code = '1002', msg = 'ok=false'}\n end\n\n local resultData = json.encode(out)\n log.debug('BK-ZC08w resultData=%s', resultData)\n ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n local DataList = {}\n local subDataArea = string.sub(hexStr, 15, -5)\n local dataCount = string.len(subDataArea) / 10\n for i = 1, dataCount do\n local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 10 + 1, (i - 1) * 10 + 10)\n local channelStr = string.sub(singleChannelDataHex, 2, 2)\n local subChannel = tonumber(channelStr, 16)+1\n local subData = string.sub(singleChannelDataHex, 3, -1)\n DataList[subChannel] = iota.hexToFloat(subData, 0, 'L')\n \tlog.debug('BK-ZC08w getAllDatas DataList[%s]=%s',subChannel,DataList[subChannel])\n end\n return DataList\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n log.debug('BK-ZC08w datatable=%s', json.encode(datatable))\n local subData = {\n type = 1,\n data = {},\n device = '',\n result = {}\n }\n local freq = datatable[subChannelId]\n local temp = datatable[subChannelId+8]\n if childDevice ~= nil then\n if childDevice.uplink.capabilities[1].formula.metaid == '6cea049d-f41a-43f9-9e88-d8aeea9aca7f' then --振弦公式\n local k = tonumber(childDevice.uplink.capabilities[1].formula.props.K)\n\n local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n\t\t\tlocal kt = tonumber(childDevice.uplink.capabilities[1].formula.props.Kt)\n\t\t\tlocal t0 = tonumber(childDevice.uplink.capabilities[1].formula.props.To)\n\n log.debug('BK-ZC08w module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil and freq ~= nil and temp ~= nil then\n Phy = k * (freq ^ 2 - f0 ^ 2)+ kt * (temp - t0) \n end\n end\n log.debug('BK-ZC08w freq=%s,Phy=%s', freq, Phy)\n singleData = {\n data = {\n\t\t\t temperature=tonumber(string.format('%0.2f',temp)),\n rawValue = tonumber(string.format('%0.2f',freq)),\n physicalvalue = tonumber(string.format('%0.2f',Phy))\n },\n device = childDevice.id,\n type = 1\n }\n end\n --end\n\n --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n if device.dnlinks ~= nil then\n for k, dnlink in pairs(device.dnlinks) do\n for v, subdevice in pairs(dnlink.devices) do\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n log.debug('BK-ZC08w has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('BK-ZC08w has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\nIsValidOut = function(checkdata)\n log.debug('BK-ZC08w 开始校验数据=%s', checkdata)\n\n local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n if hexHeader ~= 0xF7 then\n ercode = 1001\n erormsg = 'HexCMD False'\n log.debug('BK-ZC08w HexCMDFalse[%s]', hexHeader)\n return false\n end\n return true\n --crc\nend INLINE 2019-06-03 10:53:04.598+08 2020-08-16 11:25:07.189+08 2019-06-03 \N
+5695aa0b-5148-4985-9d9c-bffa36a39edc anxin_DAS \N 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\nstart=function()\n\t--log.debug("start load yx_1401 moudle = %s ",device.uplink.props.module)\n log.debug("anxin_DAS alldevice = %s", json.encode(device))\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n \n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tlog.debug("anxin_DAS subdevices=%s,",json.encode(subdevices))\n\tif subdevices ~=nil then\n \tfor index,child in pairs(subdevices) do \n \t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("anxin_DAS 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t moduleNo=child.props.moduleId\n\t\t\t channelNo=child.props.channelId \n\t\t\t log.debug("anxin_DAS 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n\t\t -- local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexWord(buff, 10, endian) ---2: 传感器类型\n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x01, endian) -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian) -- 1: 通道号\n\t\t\tbuff=iota.appendHexByte(buff, 0x67, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0)\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\t--log.debug("anxin_DAS module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tlocal result='{}'\n if ok then \n\t\t\t result = unmarshall(resp,child,tostring(moduleNo),tostring(channelNo))--解析单条数据\n\t\t\t table.insert(out.data,result)\n\t\t\t\t--log.debug("anxin_DAS out=%s ",json.encode(out))\n\t\t\telse\n local errorSubData={\n data ={},\n device=child.id,\n type=1 \n }\n errorSubData.result = {code=1001,msg='通道采集超时'} \n \t\ttable.insert(out.data,errorSubData)\n\t\t\t log.debug("anxin_DAS module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id) \n\t\t\tend\n\t\t\t--log.debug('anxin_DAS 111111')\n end \n\t\t--log.debug('anxin_DAS 22222')\n \n end\n ctx:done(json.encode(out))\nend\n\n\n--000A000181016F0044E59D5D43BA104741CF000094A8 moduleId=1 channelID=1\n--000A0FA681096F0044E59D5D43BA104741CF00009659 moduleId=4006 channelID=9 原始值 frequency=1836.918 temp=25.875 \nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\nlog.debug("anxin_DAS subDevice=%s",json.encode(subDevice))\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n\t--local subModuleId=module\n\t--local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n log.debug("anxin_DAS module=%s,channel=%s [%s] recv=[%s].",subModuleId,subChannelId,subDevice.id,hex)\n if ErrorCode then \n\t\tlocal freState=iota.hexToByte(hex,7,'B')%16\n\t\tlocal tempState=iota.hexToByte(hex,7,'B')-16\n\t\t\n\t\tif freState ~= 0 or tempState ~= 0 then\n\t\t\tif freState ~=0 then\n\t\t\t\tif tempState ~=0 then\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE_TEMPWIRE'\n\t\t\t\terrcode = 140103\n\t\t\t\tlog.debug('anxin_DAS ERR_VIBRW_FREWIRE_TEMPWIRE. module=%s,channel=%s ',subModuleId,subChannelId)\t\t\t \n\t\t\t\tend\t\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE'\n\t\t\t\terrcode = 140101\n\t\t\t\t\n\t\t\tend\t\t\t\t\t\t\n\t\t\terrormsg = 'ERR_VIBRW_TEMPWIRE'\n\t\t\terrcode = 140102\n\t\tend\n\t\t\n\t\tlocal freq=iota.hexToFloat(hex,8,'B',3)\n\t\tlocal am=iota.hexToFloat(hex,12,'B',3)\n local temp = iota.hexToFloat(hex,16,'B',3)\n --log.debug("anxin_DAS module=%s,channel=%s [%s] [freq=%s,am=%s,temp=%s].",subModuleId,subChannelId,subDevice.id,freq,am,temp) \n\t\tlocal Phy=0\n\t\t--for index,child in pairs(subDevice.uplink.capabilities) do \n --if child.capabilityMetaId == "97be25b3-75df-4137-a479-22343213fe74" then --振弦公式\n\t\t\t\tlocal k = tonumber(subDevice.uplink.capabilities[1].formula.props.K )\n\t\t\t\tlocal kt = tonumber(subDevice.uplink.capabilities[1].formula.props.Kt )\n\t\t\t\tlocal f0 = tonumber(subDevice.uplink.capabilities[1].formula.props.Fo )\n\t\t\t\tlocal t0 = tonumber(subDevice.uplink.capabilities[1].formula.props.To)\n local B = tonumber(subDevice.uplink.capabilities[1].formula.props.B)\n log.debug("anxin_DAS module=%s,channel=%s [%s] formula params :k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",subModuleId,subChannelId,subDevice.id,k,kt,f0,t0,freq,temp,am)\n\t\t\t if k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)+B\n\t\t\t\t\tlog.debug("anxin_DAS channel=%s,Phy=%s",subChannelId,Phy)\n\t\t\t\tend\n\t\t--end\n\t\t--end\n\t\tsubData.data={\n\t\t\t\t\tfrequency=freq,\n\t\t\t\t\ttemperature=temp,\n\t\t\t\t\tam=am,\n \tphysicalvalue=Phy\n\t\t\t\t\t}\n\t\t\t\t\tlog.debug("anxin_DAS subData=%s",json.encode(subData)) \n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\n\nIsValid=function(data,moduleId,channelId)\n if data == nil or string.len(data)/2 ~= 22 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('anxin_DAS : Data is nil or invalid length. module=%s channel=%s recv = %s',moduleId,channelId,data)\n return false\n end\n if iota.hexToByte(data,4,'B') == 0xc0 then\n errcode = 1001\n errormsg = 'Modbus Error Code ' \n\t\tlog.debug('anxin_DAS : Modbus Error Code = %s. module=%s channel=%s recv = %s',iota.hexToByte(data,5,'B'),moduleId,channelId,data)\n return false\n end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,2,'B'))\n\tif moduleId~= moduleStr then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug('anxin_DAS : module error [errmodule=%s]. module=%s channel=%s recv = %s',moduleStr,moduleId,channelId,data)\n return false\n end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,5,'B'))\n\tif(channelStr=='0') then\n\t channelStr='1'\n\tend\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('anxin_DAS : channel error [errchannel=%s]. module=%s channel=%s recv = %s',channelStr,moduleId,channelId,data)\n\t\treturn false\n\tend\n return true\nend\n INLINE 2019-06-05 10:52:24.824+08 2020-09-15 09:22:06.749+08 2019-06-05 \N
+2c405e11-e6dd-407b-b5db-edb86696ce83 fs_lux_log \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug("fs_lux_log:device=%s",json.encode(device))\n log.debug("fs_lux_log:subdevice=%s",json.encode(device.dnlinks[1]))\n local linkcnt = #(device.dnlinks)\n log.debug("fs_lux_log:linkcnt=%s",linkcnt)\n local req = {\n type = "idau",\n payload = ""\n }\n local mop_log = {\n M = "c_shell",\n P = {} -- Get Log\n }\n\tmop_log.P.C = "cp /media/mmcblk0p1/lux.txt /media/mmcblk0p1/data/lux.txt"\n\t\n\n req.payload = json.encode(mop_log)\n log.debug("fs_lux_log:request=%s", json.encode(req))\n local ok, ack = ctx:ssend(req, 20000)\n result = {\n result = nil,\n type = 1,\n data = {\n ack = json.encode(ack)\n }\n }\n\tlog.debug("fs_lux_log:ack=%s", json.encode(ack))\n\n ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n if t == "host" then\n return 1\n elseif t == "relay" then\n return 2\n end\n return 3\nend\n INLINE 2019-09-24 11:47:38.263+08 2019-09-24 11:48:54.429+08 2019-09-24 \N
+2d247587-8e44-41f5-b585-772822f1841e Mop_DownLoad \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n\tlocal cmd = capability.param\n\tlog.debug("MOP:linkcnt=%s",cmd)\n\tupdate_mop(cmd)\n ctx:done(json.encode(out))\nend\n\n\n--需要配置更新\nupdate_mop = function(command)\n log.debug("MOP: update_mop command=%s",command)\n\n local mop_sensor = {\n M = "c_shell",\n P = {\n\t\t\tC = ""\n\t\t}\n }\n\tmop_sensor.P.C = command\n\tmop_sensor.payload= json.encode(mop_sensor)\n\tlog.debug("MOP:requestsensor=%s", json.encode(mop_sensor))\n\tlocal ok, ack = ctx:ssend(mop_sensor, 4000)\n\tlog.debug("MOP : mop_sensor ssend ack:%s ok:%s",json.encode(ack),ok)\n result = {\n result = nil,\n type = 1,\n data = {\n ack = json.encode(ack)\n }\n }\n\tlog.debug("MOP : ack= %s",result.data.ack)\n ctx:notify(json.encode(result))\nend\n\n--字符串ascii->字符\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n\t--判断输入类型\n\tif (type(hex)~="string") then\n\t\treturn nil,"hex2str invalid input type"\n\tend\n\t--拼接字符串\n\tlocal index=1\n\tlocal ret=""\n\tfor index=1,hex:len() do\n \tlocal str = string.format("%02X",hex:sub(index):byte())\n \tif str == '0A' or str =='0a' then\n \t\tstr = '0d0a' \t\t\n \tend\t\n \tif index == hex:len() then\n \t\tstr = str..'0d0a'\n \tend\n \tret=ret..str\n\tend\n\treturn ret\nend INLINE 2019-02-21 17:14:14.198+08 2019-09-24 09:58:54.511+08 2019-02-21 \N
+4bac8d93-5575-46f9-bf3a-ef0d3240ffc0 CPF_get_door_stat \N V1 a0524b8e-f69f-421e-b306-124dd37f4f1c a0524b8e-f69f-421e-b306-124dd37f4f1c f a0524b8e-f69f-421e-b306-124dd37f4f1c Lua start=function()\n local address="1A18110519"\n local cmd="8686860F"\n local ok,ack=ctx:ssend(address..cmd,3000)\n local channel=tonumber(device.props.channel) or 1\n local doors=tonumber(device.props.doors) or 1\n if channel <1 then channel=1 end\n if channel >8 then channel = 8 end\n if doors <1 then doors=1 end\n if doors >8 then doors = 8 end\n if doors> 8-channel+1 then doors=8-channel+1 end\n --log.debug("channel=%d, doors=%d",channel,doors)\n local result={\n type=1\n }\n if ok and ack~=nil and string.len(ack) == 44 then\n -- address+ 0001*8 +0F\n -- 1A18110519010100020003000400050006000700080F\n local p1,dn\n result.data={}\n for di=1,doors do\n p1 = 5+ (channel-1 + di-1)\n local dis=iota.hexToByte(ack,p1,'B')\n --log.debug("door[%d] = %d", di, dis)\n dn=string.format("status_d%d",di)\n result.data[dn] = (dis==0 and "1" or "0")\n end\n else\n result.result={\n code=1001,\n msg="Invalid ack:"..ack\n }\n end\n ctx:done(json.encode(result))\nend INLINE 2019-05-09 14:01:39.63+08 2019-05-09 15:29:12.088+08 2019-05-09 \N
+c3873468-2682-4721-9ed3-96219d02c017 lefu_settlement_2 \N 位移 1.0 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 f 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 Lua start=function()\n log.debug("anfang_inclinometer_1.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n local moduleStr=device.uplink.props.module\n log.debug("anfang_settlement_1 [%s] Data, ctx=%s",moduleStr,hex)\n local out={\n data ={},\n result = {}\n }\n --ff41584a23313832363036333634323923ffffffffffffff000500020cf15b0b9ffe01211111ffffffffF38Feeee\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n local length = iota.hexToInt(hex,34,'B')/1000.0000\n \n out.data = { \n length=length\n }\n local resultData =json.encode(out)\n log.debug("anfang_settlement_1 [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = errcode, msg = errormsg}\n ctx:done(json.encode(out))\n end \nend\n\nIsValid=function(data,deviceModule)\n if data == nil then\n errormsg = 'anfang_settlement_1:Data is nil'\n errcode = 1001\n \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n return false\n end\n local length= iota.hexToByte(data,28,'B')\n if (string.len(data)/2~=(length+34)) then\n errormsg = 'anfang_settlement_1:Data length is wrong'\n errcode = 1001\n \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n return false\n end\n local dataModule= iota.hexToShort(data,26,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('anfang_settlement_1 module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n return false\n end\n local sensorType= iota.hexToShort(data,24,'B')\n if (sensorType~=5) then\n errormsg = 'anfang_settlement_1:sensorType is wrong'\n errcode = 1001\n log.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n return false\n end\n local subdata=string.sub(data,1,-9)\n local crc=iota.appendHexCrc(subdata, 'B' ,0)\n log.debug("anfang_settlement_1.lua: crc, ctx=%s",crc)\n local subdatacrc=string.sub(data,1,-5)\n log.debug("anfang_settlement_1.lua: subdatacrc, ctx=%s",subdatacrc)\n if (string.lower(crc)~=string.lower(subdatacrc)) then\n errormsg = 'anfang_settlement_1:crc is wrong'\n errcode = 1001\n \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n return false\n end\n log.debug("anfang_settlement_1 [%s] 校验通过",deviceModule)\n return true\n \nend\n \n INLINE 2019-05-09 16:48:32.266+08 2019-05-09 16:48:32.266+08 2019-05-09 \N
+aa079e43-4dfe-40f0-81f7-03b3d30d9082 xaxh_inclinometer_1 \N 西安兴航测控科技有限公司\n 1.0 c418cbf6-8903-45be-a0da-bcccfeda9ac0 c418cbf6-8903-45be-a0da-bcccfeda9ac0 f c418cbf6-8903-45be-a0da-bcccfeda9ac0 Lua start=function()\n --log.debug("start %s, moduleId=%s", "xaxh_inclinometer_1.lua",device.props.moduleId or "null")\n local endian = 'B'\n local buff=''\n \tlocal moduleNo\n \tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=tonumber(device.uplink.props.module) \n\telse\n\t\tmoduleNo=device.props.moduleId\n\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0, endian)\n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 4, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("xaxh_inclinometer_1 m=%s ssend= [%s] ", moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("xaxh_inclinometer_1 m=%s recved= [%s] ", moduleNoStr,hex)\n --0c03080000000000000000ae7b\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\tlocal ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n local signX=1\n if tonumber(string.sub(hex, 7,7),16)==1 then\n signX=-1\n else\n signX=1\n end\n local signY=1\n if tonumber(string.sub(hex, 15,15),16)==1 then\n signY=-1\n else\n signY=1\n end \n local xDegree=signX*((tonumber(string.sub(hex, 8,8),16)*100)+(tonumber(string.sub(hex, 9,9),16)*16+tonumber(string.sub(hex, 10,10),16))+(tonumber(string.sub(hex, 11,11),16)*16+tonumber(string.sub(hex, 12,12),16))/100+(tonumber(string.sub(hex, 13,13),16)*16+tonumber(string.sub(hex, 14,14),16))/10000)\n local yDegree=signY*((tonumber(string.sub(hex, 16,16),16)*100)+(tonumber(string.sub(hex, 17,17),16)*16+tonumber(string.sub(hex, 18,18),16))+(tonumber(string.sub(hex, 19,19),16)*16+tonumber(string.sub(hex, 20,20),16))/100+(tonumber(string.sub(hex, 21,21),16)*16+tonumber(string.sub(hex, 22,22),16))/10000)\n out.data = {\n xDegree=xDegree,\n yDegree=yDegree\n }\n else\n out.result = {code = errorcode, msg = errormsg}\n end\n log.debug("xaxh_inclinometer_1 m=%s data: %s",moduleNoStr,json.encode(out.data))\n return json.encode(out)\nend\n\n\nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend INLINE 2017-11-21 11:40:56.318+08 2019-07-29 16:33:11.548+08 2017-11-21 \N
+a99f3fb6-8165-411c-a072-0615cbffe55b lrk_DL630A \N 1.0 bfe504c8-b84a-43ec-831a-5ce698db9950 bfe504c8-b84a-43ec-831a-5ce698db9950 f bfe504c8-b84a-43ec-831a-5ce698db9950 Lua --字符串ascii->字符\nstart=function()\n log.debug("lrk_DL630A: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n log.debug("lrk_DL630A: Data=%s",hex)\n\t--全局\n out={\n data ={},\n result = {}\n }\n\n local sData= toStrHex(hex)\n log.debug("lrk_DL630A: sData=%s",sData)\n local spliteData = Split(sData,'START;')\n\tlocal deviceData = Split(spliteData[2],';')\n \n\t\n\tlocal module = tonumber(deviceData[2]) --模块号\n\tlog.debug("lrk_DL630A: deviceData=%s",module)\n\tlocal xData = Split(deviceData[1],':')\n\tlocal xlength=tonumber(xData[2])\n\tlocal yData = Split(deviceData[2],':')\n\tlocal ylength=tonumber(yData[2])\n\t\n\tout.data={\n\txlength=xlength,\n\tylength=ylength\n\t}\n\n\n local resultData =json.encode(out) --输出传递到平台上\n log.debug("lrk_DL630A: result=%s",json.encode(out))\n ctx:notify(resultData)\n\tlocal start=device.props.start\n\tlocal cmd ='$LRKKJ$;JGND_SETTIME:' .. start .. ';END'\n\tlog.debug("lrk_DL630A: cmd=%s",cmd)\n\tctx:asend(toHexStr(cmd))\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex) \n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n--string split函数 分割相应的字符\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n\n INLINE 2019-11-14 14:05:23.77+08 2019-11-26 15:03:42.672+08 2019-11-14 \N
+3e489442-5b15-42ec-aa03-4a88c4c6a274 zj_carweight \N 车载 1.0 bda7431e-46ed-40b2-bf13-b511219a8fcb bda7431e-46ed-40b2-bf13-b511219a8fcb f bda7431e-46ed-40b2-bf13-b511219a8fcb Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s", "fs_weight_9803.lua")\nend\n\nonData=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n local out={\n data ={},\n result = {}\n }\n local IDX_Start = 0 -- 起始指令\n\tlocal IDX_CMD = 1; -- 数据字节\n local IDX_axeisCount = 2; -- 轴数\n local IDX_year = 6\n\tlocal IDX_month =5\n\tlocal IDX_day = 4\n local IDX_hour = 7\n local IDX_minute =8\n local IDX_second = 9\n\tlocal IDX_second1 = 10\n\tlocal IDX_Sequence=18; --序列号\n\tlocal IDX_CarModle = 22; -- 车类型\n\tlocal IDX_Roadway = 30; -- 车道号\n\tlocal IDX_Speed=32; --速度\n\tlocal IDX_AxieWeight1 = 34; -- 轴一P1重量\n local IDX_AxieWeight2 = 36; -- 轴二p1重量\n\tlocal IDX_AxieWeight3 = 38; -- 轴三p1重量\n\tlocal IDX_AxieWeight4 = 40; -- 轴四p1重量\n\tlocal IDX_AxieWeight5 = 42; -- 轴五p1重量\n\tlocal IDX_AxieWeight6 = 44; -- 轴六p1重量\n\tlocal IDX_AxieWeight7 = 46; -- 轴七p1重量\n\tlocal IDX_AxieWeight8 = 48; -- 轴八p1重量\n\tlocal IDX_AxieWeight9 = 50; -- 轴九p1重量\n\tlocal IDX_AxieWeight10 = 52; -- 轴十p1重量\n\tlocal IDX_AxieWeight11 = 54; -- 轴一P2重量\n local IDX_AxieWeight12 = 56; -- 轴二p2重量\n\tlocal IDX_AxieWeight13 = 58; -- 轴三p2重量\n\tlocal IDX_AxieWeight14 = 60; -- 轴四p2重量\n\tlocal IDX_AxieWeight15 = 62; -- 轴五p2重量\n\tlocal IDX_AxieWeight16 = 64; -- 轴六p2重量\n\tlocal IDX_AxieWeight17 = 66; -- 轴七p2重量\n\tlocal IDX_AxieWeight18 = 68; -- 轴八p2重量\n\tlocal IDX_AxieWeight19 = 70; -- 轴九p2重量\n\tlocal IDX_AxieWeight20 = 72; -- 轴十p2重量\n\tlocal IDX_TotalBase1 =74; -- 轴距一\n\tlocal IDX_TotalBase2 =76; -- 轴距二\n\tlocal IDX_TotalBase3 =78; -- 轴距三\n local IDX_TotalBase4 =80; -- 轴距四\n\tlocal IDX_TotalBase5 =82; -- 轴距五\n\tlocal IDX_TotalBase6 =84; -- 轴距六\n\tlocal IDX_TotalBase7 =86; -- 轴距七\n\tlocal IDX_TotalBase8 =88; -- 轴距八\n\tlocal IDX_TotalBase9 =90; -- 轴距九\n\tlocal IDX_Carlength = 92; -- 车长\n\tlocal IDX_Sensor=106; --传感器是否失效\n\tlocal IDX_Temp=110; --温度\n\tlocal IDX_Effective=112; --有效值\n\t local IDX_Weight = 114; -- 重量\n\t local IDX_Cardirection = 120; -- 方向\n\n\t local axiStart = iota.hexToByte(hex,IDX_Start,'B'); --起始位\n log.debug("startw %s", "fs_weight_9803.lua")\n \n \n\tlocal axiCMD = iota.hexToByte(hex,IDX_CMD); -- 数据字节\n\t\n local axisnum = iota.hexToUShort(hex,IDX_axeisCount,'L'); -- 轴数\n\t log.debug("fs_weight_9803 axisnum=%s",axisnum)\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then \n local year = iota.hexToByte(hex,IDX_year,"B")\n\t log.debug("fs_weight_9803 year=%s",year)\n if year ~= nil then\n year= year + 2000\n end\n\t\tlocal month =iota.hexToByte(hex,IDX_month,"B")\n log.debug("fs_weight_9803 year=%s",year)\n\t\tlocal day = iota.hexToByte(hex,IDX_day,"B")\n\t\tlocal hour = iota.hexToByte(hex,IDX_hour,"B")\n\t\tlocal minute = iota.hexToByte(hex,IDX_minute,'B')\n\t\tlocal second1 = iota.hexToByte(hex,IDX_second,'B')\n\t\tlocal second2= iota.hexToByte(hex,IDX_second1,'B')\n\t\tlocal second=second1.."."..second2\n\t\tlog.debug("fs_weight_9803 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n\t\tlocal timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\t\tlog.debug("fs_weight_9803 timenum=%s",timenum)\n\t\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\t\tlog.debug("fs_weight_9803 recordTime=%s",recordTime)\n\t\tlocal Seq1=string.sub(hex,37,38)\n\t\tlog.debug("fs_weight_9803 Seq1=%s",Seq1)\n\t\tlocal Seq2=string.sub(hex,39,40)\n\t\tlog.debug("fs_weight_9803 Seq2=%s",Seq2)\n\t\tlocal Seq3=string.sub(hex,41,42)\n\t\tlog.debug("fs_weight_9803 Seq3=%s",Seq3)\n\t\tlocal Seq4=string.sub(hex,43,44)\n\t\tlog.debug("fs_weight_9803 Seq4=%s",Seq4)\n\t\tlocal axieSequence =Seq4..Seq3..Seq2..Seq1\n\t\tlog.debug("fs_weight_9803 axieSequence=%s",axieSequence)\n\t\taxieSequence =tonumber(axieSequence,16)\n\t\t--local axieSequence = iota.hexToFloat(hex,IDX_sequence,'L'); --序列号\n\t --车型\n\t\tlocal Modle1rist=string.sub(hex,45,47);\n\t\tlocal axieCarModle =toStrHex(Modle1rist)\n\t\tlog.debug("fs_weight_9803 axieCarModle=%s",axieCarModle)\n\t\tlocal axieRoadway = iota.hexToUShort(hex,IDX_Roadway,'L') --车道号\n\t\tlocal axieSpeed = iota.hexToUShort(hex,IDX_Speed,'L') --速度\n\t log.debug("fs_weight_9803 axieSpeed=%s",axieSpeed)\n\t\tlocal axieWeight1 = iota.hexToShort(hex,IDX_AxieWeight1,'L') --轴一P1重量\n\t\tlocal axieWeight2 = iota.hexToShort(hex,IDX_AxieWeight2,'L') --轴二p1重量\n\t\tlocal axieWeight3 = iota.hexToShort(hex,IDX_AxieWeight3,'L') --轴三p1重量\n\t\tlocal axieWeight4 = iota.hexToShort(hex,IDX_AxieWeight4,'L')\n\t\tlocal axieWeight5 = iota.hexToShort(hex,IDX_AxieWeight5,'L')\n\t\tlocal axieWeight6 = iota.hexToShort(hex,IDX_AxieWeight6,'L')\n\t\tlocal axieWeight7 = iota.hexToShort(hex,IDX_AxieWeight7,'L')\n\t\tlocal axieWeight8 = iota.hexToShort(hex,IDX_AxieWeight8,'L')\n\t\tlocal axieWeight9 = iota.hexToShort(hex,IDX_AxieWeight9,'L')\n\t\tlocal axieWeight10 = iota.hexToShort(hex,IDX_AxieWeight10,'L')\n\t\tlocal axieWeight11 = iota.hexToShort(hex,IDX_AxieWeight11,'L')\n\t\tlocal axieWeight12 = iota.hexToShort(hex,IDX_AxieWeight12,'L')\n\t\tlocal axieWeight13 = iota.hexToShort(hex,IDX_AxieWeight13,'L')\n\t\tlocal axieWeight14 = iota.hexToShort(hex,IDX_AxieWeight14,'L')\n\t\tlocal axieWeight15 = iota.hexToShort(hex,IDX_AxieWeight15,'L')\n\t\tlocal axieWeight16 = iota.hexToShort(hex,IDX_AxieWeight16,'L')\n\t\tlocal axieWeight17 = iota.hexToShort(hex,IDX_AxieWeight17,'L')\n\t\tlocal axieWeight18 = iota.hexToShort(hex,IDX_AxieWeight18,'L')\n\t\tlocal axieWeight19 = iota.hexToShort(hex,IDX_AxieWeight19,'L')\n\t\tlocal axieWeight20 = iota.hexToShort(hex,IDX_AxieWeight20,'L')\n\t\tlocal axieTotalBase1 = iota.hexToShort(hex,IDX_TotalBase1,'L'); -- 轴距一\n\t\tlocal axieTotalBase2 = iota.hexToShort(hex,IDX_TotalBase2,'L'); -- 轴距二\n\t\tlocal axieTotalBase3 = iota.hexToShort(hex,IDX_TotalBase3,'L'); -- 轴距三\n\t\tlocal axieTotalBase4 = iota.hexToShort(hex,IDX_TotalBase4,'L'); -- 轴距四\n\t\tlocal axieTotalBase5 = iota.hexToShort(hex,IDX_TotalBase5,'L'); -- 轴距五\n\t\tlocal axieTotalBase6 = iota.hexToShort(hex,IDX_TotalBase6,'L'); -- 轴距六\n\t\tlocal axieTotalBase7 = iota.hexToShort(hex,IDX_TotalBase7,'L'); -- 轴距七\n\t\tlocal axieTotalBase8 = iota.hexToShort(hex,IDX_TotalBase8,'L'); -- 轴距八\n\t\tlocal axieTotalBase9 = iota.hexToShort(hex,IDX_TotalBase9,'L'); -- 轴距九\n\t\tlocal axieCarlength= iota.hexToShort(hex, IDX_Carlength,'L'); -- 车长\n\t\tlocal axieEffective= iota.hexToShort(hex, IDX_Effective,'L'); -- 有效值\n\t\tlocal axieTemp= iota.hexToShort(hex,IDX_Temp,'L'); --温度\n \tlog.debug("fs_weight_9803 axieTemp=%s",axieTemp);\n\t\tif axieTemp~= nil then\n axieTemp = axieTemp -100\n end\n\t\tlocal axieWeight = iota.hexToUInt(hex,IDX_Weight,'L'); --重量\n\t\tlocal axieCardirection= iota.hexToShort(hex,IDX_Cardirection,'L') --方向\n\t\tout.data = {\n\t\t CMD =axiCMD,\n\t\t\tCardirection = axieCardirection,\n\t\t\tSequence = axieSequence,\n\t\t\tshaftnum=axisnum,\n\t\t\taxieCarModle1rist=axieCarModle,\n \n axieRoadway= axieRoadway,\n\t\t\tSpeed=axieSpeed,\n axieWeight1 = axieWeight1,\n axieWeight2= axieWeight2,\n axieWeight3= axieWeight3,\n axieWeight4= axieWeight4,\n axieWeight5= axieWeight5,\n axieWeight6= axieWeight6,\n axieWeight7= axieWeight7,\n axieWeight8= axieWeight8,\n\t\t\taxieWeight9= axieWeight9,\n\t\t\taxieWeight10= axieWeight10,\n\t\t\taxieWeight11= axieWeight11,\n\t\t\taxieWeight12= axieWeight12,\n\t\t\taxieWeight13= axieWeight13,\n\t\t\taxieWeight14= axieWeight14,\n\t\t\taxieWeight15= axieWeight15,\n\t\t\taxieWeight16= axieWeight16,\n\t\t\taxieWeight17= axieWeight17,\n\t\t\taxieWeight18= axieWeight18,\n\t\t\taxieWeight19= axieWeight19,\n\t\t\taxieWeight20= axieWeight20,\n\t\t\taxieTotalBase1=axieTotalBase1,\n axieTotalBase2=axieTotalBase2,\n axieTotalBase3=axieTotalBase3,\n axieTotalBase4=axieTotalBase4,\n axieTotalBase5=axieTotalBase5,\n axieTotalBase6=axieTotalBase6,\n axieTotalBase7=axieTotalBase7,\n axieTotalBase8=axieTotalBase8,\n\t\t\taxieTotalBase9=axieTotalBase9,\n\t\t\tCarlength=axieCarlength,\n Sensor=axieSensor, \n temperature = axieTemp,\n\t\t\tEffective = axieEffective,\n\t\t\tWeight= axieWeight,\n\t\t\tTime=recordTime\n }\t\t\n\t\t\n\t\t--out.time=recordTime\n else\n out.result = {code=errcode,msg=errormsg} \n end\n\t\n local resultData =json.encode(out)\n ctx:notify(resultData)\nend\n\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\nIsValid=function(data)\n log.debug('BK_WaterLevel开始校验数据')\n \n if iota.hexToUShort(data,IDX_Sensor,'L') == 0x01 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if iota.hexToUShort(data,axiStart,'L') == 0x02 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n log.debug('BK_WaterLevel数据校验通过')\n return true\n--crc\nend\n\n\n INLINE 2019-05-13 16:10:10.396+08 2019-05-14 09:31:29.124+08 2019-05-13 \N
+7fa97af4-4ccf-4d47-9e33-776ec9f952cc test \N 1.0 19fa25f4-9ba9-4e93-9025-e67b34db9cf7 19fa25f4-9ba9-4e93-9025-e67b34db9cf7 f 19fa25f4-9ba9-4e93-9025-e67b34db9cf7 Lua start=function()\n local year = string.format('%02x', tonumber(os.date('%y', os.time())))\n local month = string.format('%02x', tonumber(os.date('%m', os.time())))\n datatimeHexStr = year .. month\n log.debug("datatimeHexStr=%s",datatimeHexStr)\n\nend INLINE 2019-05-13 17:01:19.796+08 2019-05-15 14:41:10.659+08 2019-05-13 \N
+60523f46-1b58-4910-8a1f-7a111e1e0ccb BSIL-MICRO-MCU \N 1.0 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 f 679f43f2-ff7d-440f-9e36-6ad3beb8d574 Lua --//02 协议分析/2016-09-23/BGK协议 v2.0.doc\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]]\nstart = function()\n log.debug('load script %s, moduleId=%s', 'BGK_4000', device.props.moduleId or '[nil]')\n local endian = 'B'\n local buff = ''\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n if subdevices ~= nil then\n log.debug('BGK_4000:LUA:subdevices : data is =%s', json.encode(subdevices))\n for index, child in pairs(subdevices) do\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n channelNo = tonumber(child.uplink.props.channel)\n log.debug('BGK_4000 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ', moduleNo, channelNo, json.encode(moduleNo), child.props.moduleId)\n else\n moduleNo = child.props.moduleId\n channelNo = child.props.channelId\n log.debug('BGK_4000 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s', moduleNo, channelNo, json.encode(child.uplink.props))\n end\n\n log.debug('BGK_4000:模块%s通道%s的deviceId是%s:', moduleNo, channelNo, tostring(child.id))\n --log.debug("BGK_4000:子通道设备原型child=%s",json.encode(child))\n local cmdstr = string.format('%02d', tonumber(moduleNo)) .. '21' .. string.format('%02d', tonumber(channelNo))\n log.debug('BGK_4000:模块%s通道%s的cmdstr是:%s', moduleNo, channelNo, cmdstr)\n local lcr_str = LCR(cmdstr)\n lcr_str = string.upper(lcr_str)\n --转大写字符\n log.debug('BGK_4000:模块%s通道%s的lcr_str是:%s', moduleNo, channelNo, lcr_str)\n local request_asciiStr = ':' .. cmdstr .. lcr_str\n log.debug('BGK_4000:模块%s通道%s的request_asciiStr是:%s', moduleNo, channelNo, request_asciiStr)\n local buff = toHexStr(request_asciiStr)\n buff = iota.appendHexByte(buff, 0x0d, endian)\n buff = iota.appendHexByte(buff, 0x0a, endian)\n ok, resp = ctx:ssend(buff, 15000)\n local result = '{}'\n if ok and type(resp) ~= 'table' then --and json.encode(resp)~="null"\n log.debug('BGK_4000:模块%s通道%s的数据接收成功,开始解析=%s,type=%s,json.encode=%s,type(resp)==table=%s', moduleNo, channelNo, resp, type(resp), json.encode(resp), type(resp) == 'table')\n result = unmarshall(resp, child, moduleNo, channelNo)\n --解析单条数据\n table.insert(out.data, result)\n else\n log.debug('BGK_4000:模块%s通道%s的数据接收失败', moduleNo, channelNo)\n end\n end\n else\n log.debug('BGK_4000 subdevices是nil')\n return nil\n end\n\n log.debug('BGK_4000 out序列化')\n local resultData = json.encode(out)\n log.debug('BGK_4000 out序列化结果 : out is =%s', json.encode(out))\n ctx:done(resultData)\nend\n\n--3A3031323130312B302E3030303030202B39393737363036440D0A\n--moduleId=1,channelId=1\n-- "frequency": 0,\n--"phy": -80.6607188196787,\n--"temperature": -71.01792619970792\n\nunmarshall = function(hex, childDevice, subModuleId, subChannelId)\n local subData = {\n data = {},\n device = childDevice.id,\n type = 1\n }\n\n log.debug('BGK_4000:模块%s通道%s的deviceId是:%s', subModuleId, subChannelId, json.encode(childDevice))\n local ErrorCode = IsValid(hex, subModuleId, subChannelId)\n if ErrorCode then\n --码流转string\n local responseStr = toStrHex(hex)\n log.debug('BGK_4000:模块%s通道%s的解析字符串是:%s', subModuleId, subChannelId, responseStr)\n local freStr = string.sub(responseStr, 8, 15)\n local freq = tonumber(freStr)\n local data1 = tonumber(string.format('%5.3f', freq))\n local resistanceStr = string.sub(responseStr, 16, 23)\n local dResistance = tonumber(resistanceStr)\n log.debug('BGK_4000:模块%s通道%s的原始值是:freStr=%s,resistanceStr=%s', subModuleId, subChannelId, freStr, resistanceStr)\n --阻值转温度计算公式常数A,B,C\n local A = 1.4051\n local B = 2.369\n local C = 1.019\n local temp = 1 / (A * math.pow(10, -3) + B * math.pow(10, -4) * math.log(dResistance) + C * math.pow(10, -7) * math.pow(math.log(dResistance), 3)) - 273.2\n temp = tonumber(string.format('%3.2f', temp))\n local Phy\n if childDevice.uplink.capabilities[1].formula.metaid == '60039eec-76e3-47ec-9024-32d1bbd55287' then --振弦公式 metaid\n local k = childDevice.uplink.capabilities[1].formula.props.K or nil\n local kt = childDevice.uplink.capabilities[1].formula.props.Kt or nil\n local f0 = childDevice.uplink.capabilities[1].formula.props.Fo or nil\n local t0 = childDevice.uplink.capabilities[1].formula.props.To or nil\n log.debug('BGK_4000:模块%s通道%s的公式计算参数是:k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s', subModuleId, subChannelId, k, kt, f0, t0, freq, temp)\n if k ~= nil and kt ~= nil and f0 ~= nil and t0 ~= nil then\n Phy = k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n log.debug('BGK_4000:模块%s通道%s的phy是:%s', subModuleId, subChannelId, Phy)\n end\n end\n\n if childDevice.uplink.capabilities[1].formula.metaid == '121058ad-ddc3-41a9-bd75-36e58162a204' then --基康倾角仪转换公式D=G×L(R1-R0) metaid\n local Rx0 = childDevice.uplink.capabilities[1].formula.props.Rx0 or nil\n local Ry0 = childDevice.uplink.capabilities[1].formula.props.Ry0 or nil\n local G = childDevice.uplink.capabilities[1].formula.props.G or nil\n local L = childDevice.uplink.capabilities[1].formula.props.L or nil\n log.debug('BGK_4000:模块%s通道%s的公式计算参数是:Rx0=%s,Ry0=%s,G=%s,L=%s', subModuleId, subChannelId, Rx0, Ry0, G, L)\n if Rx0 ~= nil and Ry0 ~= nil and G ~= nil and L ~= nil then\n anglex = data1\n changedx = G * L * (data1 - Rx0)\n angley = dResistance\n changedy = G * L * (dResistance - Ry0)\n log.debug('BGK_4000:模块%s通道%s的anglex=%s,angley=%s', subModuleId, subChannelId, anglex, angley)\n end\n end\n\n if childDevice.uplink.capabilities[1].formula.metaid == '1a7e610f-1da2-4a2c-bbce-2faa2ead0ba9' then --模拟量线性转换数字量公式\n local dH = childDevice.uplink.capabilities[1].formula.props.dH or nil\n local dL = childDevice.uplink.capabilities[1].formula.props.dL or nil\n local aH = childDevice.uplink.capabilities[1].formula.props.aH or nil\n local aL = childDevice.uplink.capabilities[1].formula.props.aL or nil\n log.debug('BGK_4000:模块%s通道%s的公式计算参数是:dH=%s,dL=%s,aH=%s,aL=%s', subModuleId, subChannelId, dH, dL, aH, aL)\n if dH ~= nil and dL ~= nil and aH ~= nil and aL ~= nil then\n Phy = (dH - dL) / (aH - aL) * (data1 - aL) + dL\n log.debug('BGK_4000:模块%s通道%s的phy是:%s', subModuleId, subChannelId, Phy)\n end\n end\n if childDevice.uplink.capabilities[1].formula.metaid == '5c22c26c-2a9e-439f-b585-2d5e1031fc23' then --定制公式 P=K2*(R1-R0)^2+K1*(R1-R0)+C\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1 or nil\n local K2 = childDevice.uplink.capabilities[1].formula.props.K2 or nil\n local R0 = childDevice.uplink.capabilities[1].formula.props.R0 or nil\n local C = childDevice.uplink.capabilities[1].formula.props.C or nil\n local P = childDevice.uplink.capabilities[1].formula.props.P or 1 --用于原始数据转换 比例\n log.debug('BGK_4000:模块%s通道%s的公式计算参数是:K1=%s,K2=%s,R0=%s,C=%s,P=%s', subModuleId, subChannelId, K1, K2, R0, C, P)\n if K1 ~= nil and K2 ~= nil and R0 ~= nil and C ~= nil then\n R1 = freq ^ P\n Phy = K2 * (R1 - R0) ^ 2 + K1 * (R1 - R0) + C\n Phy = tonumber(string.format('%6.3f', Phy))\n log.debug('BGK_4000:模块%s通道%s的phy是:%s', subModuleId, subChannelId, Phy)\n end\n end\n\n subData.data = {\n frequency = freq,\n modulus = data1, --模拟量\n temperature = temp,\n physicalvalue = Phy, --物理量\n anglex = anglex,\n angley = angley,\n changedx = changedx,\n changedy = changedy\n }\n else\n subData.result = {code = errcode, msg = errormsg}\n end\n return subData\nend\n\nLCR = function(buff)\n log.debug('BGK_4000:lcr buff=%s', buff)\n local lcr = 0\n for i = 0, string.len(buff) / 2 - 1 do\n lcr = lcr + tonumber(string.sub(buff, 1 + 2 * i, 2 * (i + 1)), 16)\n end\n log.debug('BGK_4000:lcr累加结果%s', tonumber(lcr))\n lcr = lcr % 255\n local value = 0xff - lcr + 1\n local lcrResult_str = string.sub(string.format('%#x', value), 3, -1)\n --去除0x\n log.debug('BGK_4000:lcr校验结果%s', lcrResult_str)\n return lcrResult_str\nend\n\nIsValid = function(data, moduleId, channelId)\n log.debug('BGK_4000:模块%s通道%s开始校验数据=%s', moduleId, channelId, data)\n if data == nil or string.len(data) / 2 ~= 27 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n log.debug('BGK_4000:模块%s通道%s 数据校验失败:Data is nil or invalid length', moduleId, channelId)\n return false\n end\n if iota.hexToByte(data, 0, 'B') ~= 0x3a or iota.hexToByte(data, 25, 'B') ~= 0x0d or iota.hexToByte(data, 26, 'B') ~= 0x0a then\n errcode = 1001\n errormsg = 'Hex CMD False '\n log.debug('BGK_4000:模块%s通道%s 数据校验失败:Data is nil or invalid length', moduleId, channelId)\n return false\n end\n\n --码流转string\n local checkStr = toStrHex(data)\n log.debug('BGK_4000:模块%s通道%s 数据校验:checkStr=%s', moduleId, channelId, checkStr)\n local moduleStr = string.sub(checkStr, 2, 3)\n local channelStr = string.sub(checkStr, 6, 7)\n local error_index=string.sub(checkStr, 8, 8)\n if tonumber(moduleStr) ~= tonumber(moduleId) then\n errormsg = string.format('Invalid acq moduleId=%s[%s]', moduleStr, moduleId)\n errcode = 1004\n log.debug('BGK_4000:模块%s通道%s 数据校验失败:Invalid acq moduleId=%s', moduleId, channelId, moduleStr)\n return false\n end\n\n if tonumber(channelStr) ~= tonumber(channelId) then\n errormsg = string.format('Invalid acq channelId=%s[%s]', channelStr, channelId)\n errcode = 1004\n log.debug('BGK_4000:模块%s通道%s 数据校验失败:Invalid acq channelId=%s', moduleId, channelId, channelStr)\n return false\n end\n\n if error_index == 'E' then\n errormsg = string.format('error data=%s[%s]',data,checkStr)\n errcode = 1004\n log.debug('BGK_4000:模块%s通道%s 数据校验失败 %s', moduleId, channelId, errormsg)\n return false\n end\n\n log.debug('BGK_4000:模块%s通道%s校验数据通过!!!', moduleId, channelId)\n return true\nend\n\ngetIndex = function(data) --用于IsValid\n local len = string.len(data) / 2\n for n = 1, len do\n local value = string.sub(data, 2 * n - 1, 2 * n)\n if value == '0a' then\n return n\n end\n end\n return 0\nend\n\n--HEX字符串->ascii字符串\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend INLINE 2019-05-14 14:14:05.819+08 2019-05-22 18:04:54.072+08 2019-05-22 \N
+f4925c79-04d0-42e2-b326-cf291ed7589d shjy_temp \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_temp", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x16, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("shjy_temp SSend error!")\n end\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local physicalvalue\t= iota.hexToFloat(hex,3,'B')\n \n \n out.data = {\n\t\t\tphysicalvalue=tonumber(string.format("%0.3f",physicalvalue))\n }\n log.debug("shjy_temp: 结果=%s",physicalvalue)\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('shjy_temp 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shjy_temp 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2018-06-21 16:28:42.209+08 2019-07-17 16:30:00.967+08 2018-06-21 \N
+4f00f469-4a6a-41a1-94fa-7f669cfbed12 fs_trwsd_mx \N 土壤温湿度 华汉维科技(淘宝妙昕) 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//D:\\SVN\\201909项目\\土壤温湿度变送器资料\\485型土壤温湿度传感器使用说明书.doc\nstart=function()\n \tlocal endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 3, endian) -- 1: 指令: 0x03 = 采集\n buff=iota.appendHexWord(buff, 2 ,endian) -- 2: 温湿度\n\tbuff=iota.appendHexWord(buff, 2 ,endian) -- 2:寄存器个数\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n log.debug(string.format("fs_trwsd_mx out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n ctx:done(result)\nend\n\n\n--02030400ef0087b8a4\n--"humidity": 13.5,\n--"temperature": 23.9\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \tlocal humidy= iota.hexToShort(hex,3,'B')/10\n local Temp = iota.hexToShort(hex,5,'B')/10\n \n out.data = {\n temperature=Temp,\n \thumidity = humidy\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('fs_trwsd_mx 开始校验数据 %s',data)\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleNo_check) ~= tonumber(string.sub(data,1,2)) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('fs_trwsd_mx 数据校验通过')\n return true\n--crc\nend\n\nonData=function()\nend\n INLINE 2019-09-16 16:38:52.705+08 2019-11-26 14:23:00.86+08 2019-09-16 \N
+aa948108-11fb-414d-a182-29cbc7bf1cce mas_qixing_wl \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n log.debug("start %s, ctx=", "mas_qixin.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n \tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=tonumber(device.uplink.props.module) --模块 通道 优先接口获取\t\t\t\n\t\tlog.debug("mas_qixin 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\t moduleNo=device.props.moduleId \n\t\t log.debug("mas_qixin 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 3, endian) -- 1: 指令: 0x01 = 采集\n \tbuff=iota.appendHexWord(buff, 0x16, endian) \n\tbuff=iota.appendHexWord(buff, 0x12, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n\n ok,resp=ctx:ssend(buff,15000)\n\tlog.debug("mas_qixin:发送数据=%s",buff)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n\t\tlog.debug("mas_qixin 接收数据=%s,解析值=%s",resp,result)\n\t\tctx:done(result)\n end\n \nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n\n\t-- 2 2 1 4 4 2\n\t-- 0001 26C6 81 0D6FFDA1 FFDACFBE F831\n\t--000107DE8112121213131313E1F9 \n\t-- moduleId= 结果0,0\n\t--print("parsing data", hex)\n\tlocal pressure = iota.hexToFloat(hex,3,'B');\n\tlocal temperature = iota.hexToFloat(hex,35,'B');\n\tlog.debug("mas_qixin 接收数据pressure=%s,temperature=%s",pressure,temperature)\n\tout.data = {\n\t\tpressure=pressure,\n\t\ttemperature = temperature\n\t};\n\n return json.encode(out)\nend\n \n\n INLINE 2019-09-10 17:04:45.652+08 2019-09-10 17:04:45.652+08 2019-09-10 \N
+c36c2c03-92b0-41b0-bcdc-9c867e0da2f7 bjdh_temperature \N 温度 含水量 1.0 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 f 24ba1243-7e9a-4449-891c-e85657f257b5 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug(" load script %s, moduleId=%s", " BJdh.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug(" BJdh 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\t\n\t\tlog.debug(" BJdh 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n\tlog.debug(" BJdh buff=%s",buff)\n buff=buff.."0300000002"\n\tlog.debug(" BJdh bufff=%s",buff)\n buff=iota.appendHexCrc(buff, "L",0) -- 2: CRC\n\tlog.debug(" BJdh buff2=%s",buff)\n ok,resp=ctx:ssend(buff,20000) --发送指令\n --local result="{}"\n if ok then\n\tlog.debug(" BJdh aaaaa")\n result = unmarshall(resp)\n log.debug(" BJdh result0=%s",result)\n -- print(string.format("out=%s,data=%s",resp, result))\n else\n log.debug(" BJdh cccc")\n end\n\tlog.debug(" BJdh result1=%s",result)\n\n ctx:done(result)\nend\n\n\nunmarshall=function(hex)\n \tlocal out={\n --type = 1,\n data ={},\n result = {}\n }\n\tlog.debug(" BJdh vvvv")\n local ErrorCode = IsValid(hex)\n if ErrorCode then \n\t\tlog.debug("BJdh there")\n local temph = iota.hexToByte(hex,3,'B')\n\t\tlog.debug("BJdh temph=%s",temph)\n\t\tlocal templ = iota.hexToByte(hex,4,'B')\n\t\tlog.debug("BJdh templ=%s",templ)\n\t\tlocal tempu= iota.hexToUShort(hex,3,'B')\n\t\tlocal temp\n\t\tif temph==0xFF then\n\t\t\tlog.debug("BJdh temph=0xFF")\n\t\t\t temp=(tempu-65535-1)/100\n\t\telse\n\t\t\t temp = (temph*256+templ)/100\n\t\t\tlog.debug("BJdh temph~=0xFF")\n\t\t\tlog.debug("BJdh tempp=%s",temp)\n\t\tend\n\t\tlog.debug("BJdh temp=%s",temp)\n\t\tlocal caph = iota.hexToByte(hex,5,'B')\n\t\tlocal capl = iota.hexToByte(hex,6,'B')\n\t\tlocal cap =(caph*256+capl)/100\n\t\tlocal data=''\n\t\tlog.debug("BJdh cap=%s",cap)\n out.data = {\n capacity=cap,\n\t\t\ttemperature=temp\n }\n\t\tlog.debug("BJdh data=%s",data)\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data)\n log.debug(' BJdh 开始校验数据')\n\tif string.len(data)/2 ~=9 then\n\t\tlocal message = 'Invalid Msg, len='\n\t\tout.result = {code=1001,msg=message}\n\t\t return false\t\n\tend\n if iota.hexToByte(data,1,'B') ~= 0x03 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n log.debug(' BJdh 数据校验通过')\n return true\n--crc\nend\n\n INLINE 2019-05-13 10:57:57.137+08 2019-06-05 14:03:49.335+08 2019-05-13 \N
+d873976f-2150-4a9e-8f8f-5b68dcdd0420 shjy_temp_ BK-J02AD \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_Pressure_1", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_Pressure_1 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x01, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("shjy_Pressure_1 SSend error!")\n end\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local length = iota.hexToShort(hex,3,'B') * 0.005\n \n \n out.data = {\n\t\t\tlength=tonumber(string.format('%0.3f',length))\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('shjy_Pressure_1 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shjy_Pressure_1 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2019-06-27 16:09:51.484+08 2019-06-27 16:30:22.434+08 2019-06-27 \N
+5f0c707c-93b6-4f19-b3e8-4788a8c6e077 shutai_receive_DT143 \N 1.0 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 f 0fdb9c51-6450-4966-9f8f-4a0af9a70f00 Lua --//D:\\SVN\\201808项目\\20180828项目资料提交\\3、北京数泰项目--康飞\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\nstart=function()\n ctx:asend("010203")\n log.debug("shutaiDT14300 device=%s", json.encode(device))\nend\n\nonData=function(hex,index)\n log.debug("shutaiDT14300 hex=%s[%s] type(index)=[%s]",hex,index,type(index))\n if index==2 then\n ok=ctx:asend("670d0a") --"g/n/r" DT运行当前工作计划\n ctx:sleep(1)\n ok=ctx:asend("2f480d0a") --"/H/n/r" DT 按照指定格式 上报数据\n end\n\t--log.debug("shutaiDT14300 device =%s", json.encode(device))\n \n local out={\n data ={},\n result = {},\n type=2\n }\n \n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n sData=HextoStr(hex)\n log.debug("shutaiDT14300 sData= %s",sData)\n --获取子字符串表\n local allResponse=Split(sData,";")\n local allResponseCount=table_leng(allResponse)\n --移除表内的“”和nil\n for i=allResponseCount,1,-1 do\n v=allResponse[i]\n if v=='' or v==nil or string.len(v)<10 then\n table.remove(allResponse,i)\n --log.debug("shutaiDT14300 表内的“”和nil 移除元素k=%s v=%s",i,v)\n end\n end\n\n --分析单类数据\n local resplength=table_leng(allResponse)\n local phys={} --存储所有通道物理量\n local moduleNo --模块号 \n local dateTimeStr\n local timenow\n for k,v in ipairs(allResponse) do\n dataIndex=string.sub(v,1,1)--单条数据首字母 D为设备信息 ,A为数据\n\n if dataIndex=='D' then\n local otherData=Split(v,',')\n moduleNo=otherData[2]\n local dateStr=otherData[4]\n local timeStr=otherData[5]\n dateTimeStr=string.format("%s %s",dateStr,timeStr)\n timenow=unixtimestamp(dateTimeStr)\n elseif dataIndex=='A' then\n local singleData=Split(v,',')\n for sensorKey,sensorValue in ipairs(singleData) do\n if sensorKey>2 then\n phys[sensorKey-2]=singleData[sensorKey]\n end\n end\n end\n end\n\n --匹配数据部分\n \t\t\t\n -- local childDevice={}--测试用\n -- childDevice.id=123 --测试用\n\n for index,childDevice in pairs(device.dnlinks[1].devices) do\n log.debug("shutaiDT14300 遍历子设备 是否匹配设备child=%s",json.encode(childDevice))\n \n local channelStrCheck=childDevice.uplink.props.channel\n log.debug("shutaiDT14300 子设备模块通道 接口获取 c=%s ",channelStrCheck)\n local relatedChannel= Split(channelStrCheck,',')\n local valueNum=table_leng(relatedChannel)\n \n if childDevice.props.sensortype=='zx' then\n local Frequency_index=tonumber(relatedChannel[1])\n local Temperature_index=tonumber(relatedChannel[2])\n local Frequency=tonumber(phys[Frequency_index])\n local Temperature=tonumber(phys[Temperature_index])\n if childDevice.uplink.capabilities[1].formula.metaid == "ff2de59e-fd95-42c6-93cc-d827da25dd0c" then --在iota中查找\n\n local K = childDevice.uplink.capabilities[1].formula.props.K \n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local To = childDevice.uplink.capabilities[1].formula.props.To\n -- log.debug("shutaiDT14300 振弦通道[%s] 公式参数 k=%s,Kt=%s,Fo=%s,To=%s",channelStrCheck,K,Kt,Fo,To)\n if K ==nil or Kt ==nil or Fo==nil or To==nil then\n Phy=nil\n -- log.debug("shutaiDT14300 振弦通道[%s] f=%s,t=%s 参数项为nil",channelStrCheck,Frequency,Temperature)\n else\n --log.debug("shutaiDT14300 振弦通道[%s] f=%s,t=%s",channelStrCheck,Frequency,Temperature)\n Phy = K*(Frequency^2-Fo^2)+Kt*(Temperature-To)\n --log.debug("shutaiDT14300 振弦通道[%s]当前的Phy=%s,f=%s",channelStrCheck,Phy,Frequency)\n local data1 = {\n data={\n frequency=tonumber(string.format("%0.3f",Frequency)),\n temperature=tonumber(string.format("%0.2f",Temperature)),\n physicalvalue=tonumber(string.format("%0.3f",Phy)),\n },\n device=childDevice.id,\n time=timenow,\n type=1 \n }\n -- log.debug("shutaiDT14300: 振弦通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data,data1)\n end \n end \n\t\t\telseif childDevice.props.sensortype=='dw' then\n\t\t\t local Resistance_index=tonumber(relatedChannel[15])\n\t\t\t\t local Resistance=phys[Resistance_index]\n\t\t\t\t \n\t\t\t\t if childDevice.uplink.capabilities[1].formula.metaid == "5a40c554-1256-4aec-b591-0202fc0f267a" then\n\t\t\t\t \n\t\t\t\t\tlocal a = childDevice.uplink.capabilities[1].formula.props.a\n local b = childDevice.uplink.capabilities[1].formula.props.b\n\t\t\t\t\tif a==nil or b==nil then\n\t\t\t\t\tPhy=nil\t\t\t\t\n\t\t\t\t\telse \t\t\t\t\t\n\t\t\t\t local y=a*Math.Log(Resistance)+b\n\t\t\t\t local data1 = {\n data={\n Y=tonumber(string.format("%0.3f",y)),\n \n resistance=tonumber(string.format("%0.3f",Resistance))\n },\n device=childDevice.id,\n time=timenow,\n type=1 \n }\n\t\t\t\t\t\t\t table.insert(out.data,data1)\n end \n end\t\t\t\t\t\t\t\t\t\t\t\n elseif childDevice.props.sensortype=='dy' then\n \n\n \n local Temperature_index=tonumber(relatedChannel[1])\n local Vx_index=tonumber(relatedChannel[2])\n local Vy_index=tonumber(relatedChannel[3])\n local Temperature=tonumber(phys[Temperature_index])\n local Vx=phys[Vx_index]\n local Vy=phys[Vy_index]\n \n \n if childDevice.uplink.capabilities[1].formula.metaid == "ed2744e0-eecf-42f0-8732-65fcd7e46d24" then --在iota中查找\n\n local Kx = childDevice.uplink.capabilities[1].formula.props.Kx\n local Ky = childDevice.uplink.capabilities[1].formula.props.Ky \n local Vo = childDevice.uplink.capabilities[1].formula.props.Vo\n\n -- log.debug("shutaiDT14300 倾角通道[%s] 公式参数 Kx=%s,Ky=%s,Vo=%s",channelStrCheck,Kx,Ky,Vo)\n if Kx ==nil or Ky==nil or Vo==nil then\n Phy=nil\n -- log.debug("shutaiDT14300 倾角通道[%s] Vx=%s,Vy=%s 参数项为nil",channelStrCheck,Vx,Vy)\n else\n -- log.debug("shutaiDT14300 倾角通道[%s] Vx=%s,Vy=%s",channelStrCheck,Vx,Vy)\n local AngleX = Kx*(Vx-Vo)\n local AngleY = Ky*(Vy-Vo)\n -- log.debug("shutaiDT14300 倾角通道[%s] AngleX=%s,AngleY=%s Temperature=%s",channelStrCheck,AngleX,AngleY,Temperature)\n local data1 = {\n data={\n anglex=tonumber(string.format("%0.3f",AngleX)),\n angley=tonumber(string.format("%0.3f",AngleY)),\n temperature=tonumber(string.format("%0.3f",Temperature))\n },\n device=childDevice.id,\n time=timenow,\n type=1 \n }\n -- log.debug("shutaiDT14300: 倾角通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data,data1)\n end \n end\n\t\t\t\n elseif childDevice.props.sensortype=='standard' then\n local value1_index=tonumber(relatedChannel[1])\n local value1=tonumber(phys[value1_index])\t\n\t\t\t\tlocal value2\n\t\t\t\tif valueNum>1 then\n\t\t\t\t\tlocal value2_index=tonumber(relatedChannel[2])\n\t\t\t\t\tvalue2=tonumber(phys[value2_index])\t\n\t\t\t\t\tvalue2=tonumber(string.format("%0.2f",value2))\n\t\t\t\t\t\n\t\t\t\tend\n log.debug("shutaiDT14300 standard通道[%s] Temperature=%s",channelStrCheck,Temperature)\n local data1 = {\n data={ \n physicalvalue=tonumber(string.format("%0.2f",value1)),\n\t\t\t\t\t\tphysicalvalue2=value2\n },\n device=childDevice.id,\n time=timenow,\n type=1 \n }\n log.debug("shutaiDT14300 standard通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data,data1)\n end\n \n \n end\n\n else\n ok=ctx:asend("2f480d0a") --"/H/n/r" DT 按照指定格式 上报数据\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n log.debug("shutaiDT14300 resultData=%s,hex=%s", json.encode(out),hex)\n ctx:notify(resultData)\n\nend\n\n\n\nIsValid=function(alldata)\n log.debug("shutaiDT14300 校验开始")\n if string.len(alldata) <10 then\n errormsg = 'allData is invalid'\n errcode = 1001\n return false\n end\n\n if string.sub(alldata,1,4)~='442c' then\n\t errormsg = 'allData header is invalid'\n errcode = 1001\n return false\n\t\n\tend\n\n log.debug("shutaiDT14300 校验通过")\n return true\nend\n\n\n--字符串ascii->字符\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\n\nend\n\nunixtimestamp=function(datestr)\n -- 2018/4/28 16:10:12\n\tlog.debug("shutaiDT14300 datestr=%s",datestr)\n local datelist = Split(datestr, " ");\n local datebegin = Split(datelist[1], "/");\n local dateend = Split(datelist[2], ":");\n local year = tonumber(datebegin[1]);\n\tlocal month = tonumber(datebegin[2]);\n\tlocal day = tonumber(datebegin[3]);\n local hour = tonumber(dateend[1]);\n local minute = tonumber(dateend[2]);\n local second = tonumber(dateend[3]);\n --log.debug("shutaiDT14300 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\t--log.debug("shutaiDT14300 timenum=%s",timenum)\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\t--log.debug("shutaiDT14300 recordTime=%s",recordTime)\n\treturn recordTime\nend INLINE 2018-09-06 18:21:18.004+08 2019-12-30 16:58:58.179+08 2018-09-06 \N
+bcbc3e2c-937e-4348-9c55-b9516e4782de BDS-NH3 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua \n--//氨气传感器FS-BDS-AQ通讯协议\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "BAS_ACQ.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\tlog.debug("BDS_AQ 设备模块通道 接口获取 m=%s",moduleNo)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\tlog.debug("BDS_AQ 设备模块通道 属性获取 m=%s",moduleNo)\n\tend\n\t\n\t\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 3, endian) -- 1: 指令: 0x03 = 采集\n buff=iota.appendHexWord(buff, 16 ,endian) -- 2: 氨气\n\tbuff=iota.appendHexWord(buff, 1 ,endian) -- 2:寄存器个数\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000)\n \tlog.debug("BDS_AQ buff m=%s",buff)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n \tlog.debug("BDS_AQ resp m=%s",resp)\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n local NH3 = iota.hexToShort(hex,3,'B'); \n out.data = {\n NH3=NH3\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('BDS_AQ 开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleNo_check) ~= tonumber(string.sub(data,1,2),16) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('BDS_AQ 数据校验通过')\n return true\n--crc\nend\n\nonData=function()\nend INLINE 2019-04-17 17:21:18.145+08 2019-11-22 13:54:09.194+08 2019-04-17 \N
+00e607a1-c022-4399-9cd1-54d2dc2705d3 mas_idau_log \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua start = function()\n --log.debug("mas_idau_log:device=%s",json.encode(device))\n --log.debug("mas_idau_log:subdevice=%s",json.encode(device.dnlinks[1]))\n local linkcnt = #(device.dnlinks)\n --log.debug("mas_idau_log:linkcnt=%s",linkcnt)\n local req = {\n type = "idau",\n payload = ""\n }\n local mop_log = {\n M = "c_shell",\n P = {} -- Get Log\n }\n\tmop_log.P.C = "cp /home/idau/logs/log.txt /home/idau/data/dac/log.txt"\n\t\n\n req.payload = json.encode(mop_log)\n --log.debug("mas_idau_log:request=%s", json.encode(req))\n local ok, ack = ctx:ssend(req, 20000)\n result = {\n result = nil,\n type = 1,\n data = {\n ack = json.encode(ack)\n }\n }\n\t--log.debug("mas_idau_log:ack=%s", json.encode(ack))\n\n ctx:done(json.encode(result))\nend\n\n\n INLINE 2019-09-24 11:53:02.195+08 2020-04-17 09:23:21.074+08 2019-09-24 \N
+b6e60de9-b636-4381-896d-151d57a4b604 xmxd_qj \N 1.0 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 f 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "anXin_inclino_1550.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\tlocal aa=''\n\t \n aa=iota.appendHexByte(aa, 0xFF, endian) --1: 帧头\n aa=iota.appendHexByte(aa, 0x41, endian)\n aa=iota.appendHexByte(aa, 0x58, endian)\n aa=iota.appendHexByte(aa, 0x4a, endian)\n aa=iota.appendHexWord(aa, 2, endian) -- 2: 类型=1\n aa=iota.appendHexWord(aa, device.uplink.props.module, endian) -- 3: 模块号\n aa=iota.appendHexByte(aa, 1, endian) -- 4: 指令: 0x01 = 采集\n aa=iota.appendHexCrc(aa, endian ,0) \n bb='0d245f'\n\tbb=iota.appendHexWord(bb, device.props.loraid, 'L')\n\tbb=bb .. aa\n\tlog.debug('xmxdz_qj bb=%s', bb)\n\tlocal lcr_str = CS(bb)\n\tlog.debug('xmxdz_qj lcr_str=%s', lcr_str)\n\tbuff='fe0d245f'\n\tbuff=iota.appendHexWord(buff, device.props.loraid, 'L')\n\tbuff= buff .. aa\n\tbuff=iota.appendHexByte(buff, lcr_str, endian)\n\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n \n local out={\n type = 1,\n data ={},\n result = {}\n }\n local moduleStr=device.uplink.props.module\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n local xDataint = iota.hexToInt(hex,30,'B')\n local yDataint = iota.hexToInt(hex,34,'B')\n local zDataint = iota.hexToInt(hex,38,'B')\n local tempint = iota.hexToShort(hex,42,'B')\n\t\t\n local xData = iota.hexToInt(hex,16,'B')/1000.0;\n local yData = iota.hexToInt(hex,20,'B')/1000.0;\n local zData = iota.hexToInt(hex,24,'B')/1000.0;\n local temp = iota.hexToShort(hex,28,'B')/100.0;\n out.data = {\n anglex=xData,\n angley=yData,\n anglez=zData,\n temperature\t=temp,\n\t\t\txDataint=xDataint,\n\t\t\tyDataint=yDataint,\n\t\t\tzDataint=zDataint,\n\t\t\ttempint=tempint\n };\n \n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\nIsValid=function(data,deviceModule)\nlog.debug("xmxdz_qj data=%s [%s] ",data,deviceModule)\n if data == nil then\n errormsg = 'xmxdz_qj:Data is nil'\n errcode = 1001\n \tlog.debug("xmxdz_qj [%s] %s",deviceModule,errormsg)\n return false\n end\n\n local dataModule= iota.hexToShort(data,12,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('xmxdz_qj module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("xmxdz_qj [%s] %s",deviceModule,errormsg)\n return false\n end\nif iota.hexToByte(data,14,'B') ~= 0x80 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n log.debug("xmxdz_qj [%s] 校验通过",deviceModule)\n return true\n \nend\nCS=function(buff)\n local lcr = 0\n for i = 0, string.len(buff)/2-1 do\n lcr = bit.bxor(lcr,tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\t\n end \n\tlog.debug('xmxdz_qj lcr=%s', lcr)\n\t\n local value= string.format("%#x",lcr)\n log.debug('xmxdz_qj value=%s', value)\n --local byte = string.sub(value,string.len(value)-1,string.len(value))\n \n return value\nend \n\n\n \n\n INLINE 2021-02-24 11:13:39.07+08 2021-02-24 11:13:39.07+08 2021-02-24 \N
+f6ebffcf-2f2a-41fa-a36b-d997b8584c39 fs_liquidLevel_9006 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --D:\\SVN\\201901项目\\20190104新项目资料提交\\江西飞尚--静力水准仪\\静力水准仪FS-JLSZ-V1.00通讯协议.docx\n\nstart=function ()\n\t out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n \tlog.debug("L1001k,%s",json.encode(device))\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n\tlocal sendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\telse\n\t\tout.result = {code=1001,msg='采集超时'} \n\t\tresult=json.encode(out)\n\tend\n\tctx:done(result)\nend\n\n\nfunction protocol_encode(moduleNoStr)\n--采集压力的偏移地址为22-23 默认是22(0x16)\n--采集温度的偏移地址为38-39 默认是38(0x26)\n\tlocal BE='B'\n\tlocal buff=''; \n\tbuff=iota.appendHexByte(buff, moduleNoStr, BE); -- 3: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x03, BE); --功能码 0x03采集 \n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x16, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n buff=iota.appendHexByte(buff, 0x12, BE); --读取18个寄存器\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) --CRC16\n\treturn buff\nend\n--模块号 17\n--1103001600122693\n--11032441b30e9a000000000000000042c800000000000041200000471335004a6a96fcc04fb2cb31\n\nfunction protocol_decode(hex,moduleNoCheck)\n \n\tlocal data = hex;\n\n\t--判断数据有效性\t\t\t\n\tlocal ErrorCode = IsValid(data,moduleNoCheck)\n if ErrorCode then\n\tlocal pressure = iota.hexToFloat(data, 3,'B'); -- 压强\n\tlocal temperature = iota.hexToFloat(data, 35,'B'); -- 温度\t\t\t\n\t\tout.data = {\n\t\tpressure=tonumber(string.format('%0.3f',pressure)),\n\t\ttemperature=tonumber(string.format('%0.2f',temperature)),\n physicalvalue=tonumber(string.format('%0.3f',pressure)) --传感器有的建立错误,用了physicalvalue\n\t\t}\n\telse\n out.result = {code=errcode,msg=errormsg} \n\tend\n \tlog.debug('fs_liquidLevel_9006:result=%s', json.encode(out))\n\t return json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n\tlocal checkLen=string.len(data)/2\n if data == nil or checkLen < 36 then\n errormsg = string.format('无效的数据长度=%s≠36',checkLen)\n errcode = 1002\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = string.format('无效的数据指令≠03')\n errcode = 1003\n return false\n end\n\tlocal checkModule=iota.hexToByte(data,0,'B')\n if moduleNoCheckStr ~= tostring(checkModule) then \t\n errormsg = string.format('无效的模块号=%s≠%s',checkModule,moduleNoCheckStr)\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2019-01-23 17:44:22.364+08 2020-09-07 17:56:33.673+08 2019-01-23 \N
+422d3308-b4d9-4181-b705-7d81342c46a7 hnxr-DAS \N 河南新睿的项目 有改动协议 1.0 e3714b5a-b240-4f8f-a8c3-9067a3fffb04 e3714b5a-b240-4f8f-a8c3-9067a3fffb04 f e3714b5a-b240-4f8f-a8c3-9067a3fffb04 Lua \nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "hnxr.lua", device.uplink.props.module or "[nil]")\n\tlog.debug('hnxr device=%s', json.encode(device))\n \tlocal endian = 'B'\n local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("hnxr 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("hnxr 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n buff="2453"\n\t\n ok,resp=ctx:ssend(buff,4000) --发送指令\n local result =""\n if ok then\n result = unmarshall(resp,moduleNo)\n else\t\t\n end\n\n ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n local freq1 = iota.hexToByte(hex,4,'B')\n\t\tlog.debug("hnxr freq1=%s",freq1)\n\t\tlocal freq2 = iota.hexToByte(hex,5,'B')\n\t\tlog.debug("hnxr freq2=%s",freq2)\n local frequency = (freq1*256 + freq2)/10\n\t\tlog.debug("hnxr frequency=%s",frequency)\n \tlog.debug('hnxr device=%s', json.encode(device))\n\t\tlocal k = device.props.k\n\t\tlog.debug("hnxr qr k=%s",k)\n\t\tlocal f0 = device.props.f0\n\t\tlog.debug("hnxr qr f0=%s",f0)\n\t\tif k ~= nil and f0 ~= nil then\n\t\t\tPhy = k * ( f0 ^ 2 - frequency ^ 2)\n\t\t\tlog.debug("hnxr qr Phy=%s",Phy)\n\t\tend\n out.data = {\n frequency=frequency,\n\t\t\tphysicalvalue = Phy\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n \tlog.debug("hnxr: result=%s",json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug("hnxr: moduleNo_check=%s",json.encode(tostring(moduleNo_check) ))\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,0,'B') ~= 0xAA then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,6,'B')) then\n \n log.debug("hnxr: tall=%s",json.encode(tostring(iota.hexToByte(data,6,'B')) ))\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\nonData=function(data) \n end\n INLINE 2019-05-15 10:39:04.586+08 2019-05-31 15:36:47.636+08 2019-05-15 \N
+59fbaf94-9851-45b3-ad97-ec1a8a7ff764 hnxinrui_DAS \N 采集仪 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua \nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "hnxr.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("hnxr 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("hnxr 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n buff="$S"\n\tlog.debug("hnxr buff=%s",buff)\n ok,resp=ctx:ssend(buff,4000) --发送指令\n local result="{}"\n if ok then\n\t\tlog.debug("hnxr aaa")\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n\t\t\n end\n\tlog.debug("hnxr: result=%s",json.encode(result))\n ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\tlog.debug("hnxr moduleStr=%s",moduleStr)\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n local freq1 = iota.hexToByte(hex,4,'B')\n\t\tlog.debug("hnxr freq1=%s",freq1)\n\t\tlocal freq2 = iota.hexToByte(hex,5,'B')\n\t\tlog.debug("hnxr freq2=%s",freq2)\n local frequency = (freq1*256 + freq2)/10\n\t\tlog.debug("hnxr frequency=%s",frequency)\n out.data = {\n frequency=frequency\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('BK_WaterLevel开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,0,'B') ~= 0xAA then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,6,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('BK_WaterLevel数据校验通过')\n return true\n--crc\nend\n\n INLINE 2019-04-19 16:21:36.05+08 2019-05-15 10:33:46.115+08 2019-04-19 \N
+b9716d39-3f65-4cd7-9fb9-4214e050b117 shjy_DAS_BK-ZXC01A \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --//02 协议分析/2016-09-23/BGK协议 v2.0.doc\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]]\nstart = function()\n log.debug('load script %s, moduleId=%s', 'BGK_4000', device.props.moduleId or '[nil]')\n local endian = 'L'\n local buff = ''\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n if subdevices ~= nil then\n log.debug('shjy_DAS_BK-ZXC01A:LUA:subdevices : data is =%s', json.encode(subdevices))\n for index, child in pairs(subdevices) do\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n channelNo = tonumber(child.uplink.props.channel)\n log.debug('shjy_DAS_BK-ZXC01A 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ', moduleNo, channelNo, json.encode(moduleNo), child.props.moduleId)\n else\n moduleNo = child.props.moduleId\n channelNo = child.props.channelId\n log.debug('shjy_DAS_BK-ZXC01A 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s', moduleNo, channelNo, json.encode(child.uplink.props))\n end\n\n log.debug('shjy_DAS_BK-ZXC01A:模块%s通道%s的deviceId是%s:', moduleNo, channelNo, tostring(child.id))\n \n \n\t\t\tlocal request_asciiStr = '?'\n\t\t\tbuff = toHexStr(request_asciiStr)\n log.debug('shjy_DAS_BK-ZXC01A:模块%s通道%s的buff是:%s', moduleNo, channelNo, buff)\n buff = buff .. moduleNo .. '574d'\n buff = iota.appendHexByte(buff, channelNo, endian)\n buff = iota.appendHexByte(buff, 0x0d, endian)\n buff = iota.appendHexByte(buff, 0x0a, endian)\n ok, resp = ctx:ssend(buff, 15000)\n local result = '{}'\n if ok then\n \n result = unmarshall(resp, child, moduleNo, channelNo)\n --解析单条数据\n table.insert(out.data, result)\n else\n log.debug('shjy_DAS_BK-ZXC01A:模块%s通道%s的数据接收失败', moduleNo, channelNo)\n end\n end\n else\n log.debug('shjy_DAS_BK-ZXC01A subdevices是nil')\n return nil\n end\n\n log.debug('shjy_DAS_BK-ZXC01A out序列化')\n local resultData = json.encode(out)\n log.debug('shjy_DAS_BK-ZXC01A out序列化结果 : out is =%s', json.encode(out))\n ctx:done(resultData)\nend\n\n\n\nunmarshall = function(hex, childDevice, subModuleId, subChannelId)\n local subData = {\n data = {},\n device = childDevice.id,\n type = 1\n }\n\n log.debug('shjy_DAS_BK-ZXC01A:模块%s通道%s的deviceId是:%s', subModuleId, subChannelId, json.encode(childDevice))\n local ErrorCode = IsValid(hex, subModuleId, subChannelId)\n if ErrorCode then\n \n \n local Phy1= iota.hexToUShort(hex,10,'B')\n\t\tlocal Phy2= iota.hexToUShort(hex,12,'B')\n local temp = iota.hexToUShort(hex,14,'B')/10\n temp = tonumber(string.format('%0.1f', temp))\n \n \n subData.data = {\n physicalvalue1 = Phy1,\n \n temperature = temp,\n physicalvalue2 = Phy2, --物理量\n \n }\n else\n subData.result = {code = errcode, msg = errormsg}\n end\n return subData\nend\n\n\n\nIsValid = function(data, moduleId, channelId)\n log.debug('shjy_DAS_BK-ZXC01A:模块%s通道%s开始校验数据=%s', moduleId, channelId, data)\n if data == nil or string.len(data) / 2 ~= 20 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n log.debug('shjy_DAS_BK-ZXC01A:模块%s通道%s 数据校验失败:Data is nil or invalid length', moduleId, channelId)\n return false\n end\n local data_channelId=iota.hexToByte(data,9,'B')\n if tonumber(channelId) ~= tonumber(data_channelId) then\t\n errormsg = 'Invalid acq channelId'\n errcode = 1004\n log.debug("shjy_DAS_BK-ZXC01A m=%s,c=%s,数据通道号错误[%s]",channelId,channelId,data_channelId)\n return false\n end\n log.debug('shjy_DAS_BK-ZXC01A:模块%s通道%s校验数据通过!!!', moduleId, channelId)\n return true\nend\n\n\n\n--HEX字符串->ascii字符串\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n\n INLINE 2019-09-24 13:50:15.899+08 2019-09-24 15:04:15.173+08 2019-09-24 \N
+d751e738-d74f-476e-8ba3-f25bb264bea3 lefu_temp_LFZX001 \N 1.0 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 f 9842b3d6-0a7d-4d67-84be-d0132d1b3e30 Lua start=function()\n log.debug("lefu_temp_LFZX001.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n local moduleStr=device.uplink.props.module\n log.debug("lefu_temp_LFZX001 [%s] Data, ctx=%s",moduleStr,hex)\n local out={\n data ={},\n result = {}\n }\n --ff41584a23313832363036333634323923ffffffffffffff000500020cf15b0b9ffe01211111ffffffffF38Feeee\n\t\n\t--ff41584a38393836303430333130313837313838333139340001072d0cf05cff1b540001042d01f40ac705e700c8c1c6eeee\n\t\n\t--ff41584a3839383630343033313031383731383833313934000107000cf05cfa05730001042f00c80b6ca192eeee\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n\t local fre1 = iota.hexToShort(hex,36,'B')\n local fre2 = iota.hexToShort(hex,38,'B')/1000\n\t\tlocal fre = fre1+fre2\n local temp= iota.hexToShort(hex,40,'B')/100\n\t\tlocal Phy1= iota.hexToShort(hex,42,'B')\n log.debug("lefu_temp_LFZX001 Phy1=%s",Phy1)\n\t\tlocal Phy2 = iota.hexToShort(hex,44,'B')/1000\n log.debug("lefu_temp_LFZX001 Phy2=%s",Phy2)\n\t\tlocal Phy = Phy1 + Phy2\n log.debug("lefu_temp_LFZX001 Phy=%s",Phy)\n out.data = { \n frequency=fre,\n\t\t\ttemperature=temp,\n\t\t physicalvalue=Phy\n }\n local resultData =json.encode(out)\n log.debug("lefu_temp_LFZX001 [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = errcode, msg = errormsg}\n ctx:done(json.encode(out))\n end \nend\n\nIsValid=function(data,deviceModule)\n if data == nil then\n errormsg = 'lefu_temp_LFZX001:Data is nil'\n errcode = 1001\n \tlog.debug("lefu_temp_LFZX001 [%s] %s",deviceModule,errormsg)\n return false\n end\n local length= iota.hexToByte(data,28,'B')\n if (string.len(data)/2~=(length+38)) then\n errormsg = 'lefu_temp_LFZX001:Data length is wrong'\n errcode = 1001\n \tlog.debug("lefu_temp_LFZX001 [%s] %s",deviceModule,errormsg)\n return false\n end\n local dataModule= iota.hexToShort(data,26,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('anfang_settlement_1 module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("lefu_temp_LFZX001 [%s] %s",deviceModule,errormsg)\n return false\n end\n local sensorType= iota.hexToShort(data,24,'B')\n if (sensorType~=1) then\n errormsg = 'lefu_temp_LFZX001:sensorType is wrong'\n errcode = 1001\n log.debug("lefu_temp_LFZX001 [%s] %s",deviceModule,errormsg)\n return false\n end\n local subdata=string.sub(data,1,-9)\n local crc=iota.appendHexCrc(subdata, 'B' ,0)\n log.debug("lefu_temp_LFZX001.lua: crc, ctx=%s",crc)\n local subdatacrc=string.sub(data,1,-5)\n log.debug("lefu_temp_LFZX001.lua: subdatacrc, ctx=%s",subdatacrc)\n if (string.lower(crc)~=string.lower(subdatacrc)) then\n errormsg = 'lefu_temp_LFZX001:crc is wrong'\n errcode = 1001\n \tlog.debug("lefu_temp_LFZX001 [%s] %s",deviceModule,errormsg)\n return false\n end\n log.debug("lefu_temp_LFZX001 [%s] 校验通过",deviceModule)\n return true\n \nend\n \n INLINE 2019-06-06 14:25:20.572+08 2019-06-11 11:48:00.414+08 2019-06-06 \N
+859643c7-00d8-449b-b686-520bd72d1ae3 faith_mop \N 1.0 064081fe-2c2c-40ca-9d46-c654a2adb949 064081fe-2c2c-40ca-9d46-c654a2adb949 f 064081fe-2c2c-40ca-9d46-c654a2adb949 Lua start = function()\n local cmd = capability.param\n log.debug("MOP:linkcnt=%s",cmd)\n update_mop(cmd)\n ctx:done(json.encode(out))\nend\n\n\n--需要配置更新\nupdate_mop = function(command)\n log.debug("MOP: update_mop command=%s",command)\n\n\n local tosend = StrtoHex(command)\n local ok, ack = ctx:ssend(tosend, 4000)\n log.debug("MOP : mop_sensor ssend ack:%s ok:%s",json.encode(ack),ok)\n result = {\n result = nil,\n type = 1,\n data = {\n ack = HextoStr(ack)\n }\n }\n log.debug("MOP : ack= %s",result.data.ack)\n ctx:notify(json.encode(result))\nend\n\n--字符串ascii->字符\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n --判断输入类型\n if (type(hex)~="string") then\n return nil,"hex2str invalid input type"\n end\n --拼接字符串\n local index=1\n local ret=""\n for index=1,hex:len() do\n local str = string.format("%02X",hex:sub(index):byte())\n if str == '0A' or str =='0a' then\n str = '0d0a' \n end \n if index == hex:len() then\n str = str..'0d0a'\n end\n ret=ret..str\n end\n return ret\nend INLINE 2019-06-25 18:00:22.649+08 2019-06-25 18:00:22.649+08 2019-06-25 \N
+aaaefada-5903-40c6-96d7-98e2aae78d81 cdajmop \N 1.0 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e f 8d49238d-6e0e-421c-adaf-f7472ec0b50e Lua start = function()\n local endian = 'B'\n\tlocal buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\n local closTime=string.format('%04x', tonumber(device.props.closTime)*10)\n log.debug("cdajmop closTime=%s",closTime)\n\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff = buff .. '1000030002040004' .. closTime\n\t--buff=iota.appendHexWord(buff,moduleNo, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("cdajmop buff=%s", buff)\n local ok, ack = ctx:ssend(buff, 20000)\n\t\n\t out = {\n result = nil,\n type = 1,\n data = {\n ack = iota.hexToByte(ack,0,'B')\n }\n }\n\n\t\n\tlog.debug("cdajmop out=%s",json.encode(out))\n\n\n ctx:done(json.encode(out))\nend\n\n\n INLINE 2020-12-24 17:57:28.162+08 2020-12-25 09:01:12.922+08 2020-12-24 \N
+31ae2751-5181-4ccf-9763-d2ddfd55726d dianbiao_cjy \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//协议参考文档: \n\nstart=function()\n --log.debug("fs_1401 root device = %s", json.encode(device))\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n local addressTables={0x14,0x1BF,0x36A,0515}\n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n \tfor index,child in pairs(subdevices) do \n \t\t\n\t\t\tlocal moduleNo=tonumber(child.uplink.props.module) \n\t\t\tlocal channelNo=tonumber(child.uplink.props.channel)\n\t\n\t\t\tlocal buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x03, endian) -- 1: 功能码\n\t\t\tbuff=iota.appendHexWord(buff, addressTables[channelNo],endian) -- 2: 数据地址\n\t\t\tbuff=iota.appendHexWord(buff, 42 ,endian) --2:读取数据长度42\n\t\t\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlog.debug("fs_2401 module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tlocal result='{}'\n if ok then \n\t\t\t result = unmarshall(resp,child,tostring(moduleNo),tostring(channelNo))--解析单条数据\n\t\t\t table.insert(out.data,result)\t\t\t\t\n\t\t\telse\n local errorSubData={\n data ={},\n device=child.id,\n type=1 \n }\n errorSubData.result = {code=1001,msg='通道采集超时'} \n \t\ttable.insert(out.data,errorSubData)\n\t\t\t log.debug("fs_2401 module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("fs_2401\tsubdevices是nil")\n \treturn nil\n end\n\tlocal resultData =json.encode(out)\n \tlog.debug("fs_2401 module=%s,result=%s .",moduleNo,json.encode(out))\n ctx:done(resultData)\nend\n\n\n\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n\t--local subModuleId=module\n\t--local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n log.debug("fs_2401 module=%s,channel=%s [%s] recv=[%s].",subModuleId,subChannelId,subDevice.id,hex)\n if ErrorCode then \n\t\t--A项电压\n \tlocal A_phase_volt= iota.hexToUShort(hex,3,'B')/10\n local B_phase_volt = iota.hexToUShort(hex,5,'B')/10\n local C_phase_volt = iota.hexToUShort(hex,7,'B')/10\n --AC线电压\n \t\tlocal AC_line_volt= iota.hexToUShort(hex,9,'B')/10\n local BC_line_volt = iota.hexToUShort(hex,11,'B')/10\n local CA_line_volt = iota.hexToUShort(hex,13,'B')/10\n \t--相电流\n \tlocal A_phase_current= iota.hexToUShort(hex,15,'B')/100\n local B_phase_current = iota.hexToUShort(hex,17,'B')/100\n local C_phase_current = iota.hexToUShort(hex,19,'B')/100\n local total_phase_current=iota.hexToUShort(hex,21,'B')/100\n \n --有功功率\n \tlocal A_active_power=iota.hexToUInt(hex,23,'B')/1000\n \t\tlocal B_active_power=iota.hexToUInt(hex,27,'B')/1000\n \tlocal C_active_power=iota.hexToUInt(hex,31,'B')/1000\n \tlocal total_active_power=iota.hexToUInt(hex,35,'B')/1000\n \n \t--无功功率\n \tlocal A_reactive_power=iota.hexToUInt(hex,39,'B')/1000\n \t\tlocal B_reactive_power=iota.hexToUInt(hex,43,'B')/1000\n \tlocal C_reactive_power=iota.hexToUInt(hex,47,'B')/1000\n \tlocal total_reactive_power=iota.hexToUInt(hex,51,'B')/1000\n \n --视在功率\n \tlocal A_apparent_power=iota.hexToUInt(hex,55,'B')/1000\n \t\tlocal B_apparent_power=iota.hexToUInt(hex,59,'B')/1000\n \tlocal C_apparent_power=iota.hexToUInt(hex,63,'B')/1000\n \tlocal total_apparent_power=iota.hexToUInt(hex,67,'B')/1000\n \n \t--功率因数\n \tlocal A_power_factor=iota.hexToUShort(hex,71,'B')/1000\n \t\tlocal B_power_factor=iota.hexToUShort(hex,73,'B')/1000\n \tlocal C_power_factor=iota.hexToUShort(hex,75,'B')/1000\n \tlocal total_power_factor=iota.hexToUShort(hex,77,'B')/1000\n \n \t--功率方向\n \tlocal power_director=iota.hexToUShort(hex,79,'B')\n \t\tlocal frequency=iota.hexToUShort(hex,81,'B')/100\n \tlocal total_energy=iota.hexToUInt(hex,83,'B')/100\n \n subData.data = {\n A_phase_volt=A_phase_volt,\n B_phase_volt = B_phase_volt,\n C_phase_volt = C_phase_volt,\n --AC线电压\n \t\t --AC_line_volt= AC_line_volt,\n --BC_line_volt = BC_line_volt,\n --CA_line_volt = CA_line_volt,\n \t--相电流\n \t A_phase_current= A_phase_current,\n B_phase_current =B_phase_current,\n C_phase_current = C_phase_current,\n total_phase_current=total_phase_current,\n \n --有功功率\n \t A_active_power=A_active_power,\n \t\t B_active_power=B_active_power,\n \t C_active_power=C_active_power,\n \t total_active_power=total_active_power,\n \n \t--无功功率\n \t --A_reactive_power=A_reactive_power,\n \t\t --B_reactive_power=B_reactive_power,\n \t --C_reactive_power=C_reactive_power,\n \t --total_reactive_power=total_reactive_power,\n \n --视在功率\n \t-- A_apparent_power=A_apparent_power,\n \t\t-- B_apparent_power=B_apparent_power,\n \t-- C_apparent_power=C_apparent_power,\n \t-- total_apparent_power=total_apparent_power,\n \n \t--功率因素\n \t A_power_factor=A_power_factor,\n \t\t B_power_factor=B_power_factor,\n \t C_power_factor=C_power_factor,\n \t total_power_factor=total_power_factor,\n \n \t--功率方向\n \t --power_director=power_director,\n \t\t frequency=frequency,\n \t total_energy=total_energy\n };\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\n\nIsValid=function(data,moduleNo_check)\n log.debug('fs_2401 开始校验数据 %s',data)\n if data == nil or string.len(data)/2~=89 then\n errormsg = string.format('数据包长度无效=%s[%s]',string.len(data)/2,89)\n errcode = 1002\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleNo_check) ~= tonumber(string.sub(data,1,2),16) then\t\n errormsg = string.format('模块号=%s≠%s',moduleNo_check,tonumber(string.sub(data,1,2),16) )\n errcode = 1004\n return false\n end\n log.debug('fs_2401 数据校验通过')\n return true\n--crc\nend INLINE 2021-02-24 17:34:49.958+08 2021-02-25 13:51:03.675+08 2021-02-24 \N
+74a206a6-e3d1-475d-8c0b-a2a3730a97d7 sdgs_file_transfer \N 1.0 9b82d18b-98eb-4042-bb16-f05b923a0688 9b82d18b-98eb-4042-bb16-f05b923a0688 f 9b82d18b-98eb-4042-bb16-f05b923a0688 Lua start = function()\n log.debug('sdgs_file_transfer devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n if data ~= nil then\n if data.type == 'idau/file' then\n if data.ext == '.d' or data.ext == '.dx' then\n log.debug('sdgs_file_transfer recvd content = %s', data.payload)\n ParseFileD(data.payload)\n --else\n --log.error("sdgs_file_transfer unsupported file type: %s", data.ext)\n end\n else\n log.error('sdgs_file_transfer content type is not file, error recvd type is %s', data.type)\n end\n else\n log.error('sdgs_file_transfer recvd content is nil')\n end\nend\n\nfunction ParseFileD(content)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n --log.debug('sdgs_file_transfer content =%s', content)\n local jsons = Split(content, '\\r')\n for k, v in pairs(jsons) do\n if v ~= nil and v ~= '' then\n local jsondata = json.decode(v)\n if jsondata ~= nil and jsondata ~= '' then\n local childDevice = getDeviceInfo(jsondata.M)\n if childDevice ~= nil then\n -- log.debug('sdgs_file_transfer 设备类型=%s,%s', childDevice.props.sensortype, json.encode(childDevice))\n if childDevice.props.sensortype == 'V1' then --直角棱镜\n local rst = {\n data = {\n physicalvalue = jsondata.RV[1],\n \n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n }\n table.insert(out.data, rst)\n end\n else\n end\n end\n end\n end\n --log.debug('sdgs_file_transfer result = %s', json.encode(out))\n ctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid)\n log.debug('sdgs_file_transfer 查询子设备 moduleid=%s', moduleid)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices\n for i, subdevice in pairs(subdevices) do\n local Point_id = subdevice.uplink.props.node_id\n if tostring(Point_id) == tostring(moduleid) then\n log.debug('sdgs_file_transfer m=%s,2匹配到设备=%s', Point_id, json.encode(subdevice))\n return subdevice\n else\n end\n end\n --log.debug('sdgs_file_transfer has no device Point_id=%s', moduleid)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug('sdgs_file_transfer has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend INLINE 2019-04-23 13:42:56.099+08 2019-04-24 17:10:35.815+08 2019-04-23 \N
+355f91df-bf0d-44d9-94bd-e14e89545f4d rcb_zx \N 1.0 a002a7f5-f9ea-42a5-83d0-5f63f88e3b87 a002a7f5-f9ea-42a5-83d0-5f63f88e3b87 f a002a7f5-f9ea-42a5-83d0-5f63f88e3b87 Lua start = function()\n log.debug('rcb_zx device=%s',json.encode(device))\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n --\n --\n local moduleNo = device.uplink.props.id or device.uplink.props.module \n log.debug('rcb_zx [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n local bodydataStr = httpbody.Body\n local bodydata = json.decode(bodydataStr)\n\n local deviceId = bodydata.deviceId\n local timenum= tonumber(bodydata.unixtime)\n local url = httpbody.URL\n log.debug('rcb_zx [%s] url=%s type=%s', moduleNo, url, type(url))\n\n --获取实时数据\n local datas = bodydata.data\n for k, v in pairs(datas) do\n local deviceUnitNo = v.deviceUnitNo\n local device_Info = Split(deviceUnitNo,'_')\n local channelId = device_Info[2] --模块号\n local freq = v.frequency\n local temperature = v.temperature\n local childDevice = getDeviceInfo(channelId+1)--对方通道号从0开始\n if childDevice ~= nil then\n if childDevice.uplink.capabilities[1].formula.metaid == '5ffcc514-3e04-44e3-824a-c732c656a8c7' then --温度公式\n local k = childDevice.uplink.capabilities[1].formula.props.K \n local f0 = childDevice.uplink.capabilities[1].formula.props.fo\n \n log.debug('rcb_zx module=%s,channel=%s [%s] formula params :k=%s,f0=%s,freq=%s', moduleNo, channelId, childDevice.id, k, f0, freq)\n if k ~= nil and f0 ~= nil then\n Phy = k * (f0 ^ 2 - freq ^ 2) -- + kt * (temp - t0)\n end\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n local data1 = {\n data = {\n frequency = freq,\n temperature = temperature,\n physicalvalue = Phy\n },\n device = childDevice.id,\n type = 1,\n time=recordTime\n }\n log.debug('rcb_zx m=%s,c=%s data1=%s', tostring(moduleNo), tostring(channelId), json.encode(data1))\n table.insert(out.data, data1)\n end\n end\n end\n\n asend_HttpResponse()\n local result=json.encode(out)\n log.debug('rcb_zx m=%s, result=%s', tostring(moduleNo),result)\n ctx:notify(result)\nend\n\nasend_HttpResponse = function()\n ack = {type = 'http', code = 200, body = '{}'}\n ctx:asend(ack)\nend\n\n--获取传感器信息\nfunction getDeviceInfo(datachannel)\n log.debug('rcb_zx 查询子设备 datachannel=%s', datachannel)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices\n for i, subdevice in pairs(subdevices) do\n local deviceChannel = subdevice.uplink.props.channel\n if tostring(deviceChannel) == tostring(datachannel) then\n --log.debug('rcb_zx c=%s,2匹配到设备=%s', deviceChannel, json.encode(subdevice))\n return subdevice\n else\n end\n end\n log.debug('rcb_zx has no device datachannel=%s', datachannel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('rcb_zx has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\n\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n INLINE 2019-04-25 15:00:54.171+08 2019-05-15 14:55:53.478+08 2019-04-25 \N
+03803ee6-5a4a-4ef6-8356-de63aef554b3 fs_oxy \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n协议号: 1101;\n协议名: modbus 温湿度.\n]]--\n--协议参考文档: “统一协议-V2012-04-28.xls”\n\nstart=function ()\n\tlog.debug("fs_oxy:load script %s, moduleId=%s", "fs_oxy", device.moduleId or "[nil]") \n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fs_oxy 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("fs_oxy 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\tsendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tlog.debug("fs_oxy:发送数据=%s",sendBuff)\n\tlocal result=""\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\t\tlog.debug("fs_oxy:接收数据=%s",resp)\n\telse\n local errorOut={\n data ={},\n result = {}\n }\n\t\terrorOut.result = {code=1001,msg='采集超时'} \n result=json.encode(errorOut)\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode(moduleNo_str)\n\t-- 32字节. 大字序\n\tlocal BE='B'\n\tlocal buff='';\n\tlocal module = tonumber(moduleNo_str)\n\tbuff=iota.appendHexByte(buff, module); -- 1: 1 帧头 去:FC,回 FD\n\tbuff=iota.appendHexByte(buff, 0x03); -- 1: 2 设备类型,温湿度=1\t\t\n\tbuff=buff.."00".."00"; -- 1 1 : 5/6 无用\n\tbuff=iota.appendHexWord(buff, 0x08, BE); -- 2: 3/4 模块号\n\tbuff = iota.appendHexCrc(buff,'B',0)\n\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 FD01002300000100005541CC000000000000000000000000000000000000C4DF\n--temp=25.5 Hum=0.85 module=35\nfunction protocol_decode(da,moduleNoCheck)\n \n\tlocal data = da;\n\t\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug("fs_oxy:收到数据%s",data)\n\t--判断数据有效性\t\t\t\n\t--0xFD固定帧头,01是温湿度设备类型 0xDF固定帧尾\n local ErrorCode = IsValid(data,moduleNoCheck)\n if ErrorCode then \n\n log.debug("数据有效")\n\t\t--计算温湿度\n\t\tlocal data1 = iota.hexToFloat(data, 3, 'B',6);\n\t\tlocal data2 = iota.hexToFloat(data, 7, 'B',6);\n\t\tlocal data3 = iota.hexToFloat(data, 11, 'B',6);\n\t\tlocal data4 = iota.hexToFloat(data, 15, 'B',6);\n\n\n\t\tout.data = {\n\t\tso2 = data1,\n\t\tnox = data2,\n\t\tpm_25 = data3,\n\t\tpm10 = data4\n\t\t};\n else\n out.result = {code=errcode,msg=errormsg} \n end\n\treturn json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n log.debug('fs_oxy:开始校验数据%s',data)\n local startbyte = iota.hexToByte(data,0,'B');\n \tlocal devicetype = iota.hexToByte(data,1,'B');\n \tlocal endbyte = iota.hexToByte(data,31,'B');\n if data == nil or string.len(data)/2 ~= 32 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \tif startbyte ~= 0xFD or devicetype ~= 0x01 or endbyte ~= 0xDF then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleNoCheckStr) ~= iota.hexToUShort(data,2,'B') then\t\n errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNoCheckStr,iota.hexToUShort(data,2,'B'))\n errcode = 1004\n return false\n end\n log.debug('fs_oxy:数据校验通过')\n return true\n--crc\nend\n\nonData=function(msg)\nend\n\n INLINE 2019-06-18 15:30:37.119+08 2019-06-18 15:30:37.119+08 2019-06-18 \N
+e62cf4a9-9e5c-434a-9a65-08ec2efd13fb fs_stink \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n协议号: 1101;\n协议名: modbus 温湿度.\n]]--\n--协议参考文档: “统一协议-V2012-04-28.xls”\n\nstart=function ()\n\tlog.debug("fs_stink:load script %s, moduleId=%s", "fs_stink", device.moduleId or "[nil]") \n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fs_stink 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("fs_stink 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\tsendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tlog.debug("fs_stink:发送数据=%s",sendBuff)\n\tlocal result=""\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\t\tlog.debug("fs_stink:接收数据=%s",resp)\n\telse\n local errorOut={\n data ={},\n result = {}\n }\n\t\terrorOut.result = {code=1001,msg='采集超时'} \n result=json.encode(errorOut)\n\tend\n\tlog.debug("fs_stink:result=%s",result)\n\tctx:notify(result)\nend\n\nfunction protocol_encode(moduleNo_str)\n\t-- 32字节. 大字序\n\tlocal BE='B'\n\tlocal buff='';\n\tlocal module = tonumber(moduleNo_str)\n\tbuff=iota.appendHexByte(buff, module); -- 1: 1 帧头 去:FC,回 FD\n\tbuff=iota.appendHexByte(buff, 0x03); -- 1: 2 设备类型,温湿度=1\t\t\n\tbuff=buff.."00".."00"; -- 1 1 : 5/6 无用\n\tbuff=iota.appendHexWord(buff, 0x08, BE); -- 2: 3/4 模块号\n\tbuff = iota.appendHexCrc(buff,'L',0)\n\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 FD01002300000100005541CC000000000000000000000000000000000000C4DF\n--temp=25.5 Hum=0.85 module=35\nfunction protocol_decode(da,moduleNoCheck)\n \n\tlocal data = da;\n\t\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug("fs_stink:收到数据%s",data)\n\t--判断数据有效性\t\t\t\n\t--0xFD固定帧头,01是温湿度设备类型 0xDF固定帧尾\n local ErrorCode = IsValid(data,moduleNoCheck)\n if ErrorCode then \n local hour = os.date("%H")\n local min = os.date("%M")\n\tlocal acqnumber = tonumber(hour)\n log.debug("数据有效")\n\t\t--计算温湿度\n\t\tlocal data1 = iota.hexToFloat(data, 3, 'B',6);\n\t\tlocal data2 = iota.hexToFloat(data, 7, 'B',6);\n\t\tlocal data3 = iota.hexToFloat(data, 11, 'B',6);\n\t\tlocal data4 = iota.hexToFloat(data, 15, 'B',6);\n\n\n\t\tout.data = {\n\t\tNH3 = data1,\n\t\tH2S = data2,\n\t\tVOCS = data3,\n\t\tOdor = data4,\n \t_acq_number\t= acqnumber \n\t\t};\n else\n out.result = {code=errcode,msg=errormsg} \n end\n\treturn json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n log.debug('fs_stink:开始校验数据%s',data)\n \tlocal devicetype = iota.hexToByte(data,1,'B');\n if data == nil or string.len(data)/2 ~= 21 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \tif devicetype ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleNoCheckStr) ~= iota.hexToByte(data,0,'B') then\t\n errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNoCheckStr,iota.hexToByte(data,0,'B'))\n errcode = 1004\n return false\n end\n log.debug('fs_stink:数据校验通过')\n return true\n--crc\nend\n\nonData=function(msg)\nend\n\n INLINE 2019-06-18 15:40:06.778+08 2019-07-17 20:49:56.236+08 2019-06-18 \N
+317e6f80-0f02-444c-b8ef-eb079795edb5 shjy_temp_BK—DC100 \N 沉降 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua \n--老版本协议 数据9个字节 新版本13个 加了4个字节的温度 本协议是老版本\nstart=function()\n log.debug("start %s, moduleId=%s", "jm_lvdt_1550.lua",device.props.moduleId or 'nil')\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0x23, endian) \n buff=iota.appendHexByte(buff, 0x2b, endian) \n\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp_BK—DC100 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("shjy_temp_BK—DC100 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\n\t\n if string.len(moduleNo)<6 then\n local strlen=6-string.len(moduleNo)\n \tfor i=1,strlen do\n moduleNo='0'..moduleNo\n end \n end\n buff= buff..toHexStr(string.sub(moduleNo,1,1)) \n buff= buff..toHexStr(string.sub(moduleNo,2,2))\n buff= buff..toHexStr(string.sub(moduleNo,3,3))\n buff= buff..toHexStr(string.sub(moduleNo,4,4))\n buff= buff..toHexStr(string.sub(moduleNo,5,5))\n buff= buff..toHexStr(string.sub(moduleNo,6,6))\n log.debug("shjy_temp_BK—DC100 moduleId=%s send: %s",moduleNo or 'nil',buff)\n ok,resp=ctx:ssend(buff,60000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n \tlog.debug("shjy_temp_BK—DC100 moduleId=%s result= %s",moduleNo,result)\n \t ctx:done(result)\n else\n log.debug("shjy_temp_BK—DC100 moduleId=%s 数据采集失败 resp=%s",moduleNo or 'nil',resp)\n end\n \nend\n\nunmarshall=function(hex,moduleStr)\n --245961485949634863 moduleId=1\n --"level":1095.05,\n \n log.debug("shjy_temp_BK—DC100 moduleId=%s recv: %s",moduleStr or 'nil',hex)\n\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n \n \n local level=((tonumber(string.sub(hex,3,4),16)-48)*16+(tonumber(string.sub(hex,5,6),16)-48)+(tonumber(string.sub(hex,7,8),16)-48)*16*16*16+(tonumber(string.sub(hex,9,10),16)-48)*16*16)/100\n local level0=((tonumber(string.sub(hex,11,12),16)-48)*16+(tonumber(string.sub(hex,13,14),16)-48)+(tonumber(string.sub(hex,15,16),16)-48)*16*16*16+(tonumber(string.sub(hex,17,18),16)-48)*16*16)/100\n out.data = {\n level=level,\n level0=level0\n }\n\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleCheck)\n log.debug("shjy_temp_BK—DC100 moduleId=%s 校验数据 data= %s",moduleCheck,data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n log.debug('shjy_temp_BK—DC100:模块%s数据校验失败Data is nil or invalid length[%s] hex=%s',moduleCheck,string.len(data)/2,data)\n return false\n end\n log.debug('CMD=%s',iota.hexToByte(data,0,'B'))\n if iota.hexToByte(data,0,'B') ~= 0x24 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n \tlog.debug('shjy_temp_BK—DC100:模块%s数据校验失败 Hex CMD False hex=%s',moduleCheck,data)\n return false\n end\n\n log.debug("shjy_temp_BK—DC100 moduleId=%s 校验通过 data= %s",moduleCheck,data)\n return true\n--crc\nend\n\n -- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n INLINE 2019-05-15 10:50:15.394+08 2019-05-24 08:48:53.476+08 2019-05-15 \N
+2e277b9b-effb-448b-bf14-4b257466ef22 shyf_temp_DZ-IGASQ \N 1.0 6879ee09-86fe-48d2-a3ff-bd5395d66a27 6879ee09-86fe-48d2-a3ff-bd5395d66a27 f 6879ee09-86fe-48d2-a3ff-bd5395d66a27 Lua start=function()\n ok=ctx:asend("010203")\nend\n--2000001001022000203200340123013204450201025505002100003500000000000000000000000000d2a2\nonData=function(hex)\n local moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\n log.debug("shyf_temp_DZ-IGASQ [%s] 收到数据=%s", moduleNo,hex)\n\tlog.debug("shyf_temp_DZ-IGASQ [%s] device =%s",moduleNo, json.encode(device))\n local out={\n data ={},\n result = {}\n }\n\t\n\n\tlocal ErrorCode = IsValid(hex,moduleNo)\n\tif ErrorCode then\n\t\tlog.debug('shyf_temp_DZ-IGASQ [%s] 数据有效',moduleNo)\n\t\t\n\t\tlocal Concentration={}\n\t\tlocal index=0\n\t\tfor i=1,9,1 do\t\t\n\t\t\tindex=9+(i-1)*2\n\t\t\tif i==8 then --温度(4字节)\n\t\t\t\tlocal temp_str=string.sub(hex,51,54)..string.sub(hex,49,50)\n\t\t\t\tlog.debug("shyf_temp_DZ-IGASQ [%s] temp_str=%s",moduleNo,temp_str)\n\t\t\t\t\n\t\t\t\tConcentration[i]=tonumber(temp_str,16)*(-1)^tonumber(string.sub(hex,47,48),16) \n\t\t\telseif i==9 then\n\t\t\t \n\t\t\t\tindex=index+2\n\t\t\t\tConcentration[i]=iota.hexToUShort(hex,index,'L',3);\n\t\t\telse\n\t\t\t\tConcentration[i]=iota.hexToUShort(hex,index,'L',3);\n\t\t end\n\t\tend\n\t log.debug("shyf_temp_DZ-IGASQ [%s] Concentration=%s",moduleNo,json.encode(Concentration))\n\t local k=0\n\t for k_index,v in pairs(Concentration) do\n\t\t\n\t\t\tif k_index==1 then\n\t\t\t k=1.0\n\t\t\t unit = "ug/m3"; --PM2.5\n\t\t\t elseif k_index==2 then\n\t\t\t k=1.0\n\t\t\t unit = "ug/m3"; --PM10\n\t\t\t elseif k_index==3 then\n\t\t\t k=1.0\n\t\t\t unit = "ppb"; --SO2\n\t\t\t elseif k_index==4 then\n\t\t\t k=1.0\n\t\t\t unit = "dB"; --noise\n\t\t\t elseif k_index==5 then\n\t\t\t k=0.001\n\t\t\t unit = "ppm"; --CO\n\t\t\t elseif k_index==6 then\n\t\t\t k=1\n\t\t\t unit = "ppb"; --O3\n\t\t\t elseif k_index==7 then\n\t\t\t k=0.001\n\t\t\t unit = "ppm"; --TVOC\n\t\t\t elseif k_index==8 then\n\t\t\t k=0.1\n\t\t\t unit = "℃"; --温度\n\t\t\t elseif k_index==9 then\n\t\t\t k=0.1\n\t\t\t unit = "℃"; --湿度\n\t\t\t else\n\t\t\t log.debug('shyf_temp_DZ-IGASQ [%s] 无匹配数据类型',moduleNo)\t\t \n\t\t\tend\n\t\t\tConcentration[k_index]=tonumber(string.format("%0.3f",v*k))\t\n\t\t\tlog.debug('shyf_temp_DZ-IGASQ [%s] k_index=%s ,Concentration[k_index]=%s',moduleNo,k_index,Concentration[k_index])\n \n\t\tend\n\t\t\n\t\tout.data = {\n PM25=Concentration[1], --pm2.5\n\t\t\t\tPM10=Concentration[2],\n\t\t\t\tSO2=Concentration[3],\n\t\t\t\tnoise=Concentration[4],\n\t\t\t\tCO=Concentration[5],\n\t\t\t\tO3=Concentration[6],\n\t\t\t\tTVOC=Concentration[7],\n\t\t\t\ttemperature=Concentration[8],\n\t\t\t\thumidity=Concentration[9],\n }\n\t\tlog.debug('shyf_temp_DZ-IGASQ [%s] out.data=%s',moduleNo,json.encode(out.data))\t\n\telse\n out.result = {code = errorcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n ctx:notify(resultData)\nend\n\nIsValid=function(data,moduleNoStr)\n log.debug("shyf_temp_DZ-IGASQ [%s] 校验数据=%s",moduleNoStr,data)\n\tlocal datalength=string.len(data)\n\tif string.len(data)/2 ~=43 then\n\t errormsg = 'data length is wrong'\n errorcode = 1001\n\t\tlog.debug("shyf_temp_DZ-IGASQ [%s] data length is wrong[%s] ",moduleNoStr,string.len(data)/2)\n return false\n end\n\t\n log.debug("shyf_temp_DZ-IGASQ [%s] 校验通过",moduleNoStr)\n return true\nend\n\n\n\n INLINE 2019-06-25 11:40:08.738+08 2019-06-25 11:41:04.515+08 2019-06-25 \N
+59a4437d-8333-47be-9f2a-72705db84885 testHttpget \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug('td_http 设备原型=%s' ,json.encode(device))\n local req = {\n type = 'http',\n url = 'http://gtd.vp.cn/dataChart/queryShareDataList.do?username=tdjgjkjc&password=TJU123456&idType=0&dataType=0&startTime=2020-12-31+16:39:17&endTime=2020-12-31+17:49:17&idCode=0000e7e8c8ca', \n method = 'post',\n\n }\n\treq.ContentType = 'application/json'\n\t\n local moduleNo=device.props.moduleNo\n\tlog.debug('lk_http moduleNo=%s', moduleNo)\n\n\n\t--local aa=os.time()\n\t--local endTime = os.date('%Y-%m-%d %H:%M:%S', aa)\n -- log.debug('td_http: endTime=%s', endTime)\n -- local beginTimestr = aa-4200\n\t--local startTime = os.date('%Y-%m-%d %H:%M:%S', beginTimestr)\n --log.debug('td_http: startTime=%s', startTime)\n\t\n\t\n --req.url=string.format(req.url,startTime,endTime,moduleNo)\n\tlog.debug('lk_http url=%s', req.url)\n \n local ok,ack = ctx:ssend(req, 4000)\n log.debug('lk_http ok=%s,ack=%s', ok,json.encode(ack))\n end INLINE 2021-01-04 09:18:27.77+08 2021-01-04 09:38:38.516+08 2021-01-04 \N
+0b43e37d-9ca2-428c-b636-ea381d1645e3 T420 \N 采集单元-T420(16通道) 1.0 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e f 8d49238d-6e0e-421c-adaf-f7472ec0b50e Lua --//20180809新增项目资料提交\\上海隼星--边坡监测--康飞\\T440振弦采集仪接口协议.docx\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]]\n--32个通道\n--测试536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3355494e2056313d322e3334352056323d302e3030332049333d32302e3030302049343d302e3030302056353d302e39382049363d312e35362049373d322e3134352056383d312e323030201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n--24个通道\n--536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\nstart = function()\n -- log.debug("load script %s, moduleId=%s", "sxcg_3400.lua", device.props.moduleId or "[nil]")\n -- log.debug("sxcg_3400:".."LUA: ctx is =%s", json.encode(device))\n ok, resp = ctx:asend('01020304')\n -- log.debug("sxcg_3400:".."测试下发01020304正常")\nend\n\nonData =\n function(hex)\n log.debug('sxcg_3400收到数据=%s', hex)\n log.debug('sxcg_3400 device =%s', json.encode(device))\n log.debug('sxcg_3400subdevices data is =%s', json.encode(device.dnlinks[1].devices))\n\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n local ModuleChar = 'M=' --振弦\n local DigChar = 'Di' --测斜\n local VoltageChar = 'V=' --电压\n local CurrentChar = 'I=' --电流\n local WaterChar = 'Wa' --水文\n local ResistanceChar = 'R=' --电阻(差阻)\n\n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n sData = toStrHex(hex)\n log.debug('sxcg_3400:sData是 %s', sData)\n --获取子字符串表\n local allResponse = Split(sData, '\\n')\n --移除表内的“”和nil\n for k, v in ipairs(allResponse) do\n if v == '' or v == nil then\n table.remove(allResponse, k)\n log.debug('sxcg_3400:' .. '表内的“”和nil 移除元素为 ' .. tostring(allResponse[k]))\n end\n end\n\n --分析单类数据\n for k, v in ipairs(allResponse) do\n local singleData = Split(v, ' ')\n --移除单类数据中的空\n for kk, vv in ipairs(singleData) do\n if vv == '' or vv == nil then\n --print("移除元素为 ",singleData[kk])\n table.remove(singleData, kk)\n end\n end\n\n if k > 1 then\n local temp1 = singleData[2 + 1]\n local moudleStr = string.sub(singleData[2 + 1], 2, 2)\n local moduleNo = tonumber(moudleStr)\n --解析单条数据\n for kkk, vvv in ipairs(singleData) do\n log.debug('sxcg_3400:遍历解析单条数据 键=' .. tostring(kkk) .. ' 值=' .. tostring(vvv))\n\n local type_sensor = string.sub(string.gsub(singleData[kkk], '%d', ''), 1, 2)\n log.debug('sxcg_3400: type_sensor=' .. type_sensor)\n if string.len(type_sensor) >= 2 then\n --频率\n if type_sensor == ModuleChar then\n --local length = string.len(singleData[kkk]) - 3\n local tempLength = string.len(singleData[kkk + 1]) - 3\n local channelNo = tonumber(string.sub(singleData[kkk], 2, 2), 16)\n local Module = tonumber(string.sub(singleData[kkk], 4, -1))\n local tempData = string.sub(singleData[kkk + 1], 4, 4 + tempLength)\n local Frequency = math.sqrt(Module * 1000)\n local Temp\n local Phy\n if IsNumberic(tempData) then\n Temp = tonumber(tempData)\n else\n Temp = 0\n end\n --获取通道设备deviceId\n local childDevice = getDeviceInfo(moduleNo, channelNo)\n\n local deviceId\n if childDevice ~= nil then\n deviceId = childDevice.id\n log.debug('sxcg_3400:(振弦)子设备 模块%s,通道%s原型childDevice=%s', moduleNo, channelNo, json.encode(childDevice))\n log.debug('sxcg_3400:(振弦)子设备 模块%s,通道%s deviceId=%s ', moduleNo, channelNo, tostring(deviceId))\n local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local To = childDevice.uplink.capabilities[1].formula.props.To\n local Po = childDevice.uplink.capabilities[1].formula.props.Po\n log.debug('sxcg_3400:振弦模块: 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n Phy = nil\n log.debug('sxcg_3400 模块%s,通道%s 当前的Frequency是:%s,%s', moduleNo, channelNo, Frequency, Temp)\n else\n log.debug('sxcg_3400 当前的Frequency是:%s,%s', Frequency, Temp)\n local Fi = Module --经过厂家确认 公式带入的是模数\n Phy = K1 * Fi - (K1 * Fo) + Kt * (Temp - To) + Po\n log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n end\n elseif childDevice.uplink.capabilities[1].formula.metaid == 'a6bc41f8-f061-4714-acd6-7b839a4559fc' then\n --角度公式\n log.debug('sxcg_3400 振弦转角度 当前的Frequency是:%s,%s', Frequency, Temp)\n local Fi = Module --经过厂家确认 公式带入的是模数\n Phy = (Fi * 10 - 125000) / 3600\n log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n else\n log.debug('sxcg_3400 模块%s,通道%s当前无匹配公式', moduleNo, channelNo)\n end\n else\n log.debug('sxcg_3400:(振弦)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(channelNo))\n end\n\n --log.debug("sxcg_3400:振弦模块:公式%s",device.formula)\n\n local data1 = {\n data = {\n frequency = tonumber(string.format('%0.3f', Frequency)),\n temperature = tonumber(string.format('%0.2f', Temp)),\n physicalvalue = tonumber(string.format('%0.3f', Phy))\n },\n device = deviceId,\n type = 1\n }\n log.debug('sxcg_3400:(振弦) Phy结果=%s', Phy)\n table.insert(out.data, data1)\n end\n\n --电压\n if type_sensor == VoltageChar then\n local length = string.len(singleData[kkk]) - 3\n local channelNo = tonumber(string.sub(singleData[kkk], 2, 2), 16)\n local Voltage = tonumber(string.sub(singleData[kkk], 4, -1))\n local Phy\n --获取通道设备deviceId\n local childDevice = getDeviceInfo(moduleNo, channelNo)\n local deviceId\n if childDevice ~= nil then\n deviceId = childDevice.id\n log.debug('sxcg_3400:(电压)子设备原形childDevice=%s', json.encode(childDevice))\n log.debug('sxcg_3400:(电压)子设备deviceId: ' .. tostring(deviceId))\n local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local To = childDevice.uplink.capabilities[1].formula.props.To\n local Po = childDevice.uplink.capabilities[1].formula.props.Po\n log.debug('sxcg_3400:电压模块: 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n Phy = nil\n log.debug('sxcg_3400 模块%s,通道%s 当前的Voltage=%s', moduleNo, channelNo, Voltage)\n else\n log.debug('sxcg_3400 当前的Voltage=%s', Voltage)\n local Fi = Voltage\n Phy = K1 * Fi - (K1 * Fo) + Po\n log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n end\n end\n else\n log.debug('sxcg_3400:(电压)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(channelNo))\n end\n\n local data1 = {\n data = {\n voltage = Voltage,\n physicalvalue = Phy\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n end\n\n --电流\n if type_sensor == CurrentChar then\n local length = string.len(singleData[kkk]) - 3\n local channelNo = tonumber(string.sub(singleData[kkk], 2, 2), 16)\n local Current = tonumber(string.sub(singleData[kkk], 4, -1))\n local Phy\n --获取通道设备deviceId\n local childDevice = getDeviceInfo(moduleNo, channelNo)\n local deviceId\n if childDevice ~= nil then\n deviceId = childDevice.id\n log.debug('sxcg_3400:(电流)子设备原形childDevice=%s', json.encode(childDevice))\n log.debug('sxcg_3400:(电流)子设备deviceId: ' .. tostring(deviceId))\n local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local To = childDevice.uplink.capabilities[1].formula.props.To\n local Po = childDevice.uplink.capabilities[1].formula.props.Po\n log.debug('sxcg_3400:电流模块: 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n Phy = nil\n log.debug('sxcg_3400 模块%s,通道%s 当前的Current=%s', moduleNo, channelNo, Current)\n else\n log.debug('sxcg_3400 当前的Current=%s', Current)\n local Fi = Current\n Phy = K1 * Fi - (K1 * Fo) + Po\n log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n end\n end\n else\n log.debug('sxcg_3400:(电流)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(channelNo))\n end\n\n local data1 = {\n data = {\n current = Current,\n physicalvalue = Phy\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n end\n\n --水文\n if type_sensor == WaterChar then\n local Phy\n if string.sub(singleData[kkk], 1, 6) == 'Water1' then\n local waterData = GetSWData(singleData, kkk)\n\n for i = 1, 8, 1 do\n --获取通道设备deviceId\n local childDevice = getDeviceInfo(moduleNo, i)\n --\n local deviceId\n if childDevice ~= nil then\n deviceId = childDevice.id\n log.debug('sxcg_3400:(水文)子设备原形childDevice=%s', json.encode(childDevice))\n log.debug('sxcg_3400:(水文)子设备deviceId: ' .. tostring(deviceId))\n local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local To = childDevice.uplink.capabilities[1].formula.props.To\n local Po = childDevice.uplink.capabilities[1].formula.props.Po\n log.debug('sxcg_3400:电流模块: 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n Phy = nil\n log.debug('sxcg_3400 模块%s,通道%s 当前的Frequency是:%s,%s', moduleNo, channelNo, Frequency, Temp)\n else\n log.debug('sxcg_3400 当前的Frequency是:%s,%s', Frequency, Temp)\n local Fi = waterData[i]\n Phy = K1 * Fi - (K1 * Fo) + Kt * (Temp - To) + Po\n log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n end\n end\n else\n log.debug('sxcg_3400:(水文)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(i))\n end\n local data1 = {\n data = {\n waterdata = waterData[i],\n physicalvalue = Phy\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n end\n\n --测斜\n if type_sensor == DigChar then\n local Phy\n local Temp\n if (string.sub(singleData[kkk], 1, 3) .. string.sub(singleData[kkk], 5, 5)) == 'Dig=' then\n local channelNo = tonumber(string.sub(singleData[kkk], 4, 4), 16)\n local Inclination = tonumber(string.sub(singleData[kkk], 6, -1))\n --获取通道设备deviceId\n local childDevice = getDeviceInfo(moduleNo, channelNo)\n local deviceId\n if childDevice ~= nil then\n deviceId = childDevice.id\n log.debug('sxcg_3400:(测斜)子设备原形childDevice=%s', json.encode(childDevice))\n log.debug('sxcg_3400:(测斜)子设备deviceId: ' .. tostring(deviceId))\n local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local To = childDevice.uplink.capabilities[1].formula.props.To\n local Po = childDevice.uplink.capabilities[1].formula.props.Po\n log.debug('sxcg_3400:电流模块: 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n Phy = nil\n log.debug('sxcg_3400 模块%s,通道%s 当前的Frequency是:%s,%s', moduleNo, channelNo, Frequency, Temp)\n else\n log.debug('sxcg_3400 当前的Frequency是:%s,%s', Frequency, Temp)\n local Fi = Inclination\n Phy = K1 * Fi - (K1 * Fo) + Kt * (Temp - To) + Po\n log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n end\n end\n else\n log.debug('sxcg_3400:(测斜)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(channelNo))\n end\n\n local data1 = {\n data = {\n inclination = Inclination,\n temperature = Temp,\n physicalvalue = Phy\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n end\n end\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n log.debug('sxcg_3400resultData=%s,hex=%s', json.encode(out), hex)\n ctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo =\n function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("sxcg_3400 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug('sxcg_3400 查询传感器的下行设备 json.encode(child.dnlinks)=%s,=={}?=%s', json.encode(child.dnlinks), json.encode(child.dnlinks) == '{}')\n --log.debug("sxcg_3400:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n --log.debug("sxcg_3400 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n else\n --log.debug("sxcg_3400 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.channelId\n end\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tostring(channelStrCheck) == tostring(channelNoId) then\n log.debug('sxcg_3400: m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('sxcg_3400: m=%s,c=%s subdevices是nil', moduleNoId, channelNoId)\n return nil\n end\nend\n\nIsValid = function(alldata)\n log.debug('sxcg_3400:' .. '校验开始')\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n return false\n end\n\n local length = getIndex(alldata)\n local data = string.sub(alldata, 1, length * 2)\n --log.debug("data:"..data)\n local plu16 = {}\n plu16[0] = string.sub(data, -8, -7)\n plu16[1] = string.sub(data, -6, -5)\n --local plusSum16Hi, plusSum16Lo = iota.hexCheckPlusSum16(data, 0, length - 4)\n -- log.debug("sxcg_3400:".."plu16[0]是:"..plu16[0])\n -- log.debug("sxcg_3400:".."plu16[1]是:"..plu16[1])\n -- log.debug("sxcg_3400:".."plusSum16Hi是:"..tostring(plusSum16Hi))\n -- log.debug("sxcg_3400:".."plusSum16Lo是:"..tostring(plusSum16Lo))\n --if tonumber(plu16[0],16)~=plusSum16Hi or tonumber(plu16[1],16)~=plusSum16Lo then\n -- errormsg = 'checkPlusSum16 is false'\n -- errcode = 1004\n -- return false\n -- end\n\n log.debug('sxcg_3400:' .. '校验通过')\n return true\nend\n\ngetIndex = function(data) --用于IsValid\n local len = string.len(data) / 2\n for n = 1, len do\n local value = string.sub(data, 2 * n - 1, 2 * n)\n if value == '0a' then\n return n\n end\n end\n return 0\nend\n\n--字符串ascii->字符\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend\n\nGetSWData = function(sData, j)\n local SW = {}\n\n local Water1 = tonumber(string.sub(sData[j], 8, -1))\n local Base1 = tonumber(string.sub(sData[j + 1], 7, -1))\n\n local Water2 = tonumber(string.sub(sData[j + 2], 8, -1))\n local Base2 = tonumber(string.sub(sData[j + 3], 7, -1))\n\n local MaxWinSpeed = tonumber(string.sub(sData[j + 4], 13, -1))\n local Direction = tonumber(string.sub(sData[j + 5], 11, -1))\n\n local AverWinSpeed = tonumber(string.sub(sData[j + 6], 14, -1))\n local RealTImeWinSpeed = tonumber(string.sub(sData[j + 7], 18, -1))\n\n local NowDirection = tonumber(string.sub(sData[j + 8], 11, -1))\n local AccRain = tonumber(string.sub(sData[j + 9], 9, -1))\n\n SW[1] = Water1 / 100 + Base1\n SW[2] = Water2 / 100 + Base2\n SW[3] = MaxWinSpeed\n SW[4] = Direction\n SW[5] = AverWinSpeed\n SW[6] = RealTImeWinSpeed\n SW[7] = NowDirection\n SW[8] = AccRain\n return SW\nend INLINE 2019-09-29 16:16:30.277+08 2019-10-15 10:59:47.697+08 2019-09-29 \N
+f24b6f4a-a267-40b7-aca0-1971f916bd81 test_humi_mop_09 \N 1.0 f9927e7e-69c2-439e-916f-4981e6821dfa f9927e7e-69c2-439e-916f-4981e6821dfa f f9927e7e-69c2-439e-916f-4981e6821dfa Lua start = function()\n out = {\n type = 1,\n data = {},\n result = {}\n }\n --清除redis使用\n --local ab = {}\n --local clearValue = json.encode(ab)\n --local r1, r1ok = redis.set('00000001_air_taskconfig', clearValue)\n --local r1, r1ok = redis.set('00000002_air_taskconfig', clearValue)\n --local r1, r1ok = redis.set('00000005_air_taskconfig', clearValue)\n --log.debug('test_humi_mop_0901 测试 ab=%s, type=%s,clearValue=%s', json.encode(ab), type(ab), clearValue)\n log.debug('test_humi_mop_0901 device=%s', json.encode(device))\n local deviceId = device.props.device_id\n --获取 app代理调度能力时 携带的参数 依此判断是何种能力\n local paramStr = capability.param\n log.debug('test_humi_mop_0901 [%s] capability=%s', deviceId, paramStr)\n local paramData = json.decode(paramStr)\n\n if (paramData ~= nil and paramData.code ~= nil and paramData.params ~= nil) then\n local app_cmd = cmd_to_MCU(deviceId, paramData.code, paramData.params, paramData.cmd)\n if paramData.cmd ~= 267 and app_cmd.code ~= 13 then --查询功能 只查服务器缓存 不下发指令到 设备,设备升级单独判断,由于涉及到是否redis存储成功\n sendMsgToDeviceTopic(app_cmd)\n end\n else\n log.debug('test_humi_mop_0901 [%s] paramData 数据内容不正确=%s', deviceId, json.encode(paramData))\n end\n local result = json.encode(out)\n ctx:done(result)\nend\n\nsendMsgToDeviceTopic = function(msg)\n --将指令发送到 设备的topic\n local dev_topic = msg.ID .. '_device_rece'\n local msgStr = json.encode(msg)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = dev_topic})\n log.debug('test_humi_mop_0901 [%s] cmd 发送 dev_topic=[%s] body=%s 完毕 okdev=%s,ack=%s', msg.ID, dev_topic, msgStr, ok, ack)\nend\n\n--净化器 配置指令\nlocal binCache = {params = {}}\ncmd_to_MCU = function(id, code, newconfig, cmdType)\n local cmd = {}\n cmd.from = 'server'\n cmd.ID = id\n cmd.type = tonumber(device.props.sensorType) -- 257 空气净化器 ,513加湿器\n cmd.code = code\n cmd.cmd = cmdType\n if cmdType == 267 then --app查询功能\n if code == 4 then --定时任务查询\n local redis_key = cmd.ID .. '_air_taskconfig'\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n\n --由于lua的array 键值 一动就变成对象 只能用一个新table 存之前数据 当作 array 下发\n local array_taskConfigs = {}\n for _, v in pairs(redis_taskConfigs) do\n if v.looptype ~= nil then\n v.looptype = byte2bin(v.looptype)\n --taskID转为实际id\n local real_tsakId = tonumber(_)\n --app查询得到实际的id\n local jia_tsakId = tonumber(v.task, 16)\n local hexEn = string.format('%02x', tonumber(v.en))\n v.task = tonumber(real_tsakId)\n v.en = hexEn\n end\n table.insert(array_taskConfigs, v)\n end\n\n out.data.params = array_taskConfigs\n log.debug('test_humi_mop_0901 [%s] out.data.params=%s', cmd.ID, json.encode(array_taskConfigs))\n elseif code == 15 then --报警阈查询 设备只有PM2.5\n local redis_key_alarm = cmd.ID .. '_air_alarmconfig'\n local redis_alarmConfigs = getRedisValue_obj(redis_key_alarm, cmd)\n out.data.params = redis_alarmConfigs\n end\n elseif cmdType == 523 then\n if code == 1 then --初始化 id 即修改id\n cmd.id = newconfig\n elseif code == 2 then --修改电源开关\n cmd.params = newconfig\n elseif code == 3 then --风速挡位设置\n cmd.params = newconfig\n elseif code == 4 or code == 5 then --定时任务设置--添加 or 修改 或者使能\n --taskCacheUpdate(cmd.ID, newconfig, cmd) --设备确认成功后,在监听协议中更新redis\n newconfig.en = tonumber(newconfig.en, 16) -- app传的是字符串 '10', 平台需要转换成16\n if newconfig.looptype ~= 'null' and newconfig.looptype ~= nil then\n newconfig.looptype = getlooptype(newconfig.looptype)\n end\n local isDouble = true\n local isTask_on = true\n local isTask_off = true\n if newconfig.time_on == nil then\n isDouble = false\n isTask_on = false\n end\n if newconfig.time_off == nil then\n isDouble = false\n isTask_off = false\n end\n if newconfig.task == 255 then\n --255 任务号自增\n\n newconfig.task = craetTaskId(cmd, isDouble, isTask_on, isTask_off)\n else\n --如果是修改双任务 有定时开的 就是前面是1 的 那么发给设备的时候要注意taskid格式\n local doubleTaskId = transferDoubleTaskId(newconfig.task, isDouble, isTask_on, isTask_off)\n newconfig.task = doubleTaskId\n end\n cmd.params = newconfig\n elseif code == 6 then --定时删除设置\n newconfig.task = getTaskId(cmd.ID, newconfig, cmd) --设备确认成功后,在监听协议中更新redis\n cmd.params = newconfig\n elseif code == 7 then --杀菌灯开关控制\n cmd.params = newconfig\n elseif code == 8 then --负离子开关控制\n cmd.params = newconfig\n elseif code == 9 then --加湿器开关控制\n cmd.params = newconfig\n elseif code == 10 then --加湿器挡位设置\n cmd.params = newconfig\n elseif code == 11 then --设备模式控制\n cmd.params = newconfig\n elseif code == 12 then --童锁开关控制\n cmd.params = newconfig\n elseif code == 13 then --远程升级 app发起 然后 平台redis存储升级包 ,平台与设备交互,上报升级状态\n binCache.params = getPackageList(newconfig.binBuff)\n binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n --将升级包存储 redis\n local redis_key_bin = cmd.ID .. '_air_bin'\n local isSetOK = setRedisValue_obj(redis_key_bin, binCache, cmd)\n if isSetOK == true then\n log.debug('test_humi_mop_0901 [%s][code=%s] 准备触发固件升级[%s]', cmd.ID, cmd.code, newconfig.binName)\n local dataObject = cmd\n dataObject.from = 'server'\n dataObject.type = tonumber(device.props.sensorType) -- 513加湿器 257 净化器\n dataObject.cmd = 523\n dataObject.params = {}\n dataObject.params.hard = getBinHard(newconfig.binName)\n --防止为空16=0x10 初始版本\n dataObject.params.soft = getBinSoft(newconfig.binName)\n dataObject.params.type = 1 --服务器发起升级申请\n dataObject.params.count = binCache.params.count\n dataObject.params.size = binCache.params.size\n dataObject.params.CRC = binCache.params.CRC\n log.debug('test_humi_mop_0901 [%s][code=%s] 准备触发固件升级--开始发指令 dataObject=%s', cmd.ID, cmd.code, json.encode(dataObject))\n sendMsgToTopic(dataObject, 'device')\n else\n log.debug('test_humi_mop_0901 [%s][code=%s] 存储失败 isSetOK=%s[type=%s]', cmd.ID, cmd.code, type(isSetOK))\n end\n elseif code == 15 then --报警阈值设置 设备只有PM2.5\n cmd.params = newconfig\n local redis_key_alarm = cmd.ID .. '_air_alarmconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n setRedisValue_obj(redis_key_alarm, newconfig, cmd)\n log.debug('test_humi_mop_0901 [%s][code=%s] redis_set完成=%s', cmd.ID, cmd.code)\n elseif code == 17 then --加湿器 恒湿设置\n cmd.params = newconfig\n end\n end\n\n return cmd\nend\n\nsendMsgToTopic = function(msg, msgTo)\n local topic\n log.debug('test_humi_mop_0901 进入固件升级发送函数 [%s][code=%s]', msg.ID, msg.code)\n if msgTo == 'app' then\n --将指令发送到 appProxy的topic\n topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个,代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n elseif msgTo == 'device' then\n topic = msg.ID .. '_device_rece'\n end\n log.debug('test_humi_mop_0901 固件升级发送函数 [%s][code=%s] topic=%s', msg.ID, msg.code, topic)\n msg.packid = os.time()\n local msgStr = json.encode(msg)\n log.debug('test_humi_mop_0901 [%s][code=%s] msgStr=%s', msg.ID, msg.code, msgStr)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n log.debug('home_airclear_0901 固件升级发送函数 [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', msg.ID, msg.code, binCache.updateTime, topic, msgStr, ok, ack)\nend\n\ngetTaskId = function(devId, taskConfig, cmd_obj)\n local redis_key = devId .. '_air_taskconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n local cmd_code = cmd_obj.code\n --判断 任务 id是否存在 存在就更新\n local tsakId = tostring(taskConfig.task)\n\n local tb = redis_taskConfigs[tsakId]\n return tb.task\nend\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n local redis_key = devId .. '_air_taskconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n --判断 任务 id是否存在 存在就更新\n local tsakId = tostring(taskConfig.task)\n log.debug('test_humi_mop_0901 [%s] 排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s', cmd_obj.ID, tsakId, redis_taskConfigs, json.encode(redis_taskConfigs), type(redis_taskConfigs))\n local cmd_code = cmd_obj.code\n if cmd_code == 4 then --添加或修改\n if redis_taskConfigs[tsakId] ~= nil then\n redis_taskConfigs[tsakId] = taskConfig\n log.debug('test_humi_mop_0901 非首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n else\n log.debug('test_humi_mop_0901 首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n --table.insert(redis_taskConfigs, tsakId, taskConfig)\n redis_taskConfigs[tsakId] = taskConfig\n end\n\n log.debug('test_humi_mop_0901 [%s][code=%s] redis_taskConfigs=%s', cmd_obj.ID, cmd_obj.code, json.encode(redis_taskConfigs))\n elseif cmd_code == 6 then --删除任务\n redis_taskConfigs[tsakId] = nil\n log.debug('test_humi_mop_0901 删除任务 tsakId=%s', tsakId)\n end\n setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\ngetRedisValue_obj = function(key, logObject)\n local r1, r1ok = redis.get(key) --获取上次记录时间\n log.debug('test_humi_mop_0901 [%s][code=%s] r1=%s[%s],r1ok=%s key=%s', logObject.ID, logObject.code, r1, type(r1), r1ok, key)\n\n local params = {}\n if r1ok and r1 ~= nil and r1 ~= 'null' then\n local taskConfig = json.decode(r1)\n params = taskConfig\n else\n log.debug('test_humi_mop_0901 [%s][code=%s] taskConfig读取失败 r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n end\n return params\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n local setValue = json.encode(setValueObject)\n local r1ok, r1 = redis.set(key, setValue)\n log.debug('test_humi_mop_0901 [%s][code=%s] [setRedis] r1=%s,r1ok=%s[type=%s],key=%s,setValue=%s', logObject.ID, logObject.code, r1, r1ok, type(r1ok), key, setValue)\n return r1ok\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n local packageParams = {subList = {}}\n local len = string.len(allPackageStr) / 2\n local count = len / 1024\n local packageCount = math.ceil(count)\n packageParams.size = len\n packageParams.count = packageCount\n --添加整个文件校验\n local allAppendCrc16 = iota.appendHexCrc(allPackageStr, 'B', 0)\n local allcrc = string.sub(allAppendCrc16, -4, -1)\n packageParams.CRC = tonumber(allcrc, 16)\n for i = 1, packageCount, 1 do\n local start_index = (i - 1) * 2048 + 1\n local end_index = start_index + 2047 -- 如果 越界,lua自动取实际的 结束索引\n local subPackage = string.sub(allPackageStr, start_index, end_index)\n --最后一包判断长度是否是 4的倍数 不足写0x1A\n if i == packageCount then\n repeat\n local subPackage_len = string.len(subPackage) / 4\n local min_subPackage_len = math.floor(subPackage_len)\n local diff_value = subPackage_len - min_subPackage_len\n if diff_value > 0 then\n subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍,不足写0x1A\n end\n until (diff_value == 0)\n end\n\n local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n local subcrc = string.sub(subAppendCrc16, -4, -1)\n local subCheck = tonumber(subcrc, 16)\n local subBin = {}\n subBin.len = string.len(subPackage) / 2\n subBin.buff = subPackage\n subBin.checkint = subCheck\n packageParams.subList[i] = subBin\n end\n return packageParams\nend\n\ncraetTaskId = function(cmd, isDouble, isOn, isOff)\n local redis_key = cmd.ID .. '_air_taskconfig'\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n for i = 2, 15, 2 do --01 只有1 且1是便捷任务 23 45 67 89 ab cd ef 是7组其他任务\n local task_k = tostring(i)\n if redis_taskConfigs[task_k] == nil then\n local taskid_new = i --默认是单任务的 task\n local kk\n if isDouble then --如果是双任务 双任务 以开任务号为准\n kk = string.format('%01x', tonumber(task_k)) .. string.format('%01x', tonumber(task_k) + 1)\n taskid_new = tonumber(kk, 16)\n elseif isOn then\n kk = string.format('%01x', tonumber(task_k)) .. '0'\n taskid_new = tonumber(kk, 16)\n elseif isOff then\n kk = '0' .. string.format('%01x', tonumber(task_k) + 1) --新建的关任务=同组的开任务号+1\n taskid_new = tonumber(kk, 16)\n end\n log.debug('test_humi_mop_0901 自增任务id taskid_new=%s,kk=%s,i=%s', taskid_new, kk, i)\n return taskid_new\n end\n end\n return 255 --自增失败传255\nend\n\ntransferDoubleTaskId = function(appTaskId, isDouble, isOn, isOff)\n local task_k = tonumber(appTaskId)\n\n local taskid_new = 255 --默认是单任务的 task\n local kk\n if isDouble then --如果是 同时开关任务 关任务号就是开任务号+1\n kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n taskid_new = tonumber(kk, 16)\n elseif isOn then\n kk = string.format('%01x', task_k) .. '0'\n taskid_new = tonumber(kk, 16)\n elseif isOff then\n kk = '0' .. string.format('%01x', task_k)\n taskid_new = tonumber(kk, 16)\n end\n log.debug('test_humi_mop_0901 使能 任务id taskid_new=%s,kk=%s', taskid_new, kk)\n return taskid_new\nend\ngetlooptype = function(str)\n local slen = string.len(str)\n local looptype_num = 0\n if slen == 8 then\n for i = 0, 7, 1 do\n local index = -1 * (i + 1)\n local one = string.sub(str, index, index)\n --print('one='..one)\n if one == '1' then\n looptype_num = looptype_num + 2 ^ i\n --print('looptype_num='..one)\n end\n end\n end\n local int_num = tonumber(string.format('%d', looptype_num))\n return int_num\nend\n\nfunction byte2bin(n)\n local t = {}\n for i = 7, 0, -1 do\n t[#t + 1] = math.floor(n / 2 ^ i)\n n = n % 2 ^ i\n end\n return table.concat(t)\nend\n\ngetBinSoft = function(binName)\n local soft_version\n if binName ~= nil then\n --文件名 例 KQJSQ_SD01.H016.S016.A.201012.bin\n local split_names = split(binName, '.')\n for key, value in pairs(split_names) do\n local head_str = string.sub(value, 1, 1)\n if head_str == 'S' then\n soft_version = tonumber(string.sub(value, 2, -1))\n return soft_version\n end\n end\n end\n return soft_version\nend\n\ngetBinHard = function(binName)\n local Hard_version\n if binName ~= nil then\n --文件名 例 KQJSQ_SD01.H016.S016.A.201012.bin\n local split_names = split(binName, '.')\n for key, value in pairs(split_names) do\n local head_str = string.sub(value, 1, 1)\n if head_str == 'H' then\n Hard_version = tonumber(string.sub(value, 2, -1))\n return Hard_version\n end\n end\n end\n return Hard_version\nend\n\nsplit = function(s, delim)\n if type(delim) ~= 'string' or string.len(delim) <= 0 then\n return\n end\n\n local start = 1\n local t = {}\n while true do\n local pos = string.find(s, delim, start, true) -- plain find\n if not pos then\n break\n end\n\n table.insert(t, string.sub(s, start, pos - 1))\n start = pos + string.len(delim)\n end\n table.insert(t, string.sub(s, start))\n\n return t\nend INLINE 2020-10-10 10:47:58.776+08 2020-12-02 11:15:54.579+08 2020-10-10 \N
+f54ae30e-c52b-4a68-92a6-87a72741467a shszsj_115 \N 1.0 e2534302-c06d-4ddf-8857-7011bfdde945 e2534302-c06d-4ddf-8857-7011bfdde945 f e2534302-c06d-4ddf-8857-7011bfdde945 Lua --//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shszsj_115", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp_BK-YL01 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x19, 'L')\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x02, 'L')\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("shszsj_115 SSend error!")\n end\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n \n\t\tlocal temperature=iota.hexToFloat(hex,3,'B')\n out.data = {\n\t\t\n\t\t\ttemperature=tonumber(string.format('%0.1f',temperature))\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('shszsj_115 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shszsj_115 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2019-11-05 13:21:57.292+08 2019-11-05 13:22:35.043+08 2019-11-05 \N
+1d3ad5d8-27b3-4b70-ac2c-fbd67ddd48cf yx_liquidLevel_9006 \N 1.0 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f 67c8b9e9-38d6-4c9a-8772-9c96d78121ed Lua --D:\\SVN\\201901项目\\20190104新项目资料提交\\江西飞尚--静力水准仪--岳晓静\\静力水准仪FS-JLSZ-V1.00通讯协议.docx\n\nstart=function ()\n\t out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n\tlocal sendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\telse\n\t\tout.result = {code=1001,msg='采集超时'} \n\t\tresult=json.encode(out)\n\tend\n\tctx:done(result)\nend\n\n\nfunction protocol_encode(moduleNoStr)\n--采集压力的偏移地址为22-23 默认是22(0x16)\n--采集温度的偏移地址为38-39 默认是38(0x26)\n\tlocal BE='B'\n\tlocal buff=''; \n\tbuff=iota.appendHexByte(buff, moduleNoStr, BE); -- 3: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x03, BE); --功能码 0x03采集 \n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x16, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n buff=iota.appendHexByte(buff, 0x12, BE); --读取18个寄存器\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) --CRC16\n\treturn buff\nend\n--模块号 17\n--1103001600122693\n--11032441b30e9a000000000000000042c800000000000041200000471335004a6a96fcc04fb2cb31\n\nfunction protocol_decode(hex,moduleNoCheck)\n \n\tlocal data = hex;\n\n\t--判断数据有效性\t\t\t\n\tlocal ErrorCode = IsValid(data,moduleNoCheck)\n if ErrorCode then\n\tlocal pressure = iota.hexToFloat(data, 3,'B'); -- 压强\n\tlocal temperature = iota.hexToFloat(data, 35,'B'); -- 温度\t\t\t\n\t\tout.data = {\n\t\tpressure=tonumber(string.format('%0.3f',pressure)),\n\t\ttemperature=tonumber(string.format('%0.2f',temperature))\n\t\t}\n\telse\n out.result = {code=errcode,msg=errormsg} \n\tend\n\t return json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n\t--[[local checkLen=string.len(data)/2\n if data == nil or checkLen~= 41 then\n errormsg = string.format('无效的数据长度=%s≠41',checkLen)\n errcode = 1002\n return false\n end]]--\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = string.format('无效的数据指令≠03')\n errcode = 1003\n return false\n end\n\tlocal checkModule=iota.hexToByte(data,0,'B')\n if moduleNoCheckStr ~= tostring(checkModule) then \t\n errormsg = string.format('无效的模块号=%s≠%s',checkModule,moduleNoCheckStr)\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2019-08-27 08:56:53.667+08 2020-04-13 13:22:57.822+08 2019-08-27 \N
+84196675-5121-45c9-999a-65cddab21183 BKtsqk77 \N 1.0 158a00b4-7170-4f1e-acd7-81e38c57b8da 158a00b4-7170-4f1e-acd7-81e38c57b8da f 158a00b4-7170-4f1e-acd7-81e38c57b8da Lua start = function()\n log.debug('BKtsqk77 device=>%s', json.encode(device))\nend\n\nonData = function(hex)\n --主动上传式\n log.debug('BKtsqk77 Received=>%s', hex)\n local out = {\n type = 2,\n data = {},\n result = {}\n }\n --- 这个模拟测量的时候用到的方法\n\tlocal hex=HextoStr(hex) --将16转换成字符串\n local moduleNoStr = device.uplink.props.module \t\n\tlog.debug("BKtsqk77: 采集仪模块号moduleNoStr=%s",moduleNoStr)\n\t--local subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\t\tlog.debug("BKtsqk77: 码流数据转换成字符串hex=%s",hex)\n local channelDatas = {}\n local ErrorCode = IsValid(hex, moduleNoStr)\n\t\n\t\n if ErrorCode then\n\t\tlocal qkt=string.sub(hex,3,-1) --去掉开头,\n\t\t log.debug('BKtsqk77:去掉开头的码流qkt=%s', qkt)\n\t\tlocal sp='||'\t--分隔符||\n\t\tlog.debug('BKtsqk77:分割符spsp=%s', sp)\n\t\tlocal sArray=split(qkt,sp)\n\t\tlog.debug('BKtsqk77:分割码流6666sArray=%s', json.encode(sArray))\n\t\t--这里table表中第一个值是空的,k=1 v=空\n\t\t for k,v in pairs(sArray) do\n\t\t log.debug('BKtsqk77:各个传感器的码流v=%s', v)\n\t\t --2/0.000736/0.947368/201911111053/49/## 传感器的码流\n\t\t \n\t\t local sw='/' --分割符 / \n\t\t local AArray=split(v,sw)\n\t\t log.debug('BKtsqk77:这个时候得到单个设备的码流的AArray=%s', json.encode(AArray))\n\t\t\t\t for k,vt in pairs(AArray) do\n\t\t\t\t\tlocal wp='_' --分割符 _\n\t\t\t\t\tlocal AArrayw=split(vt,wp)\n\t\t\t\t\tlog.debug('BKtsqk77:这个时候得到单个设备的码流的通道值AArrayw=%s', json.encode(AArrayw))\n\t\t\t\t\tlocal tdz = tonumber(AArrayw[2]) --得到通道值\n\t\t\t\t\tlog.debug('BKtsqk77:最后截取的通道值是68686769tdz=%s', tdz)\n\t\t\t\t\tlocal childDevice = getDeviceInfo(moduleNoStr, tdz)\n\t\t\t\t\tphysicalvalue = AArray[2] --这个是物理量的值\n\t\t\t\t\tlog.debug('BKtsqk77:各个传感器的物理量11111=%s', physicalvalue)\n\t\t\t\t\tfrequency=AArray[3] --这个是频率的值\n\t\t\t\t\tlog.debug('BKtsqk77:各个传感器的物理量2222=%s', frequency)\n\t\t\t\t\tif childDevice~= nil then\n\t\t\t\t\tdeviceId = childDevice.id\n\t\t\t\t\tlocal data1 = {\n data = {\n physicalvalue =physicalvalue,\n\t\t\t\t\t\t\tfrequency=frequency\n\t\t\t\t\t\t\t\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n\t\t\t\t\t\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t end\n\t\t \n\t\t end\n\n\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n log.debug('BKtsqk77 resultData=%s', resultData)\n ctx:notify(resultData)\n\n\n\t\n\n\n\t\nend\n\n\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("BKtsqk77 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug('BKtsqk77:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n -- log.debug('BKtsqk77 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n else\n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.channelId\n --log.debug('BKtsqk77 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n end\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tostring(channelStrCheck) == tostring(channelNoId) then\n log.debug('BKtsqk77: m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('BKtsqk77: subdevices是nil')\n return nil\n end\nend\n\nIsValid = function(data, module_device)\n local datalen = string.len(data)\n\t--or datalen < 46\n if data == nil then\n errormsg = string.format('数据长度无效=%s', datalen)\n errcode = 1002\n return false\n end\n\n if string.sub(data, 1, 2) ~= '||' or string.sub(data, -2, -1) ~= '##' then\n errcode = 1003\n errormsg = string.format('数据帧头帧尾无效')\n return false\n end\n\n \n log.debug('BKtsqk77:校验通过')\n return true\nend\n\n\n\nsplit=function(input, delimiter)\n input = tostring(input)\n delimiter = tostring(delimiter)\n if (delimiter=='') then return false end\n local pos,arr = 0, {}\n for st,sp in function() return string.find(input, delimiter, pos, true) end do\n table.insert(arr, string.sub(input, pos, st - 1))\n pos = sp + 1\n end\n table.insert(arr, string.sub(input, pos))\n return arr\nend\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n INLINE 2019-11-14 14:44:38.04+08 2019-11-27 10:17:32.842+08 2019-11-14 \N
+882d3fe2-780a-4da9-adaf-8d1395b022cd SMTN-M11 \N 1.0 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 f ccef8df0-e1f5-46be-a5b7-040285b1b6e8 Lua --北京思莫特\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "SMTN-M11_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("SMTN-M11 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("SMTN-M11 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t--下发码流 01 03 00 00 00 1e c5 c2\n\t\tbuff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n \t\tbuff=iota.appendHexByte(buff, 0x00, endian) \t\t\n buff=iota.appendHexByte(buff, 0x1e, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) \n\t\tlog.debug("SMTN-M11 下发码流111 buff=%s",buff)\n\n\n ok,resp=ctx:ssend(buff,30000) --下发的码流\n \n\tif ok then --下发是否成功\n result = unmarshall(resp)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n\t\t\n end \n -- ctx:asend("hello")\n ctx:done(result) --协议完成打ctx:done ()\nend\n\n--01033C000800010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C59E\n\n--01 03 3C 0008 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 C59E\nunmarshall=function(hex,moduleStr)\n \tlocal out = {\n type = 2,\n data = {},\n result = {}\n }\n\tlocal index_485_1 =3 --第一个数据的开头位置\n\tlocal index_485_2 =5 --第二个数据的开头位置\n\t\n\tlog.debug('SMTN-M11 [%s] 000000hex=%s', hex,moduleStr)\n\t\n\tlocal channelDatas = {} --放数据的\n local ErrorCode = IsValid(hex,moduleStr) --判断是否符合厂家协议\n if ErrorCode then \n\t\t\n\t\t--local numsj=iota.hexToShort(hex,2,'B');\n\t---\tlog.debug('SMTN-M11 [%s] 11111111111numsj=%s', numsj)\n\t\t--local numofzx=string.sub(hex, 5, 8)\n\t\t--log.debug('SMTN-M11 [%s] 1111numofzx=%s', numofzx)\n\t\t\n\t\tfor i = 1, 15, 1 do\n\t\t\n\t\t--第一个是纵向移值,第二个是横向移值\n\t\t local dataCGS={iota.hexToShort(hex, index_485_1+(i - 1) * 4, 'B')/10,iota.hexToShort(hex, index_485_2+(i - 1) * 4, 'B')/10}\n\t\t\t\tchannelDatas[i] = dataCGS\n\t\t\t\tlog.debug('SMTN-M11 [%s] 7878787878channelDatas[i]=%s', json.encode(channelDatas[i]))\n\t\t\n end\n\t\tlog.debug('SMTN-M11 放数据的地方numsj=%s', json.encode(channelDatas))\n\t\t\n\t\t\n\t\t local moduleNo=device.uplink.props.module \n\t\tlocal subdevices=device\n\t\t log.debug('SMTN-M11 [%s] 获取采5343654366集仪下子设备列表天天umsj=%s', json.encode(subdevices))\n\t\t\n\t\t--遍历表,从表中取数据\n\t\tfor k, v in pairs(channelDatas) do\n\t\tlog.debug('SMTN-M11 子设备的东西模块号111=%s,通道号=%s', moduleNo,k)\n\t\tlog.debug('SMTN-M11 子设备的通道号和数据222=%s,通道号=%s',json.encode(v),k)\n\t\t\n\t\tlocal childDevice = getDeviceInfo(moduleNo,k)\n\t\tlog.debug('SMTN-M11 取那些111kba=%s',json.encode(childDevice))\n\t\t\n\t\tlocal deviceId\n\t\tif childDevice ~= nil then\n\t\t\n\t\tlocal Ydisplacement= channelDatas[k][1] --纵向位移\n\t\tlocal Xdisplacement= channelDatas[k][2] --横向位移\n\t\t\n\t\t \n\t\t --local phy=kA*(frequency ^ 2 - kFo ^ 2) +kB*(frequency - kFo)\n\t\tdeviceId = childDevice.id\n log.debug('SMTN-M11:子设备原形childDevice=%s', json.encode(childDevice))\n\t\tlocal data1 = {\n data = {\n Xdisplacement = Xdisplacement,\n\t Ydisplacement= Ydisplacement\n\t\t\t\t\t\t\n },\n device = deviceId,\n type = 1\n }\n\t\t\t\t\t\n\t\t\t\t\ttable.insert(out.data, data1)\n\t\telse\n\t\t\t log.debug('SMTN-M11 子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\t\t\n\t\t\t\t\t\n\t\tend\n\t\t\n\t\t--\n\t\t\n\t\t\n\t\tend\n\t\t\n\n \n \n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n\tlog.debug('SMTN-M11 最后数据的返回=%s',json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('SMTN-M11开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if data == nil or string.len(data) / 2 ~= 65 then\n errormsg = 'Data is nil or invalidLen=' .. string.len(data) / 2\n errcode = 1001\n return false\n end\n \n log.debug('SMTN-M11 数据校验通过')\n return true\n\nend\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n\t\t\t\n\tlog.debug('SMTN-M11 进入采集仪下面的子设备的通道号3434=%s',channelNoId)\n\tlog.debug('SMTN-M11 进入采集仪下面的子设备的模块号号3434=%s',moduleNoId)\n\tlog.debug('SMTN-M11 444进入采集仪下面的子设备的数据=%s',json.encode(device.dnlinks[1].devices))\n if device.dnlinks[1].devices ~= nil then\n\t\tlog.debug('SMTN-M11 444进入采集仪下面的子设备的数据=%s',json.encode(device.dnlinks[1].devices))\n log.debug("SMTN-M11 555查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug('SMTN-M11:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tlog.debug("SMTN-M11 666查询m=%s c=%s 子设备的模块号",moduleStrCheck)\n channelStrCheck = child.uplink.props.channel\n\t\t\t\tlog.debug("SMTN-M11 777查询m=%s c=%s 子设备的通道号",channelStrCheck)\n -- log.debug('SMTN-M11 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n else\n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.channelId\n --log.debug('SMTN-M11 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n end\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tostring(channelStrCheck) == tostring(channelNoId) then\n log.debug('SMTN-M11: m=%s c=%s 匹配到 子设备原形3344343child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('SMTN-M11: subdevices是nil')\n return nil\n end\nend\n\n\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n INLINE 2019-11-22 09:48:20.449+08 2019-11-27 14:35:14.194+08 2019-11-22 \N
+8565ec35-5b7e-4dde-8536-dd450d4c26a0 test_humi_0901 \N 1.0 f9927e7e-69c2-439e-916f-4981e6821dfa f9927e7e-69c2-439e-916f-4981e6821dfa f f9927e7e-69c2-439e-916f-4981e6821dfa Lua start = function()\n --local str="484f0020d54200083f710008b96600083b710008d56100087b7e000800000000000000000000000000000000997400089163000800000000cd71000809760008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef42000875760008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008417a0008c97a0008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef42000800f002f800f092f80aa090e8000c82448344aaf10107da4501d100f087f8aff2090ebae80f0013f0010f18bffb1a43f001031847ecba00000cbb0000103a24bf78c878c1fad8520724bf30c830c144bf04680c60704700000023002400250026103a28bf78c1fbd8520728bf30c148bf0b6070476e2900f09184702900f0878166290bf02a8065290bf0278067290bf0248061290bf0238003681b0a28bf41f08001692900f0f880642900f0f580752900f0f2806f2900f08587782900f05381e92900f01f87e42900f01c87f52900f01987ef2900f08287f82900f052810368db0928bf41f08001632900f0a086732900f0a586e32901f09581f32901f09a81002070471fb50af0e3ff00f075ff0400002000210af0c8f9401c6060002000210af0d8f9e0601fbd10b510bd01f015fa1146fff7e7ff05f029f801f033fa03b4fff7f2ff03bc01f033fa00000948804709480047fee7fee7fee7fee7fee7fee7fee7fee7fee7fee704480549054a064b704700000d7600088941000848490020484f0020484b0020484b002010b5044600f086fb0068005dc00602d504f1200010bd204610bd00001cb50c46064b7b4469460090204600f018fe04460020694600f026fe20461cbd5f0c00000fb41cb5084b06aa7b4469460090059800f005fe04460020694600f013fe20461cbc5df814fb0000390c000070b5044685690068c10601d5302600e02026c00707d070bdd4e9012130469047206a401c20626d1ef6d570bd70b5044685690078c00707d170bdd4e9012120209047206a401c20626d1ef6d570bd70b50c460546012a05d02878800600d5ea69002302e0012305e05b1c934202d2e05c0028f9d1a869e618c01aa861286a1844"\n --local appendCrc16 = iota.appendHexCrc(str, 'B', 0)\n --local crc16str = string.sub(appendCrc16, -4, -1)\n --local crc16 = tonumber(crc16str, 16)\n -- log.debug('test_humi_0901 校验16=%s', crc16)\n log.debug('test_humi_0901 device=%s', json.encode(device))\n --onData('')\nend\n\nlocal binCache = {params = {subList = {}}}\n--固件升级包 缓存结构\n--binCache ={params = {subList = {}}, updateTime = '2020-09-23 06:01:06',size=12345678,count=20}\nonData = function(mq_body)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n local receiveStr = mq_body.payload\n log.debug('test_humi_0901 receiveStr=%s', receiveStr)\n --解析数据\n local dataObject = json.decode(receiveStr)\n log.debug('test_humi_0901 [%s][code=%s] receiveStr=%s', dataObject.ID, dataObject.code, receiveStr)\n if dataObject ~= nil then\n --判断数据源 是appProxy 还是 device\n --设备数据类型\n -- code:0x01 设备信息上报\n -- code:0x02 心跳上报\n -- code:0x03 周期上报 设备数据与状态\n -- code:0x04 报警上报\n -- code:0x05 时间同步上报\n if dataObject.from == 'device' then\n if dataObject.cmd == 1035 and dataObject.result == 0 then\n if dataObject.code == 4 or dataObject.code == 5 or dataObject.code == 6 then --设备返回的 定时设置应答\n --将设置成功的有效任务 存进redis\n local newconfig = dataObject.params\n taskCacheUpdate(dataObject.ID, newconfig, dataObject)\n --将 dataObject 发给 app作为响应\n dataObject.params.result = dataObject.result\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 2 then --电源开关\n local powerlock = dataObject.params.onoff\n dataObject.params = {}\n dataObject.params.powerlock = powerlock\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 7 then --杀菌灯开关回应\n local uvlock = dataObject.params.onoff\n dataObject.params = {}\n dataObject.params.uvlock = uvlock\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 10 then --加湿器挡位\n local gear = dataObject.params.gear\n dataObject.params = {}\n dataObject.params.humigear = gear\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 11 then --设备工作模式 0自动 1手动 2睡眠 3恒湿\n local mode = dataObject.params.mode\n dataObject.params = {}\n dataObject.params.mode = mode\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 12 then --童锁开关回应\n local childlock = dataObject.params.onoff\n dataObject.params = {}\n dataObject.params.childlock = childlock\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 13 then --远程升级触发后,设备回应 要第几包,平台按需发送\n if dataObject.params.frame == 1 then --设备请求第一包的时候 平台重新获取redis 做缓存\n local redis_key_bin = dataObject.ID .. '_air_bin'\n --更新 升级 固件 缓存\n binCache = getRedisValue_obj(redis_key_bin, dataObject)\n end\n --升级文件流 缓存,拆解成多个小包\n -- binCache.buff = dataObject.params.binBuff\n -- binCache.size = string.len(binCache.buff)\n -- binCache.params = getPackageList(binCache.buff)\n log.debug(\n 'test_humi_0901 [%s][code=%s] 平台收到 设备升级 回应,准备下发升级包[第%s/%s包]',\n dataObject.ID,\n dataObject.code,\n dataObject.params.frame,\n binCache.params.count\n )\n\n --dataObject.params.updateState = dataObject.params.sign -- 1:拒绝升级2:准备升级3:升级中4:完成升级\n\n --设备准备升级 or 升级中 发送固件包\n if dataObject.params.sign == 2 or dataObject.params.sign == 3 then\n if dataObject.params.frame ~= nil then\n dataObject.from = 'server'\n dataObject.cmd = 523\n local frameIndex = dataObject.params.frame\n dataObject.params = {}\n dataObject.params.type = 2 --服务器正在升级设备\n dataObject.params.frame = frameIndex\n\n local sub_bin = binCache.params.subList[frameIndex]\n\n if sub_bin ~= nil then\n dataObject.params.bin = sub_bin.buff\n dataObject.params.len = sub_bin.len\n dataObject.params.crc16 = sub_bin.checkint\n end\n\n --数据发送到appProxy binCache.params.count\n sendMsgToTopic(dataObject, 'device')\n end\n dataObject.params.updateState = 'isworking' --升级中\n elseif dataObject.params.sign == 4 then\n if dataObject.params.msg == 2 then\n dataObject.params.updateState = 'ok' -- 完成升级\n else\n dataObject.params.updateState = 'fail'\n end\n elseif dataObject.params.sign == 1 then\n \t\t\t--dataObject.params.updateState = 'ok'\n dataObject.params.updateState = 'fail' --先让他们走流程 写死ok\n end\n dataObject.params.flag = getSoftUpdateMsg(dataObject.params.sign, dataObject.params.msg)\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 17 then --加湿器挡位\n local fixhumi = dataObject.params.value\n dataObject.params = {}\n dataObject.params.fixhumi = fixhumi\n sendMsgToTopic(dataObject, 'app')\n end\n elseif dataObject.cmd == 63499 then\n if dataObject.code == 1 then --软硬件 版本主动上报\n ackToDevice(dataObject)\n elseif dataObject.code == 2 then --心跳上报\n ackToDevice(dataObject)\n elseif dataObject.code == 3 then\n --ackToDevice(dataObject)--取消数据应答20200928 与硬件确认\n if dataObject.params ~= nil then\n out.data.temperature = tonumber(string.format('%0.2f', dataObject.params.TEMP))\n out.data.humidity = dataObject.params.HUMI\n out.data.pm1 = dataObject.params.PM1_0\n out.data.pm25 = dataObject.params.PM2_5\n out.data.pm10 = dataObject.params.PM10\n out.data.ch2o = dataObject.params.CH2O --甲醛\n out.data.tvoc = dataObject.params.TVOC --有机气态物质\n out.data.fogs = tonumber(string.format('%0.1f', dataObject.params.fogs)) -- 总雾化水位 唐露芝20200928 qq群确认\n\n out.data.powerlock = dataObject.params.power --开关\n out.data.windgear = dataObject.params.wind --风速挡位 0:自动,1:1档,2:2档,3:3档, 4:4档\n out.data.timcnt = dataObject.params.timcnt --定时个数\n out.data.uvlock = dataObject.params.UV --UV杀菌灯开关 1:打开 0:关闭\n out.data.NegativeO2lock = dataObject.params['-O2'] --负氧离子开关状态 1:打开 0:关闭\n out.data.humilock = dataObject.params.humista --加湿器开关状态 1:打开 0:关闭\n out.data.humigear = dataObject.params.humigear -- 加湿器挡位 1:L1 2:L2 3:L3 4:L4\n out.data.wchargelock = dataObject.params.wcharge --无线充电开关 1:打开 0:关闭\n out.data.childlock = dataObject.params.chlock --童锁开关状态1:打开 0:关闭\n\n out.data.fixhumi = dataObject.params.fixhumi --恒湿开关状态 1:打开 0:关闭\n out.data.water = dataObject.params.water --水位感应开关 0:正常 1:缺水\n out.data.mode = dataObject.params.mode --设备工作模式 0自动 1手动 2睡眠 3恒湿\n out.data.hard = dataObject.params.hard --硬件版本号\n out.data.soft = dataObject.params.soft --软件版本号\n else\n log.debug(\n 'test_humi_0901 [%s][code=%s] dataObject.params =nil',\n dataObject.ID,\n dataObject.code\n )\n end\n dataObject.params = out.data\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 4 then --报警上报\n ackToDevice(dataObject)\n elseif dataObject.code == 5 then --时间同步 服务器\n local timeNow = getTime()\n dataObject.from = 'server'\n dataObject.cmd = 64011\n dataObject.params = {}\n dataObject.params.date = timeNow\n --数据发送到appProxy 周期上报的数据 code= 0x03和\n sendMsgToTopic(dataObject, 'device')\n elseif dataObject.code == 6 then --定时任务同步 服务器\n dataObject.from = 'server'\n dataObject.cmd = 64011\n dataObject.params = {}\n\n --读取redis\n local redis_key = dataObject.ID .. '_air_taskconfig'\n local redis_taskConfigs = getRedisValue_obj(redis_key, dataObject)\n local array_taskConfigs = {}\n for _, v in pairs(redis_taskConfigs) do\n --如果是 同时开关任务,设备同步的时候,任务号要分开 丢弃\n --if v.time_on and v.time_off then\n -- v.task = transferDoubleTaskId(v.task, true, false, false)\n --end\n table.insert(array_taskConfigs, v)\n end\n dataObject.params = array_taskConfigs\n --数据发送到appProxy 周期上报的数据 code= 0x03和\n sendMsgToTopic(dataObject, 'device')\n end\n end\n elseif dataObject.from == 'app' then --测试使用 实际app不会发\n if dataObject.code == 13 then --远程升级 app接口触发mq升级通知\n log.debug('test_humi_0901 [%s][code=%s] 平台收到 app升级 通知,准备 通知 设备', dataObject.ID, dataObject.code)\n --升级文件流 缓存,拆解成多个小包\n --binCache.buff = dataObject.params.binBuff\n --binCache.params = getPackageList(binCache.buff)\n binCache.params = getPackageList(dataObject.params.binBuff)\n binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n dataObject.from = 'server'\n dataObject.type = tonumber(device.props.sensorType) -- 257 空气净化器 ,513加湿器\n dataObject.cmd = 523\n dataObject.params = {}\n dataObject.params.type = 1 --服务器发起升级申请\n dataObject.params.count = binCache.params.count\n dataObject.params.size = binCache.params.size\n --数据发送到appProxy 周期上报的数据 code= 13和\n log.debug(\n 'test_humi_0901 [%s][code=%s][binCache.updateTime=%s] 开始通知 设备 升级',\n dataObject.ID,\n dataObject.code,\n binCache.updateTime\n )\n sendMsgToTopic(dataObject, 'device')\n end\n elseif dataObject.from == 'clear' then\n clearTask(dataObject.ID)\n else\n log.debug('test_humi_0901 [%s][code=%s] 非法数据 =%s', dataObject.ID, dataObject.code, receiveStr)\n end\n else\n log.debug('test_humi_0901 dataObject =nil')\n end\n\n local resultData = json.encode(out) --输出传递到平台上\n log.debug('test_humi_0901 result=%s', json.encode(out))\n if next(out.data) ~= nil or next(out.result) ~= nil then\n ctx:notify(resultData)\n end\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n local packageParams = {subList = {}}\n local len = string.len(allPackageStr)\n local count = len / 2048\n local packageCount = math.ceil(count)\n packageParams.size = len\n packageParams.count = packageCount\n\n for i = 1, packageCount, 1 do\n local start_index = (i - 1) * 2048 + 1\n local end_index = start_index + 2047 -- 如果 越界,lua自动取实际的 结束索引\n local subPackage = string.sub(allPackageStr, start_index, end_index)\n --最后一包判断长度是否是 4的倍数 不足写0x1A\n if i == packageCount then\n repeat\n local subPackage_len = string.len(subPackage) / 4\n local min_subPackage_len = math.floor(subPackage_len)\n local diff_value = subPackage_len - min_subPackage_len\n if diff_value > 0 then\n subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍,不足写0x1A\n end\n until (diff_value == 0)\n end\n\n local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n local subcrc = string.sub(subAppendCrc16, -4, -1)\n local subCheck = tonumber(subcrc, 16)\n local subBin = {}\n subBin.len = string.len(subPackage) / 2\n subBin.buff = subPackage\n subBin.checkint = subCheck\n packageParams.subList[i] = subBin\n end\n return packageParams\nend\n\nsendMsgToTopic = function(msg, msgTo)\n local topic\n if msgTo == 'app' then\n --将指令发送到 appProxy的topic\n topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个,代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n --发给app的时候 软件版本比如17要改成1.1\n if msg.params.soft ~= nil then\n msg.params.soft = softNumbertoVersion(msg.params.soft)\n \t\tmsg.params.hard = softNumbertoVersion(msg.params.hard)\n end\n msg.params.bin = nil --节省资源\n elseif msgTo == 'device' then\n topic = msg.ID .. '_device_rece'\n end\n msg.packid = os.time()\n local msgStr = json.encode(msg)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n log.debug(\n 'test_humi_0901 [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s',\n msg.ID,\n msg.code,\n binCache.updateTime,\n topic,\n msgStr,\n ok,\n ack\n )\nend\n\nackToDevice = function(rawDataObject)\n local topic = rawDataObject.ID .. '_device_rece'\n rawDataObject.from = 'server'\n rawDataObject.packid = os.time()\n rawDataObject.cmd = 64011\n rawDataObject.params = 'null'\n rawDataObject.result = 0\n local msgStr = json.encode(rawDataObject)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n log.debug(\n 'test_humi_0901 服务器 应答 设备 [%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s',\n rawDataObject.ID,\n topic,\n msgStr,\n ok,\n ack\n )\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ngetTime = function()\n local timenum = os.time()\n local dateStr = os.date('%Y-%m-%d %H:%M:%S', timenum)\n --空气净化器最后还要带 周几下去\n -- 2018-4-28 16:10:12\n local datelist = Split(dateStr, ' ')\n local datebegin = Split(datelist[1], '-')\n --local dateend = Split(datelist[2], ':')\n local year = tonumber(datebegin[1])\n local month = tonumber(datebegin[2])\n local day = tonumber(datebegin[3])\n\n local week = getWeek_comm(year, month, day)\n local recordTime = string.format('%s %s', dateStr, week)\n return recordTime\nend\n\n--获取星期几\nfunction getWeek_comm(y, m, d)\n if m == 1 or m == 2 then\n m = m + 12\n y = y - 1\n end\n local m1, _ = math.modf(3 * (m + 1) / 5)\n local m2, _ = math.modf(y / 4)\n local m3, _ = math.modf(y / 100)\n local m4, _ = math.modf(y / 400)\n\n local iWeek = (d + 2 * m + m1 + y + m2 - m3 + m4) % 7\n local weekTab = {\n ['0'] = 1,\n ['1'] = 2,\n ['2'] = 3,\n ['3'] = 4,\n ['4'] = 5,\n ['5'] = 6,\n ['6'] = 0 --周日是 0\n }\n return weekTab[tostring(iWeek)]\nend\n\ngetRedisValue_obj = function(key, logObject)\n local r1, r1ok = redis.get(key) --获取上次记录时间\n log.debug('test_humi_0901 [%s][code=%s] [getRedis] r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n\n local params = {}\n if r1ok and r1 ~= nil and r1 ~= 'null' then\n local taskConfig = json.decode(r1)\n params = taskConfig\n else\n log.debug(\n 'test_humi_0901 [%s][code=%s] [getRedis] taskConfig读取失败 r1=%s,r1ok=%s',\n logObject.ID,\n logObject.code,\n r1,\n r1ok\n )\n end\n return params\nend\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n local redis_key = devId .. '_air_taskconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n --判断 任务 id是否存在 存在就更新\n local tsakId = tostring(taskConfig.task)\n log.debug(\n 'test_humi_0901 [%s] 排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s',\n cmd_obj.ID,\n tsakId,\n redis_taskConfigs,\n json.encode(redis_taskConfigs),\n type(redis_taskConfigs)\n )\n local cmd_code = cmd_obj.code\n if cmd_code == 4 or cmd_code == 5 then --添加或修改 或取消任务\n --如果是自增任务的设备返回 先解析任务id\n if taskConfig.time_on then --只要on大于0 必然 任务id >16\n local hexTaskId = string.format('%02x', tonumber(tsakId))\n local real_tsakId = string.sub(hexTaskId, 1, 1)\n -- 避免单任务取到0的情况\n log.debug('test_humi_0901 自增任务 首次插入 real_tsakId=%s[%s]', real_tsakId, type(real_tsakId))\n tsakId = real_tsakId\n elseif taskConfig.time_on == nil then\n local hexTaskId = string.format('%02x', tonumber(tsakId))\n local real_tsakId = string.sub(hexTaskId, 2, 2)\n -- 避免单任务取到0的情况\n log.debug('test_humi_0901 自增任务 首次插入 real_tsakId=%s[%s]', real_tsakId, type(real_tsakId))\n tsakId = real_tsakId\n end\n if redis_taskConfigs[tsakId] ~= nil then\n redis_taskConfigs[tsakId] = taskConfig\n log.debug('test_humi_0901 非首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n else\n log.debug('test_humi_0901 首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n --table.insert(redis_taskConfigs, tsakId, taskConfig)\n redis_taskConfigs[tsakId] = taskConfig\n end\n\n log.debug(\n 'test_humi_0901 [%s][code=%s] redis_taskConfigs=%s',\n cmd_obj.ID,\n cmd_obj.code,\n json.encode(redis_taskConfigs)\n )\n elseif cmd_code == 6 then --删除任务\n local real_tsakId = get_delete_id(redis_taskConfigs, tonumber(tsakId))\n redis_taskConfigs[real_tsakId] = nil\n log.debug('test_humi_0901 删除任务 tsakId=%s', tsakId)\n end\n setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\nget_delete_id = function(redis_tasks, delete_id)\n for key, value in pairs(redis_tasks) do\n if value.task == delete_id then\n return key\n end\n end\n log.debug('home_humi_0901 无法删除任务 delete_id=%s 没有匹配项目', delete_id)\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n local setValue = json.encode(setValueObject)\n local r1ok, r1 = redis.set(key, setValue)\n log.debug(\n 'test_humi_0901 [%s][code=%s] [setRedis] r1=%s,r1ok=%s,key=%s,setValue=%s',\n logObject.ID,\n logObject.code,\n r1,\n r1ok,\n key,\n setValue\n )\n return r1ok\nend\n\ntransferDoubleTaskId = function(appTaskId, isDouble, isOn, isOff)\n local task_k = tonumber(appTaskId)\n\n local taskid_new = 255 --默认是单任务的 task\n local kk\n if isDouble then --如果是 同时开关任务 关任务号就是开任务号+1\n kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n taskid_new = tonumber(kk, 16)\n elseif isOn then\n kk = string.format('%01x', task_k) .. '0'\n taskid_new = tonumber(kk, 16)\n elseif isOff then\n kk = '0' .. string.format('%01x', task_k)\n taskid_new = tonumber(kk, 16)\n end\n log.debug('test_humi_0901 任务id taskid_new=%s,kk=%s', taskid_new, kk)\n return taskid_new\nend\n\n--清空redis的 task缓存\nclearTask = function(deviceID)\n local clear_key = string.format('%s_air_taskconfig', deviceID)\n --清除redis使用\n --local ab = {}\n --local clearValue = json.encode(ab)\n local r1, r1ok = redis.set(clear_key, clearValue)\n --local r1, r1ok = redis.set('00000001_air_taskconfig', clearValue)\n --local r1, r1ok = redis.set('00000002_air_taskconfig', clearValue)\n --local r1, r1ok = redis.set('00000005_air_taskconfig', clearValue)\nend\n\nsoftNumbertoVersion = function(soft_num)\n local hex_str = string.format('%02x', soft_num)\n local s10 = string.sub(hex_str, 1, 1)\n local s1 = string.sub(hex_str, 2, 2)\n local number_str = string.format('%s.%s', tonumber(s10, 16), tonumber(s1, 16))\n return number_str\nend\n\ngetSoftUpdateMsg = function(signid, msgid)\n local k = string.format('%s,%s', signid, msgid)\n local msgs = {\n ['1,1'] = '不支持升级',\n ['1,2'] = '已是最新版本',\n ['1,3'] = '其他错误',\n ['2,1'] = '升级A区域',\n ['2,2'] = '升级B区域',\n ['3,1'] = '校验错误重发',\n ['3,2'] = '校验正确发下一帧',\n ['4,1'] = '升级出错',\n ['4,2'] = '升级成功'\n }\n return msgs[k]\nend INLINE 2020-10-10 10:48:16.211+08 2020-12-10 10:27:49.161+08 2020-10-10 \N
+a2ce557c-f74e-451f-a870-a06438208343 fs_ss2 \N 1 1b2d8739-627e-4b7d-9480-3eee6e9396fe 1b2d8739-627e-4b7d-9480-3eee6e9396fe f 1b2d8739-627e-4b7d-9480-3eee6e9396fe Lua start=function()\n --log.debug("fs_microPower_2 : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n if data ~=nil then\n log.debug("fs_microPower_2 devices data =%s",data)\n ParseData(data) \n else\n log.error("fs_microPower_2 recvd content is nil")\n end\nend\n\n\nfunction ParseData(data)\n local out={\n data ={},\n result = {},\n type=2\n }\n if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then --振动数据\n --log.debug("fs_microPower_2 振动数据 data =%s",data)\n local package=iota.hexToShort(data,8,'L')\n local packagecount=iota.hexToShort(data,10,'L')\n local datpackage=string.sub(data,41,-9)\n local moduleid=iota.hexToShort(data,16,'L')\n\n local req1 =''\n local req2 =''\n local req =''\n req1=iota.appendHexByte(req1, 01 , 'L') -- 0-3 压缩协议 4-7 协议版本\n req1=iota.appendHexByte(req1, 0x02 , 'L')\n req1=iota.appendHexWord(req1, 0x0007 , 'L')\n req1=iota.appendHexWord(req1, 0x0000 , 'L')\n \n req2=iota.appendHexWord(req2, package , 'L')\n req2=iota.appendHexWord(req2, packagecount , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, moduleid , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n local checkdat=req1..req2\n local checksum=HeadCheckSum(checkdat)\n req=req1\n req=iota.appendHexWord(req, checksum , 'L')\n req=req..req2\n req=iota.appendHexWord(req, package , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=req..'00000000'\n req=iota.appendHexCrc(req, 'L' ,0) --校验\n local crc16=string.sub(req,-4,-1)\n req=string.sub(req,1,-13)\n req=req..crc16\n req=iota.appendHexByte(req, 0 , 'L') \n req=iota.appendHexByte(req, 0xfa , 'L') \n --log.debug("fs_microPower_2 datfileback %s", req)\n ctx:asend(req, 20000)\n\n if package==packagecount then\n local r1,ok = redis.get(device.id.."_mpzd")\n\t\t\tlocal dathex=r1..datpackage\n log.debug("fs_microPower_2 解析dat r1= %s", dathex)\n ParseFileDat(dathex)\n else\n if package==1 then\n local firstpackage=string.sub(datpackage,-80,-1)\n redis.set(device.id.."_mpzd", firstpackage)\n --log.debug("fs_microPower_2 接收dat datpackage= %s", firstpackage)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据首包'\n }\n }\n ctx:notify(json.encode(re))\n else\n local r1,ok = redis.get(device.id.."_mpzd")\n --log.debug("fs_microPower_2 接收dat r1= %s package=%s", r1,package)\n local data=r1..datpackage\n redis.set(device.id.."_mpzd", data)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n end\n else \n\t \n\t -- 非振动数据\n if string.sub(data,13,16)=='8a00' then\n local rtumodule=iota.hexToShort(data,3,'B')\n local power = iota.hexToByte(data,13,'B')\n --log.debug("fs_microPower_2 剩余电量 %s", power)\n\t\t\tlocal setting = iota.hexToByte(data,14,'B')\n\t\t\t--log.debug("fs_microPower_2 通道配置版本号 %s", setting)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\t--log.debug("fs_microPower_2 版本固件 %s", ver)\n\t\t\tlocal backlog =iota.hexToShort(data,15,'B')\n\t\t\t--log.debug("fs_microPower_2 积压数据 %s", tostring(backlog))\n\t\t\tlocal wakeup =iota.hexToUShort(data,22,'B')\n\t\t\tlog.debug("fs_microPower_2 节点苏醒次数 %s", tostring(wakeup))\t\t\t\t\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\t\t\tredis.set(device.id.."_backlog", tostring(backlog))\n\t\t\tredis.set(device.id.."_wakeup", tostring(wakeup))\t\t\t\n\t\t\tlocal version = string.format("%0.2f",ver)\n\t\t\tlocal v = Split(version,'.')\n\t\t\tlocal vlen = v[2].length\n\t\t \n\t\t\tif vlen == 1 then\n\t\t\t version = version.."0"\n\t\t\telseif vlen == 0 then\n\t\t\t version = version..".00"\n\t\t\tend\n\t\t\t--log.debug('fs_microPower_2 version=%s', version)\t\t\t\n\t\t\tredis.set(device.id.."_version", version)\t\t\t\n\n local strdevice= toHexStr(json.encode(device))\n strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n local crc=string.sub(strdevice,-4,-1)\n --log.debug("fs_microPower_2 devices crc =%s",crc)\n \t\t--log.debug("fs_microPower_2 dtuid time2")\n local r1,ok = redis.get(device.id.."_mpset")\n if ok and r1~=nil then\n\t\t\t log.debug("fs_microPower_2 crc %s r1 %s setting%s" ,crc,r1,setting)\n \t\tlog.debug("fs_microPower_2 dtuid time")\n \t\tlocal hour= os.date("%H")\n \t\tlog.debug("fs_microPower_2 dtuid %s hour %s",device.uplink.props.id,tostring(hour))\n if crc == r1 and setting ~= 0xFF then\n log.debug("fs_microPower_2 配置无修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 0, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fs_microPower_2 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置无修改'\n }\n }\n ctx:notify(json.encode(re))\n else\n log.debug("fs_microPower_2 配置有修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fs_microPower_2 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n else\n log.debug("fs_microPower_2 配置初次配置")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fs_microPower_2 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n end\n \n if string.sub(data,13,16)=='8a02' then\n log.debug("fs_microPower_2 deviceid:%s 设备休眠",device.uplink.props.id)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '设备休眠'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n local rtumodule=iota.hexToShort(data,3,'B')\n if string.sub(data,13,16)=='8601' then\n local time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlog.debug("fs_microPower_2 sensorCount=%s",sensorCount)\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\t--log.debug("fs_microPower_2 r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver="V"..r1\n\t\t\t\t--log.debug("fs_microPower_2 r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\t--log.debug("fs_microPower_2 powerstr=%s",powerstr)\n \n\t\t\tr1,r1ok = redis.get(device.id.."_backlog") --获取上次未上传记录\n\t\t\tlocal backlog = 0\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tbacklog=r1\n\t\t\t\t--log.debug("fs_microPower_2 r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\t\tend\n\t\t\t\n\t\t\tr1,r1ok = redis.get(device.id.."_wakeup") --获取上次记录苏醒次数\n\t\t\tlocal wakeup = 0\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\twakeup=r1\n\t\t\t\t--log.debug("fs_microPower_2 r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\t\tend\t\t\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnode = {\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time \n\t\t\t}\n\t\t\tlocal tb = {\n\t\t\t\t\t\t\tR=tostring(backlog),\n\t\t\t\t\t\t\tWTS=tostring(wakeup)\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\ttable.insert(rst.data.R.node,tb)\t\t\t\t\n\t\t\ttable.insert(out.data,rst)\n local isover=iota.hexToByte(data,25,'B') --尾包\n local datalength=0\n local firststart=27\n for i=1,sensorCount,1 do\t\t\t\t\n firststart=firststart+datalength\t\t\n\t\t\t\tlog.debug("fs_microPower_2 firststart=%s",firststart)\t\t\t\t\n local sensorType=iota.hexToByte(data,firststart,'B')\n\t\t\t\tlog.debug("fs_microPower_2 sensorType=%s",sensorType)\t\t\n local module=iota.hexToShort(data,firststart+3,'B')\n local channel=iota.hexToByte(data,firststart+2,'B')\n\t\t\t\tlog.debug("fs_microPower_2 module=%s channel=%s",module,channel)\t\n datalength=iota.hexToByte(data,firststart+1,'B')+6\n if sensorType==0 then --振弦\n local childDevice=getZxDeviceInfo(module,channel)\n\t\t\t\t\t\n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\tlocal k = childDevice.uplink.props.k or 0\n\t\t\t\t\t\tlocal kt = childDevice.uplink.props.kt or 0\t\t\t\t\t\t\n\t\t\t\t\t\tlocal f0 = childDevice.uplink.props.f0 or 0\n\t\t\t\t\t\tlocal t0 = childDevice.uplink.props.t0 or 0\t\t\n\t\t\t\t\t\tlocal status = iota.hexToByte(data,firststart+11,'B')\n\t\t\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\t\t\tlocal freq = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\tlocal temp = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t--log.debug("fs_microPower_2 振弦 Phy =%s, deviceid %s", Phy,childDevice.id)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\tam = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B'),\n\t\t\t\t\t\t\t\tphysicalvalue = Phy\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t}\n\t\t\t\t\t\tif rst.data.temperature == 200 or rst.data.temperature == -200 then\n \t\t\t\trst.data.temperature = nil \n \t\t\tend\n\t\t\t\t\t\tif status == 1 then\n\t\t\t\t\t\t\trst.result = {code=30010022,msg="频率线断路"}\n \t\t\t\trst.data ={}\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif status == 2 then\n\t\t\t\t\t\t\trst.result = {code=30010023,msg="频率线短路"}\n \t\t\t\trst.data ={}\n\t\t\t\t\t\tend\t\t\t\t\t\t\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t--log.debug("fs_microPower_2 振弦 %s", json.encode(out))\n\t\t\t\t\tend\n end\n if sensorType==1 then --485\n local childDevice=getDeviceInfo(module,channel)\n \t\t\tlocal protocalCode=iota.hexToShort(data,firststart+6,'B')\n\t\t\t\t\tlocal hour = os.date("%H")\n\t\t\t\t\tlocal min = os.date("%M")\n\t\t\t\t\tlocal acqnum = hour*2+1\n\t\t\t\t\tif tonumber(min) >= 30 then\n\t\t\t\t\t\tacqnum = acqnum+1\n\t\t\t\t\tend\n\t\t\t\t\t--log.debug("fs_microPower_2 acqnum %s", acqnum)\n\t\t\t\t\tif childDevice~=nil then\t\n\t\t\t\t\t\tif protocalCode==1503 or protocalCode==1502 then --测斜\n\t\t\t\t\t\t--log.debug("fs_microPower_2 测斜 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex = iota.hexToFloat(data,firststart+12,'B',2),\n\t\t\t\t\t\t\t\t\tangley = iota.hexToFloat(data,firststart+16,'B',2),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B',2),\n\t\t\t\t\t\t\t\t\t_acq_number=acqnum\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_microPower_2 测斜 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n \n \t\t\t if protocalCode==9101 then --拉线位移\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_2 位移 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_2 位移 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==9102 then --裂缝\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_2 裂缝 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_2 裂缝 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==9218 then --风速\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_2 风速 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tspeed = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_2 风速 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n\t\t\t\t\tif protocalCode==9219 then --风向\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_2 风向 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tdirection = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_2 风向 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==1102 then --温湿度\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\thumidity = iota.hexToFloat(data,firststart+16,'B') \n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n end\n \n if protocalCode==9002 then --压差\n\t\t\t\t\t\t--log.debug("fs_microPower_2 yc ")\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n end\n\t\t\t\t\tif protocalCode==9030 then --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_2 静力水准仪 %s, deviceid: %s", module,childDevice.id)\n\t\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n \t\t\t\t\t_acq_number=acqnum\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509 then --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992 then --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_2 水位 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\t--temperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\tpressure=iota.hexToFloat(data,firststart+12,'B')--兼容老设备\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_2 水位 %s", json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\t\t\n end\n\t\t\t\t--log.debug("fs_microPower_2 dataresult %s", json.encode(out))\n end \n log.debug("fs_microPower_2 out %s", json.encode(out))\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0601, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0000, 'B') --数据区长度\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n --log.debug("fs_microPower_2: databack: %s", req)\n ctx:asend(req, 20000)\n ctx:notify(json.encode(out)) \n end\n end\nend\n\nfunction Deploy()\n local total=totalSensors()\n log.debug("fs_microPower_2 : totalSensors =%s",total)\n local over=0\n local onepag=0\n local totallength=3\n local buff=''\n \n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n over=over+1\n onepag=onepag+1\n\t\t\tlog.debug("fs_microPower_2 subdevice =%s",json.encode(subdevice))\n if subdevice.props.sensortype=='zx' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x00, 'B') --传感器类型\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n\n local settingvib = tonumber(colgain) + tonumber(incentive) * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n log.debug("fs_microPower_2 : settingvib =%s",settingvib)\n buff=iota.appendHexByte(buff, settingvib, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexByte(buff, settingvib, 'B') --振弦采集参数\n buff=iota.appendHexWord(buff, subdevice.uplink.props.frequency, 'B') --振弦频率初值\n buff=iota.appendHexByte(buff, 0x00, 'B') --上传频谱ID\n buff=iota.appendHexByte(buff, 0x01, 'B') --采集选项\n end \n if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x01, 'B') --传感器类型\n\t\t\t\tlog.debug("fs_microPower_2 : begin setting")\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tlog.debug("fs_microPower_2 baudrate =%s databits %s parity %s stopbits %s sensor %s",baudrate,databits,parity,stopbits,json.encode(subdevice))\n\t\t\t\tlocal setting\n\t\t\t\tif baudrate == nil then\n\t\t\t\t\tsetting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n\t\t\t\telse\n setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n\t\t\t\tend\n log.debug("fs_microPower_2 setting =%s",setting)\n buff=iota.appendHexByte(buff, setting, 'B') --选项1 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B') --协议号\n buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B') --模块号\n buff=iota.appendHexByte(buff, 0x01, 'B') --子通道号\n end\n if subdevice.props.sensortype =='zd' then \n totallength=totallength+31 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x04, 'B') --传感器类型\n buff=iota.appendHexByte(buff, 0x00, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x12, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B') --定时采样间隔\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B') --定时采样时长\n buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B') --加速度触发采样时长\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B') --采样频率\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B') --滤波频率\n\t\t\t\tlocal shex = FloatToHex(tonumber(subdevice.uplink.props.samplefreq))\n\t\t\t\tbuff=buff..shex\n\t\t\t\tlocal fhex = FloatToHex(tonumber(subdevice.uplink.props.filterfreq))\n\t\t\t\tbuff=buff..fhex\n --buff=iota.appendHexWord(buff, 0x42c8, 'B')\n --buff=iota.appendHexWord(buff, 0x0000, 'B')\n --buff=iota.appendHexWord(buff, 0x4248, 'B')\n --buff=iota.appendHexWord(buff, 0x0000, 'B')\n local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n buff=iota.appendHexByte(buff, trigger1, 'B') --触发加速度\n buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B') --加速度范围\n buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B') --滞后点数\n\n end\n if over==8 or onepag==total then \n local buffhead=''\n buffhead=iota.appendHexByte(buffhead, 0xfe, 'B') --帧头\n buffhead=iota.appendHexWord(buffhead, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B') --模块号\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --命令源\n buffhead=iota.appendHexWord(buffhead, 0x0306, 'B') --指令\n buffhead=iota.appendHexWord(buffhead, 0x0000, 'B') --消息ID\n buffhead=iota.appendHexWord(buffhead, totallength, 'B') --数据区长度\n if onepag==total then\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --尾包\n else\n buffhead=iota.appendHexByte(buffhead, 0x00, 'B') --尾包\n end\n buffhead=iota.appendHexByte(buffhead, total, 'B') --采集指令总通道指令个数\n buffhead=iota.appendHexByte(buffhead, over, 'B') --该分包通道指令个数\n buff=buffhead..buff\n buff=iota.appendHexCrc(buff, endian ,0) --校验\n buff=iota.appendHexByte(buff, 0xef, 'B') --帧尾\n\t\t\t\tlog.debug("fs_microPower_2 ssend request =%s",ack)\n local ok, ack = ctx:ssend(buff, 20000)\n log.debug("fs_microPower_2 deploy back =%s",ack)\n buff=''\n if over==8 then\n over=0\n end\n totallength=3\n if onepag==total then\n log.debug("fs_microPower_2 配置下发完成")\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置下发完成'\n }\n }\n ctx:notify(json.encode(re))\n end\n end \n end\n end \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \tlog.debug("fs_microPower_2 subdevice=%s",subdevice) \n return subdevice\n end \n end\n end\n log.debug("fs_microPower_2 has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("fs_microPower_2 has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n --log.debug("fs_microPower_2 has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug("fs_microPower_2 has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n --log.debug("fs_microPower_2 dat content =%s", dathex)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n --log.debug("fs_microPower_2 deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n local floatcount = (string.len(dathex)/2-40)/4\n --log.debug("fs_microPower_2 begin parse")\n local vols = {}\n\t\tlocal mean = 0\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n --log.debug("fs_microPower_2 finish parse")\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n sampleFreq=samplefreq,\n filterFreq=filterfreq,\n gainAmplifier=gainamplifier,\n triggerType=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n }\n table.insert(out.data,rst)\n \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\t--log.debug("fs_microPower_2 r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver="V"..r1\n\t\t\t--log.debug("fs_microPower_2 r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_backlog") --获取上次未上传记录\n\t\tlocal backlog\n\t\tif r1ok and r1~=nil then\n\t\t\tbacklog=r1\n\t\t\t--log.debug("fs_microPower_2 r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_wakeup") --获取上次记录苏醒次数\n\t\tlocal wakeup\n\t\tif r1ok and r1~=nil then\n\t\t\twakeup=r1\n\t\t\t--log.debug("fs_microPower_2 r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\tend\t\t\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("fs_microPower_2 powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tnode = {\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time \n\t\t}\n\t\tlocal tb = {\n\t\t\t\t\t\tR=backlog,\n\t\t\t\t\t\tWTS=wakeup\n\t\t\t\t}\t\n\t\ttable.insert(rstd.data.R.node,tb)\t\t\t\n\t\ttable.insert(out.data,rstd)\n\t\t--log.debug("fs_microPower_2 cloudvibrate=%s",json.encode(out))\n ctx:notify(json.encode(out))\n else\n --log.debug("fs_microPower_2 not found device module=%s channel=%s",deviceId,channel)\n end\nend\n\nfunction totalSensors()\n local sensorcnt=0\n for i,dnlink in pairs(device.dnlinks) do \n sensorcnt = #(dnlink.devices) + sensorcnt \n end\n return sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend \n\nfunction HeadCheckSum(data)\n local sum=0\n local len = string.len(data)\n --log.debug("fs_microPower_2 len %s", len)\n for i =1,len,4 do \n local te=tonumber(string.sub(data,i,i+3) ,16)\n --log.debug("fs_microPower_2 te %s", te)\n sum = sum+ tonumber(te)\n end\n --log.debug("fs_microPower_2 sum %s", sum)\n return 0xffff-sum\nend\n\n\nfunction FloatToHex( floatNum )\n\tlocal S = 0\n\tlocal E = 0\n\tlocal M = 0\n\tif floatNum == 0 then\n return "00000000"\n end\n\tlocal num1,num2 = math.modf(floatNum/1)\n\tlocal InterPart = num1\n \n\tif floatNum > 0 then\n\t\tS = 0 * 2^31\n\telse\n\t\tS = 1 * 2^31\n\tend\n\tlocal intercount = 0\n\trepeat\n\t\tnum1 = math.modf(num1/2)\n\t\tintercount = intercount + 1\n\tuntil (num1 == 0)\n \n\tE = intercount - 1\n\tlocal Elen = 23 - E\n\tInterPart = InterPart % (2^E)\n\tInterPart = InterPart * (2^Elen)\n \n\tE = E + 127\n\tE = E * 2^23\n \n\tfor i=1,Elen do\n\t\tnum2 = num2 * 2\n\t\tnum1,num2 = math.modf(num2/1)\n\t\tM = M + num1 * 2^(Elen - i)\n\tend\n \n\tM = InterPart + M\n \n\t--E值为整数部分转成二进制数后左移位数:22.8125 转成二进制10110.1101,左移4位 1.01101101\n --E=4 ,再加上127 就为所需E值\n\t--010000011 01101101 000000000000000\n \n\tlocal Result = S + E + M\n \n\tResult = string.format("%08X",Result)\n\treturn Result\nend\n INLINE 2020-11-05 09:18:57.918+08 2020-11-05 09:26:24.818+08 2020-11-05 \N
+c215dabb-ce81-4a73-944f-e8c239a45a80 bjzhtk_01 \N 1.0 10b1641f-9368-4783-ab0f-85301fbe0b57 10b1641f-9368-4783-ab0f-85301fbe0b57 f 10b1641f-9368-4783-ab0f-85301fbe0b57 Lua start = function()\n --log.debug('bjzhtk_01 start moudleid=%s', device.props.pointId or 'nil')\n local req = {\n type = 'http',\n url = '', --http://123.57.47.163:8008/eelink/api/getGHDatas\n method = 'get'\n }\n local endTimestr=os.time()\n\tlocal endTime = os.date('%Y%m%d%H%M%S', endTimestr)\n local beginTimestr = endTimestr-300\n\tlocal beginTime = os.date('%Y%m%d%H%M%S', beginTimestr)\n req.url = device.props.dataUrl .. '?code=' .. device.props.code .. '&address=' .. device.props.address .. '&start=' .. beginTime .. '&end=' .. endTime\n log.debug('bjzhtk_01: url=%s', req.url)\n log.debug('bjzhtk_01:设备原型device=%s' ,json.encode(device))\n\n req.ContentType = 'application/json'\n\n \n local ok, ack = ctx:ssend(req, 4000)\n\n if ack == nil then\n log.debug('bjzhtk_01: ok=%s', ok)\n else\n log.debug('bjzhtk_01: ok=%s,token=%s', ok, ack.body)\n end\n local out = {\n type = 2,\n data = {},\n result = {}\n }\n\t\n\t\t\tif not ok or ack == nil then\n\t\t\t\tout.result = {\n\t\t\t\t\tcode = 1002,\n\t\t\t\t\tmsg = 'timeout'\n\t\t\t\t}\n\t\t\telse --OK\n\t\t\t\tif ack.code == 200 and ack.body ~= '' then -- http应答\n\t\t\t\t\tlocal dataTable = json.decode(ack.body)\n\t\t\t\t\t log.debug('bjzhtk_01: dataTable=%s', dataTable)\n local alldataTables = dataTable.data\n\t\t\t\t\n log.debug('bjzhtk_01: alldataTables=%s', json.encode(alldataTables))\n\t\t\t\t\n\t\t\t\t\tlocal moduleNo = device.uplink.props.module\n\t\t\t\t\tlog.debug('bjzhtk_01: moduleNo=%s', moduleNo)\n for k, v in ipairs(alldataTables) do\n log.debug('bjzhtk_01 k=%s, value=%s', k, json.encode(v))\n local moduleNostr = v.address\n\t\t\t\t\t\t--if tostring(moduleNo)==tostring(moduleNostr) then\n local alldataTable = v.report\n\t\t\t\t\t\tlog.debug('bjzhtk_01: alldataTable=%s', json.encode(alldataTable))\n\t\t\t\t\t\tfor kk, vv in ipairs(alldataTable) do\n log.debug('bjzhtk_01 kk=%s, value=%s', kk, json.encode(vv))\n \n local signal =tonumber(string.sub(vv.signal,1,-2))\n local voltage = tonumber(vv.voltage)/1000\n local sensorStatus = tonumber(vv.sensorStatus)\n\t\t\t\t\t\t\t\t local anglex = tonumber(vv.angleX)\n local angley = tonumber(vv.angleY)\n local anglez = tonumber(vv.angleZ)\n\t\t\t\t\t\t\t\t local accelerationx\t = tonumber(vv.accelerationX)\n local accelerationy\t = tonumber(vv.accelerationY)\n local accelerationz = tonumber(vv.accelerationZ)\n\t\t\t\t\t\t\t\tlocal timenow=(vv.collectTime)\n\t\t\t\t\t\t\t\tlocal childDevice = getDeviceInfos(moduleNo,1)\t\n\t\t\t\t\t\t\t\tlog.debug('bjzhtk_01 childDevice=%s',json.encode(childDevice)) \n\n\t\t\t\t\t\t\tif\tchildDevice~=nil then\n local data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t \n\t\t\t\t\t\t signal = signal,\n\t\t\t\t\t\t\t\t\t\tvoltage=voltage,\n\t\t\t\t\t\t\t\t\t\tsensorStatus=sensorStatus,\n\t\t\t\t\t\t\t\t\t\tanglez=anglez,\n\t\t\t\t\t\t\t\t\t\tanglex = anglex,\n angley = angley,\n\t\t\t\t\t\t\t\t\t\taccelerationx=accelerationx,\n\t\t\t\t\t\t\t\t\t\taccelerationy=accelerationy,\n\t\t\t\t\t\t\t\t\t\taccelerationz=accelerationz\t\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\ttime=timenow,\n device=childDevice.id,\n\t\t\t\t\t\t\t\t\ttype=1 \t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t \n table.insert(out.data,data1)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tlog.debug("bjzhtk_01: out=%s",json.encode(out))\n\t\t\t\t\t\t\t--return out\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tend \n end\n\t\t\t\tend \n\t\t\tend \n\t\t\t ctx:done(json.encode(out))\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(channelStrCheck) == tonumber(channelNoId) then\n return child\n\t\t\tend\n \t\n\t\tend\n else\n log.debug("bjzhtk_01: subdevices是nil")\n return nil\n end\nend\n\n\n INLINE 2020-07-03 15:21:48.25+08 2020-07-22 10:16:32.812+08 2020-07-03 \N
+72c2b126-5e58-47eb-89ee-fe0b05c628b6 FSQZY_file_transfer \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug('FSQZY_file_transfer devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n if data ~= nil then\n if data.type == 'idau/file' then\n if data.ext == '.d' or data.ext == '.dx' then\n log.debug('FSQZY_file_transfer recvd content = %s', data.payload)\n ParseFileD(data.payload)\n --else\n --log.error("FSQZY_file_transfer unsupported file type: %s", data.ext)\n end\n else\n log.error('FSQZY_file_transfer content type is not file, error recvd type is %s', data.type)\n end\n else\n log.error('FSQZY_file_transfer recvd content is nil')\n end\nend\n\nfunction ParseFileD(content)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n --log.debug('FSQZY_file_transfer content =%s', content)\n local jsons = Split(content, '\\r')\n for k, v in pairs(jsons) do\n if v ~= nil and v ~= '' then\n local jsondata = json.decode(v)\n if jsondata ~= nil and jsondata ~= '' then\n local childDevice = getDeviceInfo(jsondata.M)\n if childDevice ~= nil then\n log.debug('FSQZY_file_transfer 设备类型=%s,%s', childDevice.props.sensortype, json.encode(childDevice))\n if childDevice.props.sensortype == 'prism_L_FS' then --直角棱镜\n local rst = {\n data = {\n easting = jsondata.RV[1],\n northing = jsondata.RV[2],\n height =jsondata.RV[3]--,\n --eastingDiff = 1000*jsondata.RV[4],\n --northingDiff = 1000*jsondata.RV[5],\n --heightDiff = 1000*jsondata.RV[6]\n \n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n }\n table.insert(out.data, rst)\n end\n else\n end\n end\n end\n end\n log.debug('FSQZY_file_transfer result = %s', json.encode(out))\n ctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(data_moduleid)\n log.debug('FSQZY_file_transfer 查询子设备 data_moduleid=%s', data_moduleid)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices\n for i, subdevice in pairs(subdevices) do\n local Point_id = subdevice.uplink.props.node_id\n if tostring(Point_id) == tostring(data_moduleid) then\n log.debug('FSQZY_file_transfer data_moduleid=%s,匹配到设备=%s', Point_id, json.encode(subdevice))\n return subdevice\n else\n \t\tlog.debug('FSQZY_file_transfer data_moduleid=%s, 不匹配 device node_id=%s', data_moduleid,Point_id)\n end\n end\n log.debug('FSQZY_file_transfer has no device Point_id=%s', moduleid)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('FSQZY_file_transfer has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend INLINE 2019-11-05 14:17:46.551+08 2020-07-31 16:43:32.318+08 2019-11-05 \N
+789632f0-828c-4e10-992b-03b466bd7bb4 njxtkj_1406_zx \N 巡天科技四通道采集仪 1.0 a59371d0-7a5c-473a-83f2-41b31b9096e1 a59371d0-7a5c-473a-83f2-41b31b9096e1 f a59371d0-7a5c-473a-83f2-41b31b9096e1 Lua --//04 项目资料/2017-05/南京基泰/四通道模块通讯协议.doc\n--require "functions" -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {} //设备信息\nprotocol=> {} //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\nstart=function ()\n\t\tlog.debug("start %s, ctx=%s", "geot_1406_ZX.lua",json.encode(device.props.moduleId))\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("njxtkj_1406_zx 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("njxtkj_1406_zx 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n\t\n\t --ff6100010014830102032030213122322333f51a\n\t\tbuff=iota.appendHexByte(buff, 0xFF, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x61, endian)\n buff=iota.appendHexWord(buff, moduleNo, endian) -- 模块号 \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x14, endian)\n buff=iota.appendHexByte(buff, 0x83, endian)\t\t\n buff=iota.appendHexByte(buff, 0x01, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x02, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x03, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x20, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x30, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x21, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x31, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x22, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x32, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x23, endian)\t\t\t\n\t\tbuff=iota.appendHexByte(buff, 0x33, endian)\t\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok=ctx:asend(buff)\n log.debug("njxtkj_1406_zx:下发完成buff=%s",buff)\nend\n--moduleId=98 通道1 通道2 通道3 通道4\n--ff6000620027100144595bd8cc024456de1600036494187c4011648ae3c74512649a99054211648ae3c74512649a99054211648ae3c74512649a990542116444e59d5d126444e59d5d0480\n--前3组0 \n--第4组\n--"frequency": 1355.3293337783257,\n--"temperature": 1836.917603\nonData=function (hex)\t\n\tlog.debug("njxtkj_1406_zx Received=>%s",hex)\n\tlocal out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\tlocal moduleNo = iota.hexToShort(hex,2,'B')\n\t\tlog.debug("njxtkj_1406_zx:moduleNo=%s",moduleNo)\n\t\t\t\t--local moduleNo=1\n\t\tlocal IDX_DIRECTION_X=27;\n\t\t\n\t\tfor i=0,3,1 do\n\t\t\t local vibrate = iota.hexToFloat(hex, IDX_DIRECTION_X + i*2 * 6,'L');\n\t\t\t local Frequency = math.sqrt(vibrate * 1000);\n local Temp = iota.hexToFloat(hex, IDX_DIRECTION_X + (i*2 + 1) * 6,'L');\n\t\t\t --循环插入单通道数据表\n\t\t\t \n\t\t\t--获取通道设备deviceId \n local channelNo=i+1\n log.debug("njxtkj_1406_zx:模块号=%s,通道号=%s",moduleNo,channelNo)\n local childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\t\t\t--\n local deviceId\n if childDevice~=nil then\n \tdeviceId=childDevice.id\n log.debug("njxtkj_1406_zx:(振弦)子设备原形childDevice=%s",json.encode(childDevice))\n \tlog.debug("njxtkj_1406_zx:(振弦)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t--if childDevice.device.formula=="P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)" then --公式目前无法获取\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n \t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n \t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local To = childDevice.uplink.capabilities[1].formula.props.To\n log.debug("njxtkj_1406_zx:(振弦)子设备:m=%s,c=%s:公式参数=%s,%s,%s,%s,%s,%s",moduleNo,channelNo,K1,K2,K3,Fo,To,Kt)\n if K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n Phy=nil\n \t\tlog.debug("njxtkj_1406_zx:模块号=%s,通道号=%s 参数无效 当前的Frequency是:%s,Temp是%s",moduleNo,channelNo,Frequency,Temp)\n else\n \t\tlog.debug("njxtkj_1406_zx:模块号=%s,通道号=%s 参数有效 当前的Frequency是:%s,Temp是%s",moduleNo,channelNo,Frequency,Temp)\n local Fi=vibrate\n \t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n log.debug("njxtkj_1406_zx:模块号=%s,通道号=%s 当前的Phy是:%s",moduleNo,channelNo,Phy)\n end \n\t\t\t\t--else\n\t\t\t\t--log.debug("geot_1406_ZX:(振弦)子设备:m=%s,c=%s device.formula为nil"..tostring(moduleNo),tostring(channelNo))\n -- end\n else\n log.debug("njxtkj_1406_zx (振弦)子设备:m=%s,c=%s deviceId为nil",tostring(moduleNo),tostring(channelNo))\n end\n\t\t\tlocal data1={\n\t\t\t data={\n\t\t\t\t\t\t\tfrequency=tonumber(string.format("%5.3f",Frequency)),\n\t\t\t\t\t\t\ttemperature=tonumber(string.format("%5.3f",Temp)),\n \t\t\tphysicalvalue=tonumber(string.format("%5.3f",Phy)),\n\t\t\t\t\t\t\t},\n\t\t\t\tdevice=deviceId,\n \t\t\t\ttype=1 ,\n\t\t\t}\n\t\t\ttable.insert(out.data,data1)\t\t \n\t\tend\t\t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n log.debug("njxtkj_1406_zx resultData=%s",resultData)\n\tctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("njxtkj_1406_zx 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("njxtkj_1406_zx:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("njxtkj_1406_zx 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t log.debug("njxtkj_1406_zx 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t \t if tostring(channelStrCheck)== tostring(channelNoId) then\n \n \t\t log.debug("njxtkj_1406_zx: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("njxtkj_1406_zx: subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function (data)\n\tlog.debug('njxtkj_1406_zx:开始校验数据%s',data)\n if data == nil or string.len(data)/2 ~= 75 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n return false\n end\n\n\tif iota.hexToByte(data,0,'B') ~= 0xFF then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\t\n log.debug('njxtkj_1406_zx:校验通过')\n\treturn true\n\t\nend INLINE 2019-08-27 09:52:48.146+08 2019-08-27 15:33:39.262+08 2019-08-27 \N
+4f321706-bd7a-449d-bdb1-45b1985db560 njgye_yb \N 1.0 55ecba2d-f3da-4ebb-b58d-7cc16522faad 55ecba2d-f3da-4ebb-b58d-7cc16522faad f 55ecba2d-f3da-4ebb-b58d-7cc16522faad Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "njgye_yb.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\n \n buff=iota.appendHexWord(buff, 0x01, endian)\n\tbuff=iota.appendHexByte(buff, 0x0e, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x01, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0x02, endian)\n\t\t\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\t\t\t\tbuff=iota.appendHexByte(buff, 0x03, endian)\n buff=iota.appendHexWord(buff, 0, endian) -- 2: 类型=1\n buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 3: 模块号\n buff=iota.appendHexWord(buff, 0, endian) \n buff=iota.appendHexWord(buff, 0, endian) \t-- 4: 指令: 0x01 = 采集\n \tlocal lcr_str = CS(buff) -- 5: CRC\n\t\tbuff=iota.appendHexWord(buff, lcr_str, endian) \t-- 4: 指令: 0x01 = 采集\n\t\tbuff='4654' .. buff\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,4000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==38) then\n\t local symbol=string.sub(hex,27,28)\n\t\tlocal lcrs=tonumber(string.sub(hex,29,34),16)\n\t\tlocal lcrss=tonumber('1000000',16)\n\t\tlog.debug("njgye_yb lcrs是:%s",lcrs)\n local physicalvalue\t = iota.hexToInt(hex,13,'B')/10\n\t\tif symbol=='00' then\n\t\t physicalvalue=physicalvalue\n\t\telseif symbol=='ff' then\n\t\t\n\t\t\tphysicalvalue=(lcrs-lcrss)/10\n\t\tend\n \n \n out.data = {\n physicalvalue\t=physicalvalue\t \n \n }\n \n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nCS=function(buff)\n local lcr = 0\n for i = 0, string.len(buff)/2-1 do\n lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n end\n\tlog.debug("xmlg_1 lcr是:%s",lcr)\n\tlocal value=bit.band(lcr,0xff)\t\t\n return value\nend \n \n\n INLINE 2020-10-19 14:43:47.837+08 2020-11-05 11:46:03.796+08 2020-10-19 \N
+bedc480a-4a97-488a-a948-b0a7713bdf92 rtu_disater \N 1.0 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 f 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 Lua --字符串ascii->字符\nstart=function()\n --log.debug("rtu_disater start , ctx=")\nend\n\n\nonData=function(hex)\n log.debug("rtu_disater Data=%s",json.encode(hex.payload))\n\t--全局\n out={\n data ={},\n result = {},\n\t\ttype=2\n }\n\tlocal a=hex.payload\n log.debug("rtu_disater a=%s",a)\n\tlocal aa=toHexStr(a)\n log.debug("rtu_disater aa=%s",aa)\n local b=string.sub(aa,7,-1)\n\tlocal bb=HextoStr(b)\n log.debug("rtu_disater bb=%s",bb)\n\tlocal js=json.decode(bb)\n --log.debug("rtu_disater js=%s",js)\n local dataTable = js['datapoints']\n\tlog.debug("rtu_disater dataTable=%s",json.encode(dataTable))\n\tif dataTable~=nil then\n for k,v in ipairs(dataTable) do\n local deviceinfo=v.name\n\t\t--log.debug("rtu_disater deviceinfo=%s",deviceinfo)\n\t\tlocal alldata=v.points\n\t\t--log.debug("rtu_disater alldata=%s",json.encode(alldata))\n\t\tlocal cmd=Split(deviceinfo,'_')\n\t\tlocal moduleNo = cmd[1]\n\t\t--log.debug("rtu_disater moduleNo=%s",moduleNo)\n\t\tlocal channelNo =cmd[2] \n\t\t--log.debug("rtu_disater channelNo=%s",channelNo)\n\t \n\t\t\n\t\tfor kk,vv in ipairs(alldata) do\n\t\t\tlocal timestr = tonumber(vv.at)/1000\n\t\t\tlog.debug("rtu_disater channelNo=%s",channelNo)\n\t\t\tlocal T = os.date('%Y-%m-%dT%H:%M:%S+08:00', timestr)\n\t\t\tlog.debug("rtu_disater T=%s",T)\n\t\t\tlocal datavalue=vv.value\n\t \n\t\t\tlocal childDevice=getDeviceInfos(moduleNo,channelNo)\n\t\t\tlog.debug("rtu_disater childDevice=%s",json.encode(childDevice))\n\t\t\tif childDevice~=nil and childDevice ~= {} then \n\t \n\t\t\tlog.debug("rtu_disater sensor=%s",childDevice.props.sensortype)\n\t\t\tif childDevice.props.sensortype=="cx" then --测斜\n\t\t\t\tlocal datavaluetab=Split(datavalue,',')\n\t\t\t\t--log.debug("rtu_disater cx=")\n\t\t\t\tlocal data1 ={\n\t\t\t\t\tdata={\n\t\t\t\t\t\tanglex = tonumber(datavaluetab[1]),\n\t\t\t\t\t\tangley= tonumber(datavaluetab[2])\n\t\t\t\t\t},\n\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\ttype=1,\n\t\t\t\t\ttime=T \n\t\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\tend\n\t\t\t--[[if childDevice.props.sentype=="rainfall" then --雨量\n\t\t\t\tlog.debug("rtu_disater rainfall=%s,T=%s",valuestr,T)\n\t\t\t\tlocal data1 ={\n\t\t\t\t\tdata={\n\t\t\t\t\t\tphysicalvalue = tonumber(datavalue)\n\t\t\t\t\t},\n\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\ttype=1,\n\t\t\t\t\ttime=T\n\t\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tlog.debug("rtu_disater rainfall=%s",json.encode(data1))\n\t\t\tend\t]]--\n\t\t\tif childDevice.props.sensortype=="standard485" then \n\t\t\t\t--log.debug("rtu_disater standard485=%s,T=%s",valuestr,T)\n\t\t\t\tlocal data1 ={\n\t\t\t\t\tdata={\n\t\t\t\t\t\tphysicalvalue = tonumber(datavalue)\n\t\t\t\t\t},\n\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\ttype=1,\n\t\t\t\t\ttime=T\n\t\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tlog.debug("rtu_disater standard485=%s",json.encode(data1))\n\t\t\tend\t\n \n\t\t\tend\n\t\tend\n\t \n\tend \n\telse\n\treturn nil\n\tend\n\n local resultData =json.encode(out) --输出传递到平台上\n log.debug("rtu_disater result=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n\n --string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(moduleStrCheck) == tonumber(moduleNoId) and tonumber(channelStrCheck) == tonumber(channelNoId) then\n return child\n\t\t\tend\n \t\n\t\tend\n else\n log.debug("cdaj_wy: subdevices是nil")\n return nil\n end\nend\n\n INLINE 2020-08-27 15:44:14.507+08 2020-11-26 16:03:29.604+08 2020-08-27 \N
+3628b3d2-595b-4889-a7a6-8b68f2953389 jdrk_smoke_2019 \N 1.0 4a675a7d-e35c-478e-b8f1-ae01437c8281 4a675a7d-e35c-478e-b8f1-ae01437c8281 f 4a675a7d-e35c-478e-b8f1-ae01437c8281 Lua --D:\\SVN\\201907项目\\烟感安心云3.0\\485型光电感烟火灾探测报警器说用说明书.pdf\nstart=function()\n log.debug("start %s, ctx=%s", "jdrk_smoke_2019.lua",json.encode(device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module \n\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("jdrk_smoke_2019,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '超时'} \n\t ctx:done(json.encode(errout))\n\tend\nend\n--010300030001740a\n--01030200017984\n--0正常 1 报警\nunmarshall=function(hex,moduleNoStr)\n log.debug("jdrk_smoke_2019 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local alarmCode =iota.hexToUShort(hex,3,'B')\n \n out.data = { \n alarmCode=alarmCode\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("jdrk_smoke_2019 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,deviceModule)\n\tlocal checkLen=string.len(data)/2\n if data == nil or checkLen~= 7 then\n errormsg = string.format('无效的数据长度=%s≠7',checkLen)\n errcode = 1002\n return false\n end\n local dataModule=iota.hexToByte(data,0,'B')\n if tostring(deviceModule) ~= tostring(dataModule) then\t\n errormsg = string.format('无效的模块号=%s≠%s',dataModule,deviceModule)\n errcode = 1003\n return false\n end\n return true\n--crc\nend INLINE 2019-07-31 10:02:10.943+08 2019-07-31 10:12:48.9+08 2019-07-31 \N
+1754774a-4f79-43b6-a352-99329d760806 hzyy_http1 \N 1.0 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 f 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 Lua \nstart = function()\n log.debug('hzyy_http1 device=%s', json.encode(device))\n\tlog.debug('hzyy_http1 device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n\n log.debug('hzyy_http1', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n \n log.debug('hzyy_http1 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n \n\tlocal sn=bodypkg['sn']\n\tlocal acc_y_cur=bodypkg['acc_y_cur']\n\t\n\tlocal tilt_z_init=bodypkg['tilt_z_init']\n\tlocal tilt_y_init=bodypkg['tilt_y_init']\n\tlocal tilt_x_init=bodypkg['tilt_x_init']\n\t\n\tlocal tilt_x_cur=bodypkg['tilt_x_cur']\n\tlocal tilt_z_cur=bodypkg['tilt_z_cur']\n local tilt_y_cur=bodypkg['tilt_y_cur']\n\t\n\tlocal acc_x_cur=bodypkg['acc_x_cur']\n\tlocal acc_z_cur=bodypkg['acc_z_cur']\n\tlocal acc_y_cur=bodypkg['acc_y_cur']\n\t\n\t\n\t\t\n\t\tif tonumber(sn) == tonumber(moduleNo) then\n\t\t\tout.data={\n\t\t\t\tacc_x_cur=acc_x_cur,\n\t\t\t\tacc_z_cur=acc_z_cur,\n\t\t\t\tacc_y_cur=acc_y_cur,\n\t\t\t\ttilt_x_init=tilt_x_init,\n\t\t\t\ttilt_y_init=tilt_y_init,\n\t\t\t\ttilt_z_init=tilt_z_init,\n\t\t\t\ttilt_z_cur=tilt_z_cur,\n\t\t\t\ttilt_x_cur=tilt_x_cur,\n\t\t\t\ttilt_y_cur=tilt_y_cur\n\t\t\t\n\t }\n\t\n\t \n\t\n\tend\n\n\n log.debug('hzyy_http1 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend INLINE 2020-09-04 14:54:00.71+08 2020-09-04 14:54:00.71+08 2020-09-04 \N
+2f3066b9-d373-419e-9dac-5c0797ed3112 shjy_temp_BK-SW01A \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_temp_BK-SW01A", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp_BK-SW01A 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, 'L')\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x01, 'L')\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("shjy_temp_BK-YL01 SSend error!")\n end\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local length = iota.hexToUShort(hex,3,'B')*1.6/20\n out.data = {\n\t\t\t--length=tonumber(string.format('%0.1f',rainfall))\n\t\t\tlength=length\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('shjy_temp_BK-SW01A 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 7 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shjy_temp_BK-SW01A1 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2019-09-11 10:19:00.533+08 2019-09-11 10:51:51.274+08 2019-09-11 \N
+02d1f418-8a60-4813-9f25-40a1661c2e91 Inclination_Sensor \N 倾斜角度传感器,采集倾斜角 1.0 b7a8e100-b8fb-4135-a1b5-00a91da6da3f b7a8e100-b8fb-4135-a1b5-00a91da6da3f f b7a8e100-b8fb-4135-a1b5-00a91da6da3f Lua --[[\n协议号: 1.0;\n协议名: modbus 倾斜传感器通信协议.\n]]--liankang\nstart=function ()\n log.debug("start %s, ctx=%s", "Inclination_Sensor.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff, 9600) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序 0104000000 02 71 cb 模块1\n\t-- 模块号\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE); -- 1: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x03, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);-- 2: 读取寄存器地址00 02\n buff=iota.appendHexByte(buff, 0x02, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);-- 3: \t读取寄存器数量00 02\n\tbuff=iota.appendHexByte(buff, 0x02, BE);\n\tlocal temp=buff;--交换CRC16高低位\n\ttemp=iota.appendHexCrc(temp, 'B' ,0) --CRC16\n\tlocal crcH=string.sub(temp,-2,-1)\n\tlocal crcL=string.sub(temp,-4,-3)\n\tbuff=buff..crcH;\n\tbuff=buff..crcL;\t\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n-- 正确回复 0503040001E422252A 倾斜角度 -2.95度\n-- 原始数据\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t-- 判断数据有效性\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\n\telse\n\t\t\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t-- 计算原始值,把16进制子串转换成number类型的值\n\t\tlocal inclinationVal = iota.hexToInt(data, 3, 'B');\t\n\t\t-- 计算结果,倾斜角度\n\t\tlocal inclination = (inclinationVal - 125000) / 360\n\t\t\n\t\tout.data = {\n\t\tinclination = inclination,\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction IsValid(data)\n\tif string.len(data)/2 ~= 9 or iota.hexToByte(data, 1,'B') ~= 0x03 then -- 长度不等于 8 或者 读第二个字节,功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 1001\n\t\treturn true\n\tend\n\t\n\treturn false\n\t\nend INLINE 2019-10-22 16:45:49.018+08 2019-10-23 16:38:25.793+08 2019-10-22 \N
+2d86b406-e166-4523-941f-89ceeadbf7f7 home_airclear_0901 \N 1.0 f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f f2b3bb46-fba2-4a7a-a1f9-b88d86826cce Lua start = function()\n --local str="484f0020d54200083f710008b96600083b710008d56100087b7e000800000000000000000000000000000000997400089163000800000000cd71000809760008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef42000875760008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008417a0008c97a0008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef42000800f002f800f092f80aa090e8000c82448344aaf10107da4501d100f087f8aff2090ebae80f0013f0010f18bffb1a43f001031847ecba00000cbb0000103a24bf78c878c1fad8520724bf30c830c144bf04680c60704700000023002400250026103a28bf78c1fbd8520728bf30c148bf0b6070476e2900f09184702900f0878166290bf02a8065290bf0278067290bf0248061290bf0238003681b0a28bf41f08001692900f0f880642900f0f580752900f0f2806f2900f08587782900f05381e92900f01f87e42900f01c87f52900f01987ef2900f08287f82900f052810368db0928bf41f08001632900f0a086732900f0a586e32901f09581f32901f09a81002070471fb50af0e3ff00f075ff0400002000210af0c8f9401c6060002000210af0d8f9e0601fbd10b510bd01f015fa1146fff7e7ff05f029f801f033fa03b4fff7f2ff03bc01f033fa00000948804709480047fee7fee7fee7fee7fee7fee7fee7fee7fee7fee704480549054a064b704700000d7600088941000848490020484f0020484b0020484b002010b5044600f086fb0068005dc00602d504f1200010bd204610bd00001cb50c46064b7b4469460090204600f018fe04460020694600f026fe20461cbd5f0c00000fb41cb5084b06aa7b4469460090059800f005fe04460020694600f013fe20461cbc5df814fb0000390c000070b5044685690068c10601d5302600e02026c00707d070bdd4e9012130469047206a401c20626d1ef6d570bd70b5044685690078c00707d170bdd4e9012120209047206a401c20626d1ef6d570bd70b50c460546012a05d02878800600d5ea69002302e0012305e05b1c934202d2e05c0028f9d1a869e618c01aa861286a1844"\n --local appendCrc16 = iota.appendHexCrc(str, 'B', 0)\n --local crc16str = string.sub(appendCrc16, -4, -1)\n --local crc16 = tonumber(crc16str, 16)\n -- log.debug('home_airclear_0901 校验16=%s', crc16)\n log.debug('home_airclear_0901 device=%s', json.encode(device))\n --onData('')\nend\n\nlocal binCache = {params = {subList = {}}}\n--固件升级包 缓存结构\n--binCache ={params = {subList = {}}, updateTime = '2020-09-23 06:01:06',size=12345678,count=20}\nonData = function(mq_body)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n local receiveStr = mq_body.payload\n log.debug('home_airclear_0901 receiveStr=%s', receiveStr)\n --解析数据\n local dataObject = json.decode(receiveStr)\n log.debug('home_airclear_0901 [%s][code=%s] receiveStr=%s', dataObject.ID, dataObject.code, receiveStr)\n if dataObject ~= nil then\n --判断数据源 是appProxy 还是 device\n --设备数据类型\n -- code:0x01 设备信息上报\n -- code:0x02 心跳上报\n -- code:0x03 周期上报 设备数据与状态\n -- code:0x04 报警上报\n -- code:0x05 时间同步上报\n if dataObject.from == 'device' then\n if dataObject.cmd == 1035 and dataObject.result == 0 then\n if dataObject.code == 2 then --电源开关\n local powerlock = dataObject.params.onoff\n dataObject.params = {}\n dataObject.params.powerlock = powerlock\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 3 then --风速挡位\n local windgear = dataObject.params.gear\n dataObject.params = {}\n dataObject.params.windgear = windgear\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 4 or dataObject.code == 5 or dataObject.code == 6 then --设备返回的 定时设置应答\n --将设置成功的有效任务 存进redis\n local newconfig = dataObject.params\n taskCacheUpdate(dataObject.ID, newconfig, dataObject)\n --将 dataObject 发给 app作为响应\n dataObject.params.result = dataObject.result\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 7 then --杀菌灯开关回应\n local uvlock = dataObject.params.onoff\n dataObject.params = {}\n dataObject.params.uvlock = uvlock\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 8 then --负氧离子\n local NegativeO2lock = dataObject.params.onoff\n dataObject.params = {}\n dataObject.params.NegativeO2lock = NegativeO2lock\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 9 then --加湿器开关\n local humilock = dataObject.params.onoff\n dataObject.params = {}\n dataObject.params.humilock = humilock\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 10 then --加湿器挡位\n local gear = dataObject.params.gear\n dataObject.params = {}\n dataObject.params.humigear = gear\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 11 then --设备工作模式 0自动 1手动 2睡眠\n local mode = dataObject.params.mode\n dataObject.params = {}\n dataObject.params.mode = mode\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 12 then --童锁开关回应\n local childlock = dataObject.params.onoff\n dataObject.params = {}\n dataObject.params.childlock = childlock\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 13 then --远程升级触发后,设备回应 要第几包,平台按需发送\n if dataObject.params.frame == 1 then --设备请求第一包的时候 平台重新获取redis 做缓存\n local redis_key_bin = dataObject.ID .. '_air_bin'\n --更新 升级 固件 缓存\n binCache = getRedisValue_obj(redis_key_bin, dataObject)\n end\n --升级文件流 缓存,拆解成多个小包\n -- binCache.buff = dataObject.params.binBuff\n -- binCache.size = string.len(binCache.buff)\n -- binCache.params = getPackageList(binCache.buff)\n log.debug('home_airclear_0901 [%s][code=%s] 平台收到 设备升级 回应,准备下发升级包[第%s/%s包]', dataObject.ID, dataObject.code, dataObject.params.frame, binCache.params.count)\n\n --dataObject.params.updateState = dataObject.params.sign -- 1:拒绝升级2:准备升级3:升级中4:完成升级\n\n --设备准备升级 or 升级中 发送固件包\n if dataObject.params.sign == 2 or dataObject.params.sign == 3 then\n if dataObject.params.frame ~= nil then\n dataObject.from = 'server'\n dataObject.cmd = 523\n local frameIndex = dataObject.params.frame\n dataObject.params = {}\n dataObject.params.type = 2 --服务器正在升级设备\n dataObject.params.frame = frameIndex\n\n local sub_bin = binCache.params.subList[frameIndex]\n\n if sub_bin ~= nil then\n dataObject.params.bin = sub_bin.buff\n dataObject.params.len = sub_bin.len\n dataObject.params.crc16 = sub_bin.checkint\n end\n\n --数据发送到appProxy binCache.params.count\n sendMsgToTopic(dataObject, 'device')\n end\n dataObject.params.updateState = 'isworking' --升级中\n elseif dataObject.params.sign == 4 then\n if dataObject.params.msg == 2 then\n dataObject.updateState = 'ok' -- 完成升级\n else\n dataObject.params.updateState = 'fail'\n end\n elseif dataObject.params.sign == 1 then\n dataObject.params.updateState = 'fail'\n end\n dataObject.params.flag = getSoftUpdateMsg(dataObject.params.sign, dataObject.params.msg)\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 15 then --报警阈值设置回应\n local result = dataObject.result\n dataObject.params = {}\n dataObject.params.result = result --0代表设置成功\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 17 then --恒湿设置回应\n local fixhumi = dataObject.params.value\n dataObject.params = {}\n dataObject.params.fixhumi = fixhumi\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 19 then --智能开关设定回应\n dataObject.params.smartlock = dataObject.params.en\n dataObject.params.PM2_5H = dataObject.params.up\n dataObject.params.PM2_5L = dataObject.params.down\n sendMsgToTopic(dataObject, 'app')\n end\n elseif dataObject.cmd == 63499 then\n if dataObject.code == 1 then --软硬件 版本主动上报\n ackToDevice(dataObject)\n elseif dataObject.code == 2 then --心跳上报\n ackToDevice(dataObject)\n elseif dataObject.code == 3 then\n --ackToDevice(dataObject)--取消数据应答20200928 与硬件确认\n if dataObject.params ~= nil then\n out.data.temperature = tonumber(string.format('%0.1f', dataObject.params.TEMP))\n out.data.humidity = dataObject.params.HUMI\n out.data.PM2_5H = dataObject.params.PM2_5H --pm2.5上限\n out.data.pm25 = dataObject.params.PM2_5\n out.data.PM2_5L = dataObject.params.PM2_5L --pm2.5下限\n out.data.ch2o = dataObject.params.CH2O --甲醛\n out.data.tvoc = dataObject.params.TVOC --有机气态物质\n out.data.fogs = tonumber(string.format('%0.1f', dataObject.params.fogs)) -- 本次开机加湿量 L 唐露芝20200928 qq群确认\n out.data.airs = dataObject.params.airs --本次净化量\n\n out.data.powerlock = dataObject.params.power --开关\n out.data.windgear = dataObject.params.wind --风速挡位 0:自动,1:1档,2:2档,3:3档, 4:4档\n --out.data.timcnt = dataObject.params.timcnt --定时个数\n out.data.uvlock = dataObject.params.UV --UV杀菌灯开关 1:打开 0:关闭\n out.data.NegativeO2lock = dataObject.params['-O2'] --负氧离子开关状态 1:打开 0:关闭\n out.data.humilock = dataObject.params.humista --加湿器开关状态 1:打开 0:关闭\n out.data.humigear = dataObject.params.humigear -- 加湿器挡位 1:L1 2:L2 3:L3 4:L4\n out.data.clean = dataObject.params.clean --净化开关 1:打开 0:关闭\n out.data.childlock = dataObject.params.chlock --童锁开关状态1:打开 0:关闭\n out.data.smartlock = dataObject.params.smart --智能开关状态1:打开 0:关闭\n\n out.data.USE_M = dataObject.params.USE_M --滤芯使用时间(分钟)\n out.data.CLEAN_M = dataObject.params.CLEAN_M --净化时长(分钟)\n out.data.qtime = dataObject.params.qtime --设备端的定时关小时数,最大12H\n out.data.water = dataObject.params.water --水位感应开关 0:正常 1:缺水\n out.data.mode = dataObject.params.mode --设备工作模式 0自动 1手动 2睡眠\n out.data.hard = dataObject.params.hard --硬件版本号\n out.data.soft = dataObject.params.soft --软件版本号\n else\n log.debug('home_airclear_0901 [%s][code=%s] dataObject.params =nil', dataObject.ID, dataObject.code)\n end\n dataObject.params = out.data\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 4 then --报警上报\n ackToDevice(dataObject)\n elseif dataObject.code == 5 then --时间同步 服务器\n local timeNow = getTime()\n dataObject.from = 'server'\n dataObject.cmd = 64011\n dataObject.params = {}\n dataObject.params.date = timeNow\n sendMsgToTopic(dataObject, 'device')\n elseif dataObject.code == 6 then --定时任务同步 服务器\n dataObject.from = 'server'\n dataObject.cmd = 64011\n dataObject.params = {}\n\n --读取redis\n local redis_key = dataObject.ID .. '_airclaen_taskconfig'\n local redis_taskConfigs = getRedisValue_obj(redis_key, dataObject)\n local array_taskConfigs = {}\n for _, v in pairs(redis_taskConfigs) do\n --如果是 同时开关任务,设备同步的时候,任务号要分开 丢弃\n --if v.time_on and v.time_off then \n --v.task = transferDoubleTaskId(v.task, true, false, false)\n --end\n table.insert(array_taskConfigs, v)\n end\n dataObject.params = array_taskConfigs\n --数据发送到appProxy 周期上报的数据 code= 0x03和\n sendMsgToTopic(dataObject, 'device')\n end\n end\n elseif dataObject.from == 'app' then --测试使用 实际app不会发\n if dataObject.code == 13 then --远程升级 app接口触发mq升级通知\n log.debug('home_airclear_0901 [%s][code=%s] 平台收到 app升级 通知,准备 通知 设备', dataObject.ID, dataObject.code)\n --升级文件流 缓存,拆解成多个小包\n --binCache.buff = dataObject.params.binBuff\n --binCache.params = getPackageList(binCache.buff)\n binCache.params = getPackageList(dataObject.params.binBuff)\n binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n dataObject.from = 'server'\n dataObject.type = tonumber(device.props.sensorType) -- 257 空气净化器 ,513加湿器\n dataObject.cmd = 523\n dataObject.params = {}\n dataObject.params.type = 1 --服务器发起升级申请\n dataObject.params.count = binCache.params.count\n dataObject.params.size = binCache.params.size\n --数据发送到appProxy 周期上报的数据 code= 13和\n log.debug('home_airclear_0901 [%s][code=%s][binCache.updateTime=%s] 开始通知 设备 升级', dataObject.ID, dataObject.code, binCache.updateTime)\n sendMsgToTopic(dataObject, 'device')\n end\n elseif dataObject.from == 'clear' then\n clearTask(dataObject.ID)\n else\n log.debug('home_airclear_0901 [%s][code=%s] 非法数据 =%s', dataObject.ID, dataObject.code, receiveStr)\n end\n else\n log.debug('home_airclear_0901 dataObject =nil')\n end\n\n local resultData = json.encode(out) --输出传递到平台上\n log.debug('home_airclear_0901 result=%s', json.encode(out))\n if next(out.data) ~= nil or next(out.result) ~= nil then\n ctx:notify(resultData)\n end\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n local packageParams = {subList = {}}\n local len = string.len(allPackageStr)\n local count = len / 2048\n local packageCount = math.ceil(count)\n packageParams.size = len\n packageParams.count = packageCount\n\n for i = 1, packageCount, 1 do\n local start_index = (i - 1) * 2048 + 1\n local end_index = start_index + 2047 -- 如果 越界,lua自动取实际的 结束索引\n local subPackage = string.sub(allPackageStr, start_index, end_index)\n --最后一包判断长度是否是 4的倍数 不足写0x1A\n if i == packageCount then\n repeat\n local subPackage_len = string.len(subPackage) / 4\n local min_subPackage_len = math.floor(subPackage_len)\n local diff_value = subPackage_len - min_subPackage_len\n if diff_value > 0 then\n subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍,不足写0x1A\n end\n until (diff_value == 0)\n end\n\n local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n local subcrc = string.sub(subAppendCrc16, -4, -1)\n local subCheck = tonumber(subcrc, 16)\n local subBin = {}\n subBin.len = string.len(subPackage) / 2\n subBin.buff = subPackage\n subBin.checkint = subCheck\n packageParams.subList[i] = subBin\n end\n return packageParams\nend\n\nsendMsgToTopic = function(msg, msgTo)\n local topic\n if msgTo == 'app' then\n --将指令发送到 appProxy的topic\n topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个,代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n --发给app的时候 软件版本比如17要改成1.1\n if msg.params.soft ~= nil then\n msg.params.soft = softNumbertoVersion(msg.params.soft)\n msg.params.hard = softNumbertoVersion(msg.params.hard)\n end\n msg.params.bin = nil --节省资源\n elseif msgTo == 'device' then\n topic = msg.ID .. '_device_rece'\n end\n msg.packid = os.time()\n local msgStr = json.encode(msg)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n log.debug('home_airclear_0901 [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', msg.ID, msg.code, binCache.updateTime, topic, msgStr, ok, ack)\nend\n\nackToDevice = function(rawDataObject)\n local topic = rawDataObject.ID .. '_device_rece'\n rawDataObject.from = 'server'\n rawDataObject.packid = os.time()\n rawDataObject.cmd = 64011\n rawDataObject.params = 'null'\n rawDataObject.result = 0\n local msgStr = json.encode(rawDataObject)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n log.debug('home_airclear_0901 服务器 应答 设备 [%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', rawDataObject.ID, topic, msgStr, ok, ack)\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ngetTime = function()\n local timenum = os.time()\n local dateStr = os.date('%Y-%m-%d %H:%M:%S', timenum)\n --空气净化器最后还要带 周几下去\n -- 2018-4-28 16:10:12\n local datelist = Split(dateStr, ' ')\n local datebegin = Split(datelist[1], '-')\n --local dateend = Split(datelist[2], ':')\n local year = tonumber(datebegin[1])\n local month = tonumber(datebegin[2])\n local day = tonumber(datebegin[3])\n\n local week = getWeek_comm(year, month, day)\n local recordTime = string.format('%s %s', dateStr, week)\n return recordTime\nend\n\n--获取星期几\nfunction getWeek_comm(y, m, d)\n if m == 1 or m == 2 then\n m = m + 12\n y = y - 1\n end\n local m1, _ = math.modf(3 * (m + 1) / 5)\n local m2, _ = math.modf(y / 4)\n local m3, _ = math.modf(y / 100)\n local m4, _ = math.modf(y / 400)\n\n local iWeek = (d + 2 * m + m1 + y + m2 - m3 + m4) % 7\n local weekTab = {\n ['0'] = 1,\n ['1'] = 2,\n ['2'] = 3,\n ['3'] = 4,\n ['4'] = 5,\n ['5'] = 6,\n ['6'] = 0 --周日是 0\n }\n return weekTab[tostring(iWeek)]\nend\n\ngetRedisValue_obj = function(key, logObject)\n local r1, r1ok = redis.get(key) --获取上次记录时间\n log.debug('home_airclear_0901 [%s][code=%s] [getRedis] r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n\n local params = {}\n if r1ok and r1 ~= nil and r1 ~= 'null' then\n local taskConfig = json.decode(r1)\n params = taskConfig\n else\n log.debug('home_airclear_0901 [%s][code=%s] [getRedis] taskConfig读取失败 r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n end\n return params\nend\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n local redis_key = devId .. '_airclaen_taskconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n --判断 任务 id是否存在 存在就更新\n local tsakId = tostring(taskConfig.task)\n log.debug('home_airclear_0901 [%s] 排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s', cmd_obj.ID, tsakId, redis_taskConfigs, json.encode(redis_taskConfigs), type(redis_taskConfigs))\n local cmd_code = cmd_obj.code\n if cmd_code == 4 or cmd_code == 5 then --添加或修改 或取消任务\n --如果是自增任务的设备返回 先解析任务id\n if taskConfig.time_on then --只要on大于0 必然 任务id >16\n local hexTaskId = string.format('%02x', tonumber(tsakId))\n local real_tsakId = string.sub(hexTaskId, 1, 1)\n -- 避免单任务取到0的情况\n log.debug('home_airclear_0901 自增任务 首次插入 real_tsakId=%s[%s]', real_tsakId, type(real_tsakId))\n tsakId = real_tsakId\n elseif taskConfig.time_on == nil then\n local hexTaskId = string.format('%02x', tonumber(tsakId))\n local real_tsakId = string.sub(hexTaskId, 2, 2)\n -- 避免单任务取到0的情况\n log.debug('home_airclear_0901 自增任务 首次插入 real_tsakId=%s[%s]', real_tsakId, type(real_tsakId))\n tsakId = real_tsakId\n end\n if redis_taskConfigs[tsakId] ~= nil then\n redis_taskConfigs[tsakId] = taskConfig\n log.debug('home_airclear_0901 非首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n else\n log.debug('home_airclear_0901 首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n --table.insert(redis_taskConfigs, tsakId, taskConfig)\n redis_taskConfigs[tsakId] = taskConfig\n end\n\n log.debug('home_airclear_0901 [%s][code=%s] redis_taskConfigs=%s', cmd_obj.ID, cmd_obj.code, json.encode(redis_taskConfigs))\n elseif cmd_code == 6 then --删除任务\n local real_tsakId = get_delete_id(redis_taskConfigs, tonumber(tsakId))\n redis_taskConfigs[real_tsakId] = nil\n log.debug('home_airclear_0901 删除任务 tsakId=%s', tsakId)\n end\n setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\nget_delete_id = function(redis_tasks, delete_id)\n for key, value in pairs(redis_tasks) do\n if value.task == delete_id then\n return key\n end\n end\n log.debug('home_airclear_0901 无法删除任务 delete_id=%s 没有匹配项目', delete_id)\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n local setValue = json.encode(setValueObject)\n local r1ok, r1 = redis.set(key, setValue)\n log.debug('home_airclear_0901 [%s][code=%s] [setRedis] r1=%s,r1ok=%s,key=%s,setValue=%s', logObject.ID, logObject.code, r1, r1ok, key, setValue)\n return r1ok\nend\n\ntransferDoubleTaskId = function(appTaskId, isDouble, isOn, isOff)\n local task_k = tonumber(appTaskId)\n\n local taskid_new = 255 --默认是单任务的 task\n local kk\n if isDouble then --如果是 同时开关任务 关任务号就是开任务号+1\n kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n taskid_new = tonumber(kk, 16)\n elseif isOn then\n kk = string.format('%01x', task_k) .. '0'\n taskid_new = tonumber(kk, 16)\n elseif isOff then\n kk = '0' .. string.format('%01x', task_k)\n taskid_new = tonumber(kk, 16)\n end\n log.debug('home_airclear_0901 任务id taskid_new=%s,kk=%s', taskid_new, kk)\n return taskid_new\nend\n\n--清空redis的 task缓存\nclearTask = function(deviceID)\n local clear_key = string.format('%s_airclaen_taskconfig', deviceID)\n --清除redis使用\n --local ab = {}\n --local clearValue = json.encode(ab)\n local r1, r1ok = redis.set(clear_key, clearValue)\n --local r1, r1ok = redis.set('00000001_airclaen_taskconfig', clearValue)\n --local r1, r1ok = redis.set('00000002_airclaen_taskconfig', clearValue)\n --local r1, r1ok = redis.set('00000005_airclaen_taskconfig', clearValue)\nend\n\nsoftNumbertoVersion = function(soft_num)\n local hex_str = string.format('%02x', soft_num)\n local s10 = string.sub(hex_str, 1, 1)\n local s1 = string.sub(hex_str, 2, 2)\n local number_str = string.format('%s.%s', tonumber(s10, 16), tonumber(s1, 16))\n return number_str\nend\n\ngetSoftUpdateMsg = function(signid, msgid)\n local k = string.format('%s,%s', signid, msgid)\n local msgs = {\n ['1,1'] = '不支持升级',\n ['1,2'] = '已是最新版本',\n ['1,3'] = '其他错误',\n ['2,1'] = '升级A区域',\n ['2,2'] = '升级B区域',\n ['3,1'] = '校验错误重发',\n ['3,2'] = '校验正确发下一帧',\n ['4,1'] = '升级出错',\n ['4,2'] = '升级成功'\n }\n return msgs[k]\nend INLINE 2020-11-09 13:49:02.191+08 2020-12-10 10:30:48.566+08 2020-11-09 \N
+a595a911-e18d-44ff-8e67-a303b74de84f fs-gnss-json \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n local moduleNo = device.uplink.props.id --模块\n --log.debug('fs_gnss_json [%s] device=%s',moduleNo,jaon.encode(device))\nend\n--说明:gnss设备的URL 是可配置的\n--body 数据里面的字段 product projectId deviceId 都是在现场设备上配置写死的 \nonData =function(httpbody, index)\n local out = {\n data = {},\n result = {}\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n log.debug('fs_gnss_json [%s] device=%s',moduleNo,json.encode(device))\n log.debug('fs_gnss_json [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n local bodydataStr = httpbody.Body\n local bodydata = json.decode(bodydataStr)\n local projectId = bodydata.projectId\n --local serverIP = '218.3.126.49'\n --local port = '19700'\n --local serverTime = getTimeNowStr()\n local url = httpbody.URL\n --log.debug('fs_gnss_json [%s] url=%s type=%s', moduleNo, url, type(url))\n\n --获取实时数据\n\t\tlocal projectId = bodydata.projectId\n local deviceId = bodydata.deviceId \n \t\tlocal x = bodydata.x \n \t\tlocal y = bodydata.y \n \t\tlocal z = bodydata.z \n \t\tlocal dx = bodydata.dx \n \t\tlocal dy = bodydata.dy \n \t\tlocal dz = bodydata.dz\n \n local RTime = bodydata.time --时刻 \n \n \n\n out.data = {\n --projectId = projectId,\n --deviceId = deviceId,\n \t\tx = x,\n \t\ty = y,\n \t\tz = z,\n \t\tdx = dx,\n dy = dy,\n dz = dz\n }\n out.time = unixtimestamp(RTime, deviceId)\n \t\tlocal resultStr=json.encode(out)\n log.debug('fs_gnss_json [%s] json.encode(out)=%s', moduleNo,resultStr)\n asend_HttpResponse()\n ctx:notify(resultStr)\nend\n\nasend_HttpResponse = function()\n ack = {type = 'http', code = 200, body = '{}'}\n ctx:asend(ack)\nend\n\ngetTimeNowStr = function()\n --2018-4-28 16:10:12\n local timeNowNum = os.time()\n local timeNowStr = os.date('%Y-%m-%d %H:%M:%S', timeNowNum)\n return timeNowStr\nend\n\nunixtimestamp = function(datestr, moduleNoStr)\n -- 2018-4-28 16:10:12\n --log.debug("fs_gnss_json datestr=%s",datestr)\n local datelist = Split(datestr, ' ')\n local date = Split(datelist[1], '-')\n local time = Split(datelist[2], ':')\n local year = tonumber(date[1])\n local month = tonumber(date[2])\n local day = tonumber(date[3])\n local hour = tonumber(time[1])\n local minute = tonumber(time[2])\n local second = tonumber(time[3])\n --log.debug("fs_gnss_json year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --log.debug('fs_gnss_json [%s] recordTime=%s', moduleNoStr, recordTime)\n return recordTime\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend INLINE 2020-07-23 13:38:34.445+08 2020-08-27 10:44:26.134+08 2020-07-23 \N
+e27702ac-0d69-44e4-96bc-ccb3bc117406 file_weight_fs \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start=function()\n\tlog.debug("weight_file : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n\tif data ~=nil then\n\t\tif data.type == "idau/file" then\n\t\t\tif data.ext==".d" or data.ext==".dx" then\n\t\t\t\t--log.debug("weight_file : recvd content = %s",data.payload)\n\t\t\t\tParseFileD(data.payload)\n\t\t\t\t--else\n\t\t\t\t--log.error("weight_file: unsupported file type: %s", data.ext)\n\t\t\tend\n\t\t\tif data.ext==".dat" then\n\t\t\t\t--log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n\t\t\t\tParseFileDat(data.payload)\n\t\t\t\t--else\n\t\t\t\t--log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n\t\t\tend\n\t\telse\n\t\t\tlog.error("weight_file : content type is not file, error recvd type is %s", data.type)\n\t\tend\n\telse\n\t\tlog.error("weight_file : recvd content is nil")\n\tend\nend\n\nfunction ParseFileDat(dathex)\n\tlog.debug("weight_file : datlen=%s" , string.len(dathex))\n\tlocal out={\n\t\tdata ={},\n\t\tresult = {},\n\t\ttype=2\n\t}\n\tlocal offset = 0\n\tlocal t = iota.hexToShort(dathex,offset,'B')\n\toffset = offset + 2\n\tlocal l = iota.hexToShort(dathex,offset,'B')\n\toffset = offset + 2\n\tlocal version = iota.hexToByte(dathex,offset,'B') -- 版本号\n\toffset = offset + 1\n\tlocal channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n\toffset = offset + 1\n\tlocal deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n\tlocal subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n\tif subdevice ~= nil then\n\t\toffset = offset + 2\n\t\tlocal samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n\t\toffset = offset + 4\n\t\tlocal filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n\t\toffset = offset + 4\n\t\tlocal gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n\t\toffset = offset + 1\n\t\tlocal triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n\t\toffset = offset + 1\n\t\tlocal year = iota.hexToByte(dathex,offset,'B')+2000\n\t\toffset = offset + 1\n\t\tlocal mon = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal day = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal hour = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal min = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal sec = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\toffset = offset + 12\n\t\tlocal Ldata = iota.hexToInt(dathex,offset,'B')\n\t\toffset = offset + 4\n\t\tlog.debug("weight_file deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n\t\tlocal strLen = string.len(dathex)\n\t\tlocal floatcount = (strLen/2-40)/4\n\t\t--log.debug("weight_file begin parse")\n\t\tlocal vols = {}\n\t\tfor i= 1, floatcount do\n\t\t\t--offset=40+(i-1)*4\n\t\t\tlocal subdat=string.sub(dathex,73+i*8,80+i*8)\n\t\t\t\n -- if pos >= strLen then\n -- log.debug("weight_file outofrange offset=%s floatcount=%s, strlen=%s",offset, floatcount, strLen)\n -- end\n\t\t\tvols[i]= iota.hexToFloat(subdat,0,'L',6)\n\t\tend\n\t\t--log.debug("weight_file finish parse")\n\n\t\tlocal rst = {\n\t\t\tdata={\n\t\t\t\t_data_type='vib',\n\t\t\t\tphysicalvalue=vols,\n\t\t\t\tsampleFreq=samplefreq,\n\t\t\t\tfilterFreq=filterfreq,\n\t\t\t\tgainAmplifier=gainamplifier,\n\t\t\t\ttriggerType=triggertype,\n\t\t\t\tversion=version\n\t\t\t},\n\t\t\tdevice=subdevice.id,\n\t\t\ttype=1,\n\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))\n\t\t}\n\t\ttable.insert(out.data,rst)\n\t\t--log.debug("weight_file deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n\t\tctx:notify(json.encode(out))\n\telse\n\t\t--log.debug("weight_file not found device module=%s channel=%s",deviceId,channel)\n\tend\nend\n\nfunction ParseFileD(content)\n\tlocal out={\n\t\tdata ={},\n\t\tresult = {},\n\t\ttype=2\n\t}\n\tlog.debug("weight_file : content =%s", content)\n\tlocal jsons=Split(content,'\\r')\n\tfor k,v in pairs(jsons) do\n\t\tif v~=nil and v~='' then\n\t\t\tlocal jsondata = json.decode(v)\n\t\t\tif jsondata~=nil and jsondata ~='' then\n\t\t\t\tlocal childDevice=getDeviceInfo(jsondata.M,jsondata.C)\n\t\t\t\tif childDevice ~=nil then\n\t\t\t\t\tlog.debug("weight_file 设备类型=%s,%s",childDevice.props.sensortype,json.encode(childDevice))\n\t\t\t\t\tif childDevice.props.sensortype=='gnss' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tx = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\ty = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\tz = jsondata.RV[3] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",((tonumber(jsondata.T)-28800000)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='zd' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tppv = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\tpv = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\trms = jsondata.RV[3] or 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("weight_file:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\n\t\t\t\t\tif childDevice.props.sensortype=='gdgs' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twavelength = jsondata.RV[1],\n\t\t\t\t\t\t\t\tphysicalvalue= jsondata.PV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("weight_file:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='wsd' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\ttemperature = jsondata.RV[1],\n\t\t\t\t\t\t\t\thumidity= jsondata.RV[2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("weight_file:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='standard485' then\n\t\t\t\t\t\tlog.debug("weight_file standard485=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tphysicalvalue= jsondata.PV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("weight_fileout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='cx' then\n\t\t\t\t\t\tlog.debug("weight_file standard485=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tanglex = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\tangley = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\ttemperature = jsondata.RV[3] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("weight_fileout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='lf' then\n\t\t\t\t\t\tlog.debug("weight_file lf=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tlength = jsondata.RV[1] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("weight_fileout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='pressure' then\n\t\t\t\t\t\tlog.debug("weight_file pressure=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tvoltage= jsondata.RV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("weight_fileout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n if childDevice.props.sensortype=="yc" then --压差\n\t\t\t\t\t\tlog.debug("weight_file yc=%s",json.encode(childDevice))\n local data3 ={\n data={\n pressure=jsondata.RV[1] or 0,\n temperature = jsondata.RV[2] or 0,\n \t\t\t\tssagee =jsondata.PV[1] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000-8 * 60 * 60)) \n }\n\t\t\t\t\t\t--log.debug("weight_fileout data=%s,time=%s,T=%s",json.encode(data3),data3.time,jsondata.T)\t\t\t\n table.insert(out.data,data3)\n end\t\t\n if childDevice.props.sensortype=="zx" then --振弦\n log.debug("weight_file zx=%s",json.encode(childDevice))\n local data4={\n data={\n physicalvalue = jsondata.PV[1] or 0,\n frequency=jsondata.RV[1],\n temperature=jsondata.RV[2],\n am=jsondata.RV[3],\n \t\t\t\t\twaterlevel=jsondata.PV[1],\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000-8 * 60 * 60)) \n }\n --log.debug("weight_fileout data=%s,time=%s,T=%s",json.encode(data4),data4.time,jsondata.T)\t\n table.insert(out.data,data4)\n end\t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='bj' then\n\t\t\t\t\t\tlog.debug("ct_file_transfer bj=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tarch= jsondata.RV[1],\n\t\t\t\t\t\t\t\ttunnelface= jsondata.RV[2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='laser' then\n\t\t\t\t\t\tlog.debug("ct_file_transfer laser=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tlength= jsondata.RV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\n\t\t\t\t\tif childDevice.props.sensortype=='qixiangzhan' then\n\t\t\t\t\t\tlog.debug("weight_file qixiangzhan=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\ttemp= jsondata.RV[1],\n\t\t\t\t\t\t\t\thumidy= jsondata.RV[2],\n\t\t\t\t\t\t\t\tnoise= jsondata.RV[3],\n\t\t\t\t\t\t\t\tpm25= jsondata.RV[4],\n\t\t\t\t\t\t\t\tpm10= jsondata.RV[5]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("weight_fileout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='weight' then\n\t\t\t\t\t\tlog.debug("fs_file_transfer weight=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal axies = {\n\t\t\t\t\t\t\t\tjsondata.SRT[9],\n\t\t\t\t\t\t\t\tjsondata.SRT[10],\n\t\t\t\t\t\t\t\tjsondata.SRT[11],\n\t\t\t\t\t\t\t\tjsondata.SRT[12],\n\t\t\t\t\t\t\t\tjsondata.SRT[13],\n\t\t\t\t\t\t\t\tjsondata.SRT[14],\n\t\t\t\t\t\t\t\tjsondata.SRT[15],\n\t\t\t\t\t\t\t\tjsondata.SRT[16],\n\t\t\t\t\t\t\t\tjsondata.SRT[17],\n\t\t\t\t\t\t\t\tjsondata.SRT[18]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tgrossWeight = jsondata.SRT[1],\n\t\t\t\t\t\t\t\tdirection = jsondata.SRT[5],\n\t\t\t\t\t\t\t\taxisnum = jsondata.SRT[3],\n\t\t\t\t\t\t\t\tcmsLength = jsondata.SRT[6],\n\t\t\t\t\t\t\t\tcarType = jsondata.SRT[4],\n\t\t\t\t\t\t\t\ttotalBase = jsondata.SRT[7],\n\t\t\t\t\t\t\t\taxieSpeed = jsondata.SRT[2],\n\t\t\t\t\t\t\t\tcrossRoad = jsondata.M,\n\t\t\t\t\t\t\t\toverload = "无",\n\t\t\t\t\t\t\t\tlicence = jsondata.SRT[8],\n\t\t\t\t\t\t\t\taxieWeight = json.encode(axies)\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='fsfx' then\n\t\t\t\t\t\tlog.debug("weight_file fsfx=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twinddirection = jsondata.RV[1],\n\t\t\t\t\t\t\t\twindspeed = jsondata.RV[2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("weight_fileout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tlog.debug("weight_file line=%s childDevice is nil",k)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\tlog.debug("weight_file: dataresult: %s", json.encode(out))\n\tctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n\tlog.debug("weight_file:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n\t--log.debug("weight_file: device = %s",json.encode(device))\n\tif device.dnlinks ~= nil then\n \tlog.debug("weight_file: device.dnlinks ~= nil")\n\t\tlocal subdevices = device.dnlinks[1].devices\n \tlog.debug("weight_file: subdevices %s",json.encode(subdevices))\n\t\tfor i,subdevice in pairs(subdevices) do\n\n\t\t\tlocal submodule=subdevice.uplink.props.module\n\t\t\t--判断是否是3层采集仪结构\n\t\t\tif json.encode(subdevice.dnlinks)~="{}" then\n\t\t\t\tlog.debug("weight_file:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n\t\t\t\tfor k,sublink in pairs(subdevice.dnlinks) do\n\t\t\t\t\t--log.debug("weight_file:sublink=%s",json.encode(sublink))\n\t\t\t\t\tfor u,sub_subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t--log.debug("weight_file:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\tlocal sensormodule=sub_subdevice.uplink.props.module\n\t\t\t\t\t\tlocal sensorchannel=sub_subdevice.uplink.props.channel\n\t\t\t\t\t\tif tostring(sensormodule) == tostring(moduleid) and tonumber(sensorchannel)==tonumber(channel) then\n\t\t\t\t\t\t\t--log.debug("weight_file:m=%s,c=%s 3 拜安匹配到设备=%s",moduleid,channel,json.encode(sub_subdevice))\n\n\t\t\t\t\t\t\treturn sub_subdevice\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\t--log.debug("weight_file:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\telse\n\n\t\t\t\tlocal subchannel=subdevice.uplink.props.channel\n\t\t\t\t--log.debug("weight_file:两层结构 m=%s,c=%s 设备=%s",submodule,subchannel,json.encode(subdevice))\n\t\t\t\tif tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then\n\t\t\t\t\t--log.debug("weight_file:m=%s,c=%s 2安信匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n\t\t\t\t\treturn subdevice\n\t\t\t\telse\n\t\t\t\t\t--log.debug("anxin_file_transfer has no device module=%s channel=%s,[submodule=%s,subchannel=%s]",moduleid,channel,submodule,subchannel)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tlog.debug("weight_file has no device module=%s channel=%s",moduleid,channel)\n\t\treturn nil -- 没有找到匹配的传感器\n\telse\n\t\tlog.debug("weight_file has no subdevices.")\n\t\treturn nil -- 没有子设备\n\tend\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n\tlocal nFindStartIndex = 1\n\tlocal nSplitIndex = 1\n\tlocal nSplitArray = {}\n\twhile true do\n\t\tlocal nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n\t\tif not nFindLastIndex then\n\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n\t\t\tbreak\n\t\tend\n\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n\t\tnFindStartIndex = nFindLastIndex + string.len(szSeparator)\n\t\tnSplitIndex = nSplitIndex + 1\n\tend\n\treturn nSplitArray\nend\n\nfunction unicode2gb2312(src)\n\tlocal map_tb={["冀"] = "BCBD",["豫"] = "D4A5",["云"] = "D4C6",["辽"] = "C1C9",["黑"] = "BADA",["湘"] = "CFE6",["皖"] = "CDEE",\n ["鲁"] = "C2B3",["新"] = "D0C2",["苏"] = "CBD5",["浙"] = "D5E3",["赣"] = "B8D3",["鄂"] = "B6F5",["桂"] = "B9F0", \n ["甘"] = "B8CA",["晋"] = "BDFA",["蒙"] = "C3C9",["陕"] = "C9C2",["吉"] = "BCAA",["闽"] = "C3F6",["贵"] = "B9F3", \n ["粤"] = "D4C1",["青"] = "C7E0",["藏"] = "B2D8",["川"] = "B4A8",["宁"] = "C4FE",["琼"] = "C7ED",["渝"] = "D3E5", \n ["京"] = "BEA9",["津"] = "BDF2",["沪"] = "BBA6",["深"] = "C9EE",["学"] = "D1A7",["无"] = "CEDE"}\t\n\tfor k,v in pairs(map_tb) do\n if v == string.format("%X",tonumber(src,16)) then\n return k\n end\n end\n return " "\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend INLINE 2019-08-05 09:32:23.776+08 2021-02-02 14:24:55.148+08 2019-08-05 \N
+e44f9a31-032c-40f5-9598-6ecbae372f1e gx_temphumi_7001 \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --D:\\SVN\\201907项目\\工讯水准仪3.0\\土壤含水计协议.doc\n--// PMO/02 产品协议/SavoirCloud/01 协议/4月第3周/北京宝力马传感技术有限公司/通讯协议WS302M2A-5温湿度变送器使用说明书V3.0.1(中英)-华为专用-北京宝力马传感技术有限公司.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "gx_temphumi_7001", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("gx_temphumi_7001 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("gx_temphumi_7001 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("gx_temphumi_7001 SSend error!")\n end\n ctx:done(result)\nend\n\n--1203040025001908f3\n--moduleId=18 \n--"humidity": 2.5,\n--"temp": 3.7\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local temp = iota.hexToShort(hex,5,'B')/10.0\n local humidity = iota.hexToShort(hex,3,'B')/10.0\n \n out.data = {\n\t\t\ttemperature=temp,\n\t\t\thumidity=humidity\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('gx_temphumi_7001 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('gx_temphumi_7001 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2019-08-06 10:56:41.435+08 2019-08-06 13:23:33.233+08 2019-08-06 \N
+1c891c2f-0cd5-433b-93f1-11b7f54f9ca0 home_humi_0901 \N 1.0 f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f f2b3bb46-fba2-4a7a-a1f9-b88d86826cce Lua start = function()\n --local str="484f0020d54200083f710008b96600083b710008d56100087b7e000800000000000000000000000000000000997400089163000800000000cd71000809760008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef42000875760008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008417a0008c97a0008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef42000800f002f800f092f80aa090e8000c82448344aaf10107da4501d100f087f8aff2090ebae80f0013f0010f18bffb1a43f001031847ecba00000cbb0000103a24bf78c878c1fad8520724bf30c830c144bf04680c60704700000023002400250026103a28bf78c1fbd8520728bf30c148bf0b6070476e2900f09184702900f0878166290bf02a8065290bf0278067290bf0248061290bf0238003681b0a28bf41f08001692900f0f880642900f0f580752900f0f2806f2900f08587782900f05381e92900f01f87e42900f01c87f52900f01987ef2900f08287f82900f052810368db0928bf41f08001632900f0a086732900f0a586e32901f09581f32901f09a81002070471fb50af0e3ff00f075ff0400002000210af0c8f9401c6060002000210af0d8f9e0601fbd10b510bd01f015fa1146fff7e7ff05f029f801f033fa03b4fff7f2ff03bc01f033fa00000948804709480047fee7fee7fee7fee7fee7fee7fee7fee7fee7fee704480549054a064b704700000d7600088941000848490020484f0020484b0020484b002010b5044600f086fb0068005dc00602d504f1200010bd204610bd00001cb50c46064b7b4469460090204600f018fe04460020694600f026fe20461cbd5f0c00000fb41cb5084b06aa7b4469460090059800f005fe04460020694600f013fe20461cbc5df814fb0000390c000070b5044685690068c10601d5302600e02026c00707d070bdd4e9012130469047206a401c20626d1ef6d570bd70b5044685690078c00707d170bdd4e9012120209047206a401c20626d1ef6d570bd70b50c460546012a05d02878800600d5ea69002302e0012305e05b1c934202d2e05c0028f9d1a869e618c01aa861286a1844"\n --local appendCrc16 = iota.appendHexCrc(str, 'B', 0)\n --local crc16str = string.sub(appendCrc16, -4, -1)\n --local crc16 = tonumber(crc16str, 16)\n -- log.debug('home_humi_0901 校验16=%s', crc16)\n log.debug('home_humi_0901 device=%s', json.encode(device))\n --onData('')\nend\n\nlocal binCache = {params = {subList = {}}}\n--固件升级包 缓存结构\n--binCache ={params = {subList = {}}, updateTime = '2020-09-23 06:01:06',size=12345678,count=20}\nonData = function(mq_body)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n local receiveStr = mq_body.payload\n log.debug('home_humi_0901 receiveStr=%s', receiveStr)\n --解析数据\n local dataObject = json.decode(receiveStr)\n log.debug('home_humi_0901 [%s][code=%s] receiveStr=%s', dataObject.ID, dataObject.code, receiveStr)\n if dataObject ~= nil then\n --判断数据源 是appProxy 还是 device\n --设备数据类型\n -- code:0x01 设备信息上报\n -- code:0x02 心跳上报\n -- code:0x03 周期上报 设备数据与状态\n -- code:0x04 报警上报\n -- code:0x05 时间同步上报\n if dataObject.from == 'device' then\n if dataObject.cmd == 1035 and dataObject.result == 0 then\n if dataObject.code == 4 or dataObject.code == 5 or dataObject.code == 6 then --设备返回的 定时设置应答\n --将设置成功的有效任务 存进redis\n local newconfig = dataObject.params\n taskCacheUpdate(dataObject.ID, newconfig, dataObject)\n --将 dataObject 发给 app作为响应\n dataObject.params.result = dataObject.result\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 2 then --电源开关\n local powerlock = dataObject.params.onoff\n dataObject.params = {}\n dataObject.params.powerlock = powerlock\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 7 then --杀菌灯开关回应\n local uvlock = dataObject.params.onoff\n dataObject.params = {}\n dataObject.params.uvlock = uvlock\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 10 then --加湿器挡位\n local gear = dataObject.params.gear\n dataObject.params = {}\n dataObject.params.humigear = gear\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 11 then --设备工作模式 0自动 1手动 2睡眠 3恒湿\n local mode = dataObject.params.mode\n dataObject.params = {}\n dataObject.params.mode = mode\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 12 then --童锁开关回应\n local childlock = dataObject.params.onoff\n dataObject.params = {}\n dataObject.params.childlock = childlock\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 13 then --远程升级触发后,设备回应 要第几包,平台按需发送\n if dataObject.params.frame == 1 then --设备请求第一包的时候 平台重新获取redis 做缓存\n local redis_key_bin = dataObject.ID .. '_air_bin'\n --更新 升级 固件 缓存\n binCache = getRedisValue_obj(redis_key_bin, dataObject)\n end\n --升级文件流 缓存,拆解成多个小包\n -- binCache.buff = dataObject.params.binBuff\n -- binCache.size = string.len(binCache.buff)\n -- binCache.params = getPackageList(binCache.buff)\n log.debug('home_humi_0901 [%s][code=%s] 平台收到 设备升级 回应,准备下发升级包[第%s/%s包]', dataObject.ID, dataObject.code, dataObject.params.frame, binCache.params.count)\n\n --dataObject.params.updateState = dataObject.params.sign -- 1:拒绝升级2:准备升级3:升级中4:完成升级\n\n --设备准备升级 or 升级中 发送固件包\n if dataObject.params.sign == 2 or dataObject.params.sign == 3 then\n if dataObject.params.frame ~= nil then\n dataObject.from = 'server'\n dataObject.cmd = 523\n local frameIndex = dataObject.params.frame\n dataObject.params = {}\n dataObject.params.type = 2 --服务器正在升级设备\n dataObject.params.frame = frameIndex\n\n local sub_bin = binCache.params.subList[frameIndex]\n\n if sub_bin ~= nil then\n dataObject.params.bin = sub_bin.buff\n dataObject.params.len = sub_bin.len\n dataObject.params.crc16 = sub_bin.checkint\n end\n\n --数据发送到appProxy binCache.params.count\n sendMsgToTopic(dataObject, 'device')\n end\n dataObject.params.updateState = 'isworking' --升级中\n elseif dataObject.params.sign == 4 then\n if dataObject.params.msg == 2 then\n dataObject.params.updateState = 'ok' -- 完成升级\n else\n dataObject.params.updateState = 'fail'\n end\n elseif dataObject.params.sign == 1 then\n dataObject.params.updateState = 'fail'\n end\n dataObject.params.flag = getSoftUpdateMsg(dataObject.params.sign, dataObject.params.msg)\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 17 then --加湿器挡位\n local fixhumi = dataObject.params.value\n dataObject.params = {}\n dataObject.params.fixhumi = fixhumi\n sendMsgToTopic(dataObject, 'app')\n end\n elseif dataObject.cmd == 63499 then\n if dataObject.code == 1 then --软硬件 版本主动上报\n ackToDevice(dataObject)\n elseif dataObject.code == 2 then --心跳上报\n ackToDevice(dataObject)\n elseif dataObject.code == 3 then\n --ackToDevice(dataObject)--取消数据应答20200928 与硬件确认\n if dataObject.params ~= nil then\n out.data.temperature = tonumber(string.format('%0.2f', dataObject.params.TEMP))\n out.data.humidity = dataObject.params.HUMI\n out.data.pm1 = dataObject.params.PM1_0\n out.data.pm25 = dataObject.params.PM2_5\n out.data.pm10 = dataObject.params.PM10\n out.data.ch2o = dataObject.params.CH2O --甲醛\n out.data.tvoc = dataObject.params.TVOC --有机气态物质\n out.data.fogs = tonumber(string.format('%0.1f', dataObject.params.fogs)) -- 总雾化水位 唐露芝20200928 qq群确认\n\n out.data.powerlock = dataObject.params.power --开关\n out.data.windgear = dataObject.params.wind --风速挡位 0:自动,1:1档,2:2档,3:3档, 4:4档\n out.data.timcnt = dataObject.params.timcnt --定时个数\n out.data.uvlock = dataObject.params.UV --UV杀菌灯开关 1:打开 0:关闭\n out.data.NegativeO2lock = dataObject.params['-O2'] --负氧离子开关状态 1:打开 0:关闭\n out.data.humilock = dataObject.params.humista --加湿器开关状态 1:打开 0:关闭\n out.data.humigear = dataObject.params.humigear -- 加湿器挡位 1:L1 2:L2 3:L3 4:L4\n out.data.wchargelock = dataObject.params.wcharge --无线充电开关 1:打开 0:关闭\n out.data.childlock = dataObject.params.chlock --童锁开关状态1:打开 0:关闭\n\n out.data.fixhumi = dataObject.params.fixhumi --恒湿开关状态 1:打开 0:关闭\n out.data.water = dataObject.params.water --水位感应开关 0:正常 1:缺水\n out.data.mode = dataObject.params.mode --设备工作模式 0自动 1手动 2睡眠 3恒湿\n out.data.hard = dataObject.params.hard --硬件版本号\n out.data.soft = dataObject.params.soft --软件版本号\n else\n log.debug('home_humi_0901 [%s][code=%s] dataObject.params =nil', dataObject.ID, dataObject.code)\n end\n dataObject.params = out.data\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 4 then --报警上报\n ackToDevice(dataObject)\n elseif dataObject.code == 5 then --时间同步 服务器\n local timeNow = getTime()\n dataObject.from = 'server'\n dataObject.cmd = 64011\n dataObject.params = {}\n dataObject.params.date = timeNow\n --数据发送到appProxy 周期上报的数据 code= 0x03和\n sendMsgToTopic(dataObject, 'device')\n elseif dataObject.code == 6 then --定时任务同步 服务器\n dataObject.from = 'server'\n dataObject.cmd = 64011\n dataObject.params = {}\n\n --读取redis\n local redis_key = dataObject.ID .. '_air_taskconfig'\n local redis_taskConfigs = getRedisValue_obj(redis_key, dataObject)\n local array_taskConfigs = {}\n for _, v in pairs(redis_taskConfigs) do\n --如果是 同时开关任务,设备同步的时候,任务号要分开 丢弃\n --if v.time_on and v.time_off then\n -- v.task = transferDoubleTaskId(v.task, true, false, false)\n --end\n table.insert(array_taskConfigs, v)\n end\n dataObject.params = array_taskConfigs\n --数据发送到appProxy 周期上报的数据 code= 0x03和\n sendMsgToTopic(dataObject, 'device')\n end\n end\n elseif dataObject.from == 'app' then --测试使用 实际app不会发\n if dataObject.code == 13 then --远程升级 app接口触发mq升级通知\n log.debug('home_humi_0901 [%s][code=%s] 平台收到 app升级 通知,准备 通知 设备', dataObject.ID, dataObject.code)\n --升级文件流 缓存,拆解成多个小包\n --binCache.buff = dataObject.params.binBuff\n --binCache.params = getPackageList(binCache.buff)\n binCache.params = getPackageList(dataObject.params.binBuff)\n binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n dataObject.from = 'server'\n dataObject.type = tonumber(device.props.sensorType) -- 257 空气净化器 ,513加湿器\n dataObject.cmd = 523\n dataObject.params = {}\n dataObject.params.type = 1 --服务器发起升级申请\n dataObject.params.count = binCache.params.count\n dataObject.params.size = binCache.params.size\n --数据发送到appProxy 周期上报的数据 code= 13和\n log.debug('home_humi_0901 [%s][code=%s][binCache.updateTime=%s] 开始通知 设备 升级', dataObject.ID, dataObject.code, binCache.updateTime)\n sendMsgToTopic(dataObject, 'device')\n end\n elseif dataObject.from == 'clear' then\n clearTask(dataObject.ID)\n else\n log.debug('home_humi_0901 [%s][code=%s] 非法数据 =%s', dataObject.ID, dataObject.code, receiveStr)\n end\n else\n log.debug('home_humi_0901 dataObject =nil')\n end\n\n local resultData = json.encode(out) --输出传递到平台上\n log.debug('home_humi_0901 result=%s', json.encode(out))\n if next(out.data) ~= nil or next(out.result) ~= nil then\n ctx:notify(resultData)\n end\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n local packageParams = {subList = {}}\n local len = string.len(allPackageStr)\n local count = len / 2048\n local packageCount = math.ceil(count)\n packageParams.size = len\n packageParams.count = packageCount\n\n for i = 1, packageCount, 1 do\n local start_index = (i - 1) * 2048 + 1\n local end_index = start_index + 2047 -- 如果 越界,lua自动取实际的 结束索引\n local subPackage = string.sub(allPackageStr, start_index, end_index)\n --最后一包判断长度是否是 4的倍数 不足写0x1A\n if i == packageCount then\n repeat\n local subPackage_len = string.len(subPackage) / 4\n local min_subPackage_len = math.floor(subPackage_len)\n local diff_value = subPackage_len - min_subPackage_len\n if diff_value > 0 then\n subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍,不足写0x1A\n end\n until (diff_value == 0)\n end\n\n local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n local subcrc = string.sub(subAppendCrc16, -4, -1)\n local subCheck = tonumber(subcrc, 16)\n local subBin = {}\n subBin.len = string.len(subPackage) / 2\n subBin.buff = subPackage\n subBin.checkint = subCheck\n packageParams.subList[i] = subBin\n end\n return packageParams\nend\n\nsendMsgToTopic = function(msg, msgTo)\n local topic\n if msgTo == 'app' then\n --将指令发送到 appProxy的topic\n topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个,代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n --发给app的时候 软件版本比如17要改成1.1\n if msg.params.soft ~= nil then\n msg.params.soft = softNumbertoVersion(msg.params.soft)\n \t\tmsg.params.hard = softNumbertoVersion(msg.params.hard)\n end\n msg.params.bin = nil --节省资源\n elseif msgTo == 'device' then\n topic = msg.ID .. '_device_rece'\n end\n msg.packid = os.time()\n local msgStr = json.encode(msg)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n log.debug('home_humi_0901 [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', msg.ID, msg.code, binCache.updateTime, topic, msgStr, ok, ack)\nend\n\nackToDevice = function(rawDataObject)\n local topic = rawDataObject.ID .. '_device_rece'\n rawDataObject.from = 'server'\n rawDataObject.packid = os.time()\n rawDataObject.cmd = 64011\n rawDataObject.params = 'null'\n rawDataObject.result = 0\n local msgStr = json.encode(rawDataObject)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n log.debug('home_humi_0901 服务器 应答 设备 [%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', rawDataObject.ID, topic, msgStr, ok, ack)\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ngetTime = function()\n local timenum = os.time()\n local dateStr = os.date('%Y-%m-%d %H:%M:%S', timenum)\n --空气净化器最后还要带 周几下去\n -- 2018-4-28 16:10:12\n local datelist = Split(dateStr, ' ')\n local datebegin = Split(datelist[1], '-')\n --local dateend = Split(datelist[2], ':')\n local year = tonumber(datebegin[1])\n local month = tonumber(datebegin[2])\n local day = tonumber(datebegin[3])\n\n local week = getWeek_comm(year, month, day)\n local recordTime = string.format('%s %s', dateStr, week)\n return recordTime\nend\n\n--获取星期几\nfunction getWeek_comm(y, m, d)\n if m == 1 or m == 2 then\n m = m + 12\n y = y - 1\n end\n local m1, _ = math.modf(3 * (m + 1) / 5)\n local m2, _ = math.modf(y / 4)\n local m3, _ = math.modf(y / 100)\n local m4, _ = math.modf(y / 400)\n\n local iWeek = (d + 2 * m + m1 + y + m2 - m3 + m4) % 7\n local weekTab = {\n ['0'] = 1,\n ['1'] = 2,\n ['2'] = 3,\n ['3'] = 4,\n ['4'] = 5,\n ['5'] = 6,\n ['6'] = 0 --周日是 0\n }\n return weekTab[tostring(iWeek)]\nend\n\ngetRedisValue_obj = function(key, logObject)\n local r1, r1ok = redis.get(key) --获取上次记录时间\n log.debug('home_humi_0901 [%s][code=%s] [getRedis] r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n\n local params = {}\n if r1ok and r1 ~= nil and r1 ~= 'null' then\n local taskConfig = json.decode(r1)\n params = taskConfig\n else\n log.debug('home_humi_0901 [%s][code=%s] [getRedis] taskConfig读取失败 r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n end\n return params\nend\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n local redis_key = devId .. '_air_taskconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n --判断 任务 id是否存在 存在就更新\n local tsakId = tostring(taskConfig.task)\n log.debug('home_humi_0901 [%s] 排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s', cmd_obj.ID, tsakId, redis_taskConfigs, json.encode(redis_taskConfigs), type(redis_taskConfigs))\n local cmd_code = cmd_obj.code\n if cmd_code == 4 or cmd_code == 5 then --添加或修改 或取消任务\n --如果是自增任务的设备返回 先解析任务id\n if taskConfig.time_on then --只要on大于0 必然 任务id >16\n local hexTaskId = string.format('%02x', tonumber(tsakId))\n local real_tsakId = string.sub(hexTaskId, 1, 1)\n -- 避免单任务取到0的情况\n log.debug('home_humi_0901 自增任务 首次插入 real_tsakId=%s[%s]', real_tsakId, type(real_tsakId))\n tsakId = real_tsakId\n elseif taskConfig.time_on == nil then\n local hexTaskId = string.format('%02x', tonumber(tsakId))\n local real_tsakId = string.sub(hexTaskId, 2, 2)\n -- 避免单任务取到0的情况\n log.debug('home_humi_0901 自增任务 首次插入 real_tsakId=%s[%s]', real_tsakId, type(real_tsakId))\n tsakId = real_tsakId\n end\n if redis_taskConfigs[tsakId] ~= nil then\n redis_taskConfigs[tsakId] = taskConfig\n log.debug('home_humi_0901 非首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n else\n log.debug('home_humi_0901 首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n --table.insert(redis_taskConfigs, tsakId, taskConfig)\n redis_taskConfigs[tsakId] = taskConfig\n end\n\n log.debug('home_humi_0901 [%s][code=%s] redis_taskConfigs=%s', cmd_obj.ID, cmd_obj.code, json.encode(redis_taskConfigs))\n elseif cmd_code == 6 then --删除任务\n local real_tsakId = get_delete_id(redis_taskConfigs, tonumber(tsakId))\n redis_taskConfigs[real_tsakId] = nil\n log.debug('home_humi_0901 删除任务 tsakId=%s', tsakId)\n end\n setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\nget_delete_id = function(redis_tasks, delete_id)\n for key, value in pairs(redis_tasks) do\n if value.task == delete_id then\n return key\n end\n end\n log.debug('home_humi_0901 无法删除任务 delete_id=%s 没有匹配项目', delete_id)\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n local setValue = json.encode(setValueObject)\n local r1ok, r1 = redis.set(key, setValue)\n log.debug('home_humi_0901 [%s][code=%s] [setRedis] r1=%s,r1ok=%s,key=%s,setValue=%s', logObject.ID, logObject.code, r1, r1ok, key, setValue)\n return r1ok\nend\n\ntransferDoubleTaskId = function(appTaskId, isDouble, isOn, isOff)\n local task_k = tonumber(appTaskId)\n\n local taskid_new = 255 --默认是单任务的 task\n local kk\n if isDouble then --如果是 同时开关任务 关任务号就是开任务号+1\n kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n taskid_new = tonumber(kk, 16)\n elseif isOn then\n kk = string.format('%01x', task_k) .. '0'\n taskid_new = tonumber(kk, 16)\n elseif isOff then\n kk = '0' .. string.format('%01x', task_k)\n taskid_new = tonumber(kk, 16)\n end\n log.debug('home_humi_0901 任务id taskid_new=%s,kk=%s', taskid_new, kk)\n return taskid_new\nend\n\n--清空redis的 task缓存\nclearTask = function(deviceID)\n local clear_key = string.format('%s_air_taskconfig', deviceID)\n --清除redis使用\n --local ab = {}\n --local clearValue = json.encode(ab)\n local r1, r1ok = redis.set(clear_key, clearValue)\n --local r1, r1ok = redis.set('00000001_air_taskconfig', clearValue)\n --local r1, r1ok = redis.set('00000002_air_taskconfig', clearValue)\n --local r1, r1ok = redis.set('00000005_air_taskconfig', clearValue)\nend\n\nsoftNumbertoVersion = function(soft_num)\n local hex_str = string.format('%02x', soft_num)\n local s10 = string.sub(hex_str, 1, 1)\n local s1 = string.sub(hex_str, 2, 2)\n local number_str = string.format('%s.%s', tonumber(s10, 16), tonumber(s1, 16))\n return number_str\nend\n\ngetSoftUpdateMsg = function(signid, msgid)\n local k = string.format('%s,%s', signid, msgid)\n local msgs = {\n ['1,1'] = '不支持升级',\n ['1,2'] = '已是最新版本',\n ['1,3'] = '其他错误',\n ['2,1'] = '升级A区域',\n ['2,2'] = '升级B区域',\n ['3,1'] = '校验错误重发',\n ['3,2'] = '校验正确发下一帧',\n ['4,1'] = '升级出错',\n ['4,2'] = '升级成功'\n }\n return msgs[k]\nend INLINE 2020-09-07 16:08:00+08 2020-12-10 10:29:59.053+08 2020-09-07 \N
+65bb5b61-48eb-4c5a-aca4-ae21893336b5 IGM100 \N 粉尘监测,智慧应用 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n协议号: 1.0;\n协议名: IGM100\n]]--liankang\nstart=function ()\n log.debug("IGM100 start %s, ctx=%s",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("IGM100 encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("IGM100 decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE); -- 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x03, BE); -- 功能码 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE); \n buff=iota.appendHexByte(buff, 0x00, BE); -- 读取寄存器起始地址 00 00\n\tbuff=iota.appendHexByte(buff, 0x00, BE); \n\tbuff=iota.appendHexByte(buff, 0x1A, BE); -- 读取寄存器数量 26\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- CRC16 小端字节序\t\n\treturn buff\nend\n\n-- decode \n-- returns: 结果, 直线位移\n-- 正确回复 010311 0012 000B 003E 0001 0001 0000 0000 0000 0000 0000 0000 0014 0001 0002 0001 0000 0000 0000 0000 0000 0000 0000 0000 00F6 0000 0000 CC CC\n-- 0103110012000B003E0001000100000000000000000000000000140001000200010000000000000000000000000000000000F600000000CCCC\n\n-- 原始数据\nfunction protocol_decode(da)\n\t\n\t-- 存储结果\n\tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n \n -- 判断数据有效性\n if inValid(da) then\n local message = 'Invalid Msg,'\n out.result = {code=5001,msg=message}\n out.data = {}\n else\n log.debug("数据有效")\n \n local data = string.sub( da, 7, -5);\n log.debug("IGM100 data ==>"..data)\n log.debug("IGM100 dataLength ==>"..json.encode(string.len(data)))\n\n -- 获取告警后的所有数值\n local valueTab = {}\n for i = 0, 50, 2 do\n -- log.debug("IGM100 value value ==>"..json.encode(i)..",,,, "..json.encode(iota.hexToFloat(data, i, 'B')))\n table.insert(valueTab, iota.hexToUShort(data, i, 'B'))\n end\n log.debug("IGM100 valueTab"..json.encode(valueTab))\n log.debug("IGM100 valueTab==>"..json.encode(table.concat( valueTab, ", ")))\n\n local unitNameTab = {\n ["00F6"] = "ppm",\n ["005F"] = "ppb",\n ["200E"] = "%LEL",\n ["380E"] = "%VOL",\n ["00f6"] = "ppm",\n ["005f"] = "ppb",\n ["200e"] = "%LEL",\n ["380e"] = "%VOL",\n }\n -- 暂时未定义 气体类型\n local equipmentTypeTab = {\n "其他气体", "ASH3", "BR2", "C7H8",\n "CH20", "CH4", "CL2", "CLO2","CO", "CO2", "COCL",\n "ETO", "F2", "GEH4", "H2", "H2S", "HBR", "HCL",\n "HCN", "HF", "N2", "NH3", "NO", "NO2", "O2",\n "O3", "PH3","SIH4", "SO2", "TBM", "THT",\n }\n \n local equipmentTypeIndex = valueTab[15]\n log.debug("IGM100 equipmentTypeIndex"..json.encode(equipmentTypeIndex))\n local equipmentType = equipmentTypeTab[equipmentTypeIndex]\n log.debug("IGM100 equipmentType"..json.encode(equipmentType))\n log.debug("IGM100 unitName==>"..string.sub(data, 93, 96))\n local unitName = unitNameTab[string.sub(data, 93, 96)]\n local decimalNum = valueTab[14]\n local realTimeGasConcentration = valueTab[1] / math.pow(10, decimalNum)\n local lowAlarmValue = valueTab[2] / math.pow(10, decimalNum)\n\n out.data = {\n equipmentType = equipmentType,\n realTimeGasCon = realTimeGasConcentration,\n lowAlarmValue = lowAlarmValue,\n unitName = unitName,\n };\n end\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 57 or iota.hexToByte(data, 1,'B') ~= 0x03 then -- 长度不等于57 或者 读第二个字节,功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n\n INLINE 2020-01-08 10:40:50.52+08 2020-01-14 10:26:36.332+08 2020-01-08 \N
+d7015097-9fec-4702-89ef-7453ce11b7f8 bjdctk_4005 \N 1.0 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 f 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 Lua --字符串ascii->字符\nstart=function()\n --log.debug("bjdctk_4005: start module %s, ", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n\n out={\n data ={},\n result = {},\n\t\ttype=1\n }\n \n local moduleNostr= string.sub(hex,7,14)\n\n\tlocal moduleNo = device.uplink.props.module\n\n\t \n\tlocal dateTimeStr=string.sub(hex,21,32)\n\tlocal dateTime=unixtimestamp(dateTimeStr)\n\tlocal serialnum=string.sub(hex,15,18)\n local commandidentifiy=string.sub(hex,19,20)\n \n\n\tlocal length=iota.hexToShort(string.sub(hex,49,52), 0, 'B')/100\n\t\t\t\t\n\tout.data={\n\t\tlength=length,\n\t\ttime=dateTime\n\t}\n local resultData =json.encode(out) --输出传递到平台上\n log.debug("bjdctk_4005: result=%s",json.encode(out))\n ctx:notify(resultData)\n\tlocal cmd=''\n\t\n local timenow=os.date('%Y%m%d%H%M%S', os.time())\n\tlocal timenowstr = string.sub(timenow,3,-1)\n\tcmd='001080' .. moduleNostr .. serialnum .. commandidentifiy .. timenowstr\n\tcmd=iota.appendHexCrc(cmd, 'L' ,0) \n\tlog.debug("bjdctk_4005: cmd=%s",cmd)\n\tctx:asend(cmd)\n\tend\n\n\n\nunixtimestamp = function(dateTimeStr)\n \n local year = 2000+tonumber(string.sub(dateTimeStr,1,2))\n local month = tonumber(string.sub(dateTimeStr,3,4))\n local day = tonumber(string.sub(dateTimeStr,5,6))\n local hour = tonumber(string.sub(dateTimeStr,7,8))\n local minute = tonumber(string.sub(dateTimeStr,9,10))\n local second = tonumber(string.sub(dateTimeStr,11,12))\n --log.debug("shutaisuoying year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n --log.debug("shutaisuoying timenum=%s",timenum)\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --log.debug("shutaisuoying recordTime=%s",recordTime)\n return recordTime\nend\n INLINE 2020-07-21 15:30:44.255+08 2020-07-27 11:41:58.942+08 2020-07-21 \N
+3f78df73-bc71-44fb-8d74-74062d845305 shjy_temp_BK-WSQ01A \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=%s", "jnrs_temphumi_1.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\tlocal moduleNo=device.uplink.props.module or device.props.moduleId\n\tlog.debug("jnrs_temphumi_1 moduleNo=%s interface module=%s, property moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n buff=iota.appendHexByte(buff, moduleNo, endian)\n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 3, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("send %s, ctx=%s", "jnrs_temphumi_1.lua",buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n\t\tctx:done(result)\n\telse\n\t\tlog.debug("jnrs_temphumi_1 SSend error")\n end\nend\n\nunmarshall=function(hex)\n log.debug("recv %s, ctx=%s", "jnrs_temphumi_1.lua",hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==22) then\n \n -- 0103040292ff9b5a3d\n --"humi": 65.8,\n\t\t--"temp": -10.1\n local humi =iota.hexToShort(hex,3,'B')/10\n local temp =iota.hexToShort(hex,5,'B')/10\n \tlocal pressure=iota.hexToShort(hex,7,'B')/10\n \n out.data = { \n temperature=temp,\n humidity=humi,\n pressure=pressure\n };\n else\n local message = "Invalid Msg, len is not rigth"\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n log.debug("out=%s, ctx=%s", "jnrs_temphumi_1.lua",json.encode(out))\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2019-09-11 11:53:13.912+08 2019-09-11 15:12:08.329+08 2019-09-11 \N
+94a520ed-78d3-4f1c-90d5-aa94871b8642 anXin_wind \N 安信风速风向 主动上报 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start=function()\n log.debug("anXin_wind.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n local moduleStr=device.uplink.props.module\n log.debug("anXin_wind [%s] Data, ctx=%s",moduleStr,hex)\n local out={\n data ={},\n result = {}\n\t\n }\n \n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n\t \n local speed = iota.hexToUShort(hex,24,'B')/100.0\n local direction = iota.hexToUShort(hex,26,'B')/100.0\n local angle = iota.hexToShort(hex,28,'B')/100.0\n\t local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anXin_wind timeStr=%s",timeStr)\n dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anXin_wind dateTimeStr=%s",dateTimeStr)\n timenow = unixtimestamp(dateTimeStr)\n\t\t\t\t\n\t\t out={\n\t\t\t\t data={ \n\t\t\t\t windSpeed=speed,\n windDirection = direction,\n windAngle = angle\n\t\t\t\t },\n\t\t\t\t\ttime=timenow\n\t\t\t\t }\n \n \n \n \n \t\n local resultData =json.encode(out)\n log.debug("anXin_wind [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = errcode, msg = errormsg}\n ctx:done(json.encode(out))\n end \nend\n\nIsValid=function(data,deviceModule)\n if data == nil then\n errormsg = 'anXin_wind:Data is nil'\n errcode = 1001\n \tlog.debug("anXin_wind [%s] %s",deviceModule,errormsg)\n return false\n end\n\n local dataModule= iota.hexToShort(data,6,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('anXin_wind module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("anXin_wind [%s] %s",deviceModule,errormsg)\n return false\n end\n\n log.debug("anXin_wind [%s] 校验通过",deviceModule)\n return true\n \nend\n \nunixtimestamp = function(datestr)\n \n local year = tonumber(string.sub(datestr,1,4))\n local month = tonumber(string.sub(datestr,5,6))\n local day = tonumber(string.sub(datestr,7,8))\n local hour = tonumber(string.sub(datestr,9,10))\n local minute = tonumber(string.sub(datestr,11,12))\n local second = tonumber(string.sub(datestr,13,14))\n\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2019-12-24 09:46:02.378+08 2019-12-24 09:46:02.378+08 2019-12-24 \N
+ff2477e1-9a33-4ccd-99d4-e1d703b18f39 shjy_temp_BK-FDR-5 \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_temp_BK-FDR-5", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp_BK-YL01 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, 'L')\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x02, 'L')\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("shjy_temp_BK-FDR-5 SSend error!")\n end\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local humidity = iota.hexToUShort(hex,3,'B')/10\n\t\tlocal temperature=iota.hexToUShort(hex,5,'B')/100-20\n out.data = {\n\t\t\t--length=tonumber(string.format('%0.1f',rainfall))\n\t\t\thumidity=humidity,\n\t\t\ttemperature=tonumber(string.format('%0.1f',temperature))\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('shjy_temp_BK-FDR-5 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shjy_temp_BK-FDR-5 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2019-09-11 11:32:12.388+08 2019-09-12 09:21:58.472+08 2019-09-11 \N
+8465d25a-c85a-41a7-b383-7da1e9c0c55c httpMQTT \N 1.0 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f 8d2f03c7-32a2-42e4-befc-7dde5c965472 Lua \nstart = function()\n log.debug('httpMQTT device=%s', json.encode(device))\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n log.debug('httpMQTT [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n local bodydataStr = httpbody.Body\n --local id = httpbody.ID\n --log.debug('httpMQTT hex.id=%s type=%s', httpbody.id, type(httpbody.id))\n --bodydataStr=string.gsub(bodydataStr,',{}',"")\n log.debug('httpMQTT [%s] bodydataStr=%s', moduleNo, bodydataStr)\n local bodypkg = json.decode(bodydataStr)\n local bodydata=bodypkg.pkg\n local allJsonData = bodydata['实时数据']\n local RTime = bodydata['时间戳'] --时刻\n local dataType = bodydata['触发事件']\n local sn = bodydata.sn\n\n local allSensorData = {}\n\n if dataType == '实时数据主动上报' then\n for k_none, singleSensorValue in pairs(allJsonData) do --遍历每个模块\n if singleSensorValue['有效标识'] == 'true' then\n for k, v in pairs(singleSensorValue) do --遍历每个模块\n if k ~= '时间戳' and k ~= '有效标识' then\n local sensorChannel = tonumber(string.sub(k, -2, -1))\n\n -- local sensormodel=string.sub(k,1, 5)\n -- if sensormodel=='WD'\n if allSensorData[sensorChannel] ~= nil then\n allSensorData[sensorChannel] = allSensorData[sensorChannel] .. ',' .. v\n else\n allSensorData[sensorChannel] = v\n end\n end\n end\n end\n end\n\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do\n local deviceId = child.id\n local devceModuleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n local devceChannelNo = tonumber(child.uplink.props.channel)\n local sensorModel = child.props.model\n\n local data1 = {\n data = {},\n device = deviceId,\n type = 1\n }\n data1.time = unixtimestamp(RTime, moduleNo)\n local sensorData = allSensorData[devceChannelNo]\n if sensorData ~= nil then\n local datas = Split(sensorData, ',')\n if sensorModel == 'RN620' then --水准仪\n physicalvalue = datas[1]\n temperature = datas[2]\n data1.data.physicalvalue = tonumber(physicalvalue)\n data1.data.temperature = tonumber(temperature)\n elseif sensorModel == 'RN300' then --温湿度\n temperature = datas[1]\n humidity = datas[2]\n data1.data.temperature = tonumber(temperature)\n data1.data.humidity = tonumber(humidity)\n elseif sensorModel == 'RN100' then --风速风向\n windspeed = datas[1]\n winddirection = datas[2]\n data1.data.windspeed = tonumber(windspeed)\n data1.data.winddirection = tonumber(winddirection)\n else\n physicalvalue = datas[1]\n data1.data.physicalvalue = tonumber(physicalvalue)\n end\n\n log.debug('geot_3300:(振弦) Phy结果=%s', Phy)\n table.insert(out.data, data1)\n end\n end\n end\n\n \n\n log.debug('httpMQTT [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n end\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body = bodyString}\n ctx:asend(ack)\nend\n\ngetTimeNowStr = function()\n --2018-4-28 16:10:12\n local timeNowNum = os.time()\n local timeNowStr = os.date('%Y-%m-%d %H:%M:%S', timeNowNum)\n return timeNowStr\nend\n\nunixtimestamp = function(timenum, moduleNoStr)\n\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', tonumber(timenum)/1000)\n log.debug('httpMQTT [%s] recordTime=%s', moduleNoStr, recordTime)\n return recordTime\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n INLINE 2019-06-19 17:32:24.446+08 2019-08-07 10:24:26.842+08 2019-06-19 \N
+5923b1b8-42ae-4618-a4b7-7b994f29e69b fs_peopleCounter_985 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --start = function()\n \t--local bu='aa01031000000000010105000000000001030603'\n\t--local aa=CS8(0, bu)\n \t--log.debug('测试校验=%s', aa)\n \n-- local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n\n-- sendBuff = protocol_encode(moduleNo)\n\n-- ok, resp = ctx:ssend(sendBuff, 15000)\n-- if ok then\n-- result = protocol_decode(resp, moduleNo)\n-- else\n-- --print("SSend error!")\n-- end\n-- ctx:done(result)\n --end\n\nonData = function(hex)\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n local result = protocol_decode(hex, moduleNo)\n --判断是否快到0点 清空计数\n mayClear(moduleNo)\n log.debug('fs_peopleCounter_985 result=%s', result)\n ctx:notify(result)\nend\n\nfunction mayClear(moduleNo)\n local hourNow = tonumber(os.date('%H'))\n local minuteNow = tonumber(os.date('%M'))\n if hourNow == 23 and minuteNow > 50 then --23点50后清空数据\n local clearBuff = protocol_encode(moduleNo)\n ctx:asend(clearBuff)\n end\nend\n\nfunction protocol_encode(moduleNoStr)\n local BE = 'B'\n local buff = 'aa'\n buff = iota.appendHexByte(buff, moduleNoStr, BE) --\n buff = iota.appendHexByte(buff, 0x04, BE) --\n buff = iota.appendHexByte(buff, 0x01, BE)\n buff = iota.appendHexByte(buff, 0x01, BE)\n buff = buff .. CS8(0, buff)\n buff = iota.appendHexByte(buff, 0x55, BE)\n return buff\nend\n\n-- returns: 结果, 原始值, 计算后值\n--正确回复 aa010310000000000101050000000000010306035255\n--原始数据 --"inCount": 1150,\n-- "outCount": 1363\nfunction protocol_decode(hex, moduleNoCheck)\n local data = hex\n --存储结果\n local out = {\n type = 1,\n data = {},\n result = {}\n }\n log.debug(data)\n --判断数据有效性\n local ErrorCode = IsValid(hex, moduleNoCheck)\n if ErrorCode then\n local inBytesStr = string.sub(hex, 2 * 4 + 1, 2 * 4 + 16)\n local outBytesStr = string.sub(hex, 2 * 12 + 1, 2 * 12 + 16)\n log.debug('fs_peopleCounter_985 inBytesStr=%s', inBytesStr)\n local inCount = getCount(inBytesStr) -- :进人数\n local outCount = getCount(outBytesStr) -- :出人数\n\n out.data = {\n inCount = inCount,\n outCount = outCount,\n stayCount = inCount - outCount\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n return json.encode(out)\nend\n\nIsValid = function(data, deviceModule)\n log.debug('fs_peopleCounter_985 开始校验 data=%s', data)\n local dataLen = string.len(data) / 2\n if data == nil or dataLen ~= 22 then\n errormsg = string.format('数据长度无效=%s≠22', dataLen)\n errcode = 1002\n return false\n end\n if iota.hexToByte(data, 2, 'B') ~= 0x03 then\n errormsg = 'CMD is not right'\n errcode = 1003\n return false\n end\n local dataModule = iota.hexToByte(data, 1, 'B')\n if tonumber(deviceModule) ~= dataModule then\n errormsg = string.format('无效的模块号=%s≠%s', dataModule, deviceModule)\n errcode = 1004\n return false\n end\n return true\nend\n\n--校验和8\nCS8 = function(start, buff)\n local lcr = 0\n for i = start, string.len(buff) / 2 - 1 do\n lcr = lcr + tonumber(string.sub(buff, 1 + 2 * i, 2 * (i + 1)), 16)\n end\n local value = bit.band(lcr, 0x7f)\n return string.format('%02x',value)\nend\n\ngetCount = function(bytes_8)\n local bytes_len = string.len(bytes_8) / 2\n local count = 0\n for i = 0, bytes_len - 1, 1 do\n local num = tonumber(string.sub(bytes_8, -2 * i - 2, -2 * i - 1))\n count = count + num * math.pow(10, i)\n end\n return count\nend INLINE 2020-11-03 18:02:45.299+08 2020-11-05 14:11:49.98+08 2020-11-03 \N
+94967c5c-2d6e-43b6-b3c4-8f35a82641c9 shzr_temp_incidence \N 1.0 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f 8d2f03c7-32a2-42e4-befc-7dde5c965472 Lua \nstart = function()\n log.debug('shzr_temp_incidence device=%s', json.encode(device))\nend\n\nlocal dataCounts = 0\nlocal isCycleTimeUpdated = 0\n\nlocal sendCount_updateTime = 0\nonData = function(httpbody)\n local dataid = device.uplink.props.id\n log.debug('shzr_temp_incidence [%s] httpbody===>%s[%s],', dataid, json.encode(httpbody), dataCounts)\n --主动上传式\n --local hex = httpbody.Body\n local bodyStr = httpbody.Body\n if bodyStr ~= nil or bodyStr ~= '' then\n local obj = json.decode(bodyStr)\n --local hex = obj.pkg\n --log.debug('shzr_temp_incidence 1111111 [%s] hex=%s', dataid, hex)\n --调度重启,尝试获取记录结果\n \n local out = {\n type = 1,\n data = {},\n result = {}\n }\n local messageId_hex\n local ErrorCode = IsValid(hex, dataid)\n if ErrorCode then\n local hasCycleTimeUpdated = (isCycleTimeUpdated ~= tonumber(device.props.cycletime))\n if dataCounts == 0 or hasCycleTimeUpdated then\n local getdataCounts = getRedisValue('datacounts')\n if getdataCounts ~= nil then\n dataCounts = dataCounts\n end\n\n local getisCycleTimeUpdated = getRedisValue('iscycletimeupdated')\n if getisCycleTimeUpdated ~= nil then\n isCycleTimeUpdated = tonumber(getisCycleTimeUpdated) --上次的采集周期\n end\n end\n\n log.debug('shzr_temp_incidence [%s] dataCounts=%s,LastCycleTimeUpdated=%s,props.cycletime=%s,hasCycleTimeUpdated=%s', dataid, dataCounts, isCycleTimeUpdated, device.props.cycletime, hasCycleTimeUpdated)\n dataCounts = (dataCounts + 1) % 0x100 --计数\n local dataCounts_hex = string.format('%02x', dataCounts)\n redis.set(device.id .. 'datacounts', tostring(dataCounts)) --存储记录\n log.debug('shzr_temp_incidence [%s] Received=>%s[%s],', dataid, hex, dataCounts)\n\n local moduleNo = string.sub(hex, 21, 29)\n local datatimeHexStr = string.sub(hex, 1, 19)\n\n local year = string.format('%02x', tonumber(os.date('%y', os.time())))\n local month = string.format('%02x', tonumber(os.date('%m', os.time())))\n datatimeHexStr = year .. month .. datatimeHexStr\n local datetime = hexDateStrToDate(datatimeHexStr)\n log.debug('shzr_temp_incidence [%s] 时间datetime=%s', dataid, datetime)\n local anglex = string.sub(hex, 31, 36)\n\t\t\tlocal angley = string.sub(hex, 38, 42)\n\t\t\tlocal temperature = string.sub(hex, 43, 49)\n \n\n local data1 = {\n data = {\n anglex = anglex,\n angley = angley,\n \n temperature = temperature\n\t\t\t\t\t\t\t\t\n },\n device = deviceId,\n type = 1,\n time = datetime\n }\n table.insert(out.data, data1)\n\n --返回数据\n sendAck(dataid, messageId_hex, dataCounts_hex)\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n log.debug('shzr_temp_incidence [%s] resultData=%s', dataid, resultData)\n\n ctx:notify(resultData)\n end\nend\n\nasend_HttpResponse = function(ackID, bodyString)\n ack = {type = 'http', code = 200, body = bodyString}\n log.debug('shzr_temp_incidence [%s] 应答=%s', ackID, json.encode(ack))\n ctx:asend(ack)\nend\nsendAck = function(dataId, uplinkmessageid, uplinkDataCounter)\n log.debug('shzr_temp_incidence [%s] uplinkmessageid=%s,uplinkDataCounter=%s', dataId, uplinkmessageid, uplinkmessageid)\n\n --下发返回前 判断 当前设备 cycletime与之前的存储是否一致\n\n if uplinkmessageid ~= nil then\n if tonumber(isCycleTimeUpdated) == tonumber(device.props.cycletime) or sendCount_updateTime > 10 then\n local resp_hex = '800301' .. uplinkmessageid .. uplinkDataCounter\n asend_HttpResponse(dataId, resp_hex)\n else\n --首次收到数据下发采集周期 配置\n --d000000e1003010102\n local cycleTime = string.format('%08x', tonumber(device.props.cycletime))\n --log.debug('shzr_temp_incidence [%s] 下发 cycleTime=%s ,isCycleTimeUpdated=%s', dataId, cycleTime, isCycleTimeUpdated)\n local resp_hex = 'd0' .. cycleTime .. '0301' .. uplinkmessageid .. uplinkDataCounter\n log.debug('shzr_temp_incidence [%s] 下发 resp_hex=%s,cycleTime=%s ,isCycleTimeUpdated=%s,sendCount_updateTime=%s', dataId, resp_hex, cycleTime, isCycleTimeUpdated, sendCount_updateTime)\n asend_HttpResponse(dataId, resp_hex)\n sendCount_updateTime = sendCount_updateTime + 1\n end\n end\nend\n\ngetRedisValue = function(keyStr)\n log.debug('shzr_temp_incidence getRedisValue,keyStr=%s', keyStr)\n local keyValue\n local r1, r1ok = redis.get(device.id .. keyStr) --获取上次记录时间\n if r1ok ~= false then\n keyValue_redis = r1\n log.debug('shzr_temp_incidence r1=%s,r1ok=%s[%s],%s=%s', r1, r1ok, type(r1ok), keyStr, keyValue_redis)\n if keyValue_redis ~= nil then\n keyValue = tonumber(keyValue_redis)\n else\n log.debug('shzr_temp_incidence redis get dataCounts=nil')\n end\n else\n log.debug('shzr_temp_incidence r1=%s,r1ok=%s[%s],%s=%s', r1, r1ok, type(r1ok), keyStr, keyValue_redis)\n end\n return keyValue\nend\n\nIsValid = function(data, d_index)\n log.debug('shzr_temp_incidence 开始校验数据=%s', data)\n local datalen = string.len(data) / 2\n if data == nil or datalen <= 9 then\n errormsg = string.format('Data is nil or invalid length=%s', datalen)\n errcode = 1002\n log.debug('shzr_temp_incidence [%s] errormsg=%s', d_index, errormsg)\n return false\n end\n data = string.sub(data, 17, -1)\n --去除id\n local msgId = string.sub(data, 1, 2)\n local msgtype = string.sub(data, 5, 6)\n if msgId == '80' and msgtype == 'ff' then --debug信息\n debugMsg = HextoStr(string.sub(data, 7, -1))\n errormsg = string.format('debugmsg=%s', debugMsg)\n errcode = 1003\n log.debug('shzr_temp_incidence [%s] debugmsg=%s', d_index, errormsg)\n return false\n elseif msgId == '80' and msgtype == '01' then --设备ack应答\n log.debug('shzr_temp_incidence [%s] 设备应答设置成功=%s', d_index, errormsg)\n redis.set(device.id .. 'iscycletimeupdated', tostring(device.props.cycletime)) --存储记录\n \t --如果平台刚更新配置周期,还未下发指令。设备就返回更新应答, 日志记录这种异常,厂家说可能出现,可能?\n if dataCounts == 0 or sendCount_updateTime ~=0 then\n log.debug('shzr_temp_incidence [%s] 异常 设备更新周期应答 dataCounts=%s,sendCount_updateTime=%s,ackdata=%s', d_index,dataCounts,sendCount_updateTime,data)\n end\n end\n return true\nend\n\ndataTypesLen = {5, 5, 5, 5, 1, 1, 1, 0}\n\ngetBits = function(byteStr)\n local bits = {}\n local byteNum = tonumber(byteStr, 16)\n local bitsTable = {}\n\n for i = 8, 1, -1 do\n local ex = 2 ^ (i - 1)\n if byteNum >= ex then\n --print(string.format('i=%s,byteNum=%s',i,byteNum))\n bitsTable[i] = 1\n byteNum = byteNum % ex\n else\n bitsTable[i] = 0\n end\n end\n return bitsTable\nend\n\nhexDateStrToDate = function(dateStr)\n -- 12 04 02 0F 24 38 ==> 18\n local year_ = 2000 + tonumber(string.sub(dateStr, 1, 2), 16)\n local month_ = tonumber(string.sub(dateStr, 3, 4), 16)\n local day_ = tonumber(string.sub(dateStr, 5, 6), 16)\n local hour_ = tonumber(string.sub(dateStr, 7, 8), 16)\n local minute_ = tonumber(string.sub(dateStr, 9, 10), 16)\n local second_ = tonumber(string.sub(dateStr, 11, 12), 16)\n\n timenum = os.time({year = year_, month = month_, day = day_, hour = hour_, min = minute_, sec = second_})\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --log.debug('shzr_temp_incidence timenum=%s,recordTime=%s, year_=%s,month_=%s,day_=%s,hour_=%s,minute_=%s,second_=%s',timenum,recordTime,year_,month_,day_,hour_,minute_,second_)\n return recordTime\nend\n\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\ndebugErrorMsg = {\n '电量过低,设备即将无法使用无线通讯,此时设备红灯闪烁',\n 'AIT不合法',\n 'SIT不合法',\n '传感器端口1打开,但检测不到传感器',\n '传感器端口2打开,但检测不到传感器',\n '传感器端口3打开,但检测不到传感器',\n '传感器端口4打开,但检测不到传感器',\n '传感器1参数不合法',\n '传感器2参数不合法',\n '传感器3参数不合法',\n '传感器4参数不合法',\n 'MESSAGEID不合法/MESSAGEID与数据长度不对应',\n '设备温度过高,超过85度',\n '设备温度过低,低于-45度',\n '开发错误,已保存至flash',\n '设备未知原因重启',\n '设备未知原因重新上电',\n '端口1/2/3/4传感器频率超出扫频范围,可能造成数据不准确',\n '传感器端口1/2/3/4打开,但监测不到任何传感器',\n '错误原因较多,导致错误栈满',\n '传感器端口1 超过4000HZ',\n '传感器端口2 超过4000HZ',\n '传感器端口3 超过4000HZ',\n '传感器端口4 超过4000HZ',\n 'AIT过小,自动设置为最小值60',\n 'AIT过大,大于最大值2147483647',\n 'ait不为零,但没有端口是打开的',\n '时间同步超时',\n '传感器端口均未接传感器'\n} INLINE 2019-09-12 09:27:25.59+08 2019-09-12 09:31:13.396+08 2019-09-12 \N
+19ed6d2e-6e0f-40ef-9930-2d5b67d89d84 anXin_wind_9220 \N 安心风速风向ModBus协议 请求应答 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0xFF, endian) --1: 帧头\n buff=iota.appendHexByte(buff, 0x41, endian)\n buff=iota.appendHexByte(buff, 0x58, endian)\n buff=iota.appendHexByte(buff, 0x4a, endian)\n buff=iota.appendHexWord(buff, 4, endian) -- 2: 类型=1\n buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 3: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 4: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 5: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,4000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==34) then\n local speed = iota.hexToUShort(hex,9,'B')/100.0\n local direction = iota.hexToUShort(hex,11,'B')/100.0\n local angle = iota.hexToShort(hex,13,'B')/100.0\n out.data = {\n windSpeed=speed,\n windDirection = direction,\n windAngle = angle\n };\n \n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2017-09-04 14:19:30.193+08 2019-12-24 09:50:23.465+08 2017-09-02 \N
+73c2217f-b7c8-4bed-8cf2-21f591a19dd3 cdaj_zx \N 1.0 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e f 8d49238d-6e0e-421c-adaf-f7472ec0b50e Lua onData = function()\nend\n\nstart = function()\n log.debug('cdaj_zx loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n log.debug('cdaj_zx device=%s', json.encode(device))\n out = {\n type = 2,\n data = {},\n result = {}\n }\n local endian = 'B'\n local buff = ''\n local moduleNo\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = device.uplink.props.module\n --模块通道优先接口获取\n\n log.debug('cdaj_zx 设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n else\n moduleNo = device.props.moduleId\n\n log.debug('cdaj_zx 设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n end\n buff = buff .. 'F7601269'\n buff = iota.appendHexByte(buff, moduleNo, endian)\n --1:模块号\n buff = buff .. '0010000102030405060708090A0B0C0D0E0F'\n --1:指令:采集\n local wCRCin = 0x0000\n local wCPoly = 0x1021\n local wChar = 0\n local usDataLen = string.len(buff) / 2\n log.debug('cdaj_zx usDataLen = %s', usDataLen)\n local var = 0\n while usDataLen > 0 do\n var = var + 1\n wChar = string.sub(buff, var, var + 1)\n var = var + 1\n wChar = tonumber(wChar, 16)\n wChar = bit.lshift(wChar, 8) --左移\n wCRCin = bit.bxor(wCRCin, wChar)\n for i = 0, 7 do\n local value = bit.band(wCRCin, 0x8000)\n if value > 0 then\n wCRCin = bit.lshift(wCRCin, 1) --左移\n wCRCin = bit.bxor(wCRCin, wCPoly) --异或\n if wCRCin > 0xFFFF then\n wCRCin = wCRCin - 0x10000\n end\n else\n wCRCin = bit.lshift(wCRCin, 1) --左移\n if wCRCin > 0xFFFF then\n wCRCin = wCRCin - 0x10000\n end\n end\n end\n --log.debug("cdaj_zx END wCRCin = %X",wCRCin)\n usDataLen = usDataLen - 1\n end\n buff = buff .. string.format('%04X', wCRCin)\n log.debug('cdaj_zx END buff = %s', buff)\n --ctx:asend(buff)\n --ctx:sleep(10)\n\t--ctx:asend(buff)\n ok, resp = ctx:ssend(buff, 60000)\n\n if ok then\n local ErrorCode = IsValidOut(resp)\n if ErrorCode then\n log.debug('cdaj_zx 数据有效=%s', resp)\n allSubData = getAllDatas(resp)\n --发送指令\n local subdevices = device.dnlinks[1].devices\n\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do --插入16个通道\n \tlog.debug('cdaj_zx child=%s', json.encode(child))\n channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\tif allSubData[channelNo]~=nil and allSubData[channelNo]>500 then\n \tlog.debug('cdaj_zx 解析通道%s数据', channelNo)\n \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n \ttable.insert(out.data, result)\n \tend\n end\n end\n else\n log.debug('cdaj_zx 数据无效=%s', resp)\n out.result = {code = ercode, msg = erormsg}\n end\n else\n log.debug('cdaj_zx ok=false')\n out.result = {code = '1002', msg = 'ok=false'}\n end\n\n local resultData = json.encode(out)\n log.debug('cdaj_zx resultData=%s', resultData)\n ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n local DataList = {}\n local subDataArea = string.sub(hexStr, 15, -5)\n local dataCount = string.len(subDataArea) / 10\n for i = 1, dataCount do\n local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 10 + 1, (i - 1) * 10 + 10)\n local channelStr = string.sub(singleChannelDataHex, 2, 2)\n local subChannel = tonumber(channelStr, 16)+1\n local subData = string.sub(singleChannelDataHex, 3, -1)\n DataList[subChannel] = iota.hexToFloat(subData, 0, 'L')\n \tlog.debug('cdaj_zx getAllDatas DataList[%s]=%s',subChannel,DataList[subChannel])\n end\n return DataList\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n log.debug('cdaj_zx datatable=%s', json.encode(datatable))\n local subData = {\n type = 1,\n data = {},\n device = '',\n result = {}\n }\n local freq = datatable[subChannelId]\n local temp = datatable[subChannelId+8]\n if childDevice ~= nil then\n if childDevice.uplink.capabilities[1].formula.metaid == '9525b166-34e1-4182-95a9-644a8f98a2d8' then --振弦公式\n local k = tonumber(childDevice.uplink.capabilities[1].formula.props.K)\n\n local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n\t\t\tlocal kt = tonumber(childDevice.uplink.capabilities[1].formula.props.Kt)\n\t\t\tlocal t0 = tonumber(childDevice.uplink.capabilities[1].formula.props.To)\n log.debug('cdaj_zx module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s,kt=%s,temp=%s', moduleNoStr, subChannelId, childDevice.id, k, f0, freq,kt,temp)\n --log.debug('cdaj_zx module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil and freq ~= nil and temp ~= nil then\n Phy = k * (freq ^ 2 - f0 ^ 2)+ kt * (temp - t0) \n end\n end\n\t\tif childDevice.uplink.capabilities[1].formula.metaid == '55b9e150-f78d-4cbd-a353-f99c4df93cb6' then --振弦公式\n local A = tonumber(childDevice.uplink.capabilities[1].formula.props.A)\n\n local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n\t\t\tlocal B = tonumber(childDevice.uplink.capabilities[1].formula.props.B)\n\t\t\t\n --log.debug('cdaj_zx module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s,kt=%s,temp=%s', moduleNoStr, subChannelId, childDevice.id, k, f0, freq,kt,temp)\n --log.debug('cdaj_zx module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n if A ~= nil and f0 ~= nil and B ~= nil and freq ~= nil then\n Phy = A * (freq ^ 2 - f0 ^ 2)- B * (freq - f0) \n end\n end\n log.debug('cdaj_zx freq=%s,Phy=%s', freq, Phy)\n singleData = {\n data = {\n\t\t\t temperature=tonumber(string.format('%0.2f',temp)),\n frequency = tonumber(string.format('%0.2f',freq)),\n physicalvalue = tonumber(string.format('%0.4f',Phy))\n },\n device = childDevice.id,\n type = 1\n }\n end\n --end\n\n --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n if device.dnlinks ~= nil then\n for k, dnlink in pairs(device.dnlinks) do\n for v, subdevice in pairs(dnlink.devices) do\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n log.debug('cdaj_zx has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('cdaj_zx has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\nIsValidOut = function(checkdata)\n log.debug('cdaj_zx 开始校验数据=%s', checkdata)\n\n local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n if hexHeader ~= 0xF7 then\n ercode = 1001\n erormsg = 'HexCMD False'\n log.debug('cdaj_zx HexCMDFalse[%s]', hexHeader)\n return false\n end\n return true\n --crc\nend INLINE 2020-08-03 09:12:05.773+08 2020-11-14 17:23:33.728+08 2020-08-03 \N
+1ed92105-cedf-4667-b966-db32e28771c8 GZM_http \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n ok, resp = ctx:ssend('01020304', 5000)\nend\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body = bodyString}\n ctx:asend(ack)\nend\n\nonData = function(httpbody, index)\n local response_GpsData_bodyStr = '{"cmd":"GZM","data":{},"status":0}'\n asend_HttpResponse(response_GpsData_bodyStr)\n\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n --log.debug('fs_gzm_2019_http [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n\n --数据域 内的索引号\n local ErrorCode = true --IsValid(hex)\n if ErrorCode then\n sData = httpbody.Body\n --log.debug('fs_gzm_2019_http sData=%s', sData)\n --获取子字符串表\n local dataTable = json.decode(sData)\n\n --log.debug("fs_gzm_2019_http dataTable=%s",sData)\n\n --分析单类数据\n if dataTable ~= nil then\n for k, sensorValue in ipairs(dataTable.allNodeDatas) do\n --log.debug("fs_gzm_2019_http k=%s,sensorValue=%s",k,json.encode(sensorValue))\n if k >= 1 then\n local factorId = tonumber(sensorValue.factorid)\n local factorName = getFactorName(factorId)\n local moduleNo = tonumber(sensorValue.moduleId)\n local channelNo = tonumber(sensorValue.channel)\n --log.debug('fs_gzm_2019_http k=%s,factorId=%s,factorName=%s,moduleNo=%s,channelNo=%s', k, factorId, factorName, moduleNo, channelNo)\n --解析单条数据\n for kdata, vdata in ipairs(sensorValue.data) do\n --log.debug('fs_gzm_2019_http:遍历解析单条数据 键=' .. tostring(kdata) .. ' 值=' .. json.encode(vdata))\n\n if vdata.value ~= nil then\n local anglex = tonumber(vdata.value[1])\n local angley = tonumber(vdata.value[2])\n --log.debug('fs_gzm_2019_http factorid=%s,vdata.value[3]=%s', factorId, vdata.value[3])\n local force --轴力\n\n local length_cj --模板沉降\n local length_sp --水平位移\n\n if factorId == 0 then --模板沉降\n length_cj = tonumber(vdata.value[3])\n elseif factorId == 1 then --水平位移\n length_sp = tonumber(vdata.value[3])\n elseif factorId == 2 then --轴力\n force = tonumber(vdata.value[3])\n else\n --log.debug('fs_gzm_2019_http factorId=%s,type=%s', factorId, type(factorId))\n end\n\n local timeStamp = tonumber(vdata.time) / 1000 --时间戳\n \t\t\t\tlocal millisecondStr=string.format("%03d",timeStamp%1000)\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamp)\n \t\t\t\tlocal recordTimeMill = os.date('%Y-%m-%dT%H:%M:%S', timeStamp)..string.format(".%s+08:00",millisecondStr)\n --log.debug('fs_gzm_2019_http timeStamp=%s,recordTime=%s', timeStamp, recordTime)\n --获取通道设备deviceId\n local childDevice = getDeviceInfo(moduleNo, channelNo)\n\n local deviceId\n if childDevice ~= nil then\n --log.debug("fs_gzm_2019_http: %s节点 模块%s,通道%s原型childDevice=%s",factorName,moduleNo,channelNo,json.encode(childDevice))\n deviceId = childDevice.id\n local data1 = {\n data = {\n x = anglex,\n y = angley,\n force = force,\n settling = length_cj,\n displacement = length_sp,\n \t\t\t\t\trecordTime=recordTimeMill --ET处理用,iota时间精度秒,不够\n },\n device = deviceId,\n time = recordTime,\n type = 1\n }\n table.insert(out.data, data1)\n else\n --log.debug('fs_gzm_2019_http:%s节点 deviceId为nil:m=%s,c=%s', factorName, moduleNo, channelNo)\n end\n\n end\n end\n end\n end\n else\n log.debug('fs_gzm_2019_http 数据不完整')\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n --log.debug('fs_gzm_2019_http resultData=%s', json.encode(out))\n ctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("fs_gzm_2019_http 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug("fs_gzm_2019_http:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n --log.debug('fs_gzm_2019_http 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n else\n --log.debug('fs_gzm_2019_http 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.channelId\n end\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tonumber(channelStrCheck) == tonumber(channelNoId) then\n --log.debug('fs_gzm_2019_http: m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('fs_gzm_2019_http m=%s c=%s subdevices是nil', moduleNoId, channelNoId)\n return nil\n end\nend\n\nIsValid = function(alldata)\n log.debug('fs_gzm_2019_http 校验开始')\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n log.debug('fs_gzm_2019_http 校验失败 Data is nil')\n return false\n end\n\n if string.sub(alldata, 1, 8) ~= '7b22616c' and string.sub(alldata, -2, -1) ~= '7d' then\n errormsg = 'CMD is wrong'\n errcode = 1002\n log.debug('fs_gzm_2019_http 校验失败 CMD is wrong')\n return false\n end\n\n log.debug('fs_gzm_2019_http 校验通过')\n return true\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = string.sub(hex, 2 * i - 1, 2 * i)\n local ascii = string.char(tonumber(bi, 16))\n str = str .. ascii\n end\n return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ngetFactorName = function(num)\n local NO = tonumber(num + 1)\n local FactorNames = {'沉降', '水平', '轴力', '倾斜'}\n local FactorName = FactorNames[NO]\n return FactorName\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend INLINE 2019-08-08 16:08:01.978+08 2020-03-30 09:12:10.609+08 2019-08-08 \N
+42a8a720-4b36-48e4-bcee-4d0a0c439162 fdd \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start=function()\n log.debug("fsidd [%s] jiexi",device.uplink.props.id)\n end\n \nonData=function(data)\n --local jdata=json.encode(data)\n --log.debug("fsidd data=%s",json.encode(data))\n if data ~=nil then\n if data.type == "idau/file" then \n if data.ext==".d" then\n --log.debug("fsidd payload=%s", data.payload)\n parseData(data.payload)\n elseif data.ext==".m" then\n --log.debug("fsidd.m payload=%s", data.payload)\n \t\t parseDiag(data.payload)\n \telse \n \t\t--log.error("fsidd:type is not.d/.m %s", data.name)\n end\n else\n --log.error("fsidd:not a d file .d", data.ext)\n end\n else\n --log.error("fsidd:data is nil")\n end\nend\nfunction parseData(js)\n local out={\n data ={},\n result = {},\n type=2\n }\n \n local djs=Split(js,'\\r')\n --log.debug("fsidd jsoncount=%s",#(djs))\n for k,v in ipairs(djs) do\n if v~='' and v~=nil then\n local dj=json.decode(v)\n --log.debug("fsidd dj=%s",v)\n --log.debug("fsidd:sen=%s",dj.S)\n if dj~=nil and dj ~= '' and dj.R =="0" then\n \n local childDevice=getDeviceInfo(dj.S)\n\t\t\t\t--log.debug("fsidd ceshiyixia1")\n --log.debug("fsidd childDevice=%s",json.encode(childDevice))\n if childDevice~=nil and childDevice ~= {} then \n --log.debug("fsidd:ceshiyixia2")\n --log.debug("fsidd dj.PV1=%s",dj.PV[1])\n\n if childDevice.props.sensortype=="cx" then --测斜\n \t\t\tlocal xvalue = dj.RV[1]\n \t\t\tif xvalue == 0 then \n \t\t\t\txvalue = nil\n \t\t\tend\n local data1 ={\n data={\n anglex = xvalue,\n angley= dj.RV[2] or 0,\n temperature= dj.RV[3] or 0, \n _acq_number=dj.N or 1000\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data1)\n end\n if childDevice.props.sensortype=="lf" then --裂缝\n local data1 ={\n data={\n length = dj.RV[1] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data1)\n end\n if childDevice.props.sensortype=="wsd" then --温湿度\n local data2 ={\n data={\n temperature = dj.RV[1] or 0,\n humidity= dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data2)\n end\n\n if childDevice.props.sensortype=="cj" then --激光测距\n local data2 ={\n data={\n length = dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data2)\n end\n\n if childDevice.props.sensortype=="yc" then --压差\n local data3 ={\n data={\n pressure=dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data3)\n end\n if childDevice.props.sensortype=="zx" then --振弦\n --log.debug("fsidd ceshi_zx")\n local data4={\n data={\n physicalvalue = dj.PV[1] or 0,\n frequency=dj.RV[1],\n temperature=dj.RV[2],\n am=dj.RV[3]\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n --log.debug("fsidd outdata4=%s",json.encode(data4))\n table.insert(out.data,data4)\n end\n\n end\n else\n --log.debug("fsidd dj=nil")\n end\n else\n --log.debug("fsidd v is nil v=%s",json.decode(v))\n end\n\n end\n local resultData =json.encode(out)\n --log.debug("fsidd ".."LUA:resultData : data is =%s", json.encode(out))\n ctx:notify(resultData)\nend\nfunction parseDiag(js)\n local dj=json.decode(js)\n if dj~=nil then\n\tlocal out={\n data ={_data_type = "diag", R={}},\n result = {},\n type=2\n } \n local dataresult= json.encode(dj.R.P.R)\n --log.debug("parsing diag dataresult = %s",dataresult)\n\tout.data.R = dataresult\n --log.debug("parsing diag file = %s",json.encode(out))\n ctx:notify(json.encode(out))\n end\nend\n --string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n \n --获取采集仪下面的通道信息\nfunction getDeviceInfo(sensorId)\n local resensor=nil\n if device.dnlinks ~=nil then\n --log.debug("fsidd deviceInfo=%s",json.encode(device))\n for i,link in pairs(device.dnlinks) do\n --log.debug("fsidd:link=%s",json.encode(link))\n for j,node in pairs(link.devices) do\n --log.debug("fsidd:node=%s",json.encode(node))\n for k,sublink in pairs(node.dnlinks) do\n --log.debug("fsidd:sublink=%s",json.encode(sublink))\n for u,subdevice in pairs(sublink.devices) do\n --log.debug("fsidd:sensor=%s",json.encode(subdevice))\n if subdevice.uplink.props.sensorid == sensorId then\n -- log.debug("fsidd:final_sensor %s=%s",subdevice.uplink.props.sensorid,sensorId) \t\t\t\t\n resensor = subdevice\n \t\t\t\t--log.debug("fsidd:ceshiyixia1 %s",sensorId)\n \t\t\t\treturn resensor\n end \n end\n end\n end\n end \n end\n \t--log.debug("fsidd ceshiyixia2 %s",sensorId)\n\t--log.debug("fsidd f_sensor %s",json.encode(resensor))\n return resensor\nend INLINE 2019-09-03 16:51:15.174+08 2020-04-16 10:01:53.714+08 2019-09-03 \N
+da54c48b-cda7-4c3d-a765-aca040ac84cc fs_nb_iota \N 1 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start=function()\n log.debug("fs_nb_iota : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n if data ~=nil then\n log.debug("fs_nb_iota devices data =%s",data)\n ParseData(data) \n else\n log.error("fs_nb_iota recvd content is nil")\n end\nend\n\n\nfunction ParseData(data)\n local out={\n data ={},\n result = {},\n type=2\n }\n if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then --振动数据\n log.debug("fs_nb_iota 振动数据 data =%s",data)\n local package=iota.hexToShort(data,8,'L')\n local packagecount=iota.hexToShort(data,10,'L')\n local datpackage=string.sub(data,41,-9)\n local moduleid=iota.hexToShort(data,16,'L')\n\n local req1 =''\n local req2 =''\n local req =''\n req1=iota.appendHexByte(req1, 01 , 'L') -- 0-3 压缩协议 4-7 协议版本\n req1=iota.appendHexByte(req1, 0x02 , 'L')\n req1=iota.appendHexWord(req1, 0x0007 , 'L')\n req1=iota.appendHexWord(req1, 0x0000 , 'L')\n \n req2=iota.appendHexWord(req2, package , 'L')\n req2=iota.appendHexWord(req2, packagecount , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, moduleid , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n local checkdat=req1..req2\n local checksum=HeadCheckSum(checkdat)\n req=req1\n req=iota.appendHexWord(req, checksum , 'L')\n req=req..req2\n req=iota.appendHexWord(req, package , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=req..'00000000'\n req=iota.appendHexCrc(req, 'L' ,0) --校验\n local crc16=string.sub(req,-4,-1)\n req=string.sub(req,1,-13)\n req=req..crc16\n req=iota.appendHexByte(req, 0 , 'L') \n req=iota.appendHexByte(req, 0xfa , 'L') \n log.debug("fs_nb_iota datfileback %s", req)\n ctx:asend(req, 20000)\n\n if package==packagecount then\n local r1,ok = redis.get(device.id.."_mpzd")\n\t\t\tlocal dathex=r1..datpackage\n log.debug("fs_nb_iota 解析dat r1= %s", dathex)\n ParseFileDat(dathex)\n else\n if package==1 then\n local firstpackage=string.sub(datpackage,-80,-1)\n redis.set(device.id.."_mpzd", firstpackage)\n log.debug("fs_nb_iota 接收dat datpackage= %s", firstpackage)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据首包'\n }\n }\n ctx:notify(json.encode(re))\n else\n local r1,ok = redis.get(device.id.."_mpzd")\n log.debug("fs_nb_iota 接收dat r1= %s package=%s", r1,package)\n local data=r1..datpackage\n redis.set(device.id.."_mpzd", data)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n end\n else \n\t \n\t -- 非振动数据\n if string.sub(data,13,16)=='8a00' then\n local rtumodule=iota.hexToShort(data,3,'B')\n local power = iota.hexToByte(data,13,'B')\n log.debug("fs_nb_iota 剩余电量 %s", power)\n\t\t\tlocal setting = iota.hexToByte(data,14,'B')\n\t\t\tlog.debug("fs_nb_iota 通道配置版本号 %s", setting)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\tlog.debug("fs_nb_iota 版本固件 %s", ver)\n\t\t\tlocal backlog =iota.hexToShort(data,15,'B')\n\t\t\tlog.debug("fs_nb_iota 积压数据 %s", tostring(backlog))\n\t\t\tlocal wakeup =iota.hexToShort(data,22,'B')\n\t\t\tlog.debug("fs_nb_iota 节点苏醒次数 %s", tostring(wakeup))\t\t\t\t\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\t\t\tredis.set(device.id.."_backlog", tostring(backlog))\n\t\t\tredis.set(device.id.."_wakeup", tostring(wakeup))\t\t\t\n\t\t\tlocal version = string.format("%0.2f",ver)\n\t\t\tlocal v = Split(version,'.')\n\t\t\tlocal vlen = v[2].length\n\t\t \n\t\t\tif vlen == 1 then\n\t\t\t version = version.."0"\n\t\t\telseif vlen == 0 then\n\t\t\t version = version..".00"\n\t\t\tend\n\t\t\tlog.debug('fs_nb_iota version=%s', version)\t\t\t\n\t\t\tredis.set(device.id.."_version", version)\t\t\t\n\n local strdevice= toHexStr(json.encode(device))\n strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n local crc=string.sub(strdevice,-4,-1)\n log.debug("fs_nb_iota devices crc =%s",crc)\n \t\tlog.debug("fs_nb_iota dtuid time2")\n local r1,ok = redis.get(device.id.."_mpset")\n if ok and r1~=nil then\n\t\t\t log.debug("fs_nb_iota crc %s r1 %s setting%s" ,crc,r1,setting)\n \t\tlog.debug("fs_nb_iota dtuid time")\n \t\tlocal hour= os.date("%H")\n \t\tlog.debug("fs_nb_iota dtuid %s hour %s",device.uplink.props.id,tostring(hour))\n if crc == r1 and setting ~= 0xFF then\n log.debug("fs_nb_iota 配置无修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 0, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fs_nb_iota 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置无修改'\n }\n }\n ctx:notify(json.encode(re))\n else\n log.debug("fs_nb_iota 配置有修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fs_nb_iota 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n else\n log.debug("fs_nb_iota 配置初次配置")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fs_nb_iota 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n end\n \n if string.sub(data,13,16)=='8a02' then\n log.debug("fs_nb_iota deviceid:%s 设备休眠",device.uplink.props.id)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '设备休眠'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n local rtumodule=iota.hexToShort(data,3,'B')\n if string.sub(data,13,16)=='8601' then\n local time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\tlog.debug("fs_nb_iota r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver="V"..r1\n\t\t\t\tlog.debug("fs_nb_iota r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\tlog.debug("fs_nb_iota powerstr=%s",powerstr)\n \n\t\t\tr1,r1ok = redis.get(device.id.."_backlog") --获取上次未上传记录\n\t\t\tlocal backlog = 0\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tbacklog=r1\n\t\t\t\tlog.debug("fs_nb_iota r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\t\tend\n\t\t\t\n\t\t\tr1,r1ok = redis.get(device.id.."_wakeup") --获取上次记录苏醒次数\n\t\t\tlocal wakeup = 0\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\twakeup=r1\n\t\t\t\tlog.debug("fs_nb_iota r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\t\tend\t\t\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnode = {\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time \n\t\t\t}\n\t\t\tlocal tb = {\n\t\t\t\t\t\t\tR=tostring(backlog),\n\t\t\t\t\t\t\tWTS=tostring(wakeup)\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\ttable.insert(rst.data.R.node,tb)\t\t\t\t\n\t\t\ttable.insert(out.data,rst)\n local isover=iota.hexToByte(data,25,'B') --尾包\n local datalength=0\n local firststart=27\n for i=1,sensorCount,1 do\n firststart=firststart+datalength\t\t\t\t\n local sensorType=iota.hexToByte(data,firststart,'B')\n local module=iota.hexToShort(data,firststart+3,'B')\n local channel=iota.hexToByte(data,firststart+2,'B')\n datalength=iota.hexToByte(data,firststart+1,'B')+6\n if sensorType==0 then --振弦\n local childDevice=getZxDeviceInfo(module,channel)\n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\tlocal k = childDevice.uplink.props.k or 0\n\t\t\t\t\t\tlocal kt = childDevice.uplink.props.kt or 0\t\t\t\t\t\t\n\t\t\t\t\t\tlocal f0 = childDevice.uplink.props.f0 or 0\n\t\t\t\t\t\tlocal t0 = childDevice.uplink.props.t0 or 0\t\t\n\t\t\t\t\t\tlocal status = iota.hexToByte(data,firststart+11,'B')\n\t\t\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\t\t\tlocal freq = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\tlocal temp = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\tlog.debug("fs_nb_iota 振弦 Phy =%s, deviceid %s", Phy,childDevice.id)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\tam = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B'),\n\t\t\t\t\t\t\t\tphysicalvalue = Phy\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t}\n\t\t\t\t\t\tif rst.data.temperature == 200 or rst.data.temperature == -200 then\n \t\t\t\trst.data.temperature = nil \n \t\t\tend\n\t\t\t\t\t\tif status == 1 then\n\t\t\t\t\t\t\trst.result = {code=30010022,msg="频率线断路"}\n \t\t\t\trst.data ={}\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif status == 2 then\n\t\t\t\t\t\t\trst.result = {code=30010023,msg="频率线短路"}\n \t\t\t\trst.data ={}\n\t\t\t\t\t\tend\t\t\t\t\t\t\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tlog.debug("fs_nb_iota 振弦 %s", json.encode(out))\n\t\t\t\t\tend\n end\n if sensorType==1 then --485\n local childDevice=getDeviceInfo(module,channel)\n \t\t\tlocal protocalCode=iota.hexToShort(data,firststart+6,'B')\n\t\t\t\t\tlocal hour = os.date("%H")\n\t\t\t\t\tlocal min = os.date("%M")\n\t\t\t\t\tlocal acqnum = hour*2+1\n\t\t\t\t\tif tonumber(min) >= 30 then\n\t\t\t\t\t\tacqnum = acqnum+1\n\t\t\t\t\tend\n\t\t\t\t\tlog.debug("fs_nb_iota acqnum %s", acqnum)\n\t\t\t\t\tif childDevice~=nil then\t\n\t\t\t\t\t\tif protocalCode==1503 or protocalCode==1502 then --测斜\n\t\t\t\t\t\tlog.debug("fs_nb_iota 测斜 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex = iota.hexToFloat(data,firststart+12,'B',2),\n\t\t\t\t\t\t\t\t\tangley = iota.hexToFloat(data,firststart+16,'B',2),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B',2),\n\t\t\t\t\t\t\t\t\t_acq_number=acqnum\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_nb_iota 测斜 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n \n \t\t\t if protocalCode==9101 then --拉线位移\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_nb_iota 位移 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_nb_iota 位移 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==9102 then --裂缝\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_nb_iota 裂缝 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_nb_iota 裂缝 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==9218 then --风速\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_nb_iota 风速 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tspeed = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_nb_iota 风速 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n\t\t\t\t\tif protocalCode==9219 then --风向\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_nb_iota 风向 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tdirection = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_nb_iota 风向 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==1102 then --温湿度\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\thumidity = iota.hexToFloat(data,firststart+16,'B') \n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n end\n \n if protocalCode==9002 then --压差\n\t\t\t\t\t\tlog.debug("fs_nb_iota yc ")\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n end\n\t\t\t\t\tif protocalCode==9030 then --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t\tlog.debug("fs_nb_iota 静力水准仪 %s, deviceid: %s", module,childDevice.id)\n\t\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n \t\t\t\t\t_acq_number=acqnum\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509 then --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992 then --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_nb_iota 水位 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\t--temperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\tpressure=iota.hexToFloat(data,firststart+12,'B')--兼容老设备\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_nb_iota 水位 %s", json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\t\t\n end\n\t\t\t\tlog.debug("fs_nb_iota dataresult %s", json.encode(out))\n end \n log.debug("fs_nb_iota out %s", json.encode(out))\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0601, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0000, 'B') --数据区长度\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fs_nb_iota: databack: %s", req)\n ctx:asend(req, 20000)\n ctx:notify(json.encode(out)) \n end\n end\nend\n\nfunction Deploy()\n local total=totalSensors()\n log.debug("fs_nb_iota : totalSensors =%s",total)\n local over=0\n local onepag=0\n local totallength=3\n local buff=''\n \n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n over=over+1\n onepag=onepag+1\n\t\t\tlog.debug("fs_nb_iota subdevice =%s",json.encode(subdevice))\n if subdevice.props.sensortype=='zx' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x00, 'B') --传感器类型\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n\n local settingvib = tonumber(colgain) + tonumber(incentive) * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n log.debug("fs_nb_iota : settingvib =%s",settingvib)\n buff=iota.appendHexByte(buff, settingvib, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexByte(buff, settingvib, 'B') --振弦采集参数\n buff=iota.appendHexWord(buff, subdevice.uplink.props.frequency, 'B') --振弦频率初值\n buff=iota.appendHexByte(buff, 0x00, 'B') --上传频谱ID\n buff=iota.appendHexByte(buff, 0x01, 'B') --采集选项\n end \n if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x01, 'B') --传感器类型\n\t\t\t\tlog.debug("fs_nb_iota : begin setting")\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tlog.debug("fs_nb_iota baudrate =%s databits %s parity %s stopbits %s sensor %s",baudrate,databits,parity,stopbits,json.encode(subdevice))\n\t\t\t\tlocal setting\n\t\t\t\tif baudrate == nil then\n\t\t\t\t\tsetting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n\t\t\t\telse\n setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n\t\t\t\tend\n log.debug("fs_nb_iota setting =%s",setting)\n buff=iota.appendHexByte(buff, setting, 'B') --选项1 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B') --协议号\n buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B') --模块号\n buff=iota.appendHexByte(buff, 0x01, 'B') --子通道号\n end\n if subdevice.props.sensortype =='zd' then \n totallength=totallength+31 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x04, 'B') --传感器类型\n buff=iota.appendHexByte(buff, 0x00, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x12, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B') --定时采样间隔\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B') --定时采样时长\n buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B') --加速度触发采样时长\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B') --采样频率\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B') --滤波频率\n\t\t\t\tlocal shex = FloatToHex(tonumber(subdevice.uplink.props.samplefreq))\n\t\t\t\tbuff=buff..shex\n\t\t\t\tlocal fhex = FloatToHex(tonumber(subdevice.uplink.props.filterfreq))\n\t\t\t\tbuff=buff..fhex\n --buff=iota.appendHexWord(buff, 0x42c8, 'B')\n --buff=iota.appendHexWord(buff, 0x0000, 'B')\n --buff=iota.appendHexWord(buff, 0x4248, 'B')\n --buff=iota.appendHexWord(buff, 0x0000, 'B')\n local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n buff=iota.appendHexByte(buff, trigger1, 'B') --触发加速度\n buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B') --加速度范围\n buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B') --滞后点数\n\n end\n if over==8 or onepag==total then \n local buffhead=''\n buffhead=iota.appendHexByte(buffhead, 0xfe, 'B') --帧头\n buffhead=iota.appendHexWord(buffhead, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B') --模块号\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --命令源\n buffhead=iota.appendHexWord(buffhead, 0x0306, 'B') --指令\n buffhead=iota.appendHexWord(buffhead, 0x0000, 'B') --消息ID\n buffhead=iota.appendHexWord(buffhead, totallength, 'B') --数据区长度\n if onepag==total then\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --尾包\n else\n buffhead=iota.appendHexByte(buffhead, 0x00, 'B') --尾包\n end\n buffhead=iota.appendHexByte(buffhead, total, 'B') --采集指令总通道指令个数\n buffhead=iota.appendHexByte(buffhead, over, 'B') --该分包通道指令个数\n buff=buffhead..buff\n buff=iota.appendHexCrc(buff, endian ,0) --校验\n buff=iota.appendHexByte(buff, 0xef, 'B') --帧尾\n\t\t\t\tlog.debug("fs_nb_iota ssend request =%s",ack)\n local ok, ack = ctx:ssend(buff, 20000)\n log.debug("fs_nb_iota deploy back =%s",ack)\n buff=''\n if over==8 then\n over=0\n end\n totallength=3\n if onepag==total then\n log.debug("fs_nb_iota 配置下发完成")\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置下发完成'\n }\n }\n ctx:notify(json.encode(re))\n end\n end \n end\n end \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \tlog.debug("fs_nb_iota subdevice=%s",subdevice) \n return subdevice\n end \n end\n end\n log.debug("fs_nb_iota has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("fs_nb_iota has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n log.debug("fs_nb_iota has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("fs_nb_iota has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n log.debug("fs_nb_iota dat content =%s", dathex)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n log.debug("fs_nb_iota deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n local floatcount = (string.len(dathex)/2-40)/4\n log.debug("fs_nb_iota begin parse")\n local vols = {}\n\t\tlocal mean = 0\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n log.debug("fs_nb_iota finish parse")\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n sampleFreq=samplefreq,\n filterFreq=filterfreq,\n gainAmplifier=gainamplifier,\n triggerType=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n }\n table.insert(out.data,rst)\n \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\tlog.debug("fs_nb_iota r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver="V"..r1\n\t\t\tlog.debug("fs_nb_iota r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_backlog") --获取上次未上传记录\n\t\tlocal backlog\n\t\tif r1ok and r1~=nil then\n\t\t\tbacklog=r1\n\t\t\tlog.debug("fs_nb_iota r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_wakeup") --获取上次记录苏醒次数\n\t\tlocal wakeup\n\t\tif r1ok and r1~=nil then\n\t\t\twakeup=r1\n\t\t\tlog.debug("fs_nb_iota r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\tend\t\t\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("fs_nb_iota powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tnode = {\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time \n\t\t}\n\t\tlocal tb = {\n\t\t\t\t\t\tR=backlog,\n\t\t\t\t\t\tWTS=wakeup\n\t\t\t\t}\t\n\t\ttable.insert(rstd.data.R.node,tb)\t\t\t\n\t\ttable.insert(out.data,rstd)\n\t\tlog.debug("fs_nb_iota cloudvibrate=%s",json.encode(out))\n ctx:notify(json.encode(out))\n else\n log.debug("fs_nb_iota not found device module=%s channel=%s",deviceId,channel)\n end\nend\n\nfunction totalSensors()\n local sensorcnt=0\n for i,dnlink in pairs(device.dnlinks) do \n sensorcnt = #(dnlink.devices) + sensorcnt \n end\n return sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend \n\nfunction HeadCheckSum(data)\n local sum=0\n local len = string.len(data)\n log.debug("fs_nb_iota len %s", len)\n for i =1,len,4 do \n local te=tonumber(string.sub(data,i,i+3) ,16)\n log.debug("fs_nb_iota te %s", te)\n sum = sum+ tonumber(te)\n end\n log.debug("fs_nb_iota sum %s", sum)\n return 0xffff-sum\nend\n\n\nfunction FloatToHex( floatNum )\n\tlocal S = 0\n\tlocal E = 0\n\tlocal M = 0\n\tif floatNum == 0 then\n return "00000000"\n end\n\tlocal num1,num2 = math.modf(floatNum/1)\n\tlocal InterPart = num1\n \n\tif floatNum > 0 then\n\t\tS = 0 * 2^31\n\telse\n\t\tS = 1 * 2^31\n\tend\n\tlocal intercount = 0\n\trepeat\n\t\tnum1 = math.modf(num1/2)\n\t\tintercount = intercount + 1\n\tuntil (num1 == 0)\n \n\tE = intercount - 1\n\tlocal Elen = 23 - E\n\tInterPart = InterPart % (2^E)\n\tInterPart = InterPart * (2^Elen)\n \n\tE = E + 127\n\tE = E * 2^23\n \n\tfor i=1,Elen do\n\t\tnum2 = num2 * 2\n\t\tnum1,num2 = math.modf(num2/1)\n\t\tM = M + num1 * 2^(Elen - i)\n\tend\n \n\tM = InterPart + M\n \n\t--E值为整数部分转成二进制数后左移位数:22.8125 转成二进制10110.1101,左移4位 1.01101101\n --E=4 ,再加上127 就为所需E值\n\t--010000011 01101101 000000000000000\n \n\tlocal Result = S + E + M\n \n\tResult = string.format("%08X",Result)\n\treturn Result\nend\n INLINE 2020-08-03 11:52:03.095+08 2020-08-03 11:52:03.095+08 2020-08-03 \N
+665fbc53-4bab-4fc7-9bdd-aaa63fc834f7 cdaj_wy \N 1.0 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e f 8d49238d-6e0e-421c-adaf-f7472ec0b50e Lua start= function()\nend\n\nonData = function(resp)\n\n log.debug('cdaj_wy device=%s', json.encode(device))\n out = {\n type = 2,\n data = {},\n result = {}\n }\n \n\n \n\t\tlocal ErrorCode = IsValid(resp)\n\t\tif ErrorCode then\n\t\t\tlocal sData= HextoStr(resp)\n\t\t\tlog.debug('cdaj_wy sData是 %s', sData)\n\t\t\tlocal nodenum=device.props.nodenum \n\t\t\tlog.debug('cdaj_wy nodenum是 %s', nodenum)\n\t\t\tlocal allResponse1 = split(sData, nodenum)\n\t\t\tlog.debug('cdaj_wy allResponse1是 %s', json.encode(allResponse1))\n\t\t\tlocal allResponse2 = split(allResponse1[2], '*')\n\t\t\tlocal allResponse = allResponse2[1]\n\t\t\tlog.debug("cdaj_wy allResponse=%s",json.encode(allResponse))\n\t\t\tlocal allSubData = split(allResponse, ',')\n\t\t\tlog.debug('cdaj_wy allSubData=%s', json.encode(allSubData))\n\n\t\n\t\t\tlocal dataCount = table.getn(allSubData) / 10\n\t\t\tlog.debug('cdaj_wy dataCount=%s', dataCount)\n\t\t\n\t\t\tfor i = 1, dataCount do\n\t\t\t\t\n\t\t\t\tlocal channelmoduleNo=tonumber(allSubData[i*10-9])\n\t\t\t\tlocal voltage=tonumber(allSubData[i*10-8])\n\t\t\t\tlocal temperature=tonumber(allSubData[i*10-7])\n\t\t\t\tlocal xAcceleration=tonumber(allSubData[i*10-6])\n\t\t\t\tlocal yAcceleration=tonumber(allSubData[i*10-5])\n\t\t\t\tlocal zAcceleration=tonumber(allSubData[i*10-4])\n\t\t\t\tlocal xCoordinate=tonumber(allSubData[i*10-3])\n\t\t\t\tlocal yCoordinate=tonumber(allSubData[i*10-2])\n\t\t\t\tlocal zCoordinate=tonumber(allSubData[i*10-1])\n\t\t\t\tlocal rotateAngle=tonumber(allSubData[i*10])\n\t\t\t\t\n\t\t\t\tlocal childDevice = getDeviceInfos(channelmoduleNo,1)\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif\tchildDevice~=nil then\n\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t \n\t\t\t\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\ttemperature=temperature,\n zAcceleration = zAcceleration,\n yAcceleration = yAcceleration,\n xAcceleration = xAcceleration,\n\t\t\t\t\t\t voltage = voltage,\n\t\t\t\t\t\t\trotateAngle = rotateAngle,\n\t\t\t\t\t\t\tyCoordinate = yCoordinate,\n\t\t\t\t\t\t\tzCoordinate = zCoordinate,\n\t\t\t\t\t\t\txCoordinate = xCoordinate\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tend\n\t\t\t\t\n\t\t\tend\n\t\telse\n\t\t\tlog.debug('cdaj_wy 数据无效=%s', resp)\n\t\t\tout.result = {code = ercode, msg = erormsg}\n\t\tend\n \n\n local resultData = json.encode(out)\n log.debug('cdaj_wy resultData=%s', resultData)\n ctx:notify(resultData)\nend\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(moduleStrCheck) == tonumber(moduleNoId) then\n return child\n\t\t\tend\n \t\n\t\tend\n else\n log.debug("cdaj_wy: subdevices是nil")\n return nil\n end\nend\nIsValid = function(alldata) \n log.debug('cdaj_wy 校验开始')\n if string.len(alldata) < 10 then\n errormsg = string.format('返回数据[%s],校验长度<10',alldata)\n errcode = 1002\n return false\n end\n\n log.debug('cdaj_wy 校验通过')\n return true\nend\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%01X', bi)\n end\n return hex\nend\nsplit=function (input, delimiter)\n input = tostring(input)\n delimiter = tostring(delimiter)\n if (delimiter=='') then return false end\n local pos,arr = 0, {}\n for st,sp in function() return string.find(input, delimiter, pos, true) end do\n table.insert(arr, string.sub(input, pos, st - 1))\n pos = sp + 1\n end\n table.insert(arr, string.sub(input, pos))\n return arr\nend\n--string split函数\nSplitt = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n INLINE 2020-07-31 11:06:44.072+08 2020-11-03 11:41:38.255+08 2020-07-31 \N
+bf5e7a15-517b-48a1-bf79-b5ffd7bc9e6c testhttp \N v2 a971c084-cc83-4e41-80f6-c8de9df9b9d6 a971c084-cc83-4e41-80f6-c8de9df9b9d6 f a971c084-cc83-4e41-80f6-c8de9df9b9d6 Lua function start(){\n } INLINE 2020-12-31 16:16:21.701+08 2020-12-31 16:16:21.701+08 2020-12-31 \N
+66a372b9-f1df-4802-9cf7-e522c85dbbf6 JFCUD-5M \N 采集仪 1.0 123d97a2-af89-4fcd-87be-bf4e587c1495 123d97a2-af89-4fcd-87be-bf4e587c1495 f 123d97a2-af89-4fcd-87be-bf4e587c1495 Lua --丹东\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "JFCUD5M_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("JFCUD5M 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("JFCUD5M 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\tbuff=buff.."000000000000000000000000" --下发码流 12个00\n\t\n\tbuff=buff.."030D02" --下发码流 03 0D 02(这里的02是下发所有点的)\n buff=iota.appendHexByte(buff, tonumber(moduleNo), 'endian') -- 2: 模块号\n\t\tlog.debug("JFCUD5M 下发码流111 buff=%s",buff)\n\n\n ok,resp=ctx:ssend(buff,30000) --下发的码流\n \n\tif ok then --下发是否成功\n result = unmarshall(resp)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n\t\t\n end \n -- ctx:asend("hello")\n ctx:done(result) --协议完成打ctx:done ()\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n \tlocal out = {\n type = 2,\n data = {},\n result = {}\n }\n\tlocal index_485_1 =3 --第一个数据的开头位置\n\tlocal index_485_2 =8 --第一个数据的结尾位置\n\tlog.debug('JFCUD5M [%s] 000000hex=%s', hex,moduleStr)\n\t\n\tlocal channelDatas = {} --放数据的\n\tlocal channelDatasssss = {}\n local ErrorCode = IsValid(hex,moduleStr) --判断是否符合厂家协议\n if ErrorCode then \n\t\t\n\t\tlocal numsj=iota.hexToShort(hex,2,'B');\n\t\tlog.debug('JFCUD5M [%s] 11111111111numsj=%s', numsj)\n\t\tlocal numofzx=string.sub(hex, 5, 8)\n\t\tlog.debug('JFCUD5M [%s] 1111numofzx=%s', numofzx)\n\t\t\n\t\tfor i = 1, 32, 1 do\n\t\t--分割字符串 00 40 96\n\t\t\t\tchannelDatas[i]=string.sub(hex, index_485_1+(i-1) * 6, index_485_2+(i-1) * 6)--这里是取了3个字节的字符串\n\t\t\t\tlog.debug('JFCUD5M [%s] 7878787878channelDatas[i]=%s', channelDatas[i])\n\t\t\n\t\t\t\tlocal kt=string.sub(channelDatas[i],1,2)\n\t\t\t\tlog.debug('JFCUD5M [%s] 90909090kt=%s', kt)\n\t\t\t\t\n\t\t\t\t\n\t\t if kt=='40' then --频率\n\t\t\t\tchannelDatasssss[i]=iota.hexToUShort(channelDatas[i],1, 'B')/10\t\n\t\t\t\tlog.debug('JFCUD5M [%s] 232323232323channelDatasssss[i]=%s', channelDatasssss[i])\n\t\t\t elseif kt=='80' then --正的温度\n\t\t\t channelDatasssss[i]=iota.hexToUShort(channelDatas[i],1, 'B')/10\n\t\t\t elseif kt=='81' then--负的温度\n\t\t\t\tchannelDatasssss[i]=iota.hexToUShort(channelDatas[i],1, 'B')/10\n\t\t\t\telseif kt=='7f' then --没有数据\n\t\t\t\tchannelDatasssss[i]=iota.hexToUShort(channelDatas[i],1, 'B')/10\n\t\t\t\t\n\t\t\t end\n\t\t\t\t\n\t\t\n end\n\t\tlog.debug('JFCUD5M [%s] 放数据的地方numsj=%s', json.encode(channelDatasssss))\n\t\t\n\t\t local moduleNo=device.uplink.props.module \n\t\t\n\t\t--遍历表,从表中取数据\n\t\tfor k, v in pairs(channelDatasssss) do\n\t\tlog.debug('JFCUD5M 子设备的东西模块号=%s,通道号=%s', moduleNoStr, k)\n\t\tlog.debug('JFCUD5M 子设备的通道号和数据=%s,通道号=%s',v,k)\n\t\t\n\t\tlocal childDevice = getDeviceInfo(moduleNo, k)\n\t\tlog.debug('JFCUD5M 取那些kba=%s',json.encode(childDevice))\n\t\t\n\t\t \n\t\tlog.debug('JFCUD5M 子设备的数据3333333=%s,通道号=%s',frequency)\n\t\tlocal deviceId\n\t\tif childDevice ~= nil then\n\t\t\n\t\tlocal kB = childDevice.uplink.capabilities[1].formula.props.B\n\t\tlocal kFo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\tlocal kA = childDevice.uplink.capabilities[1].formula.props.A \n\t\t\n\t\t\t--PΔ=A(F2-F02)+B(F-F0) 公式\n\t\t frequency= channelDatasssss[k] --频率值\n\t\t local phy=kA*(frequency ^ 2 - kFo ^ 2) +kB*(frequency - kFo)\n\t\tdeviceId = childDevice.id\n log.debug('JFCUD5M:子设备原形childDevice=%s', json.encode(childDevice))\n\t\tlocal data1 = {\n data = {\n frequency = channelDatasssss[k],\n\t physicalvalue= phy\n\t\t\t\t\t\t\n },\n device = deviceId,\n type = 1\n }\n\t\t\t\t\t\n\t\t\t\t\ttable.insert(out.data, data1)\n\t\telse\n\t\t\t log.debug('JFCUD5M 子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\t\t\n\t\t\t\t\t\n\t\tend\n\t\t\n\t\t--\n\t\t\n\t\t\n\t\tend\n\t\t\n\n \n \n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n\tlog.debug('JFCUD5M 最后数据的返回=%s',json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('JFCUD5M开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,0,'B') ~= 0x60 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n \n log.debug('JFCUD5M 数据校验通过')\n return true\n\nend\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n log.debug('JFCUD5M 这里是获取采集仪下面的设备信息=%s',json.encode(device.dnlinks[1].devices))\n\t\tlog.debug('JFCUD5M 进入采集仪get方法模块号=%s',moduleNoId)\n\t\tlog.debug('JFCUD5M 进入采集仪get方法通道号=%s',channelNoId)\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug('JFCUD5M:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tlog.debug('JFCUD5M 进入采集仪1111111=%s',moduleStrCheck)\n channelStrCheck = child.uplink.props.channel\n\t\t\t\tlog.debug('JFCUD5M 进入采集仪2222222=%s',channelStrCheck)\n -- log.debug('JFCUD5M 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n else\n moduleStrCheck = child.props.moduleId\n\t\t\t\tlog.debug('JFCUD5M 进入采集仪333333=%s',moduleStrCheck)\n channelStrCheck = child.props.channelId\n\t\t\t\tlog.debug('JFCUD5M 进入采集仪444444=%s',channelStrCheck)\n --log.debug('JFCUD5M 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n end\n\t\t\t\t\tlog.debug('JFCUD5M 这里是从上面下来的通道=%s',channelNoId)\t\n\t\t\t\t\tlog.debug('JFCUD5M 进入采集仪这里是采集仪下面设备的通道=%s',channelStrCheck)\n if tostring(channelStrCheck) == tostring(channelNoId) then\n log.debug('JFCUD5M 进入采集仪匹配通道号=%s',channelStrCheck,channelNoId,json.encode(child))\n return child\n end\n \n end\n else\n log.debug('JFCUD5M: subdevices是nil')\n return nil\n end\nend\n\n\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n INLINE 2019-11-04 09:21:33.406+08 2019-11-21 09:28:21.613+08 2019-11-04 \N
+9a5c7ac8-776a-4dd5-a224-c083f94292e6 soilmop \N 1.0 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 f 679f43f2-ff7d-440f-9e36-6ad3beb8d574 Lua start = function()\n \n\tlocal cmd = capability.param\n\tlog.debug("soilmop linkcnt=%s",cmd)\n\tlocal req = StrtoHex(cmd)\n\n log.debug("soilmop:request=%s", req)\n local ok, ack = ctx:ssend(req, 20000)\n\t\n\t out = {\n result = nil,\n type = 1,\n data = {\n ack = HextoStr(ack)\n }\n }\n\n\t\n\tlog.debug("soilmop out=%s",json.encode(out))\n\tlog.debug("soilmop responde=%s", HextoStr(ack))\n\n ctx:done(json.encode(out))\nend\n\n\n\n--字符串ascii->字符\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n\t--判断输入类型\n\tif (type(hex)~="string") then\n\t\treturn nil,"hex2str invalid input type"\n\tend\n\t--拼接字符串\n\tlocal index=1\n\tlocal ret=""\n\tfor index=1,hex:len() do\n \tlocal str = string.format("%02X",hex:sub(index):byte())\n \tif str == '0A' or str =='0a' then\n \t\tstr = '0d0a' \t\t\n \tend\t\n \tif index == hex:len() then\n \t\tstr = str..'0d0a'\n \tend\n \tret=ret..str\n\tend\n\treturn ret\nend INLINE 2019-10-16 14:47:58.591+08 2019-12-04 13:32:43.684+08 2019-10-16 \N
+9de4617d-9968-4e94-9982-75e55cba6adf dhdz_DAS_DH8221 \N 1.0 56c7bc15-9ef6-4a82-984f-27e061f13a51 56c7bc15-9ef6-4a82-984f-27e061f13a51 f 56c7bc15-9ef6-4a82-984f-27e061f13a51 Lua onData = function()\nend\n\nstart = function()\n log.debug('dhdz_DAS_DH8221 device=%s', json.encode(device))\n\tout = {\n type = 2,\n data = {},\n result = {}\n }\n local buff = ''\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n\n buff = iota.appendHexByte(buff, moduleNo, endian)\n buff = buff .. '0400000030'\n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n local result = '{}'\n \n ok, resp = ctx:ssend(buff, 4000)\n\n if ok then\n local ErrorCode = IsValid(resp,moduleNo)\n\t\tif ErrorCode then\n\t\t\tlog.debug('dhdz_DAS_DH8221 数据有效=%s', resp)\n\t\t\tallSubData = getAllDatas(resp)\n\t\t\t--发送指令\n\t\t\tlocal subdevices = device.dnlinks[1].devices\n\n\t\t\tif subdevices ~= nil then\n\t\t\t\tfor index, child in pairs(subdevices) do \n\t\t\t\tlog.debug('dhdz_DAS_DH8221 child=%s', json.encode(child))\n\t\t\t\t\tchannelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t\tif allSubData[channelNo]~=nil then\n\t\t\t\t\t\tlog.debug('dhdz_DAS_DH8221 解析通道%s数据', channelNo)\n\t\t\t\t\t\tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n\t\t\t\t\t\ttable.insert(out.data, result)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tlog.debug('dhdz_DAS_DH8221 数据无效=%s', resp)\n\t\t\tout.result = {code = ercode, msg = erormsg}\n\t\tend\n\t\t\n\tend\n\n local resultData = json.encode(out)\n log.debug('dhdz_DAS_DH8221 resultData=%s', resultData)\n ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n local DataList = {}\n local subDataArea = string.sub(hexStr, 7, -5)\n\tlog.debug('dhdz_DAS_DH8221 subDataArea=%s', subDataArea)\n local dataCount = string.len(subDataArea) / 4\n\tlog.debug('dhdz_DAS_DH8221 dataCount=%s', dataCount)\n for i = 1, 32,1 do\n\t log.debug('dhdz_DAS_DH8221 i是%s',i)\n DataList[i] = iota.hexToUShort(hexStr, (i - 1) * 2 + 3, 'B')\n\t\tlog.debug('dhdz_DAS_DH8221 DataList[%s]=%s',i,DataList[i])\n end\n\treturn DataList\nend\n\nunmarshall = function(childDevice, data, subChannelId, moduleNoStr)\n log.debug('dhdz_DAS_DH8221 cc=%s, m=%s, recv =%s,c=%s',childDevice,moduleNoStr, data,subChannelId)\n local subData = {\n data = {},\n result = {},\n\t\tdevice = '',\n type = 1\n }\n\t\n local f=data[subChannelId]\n\tlocal freq=f/10\n\n \n if childDevice ~= nil then\n \n singleData = {\n data = {\n\t\t\t \n frequency\t = tonumber(string.format('%0.2f',freq))\n \n },\n device = childDevice.id,\n type = 1\n }\n end\n --end\n\n --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n return singleData\nend\n\nIsValid = function(data, deviceModule)\n local dataModule = iota.hexToByte(data, 0, 'B')\n if tonumber(deviceModule) ~= dataModule then\n errormsg = string.format('无效的数据模块号=%s≠%s', dataModule, deviceModule)\n errcode = 1004\n return false\n end\n return true\n --crc\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("dhdz_DAS_DH8221 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n local moduleStrCheck = child.uplink.props.module --模块 通道 接口获取\n local channelStrCheck = child.uplink.props.channel\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) and tonumber(channelStrCheck) == tonumber(channelNoId) then\n log.debug('dhdz_DAS_DH8221 m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n else\n log.debug('dhdz_DAS_DH8221 m=%s c=%s 无匹配子设备', moduleNoId, channelNoId)\n return nil\n end\nend\n\n INLINE 2019-09-30 09:57:51.835+08 2019-10-09 17:38:05.796+08 2019-09-30 \N
+597ac084-8a80-4f12-9a5b-73d7910331ff fs_qixing_wl \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --?D:\\SVN\\201901项目\\20190104新项目资料提交\\江西飞尚--静力水准仪--岳晓静\\静力水准仪FS-JLSZ-V1.00通讯协议.docx\n\nstart=function ()\n\t out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n\tlocal sendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\telse\n\t\tout.result = {code=1001,msg='采集超时'} \n\t\tresult=json.encode(out)\n\tend\n\tctx:done(result)\nend\n\n\nfunction protocol_encode(moduleNoStr)\n--采集压力的偏移地址为22-23 默认是22(0x16)\n--采集温度的偏移地址为38-39 默认是38(0x26)\n\tlocal BE='B'\n\tlocal buff=''; \n\tbuff=iota.appendHexByte(buff, moduleNoStr, BE); -- 3: 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x03, BE); --功能码 0x03采集 \n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x16, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n buff=iota.appendHexByte(buff, 0x12, BE); --读取18个寄存器\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) --CRC16\n\treturn buff\nend\n--模块号 17\n--1103001600122693\n--11032441b30e9a000000000000000042c800000000000041200000471335004a6a96fcc04fb2cb31\n\nfunction protocol_decode(hex,moduleNoCheck)\n \n\tlocal data = hex;\n\n\t--判断数据有效性\t\t\t\n\tlocal ErrorCode = IsValid(data,moduleNoCheck)\n if ErrorCode then\n\tlocal pressure = iota.hexToFloat(data, 3,'B'); -- 压强\n\tlocal temperature = iota.hexToFloat(data, 35,'B'); -- 温度\t\t\t\n\t\tout.data = {\n\t\tpressure=tonumber(string.format('%0.3f',pressure)),\n\t\ttemperature=tonumber(string.format('%0.2f',temperature))\n\t\t}\n\telse\n out.result = {code=errcode,msg=errormsg} \n\tend\n\t return json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n\tlocal checkLen=string.len(data)/2\n if data == nil or checkLen~= 41 then\n errormsg = string.format('无效的数据长度=%s≠41',checkLen)\n errcode = 1002\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = string.format('无效的数据指令≠03')\n errcode = 1003\n return false\n end\n\tlocal checkModule=iota.hexToByte(data,0,'B')\n if moduleNoCheckStr ~= tostring(checkModule) then \t\n errormsg = string.format('无效的模块号=%s≠%s',checkModule,moduleNoCheckStr)\n errcode = 1004\n return false\n end\n return true\nend\n INLINE 2019-07-02 15:39:32.86+08 2019-12-07 10:46:36.289+08 2019-07-02 \N
+51fd07fa-e516-466b-8ca2-c4baffc0a1d2 mas-gnss \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua start = function()\n local moduleNo = device.uplink.props.id --模块\n --log.debug('mas_gnss [%s] device=%s',moduleNo,jaon.encode(device))\nend\n\nonData =function(httpbody, index)\n local out = {\n data = {},\n result = {}\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n log.debug('mas_gnss [%s] device=%s',moduleNo,json.encode(device))\n log.debug('mas_gnss [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n local bodydataStr = httpbody.Body\n local bodydata = json.decode(bodydataStr)\n local projectId = bodydata.projectId\n --local serverIP = '218.3.126.49'\n --local port = '19700'\n --local serverTime = getTimeNowStr()\n local url = httpbody.URL\n --log.debug('mas_gnss [%s] url=%s type=%s', moduleNo, url, type(url))\n\n --获取实时数据\n\t\tlocal projectId = bodydata.projectId\n local deviceId = bodydata.deviceId \n \t\tlocal x = bodydata.x \n \t\tlocal y = bodydata.y \n \t\tlocal z = bodydata.z \n \t\tlocal dx = bodydata.dx \n \t\tlocal dy = bodydata.dy \n \t\tlocal dz = bodydata.dz\n \n local RTime = bodydata.time --时刻 \n \n \n\n out.data = {\n projectId = projectId,\n deviceId = deviceId,\n \t\tx = x,\n \t\ty = y,\n \t\tz = z,\n \t\tdx = dx,\n dy = dy,\n dz = dz\n }\n out.time = unixtimestamp(RTime, deviceId)\n \t\tlocal resultStr=json.encode(out)\n log.debug('mas_gnss [%s] json.encode(out)=%s', moduleNo,resultStr)\n asend_HttpResponse()\n ctx:notify(resultStr)\nend\n\nasend_HttpResponse = function()\n ack = {type = 'http', code = 200, body = '{}'}\n ctx:asend(ack)\nend\n\ngetTimeNowStr = function()\n --2018-4-28 16:10:12\n local timeNowNum = os.time()\n local timeNowStr = os.date('%Y-%m-%d %H:%M:%S', timeNowNum)\n return timeNowStr\nend\n\nunixtimestamp = function(datestr, moduleNoStr)\n -- 2018-4-28 16:10:12\n --log.debug("fs_tj_lf_station datestr=%s",datestr)\n local datelist = Split(datestr, ' ')\n local date = Split(datelist[1], '-')\n local time = Split(datelist[2], ':')\n local year = tonumber(date[1])\n local month = tonumber(date[2])\n local day = tonumber(date[3])\n local hour = tonumber(time[1])\n local minute = tonumber(time[2])\n local second = tonumber(time[3])\n --log.debug("fs_tj_lf_station year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --log.debug('mas_gnss [%s] recordTime=%s', moduleNoStr, recordTime)\n return recordTime\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n INLINE 2018-12-08 15:11:17.96+08 2020-07-23 11:21:43.509+08 2018-12-08 \N
+da525217-b5fb-4776-ab3b-d91165192839 GZM \N 1 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f f16833ab-a4a4-45f5-9b39-ad2c66e488f6 Lua --//\n\nstart = function()\n ok, resp = ctx:ssend('01020304', 5000)\nend\n\nonData = function(hex)\n --log.debug("fs_gzm_2018 收到数据=%s", hex)\n --log.debug("fs_gzm_2018 device =%s", json.encode(device))\n --log.debug("fs_gzm_2018subdevices data is =%s", json.encode(device.dnlinks[1].devices))\nlog.debug("[soip:40001:99998888] %d bytes. ", string.len(hex))\n \n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n sData = HextoStr(hex)\n log.debug('fs_gzm_2018:sData是 %s', sData)\n --获取子字符串表\n local dataTable = json.decode(sData)\n\n --log.debug("fs_gzm_2018 dataTable=%s",json.encode(dataTable))\n\n --分析单类数据\n if dataTable ~= nil then\n for k, sensorValue in ipairs(dataTable.allNodeDatas) do\n --log.debug("fs_gzm_2018 k=%s,sensorValue=%s",k,json.encode(sensorValue))\n if k >= 1 then\n local factorId = tonumber(sensorValue.factorid)\n local factorName = getFactorName(factorId)\n local moduleNo = tonumber(sensorValue.moduleId)\n local channelNo = tonumber(sensorValue.channel)\n log.debug(\n 'fs_gzm_2018 k=%s,factorId=%s,factorName=%s,moduleNo=%s,channelNo=%s',\n k,\n factorId,\n factorName,\n moduleNo,\n channelNo\n )\n --解析单条数据\n for kdata, vdata in ipairs(sensorValue.data) do\n --log.debug('fs_gzm_2018:遍历解析单条数据 键=' .. tostring(kdata) .. ' 值=' .. json.encode(vdata))\n\n local anglex = tonumber(vdata.value[1])\n local angley = tonumber(vdata.value[2])\n --log.debug('fs_gzm_2018 factorid=%s,vdata.value[3]=%s', factorId, vdata.value[3])\n local force --轴力\n\n local length_cj --模板沉降\n local length_sp --水平位移\n\n if factorId == 0 then --模板沉降\n length_cj = tonumber(vdata.value[3])\n elseif factorId == 1 then --水平位移\n length_sp = tonumber(vdata.value[3])\n elseif factorId == 2 then --轴力\n force = tonumber(vdata.value[3])\n else\n --log.debug('fs_gzm_2018 factorId=%s,type=%s', factorId, type(factorId))\n end\n\n local timeStamp = tonumber(vdata.time) / 1000 --时间戳\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamp)\n --log.debug('fs_gzm_2018 timeStamp=%s,recordTime=%s', timeStamp, recordTime)\n --获取通道设备deviceId\n local childDevice = getDeviceInfo(moduleNo, channelNo)\n\n local deviceId\n if childDevice ~= nil then\n --log.debug("fs_gzm_2018: %s节点 模块%s,通道%s原型childDevice=%s",factorName,moduleNo,channelNo,json.encode(childDevice))\n deviceId = childDevice.id\n else\n --log.debug('fs_gzm_2018:%s节点 deviceId为nil:m=%s,c=%s', factorName, moduleNo, channelNo)\n end\n\n local data1 = {\n data = {\n x = anglex,\n y = angley,\n force = force,\n settling = length_cj,\n displacement = length_sp\n },\n device = deviceId,\n time = recordTime,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n end\n else\n log.debug('fs_gzm_2018 数据不完整')\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n log.debug('[99998888] fs_gzm_2018 resultData=%s', json.encode(out))\n ctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("fs_gzm_2018 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug("fs_gzm_2018:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n --log.debug('fs_gzm_2018 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n else\n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.channelId\n --log.debug('fs_gzm_2018 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n end\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tonumber(channelStrCheck) == tonumber(channelNoId) then\n --log.debug('fs_gzm_2018: m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('fs_gzm_2018: m=%s c=%s subdevices是nil', moduleNoId, channelNoId)\n return nil\n end\nend\n\nIsValid = function(alldata)\n log.debug('fs_gzm_2018 校验开始')\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n log.debug('fs_gzm_2018: 校验失败 Data is nil')\n return false\n end\n\n if string.sub(alldata, 1, 8) ~= '7b22616c' and string.sub(alldata, -2, -1) ~= '7d' then\n errormsg = 'CMD is wrong'\n errcode = 1002\n log.debug('fs_gzm_2018: 校验失败 CMD is wrong')\n return false\n end\n\n log.debug('fs_gzm_2018: 校验通过')\n return true\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = string.sub(hex,2*i-1,2*i)\n local ascii=string.char(tonumber(bi,16))\n str = str .. ascii\n end\n return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ngetFactorName = function(num)\n local NO = tonumber(num + 1)\n local FactorNames = {'沉降', '水平', '轴力', '倾斜'}\n local FactorName = FactorNames[NO]\n return FactorName\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend INLINE 2019-08-09 15:04:12.604+08 2019-08-09 15:28:25.709+08 2019-08-09 \N
+4de81ee8-2530-4c2b-82ee-aa3fa3a8b381 EC-111 \N EC-1型风速风向仪 1.0 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e f 8d49238d-6e0e-421c-adaf-f7472ec0b50e Lua --// 风速风向传感器\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "EC-111 ", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("EC-111 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("EC-111 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n \t\tbuff=iota.appendHexByte(buff, 0x00, endian) \t\t\n buff=iota.appendHexByte(buff, 0x02, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n\t\t\n\t\tlog.debug('EC-111 %s buff111111',buff)\n\t\t\n\t\t\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("EC-111 SSend error!")\n end\n ctx:done(result)\nend\n\n--FF0300000002D1D5\n--FF0304009E003A0401\n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\t\t\t\n local direction = iota.hexToShort(hex,3,'B')\n\t\tlog.debug('EC-111 %s 风速',direction)\n\t\tlocal speed = iota.hexToShort(hex,5,'B')/10\n\t\tlog.debug('EC-111 %s 风向',speed)\n\t\t\n\t\t\n \n \n out.data = {\n\t\t\twindspeed=speed,\n\t\t\twinddirection=direction,\t\t\t\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n log.debug('EC-111 %s 开始校验数据',data)\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n \n log.debug('EC-111 数据校验通过')\n return true\n\nend\n\n\n\t\n \n INLINE 2019-09-29 11:59:24.941+08 2019-09-30 16:20:24.248+08 2019-09-29 \N
+dfa3967f-3c30-459f-82f0-7d8efa88fb05 RT-1 \N RH-1型温度计 1.0 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e f 8d49238d-6e0e-421c-adaf-f7472ec0b50e Lua --// 风速风向传感器\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "RT-1 ", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("RT-1 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("RT-1 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n \t\tbuff=iota.appendHexByte(buff, 0x00, endian) \t\t\n buff=iota.appendHexByte(buff, 0x02, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n\t\t\n\t\tlog.debug('RT-1 %s buff111111',buff)\n\t\t\n\t\t\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("RT-1 SSend error!")\n end\n ctx:done(result)\nend\n\n--FF0300000002D1D5\n--FF030416760DFF44BE \n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\t\t\t\n local humidy = iota.hexToShort(hex,5,'B')/100\n\t\tlog.debug('RT-1 %s 湿度',humidy)\n\t\tlocal Temp = iota.hexToShort(hex,3,'B')/100-40\n\t\tlog.debug('RT-1 %s 温度',Temp)\n\t\t\n\t\t\n \n \n out.data = {\n\t\t\thumidy=humidy,\n\t\t\tTemp=Temp,\t\t\t\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n log.debug('RT-1 %s 开始校验数据',data)\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n \n log.debug('RT-1 数据校验通过')\n return true\n\nend\n\n\n\t\n \n INLINE 2019-09-29 11:59:59.379+08 2019-09-30 16:46:17.751+08 2019-09-29 \N
+b8f43fbc-56bf-4061-9284-e22cdb48e41b hzyy_gnss_file_trans \N 1.0 19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2 19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2 f 19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2 Lua start = function()\n log.debug('hzyy_gnss_file_transfer devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n if data ~= nil then\n if data.type == 'idau/file' then\n if data.ext == '.d' or data.ext == '.dx' then\n log.debug('hzyy_gnss_file_transfer recvd content = %s', data.payload)\n ParseFileD(data.payload)\n --else\n --log.error("hzyy_gnss_file_transfer unsupported file type: %s", data.ext)\n end\n else\n log.error('hzyy_gnss_file_transfer content type is not file, error recvd type is %s', data.type)\n end\n else\n log.error('hzyy_gnss_file_transfer recvd content is nil')\n end\nend\n\nfunction ParseFileD(content)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n --log.debug('hzyy_gnss_file_transfer content =%s', content)\n local jsons = Split(content, '\\r')\n for k, v in pairs(jsons) do\n if v ~= nil and v ~= '' then\n local jsondata = json.decode(v)\n if jsondata ~= nil and jsondata ~= '' then\n local childDevice = getDeviceInfo(jsondata.M)\n if childDevice ~= nil then\n log.debug('hzyy_gnss_file_transfer 设备类型=%s,%s', childDevice.props.sensortype, json.encode(childDevice))\n if childDevice.props.sensortype == 'prism_L_FS' then --直角棱镜\n local rst = {\n data = {\n easting = jsondata.RV[1],\n northing = jsondata.RV[2],\n height =jsondata.RV[3]--,\n --eastingDiff = 1000*jsondata.RV[4],\n --northingDiff = 1000*jsondata.RV[5],\n --heightDiff = 1000*jsondata.RV[6]\n \n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n }\n table.insert(out.data, rst)\n end\n else\n end\n end\n end\n end\n log.debug('hzyy_gnss_file_transfer result = %s', json.encode(out))\n ctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(data_moduleid)\n log.debug('hzyy_gnss_file_transfer 查询子设备 data_moduleid=%s', data_moduleid)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices\n for i, subdevice in pairs(subdevices) do\n local Point_id = subdevice.uplink.props.node_id\n if tostring(Point_id) == tostring(data_moduleid) then\n log.debug('hzyy_gnss_file_transfer data_moduleid=%s,匹配到设备=%s', Point_id, json.encode(subdevice))\n return subdevice\n else\n \t\tlog.debug('hzyy_gnss_file_transfer data_moduleid=%s, 不匹配 device node_id=%s', data_moduleid,Point_id)\n end\n end\n log.debug('hzyy_gnss_file_transfer has no device Point_id=%s', moduleid)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('hzyy_gnss_file_transfer has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend INLINE 2020-09-11 14:14:59.448+08 2020-09-11 14:16:43.42+08 2020-09-11 \N
+bac4bba9-6af2-401c-b42c-9f1bd2d62728 idau_file_diag \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start=function()\n --log.debug("fs_idau_file:jiexi")\n end\n \nonData=function(data)\n --local jdata=json.encode(data)\n --log.debug("fs_idau_file:data=%s",json.encode(data))\n if data ~=nil then\n if data.type == "idau/file" then \n if data.ext==".d" then\n --log.debug("fs_idau_file:payload=%s", data.payload)\n parseData(data.payload)\n elseif data.ext==".m" then\n --log.debug("fs_idau_file.m:payload=%s", data.payload)\n \t\t parseDiag(data.payload)\n \telse \n \t\t--log.error("fs_idau_file:type is not.d/.m %s", data.name)\n end\n else\n --log.error("fs_idau_file:not a d file .d", data.ext)\n end\n else\n --log.error("fs_idau_file:data is nil")\n end\nend\nfunction parseData(js)\n local out={\n data ={},\n result = {},\n type=2\n }\n \n local djs=Split(js,'\\r')\n --log.debug("fs_idau_file:jsoncount=%s",#(djs))\n for k,v in ipairs(djs) do\n if v~='' and v~=nil then\n local dj=json.decode(v)\n --log.debug("fs_idau_file:dj=%s",v)\n --log.debug("fs_idau_file:sen=%s",dj.S)\n if dj~=nil and dj ~= '' and dj.R =="0" then\n --log.debug("fs_idau_file:ceshiyixia1")\n local childDevice=getDeviceInfo(dj.S)\n --log.debug("fs_idau_file:childDevice=%s",json.encode(childDevice))\n if childDevice~=nil and childDevice ~= {} then \n --log.debug("fs_idau_file:ceshiyixia2")\n --log.debug("fs_idau_file:dj.PV1=%s",dj.PV[1])\n\n if childDevice.props.sensortype=="cx" then --测斜\n local data1 ={\n data={\n anglex = dj.RV[1] or 0,\n angley= dj.RV[2] or 0,\n temperature= dj.RV[3] or 0, \n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n table.insert(out.data,data1)\n end\n if childDevice.props.sensortype=="lf" then --裂缝\n local data1 ={\n data={\n length = dj.RV[1] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n table.insert(out.data,data1)\n end\n if childDevice.props.sensortype=="wsd" then --温湿度\n local data2 ={\n data={\n temperature = dj.RV[1] or 0,\n humidity= dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n table.insert(out.data,data2)\n end\n\n if childDevice.props.sensortype=="cj" then --激光测距\n local data2 ={\n data={\n length = dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n table.insert(out.data,data2)\n end\n\n if childDevice.props.sensortype=="yc" then --压差\n local data3 ={\n data={\n physicalvalue = dj.PV[1] or 0,\n frequency=dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n table.insert(out.data,data3)\n end\n if childDevice.props.sensortype=="zx" then --振弦\n --log.debug("fs_idau_file:ceshi_zx")\n local data4={\n data={\n physicalvalue = dj.PV[1] or 0,\n frequency=dj.RV[1],\n temperature=dj.RV[2],\n am=dj.RV[3]\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000)) \n }\n \t\t\tif data4.data.temperature == 200 or data4.data.temperature == -200 then\n \t\t\t\tdata4.data.temperature = nil \n \t\t\tend\n\t\t\t\t\t\tlocal status = dj.R\n\t\t\t\t\t\tif tonumber(status) == 140104 then\n\t\t\t\t\t\t\tdata4.result = {code=30010023,msg="频率线短路"}\n\t\t\t\t\t\t\tdata4.data ={}\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif tonumber(status) == 140105 then\n\t\t\t\t\t\t\tdata4.result = {code=30010022,msg="频率线断路"}\n\t\t\t\t\t\t\tdata4.data ={}\n\t\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\t--log.debug("fs_idau_file:out data4=%s",json.encode(data4))\n\t\t\t\t\t\ttable.insert(out.data,data4)\n end\n\n end\n else\n --log.debug("fs_idau_file:dj=nil")\n end\n else\n --log.debug("fs_idau_file:v is nil v=%s",json.decode(v))\n end\n\n end\n local resultData =json.encode(out)\n log.debug("fs_idau_file:".."LUA:resultData : data is =%s", json.encode(out))\n ctx:notify(resultData)\nend\nfunction parseDiag(js)\n local dj=json.decode(js)\n if dj~=nil then\n\tlocal out={\n data ={_data_type = "diag", R={}},\n result = {},\n type=2\n }\n \n local dataresult= json.encode(dj.R.P.R)\n\tout.data.R = dataresult\n log.debug("parsing diag file = %s",json.encode(out))\n ctx:notify(json.encode(out))\n end\nend\n --string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n \n --获取采集仪下面的通道信息\nfunction getDeviceInfo(sensorId)\n local resensor=nil\n if device.dnlinks ~=nil then\n --log.debug("fs_idau_file:deviceInfo=%s",json.encode(device))\n for i,link in pairs(device.dnlinks) do\n --log.debug("fs_idau_file:link=%s",json.encode(link))\n for j,node in pairs(link.devices) do\n --log.debug("fs_idau_file:node=%s",json.encode(node))\n for k,sublink in pairs(node.dnlinks) do\n --log.debug("fs_idau_file:sublink=%s",json.encode(sublink))\n for u,subdevice in pairs(sublink.devices) do\n --log.debug("fs_idau_file:sensor=%s",json.encode(subdevice))\n if subdevice.uplink.props.sensorid == sensorId then\n --log.debug("fs_idau_file:final_sensor %s=%s",subdevice.uplink.props.sensorid,sensorId)\n resensor = subdevice\n end \n end\n end\n end\n end \n end\n return resensor\nend\n\n\n\n INLINE 2018-03-09 09:41:56.466+08 2020-04-15 10:47:35.593+08 2018-03-09 \N
+15d206c2-cc6e-46f4-ba70-f8d642edcea1 MASYTSWJC \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --字符串ascii->字符\nstart=function()\n --log.debug("MASYTSWJC: start module %s, ", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n --log.debug("MASYTSWJC: Data=%s",hex)\n\t--全局\n out={\n data ={},\n result = {},\n\t\ttype=1\n }\nlocal moduleNonum=device.uplink.props.module\n local sData= HextoStr(hex)\n log.debug("MASYTSWJC: sData=%s",sData)\n local spliteData = Split(sData,';')\n\tlocal moduleData = Split(spliteData[3],':') \n\n\tlocal moduleNo = moduleData[2]--模块号\n\n\tlocal spliteData1 = Split(sData,'START;')\n local spliteData2 = Split(spliteData1[2],';END;')\n\t log.debug("MASYTSWJC: spliteData2=%s",json.encode(spliteData2))\n\t\n local spliteData3 = Split(spliteData2[1],';')\n\tlog.debug("MASYTSWJC: spliteData3=%s",json.encode(spliteData3))\n\t\n\tlocal allData2=Split(spliteData3[8],':')\n\tlocal allData=Split(allData2[2],'_')\n\tlocal sensornum=allData[1]\n\tlocal length=tonumber(allData[2])\n\t\n\tlog.debug("MASYTSWJC: %s length=%s",allData[2],length)\n if moduleNonum==moduleNo then\n out.data = {\n length=length\n }\n\t end\n\t\n\n local resultData =json.encode(out) --输出传递到平台上\n log.debug("MASYTSWJC: result=%s",json.encode(out))\n ctx:notify(resultData)\n\t\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n--string split函数 分割相应的字符\nSplit=function (input, delimiter)\n input = tostring(input)\n delimiter = tostring(delimiter)\n if (delimiter=='') then return false end\n local pos,arr = 0, {}\n for st,sp in function() return string.find(input, delimiter, pos, true) end do\n table.insert(arr, string.sub(input, pos, st - 1))\n pos = sp + 1\n end\n table.insert(arr, string.sub(input, pos))\n return arr\nend\n\n\n INLINE 2020-11-10 14:38:20.896+08 2020-11-10 16:01:49.64+08 2020-11-10 \N
+5a0243a8-8564-4245-86a7-c477a66eeb15 fs_node_weather2 \N 2.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua function start() \nlog.debug("fs_node2 LUA:start %s", "idau_node_oxy.lua")\nend\n\nonData=function(msg)\n\tif (msg == nil or msg.type == nil) then\n\t\t--log.error("onData(nil)!!!")\n\telseif (msg.type == "upload") then -- 文件上传进度\n\t\ton_file_upload(msg)\n\telseif (msg.type == "idau/file") then -- 收到数据文件\n \tlog.error("fs_node2:dtuid=%s,idau/file=%s",device.uplink.props.id,msg)\n\t\ton_data_file(msg)\n\telseif (msg.type == "idau/mop") then -- MOP 消息, wakeup等.\n\t\tlocal mop = json.decode(msg.payload)\n\t\t--log.error("fs_node2:dtuid=%s,msgid=%s,file_mop=%s",device.uplink.props.id,msg.id,json.encode(mop))\n\t\tif (mop == nil) then\n\t\t\t--log.error("onData: mop is nil!")\n\t\tend\n\t\tif (mop.M == "c_wakeup") then\n\t\t\tlocal updatecfg = true --初次配置\n\t\t\tlocal r1,ok = redis.get(device.id.."_fdset")\n\t\t\t--判断是否配置,否就是初次配置\n\t\t\tlocal strdevice= toHexStr(json.encode(device))\n\t\t\tstrdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n\t\t\tlocal crc=string.sub(strdevice,-4,-1)\n\t\t\tlog.debug("fs_node2 dtuid=%s,crc1= %s ,r1 = %s",device.uplink.props.id,crc,r1)\n\t\t\tif ok and r1~=nil then\n\t\t\t\tif crc == r1 then --配置无变动,无需下发\n\t\t\t\t\tupdatecfg = false\t\n \t\t\tlog.debug("fs_node2 dtuid=%s 配置无变动,无需下发",device.uplink.props.id)\n \t\telse\n \t\t\tlog.debug("fs_node2 dtuid=%s 配置变动,需要下发",device.uplink.props.id)\n\t\t\t\tend\n \n\t\t\tend\t\t\t\n\t\t\t--log.error("fs_node2:redis setting sec")\n\t\t\tlocal updatefw,okey = redis.get(device.id.."_fwset") -- 判断是否需要更新固件,还未处理\n\t\t\tif okey and updatefw == "redis: nil" then\n\t\t\t\tupdatefw = false\n\t\t\tend\n\t\t\tlocal diag = false\n\t\t\t--log.error("fs_node2:diag = false")\n\t\t\tif device.uplink.props.diag == "true" then\n\t\t\t\t--log.error("fs_node2:diag = true")\n\t\t\t\tdiag = true\n\t\t\tend\n\t\t\tdeal_mop_wakeup(msg,updatecfg, updatefw,diag) --处理wakeup\n\t\t\tif diag == true then \n \t\tctx:sleep(1)\n\t\t\t\tupdate_diag()\n\t\t\tend\n\t\t\tif (updatecfg) then -- 需要更新配置\n --log.debug("fs_node2 dtuid=%s 开始下发配置",device.uplink.props.id)\n\t\t\t\tupdate_config()\n\t\t\tend\n \t\t--log.debug("fs_node2 updatefw %s",updatefw)\n\t\t\tif (tostring(updatefw) == "true") then -- 需要更新固件\n\t\t\t\tupdate_fw(msg)\n\t\t\tend\n\t\telseif (mop.M == "c_sensor") then -- 配置上传应答\n\t\t\t--log.debug("fs_node2 c_sensor ack")\n\t\telseif (mop.M == "c_data") then --MOP 指令数据解析\n\t\t\tparse_Data(msg,true)\t\n\t\tend\n\tend\nend\n\n--文件上传进度\nfunction on_file_upload(msg)\n--log.debug("fs_node2: on_file_upload: file: progress=%3.2f, status=%d", p.progress, p.status)\n-- 发送完毕.\nif (p.status == 0 and p.progress == 1.00) then\n\t-- 此处可以 ctx:notify 一个能力数据出去\n\t--log.debug("fs_node2: file uploaded in %d seconds.", p.duration)\n\t-- 发送开始更新指令.\n\tlocal mop = {\n\t\tM = "c_pgupdate",\n\t\tO = "UP",\n\t\tP = {\n\t\t\tV = p.fi.ext.ver, -- ver.\n\t\t\tF = p.fi.name, -- file\n\t\t\tR = true -- reboot\n\t\t}\n\t}\n\tlocal req = {\n\t\ttype = "idau",\n\t\tpayload = json.encode(mop)\n\t}\n\t--log.debug("fs_node2:Notify device to update fw...")\n\tlocal ok, ack = ctx:ssend(req, 3000)\n\tif (ok) then\n\t\t-- Done\n\t\tredis.set(device.id.."_fwset",tostring(false))\n\tend\nend\nend\n\n--需要配置更新 上传固件逻辑\nfunction update_fw(msg)\n\t--log.debug("fs_node2 update fw for device: %s", device.id)\n\t-- TODO 固件更新信息, 应该通过其他的能力调用, 写入到Redis后, 在这里取出来, 譬如: redis.hget(device.id,"fwinfo")\n\tlocal fwinfo_get = json.encode(redis.get(device.id,"fwinfo"))\n\tif fwinfo_get == nil then\n\t\tlocal fwinfo = {\n\t\t\turl = "http://localhost:9070/fw/test.jpg",\n\t\t\tname = "test.jpg",\n\t\t\tsize = 22824,\n\t\t\tdate = "2018-11-14 20:01:02",\n\t\t\tmd5 = "3768a0dd6faabd7a1c4419dac71db6ca",\n\t\t\tnotify = 1, -- 0=极少通知(开始,结束,错误), 1=每包\n\t\t\text = {\n\t\t\t\tver = 1234,\n\t\t\t\tcompress = 0, --0=none, 1=msg compress, 2=file compress.\n\t\t\t\tpkg = 1024 -- 分包\n\t\t\t}\n\t\t}\n\t\t-- 开始上传.\n\t\tlocal ok, err = ctx:upload(fwinfo) --\n\t\t--log.debug("fs_node2 ctx:upload =>%s %s", fwinfo.name, ok, err)\n\telse \n\t\tlocal fwinfo = fwinfo_get\n\t\t-- 开始上传.\n\t\tlocal ok, err = ctx:upload(fwinfo) --\n\t\t--log.debug("fs_node2 ctx:upload =>%s %s", fwinfo.name, ok, err)\n\tend\nend\n\n--收到数据文件\non_data_file=function(data)\n local jdata=json.encode(data)\n if data ~=nil then\n if data.type == "idau/file" then \n if data.ext==".d" then\n log.debug("fs_node2:payload=%s", toStrHex(data.payload))\n parseData(toStrHex(data.payload))\n elseif data.ext==".m" then\n --log.debug("fs_node2.m:payload=%s", toStrHex(data.payload))\n \t\t parseDiag(toStrHex(data.payload))\n \telse \n \t\t--log.error("fs_node2:type is not.d/.m %s", data.name)\n end\n else\n -- log.error("fs_node2:not a d file .d", data.ext)\n end\n else\n --log.error("fs_node2:data is nil")\n end\nend\n\nfunction parse_Data(js,bmop)\n out={\n data ={},\n result = {},\n type=2\n }\n\n\tlocal msgid = js.id\n\n\tlocal mop = json.decode(js.payload)\n\t--log.debug("fs_node2:mop=%s",json.encode(mop))\n\tlocal oxydevice = {}\n for k,v in ipairs(mop.P) do\n if v~='' and v~=nil then\n local dj=mop.P[k]\n log.debug("fs_node2:dtuid %s dj=%s",device.uplink.props.id,json.encode(v))\n log.debug("fs_node2:dtuid %s sen=%s",device.uplink.props.id,dj.S)\n --if dj~=nil and dj ~= '' and tostring(dj.R) =="0" then -- 临时去除结果判定。\n \t\tif dj~=nil and dj ~= '' then\n local childDevice=getDeviceInfo(dj.S)\n log.debug("fs_node2: dtuid %s childDevice=%s",device.uplink.props.id,json.encode(childDevice))\n if childDevice~=nil and childDevice ~= {} then \n --log.debug("fs_node2:dj.PV1=%s",dj.PV[1])\n if childDevice.props.sensortype=="cx" then --测斜\n local data1 ={\n data={\n anglex = dj.RV[1] or 0,\n angley= dj.RV[2] or 0,\n temperature= dj.RV[3] or 0, \n _acq_number=dj.N or 1000\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data1)\n end\n\t\t\t\t\tif childDevice.props.sensortype=="lf" then --裂缝\n local data1 ={\n data={\n length = dj.RV[1] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data1)\n end\n if childDevice.props.sensortype=="wsd" then --温湿度\n local data2 ={\n data={\n temperature = dj.RV[1] or 0,\n humidity= dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data2)\n end\n\n if childDevice.props.sensortype=="cj" then --激光测距\n local data2 ={\n data={\n length = dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data2)\n end\n\n if childDevice.props.sensortype=="yc" then --压差\n local data3 ={\n data={\n pressure=dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data3)\n end\n if childDevice.props.sensortype=="zx" then --振弦\n local data4={\n data={\n physicalvalue = dj.PV[1] or 0,\n frequency=dj.RV[1] or 0,\n temperature=dj.RV[2] or 0,\n am=dj.RV[3] or 0\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n --log.debug("fs_node2:out data4=%s",json.encode(data4))\n table.insert(out.data,data4)\n end\n\t\t\t\t\tif childDevice.props.sensortype=="kq" then --AM2305模组\n\t\t\t\t\t\tlocal sensorId = tostring(dj.S)\n\t\t\t\t\t\tlocal ch = string.sub(sensorId,-1,-1)\n\t\t\t\t\t\tif ch == "4" then\n\t\t\t\t\t\t\t--log.debug("fs_node2:AM2305模组")\n\t\t\t\t\t\t\tlocal data5={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\ttemp=dj.PV[1],\n\t\t\t\t\t\t\t\t\t\thum=dj.PV[2]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id, \n\t\t\t\t\t\t\t\ttype="am2305", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("fs_node2:out data5=%s",json.encode(data5))\n\t\t\t\t\t\t\ttable.insert(oxydevice,data5)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif ch == "1" then\n\t\t\t\t\t\t\t--log.debug("fs_node2:PM100模组")\n\t\t\t\t\t\t\tlocal data6={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tpm100=dj.PV[1]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype="pm100", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("fs_node2:out data6=%s",json.encode(data6))\n\t\t\t\t\t\t\ttable.insert(oxydevice,data6)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif ch == "5" then --PM2.5,PM10模组\n\t\t\t\t\t\t\t--log.debug("fs_node2:PM2.5,PM10模组")\n\t\t\t\t\t\t\tlocal data7={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tpm25=dj.PV[1],\n\t\t\t\t\t\t\t\t\t\tpm10=dj.PV[2]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype="pm10", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t--log.debug("fs_node2:out data7=%s",json.encode(data7))\n\t\t\t\t\t\t\t\ttable.insert(oxydevice,data7)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif ch == "3" then --GPS模组\n\t\t\t\t\t\t\t--log.debug("fs_node2:GPS模组")\n\t\t\t\t\t\t\tlocal data8={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tlang=dj.PV[2],\n\t\t\t\t\t\t\t\t\t\tlong=dj.PV[1]\n\t\t\t\t\t\t\t\t\t\t--time_bj=dj.PV[3]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype="gps", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t--log.debug("fs_node2:out data8=%s",json.encode(data8))\n\t\t\t\t\t\t\t\ttable.insert(oxydevice,data8)\n\t\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\t\tif ch == "2" then --AQI模组\n\t\t\t\t\t\t\t--log.debug("fs_node2:AQI模组")\n\t\t\t\t\t\t\tlocal data9={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tCO=dj.PV[1],\n\t\t\t\t\t\t\t\t\t\tO3=dj.PV[2],\n\t\t\t\t\t\t\t\t\t\tNO2=dj.PV[3],\n\t\t\t\t\t\t\t\t\t\tSO2=dj.PV[4],\n\t\t\t\t\t\t\t\t\t\tVOC=dj.PV[5] \n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype="aqi", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t--log.debug("fs_node2:out data9=%s",json.encode(data9))\n\t\t\t\t\t\t\t\ttable.insert(oxydevice,data9)\n\t\t\t\t\t\tend\t\t\t\n end\t\t\t\n end\n else\n --log.debug("fs_node2:dj=nil")\n end\n else\n --log.debug("fs_node2:v is nil v=%s",json.decode(v))\n end\n\n end\n\tlog.debug("fs_node2 resultData : oxydevice is =%s", json.encode(oxydevice))\n\t-- 组合空气设备数据\n\tif json.encode(oxydevice) ~= "null" then\n\t\t CombineData(oxydevice)\n\tend\n\t--log.debug("fs_node2 resultData 1: data is =%s", json.encode(out))\n local resultData =json.encode(out)\n log.debug("fs_node2 dtuid: %s resultData : data is =%s",device.uplink.props.id,json.encode(out))\n ctx:notify(resultData)\n\t\t-- 发送应答.\n\tif bmop == true then\n\t\tlocal mopack = {\n\t\t\tM = "c_data",\n\t\t\tR = 0\n\t\t}\n\t\tlocal msgack = {\n\t\t\ttype = "idau",\n\t\t\tid = msgid, -- 消息ID, 重要!!!\n\t\t\tack = true, -- ack.(本消息是个应答)\n\t\t\tpayload = json.encode(mopack) -- 消息荷载: MOP\n\t\t}\n\t\t-- very important! 节点会等待这个消息, 用于判定通讯状态.\n\t\t--log.debug("fs_node2 data ack sent: %s", json.encode(msgack))\n\t\tctx:asend(msgack)\n\tend\nend\n\nfunction parseData(js)\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal oxydevice = {}\n local djs=Split(js,'\\n')\n --log.debug("fs_node2:jsoncount=%s",#(djs))\n for k,v in ipairs(djs) do\n if v~='' and v~=nil then\n local dj=json.decode(v)\n log.debug("fs_node2:dj=%s",json.encode(v))\n --log.debug("fs_node:sen=%s",dj.S)\n if dj~=nil and dj ~= '' and tostring(dj.R) =="0" then\n local childDevice=getDeviceInfo(dj.S)\n --log.debug("fs_node2:childDevice=%s",json.encode(childDevice))\n if childDevice~=nil and childDevice ~= {} then \n --log.debug("fs_node2:dj.PV1=%s",dj.PV[1])\n\n if childDevice.props.sensortype=="cx" then --测斜\n local data1 ={\n data={\n anglex = dj.RV[1] or 0,\n angley= dj.RV[2] or 0,\n temperature= dj.RV[3] or 0, \n _acq_number=dj.N or 1000\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data1)\n end\n\t\t\t\t\tif childDevice.props.sensortype=="lf" then --裂缝\n local data1 ={\n data={\n length = dj.RV[1] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data1)\n end\n if childDevice.props.sensortype=="wsd" then --温湿度\n local data2 ={\n data={\n temperature = dj.RV[1] or 0,\n humidity= dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data2)\n end\n\n if childDevice.props.sensortype=="cj" then --激光测距\n local data2 ={\n data={\n length = dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data2)\n end\n\n if childDevice.props.sensortype=="yc" then --压差\n local data3 ={\n data={\n pressure=dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data3)\n end\n if childDevice.props.sensortype=="zx" then --振弦\n local data4={\n data={\n physicalvalue = dj.PV[1] or 0,\n frequency=dj.RV[1],\n temperature=dj.RV[2],\n am=dj.RV[3]\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n --log.debug("fs_node2:out data4=%s",json.encode(data4))\n table.insert(out.data,data4)\n end\n\t\t\t\t\tif childDevice.props.sensortype=="kq" then --空气\n\t\t\t\t\t\tlocal sensorId = tostring(dj.S)\n\t\t\t\t\t\tlocal ch = string.sub(sensorId,-1,-1)\n\t\t\t\t\t\tif ch == "4" then\n\t\t\t\t\t\t\t--log.debug("fs_node2:AM2305模组")\n\t\t\t\t\t\t\tlocal data5={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\ttemp=dj.PV[1],\n\t\t\t\t\t\t\t\t\t\thum=dj.PV[2]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id, \n\t\t\t\t\t\t\t\ttype="am2305", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("fs_node2:out data5=%s",json.encode(data5))\n\t\t\t\t\t\t\ttable.insert(oxydevice,data5)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif ch == "1" then\n\t\t\t\t\t\t\t--log.debug("fs_node2:PM100模组")\n\t\t\t\t\t\t\tlocal data6={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tpm100=dj.PV[1]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype="pm100", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("fs_node2:out data6=%s",json.encode(data6))\n\t\t\t\t\t\t\ttable.insert(oxydevice,data6)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif ch == "5" then --PM2.5,PM10模组\n\t\t\t\t\t\t\t--log.debug("fs_node2:PM2.5,PM10模组")\n\t\t\t\t\t\t\tlocal data7={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tpm25=dj.PV[1],\n\t\t\t\t\t\t\t\t\t\tpm10=dj.PV[2]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype="pm10", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t--log.debug("fs_node2:out data7=%s",json.encode(data7))\n\t\t\t\t\t\t\t\ttable.insert(oxydevice,data7)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif ch == "3" then --GPS模组\n\t\t\t\t\t\t\t--log.debug("fs_node2:GPS模组")\n\t\t\t\t\t\t\tlocal data8={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tlang=dj.PV[2],\n\t\t\t\t\t\t\t\t\t\tlong=dj.PV[1]\n\t\t\t\t\t\t\t\t\t\t--time_bj=dj.PV[3]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype="gps", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t--log.debug("fs_node2:out data8=%s",json.encode(data8))\n\t\t\t\t\t\t\t\ttable.insert(oxydevice,data8)\n\t\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\t\tif ch == "2" then --AQI模组\n\t\t\t\t\t\t\t--log.debug("fs_node2:AQI模组")\n\t\t\t\t\t\t\tlocal data9={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tCO=dj.PV[1],\n\t\t\t\t\t\t\t\t\t\tO3=dj.PV[2],\n\t\t\t\t\t\t\t\t\t\tNO2=dj.PV[3],\n\t\t\t\t\t\t\t\t\t\tSO2=dj.PV[4],\n\t\t\t\t\t\t\t\t\t\tVOC=dj.PV[5] \n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype="aqi", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t--log.debug("fs_node2:out data9=%s",json.encode(data9))\n\t\t\t\t\t\t\t\ttable.insert(oxydevice,data9)\n\t\t\t\t\t\tend\t\t\t\t\t\t\t\t\t\t\t\n end\n\t\t\t\n end\n else\n --log.debug("fs_node2:dj=nil")\n end\n else\n --log.debug("fs_node2:v is nil v=%s",json.decode(v))\n end\n\n end\n\t--log.debug("fs_node2 resultData : oxydevice is =%s", json.encode(oxydevice))\n\t-- 组合空气设备数据\n\tif json.encode(oxydevice) ~= "null" then\n\t\tCombineData(oxydevice)\n\tend\n local resultData =json.encode(out)\n log.debug("fs_node2:".."LUA:resultData dtuid %s : data is =%s",device.uplink.props.id, json.encode(out))\n ctx:notify(resultData)\nend\n\nfunction parseDiag(js)\n local dj=json.decode(js)\n if dj~=nil then\n\tlocal out={\n data ={_data_type = "diag", R={}},\n result = {},\n type=2\n }\n \n local dataresult= json.encode(dj.R.P.R)\n\tout.data.R = dataresult\n log.debug("fs_node2 parsing diag file = %s",json.encode(out))\n ctx:notify(json.encode(out))\n end\nend\n\n\n --string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n--获取传感器信息\nfunction getDeviceInfo(sensorId)\n\tlocal sensorstr = tostring(sensorId)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do \t\t\n if tostring(subdevice.id) == tostring(sensorId)then \n\t\t\t\t\tlog.debug("fs_node2 1oxy:%s subdevice.id: %s",device.uplink.props.id,tostring(subdevice.id))\n return subdevice\n\t\t\t\telseif tostring(subdevice.id) == string.sub(sensorstr,1,-2) then --找不到传感器\n\t\t\t\t\tlog.debug("fs_node2 oxy:%s subdevice.id: %s",device.uplink.props.id,tostring(subdevice.id))\n\t\t\t\t\toxygendevice = subdevice\n return subdevice\n end \n end\n end\n -- log.debug("fs_node2 has no devic e sensorid=%s ",sensorId)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug("fs_node2 has no subdevices.")\n return nil -- 没有子设备\n end\nend\n--需要诊断\nupdate_diag = function()\n \t--log.debug("fs_node2_mop:dtuid %s diag=%s",device.uplink.props.id,device.uplink.props.diag)\n local req_diag={\n type = "idau",\n payload = ""\n }\n\tlocal mop_diag = {\n M = "c_diag",\n O = "DIAG",\n P = {\n D = "root",\n SYNC = true\n } -- 荷载\n }\n\n\treq_diag.payload= json.encode(mop_diag)\n\tlog.debug("fs_node2_mop:request=%s", json.encode(req_diag))\n\tlocal ok, ack = ctx:ssend(req_diag, 30000)\n\tlocal repdiag = json.decode(ack.payload)\n \tlocal res = nil\n \tif repdiag.P == nil then\n \tres = nil\n elseif repdiag.P.R == nil then\n\t\tres = nil\n elseif repdiag.P.R.root == nil then\n res = nil\n else\n res = repdiag.P.R.root\n end\n\t--log.debug("fs_node2_mop:reponde1=%s", json.encode(ack))\n\t--log.debug("fs_node2_mop:reponde2=%s", json.encode(res))\n\tresult = {\n\t\tresult = nil,\n\t\ttype = 1,\n\t\tdata = {\n\t\t\tR = res,\n\t\t\t_data_type = "diag"\n\t\t}\t\t\n\t}\n\tlog.debug("fs_node2_mop: dtuid %s parsing diag mop = %s",device.uplink.props.id,json.encode(ack))\n\tctx:notify(json.encode(result))\nend\n\n--需要配置更新\nupdate_config = function()\n --log.debug("fs_node2_mop: update_config device=%s",json.encode(device))\n\tlocal str= toHexStr(json.encode(device))\n\tstr=iota.appendHexCrc(str, 'B' ,0)\n\tlocal crc = string.sub(str,-4,-1)\n local linkcnt = #(device.dnlinks)\n local req = {\n type = "idau",\n payload = ""\n }\n local req_sensor={\n type = "idau",\n payload = ""\n }\n local mop_sensor = {\n M = "c_sensor",\n O = "S",\n P = {\n\t\t\tnetwork ={},\n\t\t\tsensors = {}\n\t\t} -- 荷载\n } \n local req_diag={\n type = "idau",\n payload = ""\n }\n\n\n\tlocal dmodel = 0 \n\tif tostring(device.uplink.props.dm) == 'MOP' then\n\t\tdmodel = 1\n\tend\n\tlog.debug("fs_node2:network")\n\t--采集间隔下移到传感器\n\tlocal networks={\n\t\tDI = tonumber(device.uplink.props.dis) or 5, -- 设备属性: 采集间隔. 默认30分钟\n\t\tCD = tonumber(device.uplink.props.cd) or 30,--冷起延迟(秒)\n\t\tWD = tonumber(device.uplink.props.wd) or 60,--热起延迟(秒)\n\t\tDM = dmodel --数据上传模式(0=文件,1=mop)\n\t}\n \tmop_sensor.P.network= networks\n\n\t--配置Json构建\n for i = 1, linkcnt, 1 do -- 一个link, 一个节点\n\t\t--log.debug("fs_node2_mop: update_config linkcnt=%d",linkcnt)\n local link = device.dnlinks[i]\n local devicecnt = #(link.devices) --传感器或者空气采集仪\n\t\t--log.debug("fs_node2_mop: update_config devicecnt=%d",devicecnt)\n\t\tfor k = 1,devicecnt,1 do\n\t\t\tlocal isoxy = false\n\t\t\tif device.dnlinks[i].devices[k].props.sensortype == "kq" then\n\t\t\t\tisoxy = true\n\t\t\tend\n\t\t\tif isoxy then\n\t\t\t\tlocal oxycount = 0\n\t\t\t\tlocal channeltable = {}\n\t\t\t\tlocal nametable = {}\n\t\t\t\tlocal pctable = {}\n\t\t\t\tlocal posttable = {}\n\t\t\t\tlocal pretable = {}\n\t\t\t\tlocal paramtable = {}\n\t\t\t\tif device.dnlinks[i].devices[k].props.aqi_rd == "true" then\n\t\t\t\t\toxycount = oxycount + 1\n\t\t\t\t\ttable.insert(channeltable,2)\n\t\t\t\t\ttable.insert(nametable,"AQI模组")\n\t\t\t\t\ttable.insert(pctable,device.dnlinks[i].devices[k].props.aqi_pc)\n\t\t\t\t\ttable.insert(posttable,device.dnlinks[i].devices[k].props.aqi_post)\n\t\t\t\t\ttable.insert(pretable,device.dnlinks[i].devices[k].props.aqi_pre)\n\t\t\t\t\tlocal tabledata = {}\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.aqi_p1)\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.aqi_p2)\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.aqi_p3)\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.aqi_p4)\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.aqi_p5)\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.aqi_p6)\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.aqi_p7)\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.aqi_p8)\n\t\t\t\t\tparamtable[oxycount] = tabledata\n\t\t\t\tend\n\t\t\t\tif device.dnlinks[i].devices[k].props.pm10_rd == "true" then\n\t\t\t\t\toxycount = oxycount + 1\n\t\t\t\t\ttable.insert(channeltable,5)\n\t\t\t\t\ttable.insert(nametable,"PM2.5,PM10模组")\n\t\t\t\t\ttable.insert(pctable,device.dnlinks[i].devices[k].props.pm10_pc)\n\t\t\t\t\ttable.insert(posttable,device.dnlinks[i].devices[k].props.pm10_post)\n\t\t\t\t\ttable.insert(pretable,device.dnlinks[i].devices[k].props.pm10_pre)\n\t\t\t\t\tlocal tabledata = {}\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.pm10_p1)\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.pm10_p2)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\tparamtable[oxycount] = tabledata\n\t\t\t\tend\n\t\t\t\tif device.dnlinks[i].devices[k].props.pm100_rd == "true" then\n\t\t\t\t\toxycount = oxycount + 1\n\t\t\t\t\ttable.insert(channeltable,1)\n\t\t\t\t\ttable.insert(nametable,"PM100模组")\n\t\t\t\t\ttable.insert(pctable,device.dnlinks[i].devices[k].props.pm100_pc)\n\t\t\t\t\ttable.insert(posttable,device.dnlinks[i].devices[k].props.pm100_post)\n\t\t\t\t\ttable.insert(pretable,device.dnlinks[i].devices[k].props.pm100_pre)\n\t\t\t\t\tlocal tabledata = {}\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.pm100_p1)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\tparamtable[oxycount] = tabledata\n\t\t\t\tend\n\t\t\t\tif device.dnlinks[i].devices[k].props.gps_rd == "true" then\n\t\t\t\t\toxycount = oxycount + 1\n\t\t\t\t\ttable.insert(channeltable,3)\n\t\t\t\t\ttable.insert(nametable,"GPS模组")\n\t\t\t\t\ttable.insert(pctable,device.dnlinks[i].devices[k].props.gps_pc)\n\t\t\t\t\ttable.insert(posttable,device.dnlinks[i].devices[k].props.gps_post)\n\t\t\t\t\ttable.insert(pretable,device.dnlinks[i].devices[k].props.gps_pre)\n\t\t\t\t\tlocal tabledata = {}\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\tparamtable[oxycount] = tabledata\n\t\t\t\tend\n\t\t\t\tif device.dnlinks[i].devices[k].props.am2305_rd == "true" then\n\t\t\t\t\toxycount = oxycount + 1\n\t\t\t\t\ttable.insert(channeltable,4)\n\t\t\t\t\ttable.insert(nametable,"AM2305模组")\n\t\t\t\t\ttable.insert(pctable,device.dnlinks[i].devices[k].props.am2305_pc)\n\t\t\t\t\ttable.insert(posttable,device.dnlinks[i].devices[k].props.am2305_post)\n\t\t\t\t\ttable.insert(pretable,device.dnlinks[i].devices[k].props.am2305_pre)\n\t\t\t\t\tlocal tabledata = {}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\tparamtable[oxycount] = tabledata\t\n\t\t\t\tend\n\t\t\t\tfor l = 1, oxycount, 1 do\t\t\t\t\n\t\t\t\t\t--log.debug("fs_node2: dnjson oxycount=%d",oxycount)\n\t\t\t\t\tlocal sen = device.dnlinks[i].devices[k]\n\t\t\t\t\t--log.debug("fs_node2: dnjson sen.ID=%s",tostring(sen.id)..tostring(channeltable[l]))\n\t\t\t\t\t--log.debug("fs_node2: dnjson sen.PA.SC=%s",json.encode(paramtable))\n\t\t\t\t\t--log.debug("fs_node2: dnjson sen.PA.SC=%s",paramtable[l][1])\n\t\t\t\t\t\n\t\t\t\t\tlocal sensor = {\n\t\t\t\t\t\tID = tostring(sen.id)..tostring(channeltable[l]),--传感器ID\n\t\t\t\t\n\t\t\t\t\t\tPA ={ --物理地址\n\t\t\t\t\t\t\tSC= channeltable[l] or 0,--通道号\n\t\t\t\t\t\t\tM= channeltable[l] or 0--模块号: 485端口模块号 \n\t\t\t\t\t\t\t--SC=,-- 子通道号: 485端口子通道号\n\t\t\t\t\t\t}, \n\t\t\t\t\t\tN = nametable[l], --传感器说明\n\t\t\t\t\t\t--DIS = tonumber(sen.uplink.props.dis) or 1,--采样间隔系数. 默认1=\t\t\t\t\t\n\t\t\t\t\t\tPN = tonumber(pctable[l]) or 0 ,--协议号: 和安心云DAC解码协议保持一致.\n\t\t\t\t\t\tEN = tonumber(1), --是否启用\n\t\t\t\t\t\tED = tonumber(posttable[l]) or 0, --执行前延迟(485作用)\n\t\t\t\t\t\tRD = tonumber(pretable[l]) or 0,--读取前延迟\n\t\t\t\t\t\tCF = "",--公式编码, 485平台计算为空\n\t\t\t\t\t\tCP = { --计算参数, 按顺序提供必需参数. \n\t\t\t\t\t\t\t\ttonumber(paramtable[l][1]) or 0,\n\t\t\t\t\t\t\t\ttonumber(paramtable[l][2]) or 0,\n\t\t\t\t\t\t\t\ttonumber(paramtable[l][3]) or 0,\n\t\t\t\t\t\t\t\ttonumber(paramtable[l][4]) or 0,\n\t\t\t\t\t\t\t\ttonumber(paramtable[l][5]) or 0,\n\t\t\t\t\t\t\t\ttonumber(paramtable[l][6]) or 0,\n\t\t\t\t\t\t\t\ttonumber(paramtable[l][7]) or 0,\n\t\t\t\t\t\t\t\ttonumber(paramtable[l][8]) or 0\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t--log.debug("fs_node2: dnjson sensors=%s",json.encode(sensor))\n\t\t\t\t\ttable.insert(mop_sensor.P.sensors, sensor)\n\t\t\t\tend\n\t\t\t\t--log.debug("fs_node2: dnjson sensors=%s",json.encode(mop_sensor.P.sensors))\n\t\t\telse\n\t\t\t\tfor j = 1, devicecnt, 1 do\t\t\t\t\n\t\t\t\t\tlocal sen = device.dnlinks[i].devices[j]\t\t\t\t\n\t\t\t\t\tlocal sensor = {\n\t\t\t\t\t\tID = tostring(sen.id),--传感器ID\n\t\t\t\t\n\t\t\t\t\t\tPA ={ --物理地址\n\t\t\t\t\t\t\tSC= tonumber(sen.uplink.props.channel) or 0,--通道号\n\t\t\t\t\t\t\tM= tonumber(sen.uplink.props.module) or 0--模块号: 485端口模块号 \n\t\t\t\t\t\t\t--SC=,-- 子通道号: 485端口子通道号\n\t\t\t\t\t\t}, \n\t\t\t\t\t\tN = sen.name, --传感器说明\n\t\t\t\t\t\t--DIS = tonumber(sen.uplink.props.dis) or 1,--采样间隔系数. 默认1=\t\t\t\t\t\n\t\t\t\t\t\tPN = tonumber(sen.props.protocolcode) or 0 ,--协议号: 和安心云DAC解码协议保持一致.\n\t\t\t\t\t\tEN = tonumber(sen.uplink.props.enabled =="false" and 0 or 1), --是否启用\n\t\t\t\t\t\tED = tonumber(sen.uplink.props.postdelay) or 0, --执行前延迟(485作用)\n\t\t\t\t\t\tRD = tonumber(sen.uplink.props.predelay) or 0,--读取前延迟\n\t\t\t\t\t\tCF = "",--公式编码, 485平台计算为空\n\t\t\t\t\t\tCP = { --计算参数, 按顺序提供必需参数. \n\t\t\t\t\t\t\t\ttonumber(sen.props.p1) or 0,\n\t\t\t\t\t\t\t\ttonumber(sen.props.p2) or 0,\n\t\t\t\t\t\t\t\ttonumber(sen.props.p3) or 0,\n\t\t\t\t\t\t\t\ttonumber(sen.props.p4) or 0,\n\t\t\t\t\t\t\t\ttonumber(sen.props.p5) or 0,\n\t\t\t\t\t\t\t\ttonumber(sen.props.p6) or 0,\n\t\t\t\t\t\t\t\ttonumber(sen.props.p7) or 0,\n\t\t\t\t\t\t\t\ttonumber(sen.props.p8) or 0\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttable.insert(mop_sensor.P.sensors, sensor)\n\t\t\t\tend\n\t\t\tend\n\t\t\t--log.debug("fs_node2_mop: bulid OK=%s",sensorcnt)\n\t\tend\n\t\t--log.debug("fs_node2_mop: bulid OK=%s",sensorcnt)\n end\n\n\treq_sensor.payload= json.encode(mop_sensor)\n\tlog.debug("fs_node2 dtuid=%s 下发配置requestsensor=%s",device.uplink.props.id, json.encode(req_sensor))\n\tlocal ok, ack = ctx:ssend(req_sensor, 4000)\n \tlog.debug("fs_node2 dtuid=%s 下发配置返回req_sensor ssend ack:%s ok:%s",device.uplink.props.id,json.encode(ack),ok)\n\tif ok == true then\n\t\tlocal str= toHexStr(json.encode(device))\n\t\tstr=iota.appendHexCrc(str, 'B' ,0)\n\t\tlocal crc = string.sub(str,-4,-1)\n\t\tlog.debug("fs_node2 : crc2= %s",crc)\n\t\tredis.set(device.id.."_fdset", tostring(crc))\n\tend\n result = {\n result = nil,\n type = 1,\n data = {\n ack = json.encode(ack)\n }\n }\n\t--log.debug("fs_node2 : ack= %s",result.data.ack)\n ctx:notify(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n if t == "host" then\n return 1\n elseif t == "relay" then\n return 2\n end\n return 3\nend\n\n--处理wakeup\nfunction deal_mop_wakeup(msg,cfg,vercfg,diag)\n local wakeup_req = {\n type = "idau",\n \tack =true,\n \tid =msg.id,\n payload = ""\n }\n local mop_wakeup = {\n M = "c_wakeup",\n P = {\n updatecfg = cfg,\n updatefw = vercfg,\n\t\t\tupdatediag = diag\n } -- 荷载\n }\n\twakeup_req.payload = json.encode(mop_wakeup)\n \tlog.debug("fs_node2:dtuid=%s deal_mop_wakeup=%s",device.uplink.props.id, json.encode(wakeup_req))\n\tlocal ok,ack=ctx:ssend(wakeup_req,3000)\nend\n\nCombineData=function(datas)\n\t\n\tlocal datatable={\n\t\tdata={\n\n\t\t\t},\n\t\tdevice=oxygendevice.id,\n\t\ttype=1\n\t}\n\tlocal timedate = nil\n\tfor k,v in pairs(datas) do\n\t\tif tostring(v.type) == "am2305" then\n\t\t\tdatatable.data.temperature = tonumber(v.data.temp)\n\t\t\tdatatable.data.humidity = tonumber(v.data.hum)\t\t\t\n\t\telseif tostring(v.type) == "pm100" then\n\t\t\tdatatable.data.pm100 = tonumber(v.data.pm100)\n\t\telseif tostring(v.type) == "pm10" then\n\t\t\tdatatable.data.pm2_5 = tonumber(v.data.pm25)\n\t\t\tdatatable.data.pm10 = tonumber(v.data.pm10)\n \t\ttimedate = v.time\n\t\telseif tostring(v.type) == "gps" then\n\t\t\tdatatable.data.longitude = tonumber(v.data.long)\n\t\t\tdatatable.data.latitude = tonumber(v.data.lang)\n\t\t\t--datatable.data.time = v.data.time_bj\n\t\telseif tostring(v.type) == "aqi" then\n\t\t\tdatatable.data.so2 = tonumber(v.data.SO2)\n\t\t\tdatatable.data.no2 = tonumber(v.data.NO2)\n\t\t\tdatatable.data.o3 = tonumber(v.data.O3)\n\t\t\tdatatable.data.co = tonumber(v.data.CO)/1000\n\t\t\tdatatable.data.voc= tonumber(v.data.VOC)\n\t\tend\n\tend\n\tdatatable.time = timedate\n\t--log.debug("fs_node2: imerdate = %s",tostring(timedate))\n\t--log.debug("fs_node2:DataTable = %s",json.encode(datatable))\n\ttable.insert(out.data,datatable)\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend \n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend INLINE 2019-01-29 10:15:21.503+08 2020-09-27 17:37:21.395+08 2019-01-29 \N
+94b82699-1d71-4853-aecc-891554e0b963 FS_lLVDT_9101 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//协议参考: Documents/PMO/02 产品协议/外购产品协议/拉线位移通讯协议2013.doc\nstart=function()\n local moduleNo=device.uplink.props.module \n\tif tonumber(moduleNo) > 255 then\n local errout={\n data ={},\n result = {code = 1004,msg = '无效的模块号>255'}\n }\n\n local errresult = json.encode(errout)\n ctx:done(errresult)\n end\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 0x03, endian)\n buff=iota.appendHexWord(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n \tbuff=iota.appendHexByte(buff, 0x01, endian) --1: CMD 1\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n end\n ctx:done(result)\nend\n\n--070302ffdf302c module=7\n--"length": -3.0\nunmarshall=function(hex,moduleNoStr)\n log.debug("fs_lvdt_9101 ata=%s",hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n -- 170302fffd71f6\n \n local elongation = iota.hexToShort(hex,3,'B')/10\n out.data = {\n length=elongation\n }\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data,moduleNoStrCheck)\n log.debug(string.sub(data,1,12))\n if data == nil or string.len(data) ~= 14 or iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = string.format('无效的数据,长度≠14 或CMD≠0x03')\n errcode = 1002\n return false\n end\n local checkModule=iota.hexToByte(data,0,'B')\n if moduleNoStrCheck ~= tostring(checkModule) then\n errormsg = string.format('无效的模块号=%s≠%s',checkModule,moduleNoStrCheck)\n errcode = 1004\n return false\n end\n return true\nend\n \n\n\n INLINE 2019-11-21 13:56:28.046+08 2019-11-21 13:59:09.416+08 2019-11-21 \N
+3dbcecc3-94de-4b19-b3fc-4ee1220c4e79 anXin_acc_2006 \N 安信加速度 请求应答 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0xFF, endian) --1: 帧头\n buff=iota.appendHexByte(buff, 0x41, endian)\n buff=iota.appendHexByte(buff, 0x58, endian)\n buff=iota.appendHexByte(buff, 0x4a, endian)\n buff=iota.appendHexWord(buff, 9, endian) -- 2: 类型=1\n buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 3: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 4: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 5: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,4000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==46) then\n local xData = iota.hexToFloat(hex,9,'B');\n local yData = iota.hexToFloat(hex,13,'B');\n local zData = iota.hexToFloat(hex,17,'B');\n out.data = {\n xDgree=xData,\n yDgree=yData,\n zDgree=zData\n }\n \n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2017-09-01 17:14:19.066+08 2019-12-24 10:51:36.356+08 2017-09-01 \N
+e9f04fcd-34ad-4e77-919a-cce8ac4c19e9 Sound&Light_Alarm \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug('Sound&Light_Alarm =%s', json.encode(device))\n \tlocal paramData = capability.param\n log.debug('Sound&Light_Alarm paramData=%s',paramData)\n \n local hexCmd_soundLight='7eff063a008100fe40ef'\n \n if paramData=='1' then --只播放一遍\n\t\thexCmd_soundLight='7eff063a000100ef'\n --hexCmd_soundLight='7eff063a000100fe40ef'\n end\n \n ok = ctx:asend(hexCmd_soundLight)\n local out={\n data ={paramData=paramData},\n result = {}\n }\n local resultData1= json.encode(out)\n ctx:done(resultData1)\nend\nonData=function(data)\n local out={\n data ={},\n result = {}\n }\n log.debug('Sound&Light_Alarm receiveData=%s',data)\n local data1 = {\n data = {\n hex = data\n },\n }\n table.insert(out.data, data1)\n local resultData= json.encode(out)\n ctx:notify(resultData)\nend INLINE 2019-08-19 10:01:38.978+08 2020-08-04 17:16:17.365+08 2019-08-19 \N
+8433558f-70af-4169-92f9-e1a6413d6801 anXin_acc \N 安信加速度 主动上报 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start=function()\n log.debug("anXin_acc.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n local moduleStr=device.uplink.props.module\n log.debug("anXin_acc [%s] Data, ctx=%s",moduleStr,hex)\n local out={\n data ={},\n result = {}\n\t\n }\n \n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n\t \n \n\t\tlocal xData = iota.hexToFloat(hex,24,'B');\n local yData = iota.hexToFloat(hex,28,'B');\n local zData = iota.hexToFloat(hex,32,'B');\n\t local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anXin_acc timeStr=%s",timeStr)\n dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anXin_acc dateTimeStr=%s",dateTimeStr)\n timenow = unixtimestamp(dateTimeStr)\n\t\t\t\t\n\t\t out={\n\t\t\t\t data={ \n\t\t\t\t xDgree=xData,\n yDgree=yData,\n zDgree=zData\n\t\t\t\t },\n\t\t\t\t\ttime=timenow\n\t\t\t\t }\n \n \n \n \n \t\n local resultData =json.encode(out)\n log.debug("anXin_acc [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = errcode, msg = errormsg}\n ctx:done(json.encode(out))\n end \nend\n\nIsValid=function(data,deviceModule)\n if data == nil then\n errormsg = 'anXin_acc:Data is nil'\n errcode = 1001\n \tlog.debug("anXin_acc [%s] %s",deviceModule,errormsg)\n return false\n end\n\n local dataModule= iota.hexToShort(data,6,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('anXin_acc module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("anXin_acc [%s] %s",deviceModule,errormsg)\n return false\n end\n\n log.debug("anXin_acc [%s] 校验通过",deviceModule)\n return true\n \nend\n \nunixtimestamp = function(datestr)\n \n local year = tonumber(string.sub(datestr,1,4))\n local month = tonumber(string.sub(datestr,5,6))\n local day = tonumber(string.sub(datestr,7,8))\n local hour = tonumber(string.sub(datestr,9,10))\n local minute = tonumber(string.sub(datestr,11,12))\n local second = tonumber(string.sub(datestr,13,14))\n\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2019-12-24 11:00:12.914+08 2019-12-24 11:00:12.914+08 2019-12-24 \N
+ea741512-cf76-4546-8b90-3cea1faf6018 anxin_file_transfer \N dx,dat 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start=function()\n\tlog.debug("anxin_file_transfer : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n\tif data ~=nil then\n\t\tif data.type == "idau/file" then\n\t\t\tif data.ext==".d" or data.ext==".dx" then\n\t\t\t\tlog.debug("anxin_file_transfer : recvd content = %s",data.payload)\n\t\t\t\tParseFileD(data.payload)\n\t\t\t\t--else\n\t\t\t\t--log.error("anxin_file_transfer : unsupported file type: %s", data.ext)\n\t\t\tend\n\t\t\tif data.ext==".dat" then\n\t\t\t\t--log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n\t\t\t\tParseFileDat(data.payload)\n\t\t\t\t--else\n\t\t\t\t--log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n\t\t\tend\n\t\telse\n\t\t\tlog.error("anxin_file_transfer : content type is not file, error recvd type is %s", data.type)\n\t\tend\n\telse\n\t\tlog.error("anxin_file_transfer : recvd content is nil")\n\tend\nend\n\nfunction ParseFileDat(dathex)\n\tlog.debug("anxin_file_transfer : datlen=%s" , string.len(dathex))\n\tlocal out={\n\t\tdata ={},\n\t\tresult = {},\n\t\ttype=2\n\t}\n\tlocal offset = 0\n\tlocal t = iota.hexToShort(dathex,offset,'B')\n\toffset = offset + 2\n\tlocal l = iota.hexToShort(dathex,offset,'B')\n\toffset = offset + 2\n\tlocal version = iota.hexToByte(dathex,offset,'B') -- 版本号\n\toffset = offset + 1\n\tlocal channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n\toffset = offset + 1\n\tlocal deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n\tlocal subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n\tif subdevice ~= nil then\n\t\toffset = offset + 2\n\t\tlocal samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n\t\toffset = offset + 4\n\t\tlocal filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n\t\toffset = offset + 4\n\t\tlocal gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n\t\toffset = offset + 1\n\t\tlocal triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n\t\toffset = offset + 1\n\t\tlocal year = iota.hexToByte(dathex,offset,'B')+2000\n\t\toffset = offset + 1\n\t\tlocal mon = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal day = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal hour = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal min = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal sec = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\toffset = offset + 12\n\t\tlocal Ldata = iota.hexToInt(dathex,offset,'B')\n\t\toffset = offset + 4\n\t\tlog.debug("anxin_file_transfer deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n\t\tlocal strLen = string.len(dathex)\n\t\tlocal floatcount = (strLen/2-40)/4\n\t\tlog.debug("anxin_file_transfer begin parse")\n\t\tlocal vols = {}\n\t\tfor i= 1, floatcount do\n\t\t\t--offset=40+(i-1)*4\n\t\t\tlocal subdat=string.sub(dathex,73+i*8,80+i*8)\n\t\t\t\n -- if pos >= strLen then\n -- log.debug("anxin_file_transfer outofrange offset=%s floatcount=%s, strlen=%s",offset, floatcount, strLen)\n -- end\n\t\t\tvols[i]= iota.hexToFloat(subdat,0,'L',6)\n\t\tend\n\t\tlog.debug("anxin_file_transfer finish parse")\n\n\t\tlocal rst = {\n\t\t\tdata={\n\t\t\t\t_data_type='vib',\n\t\t\t\tphysicalvalue=vols,\n\t\t\t\tsampleFreq=samplefreq,\n\t\t\t\tfilterFreq=filterfreq,\n\t\t\t\tgainAmplifier=gainamplifier,\n\t\t\t\ttriggerType=triggertype,\n\t\t\t\tversion=version\n\t\t\t},\n\t\t\tdevice=subdevice.id,\n\t\t\ttype=1,\n\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))\n\t\t}\n\t\ttable.insert(out.data,rst)\n\t\tlog.debug("anxin_file_transfer deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n\t\tctx:notify(json.encode(out))\n\telse\n\t\tlog.debug("anxin_file_transfer not found device module=%s channel=%s",deviceId,channel)\n\tend\nend\n\nfunction ParseFileD(content)\n\tlocal out={\n\t\tdata ={},\n\t\tresult = {},\n\t\ttype=2\n\t}\n\tlog.debug("anxin_file_transfer : content =%s", content)\n\tlocal jsons=Split(content,'\\r')\n\tfor k,v in pairs(jsons) do\n\t\tif v~=nil and v~='' then\n\t\t\tlocal jsondata = json.decode(v)\n\t\t\tif jsondata~=nil and jsondata ~='' then\n\t\t\t\tlocal childDevice=getDeviceInfo(jsondata.M,jsondata.C)\n\t\t\t\tif childDevice ~=nil then\n\t\t\t\t\tlog.debug("anxin_file_transfer 设备类型=%s,%s",childDevice.props.sensortype,json.encode(childDevice))\n\t\t\t\t\tif childDevice.props.sensortype=='gnss' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tx = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\ty = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\tz = jsondata.RV[3] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n \t\t\tif childDevice.props.sensortype=='gnss_t500' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tx = jsondata.PV[1] or 0,\n\t\t\t\t\t\t\t\ty = jsondata.PV[2] or 0,\n\t\t\t\t\t\t\t\tz = jsondata.PV[3] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000)-3600*8)\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='zd' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tppv = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\tpv = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\trms = jsondata.RV[3] or 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("anxin_file_transfer:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\n\t\t\t\t\tif childDevice.props.sensortype=='gdgs' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twavelength = jsondata.RV[1],\n\t\t\t\t\t\t\t\tphysicalvalue= jsondata.PV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("anxin_file_transfer:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='standard485' then\n\t\t\t\t\t\tlog.debug("anxin_file_transfer standard485=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tphysicalvalue= jsondata.PV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("anxin_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tlog.debug("anxin_file_transfer line=%s childDevice is nil",k)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\tlog.debug("anxin_file_transfer: dataresult: %s", json.encode(out))\n\tctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n\tlog.debug("anxin_file_transfer:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n\tif device.dnlinks ~= nil then\n\t\tlocal subdevices = device.dnlinks[1].devices\n\t\tfor i,subdevice in pairs(subdevices) do\n\n\t\t\tlocal submodule=subdevice.uplink.props.module\n\t\t\t--判断是否是3层采集仪结构\n\t\t\tif json.encode(subdevice.dnlinks)~="{}" then\n\t\t\t\tlog.debug("baian_file_transfer:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n\t\t\t\tfor k,sublink in pairs(subdevice.dnlinks) do\n\t\t\t\t\t--log.debug("baian_file_transfer:sublink=%s",json.encode(sublink))\n\t\t\t\t\tfor u,sub_subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t--log.debug("baian_file_transfer:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\tlocal sensormodule=sub_subdevice.uplink.props.module\n\t\t\t\t\t\tlocal sensorchannel=sub_subdevice.uplink.props.channel\n\t\t\t\t\t\tif tostring(sensormodule) == tostring(moduleid) and tonumber(sensorchannel)==tonumber(channel) then\n\t\t\t\t\t\t\tlog.debug("baian_file_transfer:m=%s,c=%s 3 拜安匹配到设备=%s",moduleid,channel,json.encode(sub_subdevice))\n\n\t\t\t\t\t\t\treturn sub_subdevice\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlog.debug("baian_file_transfer:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\telse\n\n\t\t\t\tlocal subchannel=subdevice.uplink.props.channel\n\t\t\t\tlog.debug("anxin_file_transfer:两层结构 m=%s,c=%s 设备=%s",submodule,subchannel,json.encode(subdevice))\n\t\t\t\tif tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then\n\t\t\t\t\tlog.debug("anxin_file_transfer:m=%s,c=%s 2安信匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n\t\t\t\t\treturn subdevice\n\t\t\t\telse\n\t\t\t\t\tlog.debug("anxin_file_transfer has no device module=%s channel=%s,[submodule=%s,subchannel=%s]",moduleid,channel,submodule,subchannel)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tlog.debug("anxin_file_transfer has no device module=%s channel=%s",moduleid,channel)\n\t\treturn nil -- 没有找到匹配的传感器\n\telse\n\t\tlog.debug("anxin_file_transfer has no subdevices.")\n\t\treturn nil -- 没有子设备\n\tend\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n\tlocal nFindStartIndex = 1\n\tlocal nSplitIndex = 1\n\tlocal nSplitArray = {}\n\twhile true do\n\t\tlocal nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n\t\tif not nFindLastIndex then\n\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n\t\t\tbreak\n\t\tend\n\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n\t\tnFindStartIndex = nFindLastIndex + string.len(szSeparator)\n\t\tnSplitIndex = nSplitIndex + 1\n\tend\n\treturn nSplitArray\nend\n\n INLINE 2018-03-27 14:34:11.322+08 2020-09-11 15:03:33.07+08 2018-03-27 \N
+bcca6d57-3df9-4b61-8c7a-71402f47b612 test_dahua_meter \N 测试大华电表 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua -- 测试通过\n\nonData=function (httpRecv) --httpRecv \n\t--主动上传式\n local out={\n\ttype = 1,\n\tdata ={},\n\tresult = {},\n }\n log.debug("dahuaMeter type helloWorld test")\n log.debug("dahuaMeter type = %s httpRecv => %s", type(httpRecv),httpRecv) -- httpRecv表,包含Body,eventTime, ID\n if nil == httpRecv.Body then\n local message = 'Invalid Msg'\n out.result = {code=1001,msg=message}\n out.data = {}\n else\n local httpBodyStr = httpRecv.Body \n log.debug("dahuaMeter type = %s httpBodyStr => %s", type(httpBodyStr), json.encode(httpBodyStr)) -- httpBodyStr字符串\n local httpBody = json.decode(httpBodyStr)\n log.debug("dahuaMeter type = %s httpBody => %s", type(httpBody), json.encode(httpBody)) -- httpBody表,包含 data等\n \n if nil == httpBody.service.data then\n local message = 'Invalid Msg httpBody.service.data is nil'\n out.result = {code=1001,msg=message}\n out.data = {}\n else\n local bodyService = httpBody.service \n log.debug("dahuaMeter type = %s bodyService => %s", type(bodyService), json.encode(bodyService)) -- bodyService表\n\n local bodyServiceData = bodyService.data\n log.debug("dahuaMeter type = %s bodyServiceData => %s", type(bodyServiceData), json.encode(bodyServiceData)) -- \n if nil == bodyServiceData.Length or nil == bodyServiceData.Value or nil == bodyService.eventTime then\n local message = 'Invalid Msg '\n out.result = {code=1001,msg=message}\n out.data = {}\n else\n local dataLength = bodyServiceData.Length\n if 95 > dataLength then\n local message = 'Invalid Msg heart pack'\n out.result = {code=1001,msg=message}\n out.data = {}\n else\n local heartPackStr = bodyServiceData.Value\n log.debug("dahuaMeter type = %s heartPackStr=>%s", type(heartPackStr), heartPackStr) -- heartPacketStr ==> "Heart Pack,53F33333,3518B8B8CCCC,33183333333333,63E9333333,44E95756,54E93433,43C348473333,csq:03"\n\n local dateStr = bodyService.eventTime\n log.debug("dahuaMeter type = %s dateStr=>%s", type(dateStr), dateStr)\n recvTime = dateStrToDate(dateStr)\n log.debug("dahuaMeter type = %s recvTime=>%s", type(recvTime), json.encode(recvTime)) \n -- 分割成表\n local delim = ","\n local heartPackTab = split(heartPackStr, delim)\n log.debug("dahuaMeter type = %s heartPackTab=>%s", type(heartPackTab), json.encode(heartPackTab)) \n -- 处理heartPack数据(减去33H,并倒置)\n local handledData = {}\n for i = 1, 7 do\n handledData[i] = handle(heartPackTab[i + 1])\n end\n log.debug("dahuaMeter type = %s handledData=>%s", type(handledData), json.encode(handledData)) \n\n out.data = {\n statusWord = table.concat(handledData[1], "", 1, 2),\n remainAnergy = tonumber(table.concat(handledData[2], "", 1, 4)) / 100,\n purchaseAnergy = tonumber(table.concat(handledData[3], "", 1, 3)) / 100,\n purchaseTimes = tonumber(table.concat(handledData[3], "", 4, 5)),\n instantActivePower = tonumber(table.concat(handledData[4], "", 1, 3)) / 10000,\n APhaseVoltage = tonumber(table.concat(handledData[5], "", 1, 2)) / 10,\n APhaseCurrent = tonumber(table.concat(handledData[6], "", 1, 2)) / 100,\n totalPower = tonumber(table.concat(handledData[7], "", 1, 4)) / 100,\n }\n log.debug("dahuaMeter out.data=>%s", json.encode(out.data))\n out["divice"] = httpRecv.ID\n out["time"] = recvTime\n end\n end\n end\n end\n \n ack = {type = 'http', code = 200, body = 'ok'}\n ctx:asend(ack)\n local resultData = json.encode(out)\n ctx:notify(resultData)\nend\n\n\n-- 将字符串分割成表\nsplit=function(s, delim)\n if type(delim) ~= "string" or string.len(delim) <= 0 then\n return\n end\n\n local start = 1\n local t = {}\n while true do\n local pos = string.find(s, delim, start, true) -- plain find\n if not pos then\n break\n end\n\n table.insert (t, string.sub (s, start, pos - 1))\n start = pos + string.len (delim)\n end\n table.insert (t, string.sub (s, start))\n\n return t\nend\n\n\n-- @将数据去掉标识位,减去33H,并且倒置 43C3AC6B3333 ==> 00003879\n-- @传入参数recvTables收到的原始数据\n-- @返回值为处理好的数据表\nhandle = function(dataStr)\n\tlocal result = {}\n\tlen = #dataStr\n\tprint("lenth is %d", len)\n\tfor i = 1, len - 4, 2 do\n local tmpStr = string.sub(dataStr, -(i + 1), -i)\n --log.debug("dahuaMeter type = %s tmpStr=>%s", type(tmpStr), json.encode(tmpStr))\n tmpStr = "0x"..tmpStr\n -- log.debug("dahuaMeter type = %s string.format=>%s", type(string.format("%#2x", tmpStr - 0x33)), json.encode(string.format("%02x", tmpStr - 0x33)))\n local Str = string.sub(string.format("%02x", tmpStr - 0x33), 1, 2)\n --log.debug("dahuaMeter type = %s Str=>%s", type(Str), json.encode(Str))\n\t\ttable.insert(result, Str)\n\tend\n\treturn result\nend\n\n-- 转换时间格式\ndateStrToDate=function(dateStr)\n -- 20191121T013415Z\n local year = tonumber(string.sub(dateStr,1,4));\n\tlocal month = tonumber(string.sub(dateStr,5,6));\n\tlocal day = tonumber(string.sub(dateStr,7,8));\n local hour = tonumber(string.sub(dateStr,10,11));\n local minute = tonumber(string.sub(dateStr,12,13));\n local second = tonumber(string.sub(dateStr,14,15));\n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%SZ",timenum)\n\treturn recordTime\nend\n\n INLINE 2019-11-19 11:31:14.055+08 2019-12-04 15:46:19.736+08 2019-11-19 \N
+74d1b296-4f53-442e-84f0-f0bfbd6358af FS-FSFXY-Z \N 风速风向-z协议 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n协议号: 1.0;\n协议名: FS-FSFXY-Z\n]]--liankang\nstart=function ()\n log.debug("FSFSFXYZ start %s, ctx=%s", "Inclination_Sensor.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("FSFSFXYZ encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("FSFSFXYZ decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0x82, BE); -- 主从标志 82\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE); -- 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x02, BE); -- 长度指令 02\n\tbuff=iota.appendHexByte(buff, 0x01, BE); -- 指令号\n buff=iota.appendHexByte(buff, 0x00, BE); -- 操作码\n\tbuff=iota.appendHexByte(buff, 0x00, BE); \n\tbuff=iota.appendHexByte(buff, 0x05, BE); -- 读取寄存器数量 00 05\n\tlocal crcHex = CheckXor(buff);\n buff=iota.appendHexByte(buff, crcHex, BE); -- CRC1\t\n log.debug("FSFSFXYZ buff = "..buff) \n\treturn buff \nend\n\n-- decode \n-- returns: 结果 "windDirection": 18.04,"windSpeed": 18.04\n-- 正确回复 86010C01001F000000000000000000000000419051EC419051EC0000000032 \nfunction protocol_decode(da)\n\t\n\tlocal dataStr = da;\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(dataStr)\n\t-- 判断数据有效性\n\tif inValid(da) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telse\n\t\tlog.debug("数据有效")\n local temperature = iota.hexToFloat(dataStr, 6, 'B', 2)\n local humidity = iota.hexToFloat(dataStr, 10, 'B', 2)\n local pressure = iota.hexToFloat(dataStr, 14, 'B', 2)\n\t\tlocal windSpeed = iota.hexToFloat(dataStr, 18, 'B', 2 )\n\t\tlocal windDirection = iota.hexToFloat(dataStr, 22, 'B', 2)\n\t\tlocal accumulatedRainfall = iota.hexToFloat(dataStr, 26, 'B', 2)\n\n\t\tout.data = {\n\t\t\twindSpeed = windSpeed,\n\t\t\twindDirection = windDirection,\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 31 or iota.hexToByte(data, 3,'B') ~= 0x01 then -- 字节长度不等于 31 或者 读第二个字节,功能码不等于01\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\t-- 校验风速风向有效性\n\tlocal checkBit = iota.hexToByte(data, 5, 'B')\n\tlog.debug("FSFSFXYZ checkBit = "..json.encode(checkBit))\n\tif 0 == bit:_and(checkBit, 0x08) then\n\t\tlog.debug("FSFSFXYZ 风速数据无效")\n\t\treturn true\n\tend\n\tif 0 == bit:_and(checkBit, 0x10) then\n\t\tlog.debug("FSFSFXYZ 风风向数据无效")\n\t\treturn true\n\tend\n\treturn false\nend\n\n\n--bit 操作\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\nend --bit:_and\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\n--异或校验\nCheckXor=function(hex) \n local len = string.len(hex)/2\n local pp = 0\n for i =0,len-1 do\n local bi = iota.hexToByte(hex,i,'B')\n pp = bit:_and(bit:_xor(bi,pp) , 0x000000ff)\n end\n return pp\nend INLINE 2019-12-12 11:28:06.36+08 2019-12-12 16:57:31.211+08 2019-12-12 \N
+c181aae9-13e2-43f6-b18b-8de08bcb6181 JM_1547777 \N 1.0 5b2dc320-50f8-4461-87fc-03b66e3e5e4c 5b2dc320-50f8-4461-87fc-03b66e3e5e4c f 5b2dc320-50f8-4461-87fc-03b66e3e5e4c Lua start=function ()\n\tlog.debug("load script %s, moduleId=%s", "JM_1547777", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlog.debug("JM_1547777:LUA:根设备devices : data is =%s", json.encode(device)) \n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("JM_1547777 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("JM_1547777 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\t\n local sr=moduleNo..'A'\n\n\n\t local str_check=getCheckStr(sr)\t\n\t buff_str= '#'..moduleNo..'A'\n\t buff=StrToHex(buff_str)..str_check\n buff=iota.appendHexByte(buff, 0x21, 'B') --0x21=!\n log.debug("JM_1547777:模块%s的采集仪采集指令=%s ",moduleNo,buff) \n\t\t\t\tlog.debug('JM_1547777:下发的buff模块%s的rbuff是:%s', buff)\n\t\t\tok, resp = ctx:ssend(buff, 60000)\n\t if ok then\t \n\t\t--log.debug("JM_1547777:模块%s的采集仪采集数据接收成功,开始解析resp=%s ",moduleNo,resp) \n result = ParseResult(resp,out,moduleNo)\t\n\t else\n \tout.result = {code=1001,msg='采集超时'} \n\t\tlog.debug("JM_1547777:模块%s的采集数据 接收失败",moduleNo) \n\t end\n local resultData =json.encode(result)\n log.debug("JM_1547777:out序列化结果 : out is =%s", resultData)\n ctx:done(resultData)\t\nend\n\n--2454323031373131303630333430ad433031a439b93230353530fc2d34333333fa3632359d433032a539b932343330398231303933cd343837a3433033a639b9323534333031323239ce3631339a433034a739b932313539398a2d33353132f8353839a6433035a839b93232313137fd2d363532ca3632359d433036a939b93335333131fd3130323634fd3633319a433037aa39b93230373030f92d31313233f4363139a0433039ac39b933303738398b36333535d33633349d433130a439b932383833368b34343131ca363339a2433131a539b93139353031802d323939398a3630389e433132a639b932353135358231303133c536303197433133a739b932373537318631383530ce36313097433134a839b93234323536832d353833cd363638a421\nParseResult=function(hex,out,moduleNoStr)\n\n\t-- 二次解析\n\tlocal devicechnum = 2 --这里标记传感器编码 数字不对\n\tlocal devicechnumdate = 3 --这里是标记传感器数据 数字不对 \n\t\n\tlocal channelDatas = {} --这个用来放传感器数据的\n\tlog.debug("JM_1547777: m=%s,接收传感器数据1111 Received=>%s",moduleNoStr,hex)\n\tlocal ErrorCode = IsValid(hex,moduleNoStr)\n\tif ErrorCode then\n\t\tlog.debug('JM_1547777:hex=%s', hex)\n\t\tlocal sr=string.sub(hex,3,-1)\n\t\tlocal sq=string.sub(sr,1,-3)\n\t\tlog.debug('JM_1547777:处理末尾hex=%s', sq)\n\t\tlocal sp='54' --这里是分割各个传感器\n\t\tlocal sArray=Split(sq,sp)\n\t\tlog.debug('JM_1547777:数组sArray=%s', json.encode(sArray))\n\t\t for k,v in pairs(sArray) do\n\t --这个是分割码流后的各个传感器的码流\n\t\t log.debug('JM_1547777:各个传感器的码流v=%s', v)\n\t\t if v~='' then \n\t\t \n\t\t local b=string.sub(v,29,44)--传感器设备编号\n\t\t log.debug('JM_1547777:传感器编号的码流b=%s', b)\n\t\t local sArrays=Splits(b) --将传感器设备编号分割成俩个\n\t\t\t\tlocal num=0 --累加计算\n\t\t\t\tfor k,vr in pairs(sArrays) do\n\t\t\t\ttennum=tonumber(vr, 16) \n\t\t\t\t\tnum=num+tennum\n\t\t\t\t\tend\n\t\t\t\tprint(num)\n\t\t\t\tlog.debug('JM_1547777:传感器编号的码流num=%s', num)\n\t\t\t\tlocal numb=num\n\t\t\t\tlog.debug('JM_1547777:传感器编号的码流和numb=%s', numb)\n\n local c=numb%128+128 --传感器校验算法\n\t\t log.debug('JM_1547777:传感器编号的码流校验值c=%s', c)\n local d=string.format("%#x",c) --校验码由10进制转化成16进制\n\t\t log.debug('JM_1547777:传感器编号的码流校验值由10进制转换成16进制d=%s', d)\n local f=string.sub(d,3,4) --计算得到校验码 截取16进制后2位\n\t\t log.debug('JM_1547777:截取传感器编号的码流校验值后俩位f=%s', f)\n\t\t log.debug('JM_1547777:已经运算到了校验码时各个传感器的码流v=%s', v)\n\t\t local bb=string.sub(v,45,46)--码流里的校验码 \n log.debug('JM_1547777:码流里的校验码bb=%s', bb) \t--感觉这块没有用\t \n\t\t local ab=string.find(v, "b0") --找到B0下标\n\t\t log.debug('JM_1547777:找到b0下标ab=%s', ab) \n\t\t local bbb=ab-5 --得到数据1最后一个字节的下标\n\t\t log.debug('JM_1547777:得到数据1最后一个字节的下标bbb=%s', bbb)\n\t\t local phy=string.sub(v,47,bbb) --得到数据1数据\n\t\t log.debug('JM_1547777:得到数据1数据phy=%s', phy) \n\t\t \n\t\t local physicalvalue=HextoStr(phy)/100 --得到数据1的ascll\n\t\t log.debug('JM_1547777:得到数据1的ascll数据physicalvalue=%s', physicalvalue) \n\n\t\t local dd=ab+2\n\t\t log.debug('JM_1547777:得到数据3字节的下标dd=%s', dd)\n local tempera=string.sub(v,dd,-3)--得到数据3的数据\n\t\t log.debug('JM_1547777:得到传感器tempera=%s', tempera)\n\t\t \n\t\t local temperature=(HextoStr(tempera)-500)/10 --得到数据3的ascll\n\t\t log.debug('JM_1547777:得到数据3的ascll tempera=%s', temperature)\n\t\t local _twophys = {physicalvalue,temperature} --物理量和温度的存放地\n\t\t local deviceids=HextoStr(b) --设备编号的ascll\n\t\t channelDatas[deviceids]=_twophys --将设备编号,传感器数据装入table表里\t \n log.debug('JM_1547777:数组channelDatas=%s', json.encode(channelDatas))\n\n\t\t end \n\t\t \n\t end\n\t\t \n\t\t \n\t\t \n\t\t for k,v in pairs(channelDatas) do\n\t\t\tlog.debug('JM_1547777:数组与下面设备连接channelDatas=%s', json.encode(channelDatas))\n\t\t\t\tlocal childDevice = getDeviceInfos(moduleNoStr, k)\n log.debug('JM_1547777 接入的子设备childDevice=%s', json.encode(childDevice))\n\t\t\t\t\t\t--phyvalue=channelDatas[k] --将表中的传感器对应编号的数据给了phyvalue\n\t\t\t\t\tphyvalue=channelDatas[k][1]\t\n\t\t\tlog.debug('JM_1547777:第一个数据中phyvalue=%s k=%s', phyvalue,k)\n\t\t\t temperature=channelDatas[k][2]\t\n\t\t\tlog.debug('JM_1547777:第二个数据中temperature=%s k=%s', temperature,k)\n\t\t\t\tif\tchildDevice~=nil then\n\t\t\t\t\tlocal data1 = {\n data = {\n physicalvalue = channelDatas[k][1],\n\t\t\t\t\t\t\ttemperature = channelDatas[k][2]\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n },\n device = childDevice.id,\n type = 1\n }\n\t\t\t\t\t table.insert(out.data, data1)\n\t\t\t\t\telse\n\t\t\t\t\tlog.debug('JM_1547777 子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\t\t\tend\n\n\t\t\t\t\t\t\n\t\t \n\t\t \n\t\t end \n\n\telse\n\t log.debug('JM_1547777 m=%s,数据校验失败',moduleNo)\n\t\tout.result = {code=errcode,msg=errormsg}\n\tend\n \treturn out\nend\nLCR = function(buff)\n log.debug('JM_1547777:lcr buff=%s', buff)\n local lcr = 0\n for i = 0, string.len(buff) / 2 - 1 do\n lcr = lcr + tonumber(string.sub(buff, 1 + 2 * i, 2 * (i + 1)), 16)\n end\n log.debug('JM_1547777:lcr累加结果%s', tonumber(lcr))\n lcr = lcr % 128 + 128\n log.debug('JM_1547777:lcr校验结果%s', lcr)\n return lcr\nend\ngetCheckStr=function(sr)\n local srlen=string.len(sr)\n local check=0\n\t for i=1,srlen,1 do\n\t local byteStr=StrToHex(string.sub(sr,i,i))\n\t\t check=check+tonumber(byteStr,16)\t \n\t end\n check=check % 128+128\n\t local checkStr\n\t checkStr=string.format("%x",check) \n\t return checkStr\nend\nGetCodelen=function(num_str,buff_response)\n local num=tonumber(num_str)\n\tlocal length=0\n\tlocal buff_length=string.len(buff_response)/2\n\tfor j=0,buff_length-num,1 do\n\t local Y_str=string.sub(buff_response,2*(num+j)+1,2*(num+j)+2)\n\t\tlocal Y=tonumber(Y_str,16)\n\t\tif Y>=128 then\n\t\t length=j\n\t\t\tbreak\n\t\tend\n\t \n\tend\n return length\nend\n\n\n\n\n\n\nIsValid=function(data,moduleNoStrCheck)\n\tlog.debug('JM_1547777 m=%s,开始校验数据 data=%s',moduleNoStrCheck,data)\n --if data == nil or string.len(data)/2 < 3 then\n -- errormsg = string.format('无效的数据,长度=%s',string.len(data)/2)\n -- errcode = 1002\n -- return false\n -- end\n\n\t--if string.sub(data,1,2) ~= '24' then\n -- -- errcode = 1003\n -- errormsg = string.format('回复数据的 帧头≠0x24[%s]',string.sub(data,1,2))\n -- return false\n -- end\t\n\t--local dataLength=string.len(data)/2\n\t\n\t--if string.sub(data,-2,-1) ~= '21' then\n -- errcode = 1004\n -- errormsg = string.format('回复数据的 帧尾≠0x21[%s]',string.sub(data,-2,-1))\n -- return false\n -- end\t\n -- log.debug('JM_1547777 m=%s,校验通过',moduleNoStrCheck)\n\treturn true\nend\n\n -- 字符串 -> Hex\nStrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n-- Hex-> 字符串 \nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\n\nend\n--分割16进制,将其分割成俩个 \nSplits=function(szFullString)\n \tk=string.len(szFullString)\n local nSplitArray = {}\n for i=1,k/2 do\n\t\t\n nSplitArray[i]=string.sub(szFullString,2*i-1,2*i)\n\t\t\n\tend\n\treturn nSplitArray\nend\n\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n--获取采集仪下面的通道信息\ngetDeviceInfos = function(moduleNoId, channelNoId)\nlog.debug('JM_1547777:进入设备对应数据 moduleNoId=%s', moduleNoId)\nlog.debug('JM_1547777:进入设备对应数据 channelNoId=%s', channelNoId)\n local channelNoId=string.sub(channelNoId,3,-1) --上面下来的设备编号带俩个00\n\t log.debug('JM_1547777:上面传感器下来中带00已经去掉的设备编号 channelNoId=%s', channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("JM_1547777 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n\t\tlog.debug('JM_1547777:连接前端device.dnlinks[1].devices=%s', json.encode(device.dnlinks[1].devices))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug('JM_1547777:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n log.debug('JM_1547777:上面传感器下来的设备编号 channelNoId=%s', channelNoId)\n\t\t\tlocal moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tlog.debug('JM_1547777:传感器的设备编号111111 moduleStrCheck=%s', moduleStrCheck)\n\t\t\t\t\n\t\t\t\tchannelStrChecks=child.uplink.props.channel \n\t\t\t\tlog.debug('JM_1547777:传感器的设备编号678656 channelStrChecks=%s', channelStrChecks)\t\t\t\t\t\t\t\n channelStrCheck = child.props.deviceid \n\t\t\t\tlog.debug('JM_1547777:传感器的设备编号111113242421 channelStrCheck=%s', channelStrCheck)\n -- log.debug('JM_1547777 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n else\n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.deviceid\n\t\t\t\tlog.debug('JM_1547777:传感器的设备编号222222 channelStrCheck=%s', channelStrCheck)\n --log.debug('JM_1547777 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n end\n log.debug('JM_1547777 进入设备对应数据2345322 channelNoId=%s', channelNoId)\n log.debug('JM_1547777:传感器的设备编号7890 channelStrCheck=%s', tostring(channelStrCheck))\n log.debug('JM_1547777:传感器的设备编号4567 channelNoId=%s', tostring(channelNoId))\n --if tostring(channelStrCheck) == tostring(channelNoId) then\n if tostring(channelStrCheck) == tostring(channelNoId) then\n --log.debug('JM_1547777: m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n --end\n end\n else\n log.debug('JM_1547777: subdevices是nil')\n return nil\n end\nend INLINE 2019-10-08 17:03:56.541+08 2019-11-12 16:21:08.726+08 2019-10-08 \N
+057c429b-10f7-4447-b6ad-d4cf05e6346d zhgd_qiti_1266 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//\nstart = function()\n local endian = 'B'\n local buff = ''\n\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n\n buff = iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff = iota.appendHexByte(buff, 3, endian) -- 1: 指令: 0x03 = 采集\n buff = iota.appendHexByte(buff, 0x20, endian) --\n buff = iota.appendHexByte(buff, 0, endian) -- 2:1通道气体\n buff = iota.appendHexByte(buff, 0, endian) --\n buff = iota.appendHexByte(buff, 3, endian) -- 2:寄存器个数\n buff = iota.appendHexCrc(buff, 'L', 0) -- 2: CRC\n\n ok, resp = ctx:ssend(buff, 15000)\n local result = '{}'\n if ok then\n result = unmarshall(resp, moduleNo)\n log.debug(string.format('zhgd_qiti_1266 out=%s,data=%s', resp, result))\n else\n --print("SSend error!")\n end\n ctx:done(result)\nend\n--01 03 20 00 00 03 0E 0B 这个指令读取6的通道数据 是指有温湿度的设备会返回6个通道数据加温湿度数据 如果没有温湿度的设备 就只返回6个通道数据\n-- 01031000000084083800007fd27fe40078000f2f0e\n\n--"humidity": 13.5,\n--"temperature": 23.9\nunmarshall = function(hex, moduleStr)\n local out = {\n type = 1,\n data = {},\n result = {}\n }\n\n local ErrorCode = IsValid(hex, moduleStr)\n if ErrorCode then\n local dataList = {}\n for i = 1, 8, 1 do\n local value = iota.hexToShort(hex, 3+(i-1)*2, 'B')\n log.debug('zhgd_qiti_1266 i=%s,value=%s', i, value)\n table.insert(dataList, i, value)\n end\n\n out.data = {\n co = dataList[1],\n ch4 = dataList[2],\n h2s = dataList[3],\n o3 = dataList[4],\n temperature = dataList[7],\n humidity = dataList[8]\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n return json.encode(out)\nend\n\nIsValid = function(data, moduleNo_check)\n log.debug('zhgd_qiti_1266 开始校验数据 %s', data)\n if data == nil or string.len(data) / 2 ~= 21 then\n errormsg = string.gormat('数据长度校验失败=[%s]≠21', string.len(data) / 2)\n errcode = 1002\n return false\n end\n\n if iota.hexToByte(data, 1, 'B') ~= 0x03 then\n errormsg = '功能码不是03'\n errcode = 1003\n return false\n end\n if tonumber(moduleNo_check) ~= tonumber(string.sub(data, 1, 2)) then\n errormsg = '无效的模块号'\n errcode = 1004\n return false\n end\n log.debug('zhgd_qiti_1266 数据校验通过')\n return true\n --crc\nend\n\nonData = function()\nend\n INLINE 2020-12-08 16:24:12.844+08 2020-12-08 17:00:38.578+08 2020-12-08 \N
+f6f994b6-8f83-43f9-bfb0-7118d5368555 qianxun \N 千寻 1.0 a971c084-cc83-4e41-80f6-c8de9df9b9d6 a971c084-cc83-4e41-80f6-c8de9df9b9d6 f a971c084-cc83-4e41-80f6-c8de9df9b9d6 Lua --[[\n测试数据\n{\n "type":"http",\n "code":200,\n "body":"{\\"code\\":0,\\"data\\":[{\\"pointId\\":5248,\\"x\\":0.234,\\"recordTime\\":\\"1509529352810\\"}]}"\n}\nsik=S000000G3EE\nappsecret=6f1ee1f754f29f0580dba40215a8f6f98e1c8fc5c80bcbb21d65c44d47b51b7e\n]]--\nstart=function()\n log.debug("device=%s", json.encode(device))\n local apiname="findmm.record.queryByPointId"\n\tlocal req = {\n \ttype= "http",\n \turl="http://openapi.qxwz.com/rest/%s/sik/%s?_sign=%s&request=%s",\n \tmethod="get",\n \tcontent="text/html",\n header={},\n }\n local param={\n pointId= tonumber(device.props.pointId),\n pageNo=1, \n pageSize=1, \n }\n local sign,ts=crypto.qx(apiname, device.uplink.props.sik or "FF", device.uplink.props.appsecret or "FF", json.encode(param))\n log.debug("qianxun sik=%s, appsecret=%s, sign=%s, ts=%s", device.uplink.props.sik, device.uplink.props.appsecret, sign,ts) \n req.url=string.format(req.url, apiname, device.uplink.props.sik, sign,url.escape(json.encode(param) )\n --url.escape(json.encode(param))\n req.header["wz-acs-timestamp"] = ts\n\n log.debug("qianxun :%s",req.url)\n \n\tlocal ok,ack=ctx:ssend(req,4000)\n log.debug("qianxun result=%s,ack=%s", ok,json.encode(ack))\n\tlocal out={\n type = 1,\n } \n if not ok or ack==nil then\n out.result={\n code=1002,\n msg="timeout",\n }\n else --OK\n if ack.code==200 and ack.body ~="" then -- http应答: 200\n qx=json.decode(ack.body) -- 有数据\n -- print("qx=", json.encode(qx))\n --log.debug("qx.code=%d", qx.code)\n qxresult = qx.code or 99999 -- 系统错误\n if qxresult == 0 then -- 调用成功\n local items = #qx.data or 0\n log.debug("totalItems=%d", items)\n if items > 0 then\n local item= qx.data[1] -- 最新一条\n if item ~= nil then\n out.data={\n -- 解析数据.\n x=item.x or 0,\n y=item.y or 0,\n z=item.z or 0,\n pointId=item.pointId or 0,\n recordTime=item.recordTime or "",\n }\n if out.data.recordTime ~="" then\n out.data.recordTime=os.date("%Y-%m-%d %H:%M:%S",tonumber(out.data.recordTime)/1000)\n end\n end\n end\n else -- 调用失败 - 错误.\n out.result={\n code = qx.code,\n msg = qx.message,\n }\n end\n end\n end\n--print("result = ", json.encode(out)) \n\tctx:done(json.encode(out)) \nend\n INLINE 2017-12-12 13:45:52.527+08 2020-12-08 15:00:15.087+08 2017-12-12 \N
+6ad511e5-d6e0-49dc-81ad-934729e589bb httpMQTtwu \N 1.0 736d5c22-d6ac-4577-9782-0f95345ea1d5 736d5c22-d6ac-4577-9782-0f95345ea1d5 f 736d5c22-d6ac-4577-9782-0f95345ea1d5 Lua \nstart = function()\n log.debug('httpMQTtwu device=%s', json.encode(device))\n\tlog.debug('httpMQTtwu device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n\tlog.debug('httpMQTtwu [%s] 1111111111111moduleNo', tonumber(moduleNo))\n log.debug('httpMQTtwu', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n --local id = httpbody.ID\n --log.debug('httpMQTtwu hex.id=%s type=%s', httpbody.id, type(httpbody.id))\n --bodydataStr=string.gsub(bodydataStr,',{}',"")\n log.debug('httpMQTtwu [%s] 3333333bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n\tlog.debug('httpMQTtwu count 长度之前', 1111111111111111111)\n\t--[[local count='0'\n\tfor k,v in pairs(bodypkg) do\n\tlog.debug('httpMQTtwu [%s] count 11111111长度', count)\n count = count + 1\n\t end\n\t log.debug('httpMQTtwu [%s] count 长度', count)\n\t if count~=6 then \n\t ack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\t ctx:asend(ack)\n\t return\n\t end ]]--\n\n\tlocal timeStamps=bodypkg['time']\n\tlog.debug('httpMQTtwu [%s] 时间戳5555555imeStamps', tonumber(timeStamps))\n local datapack = bodypkg['data'] \n\t log.debug('httpMQTtwu [%s] json.encode(out)=%s', json.encode(datapack))\n\t\n\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do\n local deviceId = child.id\n local devceModuleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n local devceChannelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t\n for indexs, childs in pairs(datapack) do\n\t\t\t\t\tlocal sss=childs.serial_number --设备的通道号\n\t\t\t\t\t\n\t\t\t\t\tlocal data1 = {\n data = {},\n device = deviceId,\n type = 1\n }\n\t\t\t\t\tif tonumber(devceChannelNo)=tonumber(sss) then\n\t\t\t\t\tlocal aaaa=childs.source_data\n\t\t\t\t\ttable.insert(out.data, data1)\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t \n\t\t\t end\n\n \n \n\t\t\t\t\n \n end\n end\n\n \n\n log.debug('httpMQTtwu [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend\n\n INLINE 2019-10-30 09:04:33.496+08 2019-10-30 14:56:26.869+08 2019-10-30 \N
+07acceff-18ad-4f11-97b8-894121af0622 httpserveralar \N 异物入侵 1.0 3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c 3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c f 3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c Lua \nstart = function()\n log.debug('httpserveralar device=%s', json.encode(device))\n\tlog.debug('httpserveralar device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out={\n type = 1,\n -- data ={_data_type="capture",R={}},\n\t\t data = {},\n result = {}\n }\n\t\n --\n --\n local moduleNo = device.uplink.props.id --模块\n\tlog.debug('httpserveralar [%s] 1111111111111moduleNo', tonumber(moduleNo))\n log.debug('httpser222222', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n --local id = httpbody.ID\n --log.debug('httpserveralar hex.id=%s type=%s', httpbody.id, type(httpbody.id))\n --bodydataStr=string.gsub(bodydataStr,',{}',"")\n log.debug('httpserveralar [%s] 3333333bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\t\n\tlog.debug('httpserveralar [%s] 打印bodypkg1111=%s', json.encode(bodypkg))\n\t\n\t--这里1\n\t--if next(bodypkg) == nil then \n\t--ack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\t--ctx:asend(ack)\t\n\t--return\n\t--end \n\t--这里1\n\tlog.debug('httpserveralar count 长度之前', 1111111111111111111)\n\t--[[local count='0'\n\tfor k,v in pairs(bodypkg) do\n\tlog.debug('httpserveralar [%s] count 11111111长度', count)\n count = count + 1\n\t end\n\t log.debug('httpserveralar [%s] count 长度', count)\n\t if count~=6 then \n\t ack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\t ctx:asend(ack)\n\t return\n\t end ]]--\n\n\tlocal alarmSite=bodypkg['alarmSite']\n\t--alarmSite=os.date("%Y-%m-%d %H:%M %S", alarmSite)\n\tlog.debug('httpserveralar [%s] 时间戳5555555imeStamps', tonumber(alarmSite))\n\t\t alarmSite=alarmSite..'000'\n log.debug('httpserveralar [%s] 毫秒级时间戳5555555imeStamps', tonumber(alarmSite))\n local alarmMsg = bodypkg['alarmMsg'] --报警信息 int\n\tlog.debug('httpserveralar [%s] 报警信息666666666alarmMsg', bodypkg['alarmMsg'])\n local alarmPic = bodypkg['alarmPic']--异物入侵截图 \n\tlog.debug('httpserveralar [%s] 异物入侵截图 7777777alarmPic', bodypkg['alarmPic'])\t\n\tlocal alarmRange = bodypkg['alarmRange']--//距离 float \n\tlog.debug('httpserveralar [%s] 距离88888888trainYOffsets', alarmRange)\n\t\n\t\n\tout.data = {\n _data_type='capture',\n\t\t alarmSite=alarmSite,\n\t\t\talarmMsg=alarmMsg,\n\t\t\talarmPic=alarmPic,\n\t\t\talarmRange=alarmRange\n }\n\n\n \n\t\t\n\t\t--11\n\t\t\n\t\t\n\n log.debug('httpserveralar [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend\n\n INLINE 2019-10-22 14:56:39.177+08 2020-01-16 16:50:15.12+08 2019-10-22 \N
+9ef827cd-6659-4099-b834-218954121f3e MqttTest \N 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --字符串ascii->字符\nstart=function()\n log.debug("mqtt_test start , ctx=")\nend\n\n\nonData=function(hex)\n log.debug("mqtt_test Data=%s",json.encode(hex.payload))\n\t--全局\n out={\n data ={},\n result = {}\n }\n\n\n local resultData =json.encode(out) --输出传递到平台上\n log.debug("mqtt_test result=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex) \n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n INLINE 2019-12-04 17:46:51.37+08 2019-12-06 16:34:09.682+08 2019-12-04 \N
+e717a755-bd92-4ee0-877c-d12780487661 lrk642 \N 1.0 bfe504c8-b84a-43ec-831a-5ce698db9950 bfe504c8-b84a-43ec-831a-5ce698db9950 f bfe504c8-b84a-43ec-831a-5ce698db9950 Lua --字符串ascii->字符\nstart=function()\n log.debug("lrk642: start module %s, ", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n log.debug("lrk642: Data=%s",hex)\n\t--全局\n out={\n data ={},\n result = {},\n\t\ttype=2\n }\n\n local sData= HextoStr(hex)\n log.debug("lrk642: sData=%s",sData)\n local spliteData = Split(sData,';')\n\tlocal moduleData = Split(spliteData[3],':') \n\n\tlocal moduleNo = moduleData[2]--模块号\n\n\tlocal spliteData1 = Split(sData,'START;')\n local spliteData2 = Split(spliteData1[2],';END')\n\t\n local spliteData3 = Split(spliteData2[1],';')\n\t \n\t local arrlength=table.getn(spliteData3)\n\t \n\t log.debug("lrk642: spliteData3=%s",json.encode(spliteData3))\n\t \n\t \n\tfor k, v in pairs(spliteData3) do\n\t\tlog.debug("lrk642: k=%s,v=%s",k,v)\n\t\tlocal Phy\n\t\tlocal allData=Split(v,':')\n\t\tlocal type_sensor=string.sub(allData[1],1,2)\n\t\tlog.debug("lrk642: type_sensor=%s v=%s",type_sensor,v)\n\t\tlocal type_param=string.sub(allData[1],4,5)\n\t \n\t\t\n\t\tif type_sensor=='ZX' and type_param == 'SZ' then \n\t\t\tlocal fre\n\t\t\tlocal temp\n\n\t\t\tfre = Split(spliteData3[k],':')\t\n\t\t\tlocal frequency=tonumber(fre[2])\n\t\t\tlocal channelNo=tonumber(string.sub(fre[1],6,-1)) \n\t\t\ttemp = Split(spliteData3[k+1],':')\n\t\t\tlocal temperature=tonumber(temp[2])\t\t\t\t\t\n\t\t\tlocal childDevice = getDeviceInfos(moduleNo,channelNo)\t\n\n\t\t\tif\tchildDevice~=nil then\n\t\t\t\tdeviceId=childDevice.id\n\t\t\t\tlocal K = childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\t\t\n\t\t\t\tlocal F0 = childDevice.uplink.capabilities[1].formula.props.F0\n\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal T0 = childDevice.uplink.capabilities[1].formula.props.T0\n\t\t\t\tif K ==nil or F0==nil or Kt==nil or T0==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\n\t\t\t\telse\n\t\t\t\t\tPhy=K*(frequency^2 - F0^2) + Kt*(temperature-T0)\n\t\t\t\tend \n\t\t\t\n\t\t\t\tlocal data1 = {\n\t\t\t\t\tdata={\n\t\t\t\t\t\tfrequency=frequency,\n\t\t\t\t\t\ttemperature=temperature,\n\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1 \n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tlog.debug("lrk642:(振弦) out=%s",json.encode(out))\n\t\t\telse\n\t\t\t\tlog.debug('lrk642 子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\t\tend\n\t\telseif type_sensor=='ZX' and type_param == 'ZZ' then\n\t\n\n\n\t\telseif type_sensor=='CX' then\n\t\t\tlog.debug('lrk642 Step into CX')\n\t\t\tlocal cexie=Split(spliteData3[arrlength],':')\n\t local cexieData=Split(cexie[2],',')\n\t\t\tlog.debug('lrk642 cexieData=%s', json.encode(cexieData))\n\t\t\tfor kk, vv in pairs(cexieData) do\n\t\t\t\tlog.debug('lrk642 模块号=%s,通道号=%s', moduleNo, kk)\n\t\t\t\tlocal childDevice = getDeviceInfos(moduleNo, kk+32)\n\t\t\t\tphysicalvalue = vv\n\t\t\t\tlog.debug('lrk642 测斜physicalvalue=%s,通道号=%s', physicalvalue, kk)\n\t\t\t\tlocal deviceId\n\t\t\t\tif childDevice ~= nil then\n\t\t\t\t\tdeviceId = childDevice.id\n\t\t\t\t\tlog.debug('lrk642:子设备原形childDevice=%s', json.encode(childDevice))\n\n \n local data1 = {\n data = {\n physicalvalue=physicalvalue\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n \n \n\t\t\t\telse\n\t\t\t\t\tlog.debug('lrk642 子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\tend\n\t\t\tend\n\t end \n\tend \n\n local resultData =json.encode(out) --输出传递到平台上\n log.debug("lrk642: result=%s",json.encode(out))\n ctx:notify(resultData)\nend\n\n\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n--string split函数 分割相应的字符\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(channelStrCheck) == tonumber(channelNoId) then\n return child\n\t\t\tend\n \t\n\t\tend\n else\n log.debug("lrk642: subdevices是nil")\n return nil\n end\nend\n\n INLINE 2019-11-14 15:52:24.584+08 2019-12-10 13:29:41.162+08 2019-11-14 \N
+53dcd683-cb5d-4ac5-9c53-d5305893edd5 Park_Server \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n ok, resp = ctx:ssend('01020304', 5000)\nend\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body = bodyString}\n ctx:asend(ack)\nend\n\nonData = function(httpbody, index)\n local response_GpsData_bodyStr = '{"cmd":"Park","data":{},"status":0}'\n asend_HttpResponse(response_GpsData_bodyStr)\n\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\n --log.debug('bs_park_http [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n\n --数据域 内的索引号\n local ErrorCode = true --IsValid(hex)\n if ErrorCode then\n\t\tlocal moduleNo = device.uplink.props.id --模块\n sData = httpbody.Body\n log.debug('bs_park_http sData=%s', sData)\n --获取子字符串表\n\t\tlocal cmds = Split(sData, ',')\n\t\tlog.debug('bs_park_http sizeof')\n\t\tlocal count = (cmds and #cmds) or 0\n\t\tlog.debug('bs_park_http sData length =%s', count)\n\t\tlocal num = Split(cmds[1], '=')\n\t\tlocal use_lot = Split(cmds[2], '=')\n\t\tlocal timespan = Split(cmds[3], '=')\n\t\tif count > 3 then --车辆出入记录\n\t\t\tlocal card_id = Split(cmds[1], '=')\n\t\t\tlocal kind_id = Split(cmds[2], '=')\n\t\t\tlocal car_cp = Split(cmds[3], '=')\n\t\t\tlocal car_model = Split(cmds[4], '=')\n\t\t\tlocal carno = Split(cmds[5], '=')\n\t\t\tlocal username = Split(cmds[6], '=')\n\t\t\tlocal sex = Split(cmds[7], '=')\n\t\t\tlocal idcard = Split(cmds[8], '=')\n\t\t\tlocal phone = Split(cmds[9], '=')\n\t\t\tlocal homeaddress = Split(cmds[10], '=')\n\t\t\tlocal Cwno = Split(cmds[11], '=')\n\t\t\tlocal in_time = Split(cmds[12], '=')\n\t\t\tlocal out_time = Split(cmds[13], '=')\n\t\t\tlocal parked_zkfee = Split(cmds[14], '=')\n\t\t\ttimespan = Split(cmds[15], '=')\n\t\t\tout.data = {\n\t\t\t\tcard_id = card_id[2],\n\t\t\t\tkind_id = kind_id[2],\n\t\t\t\tcar_cp = car_cp[2],\n\t\t\t\tcar_model = car_model[2],\n\t\t\t\tcarno = carno[2],\n\t\t\t\tusername = username[2],\n\t\t\t\tsex = sex[2],\n\t\t\t\tidcard = idcard[2],\n\t\t\t\tphone = phone[2],\n\t\t\t\thomeaddress = homeaddress[2],\n\t\t\t\tCwno = wno[2],\n\t\t\t\tin_time = in_time[2],\n\t\t\t\tout_time = out_time[2],\n\t\t\t\tparked_zkfee = tonumber(parked_zkfee[2])\n\t\t\t}\n\t\t\tout.time = unixtimestamp(timespan[2], moduleNo)\n\t\t\tlog.debug('bs_park_http time = %s',cmds[3])\n\t\telse --停车位数量\n\t\t\tout.data = {\n\t\t\t\tnum = tonumber(num[2]),\n\t\t\t\tuse_lot=tonumber(use_lot[2])\n\t\t\t}\n\t\t\tout.time = unixtimestamp(timespan[2], moduleNo)\n\t\t\tlog.debug('bs_park_http time = %s',cmds[3])\n\t\tend\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n log.debug('bs_park_http resultData=%s', json.encode(out))\n ctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("bs_park_http 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug("bs_park_http:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n --log.debug('bs_park_http 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n else\n --log.debug('bs_park_http 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.channelId\n end\n\n if tostring(moduleStrCheck) == tostring(moduleNoId) then\n if tonumber(channelStrCheck) == tonumber(channelNoId) then\n --log.debug('bs_park_http: m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('bs_park_http: m=%s c=%s subdevices是nil', moduleNoId, channelNoId)\n return nil\n end\nend\n\nIsValid = function(alldata)\n log.debug('bs_park_http 校验开始')\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n log.debug('bs_park_http: 校验失败 Data is nil')\n return false\n end\n\n if string.sub(alldata, 1, 8) ~= '7b22616c' and string.sub(alldata, -2, -1) ~= '7d' then\n errormsg = 'CMD is wrong'\n errcode = 1002\n log.debug('bs_park_http: 校验失败 CMD is wrong')\n return false\n end\n\n log.debug('bs_park_http: 校验通过')\n return true\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = string.sub(hex, 2 * i - 1, 2 * i)\n local ascii = string.char(tonumber(bi, 16))\n str = str .. ascii\n end\n return str\nend\n\nunixtimestamp = function(datestr, moduleNoStr)\n -- 2018-4-28 16:10:12\n --log.debug("fs_tj_lf_station datestr=%s",datestr)\n local datelist = Split(datestr, ' ')\n local date = Split(datelist[1], '-')\n local time = Split(datelist[2], ':')\n local year = tonumber(date[1])\n local month = tonumber(date[2])\n local day = tonumber(date[3])\n local hour = tonumber(time[1])\n local minute = tonumber(time[2])\n local second = tonumber(time[3])\n --log.debug("fs_tj_lf_station year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n log.debug('bs_park_http [%s] recordTime=%s', moduleNoStr, recordTime)\n return recordTime\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n\tlog.debug('bs_park_http Split')\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ngetFactorName = function(num)\n local NO = tonumber(num + 1)\n local FactorNames = {'沉降', '水平', '轴力', '倾斜'}\n local FactorName = FactorNames[NO]\n return FactorName\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend INLINE 2019-09-29 14:14:34.049+08 2019-10-10 17:35:08.475+08 2019-09-29 \N
+83f972a0-ce28-4095-a775-1d9627256ed9 shjy_temp_BK-YL01 \N 1.0 49441bc3-dbb9-4880-b691-70b9c5644a9d 49441bc3-dbb9-4880-b691-70b9c5644a9d f 49441bc3-dbb9-4880-b691-70b9c5644a9d Lua --//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_temp_BK-YL01", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp_BK-YL01 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, 'L')\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x02, 'L')\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("shjy_temp_BK-YL01 SSend error!")\n end\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local rainfall = iota.hexToUInt(hex,3,'B')/10\n --local rainfall2 = iota.hexToShort(hex,5,'B')/10\n --local rainfall=rainfall2+rainfall1\n out.data = {\n\t\t\trainfall=tonumber(string.format('%0.1f',rainfall))\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('shjy_temp_BK-YL01 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shjy_temp_BK-YL01 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2019-08-12 10:04:10.257+08 2019-08-12 11:47:51.521+08 2019-08-12 \N
+08e016e1-21f3-4a45-a960-89e5d91211d9 http_rydw \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua onData = function(hex)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local moduleNoid = device.uplink.props.id\n log.debug('http_rydw [%s] hex.Body=%s type=%s', moduleNoid, hex.Body, type(hex.Body))\n\n local card_data = {}\n local body = json.decode(hex.Body)\n local oneData = {}\n for _, value in pairs(body.datastreams) do\n oneData[value.id] = value.value\n end\n\n if oneData.card_id ~= nil then\n local child_device = getDeviceInfo(oneData.card_id)\n if child_device ~= nil then\n local data1 = {\n data = {\n --单位为米,在基站前方(靠近洞口)为负数,在基站后方(更深入洞口)为正数,(对应基站左或右,左为负,右为正)\n distance = oneData.distance,\n --标签状态 0正常 1电压低 2紧急报警\n state = oneData.state,\n --基站ID号\n station_id = oneData.device_id\n },\n device = child_device.id,\n type = 1\n }\n table.insert(out.data, data1)\n end\n end\n asend_HttpResponse()\n log.debug('http_rydw [%s] json.encode(out)=%s', moduleNoid, json.encode(out))\n ctx:notify(json.encode(out))\nend\n\ngetDeviceInfo = function(channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("http_rydw 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n -- log.debug("http_rydw 查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n channelNoId = child.card_id\n --log.debug('http_rydw 子设备通道 c=%s ', channelStrCheck)\n\n if channelStrCheck == channelNoId then\n --log.debug('http_rydw name=%s 匹配到 子设备', channelNoId)\n return child\n end\n end\n else\n return nil\n end\nend\n\n\nasend_HttpResponse = function()\n ack = {type = 'http', code = 200, body = '{}'}\n ctx:asend(ack)\nend INLINE 2020-12-09 11:06:34.018+08 2020-12-09 14:45:35.369+08 2020-12-09 \N
+4a3ea0f9-d431-492c-85b8-ceac278b1456 scg_Vibrating_1400 \N 1.0 19fa25f4-9ba9-4e93-9025-e67b34db9cf7 19fa25f4-9ba9-4e93-9025-e67b34db9cf7 f 19fa25f4-9ba9-4e93-9025-e67b34db9cf7 Lua \nstart = function()\n log.debug('scg_Vibrating_1400 device=%s', json.encode(device))\nend\n\nlocal dataCounts = 0\n\n--0102030405060708190a17323a000000060201365906c7ba -- 1和4通道\n--0102030405060708150a17323a000000060201365906c7ba \t -- 1和3通道\nlocal isCycleTimeUpdated = 0\n\nlocal sendCount_updateTime = 0\nonData = function(httpbody)\n local dataid = device.uplink.props.id\n log.debug('scg_Vibrating_1400 [%s] httpbody===>%s[%s],', dataid, json.encode(httpbody), dataCounts)\n --主动上传式\n --local hex = httpbody.Body\n local bodyStr = httpbody.Body\n if bodyStr ~= nil or bodyStr ~= '' then\n local obj = json.decode(bodyStr)\n local hex = obj.pkg\n log.debug('scg_Vibrating_1400 1111111 [%s] hex=%s', dataid, hex)\n --调度重启,尝试获取记录结果\n \n local out = {\n type = 2,\n data = {},\n result = {}\n }\n local messageId_hex\n local ErrorCode = IsValid(hex, dataid)\n if ErrorCode then\n local hasCycleTimeUpdated = (isCycleTimeUpdated ~= tonumber(device.props.cycletime))\n if dataCounts == 0 or hasCycleTimeUpdated then\n local getdataCounts = getRedisValue('datacounts')\n if getdataCounts ~= nil then\n dataCounts = dataCounts\n end\n\n local getisCycleTimeUpdated = getRedisValue('iscycletimeupdated')\n if getisCycleTimeUpdated ~= nil then\n isCycleTimeUpdated = tonumber(getisCycleTimeUpdated) --上次的采集周期\n end\n end\n\n log.debug('scg_Vibrating_1400 [%s] dataCounts=%s,LastCycleTimeUpdated=%s,props.cycletime=%s,hasCycleTimeUpdated=%s', dataid, dataCounts, isCycleTimeUpdated, device.props.cycletime, hasCycleTimeUpdated)\n dataCounts = (dataCounts + 1) % 0x100 --计数\n local dataCounts_hex = string.format('%02x', dataCounts)\n redis.set(device.id .. 'datacounts', tostring(dataCounts)) --存储记录\n log.debug('scg_Vibrating_1400 [%s] Received=>%s[%s],', dataid, hex, dataCounts)\n\n local moduleNo = string.sub(hex, 1, 16)\n messageId_hex = string.sub(hex, 17, 18)\n log.debug('scg_Vibrating_1400 [%s] moduleNo=%s,messageId_hex=%s', dataid, moduleNo, messageId_hex)\n\n --解析messageID\n local messageId_bitTable = getBits(messageId_hex)\n local datatimeHexStr = string.sub(hex, 19, 26)\n\n local year = string.format('%02x', tonumber(os.date('%y', os.time())))\n local month = string.format('%02x', tonumber(os.date('%m', os.time())))\n datatimeHexStr = year .. month .. datatimeHexStr\n local datetime = hexDateStrToDate(datatimeHexStr)\n log.debug('scg_Vibrating_1400 [%s] 时间datetime=%s', dataid, datetime)\n local dataArea = string.sub(hex, 27, -1)\n log.debug('scg_Vibrating_1400 [%s] dataArea=%s', dataid, dataArea)\n\n --遍历\n for i = 1, 8, 1 do\n local voltage\n local Frequency\n local Resistance\n local LnR\n local temperature\n local deviceId\n local len_dataArea = string.len(dataArea)\n if messageId_bitTable[i] == 1 and len_dataArea >= dataTypesLen[i] then --当前标志位数据存在\n if i < 5 then --频率数据\n local subData = string.sub(dataArea, 1, 10)\n dataArea = string.sub(dataArea, 11, -1)\n local frequency_str = string.sub(subData, 1, 6)\n local resistance_Str = string.sub(subData, 7, 10)\n\n Frequency = tonumber(frequency_str, 16) / 100\n Resistance = tonumber(resistance_Str, 16)\n LnR = math.log(Resistance)\n\n --循环插入单通道数据表\n\n --获取通道设备deviceId\n local channelNo = i\n log.debug('scg_Vibrating_1400 [%s] 模块号=%s,通道号=%s,frequency_str=%s[%s],resistance_Str=%s[%s]', dataid, moduleNo, channelNo, frequency_str, Frequency, resistance_Str, Resistance)\n local childDevice = getDeviceInfo(moduleNo, channelNo)\n --\n\n if childDevice ~= nil then\n deviceId = childDevice.id\n log.debug('scg_Vibrating_1400 (振弦)子设备原形childDevice=%s', json.encode(childDevice))\n log.debug('scg_Vibrating_1400 (振弦)子设备deviceId: ' .. tostring(deviceId))\n\n \n local a = childDevice.uplink.capabilities[1].formula.props.A\n local b = childDevice.uplink.capabilities[1].formula.props.B\n local c = childDevice.uplink.capabilities[1].formula.props.C\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n local g = childDevice.uplink.capabilities[1].formula.props.G\n\t\t\t\t\t\t\t\tlocal e= childDevice.uplink.capabilities[1].formula.props.E\n\t\t\t\t\t\t\t\tlocal f0= childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal k= childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal t0= childDevice.uplink.capabilities[1].formula.props.T0\n\t\t\t\t\t\t\t\t\n log.debug('scg_Vibrating_1400 [%s] (振弦)子设备:m=%s,c=%s:公式参数a=%s,b=%s,c=%s', dataid, moduleNo, channelNo, a, b, c)\n if a ~= nil and b ~= nil and c ~= nil then\n temperature = 1 / (a + b * LnR + c * LnR ^ 3) - 273.2 --无温度补偿\n temperature = tonumber(string.format('%0.2f', temperature))\n log.debug('scg_Vibrating_1400 [%s] 模块号=%s,通道号=%s 当前的temperature=%s', dataid, moduleNo, channelNo, temperature)\n end\n\t\t\t\t\t\t\t if childDevice.uplink.capabilities[1].formula.metaid == 'd3c03d95-0625-44e5-a097-d371daa46150' then --混凝土结构\n\t\t\n\t\t\t\t\t\t\t\t\tif g ~= nil and e ~= nil and k ~= nil and f0 ~= nil and t0 ~= nil then\n\t\t\t\t\t\t\t\t\t\tphy = g * e *( Frequency ^ 2 - f0 ^ 2)+ k * (temperature - t0)\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == 'abc52bef-269a-4be1-82f0-5d3626a3ca44' then --钢结构\n\t\t\t\t\t\t\t\t\t--local y1= childDevice.uplink.capabilities[1].formula.props.Y1\n\t\t\t\t\t\t\t\t\t--local y2= childDevice.uplink.capabilities[1].formula.props.Y2\n\t\t\t\t\t\t\t\t\tif g ~= nil and e ~= nil and f0 ~= nil then\n\t\t\t\t\t\t\t\t\t\tphy = g * e *( Frequency ^ 2 - f0 ^ 2)\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tend\n else\n log.debug('scg_Vibrating_1400 [%s] (振弦)子设备:m=%s,c=%s deviceId为nil', dataid, moduleNo, channelNo)\n end\n local data1 = {\n data = {\n frequency = Frequency,\n resistance = Resistance,\n voltage = voltage,\n temperature = temperature,\n\t\t\t\t\t\t\t\tphysicalvalue=phy\n },\n device = deviceId,\n type = 1,\n time = datetime\n }\n table.insert(out.data, data1)\n else --电压 错误码 心跳 扩展\n local subData = string.sub(dataArea, 1, 2)\n dataArea = string.sub(dataArea, 3, -1)\n if i == 5 then --电压数据\n voltage = (tonumber(subData, 16) + 175) / 100\n elseif i == 6 then --错误码\n debug_code = 1003\n debug_msg = subData .. '_' .. debugErrorMsg[tonumber(subData, 16)]\n out.result = {code = debug_code, msg = debug_msg}\n end\n end\n end\n end\n\n --返回数据\n sendAck(dataid, messageId_hex, dataCounts_hex)\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData = json.encode(out)\n log.debug('scg_Vibrating_1400 [%s] resultData=%s', dataid, resultData)\n\n ctx:notify(resultData)\n end\nend\n\nasend_HttpResponse = function(ackID, bodyString)\n ack = {type = 'http', code = 200, body = bodyString}\n log.debug('scg_Vibrating_1400 [%s] 应答=%s', ackID, json.encode(ack))\n ctx:asend(ack)\nend\nsendAck = function(dataId, uplinkmessageid, uplinkDataCounter)\n log.debug('scg_Vibrating_1400 [%s] uplinkmessageid=%s,uplinkDataCounter=%s', dataId, uplinkmessageid, uplinkmessageid)\n\n --下发返回前 判断 当前设备 cycletime与之前的存储是否一致\n\n if uplinkmessageid ~= nil then\n if tonumber(isCycleTimeUpdated) == tonumber(device.props.cycletime) or sendCount_updateTime > 10 then\n local resp_hex = '800301' .. uplinkmessageid .. uplinkDataCounter\n asend_HttpResponse(dataId, resp_hex)\n else\n --首次收到数据下发采集周期 配置\n --d000000e1003010102\n local cycleTime = string.format('%08x', tonumber(device.props.cycletime))\n --log.debug('scg_Vibrating_1400 [%s] 下发 cycleTime=%s ,isCycleTimeUpdated=%s', dataId, cycleTime, isCycleTimeUpdated)\n local resp_hex = 'd0' .. cycleTime .. '0301' .. uplinkmessageid .. uplinkDataCounter\n log.debug('scg_Vibrating_1400 [%s] 下发 resp_hex=%s,cycleTime=%s ,isCycleTimeUpdated=%s,sendCount_updateTime=%s', dataId, resp_hex, cycleTime, isCycleTimeUpdated, sendCount_updateTime)\n asend_HttpResponse(dataId, resp_hex)\n sendCount_updateTime = sendCount_updateTime + 1\n end\n end\nend\n\ngetRedisValue = function(keyStr)\n log.debug('scg_Vibrating_1400 getRedisValue,keyStr=%s', keyStr)\n local keyValue\n local r1, r1ok = redis.get(device.id .. keyStr) --获取上次记录时间\n if r1ok ~= false then\n keyValue_redis = r1\n log.debug('scg_Vibrating_1400 r1=%s,r1ok=%s[%s],%s=%s', r1, r1ok, type(r1ok), keyStr, keyValue_redis)\n if keyValue_redis ~= nil then\n keyValue = tonumber(keyValue_redis)\n else\n log.debug('scg_Vibrating_1400 redis get dataCounts=nil')\n end\n else\n log.debug('scg_Vibrating_1400 r1=%s,r1ok=%s[%s],%s=%s', r1, r1ok, type(r1ok), keyStr, keyValue_redis)\n end\n return keyValue\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n for index, child in pairs(device.dnlinks[1].devices) do\n if child.uplink.props.module == tostring(moduleNoId) then\n if child.uplink.props.channel == tostring(channelNoId) then\n --log.debug('scg_Vibrating_1400 m=%s,c=%s 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('scg_Vibrating_1400 m=%s,c=%s subdevices=nil', moduleNoId, channelNoId)\n return nil\n end\nend\n\nIsValid = function(data, d_index)\n log.debug('scg_Vibrating_1400 开始校验数据=%s', data)\n local datalen = string.len(data) / 2\n if data == nil or datalen <= 9 then\n errormsg = string.format('Data is nil or invalid length=%s', datalen)\n errcode = 1002\n log.debug('scg_Vibrating_1400 [%s] errormsg=%s', d_index, errormsg)\n return false\n end\n data = string.sub(data, 17, -1)\n --去除id\n local msgId = string.sub(data, 1, 2)\n local msgtype = string.sub(data, 5, 6)\n if msgId == '80' and msgtype == 'ff' then --debug信息\n debugMsg = HextoStr(string.sub(data, 7, -1))\n errormsg = string.format('debugmsg=%s', debugMsg)\n errcode = 1003\n log.debug('scg_Vibrating_1400 [%s] debugmsg=%s', d_index, errormsg)\n return false\n elseif msgId == '80' and msgtype == '01' then --设备ack应答\n log.debug('scg_Vibrating_1400 [%s] 设备应答设置成功=%s', d_index, errormsg)\n redis.set(device.id .. 'iscycletimeupdated', tostring(device.props.cycletime)) --存储记录\n \t --如果平台刚更新配置周期,还未下发指令。设备就返回更新应答, 日志记录这种异常,厂家说可能出现,可能?\n if dataCounts == 0 or sendCount_updateTime ~=0 then\n log.debug('scg_Vibrating_1400 [%s] 异常 设备更新周期应答 dataCounts=%s,sendCount_updateTime=%s,ackdata=%s', d_index,dataCounts,sendCount_updateTime,data)\n end\n end\n return true\nend\n\ndataTypesLen = {5, 5, 5, 5, 1, 1, 1, 0}\n\ngetBits = function(byteStr)\n local bits = {}\n local byteNum = tonumber(byteStr, 16)\n local bitsTable = {}\n\n for i = 8, 1, -1 do\n local ex = 2 ^ (i - 1)\n if byteNum >= ex then\n --print(string.format('i=%s,byteNum=%s',i,byteNum))\n bitsTable[i] = 1\n byteNum = byteNum % ex\n else\n bitsTable[i] = 0\n end\n end\n return bitsTable\nend\n\nhexDateStrToDate = function(dateStr)\n -- 12 04 02 0F 24 38 ==> 18\n local year_ = 2000 + tonumber(string.sub(dateStr, 1, 2), 16)\n local month_ = tonumber(string.sub(dateStr, 3, 4), 16)\n local day_ = tonumber(string.sub(dateStr, 5, 6), 16)\n local hour_ = tonumber(string.sub(dateStr, 7, 8), 16)\n local minute_ = tonumber(string.sub(dateStr, 9, 10), 16)\n local second_ = tonumber(string.sub(dateStr, 11, 12), 16)\n\n timenum = os.time({year = year_, month = month_, day = day_, hour = hour_, min = minute_, sec = second_})\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --log.debug('scg_Vibrating_1400 timenum=%s,recordTime=%s, year_=%s,month_=%s,day_=%s,hour_=%s,minute_=%s,second_=%s',timenum,recordTime,year_,month_,day_,hour_,minute_,second_)\n return recordTime\nend\n\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\ndebugErrorMsg = {\n '电量过低,设备即将无法使用无线通讯,此时设备红灯闪烁',\n 'AIT不合法',\n 'SIT不合法',\n '传感器端口1打开,但检测不到传感器',\n '传感器端口2打开,但检测不到传感器',\n '传感器端口3打开,但检测不到传感器',\n '传感器端口4打开,但检测不到传感器',\n '传感器1参数不合法',\n '传感器2参数不合法',\n '传感器3参数不合法',\n '传感器4参数不合法',\n 'MESSAGEID不合法/MESSAGEID与数据长度不对应',\n '设备温度过高,超过85度',\n '设备温度过低,低于-45度',\n '开发错误,已保存至flash',\n '设备未知原因重启',\n '设备未知原因重新上电',\n '端口1/2/3/4传感器频率超出扫频范围,可能造成数据不准确',\n '传感器端口1/2/3/4打开,但监测不到任何传感器',\n '错误原因较多,导致错误栈满',\n '传感器端口1 超过4000HZ',\n '传感器端口2 超过4000HZ',\n '传感器端口3 超过4000HZ',\n '传感器端口4 超过4000HZ',\n 'AIT过小,自动设置为最小值60',\n 'AIT过大,大于最大值2147483647',\n 'ait不为零,但没有端口是打开的',\n '时间同步超时',\n '传感器端口均未接传感器'\n} INLINE 2019-05-07 15:53:30.838+08 2021-01-15 13:45:15.977+08 2019-05-07 \N
+7edb13cb-08e0-4c27-91cc-153a1af8a708 gn_mcu32 \N 1.0 c465666b-2fe0-4d50-9d21-74d919571ab4 c465666b-2fe0-4d50-9d21-74d919571ab4 f c465666b-2fe0-4d50-9d21-74d919571ab4 Lua --//04 项目资料/2017-07/南京基泰沉降监测项目/MCU32数据采集说明书.pdf\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--32个通道\n--测试536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3355494e2056313d322e3334352056323d302e3030332049333d32302e3030302049343d302e3030302056353d302e39382049363d312e35362049373d322e3134352056383d312e323030201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n--24个通道\n--536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n start=function()\n -- log.debug("load script %s, moduleId=%s", "gn_mcu32.lua", device.props.moduleId or "[nil]")\n -- log.debug("gn_mcu32:".."LUA: ctx is =%s", json.encode(device))\n ok,resp=ctx:ssend("01020304",15000)\n -- log.debug("gn_mcu32:".."测试下发01020304正常")\n end\n\nonData=function(hex)\n --log.debug("gn_mcu32收到数据=%s", hex)\n\t--log.debug("gn_mcu32 device =%s", json.encode(device))\n --log.debug("gn_mcu32subdevices data is =%s", json.encode(device.dnlinks[1].devices))\n\n local out={\n data ={},\n result = {},\n type=2\n }\n \n local ModuleChar = "M=";--振弦\n local DigChar = "Di";--测斜\n local VoltageChar = "V=";--电压\n local CurrentChar = "I=";--电流\n local WaterChar = "Wa";--水文\n\tlocal ResistanceChar="R=";--电阻(差阻)\n\n\n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n sData=toStrHex(hex)\n --log.debug("gn_mcu32:sData是 %s",sData)\n --获取子字符串表\n local allResponse=Split(sData,'\\n')\n --移除表内的“”和nil\n for k,v in ipairs(allResponse) do\n if v=='' or v==nil then\n table.remove(allResponse,k)\n --log.debug("gn_mcu32:".."表内的“”和nil 移除元素为 "..tostring(allResponse[k]))\n end\n end\n\n --分析单类数据\n for k,v in ipairs(allResponse) do\n local singleData=Split(v,' ')\n --移除单类数据中的空 \n for kk,vv in ipairs(singleData) do\n if vv=='' or vv==nil then\n --print("移除元素为 ",singleData[kk])\n table.remove (singleData,kk)\n end\n end\n\n if k>1 then\n local temp1=singleData[2+1]\n local moudleStr=string.sub(singleData[2+1],2,2)\n local moduleNo=tonumber(moudleStr)\n --解析单条数据\n for kkk,vvv in ipairs(singleData) do\n --log.debug("gn_mcu32:遍历解析单条数据 键="..tostring(kkk).." 值="..tostring(vvv))\n \n local type_sensor=string.sub(string.gsub(singleData[kkk],"%d",""),1,2)\n --log.debug("gn_mcu32: type_sensor="..type_sensor) \n if string.len(type_sensor) >=2 then\n --频率\n if type_sensor==ModuleChar then\n local length = string.len(singleData[kkk]) - 3;\n local tempLength = string.len(singleData[kkk + 1]) - 3;\n local channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n local Module =tonumber(string.sub(singleData[kkk],4, -1))\n local tempData = string.sub(singleData[kkk+1],4, 4+tempLength);\n local Frequency = math.sqrt(Module*1000);\n local Temp;\n local Phy\n \t\t\t local Length\n if IsNumberic(tempData) then\n\t\t\t\t\t\t\t\tTemp=tonumber(tempData)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tTemp=0;\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(振弦)子设备 模块%s,通道%s原型childDevice=%s",moduleNo,channelNo,json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(振弦)子设备 模块%s,通道%s deviceId=%s ",moduleNo,channelNo,tostring(deviceId))\n\t\t\n\t\t\t\t\t\t\t\tlocal K = childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal F0 = childDevice.uplink.capabilities[1].formula.props.F0\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal T0 = childDevice.uplink.capabilities[1].formula.props.T0\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:振弦模块: 模块%s,通道%s 公式参数=%s,%s,%s,%s,%s",moduleNo,channelNo,K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K ==nil or F0==nil or Kt==nil or T0==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32 模块%s,通道%s 当前的Frequency是:%s,%s",moduleNo,channelNo,Frequency,Temp)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tPhy=K*(Frequency^2 - F0^2) + Kt*(Temp-T0)\n\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32 模块%s,通道%s当前的Phy是:%s",moduleNo,channelNo,Phy)\n\t\t\t\t\t\t\t\tend \n \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(振弦)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t--log.debug("gn_mcu32:振弦模块:公式%s",device.formula)\n\t\t\t\t\t\t \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tfrequency=tonumber(string.format("%0.3f",Frequency)),\n\t\t\t\t\t\t\t\t\ttemperature=tonumber(string.format("%0.2f",Temp)),\n\t\t\t\t\t\t\t\t\tphysicalvalue=tonumber(string.format("%0.3f",Phy)),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("gn_mcu32:(振弦) Phy结果=%s",Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend\n\n --电压\n if type_sensor== VoltageChar then\n local length = string.len(singleData[kkk]) - 3;\n\t\t\t\t\t\t\tlocal channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n\t\t\t\t\t\t\tlocal Voltage =tonumber(string.sub(singleData[kkk],4, -1))\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(电压)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(电压)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t \n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:电压模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlocal Temp=0;--电压模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:电压模块当前的Voltage是:%s,%s",Voltage,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Voltage \n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:电压模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\tend \t \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t--log.debug("gn_mcu32:(电压)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={voltage=Voltage,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend\n \n\t\t\t\t\t\t--电流\n\t\t\t\t\t\tif type_sensor==CurrentChar then\n\t\t\t\t\t\t\tlocal length = string.len(singleData[kkk]) - 3;\n\t\t\t\t\t\t\tlocal channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n\t\t\t\t\t\t\tlocal Current =tonumber(string.sub(singleData[kkk],4, -1))\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(电流)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(电流)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:电流模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlocal Temp=0;--电流模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:电流模块当前的Current是:%s,%s",Current,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Current \n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:电流模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\tend \n \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(电流)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={current=Current,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend \n\n\t\t\t\t\t\t--水文\n\t\t\t\t\t\tif type_sensor==WaterChar then\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\tif string.sub(singleData[kkk],1,6)== "Water1" then\n\t\t\t\t\t\t\t\tlocal waterData = GetSWData(singleData, kkk); \n \n\t\t\t\t\t\t\t\tfor i=1,8,1 \n\t\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,i)\n\t\t\t\t\t\t\t\t\t--\n\t\t\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(水文)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t\t\tlog.debug("gn_mcu32:(水文)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:水文模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t local Temp=0;--水文模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t\t --log.debug("gn_mcu32:水文模块当前的Current是:%s,%s",Current,Temp)\n\t\t\t\t\t\t\t\t\t\t local Fi=waterData[i] \n\t\t\t\t\t\t\t\t\t\t Phy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t\t --log.debug("gn_mcu32:水文模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\t\t\tend \n\t\t\t\t\t\t\t\t\telse\n -- log.debug("gn_mcu32:(水文)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(i))\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\tlocal data1={\n\t\t\t\t\t\t\t\t\t\tdata={waterdata = waterData[i],\n\t\t\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\t\ttype=1\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttable.insert(out.data,data1) \n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\tend\t\n end\n\n --测斜\n if type_sensor==DigChar then\n\t\t\t\t\t local Phy\n\t\t\t\t\t local Length\n\t\t\t\t\t local Temp\n if (string.sub(singleData[kkk],1,3)..string.sub(singleData[kkk],5,5))== "Dig=" then\n local channelNo = tonumber(string.sub(singleData[kkk],4, 4),16);\n local Inclination =tonumber(string.sub(singleData[kkk],6, -1))\n --获取通道设备deviceId\n \t\t\t local childDevice=getDeviceInfo(moduleNo,channelNo)\n \t\t\t local deviceId\n if childDevice~=nil then\n \t\t\t\t\t deviceId=childDevice.id\n \t --log.debug("gn_mcu32:(测斜)子设备原形childDevice=%s",json.encode(childDevice))\n \t\t\t\t --log.debug("gn_mcu32:(测斜)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n -- log.debug("gn_mcu32:测斜模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tTemp=0;--测斜模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:当前的Frequency是:%s,%s",Inclination,Temp)\n\t\t\t\t\t\t\t\t\t\tlocal Fi=Inclination \n\t\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\t\tend \n \t \n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(测斜)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={inclination=Inclination,\n\t\t\t\t\t\t\t\t\t\ttemperature=Temp,\n\t\t\t\t\t\t\t\t\t\tphysicalvalue=Phy,\n\t\t\t\t\t\t\t\t\t\tlength=Length \t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t--电阻(差阻)\n if type_sensor==ResistanceChar then\n\t\t\t\t\t --local R1Length = string.len(singleData[kkk]) - 3; --取消\n --local r1Length = string.len(singleData[kkk + 1]) - 3; --取消\n local channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n local R1 =tonumber(string.sub(singleData[kkk],4, -1))\n local r1 = tonumber(string.sub(singleData[kkk+1],4, -1))\n local Temp;\n local Phy\n if IsNumberic(tempData) then\n\t\t\t\t\t\t\t\tTemp=tonumber(tempData)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tTemp=0;\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s 原形childDevice=%s",tostring(moduleNo),tostring(channelNo),json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s deviceId=%s ",tostring(moduleNo),tostring(channelNo),tostring(deviceId))\n\n\t\t\t\t\t\t\t\tlocal f = childDevice.uplink.capabilities[1].formula.props.f\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s f!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal Zo = childDevice.uplink.capabilities[1].formula.props.Zo \n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s Zo!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal b = childDevice.uplink.capabilities[1].formula.props.b \n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s b!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal a = childDevice.uplink.capabilities[1].formula.props.a \n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s a!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal Ro = childDevice.uplink.capabilities[1].formula.props.Ro \n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s Ro!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s 参数=%s,%s,%s,%s,%s",tostring(moduleNo),tostring(channelNo),f,Zo,b,a,Ro)\n\t\t\t\t\t\t\t\tif f ==nil or Zo ==nil or b ==nil or a==nil or Ro==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tTemp=a*(R1+r1-Ro)\n \t\t\t\t\tif tonumber(ri)~=0 then\t\t\t\n Phy =f*(R1/r1 -Zo)+b*Temp\n --log.debug("gn_mcu32: m=%s,c=%s, 当前的R1=%s,r1=%s,Temp=%s,Phy=%s",tostring(moduleNo),tostring(channelNo),R1,r1,Temp,Phy)\n \t\t\t\telse\n \t\t\t --log.debug("gn_mcu32: 数据无效 m=%s,c=%s, r1=0")\n break\n \t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tend \n \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s deviceId为nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块:公式%s",device.formula)\n\t\t\t\t\t\t \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tResistor1=R1,\n\t\t\t\t\t\t\t\t\tResistor2=r1,\n\t\t\t\t\t\t\t\t\ttemperature=Temp,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块 m=%s,c=%s Phy结果=%s",tostring(moduleNo),tostring(channelNo),Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\t\t\t\t\t\t\n\t\t\t\t\t\tend\n\n end\n\t\t\t\tend\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n --log.debug("gn_mcu32resultData=%s,hex=%s", json.encode(out),hex)\n ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("gn_mcu32 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t --log.debug("gn_mcu32:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\t--log.debug("gn_mcu32 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t -- log.debug("gn_mcu32 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t \t if tostring(channelStrCheck)== tostring(channelNoId) then\n \n \t\t --log.debug("gn_mcu32: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n -- log.debug("gn_mcu32: subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function(alldata)\n --log.debug("gn_mcu32 校验开始")\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n return false\n end\n\n local length=getIndex(alldata)\n local data=string.sub(alldata,1,length*2)\n --log.debug("data:"..data)\n local plu16={}\n plu16[0]=string.sub(data,-8,-7)\n plu16[1]=string.sub(data,-6,-5)\n local plusSum16Hi,plusSum16Lo = iota.hexCheckPlusSum16(data,0,length-4);\n -- log.debug("gn_mcu32:".."plu16[0]是:"..plu16[0])\n -- log.debug("gn_mcu32:".."plu16[1]是:"..plu16[1])\n -- log.debug("gn_mcu32:".."plusSum16Hi是:"..tostring(plusSum16Hi))\n -- log.debug("gn_mcu32:".."plusSum16Lo是:"..tostring(plusSum16Lo))\n --if tonumber(plu16[0],16)~=plusSum16Hi or tonumber(plu16[1],16)~=plusSum16Lo then\n -- errormsg = 'checkPlusSum16 is false'\n -- errcode = 1004\n -- return false\n -- end\n\n --log.debug("gn_mcu32 校验通过")\n return true\nend\n\ngetIndex=function(data)--用于IsValid\n local len=string.len(data)/2\n for n =1,len do \n local value=string.sub(data,2*n-1,2*n)\n if value=='0a' then\n return n;\n end\n end\n return 0;\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\n\nend\n\nGetSWData=function(sData,j)\n local SW={}\n\n local Water1 = tonumber(string.sub(sData[j],8,-1));\n local Base1 = tonumber(string.sub(sData[j+1],7,-1));\n\n local Water2 = tonumber(string.sub(sData[j+2],8,-1));\n local Base2 = tonumber(string.sub(sData[j+3],7,-1));\n\n local MaxWinSpeed = tonumber(string.sub(sData[j+4],13,-1));\n local Direction = tonumber(string.sub(sData[j+5],11,-1));\n\n local AverWinSpeed = tonumber(string.sub(sData[j+6],14,-1));\n local RealTImeWinSpeed = tonumber(string.sub(sData[j+7],18,-1));\n \n local NowDirection = tonumber(string.sub(sData[j+8],11,-1));\n local AccRain = tonumber(string.sub(sData[j+9],9,-1));\n\n SW[1] = Water1/100 + Base1;\n SW[2] = Water2/100 + Base2;\n SW[3] = MaxWinSpeed;\n SW[4] = Direction;\n SW[5] = AverWinSpeed;\n SW[6] = RealTImeWinSpeed;\n SW[7] = NowDirection;\n SW[8] = AccRain;\n return SW;\nend INLINE 2019-10-14 09:31:13.857+08 2019-10-14 10:23:32.715+08 2019-10-14 \N
+77db0016-b199-4659-8d88-718b7c6f5f12 ceshi \N 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start=function ()\n\tlog.debug("load script %s, moduleId=%s", "ceshi", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlog.debug("ceshi:LUA:根设备devices : data is =%s", json.encode(device)) \n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("ceshi 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("ceshi 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\t\n \t local cmdstr = tonumber(moduleNo) .. 'A'\n\t\t\tlog.debug('ceshi:模块%s的cmdstr是:%s', moduleNo, cmdstr)\n\t\t\tlocal cmdstr_asi = toHexStr(cmdstr)\n\t\t\tlocal lcr_str = LCR(cmdstr_asi)\n\t\t\tlcr_str=string.format("%x",lcr_str)\n \n\t\t\tlog.debug('ceshi:模块%s通道%s的lcr_str是:%s', moduleNo, channelNo, lcr_str)\n\t\t\tlocal request_asciiStr = '#' .. cmdstr\n\t\t\tlocal last_str = '!'\n\t\t\tlast_str = toHexStr(last_str)\n\t\t\tlog.debug('ceshi:模块%s的request_asciiStr是:%s', moduleNo, request_asciiStr)\n\t\t\tlocal buff = toHexStr(request_asciiStr).. lcr_str .. last_str\n \n\t\t\tok, resp = ctx:ssend(buff, 60000)\n\t if ok then\t \n\t\t--log.debug("ceshi:模块%s的采集仪采集数据接收成功,开始解析resp=%s ",moduleNo,resp) \n result = ParseResult(resp,out,moduleNo)\t\n\t else\n \tout.result = {code=1001,msg='采集超时'} \n\t\tlog.debug("ceshi:模块%s的采集数据 接收失败",moduleNo) \n\t end\n local resultData =json.encode(result)\n log.debug("ceshi:out序列化结果 : out is =%s", resultData)\n ctx:done(resultData)\t\nend\n\n--2454323031373131303630333430ad433031a439b93230353530fc2d34333333fa3632359d433032a539b932343330398231303933cd343837a3433033a639b9323534333031323239ce3631339a433034a739b932313539398a2d33353132f8353839a6433035a839b93232313137fd2d363532ca3632359d433036a939b93335333131fd3130323634fd3633319a433037aa39b93230373030f92d31313233f4363139a0433039ac39b933303738398b36333535d33633349d433130a439b932383833368b34343131ca363339a2433131a539b93139353031802d323939398a3630389e433132a639b932353135358231303133c536303197433133a739b932373537318631383530ce36313097433134a839b93234323536832d353833cd363638a421\nParseResult=function(hex,out,moduleNoStr)\n\n\t-- 二次解析\n\tlocal devicechnum = 2 --这里标记传感器编码 数字不对\n\tlocal devicechnumdate = 3 --这里是标记传感器数据 数字不对 \n\t\n\tlocal channelDatas = {} --这个用来放传感器数据的\n\tlog.debug("ceshi: m=%s,接收传感器数据1111 Received=>%s",moduleNoStr,hex)\n\tlocal ErrorCode = IsValid(hex,moduleNoStr)\n\tif ErrorCode then\n\t\tlog.debug('ceshi:hex=%s', hex)\n\t\tlocal sr=string.sub(hex,3,-1)\n\t\tlocal sq=string.sub(sr,1,-3)\n\t\tlog.debug('ceshi:处理末尾hex=%s', sq)\n\t\tlocal sp='54' --这里是分割各个传感器\n\t\tlocal sArray=Split(sq,sp)\n\t\tlog.debug('ceshi:数组sArray=%s', json.encode(sArray))\n\t\t for k,v in pairs(sArray) do\n\t --这个是分割码流后的各个传感器的码流\n\t\t log.debug('ceshi:各个传感器的码流v=%s', v)\n\t\t if v~='' then \n\t\t \n\t\t local b=string.sub(v,29,44)--传感器设备编号\n\t\t log.debug('ceshi:传感器编号的码流b=%s', b)\n\t\t local sArrays=Splits(b) --将传感器设备编号分割成俩个\n\t\t\t\tlocal num=0 --累加计算\n\t\t\t\tfor k,vr in pairs(sArrays) do\n\t\t\t\ttennum=tonumber(vr, 16) \n\t\t\t\t\tnum=num+tennum\n\t\t\t\t\tend\n\t\t\t\tprint(num)\n\t\t\t\tlog.debug('ceshi:传感器编号的码流num=%s', num)\n\t\t\t\tlocal numb=num\n\t\t\t\tlog.debug('ceshi:传感器编号的码流和numb=%s', numb)\n\n local c=numb%128+128 --传感器校验算法\n\t\t log.debug('ceshi:传感器编号的码流校验值c=%s', c)\n local d=string.format("%#x",c) --校验码由10进制转化成16进制\n\t\t log.debug('ceshi:传感器编号的码流校验值由10进制转换成16进制d=%s', d)\n local f=string.sub(d,3,4) --计算得到校验码 截取16进制后2位\n\t\t log.debug('ceshi:截取传感器编号的码流校验值后俩位f=%s', f)\n\t\t log.debug('ceshi:已经运算到了校验码时各个传感器的码流v=%s', v)\n\t\t local bb=string.sub(v,45,46)--码流里的校验码 \n log.debug('ceshi:码流里的校验码bb=%s', bb) \t--感觉这块没有用\t \n\t\t local ab=string.find(v, "b0") --找到B0下标\n\t\t log.debug('ceshi:找到b0下标ab=%s', ab) \n\t\t local bbb=ab-5 --得到数据1最后一个字节的下标\n\t\t log.debug('ceshi:得到数据1最后一个字节的下标bbb=%s', bbb)\n\t\t local phy=string.sub(v,47,bbb) --得到数据1数据\n\t\t log.debug('ceshi:得到数据1数据phy=%s', phy) \n\t\t \n\t\t local physicalvalue=HextoStr(phy)/100 --得到数据1的ascll\n\t\t log.debug('ceshi:得到数据1的ascll数据physicalvalue=%s', physicalvalue) \n\n\t\t local dd=ab+2\n\t\t log.debug('ceshi:得到数据3字节的下标dd=%s', dd)\n local tempera=string.sub(v,dd,-3)--得到数据3的数据\n\t\t log.debug('ceshi:得到传感器tempera=%s', tempera)\n\t\t \n\t\t local temperature=(HextoStr(tempera)-500)/10 --得到数据3的ascll\n\t\t log.debug('ceshi:得到数据3的ascll tempera=%s', temperature)\n\t\t local _twophys = {physicalvalue,temperature} --物理量和温度的存放地\n\t\t local deviceids=HextoStr(b) --设备编号的ascll\n\t\t channelDatas[deviceids]=_twophys --将设备编号,传感器数据装入table表里\t \n log.debug('ceshi:数组channelDatas=%s', json.encode(channelDatas))\n\n\t\t end \n\t\t \n\t end\n\t\t \n\t\t \n\t\t \n\t\t for k,v in pairs(channelDatas) do\n\t\t\tlog.debug('ceshi:数组与下面设备连接channelDatas=%s', json.encode(channelDatas))\n\t\t\t\tlocal childDevice = getDeviceInfos(moduleNoStr, k)\n\t\t\t\t\t\t--phyvalue=channelDatas[k] --将表中的传感器对应编号的数据给了phyvalue\n\t\t\t\tif\tchildDevice~=nil then\n\t\t\t\t\tlocal data1 = {\n data = {\n physicalvalue = channelDatas[k][1],\n\t\t\t\t\t\t\ttemperature = channelDatas[k][2],\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n },\n device = deviceId,\n type = 1\n }\n\t\t\t\t\t table.insert(out.data, data1)\n\t\t\t\t\telse\n\t\t\t\t\tlog.debug('ceshi 子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\t\t\tend\n\t\t\t\t\t\t\n\t\t \n\t\t \n\t\t end \n\n\telse\n\t log.debug('ceshi m=%s,数据校验失败',moduleNo)\n\t\tout.result = {code=errcode,msg=errormsg}\n\tend\n \treturn out\nend\nLCR = function(buff)\n log.debug('ceshi:lcr buff=%s', buff)\n local lcr = 0\n for i = 0, string.len(buff) / 2 - 1 do\n lcr = lcr + tonumber(string.sub(buff, 1 + 2 * i, 2 * (i + 1)), 16)\n end\n log.debug('ceshi:lcr累加结果%s', tonumber(lcr))\n lcr = lcr % 128 + 128\n log.debug('ceshi:lcr校验结果%s', lcr)\n return lcr\nend\ngetCheckStr=function(sr)\n local srlen=string.len(sr)\n local check=0\n\t for i=1,srlen,1 do\n\t local byteStr=StrToHex(string.sub(sr,i,i))\n\t\t check=check+tonumber(byteStr,16)\t \n\t end\n check=check % 128+128\n\t local checkStr\n\t checkStr=string.format("%x",check) \n\t return checkStr\nend\nGetCodelen=function(num_str,buff_response)\n local num=tonumber(num_str)\n\tlocal length=0\n\tlocal buff_length=string.len(buff_response)/2\n\tfor j=0,buff_length-num,1 do\n\t local Y_str=string.sub(buff_response,2*(num+j)+1,2*(num+j)+2)\n\t\tlocal Y=tonumber(Y_str,16)\n\t\tif Y>=128 then\n\t\t length=j\n\t\t\tbreak\n\t\tend\n\t \n\tend\n return length\nend\n\n\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("ceshi 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t log.debug("ceshi:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("ceshi 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t log.debug("ceshi 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t \t if tostring(channelStrCheck)== tostring(channelNoId) then\n \n \t\t log.debug("ceshi: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n log.debug("ceshi: subdevices是nil")\n \treturn nil\n end\nend\n\n\n\nIsValid=function(data,moduleNoStrCheck)\n\tlog.debug('ceshi m=%s,开始校验数据 data=%s',moduleNoStrCheck,data)\n if data == nil or string.len(data)/2 < 3 then\n errormsg = string.format('无效的数据,长度=%s',string.len(data)/2)\n errcode = 1002\n return false\n end\n\n\tif string.sub(data,1,2) ~= '24' then\n errcode = 1003\n errormsg = string.format('回复数据的 帧头≠0x24[%s]',string.sub(data,1,2))\n return false\n end\t\n\tlocal dataLength=string.len(data)/2\n\t\n\tif string.sub(data,-2,-1) ~= '21' then\n errcode = 1004\n errormsg = string.format('回复数据的 帧尾≠0x21[%s]',string.sub(data,-2,-1))\n return false\n end\t\n log.debug('ceshi m=%s,校验通过',moduleNoStrCheck)\n\treturn true\nend\n\n -- 字符串 -> Hex\nStrToHex=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n-- Hex-> 字符串 \nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\n\nend\n--分割16进制,将其分割成俩个 \nSplits=function(szFullString)\n \tk=string.len(szFullString)\n local nSplitArray = {}\n for i=1,k/2 do\n\t\t\n nSplitArray[i]=string.sub(szFullString,2*i-1,2*i)\n\t\t\n\tend\n\treturn nSplitArray\nend\n\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n--获取采集仪下面的通道信息\ngetDeviceInfos = function(moduleNoId, channelNoId)\nlog.debug('ceshi:进入设备对应数据 moduleNoId=%s', moduleNoId)\nlog.debug('ceshi:进入设备对应数据 channelNoId=%s', channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("ceshi 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n\t\tlog.debug('ceshi:连接前端device.dnlinks[1].devices=%s', json.encode(device.dnlinks[1].devices))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug('ceshi:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n log.debug('ceshi:上面传感器下来的设备编号 channelNoId=%s', channelNoId)\n\t\t\tlocal moduleStrCheck\n local channelStrCheck\n if json.encode(child.uplink.props) ~= 'null' then\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.deviceid \n\t\t\t\tlog.debug('ceshi:传感器的设备编号111111 channelStrCheck=%s', channelStrCheck)\n -- log.debug('ceshi 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n else\n moduleStrCheck = child.props.moduleId\n channelStrCheck = child.props.deviceid\n\t\t\t\tlog.debug('ceshi:传感器的设备编号222222 channelStrCheck=%s', channelStrCheck)\n --log.debug('ceshi 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n end\n log.debug('ceshi:进入设备对应数据 channelNoId=%s', channelNoId)\n if tostring(channelStrCheck) == tostring(channelNoId) then\n if tostring(channelStrCheck) == tostring(channelNoId) then\n log.debug('ceshi: m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n end\n else\n log.debug('ceshi: subdevices是nil')\n return nil\n end\nend INLINE 2019-10-10 09:55:56.167+08 2019-10-14 14:16:13.479+08 2019-10-10 \N
+bdad7976-f666-4911-997a-031ebe9ccdf5 soil_history \N 历史数据上报\n 1.0 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 f 679f43f2-ff7d-440f-9e36-6ad3beb8d574 Lua start = function()\n \n\tlocal start=device.props.start\n\tlocal stop=device.props.stop\n\t--local cmd = capability.param\n\tlocal cmd = 'COPYD start=' .. start .. ' end=' .. stop .. ' format=fixed '\n\tlog.debug("soil_history linkcnt=%s",cmd)\n\tlocal req = StrtoHex(cmd)\n\n log.debug("soil_history request=%s", req)\n local ok, hex = ctx:ssend(req, 20000)\n\t local result = '{}'\n if ok then\t \n\t\tlog.debug("soil_history 采集仪采集数据接收成功,hex=%s ",hex) \n result = ParseResult(hex)\t\n\t else\n \tresult = {code=1001,msg='采集超时'} \n\t\t\n\t end\n local resultData =json.encode(result)\n log.debug("soil_history out序列化结果 : out is =%s", resultData)\n ctx:done(resultData)\nend\n\n\nParseResult =function(hex)\n \n\n local out = {\n data = {},\n result = {},\n type = 2\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n sData = HextoStr(hex)\n log.debug('soil_history sData是 %s', sData)\n --获取子字符串表\n local allResponse = Split(sData, ';')\n log.debug("soil_history allResponse=%s",json.encode(allResponse))\n local allResponseCount = table_leng(allResponse)\n --移除表内的“”和nil\n for i = allResponseCount, 1, -1 do\n v = allResponse[i]\n if v == '' or v == nil or string.len(v) < 10 then\n table.remove(allResponse, i)\n log.debug('soil_history 表内的“”和nil 移除元素k=%s v=%s', i, v)\n end\n end\n\n --分析单类数据\n local resplength = table_leng(allResponse)\n log.debug("soil_history resplength=%s",resplength)\n local phys = {} --存储所有通道物理量\n local moduleNo --模块号\n local dateTimeStr\n local timenow\n for k, v in ipairs(allResponse) do\n\t\t log.debug("soil_history k=%s,v=%s",k,v)\n dataIndex = string.sub(v, 1, 1)\n --单条数据首字母 D为设备信息 ,A为数据\n\n if dataIndex == 'D' then\n local otherData = Split(v, ',')\n moduleNo = otherData[2]\n local dateStr = otherData[4]\n local timeStr = otherData[5]\n dateTimeStr = string.format('%s %s', dateStr, timeStr)\n timenow = unixtimestamp(dateTimeStr)\n\t\t\t\tlog.debug('soil_history timenow=%s', timenow)\n elseif dataIndex == 'A' then\n local singleData = Split(v, ',')\n for sensorKey, sensorValue in ipairs(singleData) do\n if sensorKey > 2 then\n phys[sensorKey - 2] = singleData[sensorKey]\n end\n end\n end\n end\n\n --匹配数据部分\n\n -- local childDevice={}--测试用\n -- childDevice.id=123 --测试用\n\n for index, childDevice in pairs(device.dnlinks[1].devices) do\n\t\t log.debug('soil_history 主设备 device=%s', json.encode(device.dnlinks[1].devices))\n log.debug('soil_history 遍历子设备 是否匹配设备child=%s', json.encode(childDevice))\n\n local channelStrCheck = childDevice.uplink.props.channel\n log.debug('soil_history 子设备模块通道 接口获取 c=%s ', channelStrCheck)\n local relatedChannel = Split(channelStrCheck, ',')\n local valueNum = table_leng(relatedChannel)\n\n if childDevice.props.sensortype == 'zx' then\n local Frequency_index = tonumber(relatedChannel[1])\n local Temperature_index = tonumber(relatedChannel[2])\n local Frequency = tonumber(phys[Frequency_index])\n local Temperature = tonumber(phys[Temperature_index])\n \t\tlog.debug("soil_history 振弦通道[%s]",channelStrCheck)\n if childDevice.uplink.capabilities[1].formula.metaid == '0d1ad29d-fa86-4af0-bf45-16a19f2fd8d9' then --在iota中查找\n local K = childDevice.uplink.capabilities[1].formula.props.K\n local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n local To = childDevice.uplink.capabilities[1].formula.props.To\n log.debug("soil_history 振弦通道[%s] 公式参数 k=%s,Kt=%s,Fo=%s,To=%s",channelStrCheck,K,Kt,Fo,To)\n if K == nil or Kt == nil or Fo == nil or To == nil then\n log.debug("soil_history 振弦通道[%s] f=%s,t=%s 参数项为nil",channelStrCheck,Frequency,Temperature)\n Phy = nil\n else\n log.debug("soil_history 振弦通道11111111[%s] f=%s,t=%s",channelStrCheck,Frequency,Temperature)\n\t\t\t\t\t\tif tostring(Temperature) ~= "nil" then\n\t\t\t\t\t\t\tPhy = K * (Frequency ^ 2 - Fo ^ 2) + Kt * (Temperature - To)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tPhy = K * (Frequency ^ 2 - Fo ^ 2) \n\t\t\t\t\t\tend\n log.debug("soil_history 振弦通道[%s]当前的Phy=%s,f=%s",channelStrCheck,Phy,Frequency)\n local data1 = {\n data = {\n frequency = tonumber(string.format('%0.3f', Frequency)),\n temperature = tonumber(string.format('%0.2f', Temperature)),\n physicalvalue = tonumber(string.format('%0.3f', Phy))\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n log.debug("soil_history: 振弦通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data, data1)\n end\n end\n elseif childDevice.props.sensortype == 'dy' then\n local Vx_index = tonumber(relatedChannel[1])\n local Vx = phys[Vx_index]\n local Vy\n local Temperature\n if valueNum == 2 then\n local Temperature_index = tonumber(relatedChannel[2])\n Temperature = tonumber(phys[Temperature_index])\n elseif valueNum == 3 then\n local Vy_index = tonumber(relatedChannel[2])\n local Temperature_index = tonumber(relatedChannel[3])\n Vy = phys[Vy_index]\n Temperature = tonumber(phys[Temperature_index])\n Temperature = tonumber(string.format('%0.3f', Temperature))\n end\n\n if childDevice.uplink.capabilities[1].formula.metaid == '5116bca0-de6b-4f0b-b995-31c9801ee401' then --在iota中查找\n local Kx = childDevice.uplink.capabilities[1].formula.props.Kx\n local Ky = childDevice.uplink.capabilities[1].formula.props.Ky\n local Vo = childDevice.uplink.capabilities[1].formula.props.Vo\n\n -- log.debug("soil_history 电压通道[%s] 公式参数 Kx=%s,Ky=%s,Vo=%s",channelStrCheck,Kx,Ky,Vo)\n if Kx == nil or Ky == nil or Vo == nil then\n -- log.debug("soil_history 电压通道[%s] Vx=%s,Vy=%s 参数项为nil",channelStrCheck,Vx,Vy)\n Phy = nil\n else\n -- log.debug("soil_history 电压通道[%s] Vx=%s,Vy=%s",channelStrCheck,Vx,Vy)\n local value1 = Kx * (Vx - Vo)\n value1 = tonumber(string.format('%0.3f', value1))\n\n local value2\n if valueNum == 3 then\n value2 = Ky * (Vy - Vo)\n value2 = tonumber(string.format('%0.3f', value2))\n end\n -- log.debug("soil_history 电压通道[%s] value1=%s,AngleY=%s Temperature=%s",channelStrCheck,value1,value2,Temperature)\n local data1 = {\n data = {\n voltage=Vx,\n physicalvalue = value1,\n physicalvalue2 = value2,\n temperature = Temperature\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n log.debug("soil_history: 倾角通道[%s]data=%s",channelStrCheck,json.encode(data1))\n table.insert(out.data, data1)\n end\n end\n elseif childDevice.props.sensortype == 'standard' then\n local value1_index = tonumber(relatedChannel[1])\n local Value1 = tonumber(phys[value1_index])\n Value1 = tonumber(string.format('%0.2f', Value1))\n local Value2\n local Temperature\n if valueNum == 2 then\n local value2_index = tonumber(relatedChannel[2])\n Value2 = tonumber(phys[value2_index])\n Value2 = tonumber(string.format('%0.2f', Value2))\n log.debug('soil_history standard通道[%s] Temperature=%s', channelStrCheck, Temperature)\n elseif valueNum == 3 then\n local value2_index = tonumber(relatedChannel[2])\n Value2 = tonumber(phys[value2_index])\n Value2 = tonumber(string.format('%0.2f', Value2))\n\n local value3_index = tonumber(relatedChannel[3])\n value3 = tonumber(phys[value3_index])\n value3 = tonumber(string.format('%0.2f', value3))\n Temperature = value3\n log.debug('soil_history standard通道[%s] Temperature=%s', channelStrCheck, Temperature)\n end\n local data1 = {\n data = {\n physicalvalue = Value1,\n physicalvalue2 = Value2,\n temperature = Temperature\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n log.debug('soil_history: standard通道[%s]data=%s', channelStrCheck, json.encode(data1))\n table.insert(out.data, data1)\n end\n end\n \n local resultData = json.encode(out)\n log.debug('soil_history resultData=%s,hex=%s', json.encode(out), hex)\n\t\tout.result = {code=errcode,msg=errormsg}\n\tend\n \treturn out\nend\n\nIsValid = function(alldata)\n log.debug('soil_history 校验开始')\n if string.len(alldata) < 10 then\n errormsg = 'allData is invalid'\n errcode = 1001\n return false\n end\n\n if string.sub(alldata, 1, 4) ~= '442c' then\n errormsg = 'allData header is invalid'\n errcode = 1001\n return false\n end\n\n log.debug('soil_history 校验通过')\n return true\nend\n\n\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\nIsNumberic = function(s)\n local n = tonumber(s)\n if n then\n return true\n end\n return false\nend\n\nunixtimestamp = function(datestr)\n -- 2018/4/28 16:10:12\n log.debug('soil_history datestr=%s', datestr)\n local datelist = Split(datestr, ' ')\n local datebegin = Split(datelist[1], '/')\n local dateend = Split(datelist[2], ':')\n local year = tonumber(datebegin[1])\n local month = tonumber(datebegin[2])\n local day = tonumber(datebegin[3])\n local hour = tonumber(dateend[1])\n local minute = tonumber(dateend[2])\n local second = tonumber(dateend[3])\n --log.debug("soil_history year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n --log.debug("soil_history timenum=%s",timenum)\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --log.debug("soil_history recordTime=%s",recordTime)\n return recordTime\nend\n\n\n\n\n\n\n\n\n\n\n--字符串ascii->字符\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n\t--判断输入类型\n\tif (type(hex)~="string") then\n\t\treturn nil,"hex2str invalid input type"\n\tend\n\t--拼接字符串\n\tlocal index=1\n\tlocal ret=""\n\tfor index=1,hex:len() do\n \tlocal str = string.format("%02X",hex:sub(index):byte())\n \tif str == '0A' or str =='0a' then\n \t\tstr = '0d0a' \t\t\n \tend\t\n \tif index == hex:len() then\n \t\tstr = str..'0d0a'\n \tend\n \tret=ret..str\n\tend\n\treturn ret\nend INLINE 2019-02-22 15:22:56.817+08 2019-12-05 17:13:41.859+08 2019-02-22 \N
+f1a05ee2-3ba7-4b39-bdcb-b48d605eeb39 anXin_liquid_1932 \N 安信液压 请求应答 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0xFF, endian) --1: 帧头\n buff=iota.appendHexByte(buff, 0x41, endian)\n buff=iota.appendHexByte(buff, 0x58, endian)\n buff=iota.appendHexByte(buff, 0x4a, endian)\n buff=iota.appendHexWord(buff, 8, endian) -- 2: 类型=1\n buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 3: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 4: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 5: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,4000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==34) then\n local pressure = iota.hexToInt(hex,9,'B')/1000.0;\n local temp = iota.hexToShort(hex,13,'B')/100.0; \n out.data = {\n pressure=pressure, \n temperature\t=temp\n }\n \n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2017-09-04 14:22:46.875+08 2019-12-24 11:26:51.494+08 2017-09-04 \N
+b7f5077d-347e-478e-b86a-78a1b8929d25 anxin_inclinometer \N 安信 测斜 主动上报 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start=function()\n log.debug("anxin_inclinometer.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n local moduleStr=device.uplink.props.module\n log.debug("anxin_inclinometer [%s] Data, ctx=%s",moduleStr,hex)\n local out={\n data ={},\n result = {}\n\t\n }\n \n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n\t local xData = iota.hexToShort(hex,24,'B')/1000.0;\n local yData = iota.hexToShort(hex,26,'B')/1000.0;\n local zData = iota.hexToShort(hex,28,'B')/1000.0;\n local temp = iota.hexToShort(hex,30,'B')/100.0; \n \n\n\t local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anxin_inclinometer timeStr=%s",timeStr)\n dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anxin_inclinometer dateTimeStr=%s",dateTimeStr)\n timenow = unixtimestamp(dateTimeStr)\n\t \n out={\n\t\t\t\t data={ \n\t\t\t\t anglex=xData,\n angley=yData,\n anglez=zData,\n temperature=temp\n\t\t\t\t },\n\t\t\t\t\ttime=timenow\n\t\t\t\t } \n \n \n \t\n local resultData =json.encode(out)\n log.debug("anxin_inclinometer [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = errcode, msg = errormsg}\n ctx:done(json.encode(out))\n end \nend\n\nIsValid=function(data,deviceModule)\n if data == nil then\n errormsg = 'anxin_inclinometer:Data is nil'\n errcode = 1001\n \tlog.debug("anxin_inclinometer [%s] %s",deviceModule,errormsg)\n return false\n end\n\n local dataModule= iota.hexToShort(data,6,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('anxin_inclinometer module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("anxin_inclinometer [%s] %s",deviceModule,errormsg)\n return false\n end\n\n log.debug("anxin_inclinometer [%s] 校验通过",deviceModule)\n return true\n \nend\n \nunixtimestamp = function(datestr)\n \n local year = tonumber(string.sub(datestr,1,4))\n local month = tonumber(string.sub(datestr,5,6))\n local day = tonumber(string.sub(datestr,7,8))\n local hour = tonumber(string.sub(datestr,9,10))\n local minute = tonumber(string.sub(datestr,11,12))\n local second = tonumber(string.sub(datestr,13,14))\n\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2019-12-24 11:44:23.234+08 2019-12-24 13:27:25.985+08 2019-12-24 \N
+f280eb1c-31e4-4c9e-94b7-1de7919c1855 zy_inclination_1503 \N 1.0 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 f 4fd9bf53-3722-4a0e-9145-178e3be83216 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "fs_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n buff=iota.appendHexWord(buff, 22, endian) -- 2: 类型=22\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("zy_1503 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("zy_1503 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n buff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 1: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n--0016261381F35D42830C36094DFE363C80FFE1F8CFEF40\n--moduleId=9747\n--"temp": 23.81,\n--"xDegree": -30,\n--"yDegree": -1.967921\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\n local scale = 1000000.00;\n --print("parsing data", hex)\n local Temp = iota.hexToShort(hex,11,'B')/100.0;\n local xa = iota.hexToInt(hex,13,'B')/scale;\n local ya = iota.hexToInt(hex,17,'B')/scale;\n \n out.data = {\n temperature=Temp,\n \tanglex = xa,\n \tangley = ya\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('zy_1503开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1002\n return false\n end\n \n if iota.hexToByte(data,4,'B') ~= 0x81 then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo_check) ~= tostring(iota.hexToShort(data,2,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('zy_1503数据校验通过')\n return true\n--crc\nend\n\n INLINE 2020-04-10 14:51:40.86+08 2020-04-10 14:51:40.86+08 2020-04-10 \N
+0d0916bd-221d-433b-8e40-ea4728310292 fs_weather \N 实际设备-山东仁科测控 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --D:\\SVN\\202004项目\\气象多要素百叶箱使用说明书.pdf\nstart=function()\n log.debug("start %s, ctx=%s", "fs_weather.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n buff=iota.appendHexByte(buff, 0xf4, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x08, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("fs_weather,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '超时'} \n\t ctx:done(json.encode(errout))\n\tend\nend\n--010301f400080000\n--0103160292ff9b000300040005000600070008FFFF\n--temperature:-10.1\n--humility:65.8\n--\n--\n--\n--\n--\n--\nunmarshall=function(hex,moduleNoStr)\n log.debug("fs_weather m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local humidity =iota.hexToShort(hex,3,'B')/10\n \tlocal temperature =iota.hexToShort(hex,5,'B')/10\n \tlocal noise =iota.hexToShort(hex,7,'B')/10\n \tlocal pm25 =iota.hexToShort(hex,9,'B')\n \tlocal pm10 =iota.hexToShort(hex,11,'B')\n \tlocal pressure =iota.hexToShort(hex,13,'B')/10\n \tlocal intensity =iota.hexToInt(hex,15,'B')\n out.data = { \n temperature=temperature,\n \t\thumidity=humidity,\n \t\tnoise=noise,\n \t\tpm25=pm25,\n \t\tpm10=pm10,\n \t\tpressure=pressure,\n \t\tintensity=intensity\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("fs_weather m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n\tlocal checkLen=string.len(data)/2\n if data == nil or checkLen~= 21 then\n errormsg = string.format('无效的数据长度=%s≠21',checkLen)\n errcode = 1002\n return false\n end\n local dataModule=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataModule) then\t\n errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n errcode = 1003\n return false\n end\n return true\n--crc\nend INLINE 2020-04-08 10:03:03.792+08 2020-04-08 11:24:05.875+08 2020-04-08 \N
+408b3be5-3a50-4c01-8432-9de0ecd0607a T-780 \N 激光收敛计(激光位移传感器T-780) 1.0 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e f 8d49238d-6e0e-421c-adaf-f7472ec0b50e Lua \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "T-780 ", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t--低字节在前 01 03 00 a3 00 02 34 29\n\t--低字节在前 01030400002710 E0 0F\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("T-780 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("T-780 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0xa3, endian)\n \t\tbuff=iota.appendHexByte(buff, 0x00, endian) \t\t\n buff=iota.appendHexByte(buff, 0x02, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n\t\t\n\t\tlog.debug('T-780 %s buff111111',buff)\n\t\t\n\t\t\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("T-780 SSend error!")\n end\n ctx:done(result)\nend\n\n--01 03 04 00 00 27 10 E0 0F\n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\t\t\t\n local displacement = iota.hexToUInt(hex,3,'B')/10\n\t\tlog.debug('T-780 displacement=%s',displacement)\n\t\n\t\t\n\t\t\n \n \n out.data = {\n\t\t\tdisplacement=displacement\n\t\t\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n log.debug('T-780 %s 开始校验数据',data)\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n \n log.debug('T-780 数据校验通过')\n return true\n\nend\n\n\n\t\n \n INLINE 2019-09-29 16:17:26.118+08 2020-04-14 13:57:58.241+08 2019-09-29 \N
+60b3c120-3fc4-4e3f-b5ec-85d4a53b72af SCT726T30 \N 数字型双轴倾角计 1.0 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e f 8d49238d-6e0e-421c-adaf-f7472ec0b50e Lua \nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "SCT726T30",device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t --68 04 00 04 08 \n\t\n\t\tlocal moduleNo = device.uplink.props.module --模块 通道 优先接口获取\t\t\n log.debug("SCT726T30 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, 0x68, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff,CS(1,buff),endian) \n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("SCT726T30 SSend error!")\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n local signx = tonumber(string.sub(hex,9,9))\n \n local anglex = tonumber(string.sub(hex,10,16))/10000\n local signy = tonumber(string.sub(hex,17,17))\n local angley = tonumber(string.sub(hex,18,24))/10000\n if signx==1 then\n anglex=anglex*-1\n end\n if signy==1 then\n angley=angley*-1\n end\n \n out.data = {\n anglex=anglex,\n angley=angley\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('SCT726T30 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 17 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,2,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('SCT726T30 数据校验通过')\n return true\n--crc\nend\n\nCS=function(start,buff)\n local lcr = 0\n for i = start, string.len(buff)/2-1 do\n lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n end \n local value= bit:_and(lcr,0xff) \n return value\nend \n\n\n\t\n \n\n INLINE 2019-09-29 11:20:13.485+08 2019-10-15 09:52:50.601+08 2019-09-29 \N
+46f179ce-6108-4ecd-a414-a184cb2b5de4 fs_llj \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n协议号: 1101;\n协议名: modbus 温湿度.\n]]--\n--协议参考文档: “统一协议-V2012-04-28.xls”\n\nstart=function ()\n\tlog.debug("fs_llj:load script %s, moduleId=%s", "fs_llj", device.moduleId or "[nil]") \n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fs_llj 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("fs_llj 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\tsendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tlog.debug("fs_llj:发送数据=%s",sendBuff)\n\tlocal result=""\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\t\tlog.debug("fs_llj:接收数据=%s",resp)\n\telse\n local errorOut={\n data ={},\n result = {}\n }\n\t\terrorOut.result = {code=1001,msg='采集超时'} \n result=json.encode(errorOut)\n\tend\n \tlog.debug("fs_llj:result=%s",result)\n\tctx:notify(result)\nend\n\nfunction protocol_encode(moduleNo_str)\n\t-- 32字节. 大字序\n\tlocal BE='B'\n\tlocal buff='';\n\tlocal module = tonumber(moduleNo_str)\n\tbuff=iota.appendHexByte(buff, module); -- 1: 1 帧头 去:FC,回 FD\n\tbuff=iota.appendHexByte(buff, 0x03); -- 1: 2 设备类型,温湿度=1\t\t\n\tbuff=buff.."0003"; -- 1 1 : 5/6 无用\n\tbuff=iota.appendHexWord(buff, 0x02, BE); -- 2: 3/4 模块号\n\tbuff = iota.appendHexCrc(buff,'L',0)\n\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 FD01002300000100005541CC000000000000000000000000000000000000C4DF\n--temp=25.5 Hum=0.85 module=35\nfunction protocol_decode(da,moduleNoCheck)\n \n\tlocal data = da;\n\t\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug("fs_llj:收到数据%s",data)\n\t--判断数据有效性\t\t\t\n\t--0xFD固定帧头,01是温湿度设备类型 0xDF固定帧尾\n local ErrorCode = IsValid(data,moduleNoCheck)\n if ErrorCode then \n local hour = os.date("%H")\n local min = os.date("%M")\n\tlocal acqnumber = tonumber(hour)\n log.debug("数据有效")\n\t\t--计算温湿度\n\t\tlocal data1 = iota.hexToFloat(data, 3, 'B',6);\n\n\t\tout.data = {\n\t\trunoff = data1,\n \t_acq_number = acqnumber\n\t\t};\n else\n out.result = {code=errcode,msg=errormsg} \n end\n\treturn json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n log.debug('fs_llj:开始校验数据%s',data)\n \tlocal devicetype = iota.hexToByte(data,1,'B');\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \tif devicetype ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleNoCheckStr) ~= iota.hexToByte(data,0,'B') then\t\n errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNoCheckStr,iota.hexToByte(data,0,'B'))\n errcode = 1004\n return false\n end\n log.debug('fs_llj:数据校验通过')\n return true\n--crc\nend\n\nonData=function(msg)\nend\n\n INLINE 2019-07-09 14:59:47.907+08 2019-07-17 19:24:23.018+08 2019-07-09 \N
+ea8db328-6c73-45bd-ae5e-07dc714dab2c jb_water_1103 \N 1.0 808e0822-39be-47f9-b409-837e6d913d53 808e0822-39be-47f9-b409-837e6d913d53 f 808e0822-39be-47f9-b409-837e6d913d53 Lua start = function()\n log.debug('load script %s, moduleId=%s', 'jb_water_1104', device.uplink.props.module or '[nil]')\n local buff = ''\n local result = '{}'\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n\n log.debug('jb_water_1104 设备模块 m==%s ', moduleNo)\n\n\n buff = iota.appendHexByte(buff, moduleNo, 'L')\n buff = iota.appendHexByte(buff, 0x03, 'B')\n buff = iota.appendHexWord(buff, 0x02, 'B')\n buff = iota.appendHexWord(buff, 0x02, 'B')\n buff = iota.appendHexCrc(buff, 'L', 0)\n\n ok, resp = ctx:ssend(buff, 10000)\n log.debug('jb_water_1104 发送 读取 数据读取指令=%s', buff)\n\n log.debug('jb_water_1104 接收数据=%s', resp)\n if ok then\n result = unmarshall_temp(resp, moduleNo)\n else\n log.debug('jb_water_1104 数据采集失败')\n end\n\tlog.debug('jb_water_1104 result %s', result)\n ctx:done(result)\nend\n--01030400000064fbd8 1m\n--01030400000384faa0 9m\n\nunmarshall_temp = function(hex, moduleStr)\n local out = {\n type = 1,\n data = {},\n result = {}\n }\n\n local ErrorCode = IsValid(hex, moduleStr)\n if ErrorCode then\n local length = iota.hexToShort(hex, 5, 'B') / 100\n out.data = {\n length = length\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n return json.encode(out)\nend\n\nIsValid = function(data, moduleNo_check)\n log.debug('jb_water_1104 开始校验数据=%s', data)\n if data == nil or string.len(data) / 2 ~=9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n\n if iota.hexToByte(data, 1, 'B') ~= 0x03 then\n errcode = 1002\n errormsg = '返回功能码不是0x03'\n return false\n end\n local dataModule = tostring(iota.hexToByte(data, 0, 'B'))\n if moduleNo_check ~= dataModule then\n errormsg = string.format('数据内模块号[%s]不匹配设备模块号[%s]', dataModule, moduleNo_check)\n errcode = 1004\n return false\n end\n log.debug('jb_water_1104 数据校验通过')\n return true\n --crc\nend\n INLINE 2019-10-29 10:58:10.96+08 2020-03-23 11:09:35.062+08 2019-10-29 \N
+4930470c-205d-414f-aa01-bf60c835c3c9 SCT716T \N 梁式测斜仪 1.0 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e f 8d49238d-6e0e-421c-adaf-f7472ec0b50e Lua \nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\nfunction bit:_not(a) \n local op1=self:d2b(a) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 then \n r[i]=0 \n else \n r[i]=1 \n end \n end \n return self:b2d(r) \nend --bit:_not \n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "SCT726T30",device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t --68 04 00 04 08 \n\t\n\t\tlocal moduleNo = device.uplink.props.module --模块 通道 优先接口获取\t\t\n log.debug("SCT726T30 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, 0x68, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff,CS(1,buff),endian) \n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("SCT726T30 SSend error!")\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n local signx = tonumber(string.sub(hex,9,9))\n \n local anglex = tonumber(string.sub(hex,10,16))/10000\n local signy = tonumber(string.sub(hex,17,17))\n local angley = tonumber(string.sub(hex,18,24))/10000\n if signx==1 then\n anglex=anglex*-1\n end\n if signy==1 then\n angley=angley*-1\n end\n \n out.data = {\n angle=anglex\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('SCT726T30 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 17 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,2,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('SCT726T30 数据校验通过')\n return true\n--crc\nend\n\nCS=function(start,buff)\n local lcr = 0\n for i = start, string.len(buff)/2-1 do\n lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n end \n local value= bit:_and(lcr,0xff) \n return value\nend \n\n\n\t\n \n\n INLINE 2019-09-29 11:19:11.056+08 2019-10-15 11:37:50.895+08 2019-09-29 \N
+c6b0bea6-fc62-4662-910e-2a3d247a1bcb anXin_liquid \N 安信 液压 主动上报 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start=function()\n log.debug("anXin_liquid.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n local moduleStr=device.uplink.props.module\n log.debug("anXin_liquid [%s] Data, ctx=%s",moduleStr,hex)\n local out={\n data ={},\n result = {}\n\t\n }\n \n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n\t local pressure = iota.hexToInt(hex,24,'B')/1000.0;\n local temp = iota.hexToShort(hex,28,'B')/100.0; \n \n\n\t local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anXin_liquid timeStr=%s",timeStr)\n dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anXin_liquid dateTimeStr=%s",dateTimeStr)\n timenow = unixtimestamp(dateTimeStr)\n\t\t\t\t\n\t\t out={\n\t\t\t\t data={ \n\t\t\t\t pressure=pressure, \n temperature\t=temp\n\t\t\t\t },\n\t\t\t\t\ttime=timenow\n\t\t\t\t }\n \n \n \n \n \t\n local resultData =json.encode(out)\n log.debug("anXin_liquid [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = errcode, msg = errormsg}\n ctx:done(json.encode(out))\n end \nend\n\nIsValid=function(data,deviceModule)\n if data == nil then\n errormsg = 'anXin_liquid:Data is nil'\n errcode = 1001\n \tlog.debug("anXin_liquid [%s] %s",deviceModule,errormsg)\n return false\n end\n\n local dataModule= iota.hexToShort(data,6,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('anXin_liquid module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("anXin_liquid [%s] %s",deviceModule,errormsg)\n return false\n end\n\n log.debug("anXin_liquid [%s] 校验通过",deviceModule)\n return true\n \nend\n \nunixtimestamp = function(datestr)\n \n local year = tonumber(string.sub(datestr,1,4))\n local month = tonumber(string.sub(datestr,5,6))\n local day = tonumber(string.sub(datestr,7,8))\n local hour = tonumber(string.sub(datestr,9,10))\n local minute = tonumber(string.sub(datestr,11,12))\n local second = tonumber(string.sub(datestr,13,14))\n\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2019-12-24 11:29:56.518+08 2019-12-24 11:30:30.869+08 2019-12-24 \N
+e61f0ab0-2501-4b75-81d9-2efecc3e4bbb fs_gprs_test \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start=function()\n log.debug("fs_gprs : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n if data ~=nil then\n log.debug("fs_gprs devices data =%s",data)\n ParseData(data) \n else\n log.error("fs_gprs recvd content is nil")\n end\nend\n\n\nfunction ParseData(data)\n local out={\n data ={},\n result = {},\n type=2\n }\n if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then --振动数据\n log.debug("fs_gprs 振动数据 data =%s",data)\n local package=iota.hexToShort(data,8,'L')\n local packagecount=iota.hexToShort(data,10,'L')\n local datpackage=string.sub(data,41,-9)\n local moduleid=iota.hexToShort(data,16,'L')\n\n local req1 =''\n local req2 =''\n local req =''\n req1=iota.appendHexByte(req1, 01 , 'L') -- 0-3 压缩协议 4-7 协议版本\n req1=iota.appendHexByte(req1, 0x02 , 'L')\n req1=iota.appendHexWord(req1, 0x0007 , 'L')\n req1=iota.appendHexWord(req1, 0x0000 , 'L')\n \n req2=iota.appendHexWord(req2, package , 'L')\n req2=iota.appendHexWord(req2, packagecount , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, moduleid , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n local checkdat=req1..req2\n local checksum=HeadCheckSum(checkdat)\n req=req1\n req=iota.appendHexWord(req, checksum , 'L')\n req=req..req2\n req=iota.appendHexWord(req, package , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=req..'00000000'\n req=iota.appendHexCrc(req, 'L' ,0) --校验\n local crc16=string.sub(req,-4,-1)\n req=string.sub(req,1,-13)\n req=req..crc16\n req=iota.appendHexByte(req, 0 , 'L') \n req=iota.appendHexByte(req, 0xfa , 'L') \n log.debug("fs_gprs datfileback %s", req)\n ctx:asend(req, 20000)\n\n if package==packagecount then\n local r1,ok = redis.get(device.id.."_mpzd")\n log.debug("fs_gprs 解析dat r1= %s", r1)\n ParseFileDat(r1)\n else\n if package==1 then\n local firstpackage=string.sub(datpackage,-80,-1)\n redis.set(device.id.."_mpzd", firstpackage)\n log.debug("fs_gprs 接收dat datpackage= %s", firstpackage)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据首包'\n }\n }\n ctx:notify(json.encode(re))\n else\n local r1,ok = redis.get(device.id.."_mpzd")\n log.debug("fs_gprs 接收dat r1= %s package=%s", r1,package)\n local data=r1..datpackage\n redis.set(device.id.."_mpzd", data)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n end\n else \n\t \n\t -- 非振动数据\n if string.sub(data,13,16)=='8a00' then\n local rtumodule=iota.hexToShort(data,3,'B')\n local power = iota.hexToByte(data,13,'B')\n log.debug("fs_gprs 剩余电量 %s", power)\n\t\t\tlocal setting = iota.hexToByte(data,14,'B')\n\t\t\tlog.debug("fs_gprs 通道配置版本号 %s", setting)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\tlog.debug("fs_gprs 版本固件 %s", ver)\n\t\t\tlocal backlog =iota.hexToShort(data,15,'B')\n\t\t\tlog.debug("fs_gprs 积压数据 %s", tostring(backlog))\n\t\t\tlocal wakeup =iota.hexToShort(data,22,'B')\n\t\t\tlog.debug("fs_gprs 节点苏醒次数 %s", tostring(wakeup))\t\t\t\t\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\t\t\tredis.set(device.id.."_backlog", tostring(backlog))\n\t\t\tredis.set(device.id.."_wakeup", tostring(wakeup))\t\t\t\n\t\t\tlocal version = string.format("%0.2f",ver)\n\t\t\tlocal v = Split(version,'.')\n\t\t\tlocal vlen = v[2].length\n\t\t \n\t\t\tif vlen == 1 then\n\t\t\t version = version.."0"\n\t\t\telseif vlen == 0 then\n\t\t\t version = version..".00"\n\t\t\tend\n\t\t\tlog.debug('fs_gprs version=%s', version)\t\t\t\n\t\t\tredis.set(device.id.."_version", version)\t\t\t\n\n local strdevice= toHexStr(json.encode(device))\n strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n local crc=string.sub(strdevice,-4,-1)\n log.debug("fs_gprs devices crc =%s",crc)\n local r1,ok = redis.get(device.id.."_mpset")\n if ok and r1~=nil then\n\t\t\t log.debug("fs_gprs crc %s r1 %s setting%s" ,crc,r1,setting)\n if crc == r1 and setting ~= 0xFF then\n log.debug("fs_gprs 配置无修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 0, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fs_gprs 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置无修改'\n }\n }\n ctx:notify(json.encode(re))\n else\n log.debug("fs_gprs 配置有修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fs_gprs 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n else\n log.debug("fs_gprs 配置初次配置")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fs_gprs 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n end\n \n if string.sub(data,13,16)=='8a02' then\n log.debug("fs_gprs 设备休眠")\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '设备休眠'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n local rtumodule=iota.hexToShort(data,3,'B')\n if string.sub(data,13,16)=='8601' then\n local time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\tlog.debug("fs_gprs r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver="V"..r1\n\t\t\t\tlog.debug("fs_gprs r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\tlog.debug("fs_gprs powerstr=%s",powerstr)\n \n\t\t\tr1,r1ok = redis.get(device.id.."_backlog") --获取上次未上传记录\n\t\t\tlocal backlog = 0\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tbacklog=r1\n\t\t\t\tlog.debug("fs_gprs r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\t\tend\n\t\t\t\n\t\t\tr1,r1ok = redis.get(device.id.."_wakeup") --获取上次记录苏醒次数\n\t\t\tlocal wakeup = 0\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\twakeup=r1\n\t\t\t\tlog.debug("fs_gprs r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\t\tend\t\t\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnode = {\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time \n\t\t\t}\n\t\t\tlocal tb = {\n\t\t\t\t\t\t\tR=tostring(backlog),\n\t\t\t\t\t\t\tWTS=tostring(wakeup)\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\ttable.insert(rst.data.R.node,tb)\t\t\t\t\n\t\t\ttable.insert(out.data,rst)\n local isover=iota.hexToByte(data,25,'B') --尾包\n local datalength=0\n local firststart=27\n for i=1,sensorCount,1 do\n firststart=firststart+datalength\t\t\t\t\n local sensorType=iota.hexToByte(data,firststart,'B')\n local module=iota.hexToShort(data,firststart+3,'B')\n local channel=iota.hexToByte(data,firststart+2,'B')\n datalength=iota.hexToByte(data,firststart+1,'B')+6\n if sensorType==0 then --振弦\n local childDevice=getZxDeviceInfo(module,channel)\n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\tlocal k = childDevice.uplink.props.k or 0\n\t\t\t\t\t\tlocal kt = childDevice.uplink.props.kt or 0\t\t\t\t\t\t\n\t\t\t\t\t\tlocal f0 = childDevice.uplink.props.f0 or 0\n\t\t\t\t\t\tlocal t0 = childDevice.uplink.props.t0 or 0\t\t\n\t\t\t\t\t\tlocal status = iota.hexToByte(data,firststart+11,'B')\n\t\t\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\t\t\tlocal freq = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\tlocal temp = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\tlog.debug("fs_gprs 振弦 Phy =%s, deviceid %s", Phy,childDevice.id)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\tam = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B'),\n\t\t\t\t\t\t\t\tphysicalvalue = Phy\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t}\n\t\t\t\t\t\tif rst.data.temperature == 200 or rst.data.temperature == -200 then\n \t\t\t\trst.data.temperature = nil \n \t\t\tend\n\t\t\t\t\t\tif status == 1 then\n\t\t\t\t\t\t\trst.result = {code=30010022,msg="频率线断路"}\n \t\t\t\trst.data ={}\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif status == 2 then\n\t\t\t\t\t\t\trst.result = {code=30010023,msg="频率线短路"}\n \t\t\t\trst.data ={}\n\t\t\t\t\t\tend\t\t\t\t\t\t\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tlog.debug("fs_gprs 振弦 %s", json.encode(out))\n\t\t\t\t\tend\n end\n if sensorType==1 then --485\n local childDevice=getDeviceInfo(module,channel)\n \t\t\tlocal protocalCode=iota.hexToShort(data,firststart+6,'B')\n\t\t\t\t\tlocal hour = os.date("%H")\n\t\t\t\t\tlocal min = os.date("%M")\n\t\t\t\t\tlocal acqnum = hour*2+1\n\t\t\t\t\tif tonumber(min) >= 30 then\n\t\t\t\t\t\tacqnum = acqnum+1\n\t\t\t\t\tend\n\t\t\t\t\tlog.debug("fs_gprs acqnum %s", acqnum)\n\t\t\t\t\tif childDevice~=nil then\t\n\t\t\t\t\t\tif protocalCode==1503 or protocalCode==1502 then --测斜\n\t\t\t\t\t\tlog.debug("fs_gprs 测斜 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tangley = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B'),\n\t\t\t\t\t\t\t\t\t_acq_number=acqnum\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_gprs 测斜 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n \n \t\t\t if protocalCode==9101 then --拉线位移\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_gprs 位移 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_gprs 位移 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==9102 then --裂缝\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_gprs 裂缝 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_gprs 裂缝 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==9218 then --风速\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_gprs 风速 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tspeed = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_gprs 风速 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n\t\t\t\t\tif protocalCode==9219 then --风向\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_gprs 风向 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tdirection = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_gprs 风向 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==1102 then --温湿度\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\thumidity = iota.hexToFloat(data,firststart+16,'B') \n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n end\n \n if protocalCode==9002 then --压差\n\t\t\t\t\t\tlog.debug("fs_gprs yc ")\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n end\n\t\t\t\t\tif protocalCode==9030 then --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t\tlog.debug("fs_gprs 静力水准仪 %s, deviceid: %s", module,childDevice.id)\n\t\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n \t\t\t\t\t_acq_number=acqnum\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509 then --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992 then --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_gprs 水位 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\t--temperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\tpressure=iota.hexToFloat(data,firststart+12,'B')--兼容老设备\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_microPower_1 水位 %s", json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\t\t\n end\n\t\t\t\tlog.debug("fs_microPower_1 dataresult %s", json.encode(out))\n end \n log.debug("fs_microPower_1 out %s", json.encode(out))\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0601, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0000, 'B') --数据区长度\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fs_microPower_1: databack: %s", req)\n ctx:asend(req, 20000)\n ctx:notify(json.encode(out)) \n end\n end\nend\n\nfunction Deploy()\n local total=totalSensors()\n log.debug("fs_microPower_1 : totalSensors =%s",total)\n local over=0\n local onepag=0\n local totallength=3\n local buff=''\n \n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n over=over+1\n onepag=onepag+1\n\t\t\tlog.debug("fs_microPower_1 subdevice =%s",json.encode(subdevice))\n if subdevice.props.sensortype=='zx' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x00, 'B') --传感器类型\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n\n local settingvib = tonumber(colgain) + tonumber(incentive) * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n log.debug("fs_microPower_1 : settingvib =%s",settingvib)\n buff=iota.appendHexByte(buff, settingvib, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexByte(buff, settingvib, 'B') --振弦采集参数\n buff=iota.appendHexWord(buff, subdevice.uplink.props.frequency, 'B') --振弦频率初值\n buff=iota.appendHexByte(buff, 0x00, 'B') --上传频谱ID\n buff=iota.appendHexByte(buff, 0x01, 'B') --采集选项\n end \n if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x01, 'B') --传感器类型\n\t\t\t\tlog.debug("fs_microPower_1 : begin setting")\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tlog.debug("fs_microPower_1 baudrate =%s databits %s parity %s stopbits %s sensor %s",baudrate,databits,parity,stopbits,json.encode(subdevice))\n\t\t\t\tlocal setting\n\t\t\t\tif baudrate == nil then\n\t\t\t\t\tsetting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n\t\t\t\telse\n setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n\t\t\t\tend\n log.debug("fs_microPower_1 setting =%s",setting)\n buff=iota.appendHexByte(buff, setting, 'B') --选项1 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B') --协议号\n buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B') --模块号\n buff=iota.appendHexByte(buff, 0x01, 'B') --子通道号\n end\n if subdevice.props.sensortype =='zd' then \n totallength=totallength+31 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x04, 'B') --传感器类型\n buff=iota.appendHexByte(buff, 0x00, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x12, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B') --定时采样间隔\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B') --定时采样时长\n buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B') --加速度触发采样时长\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B') --采样频率\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B') --滤波频率\n\n buff=iota.appendHexWord(buff, 0x42c8, 'B')\n buff=iota.appendHexWord(buff, 0x0000, 'B')\n buff=iota.appendHexWord(buff, 0x4248, 'B')\n buff=iota.appendHexWord(buff, 0x0000, 'B')\n local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n buff=iota.appendHexByte(buff, trigger1, 'B') --触发加速度\n buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B') --加速度范围\n buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B') --滞后点数\n\n end\n if over==8 or onepag==total then \n local buffhead=''\n buffhead=iota.appendHexByte(buffhead, 0xfe, 'B') --帧头\n buffhead=iota.appendHexWord(buffhead, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B') --模块号\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --命令源\n buffhead=iota.appendHexWord(buffhead, 0x0306, 'B') --指令\n buffhead=iota.appendHexWord(buffhead, 0x0000, 'B') --消息ID\n buffhead=iota.appendHexWord(buffhead, totallength, 'B') --数据区长度\n if onepag==total then\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --尾包\n else\n buffhead=iota.appendHexByte(buffhead, 0x00, 'B') --尾包\n end\n buffhead=iota.appendHexByte(buffhead, total, 'B') --采集指令总通道指令个数\n buffhead=iota.appendHexByte(buffhead, over, 'B') --该分包通道指令个数\n buff=buffhead..buff\n buff=iota.appendHexCrc(buff, endian ,0) --校验\n buff=iota.appendHexByte(buff, 0xef, 'B') --帧尾\n\t\t\t\tlog.debug("fs_microPower_1 ssend request =%s",ack)\n local ok, ack = ctx:ssend(buff, 20000)\n log.debug("fs_microPower_1 deploy back =%s",ack)\n buff=''\n if over==8 then\n over=0\n end\n totallength=3\n if onepag==total then\n log.debug("fs_microPower_1 配置下发完成")\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置下发完成'\n }\n }\n ctx:notify(json.encode(re))\n end\n end \n end\n end \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \tlog.debug("fs_microPower_1 subdevice=%s",subdevice) \n return subdevice\n end \n end\n end\n log.debug("fs_microPower_1 has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("fs_microPower_1 has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n log.debug("fs_microPower_1 has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("fs_microPower_1 has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n log.debug("fs_microPower_1 dat content =%s", dathex)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n log.debug("fs_microPower_1 deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n local floatcount = (string.len(dathex)/2-40)/4\n log.debug("fs_microPower_1 begin parse")\n local vols = {}\n\t\tlocal mean = 0\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n log.debug("fs_microPower_1 finish parse")\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n sampleFreq=samplefreq,\n filterFreq=filterfreq,\n gainAmplifier=gainamplifier,\n triggerType=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n }\n table.insert(out.data,rst)\n \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\tlog.debug("fs_microPower_1 r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver="V"..r1\n\t\t\tlog.debug("fs_microPower_1 r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_backlog") --获取上次未上传记录\n\t\tlocal backlog\n\t\tif r1ok and r1~=nil then\n\t\t\tbacklog=r1\n\t\t\tlog.debug("fs_microPower_1 r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_wakeup") --获取上次记录苏醒次数\n\t\tlocal wakeup\n\t\tif r1ok and r1~=nil then\n\t\t\twakeup=r1\n\t\t\tlog.debug("fs_microPower_1 r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\tend\t\t\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("fs_microPower_1 powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tnode = {\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time \n\t\t}\n\t\tlocal tb = {\n\t\t\t\t\t\tR=backlog,\n\t\t\t\t\t\tWTS=wakeup\n\t\t\t\t}\t\n\t\ttable.insert(rstd.data.R.node,tb)\t\t\t\n\t\ttable.insert(out.data,rstd)\n\t\tlog.debug("fs_microPower_1 cloudvibrate=%s",json.encode(out))\n ctx:notify(json.encode(out))\n else\n log.debug("fs_microPower_1 not found device module=%s channel=%s",deviceId,channel)\n end\nend\n\nfunction totalSensors()\n local sensorcnt=0\n for i,dnlink in pairs(device.dnlinks) do \n sensorcnt = #(dnlink.devices) + sensorcnt \n end\n return sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend \n\nfunction HeadCheckSum(data)\n local sum=0\n local len = string.len(data)\n log.debug("fs_microPower_1 len %s", len)\n for i =1,len,4 do \n local te=tonumber(string.sub(data,i,i+3) ,16)\n log.debug("fs_microPower_1 te %s", te)\n sum = sum+ tonumber(te)\n end\n log.debug("fs_microPower_1 sum %s", sum)\n return 0xffff-sum\nend\n\n INLINE 2019-12-12 16:59:11.949+08 2020-04-02 17:08:47.346+08 2019-12-12 \N
+f2ec840a-2e0c-4178-91e8-8b5b44009561 fs_idau_cloudvibrate \N 提取云振动i文件解析 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start=function()\n log.debug("fs_idau_cloudvibrate : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n log.debug("fs_idau_cloudvibrate [%s] recvd =%s",data.name ,json.encode(data))\n \t--log.debug("fs_idau_cloudvibrate : devid =%s", device.dnlink.props.module)\n if data ~=nil then\n if data.type == "idau/file" then \n if data.ext==".dat" then\n --log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n ParseFileDat(data.payload)\n else\n log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n end\n else\n log.error("fs_idau_cloudvibrate : content type is not file, error recvd type is %s", data.type)\n end\n else\n log.error("fs_idau_cloudvibrate : recvd content is nil")\n end\nend\n\nfunction ParseFileDat(dathex)\n --log.debug("fs_idau_cloudvibrate : dat content =%s,len =%s", dathex,string.len(dathex)/2)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n --log.debug("fs_idau_cloudvibrate deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n\t\tlocal valuek = tonumber(subdevice.props.k) or 1\n\t\tif valuek == 0 then\n\t\t\tvaluek = 1\n\t\tend\n local floatcount = (string.len(dathex)/2-40)/4\n --log.debug("fs_idau_cloudvibrate begin parse count=%s",floatcount)\n local vols = {}\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n \t\tlocal data = string.sub(dathex,2*(offset+1)-1,-1)\n \t\tlocal value = iota.hexToFloat(data,0,'L',6) / (valuek)\t\t\t\n\t\t\tvols[i] = tonumber(string.format("%.6f",value))\n --vols[i]= iota.hexToFloat(data,0,'L',6) / (valuek)\n end\n --log.debug("fs_idau_cloudvibrate finish parse")\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n sampleFreq=samplefreq,\n filterFreq=filterfreq,\n gainAmplifier=gainamplifier,\n triggerType=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n }\n table.insert(out.data,rst)\n --log.debug("fs_idau_cloudvibrate deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n ctx:notify(json.encode(out))\n else\n --log.debug("fs_idau_cloudvibrate not found device module=%s channel=%s",deviceId,channel)\n end\nend\n\nfunction getDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n --log.debug("fs_idau_cloudvibrate has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug("fs_idau_cloudvibrate has no subdevices.")\n return nil -- 没有子设备\n end\nend\n INLINE 2018-03-29 15:22:03.254+08 2020-08-11 10:18:32.422+08 2018-03-29 \N
+19b75009-14b8-45df-8924-0cc8d5a5ea89 ludeng \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --AES128\n--require('bit')-----------------------------------------------------------------------------\nlocal bit = {data32 = {}}\nfor i = 1, 32 do\n bit.data32[i] = 2 ^ (32 - i)\nend\n\nfunction bit:d2b(arg)\n local tr = {}\n for i = 1, 32 do\n if arg >= self.data32[i] then\n tr[i] = 1\n arg = arg - self.data32[i]\n else\n tr[i] = 0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr = 0\n for i = 1, 32 do\n if arg[i] == 1 then\n nr = nr + 2 ^ (32 - i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a, b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r = {}\n\n for i = 1, 32 do\n if op1[i] == 1 or op2[i] == 1 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_xor(a, b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r = {}\n for i = 1, 32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a, b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r = {}\n\n for i = 1, 32 do\n if op1[i] == 1 and op2[i] == 1 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n return self:b2d(r)\nend --bit:_and\n\nfunction bit:_rshift(a, n)\n local op1 = self:d2b(a)\n local r = self:d2b(0)\n\n if n < 32 and n > 0 then\n for i = 1, n do\n for i = 31, 1, -1 do\n op1[i + 1] = op1[i]\n end\n op1[1] = 0\n end\n r = op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a, n)\n local op1 = self:d2b(a)\n local r = self:d2b(0)\n\n if n < 32 and n > 0 then\n for i = 1, n do\n for i = 1, 31 do\n op1[i] = op1[i + 1]\n end\n op1[32] = 0\n end\n r = op1\n end\n return self:b2d(r)\nend --bit:_lshift\n\nfunction bit:_not(a)\n local op1 = self:d2b(a)\n local r = {}\n\n for i = 1, 32 do\n if op1[i] == 1 then\n r[i] = 0\n else\n r[i] = 1\n end\n end\n return self:b2d(r)\nend --bit:_not\n\n--local util = require('aeslua.util')--------------------------------------------------------------------------------------------\n\nlocal util = {}\nfunction util.byteParity(byte)\n byte = bit:_xor(byte, bit:_rshift(byte, 4))\n byte = bit:_xor(byte, bit:_rshift(byte, 2))\n byte = bit:_xor(byte, bit:_rshift(byte, 1))\n return bit:_and(byte, 1)\nend\n\n--\n-- get byte at position index\n--\nfunction util.getByte(number, index)\n if (index == 0) then\n return bit:_and(number, 0xff)\n else\n return bit:_and(bit:_rshift(number, index * 8), 0xff)\n end\nend\n\n--\n-- put number into int at position index\n--\nfunction util.putByte(number, index)\n if (index == 0) then\n return bit:_and(number, 0xff)\n else\n return bit:_lshift(bit:_and(number, 0xff), index * 8)\n end\nend\n\n--\n-- convert byte array to int array\n--\nfunction util.bytesToInts(bytes, start, n)\n local ints = {}\n for i = 0, n - 1 do\n ints[i] =\n util.putByte(bytes[start + (i * 4)], 3) + util.putByte(bytes[start + (i * 4) + 1], 2) +\n util.putByte(bytes[start + (i * 4) + 2], 1) +\n util.putByte(bytes[start + (i * 4) + 3], 0)\n end\n return ints\nend\n\n--\n-- convert int array to byte array\n--\nfunction util.intsToBytes(ints, output, outputOffset, n)\n n = n or #ints\n for i = 0, n do\n for j = 0, 3 do\n output[outputOffset + i * 4 + (3 - j)] = util.getByte(ints[i], j)\n end\n end\n return output\nend\n\n--\n-- convert bytes to hexString\n--\nfunction util.bytesToHex(bytes)\n local hexBytes = ''\n\n for i, byte in ipairs(bytes) do\n hexBytes = hexBytes .. string.format('%02x ', byte)\n end\n\n return hexBytes\nend\n\n--\n-- convert data to hex string\n--\nfunction util.toHexString(data)\n local type = type(data)\n if (type == 'number') then\n return string.format('%08x', data)\n elseif (type == 'table') then\n return util.bytesToHex(data)\n elseif (type == 'string') then\n local bytes = {string.byte(data, 1, #data)}\n\n return util.bytesToHex(bytes)\n else\n return data\n end\nend\n\nfunction util.padByteString(data, pkcs)\n --以8个字节为一组,如果数据不足8位,则以8位做对齐\n --缺少6个字节,则需要补充6个字节的06,达到8位长度\n --补充对齐后 FF FF 06 06 06 06 06 06\n local paddingLength = math.ceil(#data / 16) * 16 - #data\n local padding = ''\n --以8个字节为一组,如果数据不足8位,则以8位做对齐,末尾填充缺少的字节数量\n --\n if (pkcs == 'PKCS5') then\n for i = 1, paddingLength do\n padding = padding .. string.char(paddingLength)\n end\n end\n\n return data .. padding\nend\n\nfunction util.properlyDecrypted(data)\n local random = {string.byte(data, 1, 4)}\n\n if (random[1] == random[3] and random[2] == random[4]) then\n return true\n end\n\n return false\nend\n\nfunction util.unpadByteString(data)\n if (not util.properlyDecrypted(data)) then\n --return nil\n end\n\n local len = string.len(data)\n\n --计算原来数据长度\n local dataLength =\n util.putByte(string.byte(data, -1), 3) + util.putByte(string.byte(data, -6), 2) +\n util.putByte(string.byte(data, -7), 1) +\n util.putByte(string.byte(data, -8), 0)\n\n return string.sub(data, 1, 8 + dataLength) --截去数据\nend\n\nfunction util.xorIV(data, iv)\n for i = 1, 16 do\n data[i] = bit:_xor(data[i], iv[i])\n end\nend\n\n-------------------------------------------------------------------------------------------------------------aeslua--1\n---require('aeslua')\nlocal aeslua = {}\n--local ciphermode = require('aeslua.ciphermode')-------------------------------------------------------------------------------------------------------\nlocal ciphermode = {}\n\n--\nlocal aes = {}\n--require('aeslua.aes')\n-------------------------------------------------------------------------------------------------------------------\n--????\n\n--local gf = require("aeslua.gf");------------------------------------------------------------------------------------------\nlocal gf = {}\ngf.n = 0x100\ngf.ord = 0xff\ngf.irrPolynom = 0x11b\ngf.exp = {}\ngf.log = {}\n\n--\n-- add two polynoms (its simply xor)\n--\nfunction gf.add(operand1, operand2)\n return bit:_xor(operand1, operand2)\nend\n\n--\n-- subtract two polynoms (same as addition)\n--\nfunction gf.sub(operand1, operand2)\n return bit:_xor(operand1, operand2)\nend\n\n--\n-- inverts element\n-- a^(-1) = g^(order - log(a))\n--\nfunction gf.invert(operand)\n -- special case for 1\n if (operand == 1) then\n return 1\n end\n -- normal invert\n local exponent = gf.ord - gf.log[operand]\n return gf.exp[exponent]\nend\n\n--\n-- multiply two elements using a logarithm table\n-- a*b = g^(log(a)+log(b))\n--\nfunction gf.mul(operand1, operand2)\n if (operand1 == 0 or operand2 == 0) then\n return 0\n end\n\n local exponent = gf.log[operand1] + gf.log[operand2]\n if (exponent >= gf.ord) then\n exponent = exponent - gf.ord\n end\n return gf.exp[exponent]\nend\n\n--\n-- divide two elements\n-- a/b = g^(log(a)-log(b))\n--\nfunction gf.div(operand1, operand2)\n if (operand1 == 0) then\n return 0\n end\n -- TODO: exception if operand2 == 0\n local exponent = gf.log[operand1] - gf.log[operand2]\n if (exponent < 0) then\n exponent = exponent + gf.ord\n end\n return gf.exp[exponent]\nend\n\n--\n-- print logarithmic table\n--\nfunction gf.printLog()\n for i = 1, gf.n do\n print('log(', i - 1, ')=', gf.log[i - 1])\n end\nend\n\n--\n-- print exponentiation table\n--\nfunction gf.printExp()\n for i = 1, gf.n do\n print('exp(', i - 1, ')=', gf.exp[i - 1])\n end\nend\n\n--\n-- calculate logarithmic and exponentiation table\n--\nfunction gf.initMulTable()\n local a = 1\n\n for i = 0, gf.ord - 1 do\n gf.exp[i] = a\n gf.log[a] = i\n\n -- multiply with generator x+1 -> left shift + 1\n a = bit:_xor(bit:_lshift(a, 1), a)\n\n -- if a gets larger than order, reduce modulo irreducible polynom\n if a > gf.ord then\n a = gf.sub(a, gf.irrPolynom)\n end\n end\nend\n\ngf.initMulTable()\n\n--local util = require('aeslua.util')----------------------------------------------------------------------------\n\n--\n-- Implementation of AES with nearly pure lua (only bitlib is needed)\n--\n-- AES with lua is slow, really slow :-)\n--\n\n--local public = {}\n--local private = {}\n\n--aeslua.aes = public\n\n-- some constants\naes.ROUNDS = 'rounds'\naes.KEY_TYPE = 'type'\naes.ENCRYPTION_KEY = 1\naes.DECRYPTION_KEY = 2\n\n-- aes SBOX\naes.SBox = {}\naes.iSBox = {}\n\n-- aes tables\naes.table0 = {}\naes.table1 = {}\naes.table2 = {}\naes.table3 = {}\n\naes.tableInv0 = {}\naes.tableInv1 = {}\naes.tableInv2 = {}\naes.tableInv3 = {}\n\n-- round constants\naes.rCon = {\n 0x01000000,\n 0x02000000,\n 0x04000000,\n 0x08000000,\n 0x10000000,\n 0x20000000,\n 0x40000000,\n 0x80000000,\n 0x1b000000,\n 0x36000000,\n 0x6c000000,\n 0xd8000000,\n 0xab000000,\n 0x4d000000,\n 0x9a000000,\n 0x2f000000\n}\n\n--\n-- affine transformation for calculating the S-Box of AES\n--\nfunction aes.affinMap(byte)\n mask = 0xf8\n result = 0\n for i = 1, 8 do\n result = bit:_lshift(result, 1)\n\n parity = util.byteParity(bit:_and(byte, mask))\n result = result + parity\n\n -- simulate roll\n lastbit = bit:_and(mask, 1)\n mask = bit:_and(bit:_rshift(mask, 1), 0xff)\n if (lastbit ~= 0) then\n mask = bit:_or(mask, 0x80)\n else\n mask = bit:_and(mask, 0x7f)\n end\n end\n\n return bit:_xor(result, 0x63)\nend\n\n--\n-- calculate S-Box and inverse S-Box of AES\n-- apply affine transformation to inverse in finite field 2^8\n--\nfunction aes.calcSBox()\n for i = 0, 255 do\n if (i ~= 0) then\n inverse = gf.invert(i)\n else\n inverse = i\n end\n mapped = aes.affinMap(inverse)\n aes.SBox[i] = mapped\n aes.iSBox[mapped] = i\n end\nend\n\n--\n-- Calculate round tables\n-- round tables are used to calculate shiftRow, MixColumn and SubBytes\n-- with 4 table lookups and 4 xor operations.\n--\nfunction aes.calcRoundTables()\n for x = 0, 255 do\n byte = aes.SBox[x]\n aes.table0[x] =\n util.putByte(gf.mul(0x03, byte), 0) + util.putByte(byte, 1) + util.putByte(byte, 2) +\n util.putByte(gf.mul(0x02, byte), 3)\n aes.table1[x] =\n util.putByte(byte, 0) + util.putByte(byte, 1) + util.putByte(gf.mul(0x02, byte), 2) +\n util.putByte(gf.mul(0x03, byte), 3)\n aes.table2[x] =\n util.putByte(byte, 0) + util.putByte(gf.mul(0x02, byte), 1) + util.putByte(gf.mul(0x03, byte), 2) +\n util.putByte(byte, 3)\n aes.table3[x] =\n util.putByte(gf.mul(0x02, byte), 0) + util.putByte(gf.mul(0x03, byte), 1) + util.putByte(byte, 2) +\n util.putByte(byte, 3)\n end\nend\n\n--\n-- Calculate inverse round tables\n-- does the inverse of the normal roundtables for the equivalent\n-- decryption algorithm.\n--\nfunction aes.calcInvRoundTables()\n for x = 0, 255 do\n byte = aes.iSBox[x]\n aes.tableInv0[x] =\n util.putByte(gf.mul(0x0b, byte), 0) + util.putByte(gf.mul(0x0d, byte), 1) +\n util.putByte(gf.mul(0x09, byte), 2) +\n util.putByte(gf.mul(0x0e, byte), 3)\n aes.tableInv1[x] =\n util.putByte(gf.mul(0x0d, byte), 0) + util.putByte(gf.mul(0x09, byte), 1) +\n util.putByte(gf.mul(0x0e, byte), 2) +\n util.putByte(gf.mul(0x0b, byte), 3)\n aes.tableInv2[x] =\n util.putByte(gf.mul(0x09, byte), 0) + util.putByte(gf.mul(0x0e, byte), 1) +\n util.putByte(gf.mul(0x0b, byte), 2) +\n util.putByte(gf.mul(0x0d, byte), 3)\n aes.tableInv3[x] =\n util.putByte(gf.mul(0x0e, byte), 0) + util.putByte(gf.mul(0x0b, byte), 1) +\n util.putByte(gf.mul(0x0d, byte), 2) +\n util.putByte(gf.mul(0x09, byte), 3)\n end\nend\n\n--\n-- rotate word: 0xaabbccdd gets 0xbbccddaa\n-- used for key schedule\n--\nfunction aes.rotWord(word)\n local tmp = bit:_and(word, 0xff000000)\n return (bit:_lshift(word, 8) + bit:_rshift(tmp, 24))\nend\n\n--\n-- replace all bytes in a word with the SBox.\n-- used for key schedule\n--\nfunction aes.subWord(word)\n return util.putByte(aes.SBox[util.getByte(word, 0)], 0) + util.putByte(aes.SBox[util.getByte(word, 1)], 1) +\n util.putByte(aes.SBox[util.getByte(word, 2)], 2) +\n util.putByte(aes.SBox[util.getByte(word, 3)], 3)\nend\n\n--\n-- generate key schedule for aes encryption\n--\n-- returns table with all round keys and\n-- the necessary number of rounds saved in [aes.ROUNDS]\n--\nfunction aes.expandEncryptionKey(key)\n local keySchedule = {}\n local keyWords = math.floor(#key / 4)\n\n if ((keyWords ~= 4 and keyWords ~= 6 and keyWords ~= 8) or (keyWords * 4 ~= #key)) then\n print('Invalid key size: ', keyWords)\n return nil\n end\n\n keySchedule[aes.ROUNDS] = keyWords + 6\n keySchedule[aes.KEY_TYPE] = aes.ENCRYPTION_KEY\n\n for i = 0, keyWords - 1 do\n keySchedule[i] =\n util.putByte(key[i * 4 + 1], 3) + util.putByte(key[i * 4 + 2], 2) + util.putByte(key[i * 4 + 3], 1) +\n util.putByte(key[i * 4 + 4], 0)\n end\n\n for i = keyWords, (keySchedule[aes.ROUNDS] + 1) * 4 - 1 do\n local tmp = keySchedule[i - 1]\n\n if (i % keyWords == 0) then\n tmp = aes.rotWord(tmp)\n tmp = aes.subWord(tmp)\n\n local index = math.floor(i / keyWords)\n tmp = bit:_xor(tmp, aes.rCon[index])\n elseif (keyWords > 6 and i % keyWords == 4) then\n tmp = aes.subWord(tmp)\n end\n\n keySchedule[i] = bit:_xor(keySchedule[(i - keyWords)], tmp)\n end\n\n return keySchedule\nend\n\n--\n-- Inverse mix column\n-- used for key schedule of decryption key\n--\nfunction aes.invMixColumnOld(word)\n local b0 = util.getByte(word, 3)\n local b1 = util.getByte(word, 2)\n local b2 = util.getByte(word, 1)\n local b3 = util.getByte(word, 0)\n\n return util.putByte(\n gf.add(gf.add(gf.add(gf.mul(0x0b, b1), gf.mul(0x0d, b2)), gf.mul(0x09, b3)), gf.mul(0x0e, b0)),\n 3\n ) +\n util.putByte(gf.add(gf.add(gf.add(gf.mul(0x0b, b2), gf.mul(0x0d, b3)), gf.mul(0x09, b0)), gf.mul(0x0e, b1)), 2) +\n util.putByte(gf.add(gf.add(gf.add(gf.mul(0x0b, b3), gf.mul(0x0d, b0)), gf.mul(0x09, b1)), gf.mul(0x0e, b2)), 1) +\n util.putByte(gf.add(gf.add(gf.add(gf.mul(0x0b, b0), gf.mul(0x0d, b1)), gf.mul(0x09, b2)), gf.mul(0x0e, b3)), 0)\nend\n\n--\n-- Optimized inverse mix column\n-- look at http://fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.311.pdf\n-- TODO: make it work\n--\nfunction aes.invMixColumn(word)\n local b0 = util.getByte(word, 3)\n local b1 = util.getByte(word, 2)\n local b2 = util.getByte(word, 1)\n local b3 = util.getByte(word, 0)\n\n local t = bit:_xor(b3, b2)\n local u = bit:_xor(b1, b0)\n local v = bit:_xor(t, u)\n v = bit:_xor(v, gf.mul(0x08, v))\n w = bit:_xor(v, gf.mul(0x04, bit:_xor(b2, b0)))\n v = bit:_xor(v, gf.mul(0x04, bit:_xor(b3, b1)))\n\n return util.putByte(bit:_xor(bit:_xor(b3, v), gf.mul(0x02, bit:_xor(b0, b3))), 0) +\n util.putByte(bit:_xor(bit:_xor(b2, w), gf.mul(0x02, t)), 1) +\n util.putByte(bit:_xor(bit:_xor(b1, v), gf.mul(0x02, bit:_xor(b0, b3))), 2) +\n util.putByte(bit:_xor(bit:_xor(b0, w), gf.mul(0x02, u)), 3)\nend\n\n--\n-- generate key schedule for aes decryption\n--\n-- uses key schedule for aes encryption and transforms each\n-- key by inverse mix column.\n--\nfunction aes.expandDecryptionKey(key)\n local keySchedule = aes.expandEncryptionKey(key)\n if (keySchedule == nil) then\n return nil\n end\n\n keySchedule[aes.KEY_TYPE] = aes.DECRYPTION_KEY\n\n for i = 4, (keySchedule[aes.ROUNDS] + 1) * 4 - 5 do\n keySchedule[i] = aes.invMixColumnOld(keySchedule[i])\n end\n\n return keySchedule\nend\n\n--\n-- xor round key to state\n--\nfunction aes.addRoundKey(state, key, round)\n for i = 0, 3 do\n state[i] = bit:_xor(state[i], key[round * 4 + i])\n end\nend\n\n--\n-- do encryption round (ShiftRow, SubBytes, MixColumn together)\n--\nfunction aes.doRound(origState, dstState)\n dstState[0] =\n bit:_xor(\n bit:_xor(\n bit:_xor(aes.table0[util.getByte(origState[0], 3)], aes.table1[util.getByte(origState[1], 2)]),\n aes.table2[util.getByte(origState[2], 1)]\n ),\n aes.table3[util.getByte(origState[3], 0)]\n )\n\n dstState[1] =\n bit:_xor(\n bit:_xor(\n bit:_xor(aes.table0[util.getByte(origState[1], 3)], aes.table1[util.getByte(origState[2], 2)]),\n aes.table2[util.getByte(origState[3], 1)]\n ),\n aes.table3[util.getByte(origState[0], 0)]\n )\n\n dstState[2] =\n bit:_xor(\n bit:_xor(\n bit:_xor(aes.table0[util.getByte(origState[2], 3)], aes.table1[util.getByte(origState[3], 2)]),\n aes.table2[util.getByte(origState[0], 1)]\n ),\n aes.table3[util.getByte(origState[1], 0)]\n )\n\n dstState[3] =\n bit:_xor(\n bit:_xor(\n bit:_xor(aes.table0[util.getByte(origState[3], 3)], aes.table1[util.getByte(origState[0], 2)]),\n aes.table2[util.getByte(origState[1], 1)]\n ),\n aes.table3[util.getByte(origState[2], 0)]\n )\nend\n\n--\n-- do last encryption round (ShiftRow and SubBytes)\n--\nfunction aes.doLastRound(origState, dstState)\n dstState[0] =\n util.putByte(aes.SBox[util.getByte(origState[0], 3)], 3) +\n util.putByte(aes.SBox[util.getByte(origState[1], 2)], 2) +\n util.putByte(aes.SBox[util.getByte(origState[2], 1)], 1) +\n util.putByte(aes.SBox[util.getByte(origState[3], 0)], 0)\n\n dstState[1] =\n util.putByte(aes.SBox[util.getByte(origState[1], 3)], 3) +\n util.putByte(aes.SBox[util.getByte(origState[2], 2)], 2) +\n util.putByte(aes.SBox[util.getByte(origState[3], 1)], 1) +\n util.putByte(aes.SBox[util.getByte(origState[0], 0)], 0)\n\n dstState[2] =\n util.putByte(aes.SBox[util.getByte(origState[2], 3)], 3) +\n util.putByte(aes.SBox[util.getByte(origState[3], 2)], 2) +\n util.putByte(aes.SBox[util.getByte(origState[0], 1)], 1) +\n util.putByte(aes.SBox[util.getByte(origState[1], 0)], 0)\n\n dstState[3] =\n util.putByte(aes.SBox[util.getByte(origState[3], 3)], 3) +\n util.putByte(aes.SBox[util.getByte(origState[0], 2)], 2) +\n util.putByte(aes.SBox[util.getByte(origState[1], 1)], 1) +\n util.putByte(aes.SBox[util.getByte(origState[2], 0)], 0)\nend\n\n--\n-- do decryption round\n--\nfunction aes.doInvRound(origState, dstState)\n dstState[0] =\n bit:_xor(\n bit:_xor(\n bit:_xor(aes.tableInv0[util.getByte(origState[0], 3)], aes.tableInv1[util.getByte(origState[3], 2)]),\n aes.tableInv2[util.getByte(origState[2], 1)]\n ),\n aes.tableInv3[util.getByte(origState[1], 0)]\n )\n\n dstState[1] =\n bit:_xor(\n bit:_xor(\n bit:_xor(aes.tableInv0[util.getByte(origState[1], 3)], aes.tableInv1[util.getByte(origState[0], 2)]),\n aes.tableInv2[util.getByte(origState[3], 1)]\n ),\n aes.tableInv3[util.getByte(origState[2], 0)]\n )\n\n dstState[2] =\n bit:_xor(\n bit:_xor(\n bit:_xor(aes.tableInv0[util.getByte(origState[2], 3)], aes.tableInv1[util.getByte(origState[1], 2)]),\n aes.tableInv2[util.getByte(origState[0], 1)]\n ),\n aes.tableInv3[util.getByte(origState[3], 0)]\n )\n\n dstState[3] =\n bit:_xor(\n bit:_xor(\n bit:_xor(aes.tableInv0[util.getByte(origState[3], 3)], aes.tableInv1[util.getByte(origState[2], 2)]),\n aes.tableInv2[util.getByte(origState[1], 1)]\n ),\n aes.tableInv3[util.getByte(origState[0], 0)]\n )\nend\n\n--\n-- do last decryption round\n--\nfunction aes.doInvLastRound(origState, dstState)\n dstState[0] =\n util.putByte(aes.iSBox[util.getByte(origState[0], 3)], 3) +\n util.putByte(aes.iSBox[util.getByte(origState[3], 2)], 2) +\n util.putByte(aes.iSBox[util.getByte(origState[2], 1)], 1) +\n util.putByte(aes.iSBox[util.getByte(origState[1], 0)], 0)\n\n dstState[1] =\n util.putByte(aes.iSBox[util.getByte(origState[1], 3)], 3) +\n util.putByte(aes.iSBox[util.getByte(origState[0], 2)], 2) +\n util.putByte(aes.iSBox[util.getByte(origState[3], 1)], 1) +\n util.putByte(aes.iSBox[util.getByte(origState[2], 0)], 0)\n\n dstState[2] =\n util.putByte(aes.iSBox[util.getByte(origState[2], 3)], 3) +\n util.putByte(aes.iSBox[util.getByte(origState[1], 2)], 2) +\n util.putByte(aes.iSBox[util.getByte(origState[0], 1)], 1) +\n util.putByte(aes.iSBox[util.getByte(origState[3], 0)], 0)\n\n dstState[3] =\n util.putByte(aes.iSBox[util.getByte(origState[3], 3)], 3) +\n util.putByte(aes.iSBox[util.getByte(origState[2], 2)], 2) +\n util.putByte(aes.iSBox[util.getByte(origState[1], 1)], 1) +\n util.putByte(aes.iSBox[util.getByte(origState[0], 0)], 0)\nend\n\n--\n-- encrypts 16 Bytes\n-- key encryption key schedule\n-- input array with input data\n-- inputOffset start index for input\n-- output array for encrypted data\n-- outputOffset start index for output\n--\nfunction aes.encrypt(key, input, inputOffset, output, outputOffset)\n --default parameters\n inputOffset = inputOffset or 1\n output = output or {}\n outputOffset = outputOffset or 1\n\n local state = {}\n local tmpState = {}\n\n if (key[aes.KEY_TYPE] ~= aes.ENCRYPTION_KEY) then\n print('No encryption key: ', key[aes.KEY_TYPE])\n return\n end\n\n state = util.bytesToInts(input, inputOffset, 4)\n aes.addRoundKey(state, key, 0)\n\n local round = 1\n while (round < key[aes.ROUNDS] - 1) do\n -- do a double round to save temporary assignments\n aes.doRound(state, tmpState)\n aes.addRoundKey(tmpState, key, round)\n round = round + 1\n\n aes.doRound(tmpState, state)\n aes.addRoundKey(state, key, round)\n round = round + 1\n end\n\n aes.doRound(state, tmpState)\n aes.addRoundKey(tmpState, key, round)\n round = round + 1\n\n aes.doLastRound(tmpState, state)\n aes.addRoundKey(state, key, round)\n\n return util.intsToBytes(state, output, outputOffset)\nend\n\n--\n-- decrypt 16 bytes\n-- key decryption key schedule\n-- input array with input data\n-- inputOffset start index for input\n-- output array for decrypted data\n-- outputOffset start index for output\n---\nfunction aes.decrypt(key, input, inputOffset, output, outputOffset)\n -- default arguments\n inputOffset = inputOffset or 1\n output = output or {}\n outputOffset = outputOffset or 1\n\n local state = {}\n local tmpState = {}\n\n if (key[aes.KEY_TYPE] ~= aes.DECRYPTION_KEY) then\n print('No decryption key: ', key[aes.KEY_TYPE])\n return\n end\n\n state = util.bytesToInts(input, inputOffset, 4)\n aes.addRoundKey(state, key, key[aes.ROUNDS])\n\n local round = key[aes.ROUNDS] - 1\n while (round > 2) do\n -- do a double round to save temporary assignments\n aes.doInvRound(state, tmpState)\n aes.addRoundKey(tmpState, key, round)\n round = round - 1\n\n aes.doInvRound(tmpState, state)\n aes.addRoundKey(state, key, round)\n round = round - 1\n end\n\n aes.doInvRound(state, tmpState)\n aes.addRoundKey(tmpState, key, round)\n round = round - 1\n\n aes.doInvLastRound(tmpState, state)\n aes.addRoundKey(state, key, round)\n\n return util.intsToBytes(state, output, outputOffset)\nend\n\n-- calculate all tables when loading this file\naes.calcSBox()\naes.calcRoundTables()\naes.calcInvRoundTables()\n\n--local buffer = require('aeslua.buffer')------------------------------------------------------------------------\n\nlocal buffer = {}\n\nfunction buffer.new()\n return {}\nend\n\nfunction buffer.addString(stack, s)\n table.insert(stack, s)\n for i = #stack - 1, 1, -1 do\n if #stack[i] > #stack[i + 1] then\n break\n end\n stack[i] = stack[i] .. table.remove(stack)\n end\nend\n\nfunction buffer.toString(stack)\n for i = #stack - 1, 1, -1 do\n stack[i] = stack[i] .. table.remove(stack)\n end\n return stack[1]\nend\n\n--local public = {}\n\n--aeslua.ciphermode = public\n\n--\n-- Encrypt strings\n-- key - byte array with key\n-- string - string to encrypt\n-- modefunction - function for cipher mode to use\n--\nfunction ciphermode.encryptString(key, data, modeFunction)\n local iv = {string.byte('zq7AZEXlnz65IEaW', 1, 16)}\n --iv or {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66} --{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}--\n local keySched = aes.expandEncryptionKey(key)\n local encryptedData = buffer.new()\n\n for i = 1, #data / 16 do\n local offset = (i - 1) * 16 + 1\n local byteData = {string.byte(data, offset, offset + 15)}\n modeFunction(keySched, byteData, iv)\n\n buffer.addString(encryptedData, myunpackStr(byteData))\n --string.char(unpack(byteData))\n end\n\n return buffer.toString(encryptedData)\nend\n\nfunction myunpackStr(tableHex)\n local AsciiStr = ''\n for i = 1, #tableHex, 1 do\n -- print("i="..i.." v="..tableHex[i])\n AsciiStr = AsciiStr .. string.char(tableHex[i])\n end\n return AsciiStr\nend\n\n--\n-- the following 4 functions can be used as\n-- modefunction for encryptString\n--\n\n-- Electronic code book mode encrypt function\nfunction ciphermode.encryptECB(keySched, byteData, iv)\n aes.encrypt(keySched, byteData, 1, byteData, 1)\nend\n\n-- Cipher block chaining mode encrypt function\nfunction ciphermode.encryptCBC(keySched, byteData, iv)\n util.xorIV(byteData, iv)\n\n aes.encrypt(keySched, byteData, 1, byteData, 1)\n\n for j = 1, 16 do\n iv[j] = byteData[j]\n end\nend\n\n-- Output feedback mode encrypt function\nfunction ciphermode.encryptOFB(keySched, byteData, iv)\n aes.encrypt(keySched, iv, 1, iv, 1)\n util.xorIV(byteData, iv)\nend\n\n-- Cipher feedback mode encrypt function\nfunction ciphermode.encryptCFB(keySched, byteData, iv)\n aes.encrypt(keySched, iv, 1, iv, 1)\n util.xorIV(byteData, iv)\n\n for j = 1, 16 do\n iv[j] = byteData[j]\n end\nend\n\n--\n-- Decrypt strings\n-- key - byte array with key\n-- string - string to decrypt\n-- modefunction - function for cipher mode to use\n--\nfunction ciphermode.decryptString(key, data, modeFunction, kiv)\n local iv = {string.byte('zq7AZEXlnz65IEaW', 1, 16)}\n --kiv or {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66} --{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}--\n\n local keySched\n if (modeFunction == ciphermode.decryptOFB or modeFunction == ciphermode.decryptCFB) then\n keySched = aes.expandEncryptionKey(key)\n else\n --log.debug('FS_streetlight_2030 查找问题 key[1]=%s,key[9]=%s,key[16]=%s', key[1], key[9], key[16])\n keySched = aes.expandDecryptionKey(key)\n end\n --log.debug('FS_streetlight_2030 查找问题 keySched[0]=%s,[1]=%s,[43]=%s', keySched[0], keySched[1], keySched[43])\n local decryptedData = buffer.new()\n\n for i = 1, #data / 16 do\n local offset = (i - 1) * 16 + 1\n local byteData = {string.byte(data, offset, offset + 15)}\n\n iv = modeFunction(keySched, byteData, iv)\n\n buffer.addString(decryptedData, myunpackStr(byteData))\n --log.debug('FS_streetlight_2030 查找问题i=%s,decryptedData=%s', i,decryptedData)\n end\n\n return buffer.toString(decryptedData)\nend\n\n--\n-- the following 4 functions can be used as\n-- modefunction for decryptString\n--\n\n-- Electronic code book mode decrypt function\nfunction ciphermode.decryptECB(keySched, byteData, iv)\n aes.decrypt(keySched, byteData, 1, byteData, 1)\n\n return iv\nend\n\n-- Cipher block chaining mode decrypt function\nfunction ciphermode.decryptCBC(keySched, byteData, iv)\n local nextIV = {}\n for j = 1, 16 do\n nextIV[j] = byteData[j]\n end\n\n aes.decrypt(keySched, byteData, 1, byteData, 1)\n util.xorIV(byteData, iv)\n\n return nextIV\nend\n\n-- Output feedback mode decrypt function\nfunction ciphermode.decryptOFB(keySched, byteData, iv)\n aes.encrypt(keySched, iv, 1, iv, 1)\n util.xorIV(byteData, iv)\n\n return iv\nend\n\n-- Cipher feedback mode decrypt function\nfunction ciphermode.decryptCFB(keySched, byteData, iv)\n local nextIV = {}\n for j = 1, 16 do\n nextIV[j] = byteData[j]\n end\n\n aes.encrypt(keySched, iv, 1, iv, 1)\n\n util.xorIV(byteData, iv)\n\n return nextIV\nend\n\n--local util = require('aeslua.util')--包含了\n\n--\n-- Simple API for encrypting strings.\n--\n\naeslua.AES128 = 16\naeslua.AES192 = 24\naeslua.AES256 = 32\n\naeslua.ECBMODE = 1\naeslua.CBCMODE = 2\naeslua.OFBMODE = 3\naeslua.CFBMODE = 4\n\nfunction aeslua.pwToKey(password, keyLength)\n local padLength = keyLength\n if (keyLength == aeslua.AES192) then\n padLength = 32\n end\n\n if (padLength > #password) then\n local postfix = ''\n for i = 1, padLength - #password do\n postfix = postfix .. string.char(0)\n end\n password = password .. postfix\n else\n password = string.sub(password, 1, padLength)\n end\n\n local pwBytes = {string.byte(password, 1, #password)}\n --password = ciphermode.encryptString(pwBytes, password, ciphermode.encryptCBC)\n\n password = string.sub(password, 1, keyLength)\n\n return {string.byte(password, 1, #password)}\nend\n\n--\n-- Encrypts string data with password password.\n-- password - the encryption key is generated from this string\n-- data - string to encrypt (must not be too large)\n-- keyLength - length of aes key: 128(default), 192 or 256 Bit\n-- mode - mode of encryption: ecb, cbc(default), ofb, cfb\n--\n-- mode and keyLength must be the same for encryption and decryption.\n--\nfunction aeslua.encrypt(password, data, keyLength, mode)\n assert(password ~= nil, 'Empty password.')\n assert(data ~= nil, 'Empty data.')\n\n local mode = mode or aeslua.CBCMODE\n local keyLength = keyLength or aeslua.AES128\n\n local key = aeslua.pwToKey(password, keyLength)\n\n local paddedData = util.padByteString(data, 'PKCS5')\n --PKCS5Padding 对齐\n\n --paddedData=data..password--不修改原文\n\n if (mode == aeslua.ECBMODE) then\n return ciphermode.encryptString(key, paddedData, ciphermode.encryptECB)\n elseif (mode == aeslua.CBCMODE) then\n return ciphermode.encryptString(key, paddedData, ciphermode.encryptCBC)\n elseif (mode == aeslua.OFBMODE) then\n return ciphermode.encryptString(key, paddedData, ciphermode.encryptOFB)\n elseif (mode == aeslua.CFBMODE) then\n return ciphermode.encryptString(key, paddedData, ciphermode.encryptCFB)\n else\n return nil\n end\nend\n\n--\n-- Decrypts string data with password password.\n-- password - the decryption key is generated from this string\n-- data - string to encrypt\n-- keyLength - length of aes key: 128(default), 192 or 256 Bit\n-- mode - mode of decryption: ecb, cbc(default), ofb, cfb\n--\n-- mode and keyLength must be the same for encryption and decryption.\n--\nfunction aeslua.decrypt(password, data, keyLength, mode)\n --log.debug('FS_streetlight_2030 查找key问题1 password=%s', password)\n local mode = mode or aeslua.CBCMODE\n local keyLength = keyLength or aeslua.AES128\n\n local key = aeslua.pwToKey(password, keyLength)\n\n --local key_IV = aeslua.pwToKey(password_IV, keyLength)\n local plain\n if (mode == aeslua.ECBMODE) then\n plain = ciphermode.decryptString(key, data, ciphermode.decryptECB)\n elseif (mode == aeslua.CBCMODE) then\n plain = ciphermode.decryptString(key, data, ciphermode.decryptCBC)\n elseif (mode == aeslua.OFBMODE) then\n plain = ciphermode.decryptString(key, data, ciphermode.decryptOFB)\n elseif (mode == aeslua.CFBMODE) then\n plain = ciphermode.decryptString(key, data, ciphermode.decryptCFB)\n end\n\n result = util.unpadByteString(plain)\n\n if (result == nil) then\n return nil\n end\n\n return result\nend\n\n-------------------------------------------------------------------------------------------------------------aeslua--2\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\nfunction encodeBase64(source_str)\n local b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n local s64 = ''\n local str = source_str\n\n while #str > 0 do\n local bytes_num = 0\n local buf = 0\n\n for byte_cnt = 1, 3 do\n buf = (buf * 256)\n if #str > 0 then\n buf = buf + string.byte(str, 1, 1)\n str = string.sub(str, 2)\n bytes_num = bytes_num + 1\n end\n end\n\n for group_cnt = 1, (bytes_num + 1) do\n local b64char = math.fmod(math.floor(buf / 262144), 64) + 1\n s64 = s64 .. string.sub(b64chars, b64char, b64char)\n buf = buf * 64\n end\n\n for fill_cnt = 1, (3 - bytes_num) do\n s64 = s64 .. '='\n end\n end\n\n return s64\nend\n\nfunction decodeBase64(str64)\n local b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n local temp = {}\n for i = 1, 64 do\n temp[string.sub(b64chars, i, i)] = i\n end\n temp['='] = 0\n local str = ''\n for i = 1, #str64, 4 do\n if i > #str64 then\n break\n end\n local data = 0\n local str_count = 0\n for j = 0, 3 do\n local str1 = string.sub(str64, i + j, i + j)\n if not temp[str1] then\n return\n end\n if temp[str1] < 1 then\n data = data * 64\n else\n data = data * 64 + temp[str1] - 1\n str_count = str_count + 1\n end\n end\n for j = 16, 0, -8 do\n if str_count > 0 then\n -- local temp=data/2^j\n str = str .. string.char(math.floor(data / 2 ^ j))\n data = data % 2 ^ j\n str_count = str_count - 1\n end\n end\n end\n\n local last = tonumber(string.byte(str, string.len(str), string.len(str)))\n if last == 0 then\n str = string.sub(str, 1, string.len(str) - 1)\n end\n return str\nend\n\nfunction getHmacMd5(keyStr, dataStr)\n local length = 64\n local ipad = {}\n local opad = {}\n log.debug('keyStr是%s,dataStr是%s', keyStr, dataStr)\n local keyArr = {string.byte(keyStr, 1, #keyStr)}\n local data = {string.byte(dataStr, 1, #dataStr)}\n for i = 1, 64, 1 do\n ipad[i] = 0x36\n opad[i] = 0x5c\n\n if i > #keyStr then\n keyArr[i] = 0 --密钥固定长度64\n end\n end\n --calc K XOR ipad 使用密钥和ipad进行异或运算\n --calc K XOR opad 使用密钥和opad进行异或运算。\n local kIpadXorResult = {}\n local kOpadXorResult = {}\n local firstAppendResult = {}\n for i = 1, 64, 1 do\n kIpadXorResult[i] = bit:_xor(keyArr[i], ipad[i]) % 0xFF\n kOpadXorResult[i] = bit:_xor(keyArr[i], opad[i]) % 0xFF\n firstAppendResult[i] = kIpadXorResult[i]\n --firstAppendResultStr=tostring\n end\n\n --append "text" to the end of "K XOR ipad" 将待加密数据追加到K XOR ipad计算结果后面。\n\n for i = 1, #dataStr, 1 do\n firstAppendResult[i + 64] = data[i]\n end\n\n --calc H(K XOR ipad, text) 使用哈希算法计算上面结果的摘要。\n local firstAppendResult_AsciiiStr = string.char(unpack(firstAppendResult))\n --log.debug("firstAppendResult_hexStr 是=%s",firstAppendResult_hexStr)\n local firstHashResultStr = crypto.md5(firstAppendResult_AsciiiStr)\n local firstHashResult = {}\n for i = 1, #firstHashResultStr / 2, 1 do\n firstHashResult[i] = tonumber(string.sub(firstHashResultStr, 2 * i - 1, 2 * i), 16)\n end\n --string.byte(firstHashResultStr,1,#firstHashResultStr)}\n --log.debug("firstHashResult 长度=%s",#firstHashResult)\n\n local secondAppendResult = {}\n for i = 1, #kOpadXorResult, 1 do\n secondAppendResult[i] = kOpadXorResult[i]\n end\n\n for i = 1, #firstHashResult, 1 do\n secondAppendResult[i + 64] = firstHashResult[i]\n end\n local secondAppendResult_AsciiStr = string.char(unpack(secondAppendResult))\n\n --log.debug("secondAppendResult[1]=%s,[2]=%s",secondAppendResult[1],secondAppendResult[2])\n\n local hmacMd5BytesStr = crypto.md5(secondAppendResult_AsciiStr)\n --log.debug("firstHashResult 是"..firstHashResultStr)\n --log.debug("hmacMd5BytesStr 是"..hmacMd5BytesStr)\n return hmacMd5BytesStr\nend\n\ngetPostBodyStr = function(OperatorID, Data_aes)\n local pwd_hmacMD5 = 'KviqtkNnzJpzYfQQ'\n local tokenPara_OperatorID = OperatorID\n local tokenPara_Data = Data_aes\n local tokenPara_timeStamp = os.date('%Y%m%d%H%M%S', os.time() - 60)\n local tokenPara_Seq = '0001'\n local hmacMD5str = tokenPara_OperatorID .. tokenPara_Data .. tokenPara_timeStamp .. tokenPara_Seq\n local tokenPara_Sig = string.upper(getHmacMd5(pwd_hmacMD5, hmacMD5str)) --需要计算\n --log.debug('FS_streetlight_2030 tokenPara_Sig=%s', tokenPara_Sig)\n local bodyParam = {\n OperatorID = tokenPara_OperatorID,\n --device.props.account,\n Data = tokenPara_Data,\n TimeStamp = tokenPara_timeStamp,\n Seq = tokenPara_Seq,\n Sig = tokenPara_Sig\n }\n return json.encode(bodyParam)\nend\n\nsendPost = function(url, header, Data_aes128base64, urlType)\n log.debug('FS_streetlight_2030 开始发送post请求[%s]', urlType)\n local req = {\n type = 'http',\n url = url, --http://slighting.shuncom.com.cn/app/query_token\n method = 'post',\n header = header\n }\n req.ContentType = 'application/json'\n --req.url = device.props.tokenUrl\n log.debug('FS_streetlight_2030 url=%s,Data_aes128base64=%s,urlType=%s', req.url, Data_aes128base64, urlType)\n --log.debug('FS_streetlight_2030 设备原型=' .. json.encode(device))\n --req.header['agent'] = '0'\n local pwdForAes128 = 'RKloinporqKRSdv8'\n local ivForAes128 = 'zq7AZEXlnz65IEaW'\n local OperatorID = '553512698'\n --local Data_aes128base64 = 'atoKLqxbuuKMSggLDTJMMyYrSUqA0BOTDMpkeanSRR/Ovk3yddGl3jxrej8FWvTztkydRK2zzOit83NqxwZCVA=='\n req.body = getPostBodyStr(OperatorID, Data_aes128base64)\n log.debug(\n 'FS_streetlight_2030 [%s][%s] 发送请求 header=%s, body=%s',\n device.props.matchName,\n urlType,\n json.encode(header),\n req.body\n ) -- ,req.body\n local ok, ack = ctx:ssend(req, 20 * 1000) --单位秒\n log.debug('FS_streetlight_2030 [%s][%s] 请求返回 ok=%s', device.props.matchName, urlType, ok) -- ,req.body\n\n --临时用 请求不到数据认为关灯\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n local lightDeviceNum = #subdevices\n\n if not ok or ack == nil then\n log.debug('FS_streetlight_2030 [%s][%s] 请求超时 ok=%s,ack=%s', device.props.matchName, urlType, ok, ack)\n out.result = {\n code = 1002,\n msg = 'timeout'\n }\n\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do\n -- log.debug('fs_1401 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ', moduleNo, channelNo, json.encode(moduleNo), child.props.moduleId)\n local data1 = {\n data = {},\n device = child.id,\n type = 1\n }\n\n data1.data.on = 0 -- 1,//on为1是开灯为0是关灯\n\n data1.data.online = 0\n\n table.insert(out.data, data1)\n end\n log.debug(\n 'FS_streetlight_2030 [%s][%s] 请求超时 所有灯 [%s]个,默认离线',\n device.props.matchName,\n urlType,\n lightDeviceNum\n )\n end\n else --OK\n if ack.code == 200 and ack.body ~= '' then -- http应答\n local dataTable = json.decode(ack.body)\n local resp_token_hasAes128_base64 = dataTable.Data\n --log.debug('FS_streetlight_2030 [%s] 解析 dataTable 成功', urlType)\n --local resp_token_hasAes128 = decodeBase64(resp_token_hasAes128_base64)\n local isOK_deBase64, resp_token_hasAes128 = crypto.base64Decode(resp_token_hasAes128_base64)\n --log.debug('FS_streetlight_2030 [%s] 解密base64 成功,开始解密AES128, pwdForAes128=%s,密文=%s', urlType, pwdForAes128,resp_token_hasAes128_base64)\n\n local resp_token_hasAes128_hex = iota.stringToHex(resp_token_hasAes128)\n --local resp_token_DTstr = aeslua.decrypt(pwdForAes128, resp_token_hasAes128, aeslua.AES128, aeslua.CBCMODE)\n local isOK_deAes128, resp_token_DTstr_hex =\n crypto.aes128Decrypt(resp_token_hasAes128_hex, pwdForAes128, ivForAes128)\n\n local resp_token_DTstr = iota.hexToString(resp_token_DTstr_hex)\n -- log.debug('FS_streetlight_2030 [%s][%s] API返回结果',device.props.matchName, urlType)\n\n --去除异常字符\n -- resp_token_DTstr = clear_illegalChar(resp_token_DTstr)\n\n if urlType == 'token' then\n --log.debug('FS_streetlight_2030 [%s][%s] token返回结果=%s',device.props.matchName, urlType, resp_token_DTstr)\n -- out.data.token = resp_token\n local resp_token_DT = json.decode(resp_token_DTstr)\n local resp_token = resp_token_DT.AccessToken\n --log.debug('FS_streetlight_2030 [%s] resp_token_DTstr=%s',device.props.matchName, resp_token)\n return resp_token\n elseif urlType == 'login' then\n --log.debug('FS_streetlight_2030 [%s][%s] login返回结果=%s',device.props.matchName, urlType, resp_token_DTstr)\n -- out.data.SessionId = resp_SessionId\n local resp_login_DT = json.decode(resp_token_DTstr)\n local resp_SessionId = resp_login_DT.SessionId\n --log.debug('FS_streetlight_2030 [%s] resp_SessionId=%s', device.props.matchName,resp_SessionId)\n return resp_SessionId\n elseif urlType == 'read' then\n --log.debug('FS_streetlight_2030 [%s] API返回 read 结果=%s',device.props.matchName,resp_token_DTstr)\n local resp_read_DT = json.decode(resp_token_DTstr)\n local resp_total = resp_read_DT.total\n --log.debug('FS_streetlight_2030 resp_SessionId=%s', resp_total)\n -- out.data.total = resp_total\n local resp_total = resp_read_DT.total\n log.debug(\n 'FS_streetlight_2030 [%s][灯数=%s] API返回 read 结果数量=%s',\n device.props.matchName,\n lightDeviceNum,\n #resp_read_DT.rows\n )\n\n local hasData_light = {} --有数据的灯记录\n for i = 1, #resp_read_DT.rows, 1 do\n local singleData = resp_read_DT.rows[i]\n local addrStr = singleData.name -- 00273123 --灯具zigbee地址\n --log.debug('FS_streetlight_2030 查找灯具名称=%s', addrStr)\n --根据灯地址找设备 id\n local childDevice = getDeviceInfo(addrStr)\n if childDevice ~= nil then\n hasData_light[addrStr] = singleData.refresh_time\n\n local data1 = {\n data = {},\n device = childDevice.id,\n type = 1\n }\n\n data1.data.lampPoleNumber = singleData.lampPoleNumber -- FS01 --路灯名称\n -- data1.data.addUser = singleData.addUser -- feishang1927 --用户账号\n -- data1.data.lampPoleType = singleData.lampPoleType -- 3,\n -- data1.data.lamp_ctrl_type = singleData.lamp_ctrl_type -- 4,//灯控器类型\n -- data1.data.type = singleData.type -- 5,//设备类型\n -- data1.data.refresh_time = singleData.refresh_time -- 2019-09-27 08:09:43 --数据最新上报时间\n data1.data.frequency = singleData.frequency -- 49.97data1.data., //频率(Hz\n -- data1.data.organizationId = singleData.organizationId -- 5d359c3a26b0677e5feb92d7 --所属机构 ID\n -- data1.data.modifyUser = singleData.modifyUser -- feishang1927 --修改用户\n -- data1.data.reactive_power = singleData.reactive_power -- 0 --无功功率(W\n data1.data.alarm_status = singleData.alarm_status -- 1,//告警状态\n data1.data.bri = singleData.bri -- 100,//亮度(百分比)\n -- data1.data.divisionId = singleData.divisionId -- 59979cfe1d41ec1bcf3e7a05 --所属区划 ID\n data1.data.longitude = singleData.longitude -- 119.462239 --经度\n -- data1.data.orgName = singleData.orgName -- 江西飞尚科技有限公司data1.data.,\n -- data1.data.modifyDate = singleData.modifyDate -- 2019-07-23 08:13:28 --修改时间\n -- data1.data.pre_refresh_time = singleData.pre_refresh_time -- 2019-09-27 08:08:43 --上次刷新\n data1.data.runtime = singleData.runtime -- 68.95 --运行时间(小时)\n data1.data.pEnergy = singleData.pEnergy -- 0.01 --有功电能 (实际用电)\n -- data1.data.sEnergy = singleData.sEnergy -- 0.08 --视在电能\n -- data1.data.active_power = singleData.active_power -- 0 --有功功率(W)\n -- data1.data.name = singleData.name -- FS01 --设备名称\n -- data1.data.port_id = singleData.port_id -- 1,//端口号\n -- data1.data.alarm_id = singleData.alarm_id -- --告警配置 id\n -- data1.data.projectId = singleData.projectId -- 5d359cbe26b0677e5feb92d8 --所属项目 ID\n -- data1.data.gatewayId = singleData.gatewayId -- 5d36c0c526b0677e5feb9daf --所属聚盒 ID\n -- data1.data.gateway_addr = singleData.gateway_addr -- 0xfbfb03d2 --所属聚盒地址\n -- data1.data.qEnergy = singleData.qEnergy -- 0.06 --无功电能\n data1.data.latitude = singleData.latitude -- 32.208856 --纬度\n -- data1.data.typeName = singleData.typeName -- 市电灯 --类型名称\n -- data1.data.enable_alarm = singleData.enable_alarm -- 0,//是否告警 0 为否,1 为是\n --data1.data.uid = singleData.uid -- 5d36c1a826b0677e5feb9db9 --设备ID\n -- data1.data.current = singleData.current -- 0 --电流(A)\n -- data1.data.temperature = singleData.temperature -- 44.28data1.data.,\n -- data1.data.alarm = singleData.alarm -- 告警码 1,\n -- data1.data.advName = singleData.advName -- 江西 --所属区划名称\n -- data1.data.lamp_ctrl_id = singleData.lamp_ctrl_id -- 5d36c1a826b0677e5feb9db8 --灯控器 ID\n -- data1.data.addr = singleData.addr -- 0x00273123 --地址\n -- data1.data.lamp_post_type = singleData.lamp_post_type -- 3,//灯杆类型为 3 即灯控器\n data1.data.on = singleData.on -- 1,//on为1是开灯为0是关灯\n data1.data.gatewayName = singleData.gatewayName -- FBFB03D2data1.data.,\n -- data1.data.sectionId = singleData.sectionId -- 1,//回路号,ZigBee 或V3灯具才有\n -- data1.data.addDate = singleData.addDate -- 2019-07-23 08:13:28data1.data.,\n -- data1.data.prjName = singleData.prjName -- 江西飞尚科技有限公司data1.data.,\n data1.data.voltage = singleData.voltage -- 235.16 --电压\n -- data1.data.pre_on = singleData.pre_on -- 1,//上一次开关状态\n -- data1.data.dblControlZigbeeLamp = singleData.dblControlZigbeeLamp -- false,\n -- data1.data.lampControllerType = singleData.lampControllerType -- 4,\n data1.data.online = singleData.online -- 1//在线状态\n --数据时间\n if data1.data.alarm ~= nil then\n local errcode = data1.data.alarm + 70040000\n local errormsg = getAlarmmessage(errcode)\n data1.result = {code = errcode, msg = errormsg}\n end\n\n if singleData.refresh_time ~= nil then\n --local timen\n\n data1.time, timenum = unixtimestamp(singleData.refresh_time)\n --timeSpan = os.time() - timenum - 8 * 3600\n --数据时间 据今 超时1.5小时 认为灯 离线。\n\n --if timeSpan > 3600 * 1.5 then\n -- data1.data.online = 0\n --data1.data.on=0\n --\tlog.debug('FS_streetlight_2030 [%s] 路灯[%s]数据超时%s[%s] 时差[%s],默认离线', device.props.matchName,data1.data.lampPoleNumber,data1.time,timenum,timeSpan)\n -- end\n\n table.insert(out.data, data1)\n end\n end\n end\n\n --判断当前实际多少灯有数据 若不等 输出全部数据日志\n local hasData_light_Num = countNums(hasData_light)\n if hasData_light_Num ~= lightDeviceNum then\n log.debug(\n 'FS_streetlight_2030 [%s] 数据 无法 包含所有设备 hasData_light_Num=%s ,lightDeviceNum=%s',device.props.matchName,hasData_light_Num,lightDeviceNum)\n else\n log.debug(\n 'FS_streetlight_2030 [%s] 数据 可以 包含所有设备 hasData_light_Num=%s ,lightDeviceNum=%s',device.props.matchName,hasData_light_Num,lightDeviceNum)\n end\n \n \t\t--如果路灯数量不多 小于30 打出所有API返回数据。用于监控api数据是否正常\n \t\t--local noMatchNum=lightDeviceNum-hasData_light_Num\n \t\t--if hasData_light_Num<31 or noMatchNum>20 then\n \t\t--\tlog.debug('FS_streetlight_2030 [%s] 少量路灯 hasData_light_Num=%s ,API 原始数据resp_token_DTstr=%s',device.props.matchName,hasData_light_Num,resp_token_DTstr)\n \t\t--end\n \n end\n else\n log.debug(\n 'FS_streetlight_2030 [%s] request data error=%s body=%s',\n device.props.matchName,\n ack.code,\n ack.body\n )\n end\n end\nend\ncountNums = function(t)\n local count = 0\n for k, v in pairs(t) do\n count = count + 1\n end\n return count\nend\n\ngetAlarmmessage = function(cid)\n local cidTable = {}\n cidTable[70040001] = '电流小于阈值'\n cidTable[70040002] = '电流大于阈值'\n cidTable[70040003] = '电压小于阈值'\n cidTable[70040004] = '电压大于阈值'\n cidTable[70040005] = '离线'\n return cidTable[cid]\nend\n\nclear_illegalChar = function(Str_needClear)\n local len = #Str_needClear\n local newStr = ''\n while (len > 1) do\n local lastChar = string.sub(Str_needClear, -1, -1)\n if lastChar ~= '}' then\n Str_needClear = string.sub(Str_needClear, 1, -2)\n else\n newStr = Str_needClear\n break\n end\n end\n\n return newStr\nend\nonData = function()\n log.debug('FS_streetlight_2030 调用onData')\nend\nstart = function()\n --log.debug('FS_streetlight_2030 start开始 device=%s', json.encode(device))\n out = {\n type = 2,\n data = {},\n result = {}\n }\n ---------------------------------------------------------------query_token-------------------------------------\n local url_token = 'http://slighting.shuncom.com.cn/app/query_token' --http://slighting.shuncom.com.cn/app/query_token\n local header_token = {}\n\n --local token_password='RKloinporqKRSdv8'\n --local token_needAes128_data='{"OperatorID":"553512698","OperatorSecret":"Zvwa+lrcHuTAglqz"}'\n --local data_aes128base64_token=getData_aes128_Base64(token_password, token_needAes128_data)\n local data_aes128base64_token =\n 'atoKLqxbuuKMSggLDTJMMyYrSUqA0BOTDMpkeanSRR/Ovk3yddGl3jxrej8FWvTztkydRK2zzOit83NqxwZCVA=='\n local tokenStr = sendPost(url_token, header_token, data_aes128base64_token, 'token')\n\n if tokenStr ~= nil then\n ---------------------------------------------------------------user_login-------------------------------------\n local url_login = 'http://slighting.shuncom.com.cn/app/user/v1_0/user_login'\n local header_login = {\n Authorization = 'Bearer ' .. tokenStr\n }\n\n local login_password = 'RKloinporqKRSdv8'\n local login_needAes128_data = '{"UserName":"yixin1404","Password":"yixin1404"}' --对应不同的顺舟平台账户密码 {"UserName":"feishang1927","Password":"feishang1927"}\n local Data_aes128base64_login = getData_aes128_Base64(login_password, login_needAes128_data)\n --local Data_aes128base64_login = '6hcC7O5nRiR8ffc3voZaoSyFwyuIHNMl7bon3MGaNfzM5pX2RKdzLX+UO+QkajD10mgdgCbQZWOdNLV7CH0U5g=='\n\n local SessionIdStr = sendPost(url_login, header_login, Data_aes128base64_login, 'login')\n if SessionIdStr ~= nil then\n ---------------------------------------------------------------read-------------------------------------\n\n local url_read = 'http://slighting.shuncom.com.cn/app/commons/v1_0/read'\n local header_read = {\n Authorization = 'Bearer ' .. tokenStr,\n SessionId = SessionIdStr\n }\n\n local read_password = 'RKloinporqKRSdv8'\n local read_needAes128_data =\n string.format('{"limit":800,"name":"%s","skip":0,"type":4,"platform":1}', device.props.matchName) --对应不同的筛选 {"limit":5,"name":"0027","skip":0,"type":4,"platform":1}\n local Data_aes128base64_read = getData_aes128_Base64(read_password, read_needAes128_data)\n --local Data_aes128base64_read = '8WET6zSFzjG0GjDUaJcnZONSNzH+Mi6vCAixnXnztQ6S9mSlmlFG+zDmFRdAT3LStiegpLNCnYM8lMxTfZrMhA=='\n --log.debug('FS_streetlight_2030 预加密read_needAes128_data=%s', read_needAes128_data)\n sendPost(url_read, header_read, Data_aes128base64_read, 'read')\n end\n end\n local resultStr = json.encode(out)\n if device.props.matchName=='雪芹路左幅00' then\n log.debug('FS_streetlight_2030 [%s] 结果out=%s', device.props.matchName,resultStr)\n end\n ctx:done(resultStr)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("FS_streetlight_2030 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n -- log.debug("FS_streetlight_2030 查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n -- local channelStrCheck = child.uplink.props.name\n local channelStrCheck = string.gsub(child.name, ' ', '') --改为设备名称,便于支持 批量配置\n channelNoId = string.gsub(channelNoId, ' ', '')\n --log.debug('FS_streetlight_2030 子设备通道 c=%s ', channelStrCheck)\n\n if channelStrCheck == channelNoId then\n --log.debug('FS_streetlight_2030 name=%s 匹配到 子设备', channelNoId)\n return child\n end\n end\n else\n -- log.debug('FS_streetlight_2030 subdevices是nil')\n return nil\n end\nend\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\nunixtimestamp = function(datestr)\n -- 2018-4-28 16:10:12\n --log.debug('FS_streetlight_2030 datestr=%s', datestr)\n local datelist = Split(datestr, ' ')\n local datebegin = Split(datelist[1], '-')\n local dateend = Split(datelist[2], ':')\n local year = tonumber(datebegin[1])\n local month = tonumber(datebegin[2])\n local day = tonumber(datebegin[3])\n local hour = tonumber(dateend[1])\n local minute = tonumber(dateend[2])\n local second = tonumber(dateend[3])\n --log.debug('FS_streetlight_2030 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s', year, month, day, hour, minute, second)\n local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n -- log.debug('FS_streetlight_2030 timenum=%s', timenum)\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum + 8 * 3600)\n -- log.debug('FS_streetlight_2030 recordTime=%s', recordTime)\n return recordTime, timenum\nend\n\nfunction getData_aes128_Base64(password, data)\n local modes = {aeslua.ECBMODE, aeslua.CBCMODE, aeslua.OFBMODE, aeslua.CFBMODE}\n local keyLengths = {aeslua.AES128, aeslua.AES192, aeslua.AES256}\n -- for i, mode in ipairs(modes) do\n --for j, keyLength in ipairs(keyLengths) do\n --log.debug('加密--')\n local aes128Str = aeslua.encrypt(password, data, aeslua.AES128, aeslua.CBCMODE)\n\n --log.debug('Cipher: '..util.toHexString(cipher))\n\n local base64Str = encodeBase64(aes128Str)\n return base64Str\nend INLINE 2019-10-08 13:12:35.442+08 2020-06-15 20:23:32.031+08 2019-10-08 \N
+878afb54-7c5c-491e-8fa6-66a1405d7c37 bl_lvdt_9101 \N 济南博林自动化设备裂缝计协议 1.0 4d2bdba7-f602-4d5b-b066-82902bbc7472 4d2bdba7-f602-4d5b-b066-82902bbc7472 f 4d2bdba7-f602-4d5b-b066-82902bbc7472 Lua --//协议参考: Documents/PMO/02 产品协议/外购产品协议/拉线位移通讯协议2013.doc\nstart=function()\n log.debug("bl_lvdt_9101:device=%s",json.encode(device))\n local moduleNo=device.props.moduleId or device.uplink.props.module \n log.debug("load script %s, moduleId=%s", "bl_lvdt_9101.lua",moduleNo)\n\tif tonumber(moduleNo) > 255 then\n local errout={\n data ={},\n result = {code = 1004,msg = '无效的模块号>255'}\n }\n\n local errresult = json.encode(errout)\n ctx:done(errresult)\n end\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 0x03, endian)\n buff=iota.appendHexWord(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n \tbuff=iota.appendHexByte(buff, 0x01, endian) --1: CMD 1\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n end\n ctx:done(result)\nend\n--170302fffd71f6 moduleId=23\n--"elongationIndicator": -3\nunmarshall=function(hex,moduleNoStr)\n log.debug("bl_lvdt_9101:data=%s",hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n -- 170302fffd71f6\n \n local elongation = iota.hexToShort(hex,3,'B')/10\n out.data = {\n elongationIndicator=elongation\n }\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data,moduleNoStrCheck)\n log.debug(string.sub(data,1,12))\n if data == nil or string.len(data) ~= 14 or iota.hexToByte(data,1,'B') ~= 0x03 then\n errormsg = string.format('无效的数据,长度≠14 或CMD≠0x03')\n errcode = 1002\n return false\n end\n local checkModule=iota.hexToByte(data,0,'B')\n if moduleNoStrCheck ~= tostring(checkModule) then\n errormsg = string.format('无效的模块号=%s≠%s',checkModule,moduleNoStrCheck)\n errcode = 1004\n return false\n end\n return true\nend\n \n\n\n INLINE 2017-09-04 16:06:04.733+08 2020-07-09 09:29:04.353+08 2017-09-04 \N
+8c517f8e-8e35-46fa-94c5-e97f1c6ced70 nb_door_1504 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --F:\\SVN\\202010项目\\飞尚NB协议\\平台通讯协议草案.docx\n--另外到时候是小程序或者APP上给了解除报警消息才下发解除指令的\n--目前测是上报报警就触发解除报警。\n\n--ff000c85000001000051cdff 解绑指令\n--ff000c8a00000100093f8000003f80000002dbf2ff 告警指令\nstart = function()\n --onData('ff000c8a00000100090000000000000000021234ff')\nend\n\nonData = function(hex)\n local result = unmarshall(hex)\n log.debug('nb_door_1504 结果 result=%s', result)\n ctx:notify(result)\nend\nunmarshall = function(hex)\n local moduleNo = device.uplink.props.module\n log.debug('nb_door_1504 m=%s, recv =%s', moduleNo, hex)\n local out = {\n type = 1,\n data = {},\n result = {}\n }\n\n local ErrorCode = IsValid(hex, moduleNo)\n if ErrorCode then\n local cmd = string.sub(hex, 7, 10)\n log.debug('nb_door_1504 m=%s,cmd=%s', moduleNo, cmd)\n if cmd == '8a00' then\n --1 测试报警状态\n --2设防状态下开门报警状态\n --4 低压报警状态\n --local dataAreaLen = iota.hexToUShort(hex, 7, 'B')\n local alarmTypeHex = string.sub(hex, 2 * 17 + 1, 2 * 17 + 2)\n local alarmState = tonumber(alarmTypeHex, 16) --getBit8(diS)\n log.debug('nb_door_1504 m=%s,alarmTypeHex=%s,alarmState=%s', moduleNo, alarmTypeHex, alarmState)\n out.data.alarmState = alarmState\n \t\tackToDevice(cmd, moduleNo) --!!!!! 自动确认告警 ,硬件测试用 后续注释\n elseif cmd == '8500' then --目前只有 设备解绑才立即应答,告警确认 应答 由平台调用能力\n ackToDevice(cmd, moduleNo)\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n log.debug('nb_door_1504 m=%s,data=%s', moduleNo, json.encode(out))\n return json.encode(out)\nend\n\nIsValid = function(data, deviceModule)\n local checkLen = string.len(data) / 2\n if data == nil or checkLen < 12 then\n errormsg = string.format('无效的数据长度=%s<12', checkLen)\n errcode = 1002\n return false\n end\n local dataType = iota.hexToUShort(data, 1, 'B')\n --门禁类型固定是12\n if 0x0c ~= dataType then\n errormsg = string.format('无效的设备类型=%s≠12', dataType)\n errcode = 1003\n return false\n end\n return true\n --crc\nend\n\nackToDevice = function(ackCmd, moduleNo)\n local mid = '0001'\n if ackCmd == '8a00' or ackCmd == '8500' then\n local ackHex = 'ff000c' .. getAckCmd(ackCmd) .. mid .. '0000'\n ackHex = iota.appendHexCrc(ackHex, 'B', 0)\n ackHex = ackHex .. 'ff'\n local ok = ctx:asend(ackHex)\n log.debug('nb_door_1504 平台应答[%s], ack= %s', getAckCmd(ackCmd), ackHex)\n end\nend\n\ngetAckCmd = function(deviceCmd)\n local dict = {\n ['8a00'] = '6000',\n --停止报警\n ['8500'] = '8501'\n --用户解绑响应\n }\n return dict[deviceCmd]\nend INLINE 2020-10-21 16:47:59.08+08 2020-11-11 11:41:12.54+08 2020-10-21 \N
+ab2d9b14-3cb2-4cde-9fce-ef4d57dd5002 soilMQTT \N 1.0 679f43f2-ff7d-440f-9e36-6ad3beb8d574 679f43f2-ff7d-440f-9e36-6ad3beb8d574 f 679f43f2-ff7d-440f-9e36-6ad3beb8d574 Lua start = function()\n log.debug('soilMQTT device=%s', json.encode(device))\nend\n\nlocal allSensorData = {}\nlocal receiveTimeStamp=nil\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n\t--log.debug('soilMQTT 开始测试 缓存数据项数 =%s',httpbody.payload)\n local moduleNo = device.uplink.props.clientid --客户端ID\n log.debug('soilMQTT [%s] 缓存数据项数=%s', moduleNo, table_leng(allSensorData))\n\n local bodydataStr = httpbody.payload\n --local id = httpbody.ID\n --log.debug('soilMQTT hex.id=%s type=%s', httpbody.id, type(httpbody.id))\n --bodydataStr=string.gsub(bodydataStr,',{}',"")\n log.debug('soilMQTT [%s] bodydataStr=%s', moduleNo, bodydataStr)\n local bodydata = json.decode(bodydataStr)\n local allJsonData = bodydata['dp']\n --local RTime = bodydata['ct'] --时刻 ,不准确,弃用\n local dataType = bodydata['fac'] --岩土固定填写zl\n --local sn = bodydata.cid\n\n\n --判断时间\n local ts=os.time()\n if receiveTimeStamp ~=nil then\n local timeSpan=ts-receiveTimeStamp\n if timeSpan>120 then\n --认为是新一波数据,清空缓存\n allSensorData = {}\n receiveTimeStamp=ts\n log.debug('soilMQTT [%s] 距上次超过60s [%s]新收到数据=%s', moduleNo, receiveTimeStamp,bodydataStr)\n end\n else\n receiveTimeStamp=ts\n end\n\n\n if dataType == 'zl' then\n for k_none, singleSensorValue in pairs(allJsonData) do --遍历每个数据包\n if singleSensorValue.dt ~= nil then\n local cn = tonumber(singleSensorValue.cn)\n allSensorData[cn] = singleSensorValue.dt --归纳数据\n end\n end\n\n local tb_len=table_leng(allSensorData)\n if tb_len == 9 then --数据缓存 齐全\n local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n \t\tlog.debug('soilMQTT [%s] subdevices=%s', moduleNo, json.encode(subdevices))\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do\n local deviceId = child.id\n local devceModuleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\n local data1 = {\n data = {},\n device = deviceId,\n type = 1\n }\n --data1.time = unixtimestamp(RTime, moduleNo)\n \t\t\t\t\t--log.debug('soilMQTT [%s] =%s', moduleNo, receiveTimeStamp,bodydataStr)\n\n\n data1.data.xLength = allSensorData[1][devceModuleNo]\n data1.data.yLength = allSensorData[2][devceModuleNo]\n data1.data.xCoordinate = allSensorData[3][devceModuleNo]\n data1.data.yCoordinate = allSensorData[4][devceModuleNo]\n data1.data.zCoordinate = allSensorData[5][devceModuleNo]\n data1.data.xAcceleration = allSensorData[6][devceModuleNo]\n data1.data.yAcceleration = allSensorData[7][devceModuleNo]\n data1.data.zAcceleration = allSensorData[8][devceModuleNo]\n data1.data.temperature = allSensorData[9][devceModuleNo]\n\n table.insert(out.data, data1)\n end\n end\n --清空缓存\n allSensorData = {}\n\n log.debug('soilMQTT [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n end\n end\nend\n\ngetTimeNowStr = function()\n --2018-4-28 16:10:12\n local timeNowNum = os.time()\n local timeNowStr = os.date('%Y-%m-%d %H:%M:%S', timeNowNum)\n return timeNowStr\nend\n\nunixtimestamp = function(timenum, moduleNoStr)\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', tonumber(timenum) / 1000)\n log.debug('soilMQTT [%s] recordTime=%s', moduleNoStr, recordTime)\n return recordTime\nend\n\n\ntimeTounixtimestamp=function(dateStr)\n -- 2018-4-28 16:10:12\n local datelist = Split(dateStr, " ");\n local datebegin = Split(datelist[1], "-");\n local dateend = Split(datelist[2], ":");\n local year = tonumber(datebegin[1]);\n\tlocal month = tonumber(datebegin[2]);\n\tlocal day = tonumber(datebegin[3]);\n local hour = tonumber(dateend[1]);\n local minute = tonumber(dateend[2]);\n local second = tonumber(dateend[3]);\n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\treturn timenum\nend\n\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend INLINE 2020-03-19 13:25:48.87+08 2020-03-31 14:48:15.965+08 2020-03-19 \N
+d0aa19d7-1742-41cb-a707-9feea04afda0 test_airclear_mop_09 \N 1.0 f9927e7e-69c2-439e-916f-4981e6821dfa f9927e7e-69c2-439e-916f-4981e6821dfa f f9927e7e-69c2-439e-916f-4981e6821dfa Lua start = function()\n out = {\n type = 1,\n data = {},\n result = {}\n }\n --清除redis使用\n --local ab = {}\n --local clearValue = json.encode(ab)\n --local r1, r1ok = redis.set('00000001_airclaen_taskconfig', clearValue)\n --local r1, r1ok = redis.set('00000002_airclaen_taskconfig', clearValue)\n --local r1, r1ok = redis.set('00000005_airclaen_taskconfig', clearValue)\n --log.debug('test_airclear_mop_0901 测试 ab=%s, type=%s,clearValue=%s', json.encode(ab), type(ab), clearValue)\n log.debug('test_airclear_mop_0901 device=%s', json.encode(device))\n local deviceId = device.props.device_id\n --获取 app代理调度能力时 携带的参数 依此判断是何种能力\n local paramStr = capability.param\n log.debug('test_airclear_mop_0901 [%s] capability=%s', deviceId, paramStr)\n local paramData = json.decode(paramStr)\n\n if (paramData ~= nil and paramData.code ~= nil and paramData.params ~= nil) then\n local app_cmd = cmd_to_MCU(deviceId, paramData.code, paramData.params, paramData.cmd)\n if paramData.cmd ~= 267 and app_cmd.code ~= 13 then --查询功能 只查服务器缓存 不下发指令到 设备,设备升级单独判断,由于涉及到是否redis存储成功\n sendMsgToDeviceTopic(app_cmd)\n end\n else\n log.debug('test_airclear_mop_0901 [%s] paramData 数据内容不正确=%s', deviceId, json.encode(paramData))\n end\n local result = json.encode(out)\n ctx:done(result)\nend\n\nsendMsgToDeviceTopic = function(msg)\n --将指令发送到 设备的topic\n local dev_topic = msg.ID .. '_device_rece'\n local msgStr = json.encode(msg)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = dev_topic})\n log.debug('test_airclear_mop_0901 [%s] cmd 发送 dev_topic=[%s] body=%s 完毕 okdev=%s,ack=%s', msg.ID, dev_topic, msgStr, ok, ack)\nend\n\n--净化器 配置指令\nlocal binCache = {params = {}}\ncmd_to_MCU = function(id, code, newconfig, cmdType)\n local cmd = {}\n cmd.from = 'server'\n cmd.ID = id\n cmd.type = tonumber(device.props.sensorType) -- 257 空气净化器 ,513加湿器\n cmd.code = code\n cmd.cmd = cmdType\n if cmdType == 267 then --app查询功能\n if code == 4 then --定时任务查询\n local redis_key = cmd.ID .. '_airclaen_taskconfig'\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n\n --由于lua的array 键值 一动就变成对象 只能用一个新table 存之前数据 当作 array 下发\n local array_taskConfigs = {}\n for _, v in pairs(redis_taskConfigs) do\n if v.looptype ~= nil then\n v.looptype = byte2bin(v.looptype)\n --taskID转为实际id\n local real_tsakId = tonumber(_)\n --app查询得到实际的id\n local jia_tsakId = tonumber(v.task, 16)\n local hexEn = string.format('%02x', tonumber(v.en))\n v.task = tonumber(real_tsakId)\n v.en = hexEn\n end\n table.insert(array_taskConfigs, v)\n end\n\n out.data.params = array_taskConfigs\n log.debug('test_airclear_mop_0901 同步定时任务 out.data.params=%s', json.encode(array_taskConfigs))\n elseif code == 15 then --报警阈查询 设备只有PM2.5\n local redis_key_alarm = cmd.ID .. '_airclaen_alarmconfig'\n local redis_alarmConfigs = getRedisValue_obj(redis_key_alarm, cmd)\n out.data.params = redis_alarmConfigs\n end\n elseif cmdType == 523 then\n if code == 1 then --初始化 id 即修改id\n cmd.id = newconfig\n elseif code == 2 then --修改电源开关\n cmd.params = newconfig\n elseif code == 3 then --风速挡位设置\n cmd.params = newconfig\n elseif code == 4 or code == 5 then --定时任务设置--添加 or 修改 或者使能\n --taskCacheUpdate(cmd.ID, newconfig, cmd) --设备确认成功后,在监听协议中更新redis\n newconfig.en = tonumber(newconfig.en, 16) -- app传的是字符串 '10', 平台需要转换成16\n if newconfig.looptype ~= 'null' and newconfig.looptype ~= nil then\n newconfig.looptype = getlooptype(newconfig.looptype)\n end\n local isDouble = true\n local isTask_on = true\n local isTask_off = true\n if newconfig.time_on == nil then\n isDouble = false\n isTask_on = false\n end\n if newconfig.time_off == nil then\n isDouble = false\n isTask_off = false\n end\n if newconfig.task == 255 then\n --255 任务号自增\n\n newconfig.task = craetTaskId(cmd, isDouble, isTask_on, isTask_off)\n else\n --如果是修改双任务 有定时开的 就是前面是1 的 那么发给设备的时候要注意taskid格式\n local doubleTaskId = transferDoubleTaskId(newconfig.task, isDouble, isTask_on, isTask_off)\n newconfig.task = doubleTaskId\n end\n cmd.params = newconfig\n elseif code == 6 then --定时删除设置\n newconfig.task = getTaskId(cmd.ID, newconfig, cmd) --设备确认成功后,在监听协议中更新redis\n cmd.params = newconfig\n elseif code == 7 then --杀菌灯开关控制\n cmd.params = newconfig\n elseif code == 8 then --负离子开关控制\n cmd.params = newconfig\n elseif code == 9 then --加湿器开关控制\n cmd.params = newconfig\n elseif code == 10 then --加湿器挡位设置\n cmd.params = newconfig\n elseif code == 11 then --设备模式控制\n cmd.params = newconfig\n elseif code == 12 then --童锁开关控制\n cmd.params = newconfig\n elseif code == 13 then --远程升级 app发起 然后 平台redis存储升级包 ,平台与设备交互,上报升级状态\n binCache.params = getPackageList(newconfig.binBuff)\n binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n --将升级包存储 redis\n local redis_key_bin = cmd.ID .. '_air_bin'\n local isSetOK = setRedisValue_obj(redis_key_bin, binCache, cmd)\n if isSetOK == true then\n log.debug('test_airclear_mop_0901 [%s][code=%s] 准备触发固件升级[%s]', cmd.ID, cmd.code, newconfig.binName)\n local dataObject = cmd\n dataObject.from = 'server'\n dataObject.type = tonumber(device.props.sensorType) -- 513加湿器 257 净化器\n dataObject.cmd = 523\n dataObject.params = {}\n dataObject.params.hard = getBinHard(newconfig.binName)\n --防止为空16=0x10 初始版本\n dataObject.params.soft = getBinSoft(newconfig.binName)\n dataObject.params.type = 1 --服务器发起升级申请\n dataObject.params.count = binCache.params.count\n dataObject.params.size = binCache.params.size\n dataObject.params.CRC = binCache.params.CRC\n log.debug('test_airclear_mop_0901 [%s][code=%s] 准备触发固件升级--开始发指令 dataObject=%s', cmd.ID, cmd.code, json.encode(dataObject))\n sendMsgToTopic(dataObject, 'device')\n else\n log.debug('test_airclear_mop_0901 [%s][code=%s] 存储失败 isSetOK=%s[type=%s]', cmd.ID, cmd.code, type(isSetOK))\n end\n elseif code == 15 then --报警阈值设置 设备只有PM2.5\n cmd.params = newconfig\n local redis_key_alarm = cmd.ID .. '_airclaen_alarmconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n setRedisValue_obj(redis_key_alarm, newconfig, cmd)\n log.debug('test_airclear_mop_0901 [%s][code=%s] redis_set完成=%s', cmd.ID, cmd.code)\n elseif code == 17 then --加湿器 恒湿设置\n cmd.params = newconfig\n else\n cmd.params = newconfig\n end\n end\n\n return cmd\nend\n\nsendMsgToTopic = function(msg, msgTo)\n local topic\n log.debug('test_airclear_mop_0901 进入固件升级发送函数 [%s][code=%s]', msg.ID, msg.code)\n if msgTo == 'app' then\n --将指令发送到 appProxy的topic\n topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个,代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n elseif msgTo == 'device' then\n topic = msg.ID .. '_device_rece'\n end\n log.debug('test_airclear_mop_0901 固件升级发送函数 [%s][code=%s] topic=%s', msg.ID, msg.code, topic)\n msg.packid = os.time()\n local msgStr = json.encode(msg)\n log.debug('test_airclear_mop_0901 [%s][code=%s] msgStr=%s', msg.ID, msg.code, msgStr)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n log.debug('home_airclear_0901 固件升级发送函数 [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', msg.ID, msg.code, binCache.updateTime, topic, msgStr, ok, ack)\nend\n\ngetTaskId = function(devId, taskConfig, cmd_obj)\n local redis_key = devId .. '_airclaen_taskconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n local cmd_code = cmd_obj.code\n --判断 任务 id是否存在 存在就更新\n local tsakId = tostring(taskConfig.task)\n\n local tb = redis_taskConfigs[tsakId]\n return tb.task\nend\n\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n local redis_key = devId .. '_airclaen_taskconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n --判断 任务 id是否存在 存在就更新\n local tsakId = tostring(taskConfig.task)\n log.debug('test_airclear_mop_0901 [%s] 排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s', cmd_obj.ID, tsakId, redis_taskConfigs, json.encode(redis_taskConfigs), type(redis_taskConfigs))\n local cmd_code = cmd_obj.code\n if cmd_code == 4 then --添加或修改\n if redis_taskConfigs[tsakId] ~= nil then\n redis_taskConfigs[tsakId] = taskConfig\n log.debug('test_airclear_mop_0901 非首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n else\n log.debug('test_airclear_mop_0901 首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n --table.insert(redis_taskConfigs, tsakId, taskConfig)\n redis_taskConfigs[tsakId] = taskConfig\n end\n\n log.debug('test_airclear_mop_0901 [%s][code=%s] redis_taskConfigs=%s', cmd_obj.ID, cmd_obj.code, json.encode(redis_taskConfigs))\n elseif cmd_code == 6 then --删除任务\n redis_taskConfigs[tsakId] = nil\n log.debug('test_airclear_mop_0901 删除任务 tsakId=%s', tsakId)\n end\n setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\ngetRedisValue_obj = function(key, logObject)\n local r1, r1ok = redis.get(key) --获取上次记录时间\n log.debug('test_airclear_mop_0901 [%s][code=%s] r1=%s[%s],r1ok=%s key=%s', logObject.ID, logObject.code, r1, type(r1), r1ok, key)\n\n local params = {}\n if r1ok and r1 ~= nil and r1 ~= 'null' then\n local taskConfig = json.decode(r1)\n params = taskConfig\n else\n log.debug('test_airclear_mop_0901 [%s][code=%s] taskConfig读取失败 r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n end\n return params\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n local setValue = json.encode(setValueObject)\n local r1ok, r1 = redis.set(key, setValue)\n log.debug('test_airclear_mop_0901 [%s][code=%s] [setRedis] r1=%s,r1ok=%s[type=%s],key=%s,setValue=%s', logObject.ID, logObject.code, r1, r1ok, type(r1ok), key, setValue)\n return r1ok\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n local packageParams = {subList = {}}\n local len = string.len(allPackageStr) / 2\n local count = len / 1024\n local packageCount = math.ceil(count)\n packageParams.size = len\n packageParams.count = packageCount\n --添加整个文件校验\n local allAppendCrc16 = iota.appendHexCrc(allPackageStr, 'B', 0)\n local allcrc = string.sub(allAppendCrc16, -4, -1)\n packageParams.CRC = tonumber(allcrc, 16)\n for i = 1, packageCount, 1 do\n local start_index = (i - 1) * 2048 + 1\n local end_index = start_index + 2047 -- 如果 越界,lua自动取实际的 结束索引\n local subPackage = string.sub(allPackageStr, start_index, end_index)\n --最后一包判断长度是否是 4的倍数 不足写0x1A\n if i == packageCount then\n repeat\n local subPackage_len = string.len(subPackage) / 4\n local min_subPackage_len = math.floor(subPackage_len)\n local diff_value = subPackage_len - min_subPackage_len\n if diff_value > 0 then\n subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍,不足写0x1A\n end\n until (diff_value == 0)\n end\n\n local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n local subcrc = string.sub(subAppendCrc16, -4, -1)\n local subCheck = tonumber(subcrc, 16)\n local subBin = {}\n subBin.len = string.len(subPackage) / 2\n subBin.buff = subPackage\n subBin.checkint = subCheck\n packageParams.subList[i] = subBin\n end\n return packageParams\nend\n\ncraetTaskId = function(cmd, isDouble, isOn, isOff)\n local redis_key = cmd.ID .. '_airclaen_taskconfig'\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n for i = 2, 15, 2 do --01 只有1 且1是便捷任务 23 45 67 89 ab cd ef 是7组其他任务\n local task_k = tostring(i)\n if redis_taskConfigs[task_k] == nil then\n local taskid_new = i --默认是单任务的 task\n local kk\n if isDouble then --如果是双任务 双任务 以开任务号为准\n kk = string.format('%01x', tonumber(task_k)) .. string.format('%01x', tonumber(task_k) + 1)\n taskid_new = tonumber(kk, 16)\n elseif isOn then\n kk = string.format('%01x', tonumber(task_k)) .. '0'\n taskid_new = tonumber(kk, 16)\n elseif isOff then\n kk = '0' .. string.format('%01x', tonumber(task_k) + 1) --新建的关任务=同组的开任务号+1\n taskid_new = tonumber(kk, 16)\n end\n log.debug('test_airclear_mop_0901 自增任务id taskid_new=%s,kk=%s,i=%s', taskid_new, kk, i)\n return taskid_new\n end\n end\n return 255 --自增失败传255\nend\n\ntransferDoubleTaskId = function(appTaskId, isDouble, isOn, isOff)\n local task_k = tonumber(appTaskId)\n\n local taskid_new = 255 --默认是单任务的 task\n local kk\n if isDouble then --如果是 同时开关任务 关任务号就是开任务号+1\n kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n taskid_new = tonumber(kk, 16)\n elseif isOn then\n kk = string.format('%01x', task_k) .. '0'\n taskid_new = tonumber(kk, 16)\n elseif isOff then\n kk = '0' .. string.format('%01x', task_k)\n taskid_new = tonumber(kk, 16)\n end\n log.debug('test_airclear_mop_0901 使能 任务id taskid_new=%s,kk=%s', taskid_new, kk)\n return taskid_new\nend\ngetlooptype = function(str)\n local slen = string.len(str)\n local looptype_num = 0\n if slen == 8 then\n for i = 0, 7, 1 do\n local index = -1 * (i + 1)\n local one = string.sub(str, index, index)\n --print('one='..one)\n if one == '1' then\n looptype_num = looptype_num + 2 ^ i\n --print('looptype_num='..one)\n end\n end\n end\n local int_num = tonumber(string.format('%d', looptype_num))\n return int_num\nend\n\nfunction byte2bin(n)\n local t = {}\n for i = 7, 0, -1 do\n t[#t + 1] = math.floor(n / 2 ^ i)\n n = n % 2 ^ i\n end\n return table.concat(t)\nend\n\ngetBinHard = function(binName)\n local Hard_version\n if binName ~= nil then\n --文件名 例 KQJSQ_SD01.H016.S016.A.201012.bin\n local split_names = split(binName, '.')\n for key, value in pairs(split_names) do\n local head_str = string.sub(value, 1, 1)\n if head_str == 'H' then\n Hard_version = tonumber(string.sub(value, 2, -1))\n return Hard_version\n end\n end\n end\n return Hard_version\nend\n\n\ngetBinSoft = function(binName)\n local soft_version\n if binName ~= nil then\n --文件名 例 KQJSQ_SD01.H016.S016.A.201012.bin\n local split_names = split(binName, '.')\n for key, value in pairs(split_names) do\n local head_str = string.sub(value, 1, 1)\n if head_str == 'S' then\n soft_version = tonumber(string.sub(value, 2, -1))\n return soft_version\n end\n end\n end\n return soft_version\nend\n\nsplit = function(s, delim)\n if type(delim) ~= 'string' or string.len(delim) <= 0 then\n return\n end\n\n local start = 1\n local t = {}\n while true do\n local pos = string.find(s, delim, start, true) -- plain find\n if not pos then\n break\n end\n\n table.insert(t, string.sub(s, start, pos - 1))\n start = pos + string.len(delim)\n end\n table.insert(t, string.sub(s, start))\n\n return t\nend INLINE 2020-11-11 17:18:57.535+08 2020-12-02 11:24:20.664+08 2020-11-11 \N
+e9f68832-4caa-4bbb-a61d-29e1e6b33016 shzr_550D \N 1.0 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f 8d2f03c7-32a2-42e4-befc-7dde5c965472 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]]\n\nstart=function()\n log.debug("start %s, ctx=%s", "shzr_RN55D.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("shzr_RN55D 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\n\t\n buff='aa08' .. moduleNo .. '03000000bb'\n \n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t log.debug("shzr_RN55D m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n--01040440c50a34f90e\n-- level=165.81\n--temp=26.12\nunmarshall=function(hex,moduleNoStr)\n log.debug("shzr_RN55D m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n\t\n local symbol=string.sub(hex,9,10)\n\t\t\n local physicalvalue =string.sub(hex,11,16)\n\t\tif symbol=='00' then\n\t\t physicalvalue=tonumber(physicalvalue)\n\t\telseif symbol=='01' then\n\t\t\n\t\t\tphysicalvalue=-1*tonumber(physicalvalue)\n\t\tend\n log.debug("shzr_RN55D m=%s,temperature=%s ",moduleNoStr,temperature)\n out.data = { \n physicalvalue=physicalvalue/10\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("shzr_RN55D m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n --[[if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end]]--\n return true\n--crc\nend\n\n \n\n INLINE 2020-10-28 10:10:42.639+08 2020-11-11 16:53:05.247+08 2020-10-28 \N
+a83bd7a7-d18e-480b-b0df-40bc78fcc3a9 home_humi_mop_09 \N 1.0 f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f f2b3bb46-fba2-4a7a-a1f9-b88d86826cce Lua start = function()\n out = {\n type = 1,\n data = {},\n result = {}\n }\n --清除redis使用\n --local ab = {}\n --local clearValue = json.encode(ab)\n --local r1, r1ok = redis.set('00000001_air_taskconfig', clearValue)\n --local r1, r1ok = redis.set('00000002_air_taskconfig', clearValue)\n --local r1, r1ok = redis.set('00000005_air_taskconfig', clearValue)\n --log.debug('home_humi_mop_0901 测试 ab=%s, type=%s,clearValue=%s', json.encode(ab), type(ab), clearValue)\n log.debug('home_humi_mop_0901 device=%s', json.encode(device))\n local deviceId = device.props.device_id\n --获取 app代理调度能力时 携带的参数 依此判断是何种能力\n local paramStr = capability.param\n log.debug('home_humi_mop_0901 [%s] capability=%s', deviceId, paramStr)\n local paramData = json.decode(paramStr)\n\n if (paramData ~= nil and paramData.code ~= nil and paramData.params ~= nil) then\n local app_cmd = cmd_to_MCU(deviceId, paramData.code, paramData.params, paramData.cmd)\n if paramData.cmd ~= 267 and app_cmd.code ~= 13 then --查询功能 只查服务器缓存 不下发指令到 设备,设备升级单独判断,由于涉及到是否redis存储成功\n sendMsgToDeviceTopic(app_cmd)\n end\n else\n log.debug('home_humi_mop_0901 [%s] paramData 数据内容不正确=%s', deviceId, json.encode(paramData))\n end\n local result = json.encode(out)\n log.debug('home_humi_mop_0901 [%s] 返回APP 控制结果=%s', deviceId, result)\n --ctx:sleep(1)\n ctx:done(result)\nend\n\nsendMsgToDeviceTopic = function(msg)\n --将指令发送到 设备的topic\n local dev_topic = msg.ID .. '_device_rece'\n local msgStr = json.encode(msg)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = dev_topic})\n log.debug('home_humi_mop_0901 [%s] cmd 发送 dev_topic=[%s] body=%s 完毕 okdev=%s,ack=%s', msg.ID, dev_topic, msgStr, ok, ack)\nend\n\n--净化器 配置指令\nlocal binCache = {params = {}}\ncmd_to_MCU = function(id, code, newconfig, cmdType)\n local cmd = {}\n cmd.from = 'server'\n cmd.ID = id\n cmd.type = tonumber(device.props.sensorType) -- 257 空气净化器 ,513加湿器\n cmd.code = code\n cmd.cmd = cmdType\n if cmdType == 267 then --app查询功能\n if code == 4 then --定时任务查询\n local redis_key = cmd.ID .. '_air_taskconfig'\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n\n --由于lua的array 键值 一动就变成对象 只能用一个新table 存之前数据 当作 array 下发\n local array_taskConfigs = {}\n for _, v in pairs(redis_taskConfigs) do\n if v.looptype ~= nil then\n v.looptype = byte2bin(v.looptype)\n --taskID转为实际id\n local real_tsakId = tonumber(_)\n --app查询得到实际的id\n local jia_tsakId = tonumber(v.task, 16)\n local hexEn = string.format('%02x', tonumber(v.en))\n v.task = tonumber(real_tsakId)\n v.en = hexEn\n end\n table.insert(array_taskConfigs, v)\n end\n\n out.data.params = array_taskConfigs\n log.debug('home_humi_mop_0901 out.data.params=%s', json.encode(array_taskConfigs))\n elseif code == 15 then --报警阈查询 设备只有PM2.5\n local redis_key_alarm = cmd.ID .. '_air_alarmconfig'\n local redis_alarmConfigs = getRedisValue_obj(redis_key_alarm, cmd)\n out.data.params = redis_alarmConfigs\n end\n elseif cmdType == 523 then\n if code == 1 then --初始化 id 即修改id\n cmd.id = newconfig\n elseif code == 2 then --修改电源开关\n cmd.params = newconfig\n elseif code == 3 then --风速挡位设置\n cmd.params = newconfig\n elseif code == 4 or code == 5 then --定时任务设置--添加 or 修改 或者使能\n --taskCacheUpdate(cmd.ID, newconfig, cmd) --设备确认成功后,在监听协议中更新redis\n newconfig.en = tonumber(newconfig.en, 16) -- app传的是字符串 '10', 平台需要转换成16\n if newconfig.looptype ~= 'null' and newconfig.looptype ~= nil then\n newconfig.looptype = getlooptype(newconfig.looptype)\n end\n local isDouble = true\n local isTask_on = true\n local isTask_off = true\n if newconfig.time_on == nil then\n isDouble = false\n isTask_on = false\n end\n if newconfig.time_off == nil then\n isDouble = false\n isTask_off = false\n end\n if newconfig.task == 255 then\n --255 任务号自增\n\n newconfig.task = craetTaskId(cmd, isDouble, isTask_on, isTask_off)\n else\n --如果是修改双任务 有定时开的 就是前面是1 的 那么发给设备的时候要注意taskid格式\n local doubleTaskId = transferDoubleTaskId(newconfig.task, isDouble, isTask_on, isTask_off)\n newconfig.task = doubleTaskId\n end\n cmd.params = newconfig\n elseif code == 6 then --定时删除设置\n newconfig.task = getTaskId(cmd.ID, newconfig, cmd) --设备确认成功后,在监听协议中更新redis\n cmd.params = newconfig\n elseif code == 7 then --杀菌灯开关控制\n cmd.params = newconfig\n elseif code == 8 then --负离子开关控制\n cmd.params = newconfig\n elseif code == 9 then --加湿器开关控制\n cmd.params = newconfig\n elseif code == 10 then --加湿器挡位设置\n cmd.params = newconfig\n elseif code == 11 then --设备模式控制\n cmd.params = newconfig\n elseif code == 12 then --童锁开关控制\n cmd.params = newconfig\n elseif code == 13 then --远程升级 app发起 然后 平台redis存储升级包 ,平台与设备交互,上报升级状态\n binCache.params = getPackageList(newconfig.binBuff)\n binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n --将升级包存储 redis\n local redis_key_bin = cmd.ID .. '_air_bin'\n local isSetOK = setRedisValue_obj(redis_key_bin, binCache, cmd)\n if isSetOK == true then\n log.debug('home_humi_mop_0901 [%s][code=%s] 准备触发固件升级[%s]', cmd.ID, cmd.code, newconfig.binName)\n local dataObject = cmd\n dataObject.from = 'server'\n dataObject.type = tonumber(device.props.sensorType) -- 513加湿器 257 净化器\n dataObject.cmd = 523\n dataObject.params = {}\n dataObject.params.hard = getBinHard(newconfig.binName)\n --防止为空16=0x10 初始版本\n dataObject.params.soft = getBinSoft(newconfig.binName)\n dataObject.params.type = 1 --服务器发起升级申请\n dataObject.params.count = binCache.params.count\n dataObject.params.size = binCache.params.size\n dataObject.params.CRC = binCache.params.CRC\n log.debug('home_humi_mop_0901 [%s][code=%s] 准备触发固件升级--开始发指令 dataObject=%s', cmd.ID, cmd.code, json.encode(dataObject))\n sendMsgToTopic(dataObject, 'device')\n else\n log.debug('home_humi_mop_0901 [%s][code=%s] 存储失败 isSetOK=%s[type=%s]', cmd.ID, cmd.code, type(isSetOK))\n end\n elseif code == 15 then --报警阈值设置 设备只有PM2.5\n cmd.params = newconfig\n local redis_key_alarm = cmd.ID .. '_air_alarmconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n setRedisValue_obj(redis_key_alarm, newconfig, cmd)\n log.debug('home_humi_mop_0901 [%s][code=%s] redis_set完成=%s', cmd.ID, cmd.code)\n elseif code == 17 then --加湿器 恒湿设置\n cmd.params = newconfig\n end\n end\n\n return cmd\nend\n\nsendMsgToTopic = function(msg, msgTo)\n local topic\n log.debug('home_humi_mop_0901 进入固件升级发送函数 [%s][code=%s]', msg.ID, msg.code)\n if msgTo == 'app' then\n --将指令发送到 appProxy的topic\n topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个,代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n elseif msgTo == 'device' then\n topic = msg.ID .. '_device_rece'\n end\n log.debug('home_humi_mop_0901 固件升级发送函数 [%s][code=%s] topic=%s', msg.ID, msg.code, topic)\n msg.packid = os.time()\n local msgStr = json.encode(msg)\n log.debug('home_humi_mop_0901 [%s][code=%s] msgStr=%s', msg.ID, msg.code, msgStr)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n log.debug('home_airclear_0901 固件升级发送函数 [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', msg.ID, msg.code, binCache.updateTime, topic, msgStr, ok, ack)\nend\n\ngetTaskId = function(devId, taskConfig, cmd_obj)\n local redis_key = devId .. '_air_taskconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n local cmd_code = cmd_obj.code\n --判断 任务 id是否存在 存在就更新\n local tsakId = tostring(taskConfig.task)\n\n local tb = redis_taskConfigs[tsakId]\n return tb.task\nend\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n local redis_key = devId .. '_air_taskconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n --判断 任务 id是否存在 存在就更新\n local tsakId = tostring(taskConfig.task)\n log.debug('home_humi_mop_0901 [%s] 排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s', cmd_obj.ID, tsakId, redis_taskConfigs, json.encode(redis_taskConfigs), type(redis_taskConfigs))\n local cmd_code = cmd_obj.code\n if cmd_code == 4 then --添加或修改\n if redis_taskConfigs[tsakId] ~= nil then\n redis_taskConfigs[tsakId] = taskConfig\n log.debug('home_humi_mop_0901 非首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n else\n log.debug('home_humi_mop_0901 首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n --table.insert(redis_taskConfigs, tsakId, taskConfig)\n redis_taskConfigs[tsakId] = taskConfig\n end\n\n log.debug('home_humi_mop_0901 [%s][code=%s] redis_taskConfigs=%s', cmd_obj.ID, cmd_obj.code, json.encode(redis_taskConfigs))\n elseif cmd_code == 6 then --删除任务\n redis_taskConfigs[tsakId] = nil\n log.debug('home_humi_mop_0901 删除任务 tsakId=%s', tsakId)\n end\n setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\ngetRedisValue_obj = function(key, logObject)\n local r1, r1ok = redis.get(key) --获取上次记录时间\n log.debug('home_humi_mop_0901 [%s][code=%s] r1=%s[%s],r1ok=%s key=%s', logObject.ID, logObject.code, r1, type(r1), r1ok, key)\n\n local params = {}\n if r1ok and r1 ~= nil and r1 ~= 'null' then\n local taskConfig = json.decode(r1)\n params = taskConfig\n else\n log.debug('home_humi_mop_0901 [%s][code=%s] taskConfig读取失败 r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n end\n return params\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n local setValue = json.encode(setValueObject)\n local r1ok, r1 = redis.set(key, setValue)\n log.debug('home_humi_mop_0901 [%s][code=%s] [setRedis] r1=%s,r1ok=%s[type=%s],key=%s,setValue=%s', logObject.ID, logObject.code, r1, r1ok, type(r1ok), key, setValue)\n return r1ok\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n local packageParams = {subList = {}}\n local len = string.len(allPackageStr) / 2\n local count = len / 1024\n local packageCount = math.ceil(count)\n packageParams.size = len\n packageParams.count = packageCount\n --添加整个文件校验\n local allAppendCrc16 = iota.appendHexCrc(allPackageStr, 'B', 0)\n local allcrc = string.sub(allAppendCrc16, -4, -1)\n packageParams.CRC = tonumber(allcrc, 16)\n for i = 1, packageCount, 1 do\n local start_index = (i - 1) * 2048 + 1\n local end_index = start_index + 2047 -- 如果 越界,lua自动取实际的 结束索引\n local subPackage = string.sub(allPackageStr, start_index, end_index)\n --最后一包判断长度是否是 4的倍数 不足写0x1A\n if i == packageCount then\n repeat\n local subPackage_len = string.len(subPackage) / 4\n local min_subPackage_len = math.floor(subPackage_len)\n local diff_value = subPackage_len - min_subPackage_len\n if diff_value > 0 then\n subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍,不足写0x1A\n end\n until (diff_value == 0)\n end\n\n local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n local subcrc = string.sub(subAppendCrc16, -4, -1)\n local subCheck = tonumber(subcrc, 16)\n local subBin = {}\n subBin.len = string.len(subPackage) / 2\n subBin.buff = subPackage\n subBin.checkint = subCheck\n packageParams.subList[i] = subBin\n end\n return packageParams\nend\n\ncraetTaskId = function(cmd, isDouble, isOn, isOff)\n local redis_key = cmd.ID .. '_air_taskconfig'\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n for i = 2, 15, 2 do --01 只有1 且1是便捷任务 23 45 67 89 ab cd ef 是7组其他任务\n local task_k = tostring(i)\n if redis_taskConfigs[task_k] == nil then\n local taskid_new = i --默认是单任务的 task\n local kk\n if isDouble then --如果是双任务 双任务 以开任务号为准\n kk = string.format('%01x', tonumber(task_k)) .. string.format('%01x', tonumber(task_k) + 1)\n \t\ttaskid_new = tonumber(kk, 16)\n elseif isOn then\n kk = string.format('%01x', tonumber(task_k)) .. '0'\n taskid_new = tonumber(kk, 16)\n elseif isOff then\n kk = '0' .. string.format('%01x', tonumber(task_k) + 1) --新建的关任务=同组的开任务号+1\n taskid_new = tonumber(kk, 16)\n end\n log.debug('home_humi_mop_0901 自增任务id taskid_new=%s,kk=%s,i=%s', taskid_new, kk, i)\n return taskid_new\n end\n end\n return 255 --自增失败传255\nend\n\ntransferDoubleTaskId = function(appTaskId, isDouble, isOn, isOff)\n local task_k = tonumber(appTaskId)\n\n local taskid_new = 255 --默认是单任务的 task\n local kk\n if isDouble then --如果是 同时开关任务 关任务号就是开任务号+1\n kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n taskid_new = tonumber(kk, 16)\n elseif isOn then\n kk = string.format('%01x', task_k) .. '0'\n taskid_new = tonumber(kk, 16)\n elseif isOff then\n kk = '0' .. string.format('%01x', task_k)\n taskid_new = tonumber(kk, 16)\n end\n log.debug('home_humi_mop_0901 使能 任务id taskid_new=%s,kk=%s', taskid_new, kk)\n return taskid_new\nend\ngetlooptype = function(str)\n local slen = string.len(str)\n local looptype_num = 0\n if slen == 8 then\n for i = 0, 7, 1 do\n local index = -1 * (i + 1)\n local one = string.sub(str, index, index)\n --print('one='..one)\n if one == '1' then\n looptype_num = looptype_num + 2 ^ i\n --print('looptype_num='..one)\n end\n end\n end\n local int_num = tonumber(string.format('%d', looptype_num))\n return int_num\nend\n\nfunction byte2bin(n)\n local t = {}\n for i = 7, 0, -1 do\n t[#t + 1] = math.floor(n / 2 ^ i)\n n = n % 2 ^ i\n end\n return table.concat(t)\nend\n\ngetBinHard = function(binName)\n local Hard_version\n if binName ~= nil then\n --文件名 例 KQJSQ_SD01.H016.S016.A.201012.bin\n local split_names = split(binName, '.')\n for key, value in pairs(split_names) do\n local head_str = string.sub(value, 1, 1)\n if head_str == 'H' then\n Hard_version = tonumber(string.sub(value, 2, -1))\n return Hard_version\n end\n end\n end\n return Hard_version\nend\n\ngetBinSoft = function(binName)\n local soft_version\n if binName ~= nil then\n --文件名 例 KQJSQ_SD01.H016.S016.A.201012.bin\n local split_names = split(binName, '.')\n for key, value in pairs(split_names) do\n local head_str = string.sub(value, 1, 1)\n if head_str == 'S' then\n soft_version = tonumber(string.sub(value, 2, -1))\n return soft_version\n end\n end\n end\n return soft_version\nend\n\nsplit = function(s, delim)\n if type(delim) ~= 'string' or string.len(delim) <= 0 then\n return\n end\n\n local start = 1\n local t = {}\n while true do\n local pos = string.find(s, delim, start, true) -- plain find\n if not pos then\n break\n end\n\n table.insert(t, string.sub(s, start, pos - 1))\n start = pos + string.len(delim)\n end\n table.insert(t, string.sub(s, start))\n\n return t\nend INLINE 2020-09-07 16:08:49.804+08 2021-01-19 18:09:57.766+08 2020-09-07 \N
+544ff068-a704-41f2-aebc-72d263f455a1 test_airclear_0901 \N 1.0 f9927e7e-69c2-439e-916f-4981e6821dfa f9927e7e-69c2-439e-916f-4981e6821dfa f f9927e7e-69c2-439e-916f-4981e6821dfa Lua start = function()\n --local str="484f0020d54200083f710008b96600083b710008d56100087b7e000800000000000000000000000000000000997400089163000800000000cd71000809760008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef42000875760008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008417a0008c97a0008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef42000800f002f800f092f80aa090e8000c82448344aaf10107da4501d100f087f8aff2090ebae80f0013f0010f18bffb1a43f001031847ecba00000cbb0000103a24bf78c878c1fad8520724bf30c830c144bf04680c60704700000023002400250026103a28bf78c1fbd8520728bf30c148bf0b6070476e2900f09184702900f0878166290bf02a8065290bf0278067290bf0248061290bf0238003681b0a28bf41f08001692900f0f880642900f0f580752900f0f2806f2900f08587782900f05381e92900f01f87e42900f01c87f52900f01987ef2900f08287f82900f052810368db0928bf41f08001632900f0a086732900f0a586e32901f09581f32901f09a81002070471fb50af0e3ff00f075ff0400002000210af0c8f9401c6060002000210af0d8f9e0601fbd10b510bd01f015fa1146fff7e7ff05f029f801f033fa03b4fff7f2ff03bc01f033fa00000948804709480047fee7fee7fee7fee7fee7fee7fee7fee7fee7fee704480549054a064b704700000d7600088941000848490020484f0020484b0020484b002010b5044600f086fb0068005dc00602d504f1200010bd204610bd00001cb50c46064b7b4469460090204600f018fe04460020694600f026fe20461cbd5f0c00000fb41cb5084b06aa7b4469460090059800f005fe04460020694600f013fe20461cbc5df814fb0000390c000070b5044685690068c10601d5302600e02026c00707d070bdd4e9012130469047206a401c20626d1ef6d570bd70b5044685690078c00707d170bdd4e9012120209047206a401c20626d1ef6d570bd70b50c460546012a05d02878800600d5ea69002302e0012305e05b1c934202d2e05c0028f9d1a869e618c01aa861286a1844"\n --local appendCrc16 = iota.appendHexCrc(str, 'B', 0)\n --local crc16str = string.sub(appendCrc16, -4, -1)\n --local crc16 = tonumber(crc16str, 16)\n -- log.debug('home_airclear_0901 校验16=%s', crc16)\n log.debug('home_airclear_0901 device=%s', json.encode(device))\n --onData('')\nend\n\nlocal binCache = {params = {subList = {}}}\n--固件升级包 缓存结构\n--binCache ={params = {subList = {}}, updateTime = '2020-09-23 06:01:06',size=12345678,count=20}\nonData = function(mq_body)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n local receiveStr = mq_body.payload\n log.debug('home_airclear_0901 receiveStr=%s', receiveStr)\n --解析数据\n local dataObject = json.decode(receiveStr)\n log.debug('home_airclear_0901 [%s][code=%s] receiveStr=%s', dataObject.ID, dataObject.code, receiveStr)\n if dataObject ~= nil then\n --判断数据源 是appProxy 还是 device\n --设备数据类型\n -- code:0x01 设备信息上报\n -- code:0x02 心跳上报\n -- code:0x03 周期上报 设备数据与状态\n -- code:0x04 报警上报\n -- code:0x05 时间同步上报\n if dataObject.from == 'device' then\n if dataObject.cmd == 1035 and dataObject.result == 0 then\n if dataObject.code == 2 then --电源开关\n local powerlock = dataObject.params.onoff\n dataObject.params = {}\n dataObject.params.powerlock = powerlock\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 3 then --风速挡位\n local windgear = dataObject.params.gear\n dataObject.params = {}\n dataObject.params.windgear = windgear\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 4 or dataObject.code == 5 or dataObject.code == 6 then --设备返回的 定时设置应答\n --将设置成功的有效任务 存进redis\n local newconfig = dataObject.params\n taskCacheUpdate(dataObject.ID, newconfig, dataObject)\n --将 dataObject 发给 app作为响应\n dataObject.params.result = dataObject.result\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 7 then --杀菌灯开关回应\n local uvlock = dataObject.params.onoff\n dataObject.params = {}\n dataObject.params.uvlock = uvlock\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 8 then --负氧离子\n local NegativeO2lock = dataObject.params.onoff\n dataObject.params = {}\n dataObject.params.NegativeO2lock = NegativeO2lock\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 9 then --加湿器开关\n local humilock = dataObject.params.onoff\n dataObject.params = {}\n dataObject.params.humilock = humilock\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 10 then --加湿器挡位\n local gear = dataObject.params.gear\n dataObject.params = {}\n dataObject.params.humigear = gear\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 11 then --设备工作模式 0自动 1手动 2睡眠\n local mode = dataObject.params.mode\n dataObject.params = {}\n dataObject.params.mode = mode\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 12 then --童锁开关回应\n local childlock = dataObject.params.onoff\n dataObject.params = {}\n dataObject.params.childlock = childlock\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 13 then --远程升级触发后,设备回应 要第几包,平台按需发送\n if dataObject.params.frame == 1 then --设备请求第一包的时候 平台重新获取redis 做缓存\n local redis_key_bin = dataObject.ID .. '_air_bin'\n --更新 升级 固件 缓存\n binCache = getRedisValue_obj(redis_key_bin, dataObject)\n end\n --升级文件流 缓存,拆解成多个小包\n -- binCache.buff = dataObject.params.binBuff\n -- binCache.size = string.len(binCache.buff)\n -- binCache.params = getPackageList(binCache.buff)\n log.debug('home_airclear_0901 [%s][code=%s] 平台收到 设备升级 回应,准备下发升级包[第%s/%s包]', dataObject.ID, dataObject.code, dataObject.params.frame, binCache.params.count)\n\n --dataObject.params.updateState = dataObject.params.sign -- 1:拒绝升级2:准备升级3:升级中4:完成升级\n\n --设备准备升级 or 升级中 发送固件包\n if dataObject.params.sign == 2 or dataObject.params.sign == 3 then\n if dataObject.params.frame ~= nil then\n dataObject.from = 'server'\n dataObject.cmd = 523\n local frameIndex = dataObject.params.frame\n dataObject.params = {}\n dataObject.params.type = 2 --服务器正在升级设备\n dataObject.params.frame = frameIndex\n\n local sub_bin = binCache.params.subList[frameIndex]\n\n if sub_bin ~= nil then\n dataObject.params.bin = sub_bin.buff\n dataObject.params.len = sub_bin.len\n dataObject.params.crc16 = sub_bin.checkint\n end\n\n --数据发送到appProxy binCache.params.count\n sendMsgToTopic(dataObject, 'device')\n end\n dataObject.params.updateState = 'isworking' --升级中\n elseif dataObject.params.sign == 4 then\n if dataObject.params.msg == 2 then\n dataObject.updateState = 'ok' -- 完成升级\n else\n dataObject.params.updateState = 'fail'\n end\n elseif dataObject.params.sign == 1 then\n dataObject.params.updateState = 'fail'\n end\n dataObject.params.flag = getSoftUpdateMsg(dataObject.params.sign, dataObject.params.msg)\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 15 then --报警阈值设置回应\n local result = dataObject.result\n dataObject.params = {}\n dataObject.params.result = result --0代表设置成功\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 17 then --恒湿设置回应\n local fixhumi = dataObject.params.value\n dataObject.params = {}\n dataObject.params.fixhumi = fixhumi\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 19 then --智能开关设定回应\n dataObject.params.smartlock = dataObject.params.en\n dataObject.params.PM2_5H = dataObject.params.up\n dataObject.params.PM2_5L = dataObject.params.down\n sendMsgToTopic(dataObject, 'app')\n end\n elseif dataObject.cmd == 63499 then\n if dataObject.code == 1 then --软硬件 版本主动上报\n ackToDevice(dataObject)\n elseif dataObject.code == 2 then --心跳上报\n ackToDevice(dataObject)\n elseif dataObject.code == 3 then\n --ackToDevice(dataObject)--取消数据应答20200928 与硬件确认\n if dataObject.params ~= nil then\n out.data.temperature = tonumber(string.format('%0.1f', dataObject.params.TEMP))\n out.data.humidity = dataObject.params.HUMI\n out.data.PM2_5H = dataObject.params.PM2_5H --pm2.5上限\n out.data.pm25 = dataObject.params.PM2_5\n out.data.PM2_5L = dataObject.params.PM2_5L --pm2.5下限\n out.data.ch2o = dataObject.params.CH2O --甲醛\n out.data.tvoc = dataObject.params.TVOC --有机气态物质\n out.data.fogs = tonumber(string.format('%0.1f', dataObject.params.fogs)) -- 本次开机加湿量 L 唐露芝20200928 qq群确认\n out.data.airs = dataObject.params.airs --本次净化量\n\n out.data.powerlock = dataObject.params.power --开关\n out.data.windgear = dataObject.params.wind --风速挡位 0:自动,1:1档,2:2档,3:3档, 4:4档\n --out.data.timcnt = dataObject.params.timcnt --定时个数\n out.data.uvlock = dataObject.params.UV --UV杀菌灯开关 1:打开 0:关闭\n out.data.NegativeO2lock = dataObject.params['-O2'] --负氧离子开关状态 1:打开 0:关闭\n out.data.humilock = dataObject.params.humista --加湿器开关状态 1:打开 0:关闭\n out.data.humigear = dataObject.params.humigear -- 加湿器挡位 1:L1 2:L2 3:L3 4:L4\n out.data.clean = dataObject.params.clean --净化开关 1:打开 0:关闭\n out.data.childlock = dataObject.params.chlock --童锁开关状态1:打开 0:关闭\n out.data.smartlock = dataObject.params.smart --智能开关状态1:打开 0:关闭\n\n out.data.USE_M = dataObject.params.USE_M --滤芯使用时间(分钟)\n out.data.CLEAN_M = dataObject.params.CLEAN_M --净化时长(分钟)\n out.data.qtime = dataObject.params.qtime --设备端的定时关小时数,最大12H\n out.data.water = dataObject.params.water --水位感应开关 0:正常 1:缺水\n out.data.mode = dataObject.params.mode --设备工作模式 0自动 1手动 2睡眠\n out.data.hard = dataObject.params.hard --硬件版本号\n out.data.soft = dataObject.params.soft --软件版本号\n else\n log.debug('home_airclear_0901 [%s][code=%s] dataObject.params =nil', dataObject.ID, dataObject.code)\n end\n dataObject.params = out.data\n sendMsgToTopic(dataObject, 'app')\n elseif dataObject.code == 4 then --报警上报\n ackToDevice(dataObject)\n elseif dataObject.code == 5 then --时间同步 服务器\n local timeNow = getTime()\n dataObject.from = 'server'\n dataObject.cmd = 64011\n dataObject.params = {}\n dataObject.params.date = timeNow\n sendMsgToTopic(dataObject, 'device')\n elseif dataObject.code == 6 then --定时任务同步 服务器\n dataObject.from = 'server'\n dataObject.cmd = 64011\n dataObject.params = {}\n\n --读取redis\n local redis_key = dataObject.ID .. '_airclaen_taskconfig'\n local redis_taskConfigs = getRedisValue_obj(redis_key, dataObject)\n local array_taskConfigs = {}\n for _, v in pairs(redis_taskConfigs) do\n --如果是 同时开关任务,设备同步的时候,任务号要分开 丢弃\n --if v.time_on and v.time_off then\n --v.task = transferDoubleTaskId(v.task, true, false, false)\n --end\n table.insert(array_taskConfigs, v)\n end\n dataObject.params = array_taskConfigs\n --数据发送到appProxy 周期上报的数据 code= 0x03和\n sendMsgToTopic(dataObject, 'device')\n end\n end\n elseif dataObject.from == 'app' then --测试使用 实际app不会发\n if dataObject.code == 13 then --远程升级 app接口触发mq升级通知\n log.debug('home_airclear_0901 [%s][code=%s] 平台收到 app升级 通知,准备 通知 设备', dataObject.ID, dataObject.code)\n --升级文件流 缓存,拆解成多个小包\n --binCache.buff = dataObject.params.binBuff\n --binCache.params = getPackageList(binCache.buff)\n binCache.params = getPackageList(dataObject.params.binBuff)\n binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n dataObject.from = 'server'\n dataObject.type = tonumber(device.props.sensorType) -- 257 空气净化器 ,513加湿器\n dataObject.cmd = 523\n dataObject.params = {}\n dataObject.params.type = 1 --服务器发起升级申请\n dataObject.params.count = binCache.params.count\n dataObject.params.size = binCache.params.size\n --数据发送到appProxy 周期上报的数据 code= 13和\n log.debug('home_airclear_0901 [%s][code=%s][binCache.updateTime=%s] 开始通知 设备 升级', dataObject.ID, dataObject.code, binCache.updateTime)\n sendMsgToTopic(dataObject, 'device')\n end\n elseif dataObject.from == 'clear' then\n clearTask(dataObject.ID)\n else\n log.debug('home_airclear_0901 [%s][code=%s] 非法数据 =%s', dataObject.ID, dataObject.code, receiveStr)\n end\n else\n log.debug('home_airclear_0901 dataObject =nil')\n end\n\n local resultData = json.encode(out) --输出传递到平台上\n log.debug('home_airclear_0901 result=%s', json.encode(out))\n if next(out.data) ~= nil or next(out.result) ~= nil then\n ctx:notify(resultData)\n end\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n local packageParams = {subList = {}}\n local len = string.len(allPackageStr)\n local count = len / 2048\n local packageCount = math.ceil(count)\n packageParams.size = len\n packageParams.count = packageCount\n\n for i = 1, packageCount, 1 do\n local start_index = (i - 1) * 2048 + 1\n local end_index = start_index + 2047 -- 如果 越界,lua自动取实际的 结束索引\n local subPackage = string.sub(allPackageStr, start_index, end_index)\n --最后一包判断长度是否是 4的倍数 不足写0x1A\n if i == packageCount then\n repeat\n local subPackage_len = string.len(subPackage) / 4\n local min_subPackage_len = math.floor(subPackage_len)\n local diff_value = subPackage_len - min_subPackage_len\n if diff_value > 0 then\n subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍,不足写0x1A\n end\n until (diff_value == 0)\n end\n\n local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n local subcrc = string.sub(subAppendCrc16, -4, -1)\n local subCheck = tonumber(subcrc, 16)\n local subBin = {}\n subBin.len = string.len(subPackage) / 2\n subBin.buff = subPackage\n subBin.checkint = subCheck\n packageParams.subList[i] = subBin\n end\n return packageParams\nend\n\nsendMsgToTopic = function(msg, msgTo)\n local topic\n if msgTo == 'app' then\n --将指令发送到 appProxy的topic\n topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个,代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n --发给app的时候 软件版本比如17要改成1.1\n if msg.params.soft ~= nil then\n msg.params.soft = softNumbertoVersion(msg.params.soft)\n msg.params.hard = softNumbertoVersion(msg.params.hard)\n end\n msg.params.bin = nil --节省资源\n elseif msgTo == 'device' then\n topic = msg.ID .. '_device_rece'\n end\n msg.packid = os.time()\n local msgStr = json.encode(msg)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n log.debug('home_airclear_0901 [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', msg.ID, msg.code, binCache.updateTime, topic, msgStr, ok, ack)\nend\n\nackToDevice = function(rawDataObject)\n local topic = rawDataObject.ID .. '_device_rece'\n rawDataObject.from = 'server'\n rawDataObject.packid = os.time()\n rawDataObject.cmd = 64011\n rawDataObject.params = 'null'\n rawDataObject.result = 0\n local msgStr = json.encode(rawDataObject)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n log.debug('home_airclear_0901 服务器 应答 设备 [%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', rawDataObject.ID, topic, msgStr, ok, ack)\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ngetTime = function()\n local timenum = os.time()\n local dateStr = os.date('%Y-%m-%d %H:%M:%S', timenum)\n --空气净化器最后还要带 周几下去\n -- 2018-4-28 16:10:12\n local datelist = Split(dateStr, ' ')\n local datebegin = Split(datelist[1], '-')\n --local dateend = Split(datelist[2], ':')\n local year = tonumber(datebegin[1])\n local month = tonumber(datebegin[2])\n local day = tonumber(datebegin[3])\n\n local week = getWeek_comm(year, month, day)\n local recordTime = string.format('%s %s', dateStr, week)\n return recordTime\nend\n\n--获取星期几\nfunction getWeek_comm(y, m, d)\n if m == 1 or m == 2 then\n m = m + 12\n y = y - 1\n end\n local m1, _ = math.modf(3 * (m + 1) / 5)\n local m2, _ = math.modf(y / 4)\n local m3, _ = math.modf(y / 100)\n local m4, _ = math.modf(y / 400)\n\n local iWeek = (d + 2 * m + m1 + y + m2 - m3 + m4) % 7\n local weekTab = {\n ['0'] = 1,\n ['1'] = 2,\n ['2'] = 3,\n ['3'] = 4,\n ['4'] = 5,\n ['5'] = 6,\n ['6'] = 0 --周日是 0\n }\n return weekTab[tostring(iWeek)]\nend\n\ngetRedisValue_obj = function(key, logObject)\n local r1, r1ok = redis.get(key) --获取上次记录时间\n log.debug('home_airclear_0901 [%s][code=%s] [getRedis] r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n\n local params = {}\n if r1ok and r1 ~= nil and r1 ~= 'null' then\n local taskConfig = json.decode(r1)\n params = taskConfig\n else\n log.debug('home_airclear_0901 [%s][code=%s] [getRedis] taskConfig读取失败 r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n end\n return params\nend\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n local redis_key = devId .. '_airclaen_taskconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n --判断 任务 id是否存在 存在就更新\n local tsakId = tostring(taskConfig.task)\n log.debug('home_airclear_0901 [%s] 排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s', cmd_obj.ID, tsakId, redis_taskConfigs, json.encode(redis_taskConfigs), type(redis_taskConfigs))\n local cmd_code = cmd_obj.code\n if cmd_code == 4 or cmd_code == 5 then --添加或修改 或取消任务\n --如果是自增任务的设备返回 先解析任务id\n if taskConfig.time_on then --只要on大于0 必然 任务id >16\n local hexTaskId = string.format('%02x', tonumber(tsakId))\n local real_tsakId = string.sub(hexTaskId, 1, 1)\n -- 避免单任务取到0的情况\n log.debug('home_airclear_0901 自增任务 首次插入 real_tsakId=%s[%s]', real_tsakId, type(real_tsakId))\n tsakId = real_tsakId\n elseif taskConfig.time_on == nil then\n local hexTaskId = string.format('%02x', tonumber(tsakId))\n local real_tsakId = string.sub(hexTaskId, 2, 2)\n -- 避免单任务取到0的情况\n log.debug('home_airclear_0901 自增任务 首次插入 real_tsakId=%s[%s]', real_tsakId, type(real_tsakId))\n tsakId = real_tsakId\n end\n if redis_taskConfigs[tsakId] ~= nil then\n redis_taskConfigs[tsakId] = taskConfig\n log.debug('home_airclear_0901 非首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n else\n log.debug('home_airclear_0901 首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n --table.insert(redis_taskConfigs, tsakId, taskConfig)\n redis_taskConfigs[tsakId] = taskConfig\n end\n\n log.debug('home_airclear_0901 [%s][code=%s] redis_taskConfigs=%s', cmd_obj.ID, cmd_obj.code, json.encode(redis_taskConfigs))\n\telseif cmd_code == 6 then --删除任务\n local real_tsakId = get_delete_id(redis_taskConfigs, tonumber(tsakId))\n redis_taskConfigs[real_tsakId] = nil\n log.debug('home_airclear_0901 删除任务 tsakId=%s', tsakId)\n end\n setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\nget_delete_id = function(redis_tasks, delete_id)\n for key, value in pairs(redis_tasks) do\n if value.task == delete_id then\n return key\n end\n end\n log.debug('home_airclear_0901 无法删除任务 delete_id=%s 没有匹配项目', delete_id)\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n local setValue = json.encode(setValueObject)\n local r1ok, r1 = redis.set(key, setValue)\n log.debug('home_airclear_0901 [%s][code=%s] [setRedis] r1=%s,r1ok=%s,key=%s,setValue=%s', logObject.ID, logObject.code, r1, r1ok, key, setValue)\n return r1ok\nend\n\ntransferDoubleTaskId = function(appTaskId, isDouble, isOn, isOff)\n local task_k = tonumber(appTaskId)\n\n local taskid_new = 255 --默认是单任务的 task\n local kk\n if isDouble then --如果是 同时开关任务 关任务号就是开任务号+1\n kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n taskid_new = tonumber(kk, 16)\n elseif isOn then\n kk = string.format('%01x', task_k) .. '0'\n taskid_new = tonumber(kk, 16)\n elseif isOff then\n kk = '0' .. string.format('%01x', task_k)\n taskid_new = tonumber(kk, 16)\n end\n log.debug('home_airclear_0901 任务id taskid_new=%s,kk=%s', taskid_new, kk)\n return taskid_new\nend\n\n--清空redis的 task缓存\nclearTask = function(deviceID)\n local clear_key = string.format('%s_airclaen_taskconfig', deviceID)\n --清除redis使用\n --local ab = {}\n --local clearValue = json.encode(ab)\n local r1, r1ok = redis.set(clear_key, clearValue)\n --local r1, r1ok = redis.set('00000001_airclaen_taskconfig', clearValue)\n --local r1, r1ok = redis.set('00000002_airclaen_taskconfig', clearValue)\n --local r1, r1ok = redis.set('00000005_airclaen_taskconfig', clearValue)\nend\n\nsoftNumbertoVersion = function(soft_num)\n local hex_str = string.format('%02x', soft_num)\n local s10 = string.sub(hex_str, 1, 1)\n local s1 = string.sub(hex_str, 2, 2)\n local number_str = string.format('%s.%s', tonumber(s10, 16), tonumber(s1, 16))\n return number_str\nend\n\ngetSoftUpdateMsg = function(signid, msgid)\n local k = string.format('%s,%s', signid, msgid)\n local msgs = {\n ['1,1'] = '不支持升级',\n ['1,2'] = '已是最新版本',\n ['1,3'] = '其他错误',\n ['2,1'] = '升级A区域',\n ['2,2'] = '升级B区域',\n ['3,1'] = '校验错误重发',\n ['3,2'] = '校验正确发下一帧',\n ['4,1'] = '升级出错',\n ['4,2'] = '升级成功'\n }\n return msgs[k]\nend INLINE 2020-11-11 17:18:23.999+08 2020-12-10 10:28:24.022+08 2020-11-11 \N
+f01703db-289c-4463-a196-f8487c24252b fs_laser_9505 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua \nstart=function()\n local endian = 'B'\n local buff='' \n buff = iota.appendHexByte(buff, 0x3a, endian)\n buff = iota.appendHexByte(buff, device.uplink.props.module, endian)\n buff = iota.appendHexByte(buff, 0x05, endian)\n buff = iota.appendHexByte(buff, 0x00, endian)\n local byte = iota.hexCheckPlusSum(buff, 0, 3)\n buff = buff..string.format("%02X",byte) \n buff = iota.appendHexByte(buff, 0x0d, endian)\n buff = iota.appendHexByte(buff, 0x0a, endian)\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n--3a0105010204000905550d0a module=1\n--"length": 12.409500000000001\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local Data ={}\n local resp = ""\n local len = Calculation(hex)\n out.data = {\n length = len\n }\n else\n message = 'Invalid Msg, len='..string.len(hex)\n out.result = {code = errcode, msg = message}\n end\n return json.encode(out)\nend\n\nIsValid=function(data)\n if data == nil or string.len(data)/2 ~= 12 then \n errormsg = 'Data is nil or Length not right'\n errcode = 1002\n return false\n elseif iota.hexToByte(data,0,'B') ~= 0x3a or iota.hexToByte(data,10,'B') ~= 0x0d or iota.hexToByte(data,11,'B') ~= 0x0a then\n errormsg = 'Data is Invalid'\n errcode = 1003\n return false\n else \n return true\n end\n --iota.checkPlusSum16\n\n return true\n--crc\nend\n\n\nfunction Calculation(data)\n local len = 0\n for i=0, string.len(data)/2 -1 do\n if i>=3 and i<9 then\n if i == 3 then \n len = len + tonumber(iota.hexToByte(data,i,'B') * 10)\n elseif i == 4 then\n len = len + tonumber(iota.hexToByte(data,i,'B'))\n elseif i == 5 then\n len = len + tonumber(iota.hexToByte(data,i,'B') * 0.1)\n elseif i == 6 then\n len = len + tonumber(iota.hexToByte(data,i,'B') * 0.01)\n elseif i == 7 then \n len = len + tonumber(iota.hexToByte(data,i,'B') * 0.001)\n else \n len = len + tonumber(iota.hexToByte(data,i,'B') * 0.0001)\n end\n end\n end\n return len \nend INLINE 2019-11-21 16:05:21.285+08 2019-11-21 16:05:21.285+08 2019-11-21 \N
+1a7ebe09-0b00-4bb6-834e-2e0a6899f3d2 T440 \N 复制的隼星 1.0 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e f 8d49238d-6e0e-421c-adaf-f7472ec0b50e Lua --//04 项目资料/2017-07/南京基泰沉降监测项目/MCU32数据采集说明书.pdf\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--32个通道\n--测试536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3355494e2056313d322e3334352056323d302e3030332049333d32302e3030302049343d302e3030302056353d302e39382049363d312e35362049373d322e3134352056383d312e323030201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n--24个通道\n--536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n start=function()\n -- log.debug("load script %s, moduleId=%s", "cdaj_440.lua", device.props.moduleId or "[nil]")\n -- log.debug("cdaj_440:".."LUA: ctx is =%s", json.encode(device))\n ok,resp=ctx:ssend("01020304",15000)\n -- log.debug("cdaj_440:".."测试下发01020304正常")\n end\n\nonData=function(hex)\n --log.debug("cdaj_440收到数据=%s", hex)\n\t--log.debug("cdaj_440 device =%s", json.encode(device))\n --log.debug("cdaj_440subdevices data is =%s", json.encode(device.dnlinks[1].devices))\n\n local out={\n data ={},\n result = {},\n type=2\n }\n \n local ModuleChar = "M=";--振弦\n local DigChar = "Di";--测斜\n local VoltageChar = "V=";--电压\n local CurrentChar = "I=";--电流\n local WaterChar = "Wa";--水文\n\tlocal ResistanceChar="R=";--电阻(差阻)\n\n\n --数据域 内的索引号\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n sData=toStrHex(hex)\n --log.debug("cdaj_440:sData是 %s",sData)\n --获取子字符串表\n local allResponse=Split(sData,'\\n')\n --移除表内的“”和nil\n for k,v in ipairs(allResponse) do\n if v=='' or v==nil then\n table.remove(allResponse,k)\n --log.debug("cdaj_440:".."表内的“”和nil 移除元素为 "..tostring(allResponse[k]))\n end\n end\n\n --分析单类数据\n for k,v in ipairs(allResponse) do\n local singleData=Split(v,' ')\n --移除单类数据中的空 \n for kk,vv in ipairs(singleData) do\n if vv=='' or vv==nil then\n --print("移除元素为 ",singleData[kk])\n table.remove (singleData,kk)\n end\n end\n\n if k>1 then\n local temp1=singleData[2+1]\n local moudleStr=string.sub(singleData[2+1],2,2)\n local moduleNo=tonumber(moudleStr)\n --解析单条数据\n for kkk,vvv in ipairs(singleData) do\n log.debug("cdaj_440:遍历解析单条数据 键="..tostring(kkk).." 值="..tostring(vvv))\n \n local type_sensor=string.sub(string.gsub(singleData[kkk],"%d",""),1,2)\n log.debug("cdaj_440: type_sensor="..type_sensor) \n if string.len(type_sensor) >=2 then\n --频率\n if type_sensor==ModuleChar then\n local length = string.len(singleData[kkk]) - 3;\n local tempLength = string.len(singleData[kkk + 1]) - 3;\n local channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n local Module =tonumber(string.sub(singleData[kkk],4, -1))\n local tempData = string.sub(singleData[kkk+1],4, 4+tempLength);\n local Frequency = math.sqrt(Module*1000);\n local Temp;\n local Phy\n \t\t\t local Length\n if IsNumberic(tempData) then\n\t\t\t\t\t\t\t\tTemp=tonumber(tempData)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tTemp=0;\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(振弦)子设备 模块%s,通道%s原型childDevice=%s",moduleNo,channelNo,json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(振弦)子设备 模块%s,通道%s deviceId=%s ",moduleNo,channelNo,tostring(deviceId))\n\t\t\n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:振弦模块: 模块%s,通道%s 公式参数=%s,%s,%s,%s,%s",moduleNo,channelNo,K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440 模块%s,通道%s 当前的Frequency是:%s,%s",moduleNo,channelNo,Frequency,Temp)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlog.debug("cdaj_440 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Module --经过厂家确认 公式带入的是模数\n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\tlog.debug("cdaj_440 模块%s,通道%s当前的Phy是:%s",moduleNo,channelNo,Phy)\n\t\t\t\t\t\t\t\tend \n \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(振弦)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t--log.debug("cdaj_440:振弦模块:公式%s",device.formula)\n\t\t\t\t\t\t \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tfrequency=tonumber(string.format("%0.3f",Frequency)),\n\t\t\t\t\t\t\t\t\ttemperature=tonumber(string.format("%0.2f",Temp)),\n\t\t\t\t\t\t\t\t\tphysicalvalue=tonumber(string.format("%0.3f",Phy)),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlog.debug("cdaj_440:(振弦) Phy结果=%s",Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend\n\n --电压\n if type_sensor== VoltageChar then\n local length = string.len(singleData[kkk]) - 3;\n\t\t\t\t\t\t\tlocal channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n\t\t\t\t\t\t\tlocal Voltage =tonumber(string.sub(singleData[kkk],4, -1))\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(电压)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(电压)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t \n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:电压模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlocal Temp=0;--电压模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:电压模块当前的Voltage是:%s,%s",Voltage,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Voltage \n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:电压模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\tend \t \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t--log.debug("cdaj_440:(电压)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={voltage=Voltage,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend\n \n\t\t\t\t\t\t--电流\n\t\t\t\t\t\tif type_sensor==CurrentChar then\n\t\t\t\t\t\t\tlocal length = string.len(singleData[kkk]) - 3;\n\t\t\t\t\t\t\tlocal channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n\t\t\t\t\t\t\tlocal Current =tonumber(string.sub(singleData[kkk],4, -1))\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(电流)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(电流)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:电流模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlocal Temp=0;--电流模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:电流模块当前的Current是:%s,%s",Current,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Current \n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:电流模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\tend \n \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(电流)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={current=Current,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend \n\n\t\t\t\t\t\t--水文\n\t\t\t\t\t\tif type_sensor==WaterChar then\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\tif string.sub(singleData[kkk],1,6)== "Water1" then\n\t\t\t\t\t\t\t\tlocal waterData = GetSWData(singleData, kkk); \n \n\t\t\t\t\t\t\t\tfor i=1,8,1 \n\t\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,i)\n\t\t\t\t\t\t\t\t\t--\n\t\t\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(水文)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t\t\tlog.debug("cdaj_440:(水文)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:水文模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t local Temp=0;--水文模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t\t --log.debug("cdaj_440:水文模块当前的Current是:%s,%s",Current,Temp)\n\t\t\t\t\t\t\t\t\t\t local Fi=waterData[i] \n\t\t\t\t\t\t\t\t\t\t Phy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t\t --log.debug("cdaj_440:水文模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\t\t\tend \n\t\t\t\t\t\t\t\t\telse\n -- log.debug("cdaj_440:(水文)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(i))\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\tlocal data1={\n\t\t\t\t\t\t\t\t\t\tdata={waterdata = waterData[i],\n\t\t\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\t\ttype=1\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttable.insert(out.data,data1) \n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\tend\t\n end\n\n --测斜\n if type_sensor==DigChar then\n\t\t\t\t\t local Phy\n\t\t\t\t\t local Length\n\t\t\t\t\t local Temp\n if (string.sub(singleData[kkk],1,3)..string.sub(singleData[kkk],5,5))== "Dig=" then\n local channelNo = tonumber(string.sub(singleData[kkk],4, 4),16);\n local Inclination =tonumber(string.sub(singleData[kkk],6, -1))\n --获取通道设备deviceId\n \t\t\t local childDevice=getDeviceInfo(moduleNo,channelNo)\n \t\t\t local deviceId\n if childDevice~=nil then\n \t\t\t\t\t deviceId=childDevice.id\n \t --log.debug("cdaj_440:(测斜)子设备原形childDevice=%s",json.encode(childDevice))\n \t\t\t\t --log.debug("cdaj_440:(测斜)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n -- log.debug("cdaj_440:测斜模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tTemp=0;--测斜模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:当前的Frequency是:%s,%s",Inclination,Temp)\n\t\t\t\t\t\t\t\t\t\tlocal Fi=Inclination \n\t\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\t\tend \n \t \n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(测斜)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={inclination=Inclination,\n\t\t\t\t\t\t\t\t\t\ttemperature=Temp,\n\t\t\t\t\t\t\t\t\t\tphysicalvalue=Phy,\n\t\t\t\t\t\t\t\t\t\tlength=Length \t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t--电阻(差阻)\n if type_sensor==ResistanceChar then\n\t\t\t\t\t --local R1Length = string.len(singleData[kkk]) - 3; --取消\n --local r1Length = string.len(singleData[kkk + 1]) - 3; --取消\n local channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n local R1 =tonumber(string.sub(singleData[kkk],4, -1))\n local r1 = tonumber(string.sub(singleData[kkk+1],4, -1))\n local Temp;\n local Phy\n if IsNumberic(tempData) then\n\t\t\t\t\t\t\t\tTemp=tonumber(tempData)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tTemp=0;\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo) \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s 原形childDevice=%s",tostring(moduleNo),tostring(channelNo),json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s deviceId=%s ",tostring(moduleNo),tostring(channelNo),tostring(deviceId))\n\n\t\t\t\t\t\t\t\tlocal f = childDevice.uplink.capabilities[1].formula.props.f\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s f!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal Zo = childDevice.uplink.capabilities[1].formula.props.Zo \n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s Zo!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal b = childDevice.uplink.capabilities[1].formula.props.b \n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s b!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal a = childDevice.uplink.capabilities[1].formula.props.a \n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s a!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal Ro = childDevice.uplink.capabilities[1].formula.props.Ro \n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s Ro!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s 参数=%s,%s,%s,%s,%s",tostring(moduleNo),tostring(channelNo),f,Zo,b,a,Ro)\n\t\t\t\t\t\t\t\tif f ==nil or Zo ==nil or b ==nil or a==nil or Ro==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tTemp=a*(R1+r1-Ro)\n \t\t\t\t\tif tonumber(ri)~=0 then\t\t\t\n Phy =f*(R1/r1 -Zo)+b*Temp\n --log.debug("cdaj_440: m=%s,c=%s, 当前的R1=%s,r1=%s,Temp=%s,Phy=%s",tostring(moduleNo),tostring(channelNo),R1,r1,Temp,Phy)\n \t\t\t\telse\n \t\t\t --log.debug("cdaj_440: 数据无效 m=%s,c=%s, r1=0")\n break\n \t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tend \n \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s deviceId为nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块:公式%s",device.formula)\n\t\t\t\t\t\t \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tResistor1=R1,\n\t\t\t\t\t\t\t\t\tResistor2=r1,\n\t\t\t\t\t\t\t\t\ttemperature=Temp,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块 m=%s,c=%s Phy结果=%s",tostring(moduleNo),tostring(channelNo),Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\t\t\t\t\t\t\n\t\t\t\t\t\tend\n\n end\n\t\t\t\tend\n end\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n local resultData =json.encode(out)\n --log.debug("cdaj_440resultData=%s,hex=%s", json.encode(out),hex)\n ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n --log.debug("cdaj_440 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t --log.debug("cdaj_440:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\t--log.debug("cdaj_440 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\t -- log.debug("cdaj_440 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t \t if tostring(channelStrCheck)== tostring(channelNoId) then\n \n \t\t --log.debug("cdaj_440: m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n return child\n \t end\n \t \tend\n\t\tend\n else\n -- log.debug("cdaj_440: subdevices是nil")\n \treturn nil\n end\nend\n\nIsValid=function(alldata)\n --log.debug("cdaj_440 校验开始")\n if alldata == nil then\n errormsg = 'allData is nil'\n errcode = 1001\n return false\n end\n\n local length=getIndex(alldata)\n local data=string.sub(alldata,1,length*2)\n --log.debug("data:"..data)\n local plu16={}\n plu16[0]=string.sub(data,-8,-7)\n plu16[1]=string.sub(data,-6,-5)\n local plusSum16Hi,plusSum16Lo = iota.hexCheckPlusSum16(data,0,length-4);\n -- log.debug("cdaj_440:".."plu16[0]是:"..plu16[0])\n -- log.debug("cdaj_440:".."plu16[1]是:"..plu16[1])\n -- log.debug("cdaj_440:".."plusSum16Hi是:"..tostring(plusSum16Hi))\n -- log.debug("cdaj_440:".."plusSum16Lo是:"..tostring(plusSum16Lo))\n --if tonumber(plu16[0],16)~=plusSum16Hi or tonumber(plu16[1],16)~=plusSum16Lo then\n -- errormsg = 'checkPlusSum16 is false'\n -- errcode = 1004\n -- return false\n -- end\n\n --log.debug("cdaj_440 校验通过")\n return true\nend\n\ngetIndex=function(data)--用于IsValid\n local len=string.len(data)/2\n for n =1,len do \n local value=string.sub(data,2*n-1,2*n)\n if value=='0a' then\n return n;\n end\n end\n return 0;\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n\ntable_leng=function(t)\n local leng=0\n for k, v in pairs(t) do\n leng=leng+1\n end\n return leng;\nend\n\n\nIsNumberic=function(s)\n local n = tonumber(s);\n if n then\n return true; \n end\n return false;\n\nend\n\nGetSWData=function(sData,j)\n local SW={}\n\n local Water1 = tonumber(string.sub(sData[j],8,-1));\n local Base1 = tonumber(string.sub(sData[j+1],7,-1));\n\n local Water2 = tonumber(string.sub(sData[j+2],8,-1));\n local Base2 = tonumber(string.sub(sData[j+3],7,-1));\n\n local MaxWinSpeed = tonumber(string.sub(sData[j+4],13,-1));\n local Direction = tonumber(string.sub(sData[j+5],11,-1));\n\n local AverWinSpeed = tonumber(string.sub(sData[j+6],14,-1));\n local RealTImeWinSpeed = tonumber(string.sub(sData[j+7],18,-1));\n \n local NowDirection = tonumber(string.sub(sData[j+8],11,-1));\n local AccRain = tonumber(string.sub(sData[j+9],9,-1));\n\n SW[1] = Water1/100 + Base1;\n SW[2] = Water2/100 + Base2;\n SW[3] = MaxWinSpeed;\n SW[4] = Direction;\n SW[5] = AverWinSpeed;\n SW[6] = RealTImeWinSpeed;\n SW[7] = NowDirection;\n SW[8] = AccRain;\n return SW;\nend INLINE 2019-11-11 14:52:18.549+08 2019-11-22 11:42:32.332+08 2019-11-11 \N
+e24b60a8-2b3d-40d5-8841-f40c4aed5c8c anXin_inclino_1550 \N 安信测斜 请求应答 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "anXin_inclino_1550.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0xFF, endian) --1: 帧头\n buff=iota.appendHexByte(buff, 0x41, endian)\n buff=iota.appendHexByte(buff, 0x58, endian)\n buff=iota.appendHexByte(buff, 0x4a, endian)\n buff=iota.appendHexWord(buff, 2, endian) -- 2: 类型=1\n buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 3: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 4: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 5: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n--采集ff41584a0002000101379cBF9C\n--应答FF41584A000200018000000134FFFFFFFFD238 moduleId=1\n--"Temp": -0.01,\n--"xDgree": 0,\n--"yDgree": 0.308,\n--"zDgree": -0.001\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)/2==19) then\n -- 2 2 1 4 4 2\n -- \n \n --print("parsing data", hex)\n local xData = iota.hexToShort(hex,9,'B')/1000.0;\n local yData = iota.hexToShort(hex,11,'B')/1000.0;\n local zData = iota.hexToShort(hex,13,'B')/1000.0;\n local temp = iota.hexToShort(hex,15,'B')/100.0;\n out.data = {\n anglex=xData,\n angley=yData,\n anglez=zData,\n temperature\t=temp\n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2017-09-04 14:18:44.969+08 2019-12-24 13:15:06.526+08 2017-09-02 \N
+a77bb1f1-95da-410e-8bdc-3b9d2ac3424c 数据处理 \N 1 d41427b1-5907-4063-88c6-422f4f478d1f d41427b1-5907-4063-88c6-422f4f478d1f f d41427b1-5907-4063-88c6-422f4f478d1f Lua func main()\nend INLINE 2020-03-20 11:16:58.766+08 2020-03-20 11:16:58.766+08 2020-03-20 \N
+09cac49f-47cf-46e1-989b-87ca089ba58b mukuntech_TempHumi_1 \N 牧坤温湿度 1.0 c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca f c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n \nstart=function()\n log.debug("start %s, ctx=%s", "mukuntech_TempHumi_1.lua",json.encode(device.props.moduleId))\nend\n--AA01040703EB305E8B moduleId=1\n--"humi": 48,\n--"temp": 100.3\n\nonData=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n\n local out={\n data ={},\n result = {}\n }\n log.debug("mukuntech_TempHumi_1 recv=%s",hex)\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n local moduleNo = iota.hexToByte(hex,1,'B')\n \n local modulenumber= tonumber(device.uplink.props.module)\n local valCmd = iota.hexToByte(hex,3,'B') \n if valCmd == 0x07 and moduleNo==modulenumber then\n\n local temp = iota.hexToShort(hex,4,'B') / 10.0\n local humi = iota.hexToByte(hex,6,'B') \n out.data = { \n temp=temp,\n humi=humi\n }\n\n local resultData =json.encode(out)\n log.debug("mukuntech_TempHumi_1 recv %s",json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = 1001, msg = "Is not validated"}\n end\n else\n out.result = {code = errcode, msg = errormsg}\n end\n \nend\n\nIsValid=function(data)\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1001\n return false\n end\n --iota.checkPlusSum16\n return true\n--crc\nend\n\n\n\n INLINE 2017-11-01 16:30:03.843+08 2020-03-20 18:33:33.913+08 2017-10-28 \N
+235a942c-f4b2-48dc-8c48-25d92e7832d4 FS-YLJ-Z \N 雨量计 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n协议号: 1.0;\n协议名: FS-YLJ-Z\n]]--liankang\nstart=function ()\n log.debug("FSYLJZ start %s",json.encode(device))\n log.debug("FSYLJZ device.id %s",type(device.id)) -- c704f492-5723-40a1-a070-40f22c46a908\n\n\n -- 当前时间上一个小时对应的时间\n lastHour = os.time() - 3600 \n lastDateStr = os.date("%Y-%m-%d-%H-%M-%S", lastHour) -- 2019-12-10-11-28-25\n log.debug("FSYLJZ lastDateStr = %s", lastDateStr)\n lastYearNum = tonumber(string.sub(lastDateStr, 3, 4)); \n\tlastMonthNum = tonumber(string.sub(lastDateStr, 6, 7)); \n\tlastDayNum = tonumber(string.sub(lastDateStr, 9, 10)); \n lastHourNum = tonumber(string.sub(lastDateStr, 12, 13)); \n\n -- 读取数据\n local sendBuffHour = protocol_encode_hour()\n\tlog.debug("FSYLJZ encoded")\n local okHour, respHour = ctx:ssend(sendBuffHour, 16000) -- 第二个参数超时时间\n\tif okHour then\n\t\tresult=protocol_decode_hour(respHour)\n\t\tlog.debug("FSYLJZ decoded") \n\telse\n\t\t--print("SSend error!")\n end\n\n ctx:sleep(1)\n\n -- 当前时间\n timeNow = os.time()\n dateStr = os.date("%Y-%m-%d-%H-%M-%S", timeNow) -- 2019-12-10-11-28-25\n log.debug("FSYLJZ dateStr = %s", dateStr)\n yearNum = tonumber(string.sub(dateStr, 3, 4)); \n monthNum = tonumber(string.sub(dateStr, 6, 7)); \n dayNum = tonumber(string.sub(dateStr, 9, 10)); \n hourNum = tonumber(string.sub(dateStr, 12, 13));\n minuteNum = tonumber(string.sub(dateStr, 12, 13)); \n\n -- 更新时间\n local needSet = needSetTime(7) -- 每隔几天需要更新设备时间 和 redis记录时间\n if needSet then\n local sendBuffTime = protocol_encode_set_time() -- 回复AA 05 10 00 BF AA051000BF\n local okSetTime, respSetTime = ctx:ssend(sendBuffTime, 16000)\n if okSetTime then\n if redis.set(device.id.."_lastTime", tostring(timeNow)) then\n log.debug("FSYLJZ redis.set succsess") \n else\n log.debug("FSYLJZ redis.set failed") \n end\n else \n log.debug("FSYLJZ protocol_encode_set_time failed") \n end\n end\n\n\n\tctx:done(result)\nend\n\nfunction protocol_encode_hour()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0x55, BE); -- 标记 55\n\tbuff=iota.appendHexByte(buff, 0x0A, BE); -- 长度 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE); -- 类型 00\n buff=iota.appendHexByte(buff, lastYearNum, BE); -- 年\n buff=iota.appendHexByte(buff, lastMonthNum, BE); -- 月\n buff=iota.appendHexByte(buff, lastDayNum, BE); -- 日\n buff=iota.appendHexByte(buff, lastHourNum, BE); -- 时\n buff=iota.appendHexByte(buff, 0x01, BE); -- 小时数 \n buff=iota.appendHexByte(buff, 0x00, BE); -- CRC0\n local crcHex = CheckXor(buff);\n buff=iota.appendHexByte(buff, crcHex, BE); -- CRC1\t\n log.debug("FSYLJZ bufflast ="..json.encode(buff))\n\treturn buff\nend\n\n\nfunction protocol_encode_set_time()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0x55, BE); -- 标记 55\n\tbuff=iota.appendHexByte(buff, 0x05, BE); -- 长度 03\n\tbuff=iota.appendHexByte(buff, 0x03, BE); -- 类型 00\n buff=iota.appendHexByte(buff, yearNum, BE); -- 年\n buff=iota.appendHexByte(buff, monthNum, BE); -- 月\n buff=iota.appendHexByte(buff, dayNum, BE); -- 日\n buff=iota.appendHexByte(buff, hourNum, BE); -- 时\n buff=iota.appendHexByte(buff, minuteNum, BE); -- 分 \n buff=iota.appendHexByte(buff, 0x00, BE); -- CRC0\n local crcHex = CheckXor(buff);\n buff=iota.appendHexByte(buff, crcHex, BE); -- CRC1\t\n log.debug("FSYLJZ buffnow ="..json.encode(buff))\n\treturn buff\nend\n\n-- decode \n-- returns: 结果\n-- 正确回复 AA0D000A0C0108001C200100A8 雨量 "hourRainfall": 71.68,"temperature": 28.8\nfunction protocol_decode_hour(daHour)\n\t\n local dataHour = daHour\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(dataHour)\n\t-- 判断数据有效性\n\tif inValidHour(daHour) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n else\n local hourRainfall = iota.hexToShort(dataHour, 7, 'L') / 100\n -- local temperature = iota.hexToShort(dataHour, 9, 'L') / 10\n\n\t\tout.data = {\n\t\t\thourRainfall = hourRainfall, \n -- temperature = temperature,\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\n\n\nfunction needSetTime(days)\n local r1,r1ok = redis.get(device.id.."_lastTime") --获取上次记录时间\n if r1ok then\n log.debug("FSYLJZ lastTime type = "..type(r1)..json.encode(r1))\n local lastTime = r1\n if (timeNow - lastTime) / (24 * 3600) > days then\n return true\n else\n return false\n end\n else\n return true\n end\nend\n \n\n\nfunction inValidHour(data)\n if string.len(data) / 2 ~= 13 or iota.hexToByte(data, 2,'B') ~= 0x00 then -- 长度不等于 13 或者 读第三个字节,功能码不等于00\n log.debug("FSYLJZ buff ="..json.encode(iota.hexToByte(data, 3,'B')))\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n\n\n--bit 操作\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\nend --bit:_and\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\n--异或校验\nCheckXor=function(hex) \n local len = string.len(hex)/2\n local pp = 0\n for i =0,len-1 do\n local bi = iota.hexToByte(hex,i,'B')\n pp = bit:_and(bit:_xor(bi,pp) , 0x000000ff)\n end\n return pp\nend \n INLINE 2019-12-10 17:29:22.688+08 2019-12-30 16:06:37.158+08 2019-12-10 \N
+00d10ef2-fbec-43f8-826a-f65d31a13e3d yx_tempHum_1101 \N 复制的飞尚的 1.0 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f 67c8b9e9-38d6-4c9a-8772-9c96d78121ed Lua --[[\n协议号: 1101;\n协议名: modbus 温湿度.\n]]--\n--协议参考文档: “统一协议-V2012-04-28.xls”\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\n\nstart=function ()\n log.debug("yx_1101:load script %s, moduleId=%s", "yx_1101", device.moduleId or "[nil]")\n \n \n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("yx_1101 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("yx_1101 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\tsendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tlog.debug("yx_1101:发送数据=%s",sendBuff)\n\tlocal result=""\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\t\tlog.debug("yx_1101:接收数据=%s",resp)\n\telse\n local errorOut={\n data ={},\n result = {}\n }\n\t\terrorOut.result = {code=1001,msg='采集超时'} \n result=json.encode(errorOut)\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode(moduleNo_str)\n\t-- 32字节. 大字序\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0xFC); -- 1: 1 帧头 去:FC,回 FD\n\tbuff=iota.appendHexByte(buff, 0x01); -- 1: 2 设备类型,温湿度=1\t\n\tbuff=iota.appendHexWord(buff, moduleNo_str, BE); -- 2: 3/4 模块号\n\tbuff=buff.."00".."00"; -- 1 1 : 5/6 无用\n\tbuff=iota.appendHexByte(buff, 0x01); -- 1: 7 指令\n\tfor i = 8,30 do -- 1: 8/30 填写0\n\t\tbuff=buff.."00";\n\t\ti = i+1;\n\tend\n\tlocal crc = checkCRC8(buff,2)\n \tcrc =PadLeft(2,0,crc)\n\tbuff=buff..crc -- 1: 31 CRC8 加总异或,2-30\n --log.debug('yx_1101:CRC8 Buff = %s',crc)\n\tbuff=iota.appendHexByte(buff, 0xCF); -- 1: 32 结尾\n\t--log.debug("yx_1101:start %s, ctx=%s ", "yx_1101.lua",buff)\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复 FD01002300000100005541CC000000000000000000000000000000000000C4DF\n--temp=25.5 Hum=0.85 module=35\nfunction protocol_decode(da,moduleNoCheck)\n \n\tlocal data = da;\n\t\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug("yx_1101:收到数据%s",data)\n\t--判断数据有效性\t\t\t\n\t--0xFD固定帧头,01是温湿度设备类型 0xDF固定帧尾\n local ErrorCode = IsValid(data,moduleNoCheck)\n if ErrorCode then \n\n log.debug("数据有效")\n\t\t--计算温湿度\n\t\tlocal humH = iota.hexToByte(data, 8, 'B');\n log.debug("yx_1101:humH等于:%s",humH)\n\t\tlocal humL = iota.hexToByte(data, 9, 'B');\n log.debug("yx_1101:humL等于:%s",humL)\n\t\tlocal hum = (humH*256 + humL) / 100.0;\n\t\tlocal temp = iota.hexToFloat(data, 10, 'B');\n log.debug("yx_1101:temp等于:%s",temp)\n\n\t\tout.data = {\n\t\ttemp=temp,\n\t\thumid= hum\n\t\t};\n else\n out.result = {code=errcode,msg=errormsg} \n end\n\treturn json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n log.debug('yx_1101:开始校验数据%s',data)\n local startbyte = iota.hexToByte(data,0,'B');\n \tlocal devicetype = iota.hexToByte(data,1,'B');\n \tlocal endbyte = iota.hexToByte(data,31,'B');\n if data == nil or string.len(data)/2 ~= 32 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \tif startbyte ~= 0xFD or devicetype ~= 0x01 or endbyte ~= 0xDF then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleNoCheckStr) ~= iota.hexToUShort(data,2,'B') then\t\n errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNoCheckStr,iota.hexToUShort(data,2,'B'))\n errcode = 1004\n return false\n end\n log.debug('yx_1101:数据校验通过')\n return true\n--crc\nend\n\nfunction checkCRC8(val,start)\n local CRC8Table ={\n 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,\n 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,\n 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,\n 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,\n 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,\n 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,\n 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,\n 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,\n 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,\n 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,\n 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,\n 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,\n 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,\n 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,\n 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,\n 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53\n }\n local c = 0\n for i = start, string.len(val)/2 do\n local b = iota.hexToByte(val,i-1,'B')\n local index = bit:_xor(c,b)\n c = CRC8Table[index+1];\n end\n local crc8 = string.format("%X",c)\n return crc8\nend\n\nPadLeft=function(cnt,num,hex)\n local len = string.len(tostring(hex))\n local offset = cnt -tonumber(len)\n if offset == 0 then \n return hex\n else\n for i = 1,offset do \n hex = tostring(num)..tostring(hex)\n end\n end\n return hex\nend\n\n\n INLINE 2020-04-13 16:34:01.273+08 2020-04-13 16:34:20.004+08 2020-04-13 \N
+6fc5be55-5544-4595-8414-95be244eb503 fs-idau-file \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start=function()\n --log.debug("fsidaufile [%s] jiexi",device.id)\n ctx:asend("010203")\n end\n \nonData=function(data)\n local jdata=json.encode(data)\n log.debug("fsidaufile data=%s",json.encode(data))\n if data ~=nil then\n if data.type == "idau/file" then \n if data.ext==".d" then\n --log.debug("fsidaufile payload=%s", data.payload)\n parseData(data.payload,data.name)\n elseif data.ext==".m" then\n --log.debug("fsidaufile.m dtu: %s payload=%s",data.name,data.payload)\n \t\t parseDiag(data.name,data.payload)\n \telse \n \t\t--log.error("fsidaufile type is not.d/.m %s", data.name)\n end\n else\n --log.error("fsidaufile not a d file .d", data.ext)\n end\n else\n --log.error("fsidaufile data is nil")\n end\nend\nfunction parseData(js,filename)\n local out={\n data ={},\n result = {},\n type=2\n }\n \n local djs=Split(js,'\\r')\n --log.debug("fsidaufile data.name %s jsoncount=%s", filename,#(djs))\n for k,v in ipairs(djs) do\n if v~='' and v~=nil then\n local dj=json.decode(v)\n log.debug("fsidaufile= %s:dj=%s", filename,v)\n --log.debug("fsidaufile [%s] dj=%s",device.id,json.encode(dj))\n if dj~=nil and dj ~= '' and dj.R =="0" then\n --log.debug("fsidaufile:ceshiyixia1 = %s", filename)\n local childDevice=getDeviceInfo(dj.S,filename)\n --log.debug("fsidaufile= %s childDevice=%s", filename,json.encode(childDevice))\n if childDevice~=nil and childDevice ~= {} then \n --log.debug("fsidaufile:ceshiyixia2")\n --log.debug("fsidaufile= %s dj.PV1=%s", filename,dj.PV[1])\n if childDevice.props.sensortype=="cx" then --测斜\n local data1 ={\n data={\n anglex = dj.RV[1] or 0,\n angley= dj.RV[2] or 0,\n temperature= dj.RV[3] or 0, \n _acq_number=dj.N or 1000\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data1)\n end\n if childDevice.props.sensortype=="lf" then --裂缝\n local data1 ={\n data={\n length = dj.RV[1] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data1)\n end\n if childDevice.props.sensortype=="wsd" then --温湿度\n local data2 ={\n data={\n temperature = dj.RV[1] or 0,\n humidity= dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data2)\n end\n\n if childDevice.props.sensortype=="cj" then --激光测距\n local data2 ={\n data={\n length = dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data2)\n end\n\n if childDevice.props.sensortype=="yc" then --压差\n local data3 ={\n data={\n pressure=dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data3)\n end\n if childDevice.props.sensortype=="noise" then --噪声\n --log.debug("fsidaufile noise")\n local data4={\n data={\n ein = dj.RV[1],\n minnf=dj.RV[2],\n maxnf=dj.RV[3]\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n --log.debug("fsidaufile data.name %s out data4=%s",filename,json.encode(data4))\n table.insert(out.data,data4)\n end\t\t\t\t\t\n if childDevice.props.sensortype=="zx" then --振弦\n --log.debug("fsidaufile ceshi_zx")\n local data4={\n data={\n physicalvalue = dj.PV[1] or 0,\n frequency=dj.RV[1],\n temperature=dj.RV[2],\n am=dj.RV[3]\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n\t\t\t\t\t\t\t--log.debug("fsidaufile status %s",status)\n \t\t\t\tif data4.data.temperature == 200 or data4.data.temperature == -200 then\n data4.data.temperature = nil \n end\n --log.debug("fsidaufile data.name %s out data4=%s",filename,json.encode(data4))\n table.insert(out.data,data4)\n end\n\n end\n else\n --log.debug("fsidaufile dj=nil")\n\t\t\t\t\n\t\t\t\tif dj~=nil and dj ~= '' then\n\t\t\t\t\tlocal childDevice=getDeviceInfo(dj.S,filename)\n\t\t\t\t\tif childDevice~=nil and childDevice ~= {} then \n\t\t\t\t\t\tif childDevice.props.sensortype=="zx" then --振弦\n\t\t\t\t\t\t\tlog.debug("fsidaufile filename %s ceshi_zx",filename)\n\t\t\t\t\t\t\tlocal data4={\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue = dj.PV[1] or 0,\n\t\t\t\t\t\t\t\t\tfrequency=dj.RV[1],\n\t\t\t\t\t\t\t\t\ttemperature=dj.RV[2],\n\t\t\t\t\t\t\t\t\tam=dj.RV[3]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1, \n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlocal status = dj.R\n\t\t\t\t\t\t\tlog.debug("fsidaufile filename %s , dj.R %s",filename,status)\n\t\t\t\t\t\t\tif data4.data.temperature == 200 or data4.data.temperature == -200 then\n\t\t\t\t\t\t\t\tdata4.data.temperature = nil \n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--log.debug("fsidaufile filename %s , status %s",filename,status)\n\t\t\t\t\t\t\tif tonumber(status) == 140104 then\n\t\t\t\t\t\t\t\tdata4.result = {code=30010023,msg="频率线短路"}\n\t\t\t\t\t\t\t\tdata4.data ={}\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif tonumber(status) == 140105 then\n\t\t\t\t\t\t\t\tdata4.result = {code=30010022,msg="频率线断路"}\n\t\t\t\t\t\t\t\tdata4.data ={}\n\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,data4)\n\t\t\t\t\t\t\t--log.debug("fsidaufile filename %s , out %s",filename,json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n end\n else\n --log.debug("fsidaufile v is nil v=%s",json.decode(v))\n end\n\n end\n local resultData =json.encode(out)\n --log.debug("fsidaufile data.name= %s data is =%s",filename, json.encode(out))\n ctx:notify(resultData)\nend\nfunction parseDiag(name,js)\n local dj=json.decode(js)\n if dj~=nil then\n\tlocal out={\n data ={_data_type = "diag", R={}},\n result = {},\n type=2\n }\n \n local dataresult= json.encode(dj.R.P.R)\n\tout.data.R = dataresult\n --log.debug("fsidaufile name: %s parsing diag file = %s",name,json.encode(out))\n ctx:notify(json.encode(out))\n end\nend\n --string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n \n --获取采集仪下面的通道信息\nfunction getDeviceInfo(sensorId,filename)\n local resensor=nil\n if device.dnlinks ~=nil then\n --log.debug("fsidaufile =%s:deviceInfo=%s",filename,json.encode(device))\n for i,link in pairs(device.dnlinks) do\n --log.debug("fsidaufile: = %s link=%s",filename,json.encode(link))\n for j,node in pairs(link.devices) do\n --log.debug("fsidaufile: = %s node=%s",filename,json.encode(node))\n \t\tif node.dnlinks ~= nil then\n for k,sublink in pairs(node.dnlinks) do\n --log.debug("fsidaufile:=%s sublink=%s",filename,json.encode(sublink))\n for u,subdevice in pairs(sublink.devices) do\n --log.debug("fsidaufile: = %s sensor=%s",filename,json.encode(subdevice))\n if subdevice.uplink.props.sensorid == sensorId then\n --log.debug("fsidaufile:= %s final_sensor %s=%s",filename,subdevice.uplink.props.sensorid,sensorId)\n resensor = subdevice\n end \n end\n end\n \t\tend\n end\n end \n end\n return resensor\nend INLINE 2018-03-08 18:59:42.191+08 2021-01-08 10:55:57.23+08 2018-03-08 \N
+eb847cf6-6311-40ea-85ff-6ad19edc36da yx_laser_9509 \N 复制的飞尚的 1.0 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f 67c8b9e9-38d6-4c9a-8772-9c96d78121ed Lua --//02 协议分析/2017-01/ModBus统一通信协议.xls\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "yx_laser_9509", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff=''\n buff=iota.appendHexWord(buff, 0x02, endian) \t\n \tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("yx_laser_9509 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("yx_laser_9509 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n \t-- local moduleNo=device.props.moduleId or device.uplink.props.module\n\tlog.debug("yx_laser_9509 moduleNo=%s 接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n buff=iota.appendHexWord(buff,moduleNo, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 1, endian) \t-- 3: 指令: 0x01 = 采集\n\tbuff=iota.appendHexByte(buff, 0x2E, endian) -- 4: 指令: 是否加热,设置量程等 目前设置为0\n buff=iota.appendHexCrc(buff, endian ,0) \t-- 5: CRC\n\n ok,resp=ctx:ssend(buff,50000)\n log.debug('yx_laser_9509:发送数据=%s',buff)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo) \n \tlog.debug('yx_laser_9509:接收数据=%s',resp)\n else\n\t log.debug('yx_laser_9509:数据采集失败')\n end\n ctx:done(result)\nend\n\n\n\n--0002042C812E003D947D8141C900009EF77809000000000000000004CA\n--module=1068\n--"distance": 0.073,\n--"temperature": 25.12\nunmarshall=function(hex,moduleStr)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local Distance = iota.hexToFloat(hex,7,'B',3);\n local Temp = iota.hexToFloat(hex,11,'B',2);\n out.data = {\n distance =Distance,\n length=Distance,--统一输出用\n temperature=Temp\n };\n\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n log.debug('yx_laser_9509:开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 29 then\n errormsg = 'Data is nil or invalid'\n errcode = 1002\n return false\n end\n \n if iota.hexToByte(data,4,'B') ~= 0x81 then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n return false\n end\n \t local moduleNo_Data=tostring(iota.hexToShort(data,2,'B'))\n if moduleNo_check ~= moduleNo_Data then\t\n errormsg = string.format('数据的模块号与传感器不匹配%s[%s]',moduleNo_Data,moduleNo_check)\n errcode = 1004\n return false\n end\n log.debug('数据校验通过')\n return true\n--crc\nend\n \n\n\n \n\n INLINE 2020-04-13 16:44:32.943+08 2020-04-13 16:44:32.943+08 2020-04-13 \N
+24d5f318-b4a2-480f-bb83-c0d0ec08730d weiyun_file_transfer \N 1.0 650f75b2-4e3f-4393-8edb-0308c73e15b6 650f75b2-4e3f-4393-8edb-0308c73e15b6 f 650f75b2-4e3f-4393-8edb-0308c73e15b6 Lua start=function()\n log.debug("weiyun_file_transfer : devices network =%s", json.encode(device))\n log.debug("weiyun_file_transfer get Start ")\nend\n\nonData=function(data)\n log.debug("weiyun_file_transfer 解析data ")\n if data ~=nil then\n if data.type == "idau/file" then \n if data.ext==".d" or data.ext==".dx" then\n log.debug("weiyun_file_transfer : recvd content = %s",data.payload)\n ParseFileD(data.payload)\n --else\n --log.error("weiyun_file_transfer : unsupported file type: %s", data.ext)\n end\n if data.ext==".dat" then\n --log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n ParseFileDat(data.payload)\n --else\n --log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n end\n else\n log.error("weiyun_file_transfer : content type is not file, error recvd type is %s", data.type)\n end\n else\n log.error("weiyun_file_transfer : recvd content is nil")\n end\nend\n\nfunction ParseFileDat(dathex)\n log.debug("weiyun_file_transfer : dat content =%s", dathex)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n log.debug("weiyun_file_transfer deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n local floatcount = (string.len(dathex)/2-40)/4\n log.debug("weiyun_file_transfer begin parse")\n local vols = {}\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n end\n log.debug("weiyun_file_transfer finish parse")\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n sampleFreq=samplefreq,\n filterFreq=filterfreq,\n gainAmplifier=gainamplifier,\n triggerType=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n }\n table.insert(out.data,rst)\n log.debug("weiyun_file_transfer deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n ctx:notify(json.encode(out))\n else\n log.debug("weiyun_file_transfer not found device module=%s channel=%s",deviceId,channel)\n end\nend\n\nfunction ParseFileD(content)\n local out={\n data ={},\n result = {},\n type=2\n }\n log.debug("weiyun_file_transfer : content =%s", content)\n local jsons=Split(content,'\\r')\n\t\n\t\n for k,v in pairs(jsons) do\n if v~=nil and v~='' then\n local jsondata = json.decode(v) \n if jsondata~=nil and jsondata ~='' then\n local childDevice=getDeviceInfo(jsondata.M,jsondata.C) \n if childDevice ~=nil then\n \t\t\tlog.debug("weiyun_file_transfer 设备类型=%s,%s",childDevice.props.sensortype,json.encode(childDevice))\n\t\t\t\t\t\n if childDevice.props.sensortype=='gnss' then\n local rst = {\n data={\n x = jsondata.RV[1] or 0,\n y = jsondata.RV[2] or 0,\n z = jsondata.RV[3] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000)) \n }\n table.insert(out.data,rst)\t\n end\n if childDevice.props.sensortype=='zd' then\n local rst = {\n data={\n ppv = jsondata.RV[1] or 0, \n pv = jsondata.RV[2] or 0, \n rms = jsondata.RV[3] or 0, \n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000)) \n }\n log.debug("weiyun_file_transfer:out data=%s",json.encode(data))\n table.insert(out.data,rst)\n end\n \n \t\t\tif childDevice.props.sensortype=='gdgs' then\n\t\t\t\t\tlocal Phy\n\t\t\t\t\tlocal wavelength=tonumber(string.format('%0.3f',jsondata.RV[1]))\n\t\t\t\t\tlocal A = childDevice.uplink.capabilities[1].formula.props.A\t\n\t\t\t\t local B = childDevice.uplink.capabilities[1].formula.props.B\n\t\t\t\t\tif A ==nil or B==nil then\n\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\n\t\t\t\t\telse\n\t\t\t\t\t\tPhy=(wavelength-A)/B\n\t\t\t\t\tend \n local rst = {\n data={\n wavelength = wavelength,\n physicalvalue= tonumber(string.format('%0.3f',Phy)) \n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000)) \n }\n log.debug("weiyun_file_transfer:out data=%s",json.encode(data))\n table.insert(out.data,rst)\n end\n \t\t\tif childDevice.props.sensortype=='gdgszx' then\n local rst = {\n data={\n physicalvalue = jsondata.PV[1],\n temperature= jsondata.PV[2] \n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000)) \n }\n log.debug("weiyun_file_transfer:out data=%s",json.encode(data))\n table.insert(out.data,rst)\n end\n if childDevice.props.sensortype=='standard485' then\n \t\t\tlog.debug("weiyun_file_transfer standard485=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n data={ \n physicalvalue= jsondata.PV[1] \n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000)) \n }\n log.debug("weiyun_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n table.insert(out.data,rst)\n end\n else\n log.debug("weiyun_file_transfer line=%s childDevice is nil",k)\n end\n end\n end\n end\n log.debug("weiyun_file_transfer: dataresult: %s", json.encode(out))\n ctx:notify(json.encode(out)) \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n \tlog.debug("weiyun_file_transfer:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n\tlog.debug("weiyun_file_transfer:查询设备: device=%s",json.encode(device))\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices \nlog.debug("weiyun_file_transfer:查询子设备: subdevices=%s", json.encode(subdevices))\t\t\n for i,subdevice in pairs(subdevices) do\n\t\t\n\t\t\tlocal submodule=subdevice.uplink.props.module\n \t\t --判断是否是3层采集仪结构\n\t\t\tif json.encode(subdevice.dnlinks)~="{}" then\n \t\tlog.debug("weiyun_file_transfer:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n\t\t\t for k,sublink in pairs(subdevice.dnlinks) do\n\t\t\t\t\t\tlog.debug("weiyun_file_transfer:sublink=%s",json.encode(sublink))\n\t\t\t\t\t\tfor u,sub_subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t\tlog.debug("weiyun_file_transfer:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\t\tlocal sensornodeId=sub_subdevice.uplink.props.nodeid\n \t\t\t\tlocal sensorchannel=sub_subdevice.uplink.props.channelid\n\t\t\t\t\t\t\tif tostring(sensorchannel) == tostring(moduleid) and tonumber(sensornodeId)==tonumber(channel) then\n\t\t\t\t\t\t\t\tlog.debug("weiyun_file_transfer:m=%s,c=%s 3匹配到设备=%s",moduleid,channel,json.encode(sub_subdevice))\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treturn sub_subdevice\n \t\t\t\telse\n \t\t\t\t\t--log.debug("weiyun_file_transfer:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n\t\t\t\t\t\t\tend \n\t\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\n\t\t else\n \n local subchannel=subdevice.uplink.props.channel\n \t\tlog.debug("weiyun_file_transfer:两层结构 m=%s,c=%s 设备=%s",submodule,subchannel,json.encode(subdevice))\n if tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then \n log.debug("weiyun_file_transfer:m=%s,c=%s 2安信匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n return subdevice\n else\n log.debug("weiyun_file_transfer has no device module=%s channel=%s,[submodule=%s,subchannel=%s]",moduleid,channel,submodule,subchannel)\n end \n \tend\n end\n log.debug("weiyun_file_transfer has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("weiyun_file_transfer has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n INLINE 2020-05-20 09:33:23.075+08 2020-06-18 16:20:15.856+08 2020-05-20 \N
+6f1a07b6-95d7-4f53-b373-fd5c75edb587 fzmas_micro_zy \N 1.0 4fd9bf53-3722-4a0e-9145-178e3be83216 4fd9bf53-3722-4a0e-9145-178e3be83216 f 4fd9bf53-3722-4a0e-9145-178e3be83216 Lua start=function()\n log.debug("fzmas_micro_zy : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n if data ~=nil then\n log.debug("fzmas_micro_zy devices data =%s",data)\n ParseData(data) \n else\n log.error("fzmas_micro_zy recvd content is nil")\n end\nend\n\n\nfunction ParseData(data)\n local out={\n data ={},\n result = {},\n type=2\n }\n if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then --振动数据\n log.debug("fzmas_micro_zy 振动数据 data =%s",data)\n local package=iota.hexToShort(data,8,'L')\n local packagecount=iota.hexToShort(data,10,'L')\n local datpackage=string.sub(data,41,-9)\n local moduleid=iota.hexToShort(data,16,'L')\n\n local req1 =''\n local req2 =''\n local req =''\n req1=iota.appendHexByte(req1, 01 , 'L') -- 0-3 压缩协议 4-7 协议版本\n req1=iota.appendHexByte(req1, 0x02 , 'L')\n req1=iota.appendHexWord(req1, 0x0007 , 'L')\n req1=iota.appendHexWord(req1, 0x0000 , 'L')\n \n req2=iota.appendHexWord(req2, package , 'L')\n req2=iota.appendHexWord(req2, packagecount , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, moduleid , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n local checkdat=req1..req2\n local checksum=HeadCheckSum(checkdat)\n req=req1\n req=iota.appendHexWord(req, checksum , 'L')\n req=req..req2\n req=iota.appendHexWord(req, package , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=req..'00000000'\n req=iota.appendHexCrc(req, 'L' ,0) --校验\n local crc16=string.sub(req,-4,-1)\n req=string.sub(req,1,-13)\n req=req..crc16\n req=iota.appendHexByte(req, 0 , 'L') \n req=iota.appendHexByte(req, 0xfa , 'L') \n log.debug("fzmas_micro_zy datfileback %s", req)\n ctx:asend(req, 20000)\n\n if package==packagecount then\n local r1,ok = redis.get(device.id.."_mpzd")\n log.debug("fzmas_micro_zy 解析dat r1= %s", r1)\n ParseFileDat(r1)\n else\n if package==1 then\n local firstpackage=string.sub(datpackage,-80,-1)\n redis.set(device.id.."_mpzd", firstpackage)\n log.debug("fzmas_micro_zy 接收dat datpackage= %s", firstpackage)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据首包'\n }\n }\n ctx:notify(json.encode(re))\n else\n local r1,ok = redis.get(device.id.."_mpzd")\n log.debug("fzmas_micro_zy 接收dat r1= %s package=%s", r1,package)\n local data=r1..datpackage\n redis.set(device.id.."_mpzd", data)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n end\n else \n\t \n\t -- 非振动数据\n if string.sub(data,13,16)=='8a00' then\n local rtumodule=iota.hexToShort(data,3,'B')\n local power = iota.hexToByte(data,13,'B')\n log.debug("fzmas_micro_zy 剩余电量 %s", power)\n\t\t\tlocal setting = iota.hexToByte(data,14,'B')\n\t\t\tlog.debug("fzmas_micro_zy 通道配置版本号 %s", setting)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\tlog.debug("fzmas_micro_zy 版本固件 %s", ver)\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\n\t\t\tlocal version = string.format("%0.2f",ver)\n\t\t\tlocal v = Split(version,'.')\n\t\t\tlocal vlen = v[2].length\n\t\t \n\t\t\tif vlen == 1 then\n\t\t\t version = version.."0"\n\t\t\telseif vlen == 0 then\n\t\t\t version = version..".00"\n\t\t\tend\n\t\t\tlog.debug('fs_microPower_1 version=%s', version)\t\t\t\n\t\t\tredis.set(device.id.."_version", version)\t\t\t\n\n local strdevice= toHexStr(json.encode(device))\n strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n local crc=string.sub(strdevice,-4,-1)\n log.debug("fzmas_micro_zy devices crc =%s",crc)\n local r1,ok = redis.get(device.id.."_mpset")\n if ok and r1~=nil then\n\t\t\t log.debug("fzmas_micro_zy crc %s r1 %s setting%s" ,crc,r1,setting)\n if crc == r1 and setting ~= 0xFF then\n log.debug("fzmas_micro_zy 配置无修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 0, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fzmas_micro_zy 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置无修改'\n }\n }\n ctx:notify(json.encode(re))\n else\n log.debug("fzmas_micro_zy 配置有修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fzmas_micro_zy 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n else\n log.debug("fzmas_micro_zy 配置初次配置")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fzmas_micro_zy 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n end\n \n if string.sub(data,13,16)=='8a02' then\n log.debug("fzmas_micro_zy 设备休眠")\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '设备休眠'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n local rtumodule=iota.hexToShort(data,3,'B')\n if string.sub(data,13,16)=='8601' then\n local time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\tlog.debug("fzmas_micro_zy r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver=r1\n\t\t\t\tlog.debug("fzmas_micro_zy r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\tlog.debug("fzmas_micro_zy powerstr=%s",powerstr)\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} \n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time \n\t\t\t}\n\t\t\ttable.insert(out.data,rst)\n local isover=iota.hexToByte(data,25,'B') --尾包\n local datalength=0\n local firststart=27\n for i=1,sensorCount,1 do\n\t\t\t\tlog.debug("fzmas_micro_zy XDATA=%s",string.sub(data,firststart,firststart+datalength))\n firststart=firststart+datalength\t\t\t\t\n local sensorType=iota.hexToByte(data,firststart,'B')\n local module=iota.hexToShort(data,firststart+3,'B')\n local channel=iota.hexToByte(data,firststart+2,'B')\n datalength=iota.hexToByte(data,firststart+1,'B')+6\n if sensorType==0 then --振弦\n local childDevice=getZxDeviceInfo(module,channel)\n\t\t\t\t\tlog.debug("fzmas_micro_zy 振弦 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal Phy=0\n\t\t\t\t\t\tlocal k = childDevice.uplink.props.k or 0\n\t\t\t\t\t\tlocal kt = childDevice.uplink.props.kt or 0\t\t\t\t\t\t\n\t\t\t\t\t\tlocal f0 = childDevice.uplink.props.f0 or 0\n\t\t\t\t\t\tlocal t0 = childDevice.uplink.props.t0 or 0\t\t\n\t\t\t\t\t\tlocal status = iota.hexToByte(data,firststart+11,'B')\n\t\t\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\t\t\tlocal freq = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\tlocal temp = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\tlog.debug("fzmas_micro_zy 振弦 Phy =%s, deviceid %s", Phy,childDevice.id)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\tam = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B'),\n\t\t\t\t\t\t\t\tphysicalvalue = Phy\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\t\tif status == 1 then\n\t\t\t\t\t\t\trst.result = {code=30010022,msg="频率线断路"}\n \t\t\t\trst.data = {}\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif status == 2 then\n\t\t\t\t\t\t\trst.result = {code=30010023,msg="频率线短路"}\n \t\t\t\trst.data = {}\n\t\t\t\t\t\tend\t\t\t\t\t\t\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tlog.debug("fzmas_micro_zy 振弦11111111 %s", json.encode(out))\n\t\t\t\t\tend\n end\n if sensorType==1 then --485\n local childDevice=getDeviceInfo(module,channel)\n \t\t\tlocal protocalCode=iota.hexToShort(data,firststart+6,'B')\n\t\t\t\t\tif childDevice~=nil then\t\n\t\t\t\t\t\tif protocalCode==1503 or protocalCode==1502 then --测斜\n\t\t\t\t\t\tlog.debug("fzmas_micro_zy 测斜 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tangley = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fzmas_micro_zy 测斜 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n \n if protocalCode==9102 then --裂缝\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fzmas_micro_zy 裂缝 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fzmas_micro_zy 裂缝 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==9218 then --风速\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_microPower_1 风速 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tspeed = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_microPower_1 风速 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n\t\t\t\t\tif protocalCode==9219 then --风向\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_microPower_1 风向 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tdirection = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_microPower_1 风向 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==1102 then --温湿度\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\thumidity = iota.hexToFloat(data,firststart+16,'B') \n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n end\n \n if protocalCode==9002 then --压差\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n end\n\t\t\t\t\tif protocalCode==9030 then --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t\tlog.debug("fzmas_micro_zy 静力水准仪 %s, deviceid: %s", module,childDevice.id)\n\t\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fzmas_micro_zy 静力水准仪 %s", json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509 then --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992 then --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fzmas_micro_zy 水位 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\t--temperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\tpressure=iota.hexToFloat(data,firststart+12,'B')--兼容老设备\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fzmas_micro_zy 水位 %s", json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\t\t\n end\n\t\t\t\tlog.debug("fzmas_micro_zy dataresult %s", json.encode(out))\n end \n log.debug("fzmas_micro_zy out %s", json.encode(out))\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0601, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0000, 'B') --数据区长度\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fzmas_micro_zy: databack: %s", req)\n ctx:asend(req, 20000)\n ctx:notify(json.encode(out)) \n end\n end\nend\n\nfunction Deploy()\n local total=totalSensors()\n log.debug("fzmas_micro_zy : totalSensors =%s",total)\n local over=0\n local onepag=0\n local totallength=3\n local buff=''\n \n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n over=over+1\n onepag=onepag+1\n\t\t\tlog.debug("fzmas_micro_zy subdevice =%s",json.encode(subdevice))\n if subdevice.props.sensortype=='zx' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x00, 'B') --传感器类型\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n\n local settingvib = tonumber(colgain) + tonumber(incentive) * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n log.debug("fzmas_micro_zy : settingvib =%s",settingvib)\n buff=iota.appendHexByte(buff, settingvib, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexByte(buff, settingvib, 'B') --振弦采集参数\n buff=iota.appendHexWord(buff, subdevice.uplink.props.frequency, 'B') --振弦频率初值\n buff=iota.appendHexByte(buff, 0x00, 'B') --上传频谱ID\n buff=iota.appendHexByte(buff, 0x01, 'B') --采集选项\n end \n if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x01, 'B') --传感器类型\n\t\t\t\tlog.debug("fzmas_micro_zy : begin setting")\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tlog.debug("fzmas_micro_zy baudrate =%s databits %s parity %s stopbits ",baudrate,databits,parity,stopbits)\n\t\t\t\tlocal setting\n\t\t\t\tif baudrate == nil then\n\t\t\t\t\tsetting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n\t\t\t\telse\n setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n\t\t\t\tend\n log.debug("fzmas_micro_zy setting =%s",setting)\n buff=iota.appendHexByte(buff, setting, 'B') --选项1 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B') --协议号\n buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B') --模块号\n buff=iota.appendHexByte(buff, 0x01, 'B') --子通道号\n end\n if subdevice.props.sensortype =='zd' then \n totallength=totallength+31 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x04, 'B') --传感器类型\n buff=iota.appendHexByte(buff, 0x00, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x12, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B') --定时采样间隔\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B') --定时采样时长\n buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B') --加速度触发采样时长\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B') --采样频率\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B') --滤波频率\n\n buff=iota.appendHexWord(buff, 0x42c8, 'B')\n buff=iota.appendHexWord(buff, 0x0000, 'B')\n buff=iota.appendHexWord(buff, 0x4248, 'B')\n buff=iota.appendHexWord(buff, 0x0000, 'B')\n local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n buff=iota.appendHexByte(buff, trigger1, 'B') --触发加速度\n buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B') --加速度范围\n buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B') --滞后点数\n\n end\n if over==8 or onepag==total then \n local buffhead=''\n buffhead=iota.appendHexByte(buffhead, 0xfe, 'B') --帧头\n buffhead=iota.appendHexWord(buffhead, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B') --模块号\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --命令源\n buffhead=iota.appendHexWord(buffhead, 0x0306, 'B') --指令\n buffhead=iota.appendHexWord(buffhead, 0x0000, 'B') --消息ID\n buffhead=iota.appendHexWord(buffhead, totallength, 'B') --数据区长度\n if onepag==total then\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --尾包\n else\n buffhead=iota.appendHexByte(buffhead, 0x00, 'B') --尾包\n end\n buffhead=iota.appendHexByte(buffhead, total, 'B') --采集指令总通道指令个数\n buffhead=iota.appendHexByte(buffhead, over, 'B') --该分包通道指令个数\n buff=buffhead..buff\n buff=iota.appendHexCrc(buff, endian ,0) --校验\n buff=iota.appendHexByte(buff, 0xef, 'B') --帧尾\n\t\t\t\tlog.debug("fzmas_micro_zy ssend request =%s",ack)\n local ok, ack = ctx:ssend(buff, 20000)\n log.debug("fzmas_micro_zy deploy back =%s",ack)\n buff=''\n if over==8 then\n over=0\n end\n totallength=3\n if onepag==total then\n log.debug("fzmas_micro_zy 配置下发完成")\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置下发完成'\n }\n }\n ctx:notify(json.encode(re))\n end\n end \n end\n end \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n log.debug("fzmas_micro_zy has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("fzmas_micro_zy has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n log.debug("fzmas_micro_zy has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("fzmas_micro_zy has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n log.debug("fzmas_micro_zy dat content =%s", dathex)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n log.debug("fzmas_micro_zy deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n local floatcount = (string.len(dathex)/2-40)/4\n log.debug("fzmas_micro_zy begin parse")\n local vols = {}\n\t\tlocal mean = 0\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n log.debug("fzmas_micro_zy finish parse")\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n sampleFreq=samplefreq,\n filterFreq=filterfreq,\n gainAmplifier=gainamplifier,\n triggerType=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n }\n table.insert(out.data,rst)\n \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\tlog.debug("fzmas_micro_zy r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver=r1\n\t\t\tlog.debug("fzmas_micro_zy r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("fzmas_micro_zy powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t} \n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time \n\t\t}\n\t\ttable.insert(out.data,rstd)\n\t\tlog.debug("fzmas_micro_zy cloudvibrate=%s",json.encode(out))\n ctx:notify(json.encode(out))\n else\n log.debug("fzmas_micro_zy not found device module=%s channel=%s",deviceId,channel)\n end\nend\n\nfunction totalSensors()\n local sensorcnt=0\n for i,dnlink in pairs(device.dnlinks) do \n sensorcnt = #(dnlink.devices) + sensorcnt \n end\n return sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend \n\nfunction HeadCheckSum(data)\n local sum=0\n local len = string.len(data)\n log.debug("fzmas_micro_zy len %s", len)\n for i =1,len,4 do \n local te=tonumber(string.sub(data,i,i+3) ,16)\n log.debug("fzmas_micro_zy te %s", te)\n sum = sum+ tonumber(te)\n end\n log.debug("fzmas_micro_zy sum %s", sum)\n return 0xffff-sum\nend\n\n INLINE 2020-04-09 15:42:21.049+08 2020-04-22 10:11:43.808+08 2020-04-09 \N
+6fc0b1e0-2f7e-4f84-ba23-54ab0519b6b5 http_post_get \N post获取token, get获取实时数据信息 1.0 b7a8e100-b8fb-4135-a1b5-00a91da6da3f b7a8e100-b8fb-4135-a1b5-00a91da6da3f f b7a8e100-b8fb-4135-a1b5-00a91da6da3f Lua start=function()\n log.debug("http_post_get_1.0 start moudleid=%s", device.uplink.id or "nil")\n local req = \n {\n type= "http",\n url='', --https://api.yespowering.cn/login/\n \tmethod="post",\n header={}\n }\n\n req.url=device.uplink.props.tokenurl\n log.debug("http_post_get_1.0: url=%s",req.url)\n log.debug("http_post_get_1.0:设备原型="..json.encode(device))\n req.header["agent"] = '0'\n\treq.header["language"] = 'zh'\n\treq.header["brandid"] = '38'\n req.ContentType='application/json'\n \n local param = {\n account= device.uplink.props.account,\n pw=device.uplink.props.pw\n }\n\treq.body = json.encode(param)\n log.debug("http_post_get_1.0="..json.encode(param))\n local ok,ack=ctx:ssend(req,4000) -- ssend\n\n if ack==nil then\n log.debug("http_post_get_1.0: ok=%s",ok)\n else\n log.debug("http_post_get_1.0: ok=%s, ack.body=%s",ok,ack.body)\n end\n local out = {\n type = 2,\n data = {},\n result = {}\n }\n if not ok or ack.body == nil or #ack.body == 0 then --如果tokenurl错误,返回ok = true,ack.body = ""\n out.result={\n code=1002,\n msg="timeout",\n }\n else --OK \n local dataTable=json.decode(ack.body) --json字符串转换为表\n log.debug("http_post_get_1.0:ack.body = "..json.encode(ack.body))\n if dataTable.code == 0 then -- http应答 \n local token=dataTable.data.userinfo.token\n log.debug("http_post_get_1.0: token = %s " ,token)\n log.debug("http_post_get_1.0 ack = %s",ack.body)\n\n Sleep(1)\n --请求数据\n local datareq = {\n type= "http",\n url='', --url=https://api.yespowering.cn/dev/data \n method="get",\n header={}\n }\n local boxId = device.uplink.props.boxid\n datareq.url = device.uplink.props.dataurl.."?box_id="..boxId\n log.debug("http_post_get_1.0: data url=%s",datareq.url)\n --log.debug("设备原型="..json.encode(device))\n datareq.header["agent"] = '0'\n datareq.header["language"] = 'zh'\n datareq.header["brandid"] = '38'\n datareq.header["token"] = token\n datareq.ContentType = 'application/json'\n\t\t\t\t\n --get发送\n local dataok,dataack=ctx:ssend(datareq,4000)\n\t\t\t\n\t\t\tif not dataok or dataack == nil or #dataack.body == 0 then\n\t\t\t\tout.result={\n\t\t\t\tcode=1002,\n\t\t\t\tmsg="timeout",\n\t\t\t\t}\n else --OK\n alldataTable = json.decode(dataack.body) -- 有数据\n log.debug("http_post_get_1.0 dataack.body="..dataack.body)\n\t\t\t\tif alldataTable.code == 0 then -- http应答\n\t\t\t\t\tlocal instant_data = alldataTable.data.instant_data\n -- local model = alldataTable.data.model --获取云盒类型\n log.debug("http_post_get_1.0 instant_data = "..json.encode(instant_data))\n for k, v in ipairs(instant_data) do\n --log.debug("http_post_get_1.0 instant_data= "..json.encode(v))\n -- 获取子设备编号\n local moduleNo = v.order_id\n -- 获取通道设备deviceId\n local childDevice = getDeviceInfo(moduleNo, 1) -- 模块号,channelNoid\n if childDevice == nil then -- 子设备信息为空\n out.result={\n code=1002,\n msg="subdevices is nil",\n }\n else --子设备信息不为空\n local dataTmp = {\n type = 1,\n time = v.datatime,\n data = {\n temp = tonumber(v.temp),\n press = tonumber(v.stress_c)\n },\n device = childDevice.id\n }\n -- 将子设备信息填入返回结果\n table.insert(out.data, dataTmp) \n end\n end\n end\t\n end\n end\n end\n\tctx:done(json.encode(out))\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("http_post_get_1.0: 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n --log.debug("http_post_get_1.0:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n --log.debug('http_post_get_1.0: 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n\n if tonumber(moduleStrCheck) == tonumber(moduleNoId) then\n log.debug('http_post_get_1.0: m=%s c= %s匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n else\n log.debug('http_post_get_1.0: subdevices是nil')\n return nil\n end\nend\n\n\nSleep=function(n)\n local t0 = os.clock()\n while os.clock() - t0 <= n do end\nend INLINE 2019-10-28 16:07:47.133+08 2019-10-31 15:29:20.384+08 2019-10-28 \N
+049512a4-e7cf-44a4-a31c-1165cfb143b9 httpTestAPI \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug('httpTestAPI LUA http server start')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {}\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n \tlog.debug('httpTestAPI [%s] httpbody=%s type=%s', moduleNo, json.encode(httpbody), type(httpbody))\n log.debug('httpTestAPI [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n local bodydataStr = httpbody.Body\n\n out.data = {\n hex = bodydataStr\n }\n log.debug('httpTestAPI [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n \n asend_HttpResponse('313233343536')\n ctx:notify(json.encode(out))\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body = bodyString}\n ctx:asend(ack)\nend\n INLINE 2019-04-22 14:07:43.468+08 2021-01-27 14:28:47.004+08 2019-04-22 \N
+8b310a31-95ae-4f4a-bf8e-231f892b9dfe mas-iadu-file \N 数据解析 1 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua start=function()\n log.debug("masidaufile:jiexi")\n end\nlocal index_id=device.uplink.props.id \nonData=function(data)\n --local jdata=json.encode(data)\n --log.debug("masidaufile [%s] data=%s",index_id,data)\n if data ~=nil then\n if data.type == "idau/file" then \n if data.ext==".d" then\n log.debug("masidaufile [%s] payload=%s",index_id ,data.payload)\n parseData(data.payload)\n elseif data.ext==".m" then\n log.debug("masidaufile_m : payload=%s", data.payload)\n \t\t parseDiag(data.payload)\n \telse \n \t\tlog.error("masidaufile:type is not.d/.m %s", data.name)\n end\n else\n log.error("masidaufile:dtuid=%s,not a d file .d %s,payload=%s",device.uplink.props.id, data.ext,data.payload)\n end\n else\n log.error("masidaufile:data is nil")\n end\nend\nfunction parseData(js)\n local out={\n data ={},\n result = {},\n type=2\n }\n \n local djs=Split(js,'\\r')\n log.debug("masidaufile:jsoncount=%s",#(djs))\n for k,v in ipairs(djs) do\n if v~='' and v~=nil then\n local dj=json.decode(v)\n log.debug("masidaufile:dj=%s",v)\n --log.debug("masidaufile:sen=%s",dj.S)\n if dj~=nil and dj ~= '' and dj.R =="0" then\n local childDevice=getDeviceInfo(dj.S)\n log.debug("masidaufile:childDevice=%s",json.encode(childDevice))\n if childDevice~=nil and childDevice ~= {} then \n --log.debug("masidaufile:dj.PV1=%s",dj.PV[1])\n if childDevice.props.sensortype=="cx" then --测斜\n local data1 ={\n data={\n anglex = dj.RV[1] or 0,\n angley= dj.RV[2] or 0,\n temperature= dj.RV[3] or 0, \n _acq_number=dj.N or 1000\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data1)\n end\n if childDevice.props.sensortype=="lf" then --裂缝\n local data1 ={\n data={\n length = dj.RV[1] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data1)\n end\n if childDevice.props.sensortype=="wsd" then --温湿度\n local data2 ={\n data={\n temperature = dj.RV[1] or 0,\n humidity= dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data2)\n end\n\n if childDevice.props.sensortype=="cj" then --激光测距\n local data2 ={\n data={\n length = dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data2)\n end\n\t\t\t\t\tif childDevice.props.sensortype=="sw" then --水位\n\t\t\t\t\t\tlocal data3 ={\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tpressure=dj.RV[1] or 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,data3)\n\t\t\t\t\tend\n if childDevice.props.sensortype=="yc" then --压差\n local data3 ={\n data={\n pressure=dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data3)\n end\n if childDevice.props.sensortype=="zx" then --振弦\n --log.debug("masidaufile:ceshi_zx")\n\t\t\t\t\t\tif childDevice.props.downer ~= nil then\n\t\t\t\t\t\t\tdn = tonumber(childDevice.props.downer) \n\t\t\t\t\t\t\tup = tonumber(childDevice.props.upper)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tdn = -9999\n\t\t\t\t\t\t\tup = 99999\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif dj.RV[1] >= dn then \n\t\t\t\t\t\t\tif dj.RV[1] <= up then \n\t\t\t\t\t\t\t\tlocal data4={\n\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\tphysicalvalue = dj.PV[1] or 0,\n\t\t\t\t\t\t\t\t\t\t\tfrequency=dj.RV[1],\n\t\t\t\t\t\t\t\t\t\t\ttemperature=dj.RV[2],\n\t\t\t\t\t\t\t\t\t\t\tam=dj.RV[3]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\ttype=1, \n\t\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlog.debug("masidaufile:out data4=%s",json.encode(data4))\n\t\t\t\t\t\t\t\t\ttable.insert(out.data,data4)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n \t\tend\n end\n else\n log.debug("masidaufile:dj=nil")\n end\n else\n log.debug("masidaufile:v is nil v=%s",json.decode(v))\n end\n\n end\n local resultData =json.encode(out)\n log.debug("masidaufile [%s] data is =%s", index_id,json.encode(out))\n ctx:notify(resultData)\nend\nfunction parseDiag(js)\n local dj=json.decode(js)\n if dj~=nil then\n\tlocal out={\n data ={_data_type = "diag", R={}},\n result = {dropped=true},\n type=2 \n }\n \n local dataresult= json.encode(dj.R.P.R)\n\tout.data.R = dataresult\n log.debug("masidaufile_m parsing diag file = %s",json.encode(out))\n ctx:notify(json.encode(out))\n end\nend\n --string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n \n --获取采集仪下面的通道信息\nfunction getDeviceInfo(sensorId)\n local resensor=nil\n if device.dnlinks ~=nil then\n --log.debug("masidaufile:deviceInfo=%s",json.encode(device))\n for i,link in pairs(device.dnlinks) do\n --log.debug("masidaufile:link=%s",json.encode(link))\n for j,node in pairs(link.devices) do\n --log.debug("masidaufile:node=%s",json.encode(node))\n for k,sublink in pairs(node.dnlinks) do\n -- log.debug("masidaufile:sublink=%s",json.encode(sublink))\n for u,subdevice in pairs(sublink.devices) do\n --log.debug("masidaufile [%s] sensor=%s",index_id,json.encode(subdevice))\n if subdevice.uplink.props.sensorid == sensorId then\n ---log.debug("masidaufile [%s] final_sensor %s=%s",index_id,subdevice.uplink.props.sensorid,sensorId)\n resensor = subdevice\n end \n end\n end\n end\n end \n end\n return resensor\nend\n\n\n\n INLINE 2018-03-15 13:38:13.969+08 2020-05-20 11:52:18.638+08 2018-03-15 \N
+93ce2d16-f3f1-4070-91a9-9daefba27430 qaz123 \N 1.0 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f 8d2f03c7-32a2-42e4-befc-7dde5c965472 Lua --//01 协议文档/5月第3周/上海华测创时/振弦采集仪通讯协议.doc\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nstart=function()\n log.debug("start %s, moduleId=%s channel = %s ", "qaz123",device.uplink.props.module or 'nil',device.uplink.props.channel or 'nil')\nlocal endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n log.debug("qaz123 根设备 名称 : data is =%s", device.name)\n log.debug("qaz123 根设备devices : data is =%s", json.encode(device))\n \tfor index,child in pairs(subdevices) do\n\t\t log.debug("qaz123 子设备subdevices=%s : data is =%s", index,json.encode(child))\n \t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("qaz123 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t moduleNo=child.props.moduleId\n\t\t\t channelNo=child.props.channelId \n\t\t\t log.debug("qaz123 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n \t--local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t \n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n log.debug("qaz123 模块%s通道%s的deviceId是%s:",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexByte(buff, 0x48, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0x43, endian) \n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\n\t\t\tbuff=iota.appendHexByte(buff, 1, endian) -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian) -- 1: 通道号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\t\t\tbuff=iota.appendHexWord(buff, 0, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0) \n\t\t\tbuff=iota.appendHexByte(buff, 0xAF, endian) \t\t\t\t\t\t\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n log.debug("qaz123 模块%s通道%s的数据接收成功,开始解析",moduleNo,channelNo) \n\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("qaz123 模块%s通道%s的数据接收失败",moduleNo,channelNo) \n\t\t\tend\n end \n\t\t\n else\n\t\tlog.debug("qaz123 subdevices是nil")\n \treturn nil\n end\n\t\t\n\tlocal resultData =json.encode(out)\n log.debug("qaz123 out序列化结果 : out is =%s", json.encode(out))\n ctx:done(resultData)\t\n\t\n\t\nend\n--4843000015040301a8774945000000000000000000006778af\n--K=1\n--F0=2\n--Kt=3\n--T0=4\n--moduleId=5380\n--channelId=1\n--formula=ε=ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)\n--"phy": -16,\n--"frequency": -1.3727142151112332e-14,\n--"temperature": 0\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n\t--local subModuleId=subDevice.props.moduleId or subDevice.uplink.props.module\n\t--local subChannelId=subDevice.props.channelId or child.uplink.props.channel\n\tlog.debug("qaz123:模块%s通道%s的deviceId是:%s",subModuleId,subChannelId,subDevice.id)\n local ErrorCode = IsValid(hex,tostring(subModuleId),tostring(subChannelId))\n if ErrorCode then \n \n \n\t\tlocal Frequency = iota.hexToFloat(hex, 8,'B',32); -- 65=1100101\n local Temp = iota.hexToFloat(hex, 12,'B',2);\n\t\tlog.debug("qaz123:模块%s通道%s的原始值是:freq=%s,Temp=%s",subModuleId,subChannelId,freq,Temp)\n log.debug("qaz123:模块%s通道%s的参数值是:=%s",subModuleId,subChannelId,json.encode(subDevice.uplink.capabilities[1].formula))\n \n\t\tlocal Phy=0\n if subDevice.uplink.capabilities[1].formula.metaid == '2bd2a601-c351-4e47-bbbe-9a787efd6026' then --在iota中查找 --振弦公式\t\t\n\t\t\t\tlocal K = subDevice.uplink.capabilities[1].formula.props.K\n\n\t\t\t\tlocal Fo = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\tlocal Kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal To = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\tlog.debug("qaz123:振弦模块:公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\tif K ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\tlog.debug("qaz123 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\telse\n\t\t\t\t\tlog.debug("qaz123 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\tlocal Fi=Frequency \n\t\t\t\t\tPhy = K*Fi^2-(K*Fo^2)+Kt*(Temp-To)\n\t\t\t\t\tlog.debug("当前的Phy是:%s",Phy)\n\t\t\t\tend \n\t\n\t\tsubData.data={\n\t\t\t\t\tfrequency=string.format("%0.3f",Frequency),\n\t\t\t\t\ttemperature=string.format("%0.3f",Temp),\n \tphysicalvalue=string.format("%0.3f",Phy)\n\t\t\t\t\t}\n\t\tend\n\t\tif subDevice.uplink.capabilities[1].formula.metaid == '8102b4e7-9f04-43f0-a644-5b89c281f52f' then --在iota中查找\n \n local R0 = subDevice.uplink.capabilities[1].formula.props.R0\n\t\t\t\t\tlocal G = subDevice.uplink.capabilities[1].formula.props.G\n\t\t\t\t\tlog.debug("qaz123:电阻模块:公式48参数=%s,%s",R0,G)\n\t\t\t\t\tlocal A=1.4051*10^(-3)\n\t\t\t\t\tlocal B=2.369*10^(-4)\n\t\t\t\t\tlocal C=1.019*10^(-7)\n\t\t\t\t\tlocal a=1.0/3\n\t\t\t\t\tlocal y=1/(Temp+273.2)-A\n\t\t\t\t\tlog.debug("qaz123 当前的y是:%s",y)\n\t\t\t\t\tlocal yy=(y/2/C)^2+(B/3/C)^3\n\t\t\t\t\tlog.debug("qaz123 当前的yy是:%s",yy)\n\t\t\t\t\tlocal yy1=y/2/C+math.pow(yy,0.5)\n\t\t\t\t\tlog.debug("qaz123 当前的yy1是:%s",yy1)\n\t\t\t\t\tlocal yy2=y/2/C-math.pow(yy,0.5)\n\t\t\t\t\tlog.debug("qaz123 当前的yy2是:%s",yy2)\n\t\t\t\t\t\n\t\t\t\t\tlocal yyy1=math.pow(yy1,a)\n\t\t\t\t\tlog.debug("qaz123 当前的yyy1是:%s",yyy)\n\t\t\t\t\tlocal yyy2=0\n\t\t\t\t\tif yy2<0 then\n\t\t\t\t\t\tyyy2=-math.pow(-yy2,a)\n\t\t\t\t\t\n\t\t\t\t\telse\n\t\t\t\t\t\tyyy2=math.pow(yy2,a)\n\t\t\t\t\n\t\t\t\t end\n\t\t\t\t\tlocal yyy=yyy1+yyy2\n\t\t\t\t\tlog.debug("qaz123 当前的yyy是:%s",yyy)\n\t\t\t\t\tlocal R=math.exp(yyy)-18\n\t\t\t\t\tlog.debug("qaz123 当前的电阻是:%s",R)\n\t\t\t\t\tif G ==nil or R0==nil then\n\t\t\t\t\t\tPhy=nil\n\t\t\t\t\telse\n\t\t\t\t\t\tPhy =G*(R-R0)\n\t\t\t\t\t\tlog.debug("当前的应变是:%s",Phy)\n\t\t\t\t\tend \n subData.data={\n\t\t\t\t\tresistance=string.format("%0.2f",R),\n\t\t\t\t\n \tphysicalvalue=string.format("%0.2f",Phy)\n\t\t\t\t\t}\t\t\t\t\n\t\tend\n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n log.debug('qaz123:模块%s通道%s开始校验数据',moduleId,channelId)\n if data == nil or string.len(data)/2 ~= 25 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('qaz123:模块%s通道%s 数据 长度校验失败:Data is nil or invalid length=%s',moduleId,channelId,string.len(data)/2)\n return false\n end\n if iota.hexToByte(data,0,'B') ~= 0x48 or iota.hexToByte(data,1,'B') ~= 0x43 or iota.hexToByte(data,24,'B') ~= 0xaf then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n\t\tlog.debug('qaz123:模块%s通道%s 数据校验失败:Hex CMD False:错误码=1003',moduleId,channelId)\n return false\n end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,4,'B'))\n\tif moduleId~= moduleStr then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug('qaz123:模块%s通道%s 模块号校验失败:Invalid acq moduleId=%s',moduleId,channelId,moduleStr)\n return false\n end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,7,'B'))\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('qaz123:模块%s通道%s 通道号校验失败:Invalid acq channelId=%s',moduleId,channelId,channelStr)\n\t\treturn false\n\tend\t\t\n log.debug('qaz123:模块%s通道%s校验数据通过!!!',moduleId,channelId)\n return true\nend INLINE 2020-05-13 13:36:39.028+08 2020-05-14 11:08:48.817+08 2020-05-13 \N
+bf8622e9-ad0d-4cad-9f25-2e601f7fdee2 危大工程光栅仪 \N 采集仪协议,下面挂载传感器 1.0 b7a8e100-b8fb-4135-a1b5-00a91da6da3f b7a8e100-b8fb-4135-a1b5-00a91da6da3f f b7a8e100-b8fb-4135-a1b5-00a91da6da3f Lua --[[\n协议号: 1.0;\n协议名: NZD-FBG-A02\n]]--liankang\nstart=function ()\n log.debug("NZDFBGA02 start")\nend\nonData=function(recvHex)\n\t--主动上传式\n local out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n }\n \n log.debug("NZDFBGA02 Received=>%s", recvHex)\n log.debug("NZDFBGA02 device = "..json.encode(device))\n\n -- 判断数据是否有效\n if inValid(recvHex) then\n local message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n else\n -- 解析时间\n local recvTime = unixtimestamp(recvHex)\n log.debug("NZDFBGA02 Received=>"..recvTime)\n\n -- 判断有是几通道\n local channelNum = channelNumFun(recvHex)\n log.debug("NZDFBGA02 Received=>"..json.encode(channelNum))\n -- 获取所有波长数据\n local waveLenDataTab = getWaveLengthTable(channelNum, recvHex)\n log.debug("NZDFBGA02 table=>"..json.encode(waveLenDataTab))\n\n -- 将数据和对应的设备id插入到out.data表中\n for channelNoId = 1, channelNum, 1 do\n for moduleNoId = 1, 30, 1 do\n -- 查找子设备id\n local childDevice = getDeviceInfo(channelNoId, moduleNoId)\n if childDevice == nil then -- 子设备信息为空\n out.result={\n code=1002,\n msg="subdevices is nil",\n }\n else --子设备信息不为空\n local dataTmp = {\n type = 1,\n time = recvTime,\n data = {\n waveLength = waveLenDataTab[channelNoId][moduleNoId],\n },\n device = childDevice.id,\n }\n -- 将子设备信息填入返回结果\n log.debug("NZDFBGA02 dataTmp=>"..json.encode(moduleNoId)..json.encode(dataTmp))\n table.insert(out.data, dataTmp)\n end\n end\n end\n end\n local resultData = json.encode(out)\n log.debug("NZDFBGA02 resultData=>"..json.encode(resultData))\n ctx:notify(resultData)\nend\n\n-- 判断数据有效性\nfunction inValid(data)\n if nil == channelNumFun(data) then -- 数据长度不在三个通道的长度之间\n log.debug("NZDFBGA02 buff =DataLENGTH is Invalid")\n errormsg = 'DataLen is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n end\n if iota.hexToByte(data, 6,'B') ~= 0xFF or iota.hexToByte(data, 7,'B') ~= 0x04 then -- 第一个包头的第一个字节,功能码不等于FF, 第一个包头的第二个字节,功能码不等于FF\n log.debug("NZDFBGA02 buff =DataHEAD is Invalid %x %x", iota.hexToByte(data, 6,'B'), iota.hexToByte(data, 7,'B')) \n\n log.debug("NZDFBGA02 buff =DataHEAD is Invalid "..data) \n errormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n end\n if iota.hexToByte(data, 255,'B') ~= 0x64 or iota.hexToByte(data, 254,'B') ~= 0x6E then -- 第一个包尾最后一个字节不为 64, 第一个包围倒数第二个字节不为6E \n log.debug("NZDFBGA02 buff =DataTAIL is Invalid"..json.encode(iota.hexToByte(data, 255,'B'))..json.encode(iota.hexToByte(data, 254,'B')))\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n end\n\treturn false\nend\n\n-- 将时间字符串转化为时间戳\nunixtimestamp=function(dateStr)\n -- 12 06 15 11 3B 3A ==> 18 06 21 17 59 58\n local year = tonumber(string.sub( dateStr, 1, 2), 16) + 2000;\n\tlocal month = tonumber(string.sub( dateStr, 3, 4), 16);\n\tlocal day = tonumber(string.sub( dateStr, 5, 6), 16);\n local hour = tonumber(string.sub( dateStr, 7, 8), 16);\n local minute = tonumber(string.sub( dateStr, 9, 10), 16);\n local second = tonumber(string.sub( dateStr, 11, 12), 16);\n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n local recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\treturn recordTime\nend\n\nfunction channelNumFun(data)\n local dataLen = string.len(data)\n if 506 == dataLen / 2 then\n return 8; -- 8通道\n elseif 1006 == dataLen / 2 then\n return 16; -- 16通道\n elseif 2006 == dataLen / 2 then\n return 32; -- 32通道\n else\n return nil; -- 错误\n end\nend\n\n-- 传入参数 通道数, recvHex\n-- 解析出所有波长数据,按通道分成表返回\n-- ret = { {通道1}, {通道2} 。。。。。}\nfunction getWaveLengthTable(channelNum, data)\n local ret = {}\n --log.debug("NZDFBGA02 ret==> "..json.encode(ret))\n local dataIndex = 11\n for channelNoId = 1, channelNum, 1 do\n ret[channelNoId] = {}\n for moduleNoId = 1, 30, 1 do\n local tempWaveLen = iota.hexToShort(data, index,'B') / 1000 + 1520\n --log.debug("NZDFBGA02 tempWaveLen=>"..json.encode(tempWaveLen))\n table.insert(ret[channelNoId], tempWaveLen)\n dataIndex = dataIndex + 2\n end\n if channelNoId % 4 == 0 then\n dataIndex = dataIndex + 10\n end\n end\n log.debug("NZDFBGA02 tempWaveLen=>"..json.encode(ret))\n return ret\nend\n\n-- 获取采集仪下面的通道信息\n-- 传入参数:通道号, 模块号\n-- 返回子设备信息(表)\ngetDeviceInfo = function(channelNoId, moduleNoId)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("NZDFBGA02 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n local moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n local channelStrCheck = child.uplink.props.channel\n --log.debug('NZDFBGA02 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n \n if tonumber(moduleStrCheck) == tonumber(moduleNoId) and tonumber(channelStrCheck) == tonumber(channelNoId) then\n log.debug('NZDFBGA02 m=%s c= %s匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n else\n log.debug('NZDFBGA02 subdevices是nil')\n return nil\n end\nend\n\n--[[\n 12 06 15 11 3B 3A FF 04 F0 01 01 2A372A372A372A372A372A372A372A372A372A372A372A37 ... 00 00 00 00 65 6E 64 FF 04 F0 01 01 2A37 2A37 2A37 2A37 2A37 2A37 2A37 2A37 ... 00 00 00 00 65 6E 64\n原始数据:\n 120615113B3AFF04F001012A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A370000656E642A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A37FF04F001010000656E64\n结果:\n 1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,\n--]] INLINE 2019-12-23 14:06:49.759+08 2019-12-24 15:07:45.732+08 2019-12-23 \N
+6fc8d8c6-fe8f-42ab-950d-8214817ff43a fs_magneticflux_1701 \N 磁通量 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --02 协议分析/2017-01/ModBus统一通信协议.xls\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\n\nstart=function()\n log.debug("fs_magneticflux_1701:load script %s, moduleId=%s", "fs_magneticflux_1701.lua", device.props.moduleId or "[nil]") \nlocal endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n\n local subdevices=device.dnlinks[1].devices --获取采集仪下 子设备列表\n if subdevices ~=nil then\n \n log.debug("fs_magneticflux_1701:LUA:根设备devices : data is =%s", json.encode(device))\n for index,child in pairs(subdevices) do\n log.debug("fs_magneticflux_1701:LUA:子设备subdevices=%s : data is =%s", index,json.encode(subdevices))\n if json.encode(child.uplink.props) ~= 'null' then\n moduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n channelNo=tonumber(child.uplink.props.channel)\n log.debug("fs_magneticflux_1701 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n else\n moduleNo=child.props.moduleId\n channelNo=child.props.channelId \n log.debug("fs_magneticflux_1701 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n end\n log.debug("fs_magneticflux_1701:模块%s通道%s的deviceId是%s:",moduleNo,channelNo,tostring(child.id))\n \n local buff=''\n \n buff=iota.appendHexWord(buff, 30, endian) -- 2: 类型=1\n buff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 1: 指令: 0x01 = 采集\n buff=iota.appendHexByte(buff, channelNo, endian) -- 1: 通道号\n local Deg = tonumber(child.uplink.capabilities[1].formula.props.Deg) --//是否消磁(Deg;1:消磁,0:不消磁)\n local Des = tonumber(child.uplink.capabilities[1].formula.props.Des) --//是否判断传感器采集\n log.debug("fs_magneticflux_1701 m=%s,c=%s Deg=%s,Des=%s ",moduleNo,channelNo,Deg,Des)\n local vol = child.uplink.capabilities[1].formula.props.vol -- 激励电压Uj(V)\n local reg = child.uplink.capabilities[1].formula.props.reg -- 2:理论电阻值(Ω)\n log.debug("fs_magneticflux_1701 v=%s,r=%s ",vol,reg)\n \n if Deg==1 then\t\t\t\n if Des==1 then\n --log.debug("fs_magneticflux_1701:0x1f,Deg=%s,Des=%s",Deg,Des)\n buff=iota.appendHexByte(buff, 0x1f, endian)\n else\n --log.debug("fs_magneticflux_1701:0x0f,Deg=%s,Des=%s",Deg,Des)\n buff=iota.appendHexByte(buff, 0x0f, endian)\n end\n else\n if Des==1 then\n --log.debug("fs_magneticflux_1701:0x1e,Deg=%s,Des=%s",Deg,Des)\n buff=iota.appendHexByte(buff, 0x1e, endian)\n else\n --log.debug("fs_magneticflux_1701:0x0e,Deg=%s,Des=%s",Deg,Des)\n buff=iota.appendHexByte(buff, 0x0e, endian)\n end\n end\n --1:采集选项\n buff=iota.appendHexWord(buff, vol, endian) -- 激励电压Uj(V)\n buff=iota.appendHexWord(buff, reg, endian) -- 2:理论电阻值(Ω)\n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,80000)\n local result='{}'\n if ok then\t\n log.debug("fs_magneticflux_1701:模块%s通道%s的数据接收=%s",moduleNo,channelNo,resp) \n result = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n table.insert(out.data,result)\n else\n log.debug("fs_magneticflux_1701 模块%s通道%s的数据接收失败",moduleNo,channelNo) \n end\n end \n \n else\n log.debug("fs_magneticflux_1701 subdevices是nil")\n return nil\n end\n \n local resultData =json.encode(out)\n log.debug("fs_magneticflux_1701 模块=%s ,out序列化结果 out =%s", moduleNo,json.encode(out))\n ctx:done(resultData)\t\n \n \nend\n\n-- 001E26C6810D6FFDA1011E000D6FFDA141AA000041AA000098F0D20607E107E107140530D2F0F834\n--m=9926 c=1\n--"cableforce": 0,\n--"ctemp": 21.25,\n--"stemp": 21.25,\n--"voltage": 0\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n local subData={\n data ={},\n device=subDevice.id,\n type=1 \n }\n \n --log.debug("fs_magneticflux_1701:模块%s通道%s的deviceId是:%s",subModuleId,subChannelId,subDevice.id)\n local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n if ErrorCode then \n\n \n\n\n local vol = iota.hexToFloat(hex,12,'B')\n local stem = iota.hexToFloat(hex,16,'B')\n local ctem = iota.hexToFloat(hex,20,'B')\n\n --公式\n \n local force = 0;\n if subDevice.uplink.capabilities[1].formula.metaid =="3abb17e6-e48f-467d-840e-87a6666ee188" then\n local kt = subDevice.uplink.capabilities[1].formula.props.Kt\n local t0 = subDevice.uplink.capabilities[1].formula.props.T0\n local c0 = subDevice.uplink.capabilities[1].formula.props.C0\n local c1 = subDevice.uplink.capabilities[1].formula.props.C1\n local c2 = subDevice.uplink.capabilities[1].formula.props.C2\n local ktm = subDevice.uplink.capabilities[1].formula.props.Ktm\n local tc0 = subDevice.uplink.capabilities[1].formula.props.Tc0\n log.debug("fs_magneticflux_1701 参数 kt=%s,t0=%s,c0=%s,c1=%s,c2=%s,ktm=%s,tc0=%s",kt,t0,c0,c1,c2,ktm,tc0)\n local volt = vol - kt * (stem - t0) - ktm * (ctem - tc0) \n local phy = c2*(volt^2) + c1*volt + c0\n force = phy\n\t elseif subDevice.uplink.capabilities[1].formula.metaid =="eb23e709-ad84-4257-a0a7-e7bc44e81f29" then --新modbus公式\n\t\t local kt = subDevice.uplink.capabilities[1].formula.props.Kt\n local t0 = subDevice.uplink.capabilities[1].formula.props.T0\n local c0 = subDevice.uplink.capabilities[1].formula.props.C0\n local c1 = subDevice.uplink.capabilities[1].formula.props.C1\n local c2 = subDevice.uplink.capabilities[1].formula.props.C2\n local ktm = subDevice.uplink.capabilities[1].formula.props.Ktm\n local tc0 = subDevice.uplink.capabilities[1].formula.props.Tc0\n\t\t local v0 = subDevice.uplink.capabilities[1].formula.props.V0\n\t\t local f0 = subDevice.uplink.capabilities[1].formula.props.F0\n\t\t \n log.debug("fs_magneticflux_1701 参数 kt=%s,t0=%s,c0=%s,c1=%s,c2=%s,ktm=%s,tc0=%s,v0=%s,f0=%s",kt,t0,c0,c1,c2,ktm,tc0,v0,f0)\n local volt = v0-(vol - kt * (stem - t0) - ktm * (ctem - tc0)) \n local phy = c2*(volt^2) + c1*volt + c0 + f0\n force = phy\n end\n subData.data = {\n voltage=vol,\n stemp = stem,\n ctemp = ctem,\n cableforce = force,\n } \n else\n subData.result = {code=errcode,msg=errormsg} \n end\n return subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n log.debug('fs_magneticflux_1701 m=%s,c=%s,校验数据=%s',moduleId,channelId,data)\n if data == nil then\n errormsg = 'Data is nil'\n errcode = 1002\n return false\n end\n local len=string.len(data)\n if len <30 then\n errormsg =string.format('数据长度不足=%s',data)\n errcode = 1003\n return false\n end\n \n if (iota.hexToByte(data,1,'B')) ~= 30 then \n errcode = 1004\n errormsg = 'Invalid Data' \n return false\n end\n if iota.hexToByte(data,4,'B') ~= 0x81 and iota.hexToByte(data,4,'B') ~= 0xC0 then\n errcode = 1005\n errormsg = 'Hex CMD False ' \n return false\n end\n \n local data_moduleId=tostring(iota.hexToShort(data,2,'B'))\n if tostring(moduleId) ~= tostring(data_moduleId) then\t\n errormsg = '无效的模块号'\n errcode = 1006\n log.debug("fs_magneticflux_1701 m=%s,c=%s,数据模块号错误[%s]",moduleId,channelId,data_moduleId)\n return false\n end\n \n \n local data_channelId=iota.hexToByte(data,9,'B')\n if tonumber(channelId) ~= tonumber(data_channelId) then\t\n errormsg = '无效的通道'\n errcode = 1007\n log.debug("fs_magneticflux_1701 m=%s,c=%s,数据通道号错误[%s]",moduleId,channelId,data_channelId)\n return false\n end\n \n \n \n--crc\n --判断CRC16正确性\n local checkCrc=string.sub(data,-4,-1)\n--log.debug("checkCrc=%s",checkCrc)\n local dataCopy=string.sub(data,1,-5)\n dataCopy=iota.appendHexCrc(dataCopy, 'B' ,0)\n local Crc16=string.sub(dataCopy,-4,-1)\n --log.debug("fs_magneticflux_1701:dataCopy:%s的Crc16=%s",dataCopy,Crc16)\n \n local isCheckCrcOK=string.lower(Crc16)==string.lower(checkCrc)\n if isCheckCrcOK ~=true then \n log.debug("fs_magneticflux_1701 m=%s,c=%s isCheckCrcOK=%s,Crc_16=%s,checkCrc=%s",moduleId,channelId,isCheckCrcOK,string.lower(Crc16),string.lower(checkCrc))\n errormsg = 'crc16校验错误'\n errcode = 1008\n return false\n end\n log.debug('fs_magneticflux_1701 m=%s,c=%s 数据校验通过',moduleId,channelId)\n return true\nend INLINE 2017-08-26 16:10:56.798+08 2020-05-21 18:03:00.485+08 2017-08-24 \N
+90c896b2-bf34-4005-91e2-de3860809bc2 AES128Test \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua -- lua AES128/base64 test\nstart=function()\n body='{"limit":5,"name":"0027","skip":0,"type":4,"platform":1}'\n key="RKloinporqKRSdv8"\n iv="zq7AZEXlnz65IEaW"\n local r1,b=crypto.aes128Encrypt(iota.stringToHex(body),key,iv)\n local r2,s1=crypto.base64Encode(b)\n log.debug("FS_streetlight_2040 r=%s:%s",r2,s1)\n -- S1=8WET6zSFzjG0GjDUaJcnZONSNzH+Mi6vCAixnXnztQ6S9mSlmlFG+zDmFRdAT3LStiegpLNCnYM8lMxTfZrMhA==\n \n --T2\n body='{"cmds":[{"gatewayAddr": "0xFBFB03D2","uid": "5d36c1a826b0677e5feb9db9","code":1,"headSerial": 1,"control":{"devtype":4,"read":1},"addr": "0x00273123"},{"gatewayAddr": "0xFBFB03D2","uid": "5d36c1d226b0677e5feb9dbb","code":1,"headSerial": 2,"control":{"devtype":4,"read":1},"addr": "0x00273137"}],"platform":1}'\n bs="obzvX6LQDv89QFrs9G9nYDUpAEVy/mH+oMBGDERtjjM+PVu7XyEHVk6zcl517oBEO0ov/wiIPIG8+2qoRaSmC8X0ubB9864HqSRCOrPJ+h1lPYrOette9hgyIYIF1n7w7i0v0kzsRhNekUZZuKIAnb+rwU8ZG0mt1BynaOLFNErGNfxBH6tsDT1Y326IyDp7mS7E14GSUi2txyiJy2lIM7mwjTD7spKGjouFAw1zDcCJvmLepsURMU/8V4rASl6P8wixotANpSg6EfFbcOZlpkd8wmzCpJFv2v57Heo22pUUqd6YHw3UJB2Ncpxoy6KKILHglOU7J5tDEJIratiGYgrrnzj7oUHTgpweVe1LOJ+BjWyuPpWBqCfWm9ewtcBKTCDGdSX6hjCfToDX+R5f4t5K+ndV5M6FcLHe+3S/mnk="\n key="RKloinporqKRSdv8"\n iv="zq7AZEXlnz65IEaW" \n local r1,bs=crypto.aes128Encrypt(iota.stringToHex(body),key,iv)\n local r2,bo=crypto.base64Encode(bs)\n log.debug("FS_streetlight_2040 enc=%s",bo) -- OK\n \n local r1,od=crypto.aes128Decrypt(bs,key,iv)\n local s1=iota.hexToString(od)\n log.debug("FS_streetlight_2040 orig=%s \\n%s",r1, s1)\n \n local out = {\n data = { str=s1},\n result = { result=true},\n type = 1\n } \n \n ctx:done(json.encode(out))\n end INLINE 2019-10-31 11:10:32.828+08 2019-10-31 16:01:51.853+08 2019-10-31 \N
+03de22b4-c4d1-4c9e-a808-b9eca6c9e2c3 masfs \N 1 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "MAS_FS", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("MAS_FS 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x80, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("MAS_FS SSend error!")\n end\n ctx:done(result)\nend\n--01 80 01 80\n--01 80 04 00 c2 01 00 00 6D F3\n--moduleId=1 \n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local speed = iota.hexToShort(hex,4,'L')\n \n out.data = {\n speed=speed/10.0\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('MAS_FS 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 10 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x80 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('MAS_FS 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2020-09-28 10:39:49.966+08 2020-09-28 10:39:49.966+08 2020-09-28 \N
+171809a1-877d-4ca2-ba5b-f9c0836478bd AES128Test \N 1 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f16833ab-a4a4-45f5-9b39-ad2c66e488f6 f f16833ab-a4a4-45f5-9b39-ad2c66e488f6 Lua -- lua AES128/base64 test\nstart=function()\n body='{"limit":5,"name":"0027","skip":0,"type":4,"platform":1}'\n key="RKloinporqKRSdv8"\n iv="zq7AZEXlnz65IEaW"\n local r1,b=crypto.aes128Encrypt(iota.stringToHex(body),key,iv)\n local r2,s1=crypto.base64Encode(b)\n log.debug("r=%s:%s",r2,s1)\n -- S1=8WET6zSFzjG0GjDUaJcnZONSNzH+Mi6vCAixnXnztQ6S9mSlmlFG+zDmFRdAT3LStiegpLNCnYM8lMxTfZrMhA==\n \n --T2\n body='{"cmds":[{"gatewayAddr": "0xFBFB03D2","uid": "5d36c1a826b0677e5feb9db9","code":1,"headSerial": 1,"control":{"devtype":4,"read":1},"addr": "0x00273123"},{"gatewayAddr": "0xFBFB03D2","uid": "5d36c1d226b0677e5feb9dbb","code":1,"headSerial": 2,"control":{"devtype":4,"read":1},"addr": "0x00273137"}],"platform":1}'\n bs="obzvX6LQDv89QFrs9G9nYDUpAEVy/mH+oMBGDERtjjM+PVu7XyEHVk6zcl517oBEO0ov/wiIPIG8+2qoRaSmC8X0ubB9864HqSRCOrPJ+h1lPYrOette9hgyIYIF1n7w7i0v0kzsRhNekUZZuKIAnb+rwU8ZG0mt1BynaOLFNErGNfxBH6tsDT1Y326IyDp7mS7E14GSUi2txyiJy2lIM7mwjTD7spKGjouFAw1zDcCJvmLepsURMU/8V4rASl6P8wixotANpSg6EfFbcOZlpkd8wmzCpJFv2v57Heo22pUUqd6YHw3UJB2Ncpxoy6KKILHglOU7J5tDEJIratiGYgrrnzj7oUHTgpweVe1LOJ+BjWyuPpWBqCfWm9ewtcBKTCDGdSX6hjCfToDX+R5f4t5K+ndV5M6FcLHe+3S/mnk="\n key="RKloinporqKRSdv8"\n iv="zq7AZEXlnz65IEaW" \n local r1,bs=crypto.aes128Encrypt(iota.stringToHex(body),key,iv)\n local r2,bo=crypto.base64Encode(bs)\n log.debug("enc=%s",bo) -- OK\n \n local r1,od=crypto.aes128Decrypt(bs,key,iv)\n local s1=iota.hexToString(od)\n log.debug("orig=%s \\n%s",r1, s1)\n \n local out = {\n data = {},\n result = { result=true},\n type = 1\n } \n \n ctx:done(json.encode(out))\n end INLINE 2019-10-31 16:28:50.507+08 2019-10-31 16:28:50.507+08 2019-10-31 \N
+81741880-ebc8-42d9-bf53-1c6def33376c fs_microPower_1 \N 微功耗 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start=function()\n --log.debug("fs_microPower_1 : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n if data ~=nil then\n log.debug("fs_microPower_1 devices data =%s",data)\n ParseData(data) \n else\n log.error("fs_microPower_1 recvd content is nil")\n end\nend\n\n\nfunction ParseData(data)\n local out={\n data ={},\n result = {},\n type=2\n }\n if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then --振动数据\n --log.debug("fs_microPower_1 振动数据 data =%s",data)\n local package=iota.hexToShort(data,8,'L')\n local packagecount=iota.hexToShort(data,10,'L')\n local datpackage=string.sub(data,41,-9)\n local moduleid=iota.hexToShort(data,16,'L')\n\n local req1 =''\n local req2 =''\n local req =''\n req1=iota.appendHexByte(req1, 01 , 'L') -- 0-3 压缩协议 4-7 协议版本\n req1=iota.appendHexByte(req1, 0x02 , 'L')\n req1=iota.appendHexWord(req1, 0x0007 , 'L')\n req1=iota.appendHexWord(req1, 0x0000 , 'L')\n \n req2=iota.appendHexWord(req2, package , 'L')\n req2=iota.appendHexWord(req2, packagecount , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, moduleid , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n local checkdat=req1..req2\n local checksum=HeadCheckSum(checkdat)\n req=req1\n req=iota.appendHexWord(req, checksum , 'L')\n req=req..req2\n req=iota.appendHexWord(req, package , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=req..'00000000'\n req=iota.appendHexCrc(req, 'L' ,0) --校验\n local crc16=string.sub(req,-4,-1)\n req=string.sub(req,1,-13)\n req=req..crc16\n req=iota.appendHexByte(req, 0 , 'L') \n req=iota.appendHexByte(req, 0xfa , 'L') \n --log.debug("fs_microPower_1 datfileback %s", req)\n ctx:asend(req, 20000)\n\n if package==packagecount then\n local r1,ok = redis.get(device.id.."_mpzd")\n\t\t\tlocal dathex=r1..datpackage\n log.debug("fs_microPower_1 解析dat r1= %s", dathex)\n ParseFileDat(dathex)\n else\n if package==1 then\n local firstpackage=string.sub(datpackage,-80,-1)\n redis.set(device.id.."_mpzd", firstpackage)\n --log.debug("fs_microPower_1 接收dat datpackage= %s", firstpackage)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据首包'\n }\n }\n ctx:notify(json.encode(re))\n else\n local r1,ok = redis.get(device.id.."_mpzd")\n --log.debug("fs_microPower_1 接收dat r1= %s package=%s", r1,package)\n local data=r1..datpackage\n redis.set(device.id.."_mpzd", data)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n end\n else \n\t \n\t -- 非振动数据\n if string.sub(data,13,16)=='8a00' then\n local rtumodule=iota.hexToShort(data,3,'B')\n local power = iota.hexToByte(data,13,'B')\n --log.debug("fs_microPower_1 剩余电量 %s", power)\n\t\t\tlocal setting = iota.hexToByte(data,14,'B')\n\t\t\t--log.debug("fs_microPower_1 通道配置版本号 %s", setting)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\t--log.debug("fs_microPower_1 版本固件 %s", ver)\n\t\t\tlocal backlog =iota.hexToShort(data,15,'B')\n\t\t\t--log.debug("fs_microPower_1 积压数据 %s", tostring(backlog))\n\t\t\tlocal wakeup =iota.hexToUShort(data,22,'B')\n\t\t\tlog.debug("fs_microPower_1 节点苏醒次数 %s", tostring(wakeup))\t\t\t\t\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\t\t\tredis.set(device.id.."_backlog", tostring(backlog))\n\t\t\tredis.set(device.id.."_wakeup", tostring(wakeup))\t\t\t\n\t\t\tlocal version = string.format("%0.2f",ver)\n\t\t\tlocal v = Split(version,'.')\n\t\t\tlocal vlen = v[2].length\n\t\t \n\t\t\tif vlen == 1 then\n\t\t\t version = version.."0"\n\t\t\telseif vlen == 0 then\n\t\t\t version = version..".00"\n\t\t\tend\n\t\t\t--log.debug('fs_microPower_1 version=%s', version)\t\t\t\n\t\t\tredis.set(device.id.."_version", version)\t\t\t\n\n local strdevice= toHexStr(json.encode(device))\n strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n local crc=string.sub(strdevice,-4,-1)\n --log.debug("fs_microPower_1 devices crc =%s",crc)\n \t\t--log.debug("fs_microPower_1 dtuid time2")\n local r1,ok = redis.get(device.id.."_mpset")\n if ok and r1~=nil then\n\t\t\t log.debug("fs_microPower_1 crc %s r1 %s setting%s" ,crc,r1,setting)\n \t\tlog.debug("fs_microPower_1 dtuid time")\n \t\tlocal hour= os.date("%H")\n \t\tlog.debug("fs_microPower_1 dtuid %s hour %s",device.uplink.props.id,tostring(hour))\n if crc == r1 and setting ~= 0xFF then\n log.debug("fs_microPower_1 配置无修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 0, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fs_microPower_1 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置无修改'\n }\n }\n ctx:notify(json.encode(re))\n else\n log.debug("fs_microPower_1 配置有修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fs_microPower_1 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n else\n log.debug("fs_microPower_1 配置初次配置")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("fs_microPower_1 苏醒帧返回 %s", req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n end\n \n if string.sub(data,13,16)=='8a02' then\n log.debug("fs_microPower_1 deviceid:%s 设备休眠",device.uplink.props.id)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '设备休眠'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n local rtumodule=iota.hexToShort(data,3,'B')\n if string.sub(data,13,16)=='8601' then\n local time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\t--log.debug("fs_microPower_1 r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver="V"..r1\n\t\t\t\t--log.debug("fs_microPower_1 r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\t--log.debug("fs_microPower_1 powerstr=%s",powerstr)\n \n\t\t\tr1,r1ok = redis.get(device.id.."_backlog") --获取上次未上传记录\n\t\t\tlocal backlog = 0\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tbacklog=r1\n\t\t\t\t--log.debug("fs_microPower_1 r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\t\tend\n\t\t\t\n\t\t\tr1,r1ok = redis.get(device.id.."_wakeup") --获取上次记录苏醒次数\n\t\t\tlocal wakeup = 0\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\twakeup=r1\n\t\t\t\t--log.debug("fs_microPower_1 r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\t\tend\t\t\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnode = {\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time \n\t\t\t}\n\t\t\tlocal tb = {\n\t\t\t\t\t\t\tR=tostring(backlog),\n\t\t\t\t\t\t\tWTS=tostring(wakeup)\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\ttable.insert(rst.data.R.node,tb)\t\t\t\t\n\t\t\ttable.insert(out.data,rst)\n local isover=iota.hexToByte(data,25,'B') --尾包\n local datalength=0\n local firststart=27\n for i=1,sensorCount,1 do\n firststart=firststart+datalength\t\t\t\t\n local sensorType=iota.hexToByte(data,firststart,'B')\n local module=iota.hexToShort(data,firststart+3,'B')\n local channel=iota.hexToByte(data,firststart+2,'B')\n datalength=iota.hexToByte(data,firststart+1,'B')+6\n if sensorType==0 then --振弦\n local childDevice=getZxDeviceInfo(module,channel)\n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\tlocal k = childDevice.uplink.props.k or 0\n\t\t\t\t\t\tlocal kt = childDevice.uplink.props.kt or 0\t\t\t\t\t\t\n\t\t\t\t\t\tlocal f0 = childDevice.uplink.props.f0 or 0\n\t\t\t\t\t\tlocal t0 = childDevice.uplink.props.t0 or 0\t\t\n\t\t\t\t\t\tlocal status = iota.hexToByte(data,firststart+11,'B')\n\t\t\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\t\t\tlocal freq = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\tlocal temp = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t--log.debug("fs_microPower_1 振弦 Phy =%s, deviceid %s", Phy,childDevice.id)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\tam = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B'),\n\t\t\t\t\t\t\t\tphysicalvalue = Phy\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t}\n\t\t\t\t\t\tif rst.data.temperature == 200 or rst.data.temperature == -200 then\n \t\t\t\trst.data.temperature = nil \n \t\t\tend\n\t\t\t\t\t\tif status == 1 then\n\t\t\t\t\t\t\trst.result = {code=30010022,msg="频率线断路"}\n \t\t\t\trst.data ={}\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif status == 2 then\n\t\t\t\t\t\t\trst.result = {code=30010023,msg="频率线短路"}\n \t\t\t\trst.data ={}\n\t\t\t\t\t\tend\t\t\t\t\t\t\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 振弦 %s", json.encode(out))\n\t\t\t\t\tend\n end\n if sensorType==1 then --485\n local childDevice=getDeviceInfo(module,channel)\n \t\t\tlocal protocalCode=iota.hexToShort(data,firststart+6,'B')\n\t\t\t\t\tlocal hour = os.date("%H")\n\t\t\t\t\tlocal min = os.date("%M")\n\t\t\t\t\tlocal acqnum = hour*2+1\n\t\t\t\t\tif tonumber(min) >= 30 then\n\t\t\t\t\t\tacqnum = acqnum+1\n\t\t\t\t\tend\n\t\t\t\t\t--log.debug("fs_microPower_1 acqnum %s", acqnum)\n\t\t\t\t\tif childDevice~=nil then\t\n\t\t\t\t\t\tif protocalCode==1503 or protocalCode==1502 then --测斜\n\t\t\t\t\t\t--log.debug("fs_microPower_1 测斜 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex = iota.hexToFloat(data,firststart+12,'B',2),\n\t\t\t\t\t\t\t\t\tangley = iota.hexToFloat(data,firststart+16,'B',2),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B',2),\n\t\t\t\t\t\t\t\t\t_acq_number=acqnum\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_microPower_1 测斜 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n \n \t\t\t if protocalCode==9101 then --拉线位移\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 位移 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 位移 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==9102 then --裂缝\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 裂缝 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 裂缝 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==9218 then --风速\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 风速 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tspeed = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 风速 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n\t\t\t\t\tif protocalCode==9219 then --风向\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 风向 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tdirection = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 风向 %s", json.encode(out))\n\t\t\t\t\t\tend\n end\n if protocalCode==1102 then --温湿度\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\thumidity = iota.hexToFloat(data,firststart+16,'B') \n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n end\n \n if protocalCode==9002 then --压差\n\t\t\t\t\t\t--log.debug("fs_microPower_1 yc ")\n local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n end\n\t\t\t\t\tif protocalCode==9030 then --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 静力水准仪 %s, deviceid: %s", module,childDevice.id)\n\t\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n \t\t\t\t\t_acq_number=acqnum\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509 then --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992 then --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 水位 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\t--temperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\tpressure=iota.hexToFloat(data,firststart+12,'B')--兼容老设备\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 水位 %s", json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\t\t\n end\n\t\t\t\t--log.debug("fs_microPower_1 dataresult %s", json.encode(out))\n end \n log.debug("fs_microPower_1 out %s", json.encode(out))\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0601, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0000, 'B') --数据区长度\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n --log.debug("fs_microPower_1: databack: %s", req)\n ctx:asend(req, 20000)\n ctx:notify(json.encode(out)) \n end\n end\nend\n\nfunction Deploy()\n local total=totalSensors()\n log.debug("fs_microPower_1 : totalSensors =%s",total)\n local over=0\n local onepag=0\n local totallength=3\n local buff=''\n \n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n over=over+1\n onepag=onepag+1\n\t\t\tlog.debug("fs_microPower_1 subdevice =%s",json.encode(subdevice))\n if subdevice.props.sensortype=='zx' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x00, 'B') --传感器类型\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n\n local settingvib = tonumber(colgain) + tonumber(incentive) * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n log.debug("fs_microPower_1 : settingvib =%s",settingvib)\n buff=iota.appendHexByte(buff, settingvib, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexByte(buff, settingvib, 'B') --振弦采集参数\n buff=iota.appendHexWord(buff, subdevice.uplink.props.frequency, 'B') --振弦频率初值\n buff=iota.appendHexByte(buff, 0x00, 'B') --上传频谱ID\n buff=iota.appendHexByte(buff, 0x01, 'B') --采集选项\n end \n if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x01, 'B') --传感器类型\n\t\t\t\tlog.debug("fs_microPower_1 : begin setting")\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tlog.debug("fs_microPower_1 baudrate =%s databits %s parity %s stopbits %s sensor %s",baudrate,databits,parity,stopbits,json.encode(subdevice))\n\t\t\t\tlocal setting\n\t\t\t\tif baudrate == nil then\n\t\t\t\t\tsetting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n\t\t\t\telse\n setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n\t\t\t\tend\n log.debug("fs_microPower_1 setting =%s",setting)\n buff=iota.appendHexByte(buff, setting, 'B') --选项1 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B') --协议号\n buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B') --模块号\n buff=iota.appendHexByte(buff, 0x01, 'B') --子通道号\n end\n if subdevice.props.sensortype =='zd' then \n totallength=totallength+31 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x04, 'B') --传感器类型\n buff=iota.appendHexByte(buff, 0x00, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x12, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B') --定时采样间隔\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B') --定时采样时长\n buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B') --加速度触发采样时长\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B') --采样频率\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B') --滤波频率\n\t\t\t\tlocal shex = FloatToHex(tonumber(subdevice.uplink.props.samplefreq))\n\t\t\t\tbuff=buff..shex\n\t\t\t\tlocal fhex = FloatToHex(tonumber(subdevice.uplink.props.filterfreq))\n\t\t\t\tbuff=buff..fhex\n --buff=iota.appendHexWord(buff, 0x42c8, 'B')\n --buff=iota.appendHexWord(buff, 0x0000, 'B')\n --buff=iota.appendHexWord(buff, 0x4248, 'B')\n --buff=iota.appendHexWord(buff, 0x0000, 'B')\n local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n buff=iota.appendHexByte(buff, trigger1, 'B') --触发加速度\n buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B') --加速度范围\n buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B') --滞后点数\n\n end\n if over==8 or onepag==total then \n local buffhead=''\n buffhead=iota.appendHexByte(buffhead, 0xfe, 'B') --帧头\n buffhead=iota.appendHexWord(buffhead, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B') --模块号\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --命令源\n buffhead=iota.appendHexWord(buffhead, 0x0306, 'B') --指令\n buffhead=iota.appendHexWord(buffhead, 0x0000, 'B') --消息ID\n buffhead=iota.appendHexWord(buffhead, totallength, 'B') --数据区长度\n if onepag==total then\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --尾包\n else\n buffhead=iota.appendHexByte(buffhead, 0x00, 'B') --尾包\n end\n buffhead=iota.appendHexByte(buffhead, total, 'B') --采集指令总通道指令个数\n buffhead=iota.appendHexByte(buffhead, over, 'B') --该分包通道指令个数\n buff=buffhead..buff\n buff=iota.appendHexCrc(buff, endian ,0) --校验\n buff=iota.appendHexByte(buff, 0xef, 'B') --帧尾\n\t\t\t\tlog.debug("fs_microPower_1 ssend request =%s",ack)\n local ok, ack = ctx:ssend(buff, 20000)\n log.debug("fs_microPower_1 deploy back =%s",ack)\n buff=''\n if over==8 then\n over=0\n end\n totallength=3\n if onepag==total then\n log.debug("fs_microPower_1 配置下发完成")\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置下发完成'\n }\n }\n ctx:notify(json.encode(re))\n end\n end \n end\n end \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \tlog.debug("fs_microPower_1 subdevice=%s",subdevice) \n return subdevice\n end \n end\n end\n log.debug("fs_microPower_1 has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("fs_microPower_1 has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n --log.debug("fs_microPower_1 has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug("fs_microPower_1 has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n --log.debug("fs_microPower_1 dat content =%s", dathex)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n --log.debug("fs_microPower_1 deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n local floatcount = (string.len(dathex)/2-40)/4\n --log.debug("fs_microPower_1 begin parse")\n local vols = {}\n\t\tlocal mean = 0\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n --log.debug("fs_microPower_1 finish parse")\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n sampleFreq=samplefreq,\n filterFreq=filterfreq,\n gainAmplifier=gainamplifier,\n triggerType=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n }\n table.insert(out.data,rst)\n \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\t--log.debug("fs_microPower_1 r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver="V"..r1\n\t\t\t--log.debug("fs_microPower_1 r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_backlog") --获取上次未上传记录\n\t\tlocal backlog\n\t\tif r1ok and r1~=nil then\n\t\t\tbacklog=r1\n\t\t\t--log.debug("fs_microPower_1 r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_wakeup") --获取上次记录苏醒次数\n\t\tlocal wakeup\n\t\tif r1ok and r1~=nil then\n\t\t\twakeup=r1\n\t\t\t--log.debug("fs_microPower_1 r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\tend\t\t\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("fs_microPower_1 powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tnode = {\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time \n\t\t}\n\t\tlocal tb = {\n\t\t\t\t\t\tR=backlog,\n\t\t\t\t\t\tWTS=wakeup\n\t\t\t\t}\t\n\t\ttable.insert(rstd.data.R.node,tb)\t\t\t\n\t\ttable.insert(out.data,rstd)\n\t\t--log.debug("fs_microPower_1 cloudvibrate=%s",json.encode(out))\n ctx:notify(json.encode(out))\n else\n --log.debug("fs_microPower_1 not found device module=%s channel=%s",deviceId,channel)\n end\nend\n\nfunction totalSensors()\n local sensorcnt=0\n for i,dnlink in pairs(device.dnlinks) do \n sensorcnt = #(dnlink.devices) + sensorcnt \n end\n return sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend \n\nfunction HeadCheckSum(data)\n local sum=0\n local len = string.len(data)\n --log.debug("fs_microPower_1 len %s", len)\n for i =1,len,4 do \n local te=tonumber(string.sub(data,i,i+3) ,16)\n --log.debug("fs_microPower_1 te %s", te)\n sum = sum+ tonumber(te)\n end\n --log.debug("fs_microPower_1 sum %s", sum)\n return 0xffff-sum\nend\n\n\nfunction FloatToHex( floatNum )\n\tlocal S = 0\n\tlocal E = 0\n\tlocal M = 0\n\tif floatNum == 0 then\n return "00000000"\n end\n\tlocal num1,num2 = math.modf(floatNum/1)\n\tlocal InterPart = num1\n \n\tif floatNum > 0 then\n\t\tS = 0 * 2^31\n\telse\n\t\tS = 1 * 2^31\n\tend\n\tlocal intercount = 0\n\trepeat\n\t\tnum1 = math.modf(num1/2)\n\t\tintercount = intercount + 1\n\tuntil (num1 == 0)\n \n\tE = intercount - 1\n\tlocal Elen = 23 - E\n\tInterPart = InterPart % (2^E)\n\tInterPart = InterPart * (2^Elen)\n \n\tE = E + 127\n\tE = E * 2^23\n \n\tfor i=1,Elen do\n\t\tnum2 = num2 * 2\n\t\tnum1,num2 = math.modf(num2/1)\n\t\tM = M + num1 * 2^(Elen - i)\n\tend\n \n\tM = InterPart + M\n \n\t--E值为整数部分转成二进制数后左移位数:22.8125 转成二进制10110.1101,左移4位 1.01101101\n --E=4 ,再加上127 就为所需E值\n\t--010000011 01101101 000000000000000\n \n\tlocal Result = S + E + M\n \n\tResult = string.format("%08X",Result)\n\treturn Result\nend\n INLINE 2018-07-12 09:39:49.871+08 2020-09-15 10:27:00.529+08 2018-07-12 \N
+d40397c6-b9b9-46ff-b3c5-535d14068a52 bjca_zdwy \N 1.0 17e2c509-1128-42d6-89b5-5058d7a2a5cd 17e2c509-1128-42d6-89b5-5058d7a2a5cd f 17e2c509-1128-42d6-89b5-5058d7a2a5cd Lua start= function()\nend\n\nonData = function(resp)\n\n log.debug('bjca_zdwy device=%s', json.encode(device))\n out = {\n type = 1,\n data = {},\n result = {}\n }\n\tlocal moduleNo\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = device.uplink.props.module\n --模块通道优先接口获取\n\n log.debug('cdaj_zx 设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n else\n moduleNo = device.props.moduleId\n\n log.debug('cdaj_zx 设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n end\n local ErrorCode = IsValidOut(resp,moduleNo)\n if ErrorCode then\n\t\t--local moduleNostr=toStrHex(string.sub(resp,15,42))\n\t\t--log.debug('bjca_zdwy moduleNostr=%s', moduleNostr)\n\t\tlocal timenow=unixtimestamp(string.sub(resp,15,30))\n\t\tlog.debug('bjca_zdwy timenow=%s', timenow)\n\t\tlocal anglex=iota.hexToInt(resp,33,'B')/10^7\n\t\tlocal angley=iota.hexToInt(resp,37,'B')/10^7\n\t\tlocal anglez=iota.hexToInt(resp,41,'B')/10^7\n\t\tlocal temp=iota.hexToShort(resp,47,'B')/100\n\t\tlocal voltage=iota.hexToUShort(resp,51,'B')/100\n\t\t\n\t\t--if moduleNostr==moduleNo then\n\t out={\n\t\t\tdata={\n\t\t\t\tanglex=anglex,\n\t\t\t\tangley=angley,\n\t\t\t\tanglez=anglez,\n\t\t\t\ttemperature\t=temp,\n\t\t\t\tvoltage=voltage\n\t\t\n\t\t\t},\n\t\t\ttime=timenow\n\t\t}\n -- end\n else\n log.debug('bjca_zdwy 数据无效=%s', resp)\n out.result = {code = ercode, msg = erormsg}\n end\n local resultData = json.encode(out)\n log.debug('bjca_zdwy resultData=%s', resultData)\n ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\n\nunixtimestamp = function(datestr)\n\n local year = 2000+iota.hexToByte(datestr,0,'B')\n local month = iota.hexToByte(datestr,1,'B')\n local day = iota.hexToByte(datestr,2,'B')\n local hour = iota.hexToByte(datestr,3,'B')\n local minute = iota.hexToByte(datestr,4,'B')\n local second = iota.hexToByte(datestr,5,'B')\n\n --log.debug("bjca_zdwy year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n log.debug("bjca_zdwy timenum=%s",timenum)\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n log.debug("bjca_zdwy recordTime=%s",recordTime)\n return recordTime\nend\nIsValidOut = function(checkdata)\n log.debug('bjca_zdwy 开始校验数据=%s', checkdata)\n\t\n\n local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n if hexHeader ~= 0xFE then\n ercode = 1001\n erormsg = 'HexCMD False'\n log.debug('bjca_zdwy HexCMDFalse[%s]', hexHeader)\n return false\n end\n return true\n --crc\nend\n\n INLINE 2020-12-24 14:35:03.949+08 2020-12-25 15:06:15.085+08 2020-12-24 \N
+c413c8f4-fa5b-4e63-94e2-eb857285fcb1 MASSWCJQ \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --字符串ascii->字符\nstart=function()\n --log.debug("MASSWCJQ: start module %s, ", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n --log.debug("MASSWCJQ: Data=%s",hex)\n\t--全局\n out={\n data ={},\n result = {},\n\t\ttype=1\n }\n local moduleNonum=device.uplink.props.module\n local sData= HextoStr(hex)\n log.debug("MASSWCJQ: sData=%s",sData)\n local spliteData = Split(sData,';')\n\tlocal moduleData = Split(spliteData[3],':') \n\n\tlocal moduleNo = moduleData[2]--模块号\n\n\tlocal spliteData1 = Split(sData,'START;')\n local spliteData2 = Split(spliteData1[2],'END;')\n\t log.debug("MASSWCJQ: spliteData2=%s",json.encode(spliteData2))\n\t\n local spliteData3 = Split(spliteData2[1],';')\n\tlog.debug("MASSWCJQ: spliteData3=%s",json.encode(spliteData3))\n\tlocal rcvd=Split(spliteData3[1],':')\n\t\n\tlocal allData2=Split(spliteData3[8],':')\n\tlocal allData=Split(allData2[2],'_')\n\tlocal sensornum=allData[1]\n\tlocal length=tonumber(allData[2])\n\t\n\tlog.debug("MASSWCJQ: %s length=%s",allData[2],length)\n if moduleNonum==moduleNo then\n out.data = {\n length=length\n }\n\t \n\tend\n\n local resultData =json.encode(out) --输出传递到平台上\n log.debug("MASSWCJQ: result=%s",json.encode(out))\n ctx:notify(resultData)\n\tlocal timenowstr=os.time()\n\tlocal timenow = os.date('%Y%m%d%H%M%S', timenowstr)\n\n\tlocal returnTime=device.props.returnTime\n\tlocal acqinterval=device.props.acqinterval\n\tlocal dkey=device.props.dkey\n\tlocal bps=device.props.bps\n\tlocal sa=device.props.sa\n\tlocal port=device.props.port\n \tlocal cmd ='$MAS$;DSN:' .. moduleNo .. ';SD:' .. timenow .. ';HCJG:' .. returnTime .. ';CJJG:' .. acqinterval .. ';BPS:' .. bps .. ';DQ1:' .. sensornum .. '_5;' .. 'SA:' .. sa .. ';PORT:' .. port .. ';END;'\n\tlog.debug("MASSWCJQ: cmd=%s",cmd)\n\tif rcvd[1]~='RCVD' then\n\tctx:asend(toHexStr(cmd))\n\tend\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n--string split函数 分割相应的字符\nSplit=function (input, delimiter)\n input = tostring(input)\n delimiter = tostring(delimiter)\n if (delimiter=='') then return false end\n local pos,arr = 0, {}\n for st,sp in function() return string.find(input, delimiter, pos, true) end do\n table.insert(arr, string.sub(input, pos, st - 1))\n pos = sp + 1\n end\n table.insert(arr, string.sub(input, pos))\n return arr\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(channelStrCheck) == tonumber(channelNoId) then\n return child\n\t\t\tend\n \t\n\t\tend\n else\n log.debug("MASSWCJQ: subdevices是nil")\n return nil\n end\nend\n\n INLINE 2020-11-10 09:51:41.356+08 2020-11-13 14:53:32.316+08 2020-11-10 \N
+5b0a47a2-57f5-4eb6-8c6c-81d16d0bf508 fs_laser_9510 \N 通测意达协议 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//激光传感器FS-JGCJY-XX-B通讯协议\nstart=function()\n local endian = 'B'\n local buff='' \t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 0x64, endian) \n buff=iota.appendHexByte(buff, 0x72, endian)\n\tbuff=iota.appendHexByte(buff, 0x2d, endian)\n\tbuff=iota.appendHexByte(buff, 0x7a, endian)\t\n\tbuff=iota.appendHexByte(buff, 0x5a, endian)\t\t\n\tbuff=iota.appendHexByte(buff, 0x28, endian) \n local xorSum=iota.hexCheckXorSum(buff, 0,7) \n log.debug("fs_laser_9510 校验 XOR=%s ",xorSum)\nbuff=iota.appendHexByte(buff, xorSum, endian)\t\n ok,resp=ctx:ssend(buff,50000)\n log.debug('fs_laser_9510 发送数据=%s',buff)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo) \n \tlog.debug('fs_laser_9510 接收数据=%s',resp)\n else\n\t log.debug('fs_laser_9510 数据采集失败')\n end\n ctx:done(result)\nend\n\n--0164722d7a5a2832\n--module=1\n--01647230313233343524\n\n--"length": 0.012345\n\nunmarshall=function(hex,moduleStr)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n local asciiStr=HextoStr(string.sub(hex,7,18))\n log.debug('fs_laser_9510 asciiStr=%s',asciiStr)\n local int100 = string.sub(asciiStr,1,1)*100;\n local int10= string.sub(asciiStr,2,2)*10;\n local int1 = string.sub(asciiStr,3,3);\n local int01 = string.sub(asciiStr,4,4)/10;\n local int001 = string.sub(asciiStr,5,5)/100;\n local int0001 = string.sub(asciiStr,6,6)/1000;\n local length=int100+int10+int1+int01+int001+int0001\n out.data = {\n length =length/1000 --转换单位m\n };\n\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n log.debug('fs_laser_9510 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 10 then\n errormsg = 'Data is nil or invalid'\n errcode = 1002\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x64 then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n return false\n end\n \tlocal moduleNo_data=iota.hexToByte(data,0,'B')\n if moduleNo_check ~= tostring(moduleNo_data) then\t\n errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNo_check,moduleNo_data)\n errcode = 1004\n return false\n end\n log.debug('数据校验通过')\n return true\n\nend\n\n\nHextoStr=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\n end INLINE 2019-11-21 14:20:32.435+08 2019-11-26 09:54:07.094+08 2019-11-21 \N
+0f1f4851-c5be-432e-82bc-babc64646eed FS-TRS-XX-Z \N 投入式水位计 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n协议号: 1.0;\n协议名: FS-TRS-XX-Z\n]]--liankang\nstart=function ()\n log.debug("FS-TRS-XX-Z start %s, ctx=%s", "Inclination_Sensor.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("FS-TRS-XX-Z encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("FS-TRS-XX-Z decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE); -- 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x03, BE); -- 功能码 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE); \n buff=iota.appendHexByte(buff, 0x01, BE); -- 读取寄存器起始地址 00 01\n\tbuff=iota.appendHexByte(buff, 0x00, BE); \n\tbuff=iota.appendHexByte(buff, 0x05, BE); -- 读取寄存器数量 00 05\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- CRC16 小端字节序\t\n log.debug("FS-TRS-XX-Z buff = "..buff) \n\treturn buff\nend\n\n-- decode \n-- returns: 结果, 水位,水温,水压\n-- 正确回复 01 03 0A 00 00 03 E8 00 6C 00 00 03 E8 F8 04 裂缝距离 displacement : -3.0578\n-- 原始数据 01030A000003E8006C000003E8F804\nfunction protocol_decode(da)\n\t\n\tlocal dataStr = da;\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(dataStr)\n\t-- 判断数据有效性\n\tif inValid(da) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telse\n\t\tlog.debug("数据有效")\n local waterLev = iota.hexToInt(dataStr, 3, 'B')\n local waterTemp = iota.hexToShort(dataStr, 7, 'B') / 10\n local waterPres = iota.hexToInt(dataStr, 9, 'B')\n\n\t\tout.data = {\n waterLever = waterLev/1000,\n waterTemperature = waterTemp,\n waterPresure = waterPres,\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 15 or iota.hexToByte(data, 1,'B') ~= 0x03 then -- 长度不等于 15 或者 读第二个字节,功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n INLINE 2019-12-11 15:14:01.543+08 2019-12-25 14:12:19.777+08 2019-12-11 \N
+56eeb5a2-332c-49e7-af24-4cc3649580b6 home_airclear_mop_09 \N 1.0 f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f f2b3bb46-fba2-4a7a-a1f9-b88d86826cce Lua start = function()\n out = {\n type = 1,\n data = {},\n result = {}\n }\n --清除redis使用\n --local ab = {}\n --local clearValue = json.encode(ab)\n --local r1, r1ok = redis.set('00000001_airclaen_taskconfig', clearValue)\n --local r1, r1ok = redis.set('00000002_airclaen_taskconfig', clearValue)\n --local r1, r1ok = redis.set('00000005_airclaen_taskconfig', clearValue)\n --log.debug('home_airclear_mop_0901 测试 ab=%s, type=%s,clearValue=%s', json.encode(ab), type(ab), clearValue)\n log.debug('home_airclear_mop_0901 device=%s', json.encode(device))\n local deviceId = device.props.device_id\n --获取 app代理调度能力时 携带的参数 依此判断是何种能力\n local paramStr = capability.param\n log.debug('home_airclear_mop_0901 [%s] capability=%s', deviceId, paramStr)\n local paramData = json.decode(paramStr)\n\n if (paramData ~= nil and paramData.code ~= nil and paramData.params ~= nil) then\n local app_cmd = cmd_to_MCU(deviceId, paramData.code, paramData.params, paramData.cmd)\n if paramData.cmd ~= 267 and app_cmd.code ~= 13 then --查询功能 只查服务器缓存 不下发指令到 设备,设备升级单独判断,由于涉及到是否redis存储成功\n sendMsgToDeviceTopic(app_cmd)\n end\n else\n log.debug('home_airclear_mop_0901 [%s] paramData 数据内容不正确=%s', deviceId, json.encode(paramData))\n end\n local result = json.encode(out)\n --ctx:sleep(1)\n ctx:done(result)\nend\n\nsendMsgToDeviceTopic = function(msg)\n --将指令发送到 设备的topic\n local dev_topic = msg.ID .. '_device_rece'\n local msgStr = json.encode(msg)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = dev_topic})\n log.debug('home_airclear_mop_0901 [%s] cmd 发送 dev_topic=[%s] body=%s 完毕 okdev=%s,ack=%s', msg.ID, dev_topic, msgStr, ok, ack)\nend\n\n--净化器 配置指令\nlocal binCache = {params = {}}\ncmd_to_MCU = function(id, code, newconfig, cmdType)\n local cmd = {}\n cmd.from = 'server'\n cmd.ID = id\n cmd.type = tonumber(device.props.sensorType) -- 257 空气净化器 ,513加湿器\n cmd.code = code\n cmd.cmd = cmdType\n if cmdType == 267 then --app查询功能\n if code == 4 then --定时任务查询\n local redis_key = cmd.ID .. '_airclaen_taskconfig'\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n\n --由于lua的array 键值 一动就变成对象 只能用一个新table 存之前数据 当作 array 下发\n local array_taskConfigs = {}\n for _, v in pairs(redis_taskConfigs) do\n if v.looptype ~= nil then\n v.looptype = byte2bin(v.looptype)\n --taskID转为实际id\n local real_tsakId = tonumber(_)\n --app查询得到实际的id\n local jia_tsakId = tonumber(v.task, 16)\n local hexEn = string.format('%02x', tonumber(v.en))\n v.task = tonumber(real_tsakId)\n v.en = hexEn\n end\n table.insert(array_taskConfigs, v)\n end\n\n out.data.params = array_taskConfigs\n log.debug('home_airclear_mop_0901 同步定时任务 out.data.params=%s', json.encode(array_taskConfigs))\n elseif code == 15 then --报警阈查询 设备只有PM2.5\n local redis_key_alarm = cmd.ID .. '_airclaen_alarmconfig'\n local redis_alarmConfigs = getRedisValue_obj(redis_key_alarm, cmd)\n out.data.params = redis_alarmConfigs\n end\n elseif cmdType == 523 then\n if code == 1 then --初始化 id 即修改id\n cmd.id = newconfig\n elseif code == 2 then --修改电源开关\n cmd.params = newconfig\n elseif code == 3 then --风速挡位设置\n cmd.params = newconfig\n elseif code == 4 or code == 5 then --定时任务设置--添加 or 修改 或者使能\n --taskCacheUpdate(cmd.ID, newconfig, cmd) --设备确认成功后,在监听协议中更新redis\n newconfig.en = tonumber(newconfig.en, 16) -- app传的是字符串 '10', 平台需要转换成16\n if newconfig.looptype ~= 'null' and newconfig.looptype ~= nil then\n newconfig.looptype = getlooptype(newconfig.looptype)\n end\n local isDouble = true\n local isTask_on = true\n local isTask_off = true\n if newconfig.time_on == nil then\n isDouble = false\n isTask_on = false\n end\n if newconfig.time_off == nil then\n isDouble = false\n isTask_off = false\n end\n if newconfig.task == 255 then\n --255 任务号自增\n\n newconfig.task = craetTaskId(cmd, isDouble, isTask_on, isTask_off)\n else\n --如果是修改双任务 有定时开的 就是前面是1 的 那么发给设备的时候要注意taskid格式\n local doubleTaskId = transferDoubleTaskId(newconfig.task, isDouble, isTask_on, isTask_off)\n newconfig.task = doubleTaskId\n end\n cmd.params = newconfig\n elseif code == 6 then --定时删除设置\n newconfig.task = getTaskId(cmd.ID, newconfig, cmd) --设备确认成功后,在监听协议中更新redis\n cmd.params = newconfig\n elseif code == 7 then --杀菌灯开关控制\n cmd.params = newconfig\n elseif code == 8 then --负离子开关控制\n cmd.params = newconfig\n elseif code == 9 then --加湿器开关控制\n cmd.params = newconfig\n elseif code == 10 then --加湿器挡位设置\n cmd.params = newconfig\n elseif code == 11 then --设备模式控制\n cmd.params = newconfig\n elseif code == 12 then --童锁开关控制\n cmd.params = newconfig\n elseif code == 13 then --远程升级 app发起 然后 平台redis存储升级包 ,平台与设备交互,上报升级状态\n binCache.params = getPackageList(newconfig.binBuff)\n binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n --将升级包存储 redis\n local redis_key_bin = cmd.ID .. '_air_bin'\n local isSetOK = setRedisValue_obj(redis_key_bin, binCache, cmd)\n if isSetOK == true then\n log.debug('home_airclear_mop_0901 [%s][code=%s] 准备触发固件升级[%s]', cmd.ID, cmd.code, newconfig.binName)\n local dataObject = cmd\n dataObject.from = 'server'\n dataObject.type = tonumber(device.props.sensorType) -- 513加湿器 257 净化器\n dataObject.cmd = 523\n dataObject.params = {}\n dataObject.params.hard = getBinHard(newconfig.binName)\n --防止为空16=0x10 初始版本\n dataObject.params.soft = getBinSoft(newconfig.binName)\n dataObject.params.type = 1 --服务器发起升级申请\n dataObject.params.count = binCache.params.count\n dataObject.params.size = binCache.params.size\n dataObject.params.CRC = binCache.params.CRC\n log.debug('home_airclear_mop_0901 [%s][code=%s] 准备触发固件升级--开始发指令 dataObject=%s', cmd.ID, cmd.code, json.encode(dataObject))\n sendMsgToTopic(dataObject, 'device')\n else\n log.debug('home_airclear_mop_0901 [%s][code=%s] 存储失败 isSetOK=%s[type=%s]', cmd.ID, cmd.code, type(isSetOK))\n end\n elseif code == 15 then --报警阈值设置 设备只有PM2.5\n cmd.params = newconfig\n local redis_key_alarm = cmd.ID .. '_airclaen_alarmconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n setRedisValue_obj(redis_key_alarm, newconfig, cmd)\n log.debug('home_airclear_mop_0901 [%s][code=%s] redis_set完成=%s', cmd.ID, cmd.code)\n elseif code == 17 then --加湿器 恒湿设置\n cmd.params = newconfig\n else\n cmd.params = newconfig\n end\n end\n\n return cmd\nend\n\nsendMsgToTopic = function(msg, msgTo)\n local topic\n log.debug('home_airclear_mop_0901 进入固件升级发送函数 [%s][code=%s]', msg.ID, msg.code)\n if msgTo == 'app' then\n --将指令发送到 appProxy的topic\n topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个,代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n elseif msgTo == 'device' then\n topic = msg.ID .. '_device_rece'\n end\n log.debug('home_airclear_mop_0901 固件升级发送函数 [%s][code=%s] topic=%s', msg.ID, msg.code, topic)\n msg.packid = os.time()\n local msgStr = json.encode(msg)\n log.debug('home_airclear_mop_0901 [%s][code=%s] msgStr=%s', msg.ID, msg.code, msgStr)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n log.debug('home_airclear_0901 固件升级发送函数 [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', msg.ID, msg.code, binCache.updateTime, topic, msgStr, ok, ack)\nend\n\ngetTaskId = function(devId, taskConfig, cmd_obj)\n local redis_key = devId .. '_airclaen_taskconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n local cmd_code = cmd_obj.code\n --判断 任务 id是否存在 存在就更新\n local tsakId = tostring(taskConfig.task)\n\n local tb = redis_taskConfigs[tsakId]\n return tb.task\nend\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n local redis_key = devId .. '_airclaen_taskconfig'\n --同时平台留存一份 后续app or设备 同步所有定时任务用\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n --判断 任务 id是否存在 存在就更新\n local tsakId = tostring(taskConfig.task)\n log.debug('home_airclear_mop_0901 [%s] 排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s', cmd_obj.ID, tsakId, redis_taskConfigs, json.encode(redis_taskConfigs), type(redis_taskConfigs))\n local cmd_code = cmd_obj.code\n if cmd_code == 4 then --添加或修改\n if redis_taskConfigs[tsakId] ~= nil then\n redis_taskConfigs[tsakId] = taskConfig\n log.debug('home_airclear_mop_0901 非首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n else\n log.debug('home_airclear_mop_0901 首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n --table.insert(redis_taskConfigs, tsakId, taskConfig)\n redis_taskConfigs[tsakId] = taskConfig\n end\n\n log.debug('home_airclear_mop_0901 [%s][code=%s] redis_taskConfigs=%s', cmd_obj.ID, cmd_obj.code, json.encode(redis_taskConfigs))\n elseif cmd_code == 6 then --删除任务\n redis_taskConfigs[tsakId] = nil\n log.debug('home_airclear_mop_0901 删除任务 tsakId=%s', tsakId)\n end\n setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\ngetRedisValue_obj = function(key, logObject)\n local r1, r1ok = redis.get(key) --获取上次记录时间\n log.debug('home_airclear_mop_0901 [%s][code=%s] r1=%s[%s],r1ok=%s key=%s', logObject.ID, logObject.code, r1, type(r1), r1ok, key)\n\n local params = {}\n if r1ok and r1 ~= nil and r1 ~= 'null' then\n local taskConfig = json.decode(r1)\n params = taskConfig\n else\n log.debug('home_airclear_mop_0901 [%s][code=%s] taskConfig读取失败 r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n end\n return params\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n local setValue = json.encode(setValueObject)\n local r1ok, r1 = redis.set(key, setValue)\n log.debug('home_airclear_mop_0901 [%s][code=%s] [setRedis] r1=%s,r1ok=%s[type=%s],key=%s,setValue=%s', logObject.ID, logObject.code, r1, r1ok, type(r1ok), key, setValue)\n return r1ok\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n local packageParams = {subList = {}}\n local len = string.len(allPackageStr) / 2\n local count = len / 1024\n local packageCount = math.ceil(count)\n packageParams.size = len\n packageParams.count = packageCount\n --添加整个文件校验\n local allAppendCrc16 = iota.appendHexCrc(allPackageStr, 'B', 0)\n local allcrc = string.sub(allAppendCrc16, -4, -1)\n packageParams.CRC = tonumber(allcrc, 16)\n for i = 1, packageCount, 1 do\n local start_index = (i - 1) * 2048 + 1\n local end_index = start_index + 2047 -- 如果 越界,lua自动取实际的 结束索引\n local subPackage = string.sub(allPackageStr, start_index, end_index)\n --最后一包判断长度是否是 4的倍数 不足写0x1A\n if i == packageCount then\n repeat\n local subPackage_len = string.len(subPackage) / 4\n local min_subPackage_len = math.floor(subPackage_len)\n local diff_value = subPackage_len - min_subPackage_len\n if diff_value > 0 then\n subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍,不足写0x1A\n end\n until (diff_value == 0)\n end\n\n local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n local subcrc = string.sub(subAppendCrc16, -4, -1)\n local subCheck = tonumber(subcrc, 16)\n local subBin = {}\n subBin.len = string.len(subPackage) / 2\n subBin.buff = subPackage\n subBin.checkint = subCheck\n packageParams.subList[i] = subBin\n end\n return packageParams\nend\n\ncraetTaskId = function(cmd, isDouble, isOn, isOff)\n local redis_key = cmd.ID .. '_airclaen_taskconfig'\n local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n for i = 2, 15, 2 do --01 只有1 且1是便捷任务 23 45 67 89 ab cd ef 是7组其他任务\n local task_k = tostring(i)\n if redis_taskConfigs[task_k] == nil then\n local taskid_new = i --默认是单任务的 task\n local kk\n if isDouble then --如果是双任务 双任务 以开任务号为准\n kk = string.format('%01x', tonumber(task_k)) .. string.format('%01x', tonumber(task_k) + 1)\n \t\ttaskid_new = tonumber(kk, 16)\n elseif isOn then\n kk = string.format('%01x', tonumber(task_k)) .. '0'\n taskid_new = tonumber(kk, 16)\n elseif isOff then\n kk = '0' .. string.format('%01x', tonumber(task_k) + 1) --新建的关任务=同组的开任务号+1\n taskid_new = tonumber(kk, 16)\n end\n log.debug('home_airclear_mop_0901 自增任务id taskid_new=%s,kk=%s,i=%s', taskid_new, kk, i)\n return taskid_new\n end\n end\n return 255 --自增失败传255\nend\n\ntransferDoubleTaskId = function(appTaskId, isDouble, isOn, isOff)\n local task_k = tonumber(appTaskId)\n\n local taskid_new = 255 --默认是单任务的 task\n local kk\n if isDouble then --如果是 同时开关任务 关任务号就是开任务号+1\n kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n taskid_new = tonumber(kk, 16)\n elseif isOn then\n kk = string.format('%01x', task_k) .. '0'\n taskid_new = tonumber(kk, 16)\n elseif isOff then\n kk = '0' .. string.format('%01x', task_k)\n taskid_new = tonumber(kk, 16)\n end\n log.debug('home_airclear_mop_0901 使能 任务id taskid_new=%s,kk=%s', taskid_new, kk)\n return taskid_new\nend\ngetlooptype = function(str)\n local slen = string.len(str)\n local looptype_num = 0\n if slen == 8 then\n for i = 0, 7, 1 do\n local index = -1 * (i + 1)\n local one = string.sub(str, index, index)\n --print('one='..one)\n if one == '1' then\n looptype_num = looptype_num + 2 ^ i\n --print('looptype_num='..one)\n end\n end\n end\n local int_num = tonumber(string.format('%d', looptype_num))\n return int_num\nend\n\nfunction byte2bin(n)\n local t = {}\n for i = 7, 0, -1 do\n t[#t + 1] = math.floor(n / 2 ^ i)\n n = n % 2 ^ i\n end\n return table.concat(t)\nend\n\ngetBinHard = function(binName)\n local Hard_version\n if binName ~= nil then\n --文件名 例 KQJSQ_SD01.H016.S016.A.201012.bin\n local split_names = split(binName, '.')\n for key, value in pairs(split_names) do\n local head_str = string.sub(value, 1, 1)\n if head_str == 'H' then\n Hard_version = tonumber(string.sub(value, 2, -1))\n return Hard_version\n end\n end\n end\n return Hard_version\nend\n\ngetBinSoft = function(binName)\n local soft_version\n if binName ~= nil then\n --文件名 例 KQJSQ_SD01.H016.S016.A.201012.bin\n local split_names = split(binName, '.')\n for key, value in pairs(split_names) do\n local head_str = string.sub(value, 1, 1)\n if head_str == 'S' then\n soft_version = tonumber(string.sub(value, 2, -1))\n return soft_version\n end\n end\n end\n return soft_version\nend\n\nsplit = function(s, delim)\n if type(delim) ~= 'string' or string.len(delim) <= 0 then\n return\n end\n\n local start = 1\n local t = {}\n while true do\n local pos = string.find(s, delim, start, true) -- plain find\n if not pos then\n break\n end\n\n table.insert(t, string.sub(s, start, pos - 1))\n start = pos + string.len(delim)\n end\n table.insert(t, string.sub(s, start))\n\n return t\nend INLINE 2020-11-16 16:16:49.462+08 2021-01-19 18:09:41.772+08 2020-11-16 \N
+d2931056-a908-4f70-af66-8ba3a1cfc6d7 ZHXQ_camera_Alarm \N 智慧小区摄像头告警 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua local recordTime\nlocal rkey\nlocal rTokenkey\nstart = function()\n local req = {\n type = 'http', --注意 这里不管https还是http都写 http\n url = '',\n method = 'post'\n -- header = {}\n }\n \tlog.debug('yinshiyunC iota测试日志')\n log.debug('yinshiyunC os.time()=%s', os.time())\n rkey = device.id .. '_endTime'\n rTokenkey = device.id .. '_token'\n local rvalue = tonumber(getRedisValue(rkey))\n local rTokenAndTimeStr=getRedisValue(rTokenkey)\n log.debug('yinshiyunC rTokenAndTimeStr type=[%s][%s]%s',type(rTokenAndTimeStr),rTokenAndTimeStr==nil,rTokenAndTimeStr)\n local tokenStr\n if rTokenAndTimeStr~= nil then\n local rtt=Split(rTokenAndTimeStr,'===')\n local tokenExpireTime=tonumber(rtt[2])\n if tokenExpireTime/1000>(os.time()-3600*24) then --token未过期\n tokenStr=rtt[1]\n log.debug('yinshiyunC redis获取[tokenExpireTime=%s]token=%s',tokenExpireTime,tokenStr)\n else\n log.debug('yinshiyunC 开始获取新token')\n tokenStr=getNewToken()\n\n end\n else\n tokenStr=getNewToken()\n log.debug('yinshiyunC rTokenAndTimeStr=%s',rTokenAndTimeStr)\n end\n\n if rToken ~= nil then\n recordTime = tonumber(rvalue)\n else\n recordTime = (os.time() - 60 * 30) * 1000 --首次 默认获取 前30分钟数据\n end\n\n \n if rvalue ~= nil then\n recordTime = tonumber(rvalue)\n else\n recordTime = (os.time() - 60 * 30) * 1000 --首次 默认获取 前30分钟数据\n end\n local param = {\n accessToken = tokenStr,--'at.a6diemkr7z1uw3ax1ok8da21czi5iudv-35zqn4u8a4-0h04249-wrhgenopd',\n deviceSerial = device.props.deviceSerial,\n pageSize = 1, -- 只获取一个最新告警\n pageStart = 0,\n startTime = tonumber(string.sub(tostring(recordTime),1,-2)),\n -- 萤石云接口故障,开始时间不能精确到毫秒,不然没有customerInfo\n endTime = os.time() * 1000,\n status = 2, -- 告警消息状态:2-所有,1-已读,0-未读,默认为0(未读状态)\n alarmType = -1 -- 告警类型,默认为-1(全部)\n }\n --req.url = string.format('https://open.ys7.com/api/lapp/alarm/device/list?accessToken=%s&deviceSerial=%s&pageSize=%s&pageStart=0&startTime=%s&endTime=%s&status=2&alarmType=-1', param.accessToken, param.deviceSerial, param.pageSize, param.startTime, param.endTime)\n req.url = string.format('https://open.ys7.com/api/lapp/device/info?accessToken=%s&deviceSerial=%s', param.accessToken, param.deviceSerial)\n log.debug('yinshiyunC deviceSerial=%s', param.deviceSerial)\n log.debug('yinshiyunC req=%s', json.encode(req))\n log.debug('yinshiyunC url=%s', req.url)\n --log.debug('yinshiyunC 设备原型=%s', json.encode(device))\n\n --req.ContentType = 'application/x-www-form-urlencoded'--'application/json' --'application/x-www-form-urlencoded'\n\n local ok, ack = ctx:ssend(req, 4000)\n\n if ack == nil then\n log.debug('yinshiyunC ack==nil')\n else\n log.debug('yinshiyunC ok=%s,ack=%s', ok, ack.body)\n end\n local out = {\n type = 1,\n data = {},\n result = {}\n }\n if not ok or ack == nil then\n log.debug('yinshiyunC not ok,ack=%s', json.encode(ack))\n out.result = {\n code = 1002,\n msg = 'timeout'\n }\n else --OK\n if ack.code == 200 and ack.body ~= '' then -- http应答\n log.debug('yinshiyunC ack=%s', ack.body)\n --out.data, dtime = parseAckStr(ack.body)\n out.time = dTimeGet(ack.body)\n --out.time = os.date('%Y-%m-%dT%H:%M:%S+08:00');\n\t local alarmmsg = statusGet(ack.body)\n\t if alarmmsg == '设备离线' then\n\t\t out.result = {\n code = 70040005,\n msg = string.format('产生:%s', alarmmsg)\n\t\t }\n\t else\n\t\t out.result = {}\n\t end\n else\n log.debug('yinshiyunC request data error code=%s body=%s', ack.code, ack.body)\n end\n end\n log.debug('yinshiyunC out=%s', json.encode(out))\n ctx:done(json.encode(out))\nend\n\nstatusGet = function(ackDataStr)\n local dataTable = json.decode(ackDataStr)\n local status = dataTable.data.status\n if status == 0 then\n return '设备离线'\n else\n return '设备在线'\n end\nend\n\ndTimeGet = function(ackDataStr)\n local dataTable = json.decode(ackDataStr)\n local timenum = dataTable.data.updateTime\n return unixtimestampToTime(timenum)\nend\n \nparseAckStr = function(ackDataStr)\n local resultTable = {}\n local dataTime\n local dataTable = json.decode(ackDataStr)\n local total = dataTable.page.total\n\n --Sleep(1)\n\n local rt_data = dataTable.data\n\n for k, v in ipairs(rt_data) do\n --log.debug('yinshiyunC k=%s, value=%s', k, json.encode(v))\n\n local alarmDeviceName = v.alarmName\n local alarmType = v.alarmType\n local alarmTime = v.alarmTime\n dataTime = unixtimestampToTime(alarmTime / 1000)\n\n local isChecked = v.isChecked --是否已读:0-未读,1-已读\n\n local moduleId = v.deviceSerial --设备序列号\n\n local alarmPicUrl = v.alarmPicUrl --告警图片地址\n local customerType = v.customerType --透传设备参数类型 可以看作告警类型,温度报警 or 火点报警 "hightemperature"\n local customerInfo = v.customerInfo -- "type=1006|preid=0|ruleid=0|temp=23.96C"\n\n log.debug('yinshiyunC m=%s 告警信息=%s', moduleId, customerInfo)\n\n local temperature\n\n if customerType == 'hightemperature' then\n --温度阈值告警,解析温度\n local tempindex = string.find(customerInfo, 'temp=') + 5\n local tempStr = string.sub(customerInfo, tempindex, -2)\n temperature = tonumber(tempStr)\n end\n\n resultTable = {\n alarmDeviceName = alarmDeviceName,\n alarmType = alarmType,\n isChecked = isChecked,\n alarmPicUrl = alarmPicUrl,\n customerType = customerType,\n temperature = temperature,\n customerInfo = customerInfo\n --recordTime=recordTime,\n --endTime=os.time()*1000\n }\n\n --time = timenow\n\n --更新endTime\n if alarmTime > recordTime then\n setRedisValue(rkey, alarmTime)\n else\n log.debug('yinshiyunC redis不更新 ')\n end\n end\n log.debug('yinshiyunC resultTable=%s', json.encode(resultTable))\n return resultTable, dataTime\nend\n\nSleep = function(n)\n local t0 = os.clock()\n while os.clock() - t0 <= n do\n end\nend\n\n--获取采集仪下面的通道信息\nfunction getDeviceInfo(moduleid, channel)\n --log.debug("yinshiyunC 查询 传感器ID: moduleid=%s,channel=%s", moduleid,channel)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices\n --log.debug("yinshiyunC 查询 节点层 设备device=%s",json.encode(subdevices))\n\n for i, link in pairs(device.dnlinks) do\n --log.debug("yinshiyunC link=%s",json.encode(link))\n for j, node in pairs(link.devices) do\n --log.debug("yinshiyunC node=%s",json.encode(node))\n --log.debug("yinshiyunC 模块号(节点) node.uplink.props.node_id=%s",node.uplink.props.node_id)\n local moduleNo = node.uplink.props.module\n if moduleNo == tostring(moduleid) then\n for k, sublink in pairs(node.dnlinks) do\n --log.debug("yinshiyunC sublink=%s",json.encode(sublink))\n for u, subdevice in pairs(sublink.devices) do\n --log.debug("yinshiyunC sensor=%s",json.encode(subdevice))\n\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n log.debug('yinshiyunC m=%s,c=%s 匹配到设备=%s', moduleid, channel, json.encode(subdevice))\n\n return subdevice\n end\n end\n end\n end\n end\n end\n\n --log.debug("yinshiyunC has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug("yinshiyunC has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\nunixtimestampToTime = function(timenum)\n --log.debug('yinshiyunC timenum=%s', timenum)\n local unixtime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum/1000)\n --log.debug('yinshiyunC recordTime=%s', recordTime)\n return unixtime\nend\n\ngetRedisValue = function(redisKey)\n local redisValue\n\n local r1, r1ok = redis.get(redisKey) --获取上次记录时间\n log.debug('yinshiyunC r1=%s,r1ok=%s', r1, r1ok)\n if r1ok and r1 ~= nil then\n redisValue = r1\n log.debug('yinshiyunC r1=%s,r1ok=%s, get redisValue[%s]=%s', r1, r1ok, redisKey,redisValue)\n end\n return redisValue\nend\n\nsetRedisValue = function(redisKey, redisValue)\n local r1, r1ok = redis.set(redisKey, tostring(redisValue))\n log.debug('yinshiyunC r1=%s,r1ok=%s, set redisValue=%s', r1, r1ok, redisValue)\nend\n\n\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n\ngetNewToken=function()\n local newToken\n local req_token = {\n type = 'http', \n url = '',\n method = 'post'\n -- header = {}\n }\n local param_token = {\n appKey = '5d16a667e1c2423d9d0d634f781810b4',\n appSecret = '0cc4e1ec4e6a53ea3dabeb09cd5f468b'\n \n }\n req_token.url = string.format('https://open.ys7.com/api/lapp/token/get?appKey=%s&appSecret=%s', param_token.appKey, param_token.appSecret)\n\n log.debug('yinshiyunC url=%s', req_token.url)\n local ok, ack = ctx:ssend(req_token, 4000)\n\n if ack.code == 200 and ack.body ~= '' then -- http应答\n log.debug('yinshiyunC ackBody_token=%s', ack.body)\n local dataTable = json.decode(ack.body)\n newToken = dataTable.data.accessToken\n local newTokenAndExpireTime=string.format("%s===%s",newToken,dataTable.data.expireTime)\n setRedisValue(rTokenkey, newTokenAndExpireTime)--记录新的newToken===ExpireTime\n\n else\n log.debug('yinshiyunC request token error code=%s body=%s', ack.code, ack.body)\n end\n\n\n log.debug('yinshiyunC newToken=%s', newToken)\n return newToken\nend INLINE 2020-10-15 15:30:04.064+08 2020-10-20 16:36:34.787+08 2020-10-15 \N
+03873ea1-66d7-41ed-b78c-f41b3ba37eff xmxd_liquidLevel_195 \N 传感器协议 1.0 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 f 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]]\n--\\201809项目\\20180907项目资料提交\\1、沉降监测--厦门忻德--梁少龙\nstart=function()\n log.debug("start %s, ctx=%s", "xmxd_liquidLevel_1950.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("xmxd_liquidLevel_1950 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\n\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) -- 水位2 水温1\n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("xmxd_liquidLevel_1950,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t log.debug("xmxd_liquidLevel_1950 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n--01040440c50a34f90e\n-- level=165.81\n--temp=26.12\nunmarshall=function(hex,moduleNoStr)\n log.debug("xmxd_liquidLevel_1950 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local length =iota.hexToUShort(hex,3,'B')/100\n\t\tlocal temperature =iota.hexToShort(hex,5,'B')/100\n\t\t\n log.debug("xmxd_liquidLevel_1950 m=%s,temperature=%s ",moduleNoStr,temperature)\n out.data = { \n length=length,\n\t\t\ttemperature=temperature\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("xmxd_liquidLevel_1950 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2018-09-10 10:16:08.968+08 2020-11-20 10:11:48.415+08 2018-09-10 \N
+25647db7-386a-466c-b9a3-41ad27518265 ES11 \N 无眼界科技温湿度 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n协议号: 1.0;\n协议名: ES11\n]]--liankang\nstart=function ()\n --log.debug("ES11 start %s, ctx=%s",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("ES11 encoded")\n\tok,resp=ctx:ssend(sendBuff, 15000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("ES11 decoded=%s",resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE); -- 模块号(地址)\n\tbuff=iota.appendHexByte(buff, 0x03, BE); -- 功能码 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n buff=iota.appendHexByte(buff, 0x07, BE); -- 读取寄存器起始地址 00 07 温湿度\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x02, BE); -- 读取寄存器数量 00 02\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- CRC16 小端字节序\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 直线位移\n-- 01 03 04 00 33 2B FF 54 8C(长度为51.172mm)\n-- 01030400332BFF548C\n-- 原始数据\nfunction protocol_decode(da)\n\tlocal data = da;\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t-- 判断数据有效性\n\tif inValid(da) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telse\n\t\tlog.debug("数据有效")\n\t\tlocal hexLenStr = string.sub(data, 7, 14)\n\t\tlocal temp = iota.hexToShort(hexLenStr, 0, 'B') \t-- 温度\n\t\tlocal humi = iota.hexToUShort(hexLenStr, 2, 'B') -- 湿度\n\t\tlog.debug("ES11 temp =%s, humi = %s [%s]", temp,humi,da)\n\n\n\t\tout.data = {\n\t\t\ttemperature = temp/10, \n\t\t\thumidity=humi\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 9 or iota.hexToByte(data, 1,'B') ~= 0x03 then -- 长度不等于 9 或者 读第二个字节,功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend INLINE 2020-03-23 17:24:25.283+08 2020-03-24 17:01:18.871+08 2020-03-23 \N
+a544b432-a82e-49b3-8f33-1f6e36703a9e fs_sampler \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start=function()\n --log.debug("fs_sampler : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n if data ~=nil then\n log.debug("fs_sampler devices data =%s",data)\n ParseData(data) \n else\n log.error("fs_sampler recvd content is nil")\n end\nend\n\n\nfunction ParseData(data)\n local out={\n data ={},\n result = {},\n type=2\n }\n\t---设置配置\n\tlocal power = iota.hexToByte(data,15,'B')\n\tlocal ver = iota.hexToByte(data,16,'B')\n\tlog.debug("fs_sampler _power=%s ver =%s",power,ver)\n\tredis.set(device.id.."_power", tostring(power))\n\tredis.set(device.id.."_version", tostring(ver))\t\t\n if string.sub(data,59,60)=='01' and string.sub(data,-12,-11)=='fa' then --振动数据\n\t\tlocal vibdata = string.sub(data,59,-11)\n\t\tlocal sign=iota.hexToShort(vibdata,6,'B')\n\t\tif sign == 1 or sign ==2 or sign ==3 then\n\t\t\tcacheaxisvib(vibdata)\t\t\n\t\telse\n\t\t\tcachevib(vibdata)\n\t\tend\t\t\n else -- 非振动数据 \t \n\t\t--485回应帧\n\t\trespond(1)\t \n\t\tlocal data_body = string.sub(data,59,-11) \n\t\tlocal jsonstr = toStrHex(data_body)\n \t\tlog.debug("fs_sampler jsondata=%s",jsonstr)\n \tlocal jsondata = json.decode(jsonstr)\n\t\tlocal acqtime = jsondata.AT\n\t\tlocal acqtimes = Split(acqtime,' ')\n\t\tlocal dates = Split(acqtimes[1],'_')\n\t\tlocal times = Split(acqtimes[2],':')\n\t\tlog.debug("fs_sampler devices acqtime=%s year = %s month=%s day =%s",acqtime,dates[1],dates[2],dates[3])\n\t\tlocal datetime=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = tonumber(dates[1]), month = tonumber(dates[2]), day =tonumber(dates[3]), hour =tonumber(times[1]), min =tonumber(times[2]), sec = tonumber(times[3])}))\n\t\tlocal vl_table =jsondata.VL\t\t\n\t\tlog.debug("fs_sampler devices time=%s",datetime)\n\t\tfor key,value in pairs(vl_table) do\n\t\t\tlocal channel = string.sub(key,-1,-1)\n\t\t\tlocal datas = Split(value,'_')\n\t\t\tlocal sentype = tostring(datas[1])\n\t\t\tlocal module = tostring(datas[2])\n \t\t\n\t\t\tlocal state = tostring(datas[3])\n\t\t\tlocal cnt = #(datas)\n\t\t\t--Parse()\n\t\t\tlocal xvalue = 0\n\t\t\tlocal yvalue = 0\n\n\t\t\tif cnt > 3 then\n\t\t\t\txvalue = tonumber(datas[4])\n\t\t\t\tif cnt > 4 then\n\t\t\t\t\tyvalue = tonumber(datas[5])\n\t\t\t\tend\n\t\t\tend\n\t\t\t------------------诊断------------------\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\tlog.debug("fs_sampler powerstr=%s",powerstr)\n\t\t\tlocal rstd = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnode = {\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time \n\t\t\t}\t\t\n\t\t\ttable.insert(out.data,rstd)\t\t\t\t\n\t\t\t---------------诊断信息---------------------\t\t\t \n\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\tif childDevice~=nil then\t\n\t\t\t\tif sentype=="1504" then --倾斜\n\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\tanglex = xvalue,\n\t\t\t\t\t\t\tangley = yvalue\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime=datetime \n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tlog.debug("fs_sampler 倾角仪 out=%s", json.encode(out))\n\t\t\t\tend\n\t\t\t\t\n\t\t\t\t---其他传感器------\n\t\t\t\t-------------------\n\t\t\tend\n\t\tend\t\t\n\t\tctx:notify(json.encode(out)) \n end\nend\n\nfunction cachevib(vibdata)\t\n\tlog.debug("fs_sampler 振动数据 vibdata =%s",vibdata)\t\t\n\tlocal package=iota.hexToShort(vibdata,8,'L')\n\tlocal packagecount=iota.hexToShort(vibdata,10,'L')\n\tlocal datpackage=string.sub(vibdata,41,-9)\n\tlocal moduleid=iota.hexToShort(vibdata,16,'L')\n\t--上报包记录,总包1完成记录0,第1包无论重复均直接重置缓存无需过滤,后续包记录对比过滤重复\n\tlocal recpc= redis.get(device.id.."_recpc")\n\tif package ~= recpc then\n\t\t--振动回应帧\n\t\trespond(package)\t \n\t\t\n\t\t--缓存振动数据\n\t\tif package==packagecount then\n\t\t\tlocal r1,ok = redis.get(device.id.."_mpzd")\n\t\t\tlocal dathex=r1..datpackage\n\t\t\tlog.debug("fs_sampler 解析dat r1= %s", dathex)\n\t\t\tParseFileDat(dathex)\n\t\t\tredis.set(device.id.."_recpc", "0")\n\t\telse\n\t\t\tif package==1 then\n\t\t\t\tlocal firstpackage=string.sub(datpackage,-80,-1)\n\t\t\t\tredis.set(device.id.."_mpzd", firstpackage)\n\t\t\t\tlog.debug("fs_sampler 接收dat datpackage= %s", firstpackage)\t\t\t\t\n\t\t\t\tlocal re = {\n\t\t\t\t\tresult = nil,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\tdata = {\n\t\t\t\t\t\tack = '振动数据首包'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tctx:notify(json.encode(re))\n\t\t\telse\n\t\t\t\tlocal r1,ok = redis.get(device.id.."_mpzd")\n\t\t\t\tlog.debug("fs_sampler 接收dat r1= %s package=%s", r1,package)\n\t\t\t\tlocal data=r1..datpackage\n\t\t\t\tredis.set(device.id.."_mpzd", data)\n\t\t\t\tlocal re = {\n\t\t\t\t\tresult = nil,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\tdata = {\n\t\t\t\t\t\tack = '振动数据'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tredis.set(device.id.."_recpc", tostring(package))\n\t\t\t\tctx:notify(json.encode(re))\n\t\t\tend\n\t\t\t\n\t\tend\n\tend\nend\n\nfunction cacheaxisvib(vibdata)\t\n\t--log.debug("fs_sampler 振动数据 axisvibdata =%s",vibdata)\t\t\n\tlocal package=iota.hexToShort(vibdata,8,'L')\n\tlocal packagecount=iota.hexToShort(vibdata,10,'L')\n\tlog.debug("fs_sampler 振动数据 package =%s / %s",package,packagecount)\t\n\tlocal datpackage=string.sub(vibdata,41,-9)\n\tlocal moduleid=iota.hexToShort(vibdata,16,'L')\n\tlocal sign=iota.hexToShort(vibdata,6,'B') --xyz轴标识/和校验\n\t\t--上报包记录,总包1完成记录0,第1包无论重复均直接重置缓存无需过滤,后续包记录对比过滤重复\n\tlocal recpc= redis.get(device.id.."_recpc")\n\tif package ~= recpc then\n\t\t--振动回应帧\n\t\trespond(package)\t \n\t\t--缓存振动数据\n\t\tif package==packagecount then\n\t\t\tlocal r1,ok = redis.get(device.id.."_mpzd_"..sign)\n\t\t\tlocal dathex=r1..datpackage\n\t\t\tredis.set(device.id.."_mpzd_"..sign, dathex)\t\t\t\n\t\t\tredis.set(device.id.."_recpc", "0")\t\n\t\t\tr1,ok = redis.get(device.id.."_mpzd_1")\n\t\t\tlocal dathex_x = r1\n\t\t\tr1,ok = redis.get(device.id.."_mpzd_2")\n\t\t\tlocal dathex_y = r1\n\t\t\tr1,ok = redis.get(device.id.."_mpzd_3")\n\t\t\tlocal dathex_z = r1\t\n\t\t\tParseAxisFileDat(dathex_x,dathex_y,dathex_z)\t\t\t\t\n\t\telse\n\t\t\tif package==1 then\n\t\t\t\tlocal firstpackage=string.sub(datpackage,-80,-1)\n\t\t\t\tredis.set(device.id.."_mpzd_1", " ")\n\t\t\t\tredis.set(device.id.."_mpzd_2", " ")\n\t\t\t\tredis.set(device.id.."_mpzd_3", " ")\n\t\t\t\tredis.set(device.id.."_mpzd_"..sign, firstpackage)\t\t\t\t\t\t\t\t\t\n\t\t\t\tlog.debug("fs_sampler 接收dat datpackage= %s", firstpackage)\t\t\t\t\n\t\t\t\tlocal re = {\n\t\t\t\t\tresult = nil,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\tdata = {\n\t\t\t\t\t\tack = '振动数据首包'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tctx:notify(json.encode(re))\n\t\t\telse\n\t\t\t\tlocal r1,ok = redis.get(device.id.."_mpzd_"..sign)\n\t\t\t\tlog.debug("fs_sampler 接收dat r1= %s package=%s", r1,package)\n\t\t\t\tlocal data=r1..datpackage\n\t\t\t\tif r1 == " " then\n\t\t\t\t\tdata=datpackage\n\t\t\t\tend\n\t\t\t\tredis.set(device.id.."_mpzd_"..sign, data)\n\t\t\t\tlocal re = {\n\t\t\t\t\tresult = nil,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\tdata = {\n\t\t\t\t\t\tack = '振动数据'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tredis.set(device.id.."_recpc", tostring(package))\n\t\t\t\tctx:notify(json.encode(re))\n\t\t\tend\n\t\t\t\n\t\tend\n\tend\nend\nfunction respond(package)\n\n\tlocal dtuid = device.uplink.props.id\t\n\tlocal acktype = 1 -- 1=采集配置 2=固件升级\n\tlocal apc = 1 --总包数//采集配置默认都为1\n\tlocal api = 1 --当前数据包索引(从1开始)\n\t\n\tlocal datatype = 1 --数据类型 //0=二进制,适用于固件升级;1=json,适用于下发采集配置\t\n\n\tlocal ack_body = {\n\t\tMD = 0,\n\t\tUC = 0,\n\t\tPN = package,\n\t\tDT=0\n\t}\n\n\tlocal configtable = {}\n\tlocal configvib = {}\n\tlocal uc = 0 --是否配置\n\tlocal strdevice= toHexStr(json.encode(device))\n\tstrdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n\tlocal crc=string.sub(strdevice,-4,-1)\t\n\tlocal r1,ok = redis.get(device.id.."_mpset")\n\tif ok and r1~=nil and crc ~= r1 then\t\n\t\tuc = 1\n\tend\n\tlocal ch_key = 1\n\t-------------遍历获取配置信息--------------------\n\tif device.deviceMetaId == "cce5d34b-3464-4566-81e6-3ff2540af13e" then \n\t\tmodestr = "角度模式" --模块模式配置(0为角度模式,1为加速度模式)\n\t\tinterval = device.props.duration --采集粒度 //以分钟为单位//高/低字节\n\telse\n\t\tmodestr = "加速度模式" --模块模式配置(0为角度模式,1为加速度模式)\n\t\tinterval = device.props.duration --采集粒度 //以分钟为单位//高/低字节\n\tend\n\n\tlog.debug("fs_sampler dtuid modestr %s interval %s",modestr,interval)\n\t-------------------------------------------------\n\tif uc == 1 and modestr == "加速度模式" then\n\t\tlocal key = "CH"..tostring(ch_key)\n\t\tlog.debug("fs_sampler dtuid key %s",key)\n\t\tlocal dev_inf = device\n\t\tlocal samolepoint = tonumber(dev_inf.props.samplefreq) * tonumber(dev_inf.props.duration)\n\t\tlocal trirmode = 0\n\t\tlog.debug("fs_sampler dtuid samolepoint %s",samolepoint)\n\t\tif dev_inf.props.triggermode == "绝对值" then\n\t\t\ttrirmode = 0\n\t\tend\n\t\tif dev_inf.props.triggermode == "上升沿" then\n\t\t\ttrirmode = 1\n\t\tend\n\t\tif dev_inf.props.triggermode == "下降沿" then\n\t\t\ttrirmode = 2\n\t\tend\n\t\tif dev_inf.props.triggermode == "峰值" then\n\t\t\ttrirmode = 3\n\t\tend\n\t\tlocal joinmode = 0\n\t\tif dev_inf.props.triggerjoin == "不参与" then\n\t\t\tjoinmode = 0\n\t\tend\n\t\tif dev_inf.props.triggerjoin == "参与" then\n\t\t\tjoinmode = 1\n\t\tend\n\t\tlocal amplify = 0\n\t\tif dev_inf.props.amplification == "1" then\n\t\t\tamplify = 0\n\t\tend\n\t\tif dev_inf.props.amplification == "10" then\n\t\t\tamplify = 1\n\t\tend\n\t\tif dev_inf.props.amplification == "100" then\n\t\t\tamplify = 2\n\t\tend\t\t\n\t\tif dev_inf.props.amplification == "1000" then\n\t\t\tamplify = 3\n\t\tend \n\t\tlocal dasvalue = 1\n\t\tif dev_inf.props.das == 'true' then\n\t\t\tdasvalue = 1\n\t\telse\n\t\t\tdasvalue = 0\n\t\tend\t\t\n\n\t\tconfigvib={\n\t\t\tGA=amplify,\n\t\t\tCI=tonumber(dev_inf.props.duration),--定时采集粒度,\n\t\t\tST=tonumber(dev_inf.props.sduration),--定时触发采样时长,\n\t\t\tTT=tonumber(dev_inf.props.tduration),--加速度触发采样时长,\t\t\t\t\n\t\t\tSF=tonumber(dev_inf.props.samplefreq),--SampleFreq 采样频率\n\t\t\tFF=tonumber(dev_inf.props.filterfreq),--FilterFreq 过滤频率,\n\t\t\tJM=tonumber(dev_inf.props.accelerationrange), -- 加速度量程\n\t\t\tZD=tonumber(dev_inf.props.lagpoint),--LagPoint 滞后点数,\n\t\t\tDA=tonumber(dev_inf.props.dcdriftadj),--DCDriftAdj 直流漂移校准参数,\n\t\t\tDAS=dasvalue,--DAS, 硬件DA启用? ,\n\t\t\tAA=tonumber(dev_inf.props.amplitudeadj),--AmplitudeAdj 幅值修正参数,\n\t\t\tTL=tonumber(dev_inf.props.triglevel),-- TriggerLevel 触发电平,\n\t\t\tTM=trirmode,--TriggerMode触发方式,\n\t\t\tTJ=joinmode,--TriggerJoin 参与触发方式,\n\t\t\tSR=samolepoint ,--SampleRate 采样点数1,\n\t\t}\n\t\tlog.debug("fs_sampler dtuid configvib %s",configvib.GA)\n\tend\t\n\tlog.debug("fs_sampler dtuid modestr %s",modestr)\n\tif modestr == "角度模式" then\n\t\tmode = 0\n\telse\n\t\tmode = 1\n\tend\n\tif mode == 0 then\t\t\n\t\tack_body = {\n\t\t\tMD = mode,\n\t\t\tUC = uc,\n\t\t\tPN = package,\n\t\t\tCV = 13\n\t\t}\n\telse\n\t\tack_body = {\n\t\t\tMD = mode,\n\t\t\tUC = uc,\n\t\t\tZCF= configvib,\n\t\t\tPN = package,\n\t\t\tCV = 13\n\t\t}\n\tend\n\tlocal jdata = json.encode(ack_body)\n\tlog.debug("fs_sampler devices ack =%s",jdata)\n\tlocal jsonbuff = toHexStr(jdata)\n\tlocal bufflen = #(jsonbuff) / 2\n \tlocal str = "$dw/"--json.encode(data_body)\n\tstr = str..dtuid\n local buff = toHexStr(str)\n\tbuff=iota.appendHexByte(buff, acktype , 'B')\n\tbuff=iota.appendHexByte(buff, apc , 'B')\n\tbuff=iota.appendHexByte(buff, api , 'B')\n\tbuff=iota.appendHexWord(buff, interval , 'B')\t\n\tbuff=iota.appendHexWord(buff, os.date("%Y"), 'B') -- 年\n\tbuff=iota.appendHexByte(buff, os.date("%m"), 'B') \n\tbuff=iota.appendHexByte(buff, os.date("%d"), 'B') \n\tbuff=iota.appendHexByte(buff, os.date("%H"), 'B') \n\tbuff=iota.appendHexByte(buff, os.date("%M"), 'B') \n\tbuff=iota.appendHexByte(buff, os.date("%S"), 'B') --秒\n\tbuff=iota.appendHexByte(buff, datatype , 'B')\n\tbuff=iota.appendHexWord(buff, bufflen , 'B')\n\tbuff=buff..jsonbuff\n\tbuff=iota.appendHexCrc(buff, 'B' ,0) \n\tlocal end_str = "END"\n local end_buff = toHexStr(end_str)\n\tbuff= buff..end_buff\n\tlog.debug("fs_sampler[%s] ack_body= %s",dtuid,str)\n\t\n\tctx:asend(buff, 20000)\n\tredis.set(device.id.."_mpset", tostring(crc))\nend\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend \n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \t\n\t\t\t\t\tlog.debug("fs_sampler subdevice=%s",json.encode(subdevice)) \n return subdevice\n end \n end\n end\n log.debug("fs_sampler has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("fs_sampler has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\nfunction ParseFileDat(dathex)\n --log.debug("fs_sampler dat content =%s", dathex)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n --log.debug("fs_sampler deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n local floatcount = (string.len(dathex)/2-40)/4\n --log.debug("fs_sampler begin parse")\n local vols = {}\n\t\tlocal mean = 0\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n end\n\t\tmean = mean/floatcount\n\t\tif device.props.das == "true" then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n --log.debug("fs_sampler finish parse")\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n sampleFreq=samplefreq,\n filterFreq=filterfreq,\n gainAmplifier=gainamplifier,\n triggerType=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n }\n table.insert(out.data,rst)\n \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\t--log.debug("fs_sampler r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver="V"..r1\n\t\t\t--log.debug("fs_sampler r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_backlog") --获取上次未上传记录\n\t\tlocal backlog\n\t\tif r1ok and r1~=nil then\n\t\t\tbacklog=r1\n\t\t\t--log.debug("fs_sampler r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_wakeup") --获取上次记录苏醒次数\n\t\tlocal wakeup\n\t\tif r1ok and r1~=nil then\n\t\t\twakeup=r1\n\t\t\t--log.debug("fs_sampler r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\tend\t\t\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("fs_sampler powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tnode = {\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time \n\t\t}\n\t\tlocal tb = {\n\t\t\t\t\t\tR=backlog,\n\t\t\t\t\t\tWTS=wakeup\n\t\t\t\t}\t\n\t\ttable.insert(rstd.data.R.node,tb)\t\t\t\n\t\ttable.insert(out.data,rstd)\n\t\t--log.debug("fs_sampler cloudvibrate=%s",json.encode(out))\n ctx:notify(json.encode(out))\n else\n --log.debug("fs_sampler not found device module=%s channel=%s",deviceId,channel)\n end\nend\n\nfunction ParseAxisFileDat(dathex_x,dathex_y,dathex_z)\n\tlog.debug("fs_sampler dat dathex_x =%s dathex_y =%s dathex_z =%s", dathex_x,dathex_y,dathex_z)\n local out={\n data ={},\n result = {},\n type=2\n }\n\tlocal offset = 5\n local channel = iota.hexToByte(dathex_x,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex_x,offset,'L') -- 设备ID\t \n\n\toffset = offset + 2\n\tlocal samplefreq = iota.hexToFloat(dathex_x,offset,'L',4) -- 采样频率\n\toffset = offset + 4\n\tlocal filterfreq = iota.hexToFloat(dathex_x,offset,'L',4) -- 滤波频率\n\toffset = offset + 4\n\tlocal gainamplifier = iota.hexToByte(dathex_x,offset,'B') -- 放大倍数\n\toffset = offset + 1\n\tlocal triggertype = iota.hexToByte(dathex_x,offset,'B') -- 触发方式\n\n\t\n\tlocal vols,time_data= parsevib(dathex_x,dathex_y,dathex_z)\n \tlog.debug("fs_sampler vols time_data=%s",time_data)\n\t--------------X轴--------------\n\tlocal subdevice = getDeviceInfo(deviceId,1)\n\tlocal vols_x = {\n\t\t_data_type='vib',\n\t\tphysicalvalue=vols.physicalvalue_x,\n\t\tsampleFreq=samplefreq,\n\t\tfilterFreq=filterfreq,\n\t\tgainAmplifier=gainamplifier,\n\t\ttriggerType=triggertype,\n\t\tversion=version\t\t\n\t}\n\n\tlocal rst = {\n\t\tdata=vols_x,\n\t\tdevice=subdevice.id,\n\t\ttype=1,\n\t\ttime= time_data\n\t}\n\ttable.insert(out.data,rst)\t\n\t--------------Y轴--------------\n\tsubdevice = getDeviceInfo(deviceId,2)\n\tlocal vols_y = {\n\t\t_data_type='vib',\n\t\tphysicalvalue=vols.physicalvalue_y,\n\t\tsampleFreq=samplefreq,\n\t\tfilterFreq=filterfreq,\n\t\tgainAmplifier=gainamplifier,\n\t\ttriggerType=triggertype,\n\t\tversion=version\n\t}\n\n\trst = {\n\t\tdata=vols_y,\n\t\tdevice=subdevice.id,\n\t\ttype=1,\n\t\ttime= time_data\n\t}\n\ttable.insert(out.data,rst)\t\n\t--------------Z轴--------------\n\tsubdevice = getDeviceInfo(deviceId,3)\n\tlocal vols_z = {\n\t\t_data_type='vib',\n\t\tphysicalvalue=vols.physicalvalue_z,\n\t\tsampleFreq=samplefreq,\n\t\tfilterFreq=filterfreq,\n\t\tgainAmplifier=gainamplifier,\n\t\ttriggerType=triggertype,\n\t\tversion=version\n\t}\n\n\trst = {\n\t\tdata=vols_z,\n\t\tdevice=subdevice.id,\n\t\ttype=1,\n\t\ttime= time_data\n\t}\n\ttable.insert(out.data,rst)\n\t\n \n\t--诊断信息\n\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\tlocal power\n\tif r1ok and r1~=nil then\n\t\tpower=r1\n\t\t--log.debug("fs_sampler r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\tend\n\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\tlocal ver\n\tif r1ok and r1~=nil then\n\t\tver="V"..r1\n\t\t--log.debug("fs_sampler r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\tend\n\n\tlocal powerstr = string.format("%d%%", power)\n\tlog.debug("fs_sampler powerstr=%s",powerstr)\n\tlocal rstd = {\n\t\tdata={\n\t\t\t_data_type='diag',\n\t\t\tR={\n\t\t\t\tbase ={\n\t\t\t\t\tcc={\n\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\tfw={\n\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tnode = {\n\n\t\t\t\t}\n\t\t\t}\n\t\t},\t\t\t\t\n\t\tdevice=device.id,\n\t\ttype=1,\n\t\ttime=time \n\t}\t\t\n\ttable.insert(out.data,rstd)\t\n\t\n \tlog.debug("fs_sampler cloudvibrate=%s",json.encode(out))\n\tctx:notify(json.encode(out))\n\nend\n\nfunction parsevib(dathex_x,dathex_y,dathex_z)\n\tdathex_x = string.gsub(dathex_x, "^%s*(.-)%s*$", "%1")\n\tdathex_y = string.gsub(dathex_y, "^%s*(.-)%s*$", "%1")\n\tdathex_z = string.gsub(dathex_z, "^%s*(.-)%s*$", "%1")\n\tlocal offset = 0\n local t = iota.hexToShort(dathex_x,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex_x,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex_x,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex_x,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex_x,offset,'L') -- 设备ID\n\tlocal vols_x = {}\n\tlocal vols_y = {}\n\tlocal vols_z = {}\n\tlocal data = {}\n\toffset = offset + 2\n\tlocal samplefreq = iota.hexToFloat(dathex_x,offset,'L',4) -- 采样频率\n\toffset = offset + 4\n\tlocal filterfreq = iota.hexToFloat(dathex_x,offset,'L',4) -- 滤波频率\n\toffset = offset + 4\n\tlocal gainamplifier = iota.hexToByte(dathex_x,offset,'B') -- 放大倍数\n\toffset = offset + 1\n\tlocal triggertype = iota.hexToByte(dathex_x,offset,'B') -- 触发方式\n\toffset = offset + 1\n\tlocal year = iota.hexToByte(dathex_x,offset,'B')+2000\n\toffset = offset + 1\n\tlocal mon = iota.hexToByte(dathex_x,offset,'B')\n\toffset = offset + 1\n\tlocal day = iota.hexToByte(dathex_x,offset,'B')\n\toffset = offset + 1\n\tlocal hour = iota.hexToByte(dathex_x,offset,'B')\n\toffset = offset + 1\n\tlocal min = iota.hexToByte(dathex_x,offset,'B')\n\toffset = offset + 1\n\tlocal sec = iota.hexToByte(dathex_x,offset,'B')\n\toffset = offset + 1\n\toffset = offset + 12\n\tlocal Ldata = iota.hexToInt(dathex_x,offset,'B')\n\toffset = offset + 4\n\tlog.debug("fs_sampler deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n\tlocal floatcount = (string.len(dathex_x)/2-40)/4\n\tlog.debug("fs_sampler begin parse")\n\t\n\tlocal mean = 0\n\tfor i= 1, floatcount do\n\t\toffset=40+(i-1)*4 \n\t\tvols_x[i]= iota.hexToFloat(dathex_x,offset,'L',6)\n\t\tmean = mean + vols_x[i]\n\tend\n\tmean = mean/floatcount\n\tif device.props.das == "true" then\n\t\tfor i= 1, floatcount do\n\t\t\tvols_x[i]=vols_x[i]- mean\n\t\tend\n\tend\t\t\n\t\n\tfloatcount = (string.len(dathex_y)/2-40)/4\n\tmean = 0\n\tfor i= 1, floatcount do\n\t\toffset=(i-1)*4 \n\t\tvols_y[i]= iota.hexToFloat(dathex_y,offset,'L',6)\n\t\tmean = mean + vols_y[i]\n\tend\n\tmean = mean/floatcount\n\tif device.props.das == "true" then\n\t\tfor i= 1, floatcount do\n\t\t\tvols_y[i]=vols_y[i]- mean\n\t\tend\n\tend\n\tfloatcount = (string.len(dathex_z)/2-40)/4\n\tlog.debug("fs_sampler das30=%s dathex_z =%s", tostring(string.len(dathex_z)),dathex_z)\n\tmean = 0\n\tfor i= 1, floatcount do\n\t\toffset=(i-1)*4 \n\t\tvols_z[i]= iota.hexToFloat(dathex_z,offset,'L',6)\n\t\tmean = mean + vols_z[i]\n\tend\n\tmean = mean/floatcount\t\n\tif device.props.das == "true" then\n\t\tfor i= 1, floatcount do\n\t\t\tvols_z[i]=vols_z[i]- mean\n\t\tend\n\tend\t\t\n\tlog.debug("fs_sampler das32=%s floatcount =%s", device.props.das,tostring(floatcount))\n\tdatatime = os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n\tlog.debug("fs_sampler vols_x=%s datatime =%s", vols_x,tostring(datatime))\n\tdata={\n\t\t_data_type='vib',\n\t\tphysicalvalue_x=vols_x,\n\t\tphysicalvalue_y=vols_y,\n\t\tphysicalvalue_z=vols_z\n\t}\n\n \tlog.debug("fs_sampler finish time %s",datatime)\n\treturn data,datatime\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend INLINE 2020-12-28 14:13:03.158+08 2021-02-02 09:58:56.168+08 2020-12-28 \N
+3c318417-0111-4295-bd59-874a0a5a0cdc fs_solarRadiation \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --D:\\SVN\\202004项目\\RS-RA-N01-JT太阳辐射用户手册485型.pdf\nstart=function()\n log.debug("start %s, ctx=%s", "fs_solarRadiation.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("fs_solarRadiation,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '超时'} \n\t ctx:done(json.encode(errout))\n\tend\nend\n--010300000001840a\n--01030200649baf\n--"solarRadiation ":100W/㎡\nunmarshall=function(hex,moduleNoStr)\n log.debug("fs_solarRadiation m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local solarRadiation =iota.hexToUShort(hex,3,'B')\n out.data = { \n solarRadiation=solarRadiation\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("fs_solarRadiation m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n\tlocal checkLen=string.len(data)/2\n if data == nil or checkLen~= 7 then\n errormsg = string.format('无效的数据长度=%s≠7',checkLen)\n errcode = 1002\n return false\n end\n local dataModule=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataModule) then\t\n errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n errcode = 1003\n return false\n end\n return true\n--crc\nend INLINE 2020-04-08 09:21:43.469+08 2020-04-08 09:43:52.45+08 2020-04-08 \N
+e5116002-4b68-4d33-b40f-4d08dc7c46b1 yx_inclination_1503 \N 复制江西飞尚的测斜仪 1.0 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f 67c8b9e9-38d6-4c9a-8772-9c96d78121ed Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "fs_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n buff=iota.appendHexWord(buff, 22, endian) -- 2: 类型=22\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("yx_1503 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("yx_1503 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n buff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 1: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n--0016261381F35D42830C36094DFE363C80FFE1F8CFEF40\n--moduleId=9747\n--"temp": 23.81,\n--"xDegree": -30,\n--"yDegree": -1.967921\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\n local scale = 1000000.00;\n --print("parsing data", hex)\n local Temp = iota.hexToShort(hex,11,'B')/100.0;\n local xa = iota.hexToInt(hex,13,'B')/scale;\n local ya = iota.hexToInt(hex,17,'B')/scale;\n \n out.data = {\n temperature=Temp,\n \tanglex = xa,\n \tangley = ya\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('yx_1503开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1002\n return false\n end\n \n if iota.hexToByte(data,4,'B') ~= 0x81 then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo_check) ~= tostring(iota.hexToShort(data,2,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('yx_1503数据校验通过')\n return true\n--crc\nend\n\n INLINE 2020-04-03 17:31:03.805+08 2020-04-10 14:50:33.847+08 2020-04-03 \N
+48846ad7-8fa9-4e52-85a3-cf76a8f4b8ac fs_idau_log \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n\n local req = {\n type = "idau",\n payload = ""\n }\n local mop_log = {\n M = "c_shell",\n P = {} -- Get Log\n }\n\tmop_log.P.C = "cp /home/idau/logs/log.txt /home/idau/data/dac/log.txt"--..device.props.lognumber--"rm -f /home/idau/data/dac/log.txt"\n\tlocal param = capability.param\n\tlog.debug("fs_idau_log param=%s", param)\n\tif param ~= "" then\n\t\tmop_log.P.C = "cp /home/idau/logs/log.txt".."."..param.." /home/idau/data/dac/log.txt".."."..param\n\tend\n\tif param == "rm" then\n\t\tmop_log.P.C = "rm -f /home/idau/data/dac/log.*"\n\tend\n req.payload = json.encode(mop_log)\n log.debug("fs_idau_log:request=%s", json.encode(req))\n local ok, ack = ctx:ssend(req, 20000)\n result = {\n result = nil,\n type = 1,\n data = {\n ack = json.encode(ack)\n }\n }\n\tlog.debug("fs_idau_log:ack=%s", json.encode(ack))\n\n ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n if t == "host" then\n return 1\n elseif t == "relay" then\n return 2\n end\n return 3\nend INLINE 2019-09-24 09:51:02.56+08 2020-03-25 10:28:39.271+08 2019-09-24 \N
+5e2a3248-7f17-4242-aab3-8f70d28fa922 anxin_zx \N 安信振弦标准协议 请求应答 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua onData = function()\nend\n\nstart = function()\n log.debug('anxin_zx loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n log.debug('anxin_zx device=%s', json.encode(device))\n out = {\n type = 2,\n data = {},\n result = {}\n }\n local endian = 'B'\n local buff = ''\n local moduleNo\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = device.uplink.props.module\n --模块通道优先接口获取\n\n log.debug('anxin_zx设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n else\n moduleNo = device.props.moduleId\n\n log.debug('anxin_zx设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n end\n buff = buff .. 'ff41584a0001'\n buff = iota.appendHexWord(buff, moduleNo, endian)\n --1:模块号\n buff = buff .. '0100'\n buff=iota.appendHexCrc(buff, endian ,0) \n\n log.debug('anxin_zx END buff = %s', buff)\n --ctx:asend(buff)\n --ctx:sleep(10)\n\t--ctx:asend(buff)\n ok, resp = ctx:ssend(buff, 15000)\n\n if ok then\n local ErrorCode = IsValidOut(resp)\n if ErrorCode then\n log.debug('anxin_zx 数据有效=%s', resp)\n local allSubData = getAllDatas(resp)\n\t\tlog.debug('anxin_zx allSubData=%s',json.encode(allSubData))\n --发送指令\n local subdevices = device.dnlinks[1].devices\n\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do --插入16个通道\n \tlog.debug('anxin_zx child=%s', json.encode(child))\n channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t--if allSubData[channelNo]~=nil and allSubData[channelNo]>500 then\n \tlog.debug('anxin_zx 解析通道%s数据', channelNo)\n \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n \ttable.insert(out.data, result)\n \t--end\n end\n end\n else\n log.debug('anxin_zx 数据无效=%s', resp)\n out.result = {code = ercode, msg = erormsg}\n end\n else\n log.debug('anxin_zx ok=false')\n out.result = {code = '1002', msg = 'ok=false'}\n end\n\n local resultData = json.encode(out)\n log.debug('anxin_zx resultData=%s', resultData)\n ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n local DataList = {}\n local subDataArea = string.sub(hexStr, 19, -5)\n local dataCount = string.len(subDataArea) / 14\n for i = 1, dataCount do\n local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 14 + 1, (i - 1) * 14 + 14)\n local channelStr = string.sub(singleChannelDataHex, 2, 2)\n local subChannel = tonumber(channelStr, 16)\n \n DataList[subChannel]= {iota.hexToShort(singleChannelDataHex,1,'B'),iota.hexToShort(singleChannelDataHex,3,'B')/10000,iota.hexToShort(singleChannelDataHex,5,'B')}\n \tlog.debug('anxin_zx getAllDatas DataList[%s]=%s',subChannel,json.encode(DataList[subChannel]))\n end\n return DataList\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n log.debug('anxin_zx datatable=%s', json.encode(datatable))\n local subData = {\n type = 1,\n data = {},\n device = '',\n result = {}\n }\n\t\n\n local freq = datatable[subChannelId][1]+datatable[subChannelId][2]\n local temp = datatable[subChannelId][3]\n --if childDevice ~= nil then\n --if childDevice.uplink.capabilities[1].formula.metaid == '6cea049d-f41a-43f9-9e88-d8aeea9aca7f' then --振弦公式\n --local k = childDevice.uplink.capabilities[1].formula.props.K\n\n --local f0 = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t--local kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t--local t0 = childDevice.uplink.capabilities[1].formula.props.To\n\n --log.debug('anxin_zx module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n --if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil and freq ~= nil and temp ~= nil then\n --Phy = k * (freq ^ 2 - f0 ^ 2)+ kt * (temp - t0) \n --end\n --end\n --log.debug('anxin_zx freq=%s,Phy=%s', freq, Phy)\n singleData = {\n data = {\n\t\t\t temperature=tonumber(string.format('%0.2f',temp)),\n frequency = tonumber(string.format('%0.2f',freq))\n --physicalvalue = tonumber(string.format('%0.2f',Phy))\n },\n device = childDevice.id,\n type = 1\n }\n --end\n --end\n\n --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n if device.dnlinks ~= nil then\n for k, dnlink in pairs(device.dnlinks) do\n for v, subdevice in pairs(dnlink.devices) do\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n log.debug('anxin_zx has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('anxin_zx has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\nIsValidOut = function(checkdata)\n log.debug('anxin_zx 开始校验数据=%s', checkdata)\n\n local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n if hexHeader ~= 0xFF then\n ercode = 1001\n erormsg = 'HexCMD False'\n log.debug('anxin_zx HexCMDFalse[%s]', hexHeader)\n return false\n end\n return true\n --crc\nend INLINE 2019-12-24 16:15:40.752+08 2019-12-25 10:37:53.829+08 2019-12-24 \N
+e24c947d-eeba-4895-bad5-f1a03b48bfc7 fs_temp_1102 \N ModBus统一通信协议 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n log.debug("start %s, ctx=", "fs_1102.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n \tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=tonumber(device.uplink.props.module) --模块 通道 优先接口获取\t\t\t\n\t\tlog.debug("fs_1102 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\t moduleNo=device.props.moduleId \n\t\t log.debug("fs_1102 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t--local moduleNo=device.props.moduleId or device.uplink.props.module \n\t--log.debug("fs_1102 moduleNo=%s 接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n buff=iota.appendHexWord(buff, 1, endian) -- 2: 类型=1\n buff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 1: 指令: 0x01 = 采集\n \tbuff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n\n ok,resp=ctx:ssend(buff,15000)\n\tlog.debug("fs_1102:发送数据=%s",buff)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n\t\tlog.debug("fs_1102 接收数据=%s,解析值=%s",resp,result)\n\t\tctx:done(result)\n end\n \nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)>=15) then\n -- 2 2 1 4 4 2\n -- 0001 26C6 81 0D6FFDA1 FFDACFBE F831\n --000107DE8112121213131313E1F9 \n -- moduleId= 结果0,0\n --print("parsing data", hex)\n local hum = iota.hexToFloat(hex,9,'B',2);\n local tem = iota.hexToFloat(hex,5,'B',2);\n out.data = {\n temperature=tem,\n humidity = hum\n };\n else\n local message = string.format('Invalid Msg, hex=%s,len=%s',hex,string.len(hex))\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n \n\n INLINE 2017-08-26 15:47:24.221+08 2020-11-23 13:57:25.351+08 2017-08-24 \N
+68f82401-bc7d-4e16-8f53-5c8e2c3850b7 cdaj_zxjt \N 1.0 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e f 8d49238d-6e0e-421c-adaf-f7472ec0b50e Lua start= function()\nend\n\nonData = function(resp)\n\n log.debug('cdaj_zxjt device=%s', json.encode(device))\n out = {\n type = 2,\n data = {},\n result = {}\n }\n\tlocal moduleNo\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = device.uplink.props.module\n --模块通道优先接口获取\n\n log.debug('cdaj_zx 设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n else\n moduleNo = device.props.moduleId\n\n log.debug('cdaj_zx 设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n end\n local ErrorCode = IsValidOut(resp,moduleNo)\n if ErrorCode then\n log.debug('cdaj_zxjt 数据有效=%s', resp)\n allSubData = getAllDatas(resp)\n --发送指令\n local subdevices = device.dnlinks[1].devices\n\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do --插入16个通道\n \tlog.debug('cdaj_zxjt child=%s', json.encode(child))\n channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t--if allSubData[channelNo]~=nil and allSubData[channelNo]>500 then\n \tlog.debug('cdaj_zxjt 解析通道%s数据', channelNo)\n \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n \ttable.insert(out.data, result)\n \t--end\n end\n end\n else\n log.debug('cdaj_zxjt 数据无效=%s', resp)\n out.result = {code = ercode, msg = erormsg}\n end\n local resultData = json.encode(out)\n log.debug('cdaj_zxjt resultData=%s', resultData)\n ctx:notify(resultData)\nend\n\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n log.debug('cdaj_zxjt datatable=%s', json.encode(datatable))\n local subData = {\n type = 1,\n data = {},\n device = '',\n result = {}\n }\n local freq = datatable[subChannelId]\n local temp = datatable[subChannelId+8]\n if childDevice ~= nil then\n if childDevice.uplink.capabilities[1].formula.metaid == '057d8b2b-fafc-4937-897d-deff727f1032' then --振弦公式\n local k = tonumber(childDevice.uplink.capabilities[1].formula.props.K)\n\n local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n\t\t\tlocal kt = tonumber(childDevice.uplink.capabilities[1].formula.props.Kt)\n\t\t\tlocal t0 = tonumber(childDevice.uplink.capabilities[1].formula.props.To)\n\t\t\tlog.debug('cdaj_zxjt module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s,kt=%s,temp=%s', moduleNoStr, subChannelId, childDevice.id, k, f0, freq,kt,temp)\n --log.debug('cdaj_zxjt module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil and freq ~= nil and temp ~= nil then\n Phy = k * (freq ^ 2 - f0 ^ 2)+ kt * (temp - t0) \n end\n end\n\t\tif childDevice.uplink.capabilities[1].formula.metaid == 'cb006abf-3e22-4ead-830c-5a0a427c4024' then --地应力公式\n local A = tonumber(childDevice.uplink.capabilities[1].formula.props.A)\n\n local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n\t\t\tlocal B = tonumber(childDevice.uplink.capabilities[1].formula.props.B)\n\t\t\t\n\t\t\t--log.debug('cdaj_zxjt module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s,kt=%s,temp=%s', moduleNoStr, subChannelId, childDevice.id, k, f0, freq,kt,temp)\n --log.debug('cdaj_zxjt module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n if A ~= nil and f0 ~= nil and B ~= nil and freq ~= nil then\n Phy = A * (freq ^ 2 - f0 ^ 2)- B * (freq - f0) \n end\n end\n log.debug('cdaj_zxjt freq=%s,Phy=%s', freq, Phy)\n singleData = {\n data = {\n\t\t\t temperature=tonumber(string.format('%0.2f',temp)),\n frequency = tonumber(string.format('%0.2f',freq)),\n physicalvalue = tonumber(string.format('%0.4f',Phy))\n },\n device = childDevice.id,\n type = 1\n }\n end\n --end\n\n --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n if device.dnlinks ~= nil then\n for k, dnlink in pairs(device.dnlinks) do\n for v, subdevice in pairs(dnlink.devices) do\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n log.debug('cdaj_zxjt has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('cdaj_zxjt has no subdevices.')\n return nil -- 没有子设备\n end\nend\nIsValidOut = function(checkdata,deviceModule)\n log.debug('cdaj_zxjt 开始校验数据=%s', checkdata)\n\tlocal dataModule= iota.hexToByte(checkdata,4,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('cdaj_zxjt module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("cdaj_zxjt [%s] %s",deviceModule,errormsg)\n return false\n end\n\n local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n if hexHeader ~= 0xF7 then\n ercode = 1001\n erormsg = 'HexCMD False'\n log.debug('cdaj_zxjt HexCMDFalse[%s]', hexHeader)\n return false\n end\n return true\n --crc\nend\ngetAllDatas = function(hexStr)\n local DataList = {}\n local subDataArea = string.sub(hexStr, 15, -5)\n local dataCount = string.len(subDataArea) / 10\n for i = 1, dataCount do\n local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 10 + 1, (i - 1) * 10 + 10)\n local channelStr = string.sub(singleChannelDataHex, 2, 2)\n local subChannel = tonumber(channelStr, 16)+1\n local subData = string.sub(singleChannelDataHex, 3, -1)\n DataList[subChannel] = iota.hexToFloat(subData, 0, 'L')\n \tlog.debug('cdaj_zxjt getAllDatas DataList[%s]=%s',subChannel,DataList[subChannel])\n end\n return DataList\nend\n INLINE 2020-11-24 11:13:43.698+08 2020-12-14 13:05:10.04+08 2020-11-24 \N
+dabe22ea-4084-4385-bfa3-674a09fdea02 fs_szjc2020 \N 外包的水质监测2020 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug('fs_szjc2020 device=%s', json.encode(device))\t\n -- hex1='fe00a532365106383835321408050e26110384001f000c0d160001000000000225022fbb9eef'\n \n -- ok,resp=ctx:ssend(hex1,10000)\n \n -- onData(hex1)\nend\n\n\n\n--fe00a532365106383835321408050e26110384001f000c0d160001000000000225022fbb9eef\nonData=function(hex)\n local out={\n data ={},\n result = {}\n }\n log.debug('fs_szjc2020 receiveData=%s',hex)\n local moduleId=device.uplink.props.module\n local ErrorCode = IsValid(hex,moduleId)\n local temp\n local turbidity\n local conductivity\n local PH\n local oxy\n local datetime\n if ErrorCode then \n\t\t--1408050e2611\n\t local timeStr=string.sub(hex,23,34)\n\t datetime=hexDateStrToDate(timeStr)\n\t\tlocal MID=string.sub(hex,39,42)\n \tlog.debug('fs_szjc2020 [%s] MID=%s ,timeStr=%s',moduleId,MID,timeStr)\n \n\t\t--两个字节长度,表示DATA字段消息为何种传感器数据\n\t\t--0x0001: 温度 数据\n\t\t--0x0002: 浊度 数据\n\t\t--0x0004: 电导 数据\n\t\t--0x0008: PH数 据\n\t\t--0x0010: 溶氧 数据\n\t\t\n\t\tlocal len_dataArea=iota.hexToShort(hex,21,'B')\n\t\t\n\t\t\n\t\t\t\n\t\tif MID=='0001' then --温度 2字节\n\t\t\ttemp=iota.hexToUShort(hex,23,'B')/100\n\t\telseif MID=='0002' then --浊度 2字节\n\t\t turbidity=iota.hexToUShort(hex,23,'B')/10\n\t\telseif MID=='0004' then --电导 4字节\n\t\t conductivity=iota.hexToUInt(hex,23,'B')/10\n\t\telseif MID=='0008' then --PH 2字节\n\t\t PH=iota.hexToUShort(hex,23,'B')/100\n\t\telseif MID=='0010' then --溶氧 2字节\n\t\t oxy=iota.hexToUShort(hex,23,'B')/100\n\t\telseif MID=='001f' then --所有数据\n\t\t\n\t\t\n\t\t\n\t\t\n\t\toxy=iota.hexToUShort(hex,23,'B')/100\n PH=iota.hexToUShort(hex,25,'B')/100\n conductivity=iota.hexToUInt(hex,27,'B')/10\n turbidity=iota.hexToUShort(hex,31,'B')/10\n temp=iota.hexToUShort(hex,33,'B')/100\n\t\tend\n\t\t\n else\n log.debug('fs_szjc2020 校验失败=%s',errormsg)\n end\n \n out.data = {\n temperature = temp,\n\t\t\t\t turbidity = turbidity,\n\t\t\t\t conductivity = conductivity,\n\t\t\t\t PH = PH,\n\t\t\t\t oxy = oxy,\n }\n out.time=datetime \n local resultData= json.encode(out)\n log.debug('fs_szjc2020 结果=%s ,out.time=%s',resultData,out.time)\n ctx:notify(resultData)\n --ctx:done(resultData)\nend\n\n\nIsValid=function(data,device_module)\n\tif data == nil or string.len(data)/2 < 22 then\n errormsg = '数据为空 或 数据帧长度<22'\n errcode = 1002\n return false\n end\n\tlocal head_foot=string.sub(data,1,2)..string.sub(data,-2,-1)\n\tif head_foot ~='feef' then\t\n errormsg = string.format('数据帧头 和 尾 %s ≠ fe ef',head_foot)\n\t\terrcode = 1003\n\t\treturn false\n\tend\n \n \n\tlocal dataType=string.sub(data,3,6)\n if dataType ~= '00a5' then\n errcode = 1004\n errormsg = '数据类型 ≠ 00a5 ' \n return false\n end\n\n\tlocal data_module=string.sub(data,7,22)\n\tif data_module~= device_module then\t\n errcode = 1005\n\t\terrormsg = string.format('数据帧模块=%s 与设备模块 %s 不相等',data_module,device_module)\n return false\n end\n\t log.debug('fs_szjc2020 [%s] 数据校验成功=%s',device_module,data)\n return true\nend\n\n\nhexDateStrToDate=function(dateStr)\n -- 12 04 02 0F 24 38 ==> 18\n local year = tonumber(string.sub(dateStr,1,2),16)+2000;\n\tlocal month = tonumber(string.sub(dateStr,3,4),16);\n\tlocal day = tonumber(string.sub(dateStr,5,6),16);\n local hour = tonumber(string.sub(dateStr,7,8),16);\n local minute = tonumber(string.sub(dateStr,9,10),16);\n local second = tonumber(string.sub(dateStr,11,12),16);\n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)-- +08:00\n \tlog.debug('fs_szjc2020 数据时间 recordTime=%s',recordTime)\n\treturn recordTime\nend INLINE 2020-08-05 16:49:23.291+08 2020-08-07 12:53:47.843+08 2020-08-05 \N
+6f661bd4-e3b4-493b-b2f8-f266681071e3 anXin_rainfall_1607 \N 安信雨量计(请求应答) 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "anXin_rainfall_1607.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n\tlocal moduleNo=device.uplink.props.module\n local buff=''\n buff=iota.appendHexByte(buff, 0xFF, endian) --1: 帧头\n buff=iota.appendHexByte(buff, 0x41, endian)\n buff=iota.appendHexByte(buff, 0x58, endian)\n buff=iota.appendHexByte(buff, 0x4a, endian)\n buff=iota.appendHexWord(buff, 6, endian) -- 2: 类型=1\n buff=iota.appendHexWord(buff, moduleNo, endian) -- 3: 模块号\n buff=iota.appendHexByte(buff, 0x01, endian) -- 4: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 5: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,4000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==34) then\n -- 2 2 1 4 4 2\n -- 55 0A 00 0E 06 17 0F 01 00 4E\n \n --print("parsing data", hex)\n local hourrain = iota.hexToShort(hex,9,'B');\n local minrian = iota.hexToInt(hex,11,'B');\n out.data = {\n Hourrain=hourrain,\n Minrian =minrian,\n };\n -- out.D = out.DJ; -- json.encode(out.DJ);\n -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2017-08-31 19:19:36.692+08 2019-12-23 09:37:42.846+08 2017-08-29 \N
+3121e3a3-3ae3-4128-b080-5ad23d044087 bjdctk_2303 \N 1.0 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 f 9fb7fa83-8261-4c7b-bc2f-d21a24bc7105 Lua start = function()\n log.debug('bjdctk_2303 start moudleid=%s', device.props.pointId or 'nil')\n local req = {\n type = 'http',\n url = '', \n method = 'post',\n header = {}\n }\n\n req.url = device.props.tokenUrl\n log.debug('bjdctk_2303 url=%s', req.url)\n log.debug('bjdctk_2303 设备原型=%s' ,json.encode(device))\n req.ContentType = 'application/json'\n\n local tokenparam = {\n username = device.props.username,\n password = device.props.password\n }\n req.body = json.encode(tokenparam)\n log.debug('bjdctk_2303:tokenparam=%s',json.encode(tokenparam))\n local ok, ack = ctx:ssend(req, 4000)\n\n if ack == nil then\n log.debug('bjdctk_2303: ok=%s', ok)\n else\n log.debug('bjdctk_2303: ok=%s,token=%s', ok, ack.body)\n end\n local out = {\n type = 2,\n data = {},\n result = {}\n }\n if not ok or ack == nil then\n out.result = {\n code = 1002,\n msg = 'timeout'\n }\n else --OK\n if ack.code == 200 and ack.body ~= '' then -- http应答\n local dataTable = json.decode(ack.body)\n local token = dataTable.token\n log.debug('bjdctk_2303: token=%s ', token)\n log.debug('bjdctk_2303 ack=%s', ack.body)\n\n --Sleep(1)\n --请求数据\n local datareq = {\n type = 'http',\n url = '', --url=https://api.yespowering.cn/dev/data/?box_id=35E81PV005\n method = 'post',\n header = {}\n }\n\t\t\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\t\t\t--log.debug("bjdctk_2303 subdevices=%s,",json.encode(subdevices))\n\t\t\tif subdevices ~=nil then\n\t\t\t\tfor index,child in pairs(subdevices) do \n\t\t\t\t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\t\t\tlog.debug("bjdctk_2303 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\t\t\telse\n\t\t\t\t\t\tmoduleNo=child.props.moduleId\n\t\t\t\t\t\tchannelNo=child.props.channelId \n\t\t\t\t\tlog.debug("bjdctk_2303 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\t\t\tend \n\t\t\t\t\tdatareq.url = device.props.dataUrl\n\t\t\t\t\tlog.debug('bjdctk_2303: data url=%s', datareq.url)\n\t\t\t\t\tdatareq.header['token'] = token\n\t\t\t\t\tdatareq.ContentType = 'application/json'\n\t\t\t local aa=os.time()\n local endTimestr=aa-36000\n\t local endTime = os.date('%Y-%m-%d %H:%M:%S', endTimestr)\n log.debug('bjdctk_2303: endTime=%s', endTime)\n\t\t\t\t\tlocal beginTimestr = endTimestr-3600\n\t\t\t\t\tlocal beginTime = os.date('%Y-%m-%d %H:%M:%S', beginTimestr)\n log.debug('bjdctk_2303: beginTime=%s', beginTime)\n\t\t\t\t\n\t\t\t\t\tlocal dataparam = {\n\t\t\t\t\t\tnode = moduleNo,\n\t\t\t\t\t\tchannel= channelNo,\n\t\t\t\t\t\tstart=beginTime\n\t \n\t\t\t\t\t}\n dataparam['end'] =endTime\n log.debug('bjdctk_2303:dataparam=%s',json.encode(dataparam))\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tdatareq.body = json.encode(dataparam)\n\t\t\t\t\tlocal dataok, dataack = ctx:ssend(datareq, 4000)\n\n\t\t\t\t\tif not dataok or dataack == nil then\n\t\t\t\t\t\tout.result = {\n\t\t\t\t\t\tcode = 1002,\n\t\t\t\t\t\tmsg = 'timeout'\n\t\t\t\t\t}\n\t\t\t\t\telse --OK\n\t\t\t\t\t\tif dataack.code == 200 and dataack.body ~= '' then -- http应答\n\t\t\t\t\t\talldataTable = json.decode(dataack.body) -- 有数据\n\t\t\t\t\t\tlocal instant_data = alldataTable.data.list\n \n\t\t\t\t\t\tfor k, v in ipairs(instant_data) do\n\t\t\t\t\t\t\tlog.debug('bjdctk_2303 k=%s, value=%s', k, json.encode(v))\n\t\t\t\t\t\t\tlocal angle = tonumber(v.pntValue)\n\t\t\t\t\t\t\tlocal timeStr = v.created\n\t\t\t\t\t\t \n local data1 = {\n data = {\n angle = angle\n },\n device = child.id,\n time = timeStr,\n type = 1\n }\n table.insert(out.data, data1)\n \n\t\t\t\t\t\tend\n \n log.debug('bjdctk_2303 data:%s', json.encode(out))\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlog.debug('bjdctk_2303: request data error:%s body:%s', ack.code, ack.body)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\n\t\t\t end \n\t\t end\n\n else\n log.debug('bjdctk_2303: request data error:%s body:%s', ack.code, ack.body)\n end\n end\n ctx:done(json.encode(out))\nend\n\nSleep = function(n)\n local t0 = os.clock()\n while os.clock() - t0 <= n do\n end\nend\n\n\n\n INLINE 2020-07-20 17:55:23.988+08 2020-09-18 14:46:19.656+08 2020-07-20 \N
+683ffafc-6cea-44dc-83c5-b16f5227f820 MAS-FYLF \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua \nstart = function()\n log.debug('MAS-FYLF device=>%s', json.encode(device))\nend\n\n--30303030303038303436303030320a4c462b303034312e38386d6d38313037\nonData=function (recvHex)\n\t--主动上传式\n local out={\n\t--type = 2,\n\tdata ={},\n\tresult = {}\n }\n \n\tlocal checkLen=string.len(recvHex)/2\n log.debug("MASFYLF Received=>%s", recvHex)\n --log.debug("MASFYLF device = "..json.encode(device))\n -- 将recvData从十六进制的ascII转换成字符串\n if nil == recvHex and "" == recvHex then\n local message = '无效的数据,为空'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telseif checkLen<28 then --字节长度不够\n\t local errorMessage = '无效的数据,长度小于28'\n\t\tout.result = {code=5001,msg=errorMessage}\n\t\tout.data = {}\n else\n local recvStr = toStrHex(recvHex); -- 11111112222222 LF+0020.76mm8066\n log.debug("MASFYLF:recvStr=>%s", recvStr)\n if nil == recvStr and 35 > string.len(recvStr) then\n local message = 'Invalid Msg, or heartPack'\n out.result = {code=5001,msg=message}\n out.data = {}\n else\n local index = 1\n local startIndex = string.find(recvStr, "+") \n \t\tif startIndex==nil then\n \t\tstartIndex=string.find(recvStr, "-")\n \t\tindex=-1\n \tend\n \t\t\t\n \t\tstartIndex=startIndex+1\n local endIndex = string.find(recvStr, "m") - 1;\n local crackDistance = index*tonumber(string.sub(recvStr, startIndex+1, endIndex))\n log.debug("MASFYLF device = "..crackDistance)\n out.data = {\n crackDistance = crackDistance,\n }\n -- out.device = deviceId\n local resultData = json.encode(out)\n ctx:notify(resultData)\n end\n\n end\n\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n INLINE 2019-12-16 17:00:09.565+08 2020-08-06 16:24:00.72+08 2019-12-16 \N
+1f34194c-81bb-4957-927c-565b25060aa5 fs_645_1997_K \N 互感系数K 可以配置 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --68a0a1a2a3a4a568010243c3 +CS +16H CS=(68a0a1a2a3a4a56801021090的累加和)\n-- cmd=fefefefe6808440327000068010243c34f16 \nstart=function()\n log.debug("start %s, ctx=%s", "fs_ammeter.lua",json.encode(ctx.device))\n\n local endian = 'B'\n local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\n if string.len(moduleNo)<12 then\n local lenadd=12-string.len(moduleNo)\n for i=1,lenadd do\n moduleNo='0'..string.lower(moduleNo)\n end\n end\n --调换模块号字节序\n local newModuleNo=exchangeHtoL(moduleNo)\n\tlog.debug("fs_ammeter 设备模块通道 接口获取 m=%s",moduleNo)\n\n\tbuff=string.format("68%s68010243c3",newModuleNo) \n\tbuff="fefefefe"..buff..CheckPlusSum(buff,0,string.len(buff)/2)..'16'\n log.debug("fs_ammeter,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '采集超时'} \n\t log.debug("fs_ammeter m=%s, ok is false",moduleNo)\n\t ctx:done(json.encode(errout))\n\tend\nend\n--module=000027034408\n--FEFE6808440327000068810643C34C333333B816 =》0.19 \nunmarshall=function(hex,moduleNoStr)\n log.debug("fs_ammeter m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n local hexBCD=string.sub(hex,-6,-5)..string.sub(hex,-8,-7)..string.sub(hex,-10,-9)..string.sub(hex,-12,-11)\n log.debug("fs_ammeter m=%s,hexBCD=%s ",moduleNoStr,hexBCD)\n local totalenergy =tonumber(getData(hexBCD))/100\n\t\tlocal initialvalue=device.props.initial\n \tlocal k=device.props.K\n log.debug("fs_ammeter totalenergy=%s,initialvalue=%s,k=%s",totalenergy,initialvalue,k)\n \tlocal phy\n \tif k==nil then\n phy=totalenergy-initialvalue\n \telse\n phy=totalenergy * k - initialvalue\n \tend\n \n \tlog.debug("fs_ammeter m=%s,phy=%s ",moduleNoStr,phy)\n \tout.data = { \n readingNumber=phy\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("fs_ammeter m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n\nIsValid=function(data,moduleCheck)\n local data=string.gsub(data,'fefe','')\n log.debug("fs_ammeter 校验 data=%s",data)\n if data == nil or string.len(data)/2 ~= 18 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n if string.sub(data,1,2) ~='68' or string.sub(data,-2,-1) ~='16' then\t\n errormsg = 'Invalid acq heade or tail'\n errcode = 1004\n return false\n end\n\t\n local moduleCheckStr=string.sub(data,3,3+11)\n moduleCheckStr=exchangeHtoL(moduleCheckStr)\n if tostring(moduleCheck) ~= moduleCheckStr then\t\n errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleCheckStr,moduleCheck)\n errcode = 1004\n return false\n end\n log.debug("fs_ammeter 校验通过 m=%s,data=%s",moduleCheck,data)\n return true\n--crc\nend\n\nCheckPlusSum=function(hexStr, startIndex, endIndex)\n log.debug("fs_ammeter校验和 hexStr=%s,startIndex=%s,endIndex=%s ",hexStr,startIndex,endIndex)\n local sum = 0\n for i = startIndex, endIndex-1 do\n\t local byteSte=string.sub(hexStr,i*2+1,i*2+2)\n --log.debug("fs_ammeter校验和 i=%s, byteSte=%s",i,byteSte)\n sum = (sum + tonumber(byteSte,16))\n end \n local result = sum % 256\n log.debug("fs_ammeter 校验和 result=%s hex=%s",result,string.format("%x",result))\n return string.format("%02x",result)\nend\n\nexchangeHtoL=function(moduleStr)\n log.debug("fs_ammeter 交换 moduleStr=%s",moduleStr)\n local length=string.len(moduleStr)/2\n local newModuleStr=''\n for i=length-1,0,-1 do\n newModuleStr = string.sub(moduleStr,-1*(2*i+2),-1*(2*i+1))..newModuleStr\n end\n log.debug("fs_ammeter 交换newModuleStr=%s",newModuleStr)\n return newModuleStr\nend\n\ngetData=function(BCDstr)\n log.debug("fs_ammeter 获取数据 BCDstr=%s",BCDstr)\n local e_BCDstr=BCDstr --exchangeHtoL(BCDstr)\n local newBCDstr=''\n local len=string.len(e_BCDstr)/2\n for i=0,len-1,1 do\n local rawBCDbyte=string.sub(e_BCDstr,2*i+1,2*i+2)\n --log.debug("fs_ammeter 获取数据rawBCDbyte=0x%s",rawBCDbyte)\n local rawdata=tonumber(rawBCDbyte,16)-tonumber('33',16)\n --log.debug("fs_ammeter 获取数据 rawdata=%s",rawdata)\n newBCDstr = newBCDstr..string.format('%02x',rawdata)\n --log.debug("fs_ammeter 获取数据 newBCDstr=%s",newBCDstr)\n end\n return newBCDstr\nend INLINE 2020-08-13 09:47:47.908+08 2020-08-13 09:47:47.908+08 2020-08-13 \N
+98c55c29-6b3c-417e-bf4d-f373aef4b061 xmxdz_cx \N 1.0 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 f 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 Lua start=function()\n log.debug("xmxdz_cx.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n local moduleStr=device.uplink.props.module\n\tlocal loraid=device.props.loraid\n log.debug("xmxdz_cx [%s] Data, ctx=%s",moduleStr,hex)\n local out={\n data ={},\n result = {}\n\t\n }\n \n\n local ErrorCode = IsValid(hex,moduleStr,loraid)\n if ErrorCode then\n\t local xData = iota.hexToInt(hex,16,'B')/1000.0;\n local yData = iota.hexToInt(hex,20,'B')/1000.0;\n local zData = iota.hexToInt(hex,24,'B')/1000.0;\n local temp = iota.hexToShort(hex,28,'B')/100.0; \n\t\t\n\t\tlocal xDataint = iota.hexToInt(hex,30,'B')\n local yDataint = iota.hexToInt(hex,34,'B')\n local zDataint = iota.hexToInt(hex,38,'B')\n local tempint = iota.hexToShort(hex,42,'B')\n \n\n\t --local timeStr = string.sub(hex,33,60)\n\t\t--log.debug("xmxdz_cx timeStr=%s",timeStr)\n --dateTimeStr = toStrHex(timeStr)\n\t\t\t\t--log.debug("xmxdz_cx dateTimeStr=%s",dateTimeStr)\n local timenum = os.time()\n\n local timenow = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --timenow = unixtimestamp(dateTimeStr)\n\t \n \n\t\t out={\n\t\t\t\t data={ \n\t\t\t\t anglex=xData,\n angley=yData,\n anglez=zData,\n temperature\t=temp,\n\t\t\txDataint=xDataint,\n\t\t\tyDataint=yDataint,\n\t\t\tzDataint=zDataint,\n\t\t\ttempint=tempint\n\t\t\t\t },\n\t\t\t\t\ttime=timenow\n\t\t\t\t } \n \n \n \n \n \t\n local resultData =json.encode(out)\n log.debug("xmxdz_cx [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n ctx:notify(resultData)\n \n end \nend\n\nIsValid=function(data,deviceModule,deviceloraid)\nlog.debug("xmxdz_cx data=%s [%s] ",data,deviceModule)\n if data == nil then\n errormsg = 'xmxdz_cx:Data is nil'\n errcode = 1001\n \tlog.debug("xmxdz_cx [%s] %s",deviceModule,errormsg)\n return false\n end\n local dataModule= iota.hexToShort(data,12,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('xmxdz_mop module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("xmxdz_mop [%s] %s",deviceModule,errormsg)\n return false\n end\n local dataloraid= iota.hexToShort(data,4,'L')\n if (deviceloraid~=tostring(dataloraid)) then\n errormsg = string.format('xmxdz_mop loraid is wrong,dataloraid=%s≠%s',dataloraid,deviceloraid)\n errcode = 1001\n log.debug("xmxdz_mop [%s] %s",deviceloraid,errormsg)\n return false\n end\n\tif iota.hexToByte(data,14,'B') ~= 0xf0 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n log.debug("xmxdz_cx [%s] 校验通过",deviceModule)\n return true\n \nend\n \nunixtimestamp = function(datestr)\n \n local year = tonumber(string.sub(datestr,1,4))\n local month = tonumber(string.sub(datestr,5,6))\n local day = tonumber(string.sub(datestr,7,8))\n local hour = tonumber(string.sub(datestr,9,10))\n local minute = tonumber(string.sub(datestr,11,12))\n local second = tonumber(string.sub(datestr,13,14))\n\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2020-10-09 14:19:43.119+08 2020-11-26 09:55:48.083+08 2020-10-09 \N
+028bfee5-e1d0-4126-bc16-cb9cb13f7cb2 hdy_file_transfer \N 1.0 611a5d96-e77e-4ca6-925d-30609b1f57df 611a5d96-e77e-4ca6-925d-30609b1f57df f 611a5d96-e77e-4ca6-925d-30609b1f57df Lua start = function()\n log.debug('hdy_file_transfer devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n if data ~= nil then\n\tlog.error('hdy_file_transfer data is %s', json.encode(data))\n if data.type == 'idau/file' then\n if data.ext == '.d' or data.ext == '.dx' then\n log.debug('hdy_file_transfer .d文件 content = %s', data.payload)\n ParseFileD(data.payload)\n --else\n --log.error("hdy_file_transfer unsupported file type: %s", data.ext)\n end\n else\n log.error('hdy_file_transfer content type is not file, error recvd type is %s', data.type)\n end\n else\n log.error('hdy_file_transfer recvd content is nil')\n end\nend\n\nfunction ParseFileD(content)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n log.debug('hdy_file_transfer 内容 =%s', content)\n local jsons = Split(content, '\\r')\n for k, v in pairs(jsons) do\n log.debug('hdy_file_transfer k=%s,v=%s',k,v)\n if v ~= nil and v ~= '' then\n local jsondata = json.decode(v)\n if jsondata ~= nil and jsondata ~= '' then\n local childDevice = getDeviceInfo(jsondata.M)\n if childDevice ~= nil then\n log.debug('hdy_file_transfer 设备类型=%s,%s', childDevice.props.sensortype, json.encode(childDevice))\n if childDevice.props.sensortype == 'prism_L' then --直角棱镜\n local rst = {\n data = {\n easting = jsondata.RV[1],\n northing = jsondata.RV[2],\n height = jsondata.RV[3],\n eastingDiff = jsondata.PV[2],\n northingDiff = jsondata.PV[1],\n heightDiff = jsondata.PV[3],\n lengthDiff = jsondata.PV[4]\n \n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n }\n table.insert(out.data, rst)\n \t\telseif childDevice.props.sensortype == 'prism_L_0' then \n local rst = {\n data = {\n easting = jsondata.RV[1],\n northing = jsondata.RV[2],\n height = jsondata.RV[3],\n eastingDiff = jsondata.PV[1],\n northingDiff = jsondata.PV[2],\n heightDiff = jsondata.PV[3],\n\t\t\t\t\t\t\t\taddeastingDiff = jsondata.TV[1],\n addnorthingDiff = jsondata.TV[2],\n addheightDiff = jsondata.TV[3]\n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n }\n table.insert(out.data, rst)\n end\n else\n end\n end\n end\n end\n log.debug('hdy_file_transfer result = %s', json.encode(out))\n ctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid)\n log.debug('hdy_file_transfer 查询子设备 moduleid=%s', moduleid)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices\n for i, subdevice in pairs(subdevices) do\n local Point_id = subdevice.uplink.props.node_id\n if tostring(Point_id) == tostring(moduleid) then\n log.debug('hdy_file_transfer m=%s,2匹配到设备=%s', Point_id, json.encode(subdevice))\n return subdevice\n else\n end\n end\n log.debug('hdy_file_transfer has no device Point_id=%s', moduleid)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('hdy_file_transfer has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend INLINE 2021-01-07 08:45:15.763+08 2021-01-18 13:04:25.887+08 2021-01-07 \N
+795ac977-d4b1-4743-bfe1-ae7830419b5e hyzz_1012 \N 1.0 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 f 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 Lua \nstart = function()\n --log.debug('hzyy_1012 device=%s', json.encode(device))\n\t--log.debug('hzyy_1012 device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n \n local moduleNo = device.uplink.props.id --模块\n\n log.debug('hzyy_1012', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n \n log.debug('hzyy_1012 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n local sn=bodypkg['sn']\n\tlocal timeStamps=tonumber(bodypkg['stamp'])\n\tlocal timenow=os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamps)\n\tlog.debug('hzyy_1012 [%s] 时间戳', tonumber(timeStamps))\n local accel_x=tonumber(bodypkg['accel_x'])\n\tlocal accel_y=tonumber(bodypkg['accel_y'])\n\tlocal accel_z=tonumber(bodypkg['accel_z'])\n\n\n\t\n\t\n\tif tonumber(sn) == tonumber(moduleNo) then\n\tout={\n data={\n\t xacceleration=accel_x,\n\t yacceleration=accel_y,\n\t zacceleration=accel_z\n },\n\t time=timenow\n\t}\n\tend\n\n\t\n log.debug('hzyy_1012 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend INLINE 2021-01-28 08:50:05.066+08 2021-01-28 08:57:48.874+08 2021-01-28 \N
+5f27ec35-2a3a-4e9c-9813-70525f544cd4 hzyy_http \N 1.0 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 f 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 Lua \nstart = function()\n log.debug('hzyy_http device=%s', json.encode(device))\n\tlog.debug('hzyy_http device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n\n log.debug('hzyy_http', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n \n log.debug('hzyy_http [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n \n\tlocal sn=bodypkg['sn']\n\tlocal acc_y_cur=bodypkg['acc_y_cur']\n\t\n\tlocal tilt_z_init=bodypkg['tilt_z_init']\n\tlocal tilt_y_init=bodypkg['tilt_y_init']\n\tlocal tilt_x_init=bodypkg['tilt_x_init']\n\t\n\tlocal tilt_x_cur=bodypkg['tilt_x_cur']\n\tlocal tilt_z_cur=bodypkg['tilt_z_cur']\n local tilt_y_cur=bodypkg['tilt_y_cur']\n\t\n\tlocal acc_x_cur=bodypkg['acc_x_cur']\n\tlocal acc_z_cur=bodypkg['acc_z_cur']\n\tlocal acc_y_cur=bodypkg['acc_y_cur']\n\t\n\t\n\t\tlocal wire_cur=bodypkg['wire_cur']\n\t\tlocal wire_init=bodypkg['wire_init']\n local offset=wire_cur-wire_init\n\t\tif tonumber(sn) == tonumber(moduleNo) then\n\t\t\tout.data={\n\t\t\t\tacc_x_cur=acc_x_cur,\n offset=offset,\n\t\t\t\tacc_z_cur=acc_z_cur,\n\t\t\t\tacc_y_cur=acc_y_cur,\n\t\t\t\ttilt_x_init=tilt_x_init,\n\t\t\t\ttilt_y_init=tilt_y_init,\n\t\t\t\ttilt_z_init=tilt_z_init,\n\t\t\t\ttilt_z_cur=tilt_z_cur,\n\t\t\t\ttilt_x_cur=tilt_x_cur,\n\t\t\t\ttilt_y_cur=tilt_y_cur,\n\t\t\t\twire_init=wire_init,\n\t\t\t\twire_cur=wire_cur\n\t\n\t }\n\t\n\t \n\t\n\tend\n\n\n log.debug('hzyy_http [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend INLINE 2020-09-04 13:22:02.058+08 2020-10-21 09:50:48.901+08 2020-09-04 \N
+bcd22974-e902-4447-87c0-bfba8144410b gx_pressure_6901 \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --D:\\SVN\\201901项目\\20190123工讯紧急添加\\MAS-HLS使用说明书.pdf\nstart=function()\n local endian = 'B'\n local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("gx_pressure_6901 设备模块 m=%s ",moduleNo)\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x16, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n \tbuff=iota.appendHexByte(buff, 0x12, endian) \n --buff=iota.appendHexByte(buff, 0x02, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("gx_pressure_6901,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '采集超时'} \n\t ctx:done(errout)\n\tend\nend\n--module=13\n--0d030016001224cf\n--0d032443b6f8ed0000000000000000447a000000000000447a0000487176c64a9d7ffc41faaf0b04cc \n--"pressure": 365.945,\n--"temperature": 31.335\nunmarshall=function(hex,moduleNoStr)\n log.debug("gx_pressure_6901 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local pressure =iota.hexToFloat(hex,3,'B')\n local temperature =iota.hexToFloat(hex,35,'B')\n \n out.data = { \n pressure=tonumber(string.format('%0.3f',pressure)),\n \t\ttemperature=tonumber(string.format('%0.3f',temperature))\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("gx_pressure_6901 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 41 then --9\n errormsg = string.format('返回数据长度无效=%s≠41[%s]',string.len(data)/2,data)\n errcode = 1002\n return false\n end\n \n local dataMoudle=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataMoudle) then\t\n errormsg = string.format('模块号无效=%s≠%s[%s]',dataMoudle,moduleCheck,data)\n errcode = 1003\n return false\n end\n return true\n--crc\nend\n INLINE 2019-01-24 11:50:35.432+08 2020-06-16 11:30:44.299+08 2019-01-24 \N
+20e5b611-c9db-40df-9af4-d3a28d5958f4 anxin_rain \N 雨量计 主动上报(标准协议) 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start=function()\n log.debug("anxin_rain.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n local moduleStr=device.uplink.props.module\n log.debug("anxin_rain [%s] Data, ctx=%s",moduleStr,hex)\n local out={\n data ={},\n result = {}\n\t\n }\n \n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n\t local hourrain = iota.hexToShort(hex,24,'B')/100\n local minrian = iota.hexToShort(hex,26,'B')/100\n\t local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anxin_rain timeStr=%s",timeStr)\n dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anxin_rain dateTimeStr=%s",dateTimeStr)\n timenow = unixtimestamp(dateTimeStr)\n\t\t\t\t\n\t\t out={\n\t\t\t\t data={ \n\t\t\t\t Hourrain=hourrain,\n Minrian =minrian\n\t\t\t\t },\n\t\t\t\t\ttime=timenow\n\t\t\t\t }\n \n \n \n \n \t\n local resultData =json.encode(out)\n log.debug("anxin_rain [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n ctx:notify(resultData)\n else\n out.result = {code = errcode, msg = errormsg}\n ctx:done(json.encode(out))\n end \nend\n\nIsValid=function(data,deviceModule)\n if data == nil then\n errormsg = 'anxin_rain:Data is nil'\n errcode = 1001\n \tlog.debug("anxin_rain [%s] %s",deviceModule,errormsg)\n return false\n end\n\n local dataModule= iota.hexToShort(data,6,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('anxin_rain module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("anxin_rain [%s] %s",deviceModule,errormsg)\n return false\n end\n\n log.debug("anxin_rain [%s] 校验通过",deviceModule)\n return true\n \nend\n \nunixtimestamp = function(datestr)\n \n local year = tonumber(string.sub(datestr,1,4))\n local month = tonumber(string.sub(datestr,5,6))\n local day = tonumber(string.sub(datestr,7,8))\n local hour = tonumber(string.sub(datestr,9,10))\n local minute = tonumber(string.sub(datestr,11,12))\n local second = tonumber(string.sub(datestr,13,14))\n\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2019-12-18 13:35:30.457+08 2019-12-19 08:50:28.286+08 2019-12-18 \N
+cf7c40e3-05b5-4080-9814-8daf77e75127 ct_laser_9507 \N C型激光测距仪协议 1.0 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 f 912b4b9f-1c00-450b-911e-a85f4c1fe1f5 Lua -- //04 项目资料/上海地下院/C型激光传感器说明书160924.pdf\nstart = function()\n log.debug(' load script %s, moduleId=%s', ' BJdh.lua', device.uplink.props.module or '[nil]')\n local endian = 'B'\n local buff = ''\n local moduleNo\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n\n log.debug(' whct_CHT-GHLMXXC 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n else\n moduleNo = device.props.moduleId\n log.debug(' whct_CHT-GHLMXXC 设备模块通道 属性获取 m=%s,c=%s 接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n end\n\n buff = iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n log.debug(' whct_CHT-GHLMXXC buff=%s', buff)\n buff = buff .. '0320010002'\n log.debug(' whct_CHT-GHLMXXC bufff=%s', buff)\n buff = iota.appendHexCrc(buff, 'L', 0) -- 2: CRC\n log.debug(' whct_CHT-GHLMXXC buff2=%s', buff)\n ok, resp = ctx:ssend(buff, 30000) --发送指令\n --local result="{}"\n if ok then\n -- print(string.format("out=%s,data=%s",resp, result))\n log.debug(' whct_CHT-GHLMXXC aaaaa')\n result = unmarshall(resp)\n else\n local errout = {\n data = {},\n result = {}\n }\n errout.result = {code = 1001, msg = '采集超时'}\n result = json.encode(errout)\n end\n ctx:done(result)\nend\n\nunmarshall = function(hex, out)\n out = {\n type = 1,\n data = {},\n result = {}\n }\n log.debug(' whct_CHT-GHLMXXC vvvv')\n local ErrorCode = IsValid(hex)\n if ErrorCode then\n log.debug('whct_CHT-GHLMXXC there')\n\n local length = iota.hexToUInt(hex,3,'B') / 10000.0\n\n log.debug('whct_CHT-GHLMXXC length=%s', length)\n local data = ''\n out.data = {\n length = length\n }\n log.debug('whct_CHT-GHLMXXC data=%s', data)\n else\n out.result = {code = errcode, msg = errormsg}\n end\n return json.encode(out)\nend\n\nIsValid = function(data, out)\n log.debug(' whct_CHT-GHLMXXC 开始校验数据')\n if data == nil or string.len(data) / 2 ~= 9 then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n\n if iota.hexToByte(data, 1, 'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False '\n return false\n end\n if iota.hexToByte(data, 3, 'B') == 0x7f and iota.hexToByte(data, 4, 'B') == 0xff and iota.hexToByte(data, 5, 'B') == 0xff and iota.hexToByte(data, 6, 'B') == 0xff then\n errormsg = 'Invalid Data'\n errcode = 1001\n return false\n end\n log.debug(' whct_CHT-GHLMXXC 数据校验通过')\n return true\n --crc\nend\n INLINE 2017-09-09 13:52:57.015+08 2019-12-19 10:08:19.004+08 2017-09-09 \N
+821360a5-ada6-40f1-987f-4f9e14982c4f cdaj_yl \N 1.0 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e f 8d49238d-6e0e-421c-adaf-f7472ec0b50e Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''--采集数据命令\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x01, endian)\n \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\t \n\n \n ok1,resp=ctx:ssend(buff,4000)\n\t \n local result="{}"\n if ok1 then\n\t\n\t\t\tresult = unmarshall(resp)\n\t\t\t\n\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n \n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==14) then\n local rainfall\t = iota.hexToUShort(hex,3,'B')/10.0;\n\t\t\n out.data = {\n rainfall\t=rainfall\t\n }\n \n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2020-08-13 11:33:20.07+08 2020-08-14 15:22:31.215+08 2020-08-13 \N
+7f6d7a19-6752-4542-9a34-7baec15394d5 YS_VW100X \N 1.0 eb348dfa-0075-47b5-b190-4e10b6c5c6be eb348dfa-0075-47b5-b190-4e10b6c5c6be f eb348dfa-0075-47b5-b190-4e10b6c5c6be Lua onData = function()\nend\n\nstart = function()\n log.debug('YS_VW100X loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n log.debug('YS_VW100X device=%s', json.encode(device))\n out = {\n type = 2,\n data = {},\n result = {}\n }\n local endian = 'B'\n local buff = ''\n local moduleNo\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = device.uplink.props.module\n --模块通道优先接口获取\n\n log.debug('YS_VW100X 设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n else\n moduleNo = device.props.moduleId\n\n log.debug('YS_VW100X 设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n end\n buff = buff .. 'F7601269'\n buff = iota.appendHexByte(buff, moduleNo, endian)\n --1:模块号\n buff = buff .. '0010000102030405060708090A0B0C0D0E0F'\n --1:指令:采集\n local wCRCin = 0x0000\n local wCPoly = 0x1021\n local wChar = 0\n local usDataLen = string.len(buff) / 2\n log.debug('YS_VW100X usDataLen = %s', usDataLen)\n local var = 0\n while usDataLen > 0 do\n var = var + 1\n wChar = string.sub(buff, var, var + 1)\n var = var + 1\n wChar = tonumber(wChar, 16)\n wChar = bit.lshift(wChar, 8) --左移\n wCRCin = bit.bxor(wCRCin, wChar)\n for i = 0, 7 do\n local value = bit.band(wCRCin, 0x8000)\n if value > 0 then\n wCRCin = bit.lshift(wCRCin, 1) --左移\n wCRCin = bit.bxor(wCRCin, wCPoly) --异或\n if wCRCin > 0xFFFF then\n wCRCin = wCRCin - 0x10000\n end\n else\n wCRCin = bit.lshift(wCRCin, 1) --左移\n if wCRCin > 0xFFFF then\n wCRCin = wCRCin - 0x10000\n end\n end\n end\n --log.debug("YS_VW100X END wCRCin = %X",wCRCin)\n usDataLen = usDataLen - 1\n end\n buff = buff .. string.format('%04X', wCRCin)\n log.debug('YS_VW100X END buff = %s', buff)\n --ctx:asend(buff)\n --ctx:sleep(10)\n\t--ctx:asend(buff)\n ok, resp = ctx:ssend(buff, 80000)\n\n if ok then\n local ErrorCode = IsValidOut(resp)\n if ErrorCode then\n log.debug('YS_VW100X 数据有效=%s', resp)\n allSubData = getAllDatas(resp)\n --发送指令\n local subdevices = device.dnlinks[1].devices\n\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do --插入16个通道\n \tlog.debug('YS_VW100X child=%s', json.encode(child))\n channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t--if allSubData[channelNo]~=nil and allSubData[channelNo]>500 then\n \tlog.debug('YS_VW100X 解析通道%s数据', channelNo)\n \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n \ttable.insert(out.data, result)\n \t--end\n end\n end\n else\n log.debug('YS_VW100X 数据无效=%s', resp)\n out.result = {code = ercode, msg = erormsg}\n end\n else\n log.debug('YS_VW100X ok=false')\n out.result = {code = '1002', msg = 'ok=false'}\n end\n\n local resultData = json.encode(out)\n log.debug('YS_VW100X resultData=%s', resultData)\n ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n local DataList = {}\n local subDataArea = string.sub(hexStr, 15, -5)\n local dataCount = string.len(subDataArea) / 10\n for i = 1, dataCount do\n local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 10 + 1, (i - 1) * 10 + 10)\n local channelStr = string.sub(singleChannelDataHex, 2, 2)\n local subChannel = tonumber(channelStr, 16)+1\n local subData = string.sub(singleChannelDataHex, 3, -1)\n DataList[subChannel] = iota.hexToFloat(subData, 0, 'L')\n \tlog.debug('YS_VW100X getAllDatas DataList[%s]=%s',subChannel,DataList[subChannel])\n end\n return DataList\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n log.debug('YS_VW100X datatable=%s', json.encode(datatable))\n local subData = {\n type = 1,\n data = {},\n device = '',\n result = {}\n }\n local freq = datatable[subChannelId]\n local temp = datatable[subChannelId+8]\n if childDevice ~= nil then\n if childDevice.uplink.capabilities[1].formula.metaid == '41d90649-a6bb-4671-b100-c37a75836437' then --振弦公式\n local k = tonumber(childDevice.uplink.capabilities[1].formula.props.K)\n\n local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n\t\t\tlocal kt = tonumber(childDevice.uplink.capabilities[1].formula.props.Kt)\n\t\t\tlocal t0 = tonumber(childDevice.uplink.capabilities[1].formula.props.To)\n log.debug('YS_VW100X module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s,kt=%s,temp=%s', moduleNoStr, subChannelId, childDevice.id, k, f0, freq,kt,temp)\n --log.debug('YS_VW100X module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil and freq ~= nil and temp ~= nil then\n Phy = k * (freq ^ 2 - f0 ^ 2)+ kt * (temp - t0) \n end\n end\n\t\t log.debug('YS_VW100X freq=%s,Phy=%s', freq, Phy)\n singleData = {\n data = {\n\t\t\t temperature=tonumber(string.format('%0.2f',temp)),\n frequency = tonumber(string.format('%0.2f',freq)),\n physicalvalue = tonumber(string.format('%0.4f',Phy))\n },\n device = childDevice.id,\n type = 1\n }\n end\n --end\n\n --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n if device.dnlinks ~= nil then\n for k, dnlink in pairs(device.dnlinks) do\n for v, subdevice in pairs(dnlink.devices) do\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n log.debug('YS_VW100X has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('YS_VW100X has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\nIsValidOut = function(checkdata)\n log.debug('YS_VW100X 开始校验数据=%s', checkdata)\n\n local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n if hexHeader ~= 0xF7 then\n ercode = 1001\n erormsg = 'HexCMD False'\n log.debug('YS_VW100X HexCMDFalse[%s]', hexHeader)\n return false\n end\n return true\n --crc\nend INLINE 2020-12-10 15:59:08.478+08 2020-12-22 09:04:15.372+08 2020-12-10 \N
+7fcae220-3a13-4230-947b-bb49d6b23b3d fs_inclinometer_1502 \N 1.0 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f 67c8b9e9-38d6-4c9a-8772-9c96d78121ed Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "yx_1502", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff=''\n buff=iota.appendHexWord(buff, 21, endian) -- 2: 类型=21\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("yx_1502 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("yx_1502 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\tlog.debug("yx_1502 moduleNo=%s 接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n buff=iota.appendHexWord(buff, moduleNo, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 1, endian) -- 1: 指令: 0x01 = 采集\n buff=iota.appendHexCrc(buff, endian ,0) -- 2: CRC\n\n log.debug("yx_1502 ssend=%s",buff )\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo) \n \tlog.debug('yx_1502 module %s result = %s',moduleNo,result)\n ctx:done(result)\n else\n\n end\n\nend\n\n\n\n--00152228818FEA0D710E400FCBFFF50877FFF96B7B789E\n--moduleId=8744 \n--"temp": 40.43,\n--"xDegree": -0.718729,\n--"yDegree": -0.431237\n--print("parsing data", hex)\n\n\nunmarshall=function(hex,moduleStr)\n\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local scale=1000000.00;\n local Temp = iota.hexToShort(hex,11,'B')/100.0;\n local xa = iota.hexToInt(hex,13,'B')/scale;\n local ya = iota.hexToInt(hex,17,'B')/scale;\n out.data = {\n temperature=Temp,\n anglex = tonumber(string.format("%5.2f",xa)),\n angley = tonumber(string.format("%5.2f",ya))\n };\n\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n log.debug('yx_1502 module %s 开始校验数据%s',moduleNo_check,data)\n if data == nil or string.len(data)/2 ~= 23 then\n errormsg = 'Data is nil or invalid'\n errcode = 1002\n return false\n end\n \n if iota.hexToByte(data,4,'B') ~= 0x81 then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n return false\n end\n\t--local moduleNo_check=device.props.moduleId or device.uplink.props.module\n local dataModule=iota.hexToShort(data,2,'B')\n if tostring(moduleNo_check) ~= tostring(dataModule) then\t\n errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNo_check,dataModule)\n errcode = 1004\n return false\n end\n log.debug('yx_1502 module %s 数据校验通过',moduleNo_check)\n return true\n--crc\nend\n \n\n\n \n\n INLINE 2020-04-10 15:08:09.981+08 2020-04-10 15:08:09.981+08 2020-04-10 \N
+a5fa6229-dace-45db-8d8b-0268e2c892b2 fs_rain_1601 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//D:\\SVN\\201909项目\\RS-YL-N01-1翻斗式雨量计485型用户手册.pdf\nstart=function()\n\t--log.debug("load script %s, moduleId=%s", "fs_rain_1601", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff='' \t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t--log.debug("fs_rain_1601 设备模块 m==%s ",moduleNo)\n\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n\tbuff=iota.appendHexWord(buff, 0x00, endian) \n\tbuff=iota.appendHexWord(buff, 0x01, endian) \t\n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n ok,resp=ctx:ssend(buff,15000)\n --log.debug('fs_rain_1601 发送 采集指令=%s',buff)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\t \n \t--log.debug('fs_rain_1601 接收数据=%s',resp)\n\t\t\n\t\tlocal r1,r1ok = redis.get(device.id.."_clearTime") --获取上次记录时间\n\t\t--log.debug("fs_rain_1601 读取 r1=%s,r1ok=%s",r1,r1ok)\n\t\tlocal clearTime\n\t\tif r1ok and r1~=nil then\n\t\t\tclearTime=tonumber(r1)\n\t\t\tlocal timeSpan=os.time()-clearTime\n\t\t\t--log.debug("fs_rain_1601 r1=%s,r1ok=%s,clearTime=%s",r1,r1ok,clearTime)\t\n\n\t\t\tif timeSpan>=3600 then\n\t\t\t\tlocal isclearOK=clearCmd(moduleNo)\n\t\t\t\t--log.debug('fs_rain_1601 下发清空[%s]',isclearOK)\n\t\t\telse\n\t\t\t --log.debug('fs_rain_1601 时间差=[%s]',timeSpan)\n\t\t\tend\n\t\t\t\n\t\telse\n\t\t\tclearTime=os.time()--第一次默认当前时间\n\t\t\tredis.set(device.id.."_clearTime", tostring(clearTime))\n\t\t\t--log.debug("fs_rain_1601 更新 r1=%s,r1ok=%s",r1,r1ok)\n\t\tend\n\t\t\n\t\t\n else\n\t --log.debug('fs_rain_1601 数据采集失败')\n end\n ctx:done(result)\nend\n\n\n\nclearCmd=function(deviceModule)\n\t --下发 清空雨量\n\t\tlocal buuf_clear=''\n\t\tbuuf_clear=iota.appendHexByte(buuf_clear,deviceModule, endian) \n\t\tbuuf_clear=iota.appendHexByte(buuf_clear, 0x06, endian) \n\t\tbuuf_clear=iota.appendHexWord(buuf_clear, 0x00, endian) \n\t\tbuuf_clear=iota.appendHexWord(buuf_clear, 0x5a, endian) \t\n\t\tbuuf_clear=iota.appendHexCrc(buuf_clear, 'L' ,0) \t\n\t ok1,resp1=ctx:ssend(buuf_clear,15000)\n log.debug('fs_rain_1601 发送 清空指令=%s',buuf_clear)\n if ok then\n if resp1==buuf_clear then\n return true\n end\n else\n \n end\n\t return false\n\nend\n\n--雨量应答 2.7\n\n--010302001bf84f\n\n\n--清零应答 返回和下发一样\n--01060000005a09f1\nunmarshall=function(hex,moduleStr)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local rain = iota.hexToUShort(hex,3,'B')/10;\n out.data = {\n rain = rain\n };\n\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n --log.debug('fs_rain_1601 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 < 7 or string.len(data)/2 > 7 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1002\n errormsg = '返回功能码不是0x03' \n return false\n end\n \tlocal dataModule=tostring(iota.hexToByte(data,0,'B'))\n if moduleNo_check ~= dataModule then\t\n errormsg = string.format('数据内模块号[%s]不匹配设备模块号[%s]',dataModule,moduleNo_check)\n errcode = 1004\n return false\n end\n log.debug('数据校验通过')\n return true\n--crc\nend\n INLINE 2019-09-29 15:39:36.093+08 2020-04-15 10:44:44.302+08 2019-09-29 \N
+0ec2d3bc-8485-4a34-b820-7241990fc394 FS-FSFXY-B \N 超声波风速风向-B 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n协议号: 1.0;\n协议名: FS-FSFXY-B\n]]--liankang\nstart=function ()\n --log.debug("FSFSFXYB start %s, ctx=%s", "Inclination_Sensor.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\t--log.debug("FSFSFXYB encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\t--log.debug("FSFSFXYB decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='#';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE); -- 模块号(地址)\n\tbuff = buff.."R\\r"\n\treturn buff \nend\n\n-- decode \n-- returns: 结果, \n-- 正确回复 >1.8,97.00 \n-- 原始数据 \nfunction protocol_decode(da)\n\t\n\tlocal dataStr = toStrHex(da);\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\t--log.debug("FSFSFXYB decoded"..dataStr)\n\t-- 判断数据有效性\n\tif inValid(dataStr) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telse\n\t\tlocal dotIndex = string.find(dataStr, ",")\n\t\t--log.debug("FSFSFXYB dotIndex ="..json.encode(dotIndex))\n\t\t--log.debug("FSFSFXYB dotIndex ="..string.sub(dataStr, 2, dotIndex - 1))\n\t\t--log.debug("FSFSFXYB dotIndex ="..string.sub(dataStr, dotIndex + 1, string.len(dataStr) -1))\n\t\tlocal windSpeed = tonumber(string.sub(dataStr, 2, dotIndex - 1))\n\t\tlocal windDirection = tonumber(string.sub(dataStr, dotIndex + 1, string.len(dataStr) -1))\n\t\tout.data = {\n\t\t\twindSpeed = windSpeed,\n\t\t\twindDirection = windDirection,\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif '>' ~= string.sub(data, 1, 1) and nil == data then -- 第一个字符不等于 ">"\n\t\t--log.debug("FSFSFXYB first"..dataStr)\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n\t\tlocal bi = iota.hexToByte(hex,i-1,'B')\n\t\tlocal ascii =string.format("%c",bi)\n\t\tstr=str..ascii\n\tend\n\treturn str\nend\n INLINE 2019-12-12 14:17:55.167+08 2020-04-16 09:57:10.726+08 2019-12-12 \N
+7fb4d0a4-2890-4ce3-a95d-5e4893fb7b8b xmxd_mop \N 1.0 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 f 2cdb8012-dd24-4570-b6c0-be0c8ca414f5 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "anXin_inclino_1550.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\tlocal aa=''\n\t \n aa=iota.appendHexByte(aa, 0xFF, endian) --1: 帧头\n aa=iota.appendHexByte(aa, 0x41, endian)\n aa=iota.appendHexByte(aa, 0x58, endian)\n aa=iota.appendHexByte(aa, 0x4a, endian)\n aa=iota.appendHexWord(aa, 2, endian) -- 2: 类型=1\n aa=iota.appendHexWord(aa, device.uplink.props.module, endian) -- 3: 模块号\n aa=iota.appendHexByte(aa, 1, endian) -- 4: 指令: 0x01 = 采集\n aa=iota.appendHexCrc(aa, endian ,0) \n bb='0d245f'\n\tbb=iota.appendHexWord(bb, device.props.loraid, 'L')\n\tbb=bb .. aa\n\tlog.debug('xmxdz_mop bb=%s', bb)\n\tlocal lcr_str = CS(bb)\n\tlog.debug('xmxdz_mop lcr_str=%s', lcr_str)\n\tbuff='fe0d245f'\n\tbuff=iota.appendHexWord(buff, device.props.loraid, 'L')\n\tbuff= buff .. aa\n\tbuff=iota.appendHexByte(buff, lcr_str, endian)\n\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n \n local out={\n type = 1,\n data ={},\n result = {}\n }\n local moduleStr=device.uplink.props.module\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then\n local xDataint = iota.hexToInt(hex,30,'B')\n local yDataint = iota.hexToInt(hex,34,'B')\n local zDataint = iota.hexToInt(hex,38,'B')\n local tempint = iota.hexToShort(hex,42,'B')\n\t\t\n local xData = iota.hexToInt(hex,16,'B')/1000.0;\n local yData = iota.hexToInt(hex,20,'B')/1000.0;\n local zData = iota.hexToInt(hex,24,'B')/1000.0;\n local temp = iota.hexToShort(hex,28,'B')/100.0;\n out.data = {\n anglex=xData,\n angley=yData,\n anglez=zData,\n temperature\t=temp,\n\t\t\txDataint=xDataint,\n\t\t\tyDataint=yDataint,\n\t\t\tzDataint=zDataint,\n\t\t\ttempint=tempint\n };\n \n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\nIsValid=function(data,deviceModule)\nlog.debug("xmxdz_mop data=%s [%s] ",data,deviceModule)\n if data == nil then\n errormsg = 'xmxdz_mop:Data is nil'\n errcode = 1001\n \tlog.debug("xmxdz_mop [%s] %s",deviceModule,errormsg)\n return false\n end\n\n local dataModule= iota.hexToShort(data,12,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('xmxdz_mop module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("xmxdz_mop [%s] %s",deviceModule,errormsg)\n return false\n end\nif iota.hexToByte(data,14,'B') ~= 0x80 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n log.debug("xmxdz_mop [%s] 校验通过",deviceModule)\n return true\n \nend\nCS=function(buff)\n local lcr = 0\n for i = 0, string.len(buff)/2-1 do\n lcr = bit.bxor(lcr,tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\t\n end \n\tlog.debug('xmxdz_mop lcr=%s', lcr)\n\t\n local value= string.format("%#x",lcr)\n log.debug('xmxdz_mop value=%s', value)\n --local byte = string.sub(value,string.len(value)-1,string.len(value))\n \n return value\nend \n\n\n \n\n INLINE 2020-10-09 14:19:16.9+08 2020-11-26 09:44:34.292+08 2020-10-09 \N
+f91449ef-9148-402a-835c-2598b132968a 测试协议问题 \N 1.0 f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f2b3bb46-fba2-4a7a-a1f9-b88d86826cce f f2b3bb46-fba2-4a7a-a1f9-b88d86826cce Lua start=function()\n local task_k=35\n local taskid_new = 255 --默认是单任务的 task\n local kk\n kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n taskid_new = tonumber(kk, 16)\n log.debug("测试 结果 %s",taskid_new)\n ctx.done({})\nend INLINE 2020-11-27 14:47:35.728+08 2020-11-27 14:47:35.728+08 2020-11-27 \N
+b6893aa5-1010-4f9e-b20e-32084e9115e8 MAS_idau_cloudvibrat \N 提取云振动i文件解析 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua start=function()\n log.debug("MAS_idau_cloudvibrate : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n --log.debug("MAS_idau_cloudvibrate : recvd =%s", json.encode(data))\n \t--log.debug("MAS_idau_cloudvibrate : devid =%s", device.dnlink.props.module)\n if data ~=nil then\n if data.type == "idau/file" then \n if data.ext==".dat" then\n --log.debug("MAS_idau_cloudvibrate : recvd content = %s",data.payload)\n ParseFileDat(data.payload)\n else\n --log.error("MAS_idau_cloudvibrate : unsupported file type: %s", data.ext)\n end\n else\n --log.error("MAS_idau_cloudvibrate : content type is not file, error recvd type is %s", data.type)\n end\n else\n log.error("MAS_idau_cloudvibrate : recvd content is nil")\n end\nend\n\nfunction ParseFileDat(dathex)\n --log.debug("MAS_idau_cloudvibrate : dat content =%s,len =%s", dathex,string.len(dathex)/2)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n --log.debug("MAS_idau_cloudvibrate deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n local floatcount = (string.len(dathex)/2-40)/4\n --log.debug("MAS_idau_cloudvibrate begin parse count=%s",floatcount)\n local vols = {}\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n \t\tlocal data = string.sub(dathex,2*(offset+1)-1,-1) \t\t\n vols[i]= iota.hexToFloat(data,0,'L',6)\n end\n --log.debug("MAS_idau_cloudvibrate finish parse")\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n sampleFreq=samplefreq,\n filterFreq=filterfreq,\n gainAmplifier=gainamplifier,\n triggerType=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n }\n table.insert(out.data,rst)\n --log.debug("MAS_idau_cloudvibrate deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n ctx:notify(json.encode(out))\n else\n --log.debug("MAS_idau_cloudvibrate not found device module=%s channel=%s",deviceId,channel)\n end\nend\n\nfunction getDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n --log.debug("MAS_idau_cloudvibrate has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug("MAS_idau_cloudvibrate has no subdevices.")\n return nil -- 没有子设备\n end\nend\n INLINE 2019-10-24 11:26:11.593+08 2020-04-17 09:22:58.79+08 2019-10-24 \N
+604cddc0-1aa8-45f7-b0d8-e44a51b1278a idau_file_diag \N 诊断 1 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua start=function()\n log.debug("mas_idau_file:jiexi")\n end\n \nonData=function(data)\n --local jdata=json.encode(data)\n log.debug("mas_idau_file:data=%s",json.encode(data))\n if data ~=nil then\n if data.type == "idau/file" then \n if data.ext==".d" then\n --log.debug("mas_idau_file:payload=%s", data.payload)\n parseDiag(data.payload)\n else\n --log.error("mas_idau_file:type is not.d %s", data.name)\n end\n else\n --log.error("mas_idau_file:not a d file .d", data.ext)\n end\n else\n --log.error("mas_idau_file:data is nil")\n end\nend\nfunction parseDiag(js)\n local out={\n data ={},\n result = {},\n type=2\n }\n \n local djs=Split(js,'\\r')\n --log.debug("mas_idau_file:jsoncount=%s",#(djs))\n for k,v in ipairs(djs) do\n if v~='' and v~=nil then\n local dj=json.decode(v)\n --log.debug("mas_idau_file:dj=%s",v)\n --log.debug("fs_idau_file:sen=%s",dj.S)\n if dj~=nil and dj ~= '' and dj.R =="0" then\n --log.debug("mas_idau_file:ceshiyixia1")\n local childDevice=getDeviceInfo(dj.S)\n --log.debug("mas_idau_file:childDevice=%s",json.encode(childDevice))\n if childDevice~=nil and childDevice ~= {} then \n --log.debug("mas_idau_file:ceshiyixia2")\n --log.debug("mas_idau_file:dj.PV1=%s",dj.PV[1])\n\n if childDevice.props.sensortype=='cx' then --测斜\n local data1 ={\n data={\n anglex = dj.RV[1] or 0,\n angley= dj.RV[2] or 0,\n temperature= dj.RV[3] or 0, \n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data1)\n end\n \n if childDevice.props.sensortype=='wsd' then --温湿度\n local data2 ={\n data={\n temperature = dj.RV[1] or 0,\n humidity= dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data2)\n end\n if childDevice.props.sensortype=='yc' then --压差\n local data3 ={\n data={\n physicalvalue = dj.PV[1] or 0,\n frequency=dj.RV[1] or 0,\n temperature = dj.RV[2] or 0\n },\n device=childDevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n table.insert(out.data,data3)\n end\n if childDevice.props.sensortype=="zx" then --振弦\n --log.debug("mas_idau_file:ceshi_zx")\n local data4={\n data={\n physicalvalue = dj.PV[1] or 0,\n frequency=dj.RV[1],\n temperature=dj.RV[2],\n am=dj.RV[3]\n },\n device=childDevice.id,\n type=1, \n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60)) \n }\n --log.debug("mas_idau_file:out data4=%s",json.encode(data4))\n table.insert(out.data,data4)\n end\n\n end\n else\n --log.debug("mas_idau_file:dj=nil")\n end\n else\n --log.debug("mas_idau_file:v is nil v=%s",json.decode(v))\n end\n\n end\n local resultData =json.encode(out)\n --log.debug("mas_idau_file:".."LUA:resultData : data is =%s", json.encode(out))\n ctx:notify(resultData)\nend\n \n --string split函数\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n \n --获取采集仪下面的通道信息\nfunction getDeviceInfo(sensorId)\n local resensor=nil\n if device.dnlinks ~=nil then\n \n for i,link in pairs(device.dnlinks) do\n --log.debug("mas_idau_file:link=%s",json.encode(link))\n for j,node in pairs(link.devices) do\n --log.debug("mas_idau_file:node=%s",json.encode(node))\n for k,sublink in pairs(node.dnlinks) do\n --log.debug("mas_idau_file:sublink=%s",json.encode(sublink))\n for u,subdevice in pairs(sublink.devices) do\n --log.debug("mas_idau_file:sensor=%s",json.encode(subdevice))\n if subdevice.uplink.props.sensorid == sensorId then\n --log.debug("mas_idau_file:final_sensor %s=%s",subdevice.uplink.props.sensorid,sensorId)\n resensor = subdevice\n end \n end\n end\n end\n end \n end\n return resensor\nend\n\n\n INLINE 2018-03-15 13:37:28.546+08 2020-04-17 09:24:45.328+08 2018-03-15 \N
+3bcc969b-9e2f-4d39-9e23-4e778b30d2f4 mas_ktr3 \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n\t--log.debug("load script %s, moduleId=%s", "fs_1403", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\t--log.debug("fs_1502 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\t--log.debug("fs_1502 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\tlog.debug("fs_1403 moduleNo=%s 接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 3, endian) -- 3: 指令: 0x03 = 采集\n\tbuff=iota.appendHexWord(buff, 0, endian) \n\tbuff=iota.appendHexByte(buff, 0, endian) \n\tbuff=iota.appendHexByte(buff, 2, endian) \t\t\t--\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo) \n ctx:done(result)\n else\n\n end\n\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local length = iota.hexToFloat(hex,3,'B')\n out.data = {\n length=length/10\n };\n\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n log.debug('fs_1403 开始校验数据%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n\t--local moduleNo_check=device.props.moduleId or device.uplink.props.module\n if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('fs_1502 数据校验通过')\n return true\n--crc\nend\n \n\n\n \n\n INLINE 2018-12-24 14:35:27.506+08 2020-04-17 09:29:48.874+08 2018-12-24 \N
+2320be85-4d6f-4041-96c3-ddb2a166fbda fs_idau_cloudvibraty \N 提取云振动i文件解析 1.0 67c8b9e9-38d6-4c9a-8772-9c96d78121ed 67c8b9e9-38d6-4c9a-8772-9c96d78121ed f 67c8b9e9-38d6-4c9a-8772-9c96d78121ed Lua start=function()\n log.debug("yx_idau_cloudvibrate : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n log.debug("yx_idau_cloudvibrate : recvd =%s", json.encode(data))\n \t--log.debug("yx_idau_cloudvibrate : devid =%s", device.dnlink.props.module)\n if data ~=nil then\n if data.type == "idau/file" then \n if data.ext==".dat" then\n --log.debug("yx_idau_cloudvibrate : recvd content = %s",data.payload)\n ParseFileDat(data.payload)\n else\n --log.error("yx_idau_cloudvibrate : unsupported file type: %s", data.ext)\n end\n else\n --log.error("yx_idau_cloudvibrate : content type is not file, error recvd type is %s", data.type)\n end\n else\n --log.error("yx_idau_cloudvibrate : recvd content is nil")\n end\nend\n\nfunction ParseFileDat(dathex)\n --log.debug("yx_idau_cloudvibrate : dat content =%s,len =%s", dathex,string.len(dathex)/2)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n --log.debug("yx_idau_cloudvibrate deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n local floatcount = (string.len(dathex)/2-40)/4\n --log.debug("yx_idau_cloudvibrate begin parse count=%s",floatcount)\n local vols = {}\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n \t\tlocal data = string.sub(dathex,2*(offset+1)-1,-1) \t\t\n vols[i]= iota.hexToFloat(data,0,'L',6)\n end\n --log.debug("yx_idau_cloudvibrate finish parse")\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n sampleFreq=samplefreq,\n filterFreq=filterfreq,\n gainAmplifier=gainamplifier,\n triggerType=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n }\n table.insert(out.data,rst)\n --log.debug("yx_idau_cloudvibrate deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n ctx:notify(json.encode(out))\n else\n --log.debug("yx_idau_cloudvibrate not found device module=%s channel=%s",deviceId,channel)\n end\nend\n\nfunction getDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n --log.debug("yx_idau_cloudvibrate has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n --log.debug("yx_idau_cloudvibrate has no subdevices.")\n return nil -- 没有子设备\n end\nend\n INLINE 2019-08-22 11:50:05.409+08 2020-04-17 09:36:00.206+08 2019-08-22 \N
+793c95c5-e27e-4a03-82a1-ed7c0df8674a cdaj_trwsd \N 1.0 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e f 8d49238d-6e0e-421c-adaf-f7472ec0b50e Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''--采集数据命令\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x02, endian)\n \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\t \n\n \n ok1,resp=ctx:ssend(buff,4000)\n\t \n local result="{}"\n if ok1 then\n\t\n\t\t\tresult = unmarshall(resp)\n\t\t\t\n\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n \n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==18) then\n local humidity\t\t = iota.hexToUShort(hex,3,'B')/10.0\n\t\tlocal temperature\t\t = iota.hexToUShort(hex,5,'B')/100-20\n\t\t\n out.data = {\n humidity\t=humidity\t,\n\t\t\ttemperature=temperature\n }\n \n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2020-08-14 13:34:36.962+08 2020-08-14 15:35:05.262+08 2020-08-14 \N
+529c4341-8afa-4589-b3af-43a087988e34 xmxd_liquidLevel \N 工讯贴牌MAS-JLSZ-CSB 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --require "functions " -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]]\n--\\201809项目\\20180907项目资料提交\\1、沉降监测--厦门忻德--梁少龙\nstart=function()\n log.debug("start %s, ctx=%s", "xmxd_liquidLevel_1950.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("xmxd_liquidLevel_1950 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\n\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x02, endian) -- 水位2 水温1\n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("xmxd_liquidLevel_1950,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1004, msg = 'time is out and ok is false'} \n\t log.debug("xmxd_liquidLevel_1950 m=%s, ok is false",moduleNo)\n\t ctx:done(errout)\n\tend\nend\n--01040440c50a34f90e\n-- level=165.81\n--temp=26.12\nunmarshall=function(hex,moduleNoStr)\n log.debug("xmxd_liquidLevel_1950 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local length =iota.hexToUShort(hex,3,'B')/100\n\t\tlocal temperature =iota.hexToUShort(hex,5,'B')/100\n \n \tlocal kt=device.props.kt\n \tlocal t0=device.props.t0\n \tlocal len=length+kt*(temperature-t0)\n\t\t\n log.debug("xmxd_liquidLevel_1950 m=%s,temperature=%s ",moduleNoStr,temperature)\n out.data = { \n length=tonumber(string.format('%0.3f',len)),\n\t\t\ttemperature=temperature\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("xmxd_liquidLevel_1950 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n errcode = 1001\n return false\n end\n \n if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n INLINE 2020-04-21 13:40:56.302+08 2020-04-21 14:14:44.233+08 2020-04-21 \N
+65918029-7aa5-44f6-aefb-0f2d55470e9b http_wifiperson \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug('http_wifiperson LUA http server start')\nend\n\nonData = function(httpbody, index)\n\tlocal out={\n\t\ttype = 1,\n\t\tdata ={},\n\t\tresult = {}\n\t}\n \t\n moduleNo = device.uplink.props.id --模块\n log.debug('http_wifiperson [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n local bodydataStr = httpbody.Body\n local bodydata = json.decode(bodydataStr)\n\tlocal datais =string.find(bodydataStr,"data")\n\tlocal iscon = "true"\n\tlog.debug('http_wifiperson [%s] cnt=%s', moduleNo,datais)\n\tif datais == nil then\n\t\tasend_HttpResponse(iscon)\n\telse\n \t iscon = "false"\n\t\tasend_HttpResponse(iscon)\n end\n \tlocal module = bodydata.SN\n\tlocal electricity = bodydata.EQ\n\tlocal dataTable = bodydata.data\n\tif datais then\n\t\tif #(bodydata.data) ~= 0 then\n\t\t\tfor k=1, #(bodydata.data) do\t\t\t\n\t\t\t\tlocal RTime = bodydata.data[k].T\n\t\t\t\t--log.debug('http_wifiperson [%s] module = %s Time =%s ',moduleNo,module,RTime)\n\t\t\t\tlocal T = unixtimestamp(RTime,module)\n\t\t\t\tlocal data_in = bodydata.data[k].IN\n\t\t\t\tlocal data_out = bodydata.data[k].OUT\n\t\t\t\tlocal fs = bodydata.data[k].FS\t\t\t\t\t\t\n\t\t\t\t--log.debug("http_wifiperson [%s] fs= %s data_in = %s data_out %s electricity %s",moduleNo,fs,data_in,data_out,electricity)\n\t\t\t\tif fs == 0 then \n\t\t\t\t\tout.data={\n\t\t\t\t\t\tdata_in = data_in or 0,\n\t\t\t\t\t\tdata_out = data_out or 0\n\t\t\t\t\t} \n\t\t\t\t\tout.time = T\n\t\t\t\telse\n\t\t\t\t\tlocal errormsg = "红外故障"\n\t\t\t\t\tlocal errcode = 1001\n\t\t\t\t\tout.time = T\n\t\t\t\t\tout.result = {code=errcode,msg=errormsg} \n\t\t\t\tend\n\t\t\t\tlog.debug("http_wifiperson[%s] out= %s",moduleNo,json.encode(out))\n\t\t\t\tif k ~= #(bodydata.data) then\n\t\t\t\t\tctx:notify(json.encode(out))\n\t\t\t\tend\n\t\t\tend\n\t\tend\n \tend\n\tctx:notify(json.encode(out))\t\nend\n\nasend_HttpResponse = function(isconfig)\n \t--log.debug("http_wifiperson[%s] isconfig= %s",moduleNo,isconfig)\n\tlocal time_now =getTimeNowStr()\n\tlocal direction = 1\n\tif device.props.direction == "右进左出" then\n\t\tdirection = 2\n\tend\n\tlocal path = "/wificloud/wifi/data.json"\n \tlocal ts = "DY"\n\tif isconfig == "true" then\n\t\tpath = "/wificloud/wifi/cnf.json"\n \tts = "CY"\n\tend\n \tlocal data_body = {\n\t\t\t\tST = time_now,\n\t\t\t\tDN = device.uplink.props.url,\n\t\t\t\tSP = tonumber(device.uplink.props.port),\n\t\t\t\tSR = "/wificloud/wifi/",\n\t\t\t\tWT = "0000-2355",\n\t\t\t\tRT = tonumber(device.props.interval),\n\t\t\t\tUT = tonumber(device.props.interval),\n\t\t\t\tCD = direction,\n\t\t\t\tTS = ts,\n\t\t\t\tCL = 1\n }\n \tlocal str = json.encode(data_body)\n ack = {type = 'http', code = 200, body = str}\n\tlog.debug("http_wifiperson[%s] ack= %s",moduleNo,json.encode(ack))\n ctx:asend(ack)\nend\n\ngetTimeNowStr = function()\n --2018-4-28 16:10:12\n local timeNowNum = os.time()\n local timeNowStr = os.date('%Y%m%d%H%M%S', timeNowNum)\n return timeNowStr\nend\n\nunixtimestamp = function(datestr, moduleNoStr)\n -- 2018-4-28 16:10:12\n --log.debug("http_wifiperson datestr=%s",datestr)\n local year = tonumber(string.sub(datestr,1,4))\n local month = tonumber(string.sub(datestr,5,6))\n local day = tonumber(string.sub(datestr,7,8))\n local hour = tonumber(string.sub(datestr,9,10))\n local minute = tonumber(string.sub(datestr,11,12))\n local second = 0\n --log.debug("fs_tj_lf_station year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --log.debug('http_wifiperson [%s] recordTime=%s', moduleNoStr, recordTime)\n return recordTime\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend INLINE 2020-12-03 17:37:50.749+08 2020-12-09 11:32:44.919+08 2020-12-03 \N
+64fdaded-b81f-4455-9e7e-6ec7b36ded18 LKQZY_file_transfer \N copy_FSQZY_file_transfer 1.0 2831da9e-1815-47e1-a77e-67843477a527 2831da9e-1815-47e1-a77e-67843477a527 f 2831da9e-1815-47e1-a77e-67843477a527 Lua start = function()\n log.debug('FSQZY_file_transfer devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n if data ~= nil then\n if data.type == 'idau/file' then\n if data.ext == '.d' or data.ext == '.dx' then\n log.debug('FSQZY_file_transfer recvd content = %s', data.payload)\n ParseFileD(data.payload)\n --else\n --log.error("FSQZY_file_transfer unsupported file type: %s", data.ext)\n end\n else\n log.error('FSQZY_file_transfer content type is not file, error recvd type is %s', data.type)\n end\n else\n log.error('FSQZY_file_transfer recvd content is nil')\n end\nend\n\nfunction ParseFileD(content)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n --log.debug('FSQZY_file_transfer content =%s', content)\n local jsons = Split(content, '\\r')\n for k, v in pairs(jsons) do\n if v ~= nil and v ~= '' then\n local jsondata = json.decode(v)\n if jsondata ~= nil and jsondata ~= '' then\n local childDevice = getDeviceInfo(jsondata.M)\n if childDevice ~= nil then\n log.debug('FSQZY_file_transfer 设备类型=%s,%s', childDevice.props.sensortype, json.encode(childDevice))\n if childDevice.props.sensortype == 'prism_L_FS' then --直角棱镜\n local rst = {\n data = {\n easting = jsondata.RV[1],\n northing = jsondata.RV[2],\n height =jsondata.RV[3]--,\n --eastingDiff = 1000*jsondata.RV[4],\n --northingDiff = 1000*jsondata.RV[5],\n --heightDiff = 1000*jsondata.RV[6]\n \n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n }\n table.insert(out.data, rst)\n end\n else\n end\n end\n end\n end\n log.debug('FSQZY_file_transfer result = %s', json.encode(out))\n ctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(data_moduleid)\n log.debug('FSQZY_file_transfer 查询子设备 data_moduleid=%s', data_moduleid)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices\n for i, subdevice in pairs(subdevices) do\n local Point_id = subdevice.uplink.props.node_id\n if tostring(Point_id) == tostring(data_moduleid) then\n log.debug('FSQZY_file_transfer data_moduleid=%s,匹配到设备=%s', Point_id, json.encode(subdevice))\n return subdevice\n else\n \t\tlog.debug('FSQZY_file_transfer data_moduleid=%s, 不匹配 device node_id=%s', data_moduleid,Point_id)\n end\n end\n log.debug('FSQZY_file_transfer has no device Point_id=%s', moduleid)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('FSQZY_file_transfer has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend INLINE 2020-08-14 16:19:13.169+08 2020-08-14 16:19:13.169+08 2020-08-14 \N
+718ac0e4-8b03-4ed6-930b-937ada877aa6 xmlg_1 \N 1.0 4ed578c6-f98d-4d94-b1b3-472e1ced51bd 4ed578c6-f98d-4d94-b1b3-472e1ced51bd f 4ed578c6-f98d-4d94-b1b3-472e1ced51bd Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "xmlg_1",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, 0x55, endian) --1: 帧头\n buff=iota.appendHexByte(buff, 0xAA, endian)\n buff=iota.appendHexByte(buff, 0x00, endian) -- 2: 数据长度=1\n buff=iota.appendHexByte(buff, 0x09, endian)\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, endian) -- 3: 模块号\n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x41, endian) -- 3: 指令码\n buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 4: 指令: 0x01 = 采集\n buff=iota.appendHexByte(buff, CS(buff), 'L') -- 2: CRC16 -- 5: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,150000)\n local result="{}"\n if ok then\n result = unmarshall(resp)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)/2==59) then\n \n local polarResistance = iota.hexToFloat(hex,14,'B')\n local insulance = iota.hexToFloat(hex,18,'B')\n local corrosionRate = iota.hexToFloat(hex,22,'B')\n local corrosionCurrent = iota.hexToFloat(hex,26,'B')\n\t\t\n\t\tlocal ocp = iota.hexToFloat(hex,30,'B')\n local cer = iota.hexToFloat(hex,34,'B')\n local resistivity = iota.hexToFloat(hex,38,'B')\n local ph_ocp = iota.hexToFloat(hex,42,'B')\n\t\t\n\t\tlocal ph = iota.hexToFloat(hex,46,'B')\n local cl_ocp = iota.hexToFloat(hex,50,'B')\n local cl_potency = iota.hexToFloat(hex,54,'B')\n\t\tlocal dateTimeStr=string.sub(hex,17,28)\n\t\tlog.debug("xmlg_1 dateTimeStr是:%s",dateTimeStr)\n\t\tlocal timenow = timeTounixtimestamp(dateTimeStr)\n \n out= {\n\t\tdata={\n polarResistance=polarResistance,\n insulance=insulance,\n corrosionRate=corrosionRate,\n\t\t\tcorrosionCurrent=corrosionCurrent,\n\t\t\tocp=ocp,\n cer=cer,\n resistivity=resistivity,\n\t\t\tph_ocp=ph_ocp,\n\t\t\tph=ph,\n cl_ocp=cl_ocp,\n\t\t\tcl_potency=cl_potency},\n time=timenow\n }\n\t\t\n \n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n\tlog.debug('xmlg_1 %s', json.encode(out))\n return json.encode(out)\n\t\nend\n \n\nCS=function(buff)\n local lcr = 0\n for i = 0, string.len(buff)/2-1 do\n lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n end\n\tlog.debug("xmlg_1 lcr是:%s",lcr)\n\tlocal value=bit.band(lcr,0xff)\t\t\n return value\nend \n\ntimeTounixtimestamp=function(dateTimeStr)\n\tlog.debug("xmlg_1 进入时间解析")\n\tlocal year_a=string.sub(dateTimeStr,1,2)\n\n\tlocal month_a=string.sub(dateTimeStr,3,4)\n\t\n\tlocal day_a=string.sub(dateTimeStr,5,6)\n\n\tlocal hour_a=string.sub(dateTimeStr,7,8)\n\n\tlocal minute_a=string.sub(dateTimeStr,9,10)\n\t\n\tlocal second_a=string.sub(dateTimeStr,11,12)\n\n \n\n local year = 2000+tonumber(year_a,16)\n\tlog.debug("xmlg_1 year是:%s",year)\n\tlocal month = tonumber(month_a,16)\n\tlog.debug("xmlg_1 month是:%s",month)\n local day = tonumber(day_a,16)\n\tlog.debug("xmlg_1 day是:%s",day)\n local hour = tonumber(hour_a,16)\n\tlog.debug("xmlg_1 hour是:%s",hour)\n\tlocal minute = tonumber(minute_a,16)\n\tlog.debug("xmlg_1 minute是:%s",minute)\n local second = tonumber(second_a,16)\n\tlog.debug("xmlg_1 second是:%s",second)\n \n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second})\n\tlocal recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n\tlog.debug("xmlg_1 recordTime是:%s",recordTime)\n\treturn recordTime\nend\n\n INLINE 2020-05-12 13:52:06.246+08 2020-05-20 17:17:59.709+08 2020-05-12 \N
+d0689c9a-907c-4c62-a5d4-2a27971aa569 bjsmt_1 \N 1.0 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 ccef8df0-e1f5-46be-a5b7-040285b1b6e8 f ccef8df0-e1f5-46be-a5b7-040285b1b6e8 Lua --字符串ascii->字符\nstart=function()\n log.debug("bjsmt_1: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n log.debug("bjsmt_1: Data=%s",hex)\n\t--全局\n out={\n data ={},\n result = {}\n }\n\tlocal moduleNo=device.uplink.props.module\n\tlocal ErrorCode = IsValid(hex,moduleNo)\n if ErrorCode then\n \n local zero_length1 = iota.hexToShort(hex,7,'B')*6553.6\n\t\tlocal zero_length2 = iota.hexToShort(hex,9,'B')*0.1\n\t\tlocal zero_length=zero_length2+zero_length1\n\t\tlocal length=iota.hexToShort(hex,11,'B')/10\n\t\tlocal temperature\t=iota.hexToShort(hex,13,'B')/10\n\t\tlocal humidity\t=iota.hexToShort(hex,15,'B')\n\t\tlocal voltage\t=iota.hexToShort(hex,17,'B')/100\n local caitime=iota.hexToUShort(hex,19,'B')\n\t\t\n\n out.data = {\n zero_length=zero_length,\n\t\t\tlength=length,\n\t\t\ttemperature\t=temperature,\t\n\t\t\tvoltage=voltage,\n\t\t\thumidity=humidity,\n caitime=caitime\n\t\t\t\n };\n else\n out.result = {code=errcode,msg=errormsg} \n\tend\n\t--return out\n \n local resultData =json.encode(out)\n log.debug("bjsmt_1: out data=%s", json.encode(out))\n ctx:notify(resultData)\n\tlocal cycletime=device.props.cycletime\n\tlocal c1=string.sub(cycletime,1,1)\n\tlocal ct1 = string.format('%02x', tonumber(c1))\n\tlocal c2=string.sub(cycletime,2,2)\n\tlocal ct2 = string.format('%02x', tonumber(c2))\n\tlocal c3=string.sub(cycletime,3,3)\n\tlocal ct3 = string.format('%02x', tonumber(c3))\n\tlocal c4=string.sub(cycletime,4,4)\n\tlocal ct4 = string.format('%02x', tonumber(c4))\n\tlocal c5=string.sub(cycletime,5,5)\n\tlocal ct5 = string.format('%02x', tonumber(c5))\n\t--local cycletime = string.format('%08x', tonumber(device.props.cycletime))\n\tlog.debug("bjsmt_1: cycletime=%s",cycletime)\n local cmd ='ff0c08' .. ct1 .. ct2 .. ct3 .. ct4 .. ct5\n\tlog.debug("bjsmt_1: cmd=%s",cmd)\n\tctx:asend(cmd)\nend\n\n\nIsValid=function(data,moduleNo)\n log.debug('bjsmt_1开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x46 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('bjsmt_1数据校验通过')\n return true\n--crc\nend\n\n INLINE 2020-05-25 15:22:38.623+08 2020-05-27 10:14:33.078+08 2020-05-25 \N
+1b5694d0-7aa9-4c7b-9fb9-893fa24676d5 bjzhtk_sw \N 1.0 10b1641f-9368-4783-ab0f-85301fbe0b57 10b1641f-9368-4783-ab0f-85301fbe0b57 f 10b1641f-9368-4783-ab0f-85301fbe0b57 Lua start = function()\n --log.debug('bjzhtk_sw devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n if data ~= nil then\n\tlog.error('bjzhtk_sw data is %s', json.encode(data))\n if data.type == 'idau/file' then\n if data.ext == '.d' or data.ext == '.dx' then\n log.debug('bjzhtk_sw .d文件 content = %s', data.payload)\n ParseFileD(data.payload)\n --else\n --log.error("bjzhtk_sw unsupported file type: %s", data.ext)\n end\n else\n log.error('bjzhtk_sw content type is not file, error recvd type is %s', data.type)\n end\n else\n log.error('bjzhtk_sw recvd content is nil')\n end\nend\n\nfunction ParseFileD(content)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n log.debug('bjzhtk_sw 内容 =%s', content)\n local jsons = Split(content, '\\r')\n for k, v in pairs(jsons) do\n log.debug('bjzhtk_sw k=%s,v=%s',k,v)\n if v ~= nil and v ~= '' then\n local jsondata = json.decode(v)\n if jsondata ~= nil and jsondata ~= '' then\n local moduleNo = jsondata.M\n \n\t\t\t\tlog.debug('bjzhtk_sw moduleNo=%s', moduleNo)\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tfor index, childDevice in pairs(device.dnlinks[1].devices) do\n\t\t\t log.debug('bjzhtk_sw devices network =%s', json.encode(device.dnlinks[1].devices))\n\t\t\t\t\tlocal channelStrCheck = tonumber(childDevice.uplink.props.channel)\n\t\t\t\t\tlog.debug('bjzhtk_sw channelStrCheck=%s', channelStrCheck)\n\t\t\t\t\tlocal moduleNoStrCheck = childDevice.uplink.props.module\n\t\t\t\t\tlog.debug('bjzhtk_sw moduleNoStrCheck=%s', moduleNoStrCheck)\n\t\t\t\t\tif tonumber(moduleNo)==tonumber(moduleNoStrCheck) then\n\t\t\t\t\tlocal rst = {\n data = {\n xCoordinate = jsondata.RV[channelStrCheck],\n yCoordinate = jsondata.LV[channelStrCheck],\n zCoordinate = jsondata.PV[channelStrCheck]\n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n }\n table.insert(out.data, rst)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\t \n\t\t\t\t \n\t\t\t\t\n end\n end\n end\n log.debug('bjzhtk_sw result = %s', json.encode(out))\n ctx:notify(json.encode(out))\nend\n\n\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\t INLINE 2020-09-17 16:45:29.896+08 2021-01-25 09:31:45.515+08 2020-09-17 \N
+f197324e-172a-442a-8bba-cbc3133be37b shbx_yw \N 1.0 28bc5952-cfc7-4d3a-a922-92c82d003b20 28bc5952-cfc7-4d3a-a922-92c82d003b20 f 28bc5952-cfc7-4d3a-a922-92c82d003b20 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "shbx_yw.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("shbx_yw 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("shbx_yw 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 4, endian) -- 1: 指令: 0x03 = 采集\n\tbuff=iota.appendHexWord(buff, 0x00, endian) -- 2: 0x00 起始地址低位 寄存器数据高位\n\tbuff=iota.appendHexWord(buff, 0x02, endian) -- 2: 0x02 起始地址低位 寄存器数据高位\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,4000) --发送指令\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\n \n local length1 = iota.hexToShort(hex,3,'B')--mm\n\t\tlocal length2 = iota.hexToShort(hex,5,'B')/65535\n\t\tlocal length=length1+length2\n\t\t--local temp1 = iota.hexToShort(hex,7,'B')\n\t\t--local temp2 = iota.hexToShort(hex,9,'B')/65535\n\t\t--local temp=temp1+temp2\n\n\n out.data = {\n length=string.format("%0.3f",length)\n\t\t\t--temperature=string.format("%0.3f",temp)\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('shbx_yw开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x04 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shbx_yw数据校验通过')\n return true\n--crc\nend\n\n INLINE 2020-05-14 15:02:27.576+08 2020-05-21 17:47:51.096+08 2020-05-14 \N
+af3b3292-072e-4839-aa5b-0096cd1b9249 leica_file_transfer \N 1.0 2831da9e-1815-47e1-a77e-67843477a527 2831da9e-1815-47e1-a77e-67843477a527 f 2831da9e-1815-47e1-a77e-67843477a527 Lua start = function()\n log.debug('leica_file_transfer devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n if data ~= nil then\n if data.type == 'idau/file' then\n if data.ext == '.d' or data.ext == '.dx' then\n log.debug('leica_file_transfer .d文件 content = %s', data.payload)\n ParseFileD(data.payload)\n --else\n --log.error("leica_file_transfer unsupported file type: %s", data.ext)\n end\n else\n log.error('leica_file_transfer content type is not file, error recvd type is %s', data.type)\n end\n else\n log.error('leica_file_transfer recvd content is nil')\n end\nend\n\nfunction ParseFileD(content)\n local out = {\n data = {},\n result = {},\n type = 2\n }\n log.debug('leica_file_transfer 内容 =%s', content)\n local jsons = Split(content, '\\r')\n for k, v in pairs(jsons) do\n log.debug('leica_file_transfer k=%s,v=%s',k,v)\n if v ~= nil and v ~= '' then\n local jsondata = json.decode(v)\n if jsondata ~= nil and jsondata ~= '' then\n local childDevice = getDeviceInfo(jsondata.M)\n if childDevice ~= nil then\n log.debug('leica_file_transfer 设备类型=%s,%s', childDevice.props.sensortype, json.encode(childDevice))\n if childDevice.props.sensortype == 'prism_L' then --直角棱镜\n local rst = {\n data = {\n easting = 1000*jsondata.RV[1],\n northing = 1000*jsondata.RV[2],\n height = 1000*jsondata.RV[3],\n eastingDiff = 1000*jsondata.RV[4],\n northingDiff = 1000*jsondata.RV[5],\n heightDiff = 1000*jsondata.RV[6]\n \n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n }\n table.insert(out.data, rst)\n \t\telseif childDevice.props.sensortype == 'prism_L_0' then --直角棱镜 无倍率\n local rst = {\n data = {\n easting = jsondata.RV[1],\n northing = jsondata.RV[2],\n height = jsondata.RV[3],\n eastingDiff = jsondata.PV[1],\n northingDiff = jsondata.PV[2],\n heightDiff = jsondata.PV[3]\n },\n device = childDevice.id,\n type = 1,\n time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n }\n table.insert(out.data, rst)\n end\n else\n end\n end\n end\n end\n log.debug('leica_file_transfer result = %s', json.encode(out))\n ctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid)\n log.debug('leica_file_transfer 查询子设备 moduleid=%s', moduleid)\n if device.dnlinks ~= nil then\n local subdevices = device.dnlinks[1].devices\n for i, subdevice in pairs(subdevices) do\n local Point_id = subdevice.uplink.props.node_id\n if tostring(Point_id) == tostring(moduleid) then\n log.debug('leica_file_transfer m=%s,2匹配到设备=%s', Point_id, json.encode(subdevice))\n return subdevice\n else\n end\n end\n log.debug('leica_file_transfer has no device Point_id=%s', moduleid)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('leica_file_transfer has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend INLINE 2019-04-08 11:53:43.029+08 2020-09-07 18:59:12.17+08 2019-04-08 \N
+7a9b4886-a218-4e10-b299-5a6a13496bbf soWay_lvdt_9102 \N 深圳市信为LVDT裂缝计协议 1.0 e73ab0fd-f5f4-483f-be99-b076b25341d1 e73ab0fd-f5f4-483f-be99-b076b25341d1 f e73ab0fd-f5f4-483f-be99-b076b25341d1 Lua \nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n\n\nstart=function()\n log.debug("start %s, ctx=", "bl_lvdt_9101.lua",json.encode(ctx.device))\n local moduleNo=device.uplink.props.module or device.props.moduleId --模块 通道 优先接口获取\n\tif tonumber(moduleNo) > 255 then\n local errout={\n data ={},\n result = {code = 1004,msg = 'module is Invalid'}\n }\n\n local errresult = json.encode(errout)\n ctx:done(errresult)\n end\n local endian = 'B'\n local buff=''\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 0x04, endian) --1: CMD 4\n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n \tbuff=iota.appendHexByte(buff, 0x02, endian) --1: CMD 1\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n -- print("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex,moduleNoStr)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n -- 010404800101488222\n local data_by = 0\n local elongation = 0\n if iota.hexToByte(hex,1,'B') == 0x04 then\n local by = string.sub(hex,7,15) --data\n local sign = 1\n data_by = iota.hexToByte(by,0,'B') \n if data_by >= 0x80 then\n data_by = bit:_and(data_by , 0x7f)\n sign = -1\n end\n local integer = bit:_or(bit:_lshift(bit:_and(data_by , 0xffff) , 8) , iota.hexToByte(by,1,'B')) * sign\n local decim = bit:_or(bit:_lshift(bit:_and(iota.hexToByte(by,2,'B') , 0xffff) , 8) , iota.hexToByte(by,3,'B')) /1000 * sign\n\n elongation = integer + decim\n out.data = {\n elongationIndicator=elongation\n }\n else \n local cmd = iota.hexToByte(hex,2,'B')\n if cmd == 0x06 then \n out.result = {\n code = 1005,\n msg = '功能号错误'\n }\n elseif cmd == 0x05 then \n out.result = {\n code = 1005,\n msg = '寄存器错误'\n }\n elseif cmd == 0x04 then \n out.result = {\n code = 1005,\n msg = '正常操作发生异常'\n }\n end\n end\n\n\n else\n out.result = {code=errcode,msg=errormsg}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\nIsValid=function(data,deviceModule)\n log.debug(string.sub(data,1,12))\n if data == nil or (string.len(data)/2 ~= 9 and string.len(data)/2 ~=5) then\n errormsg = 'Data is nil or Invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x04 and iota.hexToByte(data,1,'B') ~= 0x84 then\n errormsg = 'CMD is not right,0x04/0x84'\n errcode = 1001\n \treturn false\n end\n \tlocal dataModule=iota.hexToByte(data,0,'B')\n if deviceModule ~= tostring(dataModule) then\n errormsg = 'Invalid moduleId'\n errcode = 1004\n return false\n end\n return true\nend\n \n INLINE 2017-09-04 16:48:57.583+08 2020-05-19 16:37:58.006+08 2017-09-02 \N
+cedac832-df05-4b4d-bec7-05664a01574a hzyy_qj02 \N 1.0 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 f 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 Lua \nstart = function()\n log.debug('hzyy_qj02 device=%s', json.encode(device))\n\tlog.debug('hzyy_qj02 device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n\n log.debug('hzyy_qj02', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n \n log.debug('hzyy_qj02 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n local sn=bodypkg['sn']\n\tlocal timeStamps=tonumber(bodypkg['stamp'])\n\tlocal timenow=os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamps)\n\tlog.debug('hzyy_qj02 [%s] 时间戳', tonumber(timeStamps))\n local inc_x=tonumber(bodypkg['inc_x'])\n\tlocal inc_y=tonumber(bodypkg['inc_y'])\n\n\tlocal temp=tonumber(bodypkg['temp'])\n\t\n\t\n\tif tonumber(sn) == tonumber(moduleNo) then\n\tout={\n data={\n\t anglex=inc_x,\n\t angley=inc_y,\n\t\n\t temperature=temp\n },\n\t time=timenow\n\t}\n\tend\n\n\t\n log.debug('hzyy_qj02 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend INLINE 2020-11-27 09:58:41.212+08 2020-11-27 17:32:20.372+08 2020-11-27 \N
+3918f7c9-7aed-49f8-8e15-57015d8856ec cdaj_jgwy \N 1.0 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e f 8d49238d-6e0e-421c-adaf-f7472ec0b50e Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff1=''--采集数据命令\n\tbuff1=iota.appendHexWord(buff1, device.uplink.props.module, endian) \n buff1=iota.appendHexByte(buff1, 0x83, endian) \n buff1=iota.appendHexByte(buff1, 0x02, endian)\n buff1=iota.appendHexByte(buff1, 0x06, endian)\n buff1=iota.appendHexByte(buff1, 0x03, endian)\n buff1=iota.appendHexCrc(buff1, 'L' ,0) \n\t\n\tlocal buff2=''--打开激光命令\n\tbuff2=iota.appendHexWord(buff2, device.uplink.props.module, endian) \n buff2=iota.appendHexByte(buff2, 0x07, endian) \n buff2=iota.appendHexByte(buff2, 0x03, endian)\n buff2=iota.appendHexByte(buff2, 0x01, endian)\n buff2=iota.appendHexByte(buff2, 0x04, endian)\n buff2=iota.appendHexByte(buff2, 0x01, endian)\n buff2=iota.appendHexCrc(buff2, 'L' ,0) \n\t\n\tlocal buff3=''--关闭激光命令\n\tbuff3=iota.appendHexWord(buff3, device.uplink.props.module, endian) \n buff3=iota.appendHexByte(buff3, 0x07, endian) \n buff3=iota.appendHexByte(buff3, 0x03, endian)\n buff3=iota.appendHexByte(buff3, 0x01, endian)\n buff3=iota.appendHexByte(buff3, 0x04, endian)\n buff3=iota.appendHexByte(buff3, 0x00, endian)\n buff3=iota.appendHexCrc(buff3, 'L' ,0) \n\n \n ok1,resp1=ctx:ssend(buff2,15000)\n\t log.debug('cdaj_jg resp1=%s', resp1)\n local result="{}"\n if ok1 then\n\tlog.debug('cdaj_jg 11111')\n\t ctx:sleep(0.2)\n\t\tlog.debug('cdaj_jg 222')\n\t\tok2,resp2=ctx:ssend(buff1,15000)\n\t\tlog.debug('cdaj_jg resp2=%s', resp2)\n\t\tif ok2 then\n\t\tlog.debug('cdaj_jg 333')\n\t\t\tresult = unmarshall(resp2)\n\t\t\tlog.debug('cdaj_jg 444')\n\t\t\t\n\t\tend\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n if (string.len(hex)==30) then\n local length = iota.hexToInt(hex,7,'B')/10.0;\n\t\tlog.debug('cdaj_jg length=%s', length)\n local temp = iota.hexToShort(hex,11,'B')*0.0625 \nlog.debug('cdaj_jg temp=%s', temp)\t\t\n out.data = {\n length=length, \n temperature\t=temp\n }\n \n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2020-08-05 17:50:15.015+08 2020-08-17 17:54:29.13+08 2020-08-05 \N
+ccf5fd2e-6140-49e6-81bb-dffcb24079c4 HTTP-TS \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug('httpTS LUA http server start')\nend\n\nonData = function(httpbody, index)\n local out={\n data ={},\n result = {},\n type=2\n }\n asend_HttpResponse()\n --\n local moduleNo = device.uplink.props.id --模块\n log.debug('httpTS [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n local bodydataStr = httpbody.Body\n local bodydata = json.decode(bodydataStr)\n local tempDataList = bodydata.tempDataList\n \tlog.debug('httpTS [%s] tempDataList=%s', moduleNo,json.encode(tempDataList))\n \t\n\tlocal x = 0\n\tlocal y = 0\n\tlocal h = 0\n \tfor i = 1,#(tempDataList),1 do\n\t\tlocal module = tempDataList[i].tkCode\n\t\t\n\t\tlocal RTime = tempDataList[i].measTime\n\t\tlocal easting = tempDataList[i].x\n\t\tlocal northing = tempDataList[i].y\n\t\tlocal height = tempDataList[i].h\n\t\tlog.debug('httpTS[%s] module = %s Time =%s ',moduleNo,module,RTime)\n\t\tlocal T = unixtimestamp(RTime,module)\n\t\tlocal childDevice = getDeviceInfo(module)\n \tlog.debug("httpTS[%s] device= %s easting = %s northing %s height %s",moduleNo,childDevice.id,easting,northing,height)\n \tlocal timeNowNum = os.time()\n local data1 ={\n data={\n\t\t\t\teasting = easting or 0,\n\t\t\t\tnorthing = northing or 0,\n\t\t\t\theight = height or 0\n },\n device=childDevice.id,\n type=1,\n time=T \n }\n table.insert(out.data,data1)\n\tend\n \tlog.debug("httpTS[%s] out= %s",moduleNo,json.encode(out))\n\tctx:notify(json.encode(out))\nend\n\nasend_HttpResponse = function()\n \tlocal data_body = {\n\t\t\t\tcode = 1,\n\t\t\t\tmessage = "保存成功!",\n\t\t\t\tdata = true\n }\n \tlocal str = json.encode(data_body)\n ack = {type = 'http', code = 200, body = str}\n ctx:asend(ack)\nend\n\ngetTimeNowStr = function()\n --2018-4-28 16:10:12\n local timeNowNum = os.time()\n local timeNowStr = os.date('%Y-%m-%d %H:%M:%S', timeNowNum)\n return timeNowStr\nend\n\nunixtimestamp = function(datestr, moduleNoStr)\n -- 2018-4-28 16:10:12\n --log.debug("fs_tj_lf_station datestr=%s",datestr)\n local datelist = Split(datestr, ' ')\n local date = Split(datelist[1], '-')\n local time = Split(datelist[2], ':')\n local year = tonumber(date[1])\n local month = tonumber(date[2])\n local day = tonumber(date[3])\n local hour = tonumber(time[1])\n local minute = tonumber(time[2])\n local second = tonumber(time[3])\n --log.debug("fs_tj_lf_station year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n log.debug('httpTS [%s] recordTime=%s', moduleNoStr, recordTime)\n return recordTime\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ntable_leng = function(t)\n local leng = 0\n for k, v in pairs(t) do\n leng = leng + 1\n end\n return leng\nend\n --获取采集仪下面的通道信息\nfunction getDeviceInfo(sensorId)\n local resensor=nil\n if device.dnlinks ~=nil then\n --log.debug("httpTS =%s:deviceInfo=%s",filename,json.encode(device))\n for i,link in pairs(device.dnlinks) do\n --log.debug("httpTS: = %s link=%s",filename,json.encode(link))\n for j,node in pairs(link.devices) do\n --log.debug("httpTS: node=%s",json.encode(node))\n \t\tif node.uplink ~= nil then\n\t\t\t\t if node.uplink.props.module == sensorId then\n\t\t\t\t\t --log.debug("httpTS: final_sensor %s=%s",node.uplink.props.module,sensorId)\n\t\t\t\t\t resensor = node\n\t\t\t\t end \n \t\tend\n end\n end \n end\n return resensor\nend INLINE 2020-05-21 15:13:14.044+08 2020-05-23 20:57:23.973+08 2020-05-21 \N
+12ca8de8-2ecd-44e6-a8f4-027259a56c1b masfx \N 1 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "MAS_FX", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("MAS_FX 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x81, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("MAS_FX SSend error!")\n end\n ctx:done(result)\nend\n--01 81 C0 40\n--01 81 04 00 00 00 0e 01 D4 EB\n--moduleId=1 \n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local direction = iota.hexToShort(hex,6,'L')\n \n out.data = {\n direction=direction\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('MAS_FX 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 10 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x81 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('MAS_FX 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2020-09-28 10:45:58.847+08 2020-09-28 10:45:58.847+08 2020-09-28 \N
+96535cb0-1134-4b01-8885-34fbf6127874 jxzy_gas_1105 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --F:\\SVN\\202005项目\\江西制药\\手提式多合一通信协议-山盾科技20200522(NH3 H2S CH4 OU).doc\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "jxzy_gas_1104", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\t\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x08, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("jxzy_gas_1104 SSend error!")\n end\n ctx:done(result)\nend\n\n--01030000045cf\n--010318000000003dccd46b3effff1a3f806b69a1db\n \n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local NH3 = iota.hexToFloat(hex,3,'B') --氨气\n local H2S = iota.hexToFloat(hex,7,'B') --硫化氢\n\t\tlocal CH4 = iota.hexToFloat(hex,11,'B') --甲烷\n\t\tlocal OU = iota.hexToFloat(hex,15,'B') --臭气\n \n out.data = {\n\t\t\tNH3=tonumber(string.format('%0.2f',NH3)),\n\t\t\tH2S=tonumber(string.format('%0.2f',H2S)),\n\t\t\tCH4=tonumber(string.format('%0.2f',CH4)),\n\t\t\tOU=tonumber(string.format('%0.2f',OU))\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('jxzy_gas_1104 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 21 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('jxzy_gas_1104 数据校验通过')\n return true\n--crc\nend INLINE 2020-05-28 11:50:15.359+08 2020-05-28 15:15:32.452+08 2020-05-28 \N
+28dcd12e-e7ce-4514-babe-0fc7a77c63c3 rtu_disaster_mop_2 \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --地灾设备信息Topic发布\n-- 下发 采集仪 配置 topic = devmodule.."_setdevconfig"\n-- 下发 传感器 配置 topic =devmodule.."/ch/"..value.module\nstart=function()\n --log.debug("rtu_disaster_mop start , ctx=")\n\tlocal linkcnt = #(device.dnlinks)--遍历sensors,分配到4个channel\n\tlocal tableconfig_1 = {}\n\tlocal tableconfig_2 = {}\n\tlocal tableconfig_3 = {}\n\tlocal tableconfig_4 = {}\n\tlocal sencnt = #(device.dnlinks)\n\tif sencnt > 0 then \n for i,dnlink in pairs(device.dnlinks) do\n for j,subdevice in pairs(dnlink.devices) do\n\t\t\t\tif subdevice ~= nil then\n\t\t\t\t\tlocal ch = tonumber(subdevice.uplink.props.channel)\n\t\t\t\t\tlocal sentype = subdevice.uplink.props.type\n\t\t\t\t\tlocal sen_type = "000"\n\t\t\t\t\tif sentype == "地表裂缝计" then\n\t\t\t\t\t\tsen_type = "101"\n\t\t\t\t\telseif sentype == "墙裂缝计" then\n\t\t\t\t\t\tsen_type = "102"\n\t\t\t\t\telseif sentype == "加速度计" then\n\t\t\t\t\t\tsen_type = "103"\n\t\t\t\t\telseif sentype == "泥位计" then\n\t\t\t\t\t\tsen_type = "104"\n\t\t\t\t\telseif sentype == "预警喇叭" then\n\t\t\t\t\t\tsen_type = "105"\n\t\t\t\t\telseif sentype == "雨量计" then\n\t\t\t\t\t\tsen_type = "201"\n\t\t\t\t\telseif sentype == "土壤含水率" then\n\t\t\t\t\t\tsen_type = "202"\n\t\t\t\t\telseif sentype == "裂缝计" then\n\t\t\t\t\t\tsen_type = "203"\n\t\t\t\t\telseif sentype == "GNSS结果数据" then\n\t\t\t\t\t\tsen_type = "204"\n\t\t\t\t\telseif sentype == "GNSS" then\n\t\t\t\t\t\tsen_type = "205"\n\t\t\t\t\telseif sentype == "倾角计" then\n\t\t\t\t\t\tsen_type = "206"\n\t\t\t\t\telseif sentype == "水压力" then\n\t\t\t\t\t\tsen_type = "207"\n\t\t\t\t\telseif sentype == "次声" then\n\t\t\t\t\t\tsen_type = "208"\n\t\t\t\t\telseif sentype == "土压力计" then\n\t\t\t\t\t\tsen_type = "209"\n\t\t\t\t\telseif sentype == "振弦式应力计" then\n\t\t\t\t\t\tsen_type = "210"\n\t\t\t\t\telseif sentype == "地表位移" then\n\t\t\t\t\t\tsen_type = "211"\n\t\t\t\t\telseif sentype == "深部位移" then\n\t\t\t\t\t\tsen_type = "212"\n\t\t\t\t\telseif sentype == "倾斜仪" then\n\t\t\t\t\t\tsen_type = "213"\n\t\t\t\t\telseif sentype == "地下水水位" then\n\t\t\t\t\t\tsen_type = "24"\n\t\t\t\t\telseif sentype == "多点位移" then\n\t\t\t\t\t\tsen_type = "215"\n\t\t\t\t\telseif sentype == "空隙水压计" then--渗压计就是空隙水压计 名称统一\n\t\t\t\t\t\tsen_type = "216"\n\t\t\t\t\telseif sentype == "流速仪" then\n\t\t\t\t\t\tsen_type = "217"\n\t\t\t\t\telseif sentype == "气温" then\n\t\t\t\t\t\tsen_type = "218"\n\t\t\t\t\telseif sentype == "TDR变形计" then\n\t\t\t\t\t\tsen_type = "219"\n\t\t\t\t\telseif sentype == "泉水流量" then\n\t\t\t\t\t\tsen_type = "220"\n\t\t\t\t\telseif sentype == "沉降仪" then\n\t\t\t\t\t\tsen_type = "221"\n\t\t\t\t\telseif sentype == "钻孔测斜仪" then\n\t\t\t\t\t\tsen_type = "222"\n\t\t\t\t\telseif sentype == "土壤温湿度计" then\n\t\t\t\t\t\tsen_type = "223"\n elseif sentype == "抓拍机" then\n\t\t\t\t\t\tsen_type = "224"\n elseif sentype == "声光报警" then\n\t\t\t\t\t\tsen_type = "225"\n\t\t\t\t\telseif sentype == "激光测距仪" then\n sen_type = "226"\n\t\t\t\t\tend\n\t\t\t\t\tlocal sencon = {\n\t\t\t\t\t\tmodule = subdevice.uplink.props.module,\n\t\t\t\t\t\tchannel = tostring(subdevice.uplink.props.channel),\n\t\t\t\t\t\ttype = sen_type,\n\t\t\t\t\t\tsample = tostring(subdevice.uplink.props.sample),\n\t\t\t\t\t\tupload = tostring(subdevice.uplink.props.upload),\n\t\t\t\t\t\tplus = tostring(subdevice.uplink.props.plus),\n\t\t\t\t\t\tthreshold = string.format("%s,%s,%s",subdevice.props.thresholdx or 0,subdevice.props.thresholdy or 0,subdevice.props.thresholdz or 0),\n\t\t\t\t\t\tupperlimit = tostring(subdevice.uplink.props.upperlimit),\n\t\t\t\t\t\tlowerlimit = tostring(subdevice.uplink.props.lowerlimit),\n\t\t\t\t\t\tcp1 = tostring(subdevice.props.cp1) or "0",\n\t\t\t\t\t\tcp2 = tostring(subdevice.props.cp2) or "0",\n\t\t\t\t\t\tcp3 = tostring(subdevice.props.cp3) or "0",\n\t\t\t\t\t\tcp4 = tostring(subdevice.props.cp4) or "0"\n\t\t\t\t\t}\n\t\t\t\t\tif ch == 1 then\n\t\t\t\t\t\ttable.insert(tableconfig_1,sencon)\n\t\t\t\t\telseif ch == 2 then\n\t\t\t\t\t\ttable.insert(tableconfig_2,sencon)\n\t\t\t\t\telseif ch == 3 then\n\t\t\t\t\t\ttable.insert(tableconfig_3,sencon)\n\t\t\t\t\telseif ch == 4 then\n\t\t\t\t\t\ttable.insert(tableconfig_4,sencon)\n\t\t\t\t\tend\n\t\t\t\tend\n end\n end\n\tend\n\n\t--构成采集仪配置\n\tlocal alarm = "0"\n\tlocal gnss = "0"\n\tif device.props.alarm == "连接" then\n\t\talarm = "1"\n\tend\n\tif device.props.gnss == "连接" then\n\t\tgnss = "1"\n\tend\t\n\tlocal cmd = "$cmd=setworkmode&mode="..tostring(device.props.mode)\n\tlocal devmodule = device.props.moduleid\n\tlocal r1,ok = redis.get(device.id.."_rtudevset")\n\tif ok and r1~=nil then\n\t\tlog.debug("rtu_disaster_mop [%s] ok=%s,r1=%s,mode=%s",devmodule,ok,r1,device.props.mode)\n\t\tif r1 ~= tostring(device.props.mode) then\n\t\t\tlocal topic = devmodule.."_setdevconfig"\n\t\t\tlog.debug("rtu_disaster_mop [%s] topic=[%s],_setdevconfig send cmd =%s",devmodule ,topic,cmd)\n\t\t\tlocal okdev, ack = ctx:asend({type="mqtt",payload=cmd,topic = topic })\n\t\t\tctx:sleep(1)\n\t\t\tif okdev then\n\t\t\t\tlocal crc = tostring(device.props.mode)\n\t\t\t\tredis.set(device.id.."_rtudevset", tostring(crc))\n\t\t\tend\n\t\tend\n\telse --第一次下发\n\t\tlocal topic = devmodule.."_setdevconfig"\n\t\tlog.debug("rtu_disaster_mop [%s] topic=[%s],_setdevconfig send cmd =%s",devmodule ,topic,cmd)\n\t\tlocal okdev_first, ack_first = ctx:asend({type="mqtt",payload=cmd,topic=topic })\n\t\tctx:sleep(1)\n\t\tif okdev_first then\n\t\t\tlocal crc = tostring(device.props.mode)\n\t\t\tredis.set(device.id.."_rtudevset", tostring(crc))\n\t\tend\n\tend\n\n\t--传感器下发\n\tlog.debug("rtu_disaster_mop tableconfig_1 =%d, tableconfig_2 =%d tableconfig_3 =%d tableconfig_4 =%d ",#(tableconfig_1),#(tableconfig_2),#(tableconfig_3),#(tableconfig_4))\n\tGenratecmd(tableconfig_1,tableconfig_2,tableconfig_3,tableconfig_4)\t\nend\n\n\n\nGenratecmd = function(tableconfig_1,tableconfig_2,tableconfig_3,tableconfig_4)\n local allconfig={}\n allconfig[1]=tableconfig_1\n allconfig[2]=tableconfig_2\n allconfig[3]=tableconfig_3\n allconfig[4]=tableconfig_4\n local devmodule = device.props.moduleid\n\tlocal channel=0\n for _, single_tableconfig in pairs(allconfig) do\n\t\tchannel=channel+1\n if #(single_tableconfig) > -1 then\n local count = #(single_tableconfig)\n ----获取配置,判断是否下发\n local strdevice= toHexStr(json.encode(single_tableconfig))\n strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n local crc=string.sub(strdevice,-4,-1)\n\t\t\tlog.debug("rtu_disaster_mop [%s] 通道%s 校验配置 strdevice =%s crc =%s",devmodule,channel,json.encode(single_tableconfig), crc)\n ----轮询下发\n local index = 0\n local topic =devmodule.."/ch/"..channel\n local cmd = "$cmd=setsensor&sensor_num=0"\n\t\t\tlocal redis_key=device.id.."_rtuchset_"..channel\n local r1,ok1 = redis.get(redis_key)\n if ok1 and r1~=nil then\n if r1 ~= crc then --配置有修改\n\t\t\t\tlog.debug("rtu_disaster_mop [%s] 通道%s 缓存变化 redis_key=%s r1 =%s crc =%s",devmodule,channel,redis_key,r1, crc)\n for i,value in pairs(single_tableconfig) do\n cmd = "$cmd=setsensor&sensor_num="\n index = index + 1\n cmd = cmd..tostring(index)\n local senid = value.channel.."_"..value.module.."_"..value.type\n local cpcmd = value.cp1..","..value.cp2..","..value.cp3..","..value.cp4\n cmd = cmd..",{sensor_id="..senid.."&sample_intv="..value.sample.."&upload_intv="..value.upload.."&plus_intv="..value.plus.."&threshold="..value.threshold.."&upper_limit="..value.upperlimit.."&lower_limit="..value.lowerlimit.."&cp="..cpcmd.."}"\n ---------------------------------------------------------------\n\t\t\t\t\t\tlog.debug("rtu_disaster_mop [%s] 通道%s redis_key=%s 修改配置下发 topic =%s cmd =%s",devmodule,channel,redis_key,topic, cmd)\n\t\t\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic })\n \t\t\tctx:sleep(1)\n end\n\t\t\t\t\t--如果数量变成0\n\t\t\t\t\tif #single_tableconfig==0 then\n\t\t\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic })\n \t\t\tctx:sleep(1)\n\t\t\t\t\tend\n end\n else --第一次配置下发\n\t\t\t\tlog.debug("rtu_disaster_mop [%s] 通道%s redis_key=%s 第一次配置下发 topic =%s cmd =%s,r1=%s,ok1=%s",devmodule,channel,redis_key,topic, cmd,r1,ok1)\n local ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic })\n end\n ---记录\n redis.set(redis_key, tostring(crc))\n end\n end\nend\n\nonData=function(hex)\n\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2020-09-28 19:27:13.716+08 2020-11-11 15:11:22.046+08 2020-09-28 \N
+5010d82f-8dc9-4bcc-bc9c-9349a8102b24 masios_pressure_9002 \N 1.0 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 f 981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5 Lua --// Documents/PMO/02 产品协议/外购产品协议/麦克公司数字化变送器通信指令集.pdf\nbit={data32={}}\nfor i=1,32 do\n bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n local tr={}\n for i=1,32 do\n if arg >= self.data32[i] then\n tr[i]=1\n arg=arg-self.data32[i]\n else\n tr[i]=0\n end\n end\n return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n local nr=0\n for i=1,32 do\n if arg[i] ==1 then\n nr=nr+2^(32-i)\n end\n end\n return nr\nend --bit:b2d\n\nfunction bit:_or(a,b) \n local op1=self:d2b(a) \n local op2=self:d2b(b) \n local r={} \n \n for i=1,32 do \n if op1[i]==1 or op2[i]==1 then \n r[i]=1 \n else \n r[i]=0 \n end \n end \n return self:b2d(r) \nend\n\n\nfunction bit:_xor(a,b)\n local op1 = self:d2b(a)\n local op2 = self:d2b(b)\n local r={}\n for i = 1,32 do\n if op1[i] == 0 then\n r[i] = op2[i]\n else\n if op2[i] == 0 then\n r[i] = 1\n else\n r[i] = 0\n end\n end\n end\n return self:b2d(r)\nend\n\nfunction bit:_and(a,b)\n local op1=self:d2b(a)\n local op2=self:d2b(b)\n local r={}\n\n for i=1,32 do\n if op1[i]==1 and op2[i]==1 then\n r[i]=1\n else\n r[i]=0\n end\n end\n return self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction bit:_rshift(a,n)\n local op1=self:d2b(a)\n local r=self:d2b(0)\n\n if n < 32 and n > 0 then\n for i=1,n do\n for i=31,1,-1 do\n op1[i+1]=op1[i]\n end\n op1[1]=0\n end\n r=op1\n end\n return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a,n) \n local op1=self:d2b(a) \n local r=self:d2b(0) \n \n if n < 32 and n > 0 then \n for i=1,n do \n for i=1,31 do \n op1[i]=op1[i+1] \n end \n op1[32]=0 \n end \n r=op1 \n end \n return self:b2d(r) \nend --bit:_lshift \n--2a31372b332e3531363933420d module=17 channelId=1\n--"pressure": 3.5169\n\n--2a31372b31322e323430370d module=17 channelId=1\n--temp": 12.24\n\nstart=function()\n log.debug("load script %s, moduleId=%s", "masios_pressure_9002.lua", device.uplink.props.module or "[nil]")\n\t\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("masios_pressure_9002 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("masios_pressure_9002 设备模块通道 属性获取 m=%s 接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\tif tonumber(moduleNo) > 99 then\n local errout={\n data ={},\n result = {code = 1004,msg = '模块号大于99'}\n }\n\n local errresult = json.encode(errout)\n ctx:done(errresult)\n end\n --全局out\n out={\n data ={},\n result = {}\n }\n local endian = 'B'\n local buff=''\n local sendstr = ''\n sendstr = sendstr..PadLeft(2,0,moduleNo)\n sendstr = sendstr..'RP'\n --sendstr = sendstr..tostring(device.props.channelId)\n sendstr = sendstr..'0'\n local p1,p2 = Check(sendstr)\n sendstr = sendstr..string.format("%X",p1)..string.format("%X",p2)\n sendstr = '$'..sendstr\n buff=toHexStr(sendstr)\n buff=iota.appendHexByte(buff, 0x0D, endian)\n --log.debug("ssend=", ctx:ssend(buff,500) )\n ok,resp=ctx:ssend(buff,10000)\n local result="{}"\n if ok then\n result_pressure = unmarshall(resp,moduleNo)\n else\n \tout.result = {code = 1001, msg = '压强采集超时'}\n end\n if out.data.pressure~=nil then\n ctx:sleep(1)\n log.debug('masios_pressure_9002 m='..moduleNo..' 压强解析正常'..tostring(out.data.pressure))\n --压强正常 继续解析\n sendstr = ''\n sendstr = sendstr..PadLeft(2,0,moduleNo)\n sendstr = sendstr..'RT'\n --sendstr = sendstr..tostring(device.props.channelId)\n sendstr = sendstr..'0'\n local p1,p2 = Check(sendstr)\n sendstr = sendstr..string.format("%X",p1)..string.format("%X",p2)\n sendstr = '$'..sendstr\n buff=toHexStr(sendstr)\n buff=iota.appendHexByte(buff, 0x0D, endian)\n log.debug('masios_pressure_9002 m='..moduleNo..' 开始温度采集cmd:'..buff)\n ok,resp=ctx:ssend(buff,10000) \n if ok then\n log.debug('masios_pressure_9002 m='..moduleNo..' 温度采集成功 开始解析温度:'..resp)\n result_temp =tempunmarshall(resp,moduleNo) \n else\n log.debug('masios_pressure_9002 m='..moduleNo..' 温度采集失败')\n out.result = {code = 1001, msg = '温度采集超时'}\n end\n end\n result=json.encode(out)\n log.debug(string.format('masios_pressure_9002 m=%s,result=%s',moduleNo, result))\n ctx:done(result)\nend\n\nunmarshall=function(hex,moduleNoPcheck)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n log.debug('masios_pressure_9002 m=%s,pre =%s',moduleNoPcheck,toStrHex(hex))\n local ErrorCode = IsValid(hex,moduleNoPcheck)\n if ErrorCode then\n -- 010404800101488222\n local pdata = string.sub(toStrHex(hex),5,-3)\n pre = 0\n if string.sub(toStrHex(hex),4,4) =='-' then\n pre = tonumber(pdata) * -1\n else \n pre = tonumber(pdata) \n end\n out.data.physicalvalue = pre\n else\n out.result = {code=errcode,msg=errormsg}\n end\n --return json.encode(out)\nend\n \ntempunmarshall=function(hex,moduleNoTcheck)\n log.debug('masios_pressure_9002 m=%s,receivedtemp =%s',moduleNoTcheck,toStrHex(hex))\n local ErrorCode = IsValidtemp(hex,moduleNoTcheck)\n if ErrorCode then\n -- 010404800101488222\n local tdata = string.sub(toStrHex(hex),5,-4)\n local temperature = 0\n if string.sub(toStrHex(hex),5,5) =='-' then\n temperature = tonumber(tdata) * -1\n else \n temperature = tonumber(tdata) \n end\n out.data.temperature = temperature\n else\n out.result = {code=errcode,msg=errormsg}\n end\n -- return json.encode(out)\nend\n\nIsValid=function(data,moduleNoStrP)\n if data == nil or string.len(data)/2 < 12 then\n errormsg = string.format('压强数据长度无效=%s<12,data=%s',string.len(data)/2,data)\n errcode = 1002\n return false\n end\n if string.sub(data,1,2) ~= '2a' or string.sub(data,-2,-1)~= '0d' then\n errormsg = string.format('压强 数据 帧头≠0x2a 或 数据帧尾≠0x0d,data=%s',data)\n errcode = 1003\n return false\n end\n log.debug('d =%s',toStrHex(data))\n \t local dataModule=string.sub(toStrHex(data),2,3)\n if PadLeft(2,0,moduleNoStrP) ~= dataModule then\n \t\n errormsg = string.format('压强数据 返回的模块号无效=%s[%s]',dataModule,moduleNoStrP)\n errcode = 1004\n return false\n end\n return true\nend\n \nIsValidtemp=function(data,moduleNoStrT)\n if data == nil or string.len(data)/2 < 12 then\n errormsg = string.format('温度 数据长度无效=%s≠12,data=%s',string.len(data)/2,data)\n errcode = 1002\n return false\n end\n if string.sub(data,1,2) ~= '2a' or string.sub(data,-2,-1)~= '0d' then\n errormsg = string.format('温度 数据 帧头≠0x2a 或 数据帧尾≠0x0d,data=%s',data)\n errcode = 1003\n return false\n end\n \tlog.debug('s =%s', toStrHex(data))\n \t local dataModule=string.sub(toStrHex(data),2,3)\n if PadLeft(2,0,moduleNoStrT) ~= dataModule then\n\n errormsg = string.format('压强数据 返回的模块号无效=%s[%s]',dataModule,moduleNoStrT)\n errcode = 1004\n return false\n end\n return true\nend\n\n\nPadLeft=function(cnt,num,hex)\n local len = string.len(tostring(hex))\n local offset = cnt -tonumber(len)\n if offset == 0 then \n return hex\n else\n for i = 1,offset do \n hex = tostring(num)..tostring(hex)\n end\n end\n return hex\nend\n\n \n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\nCheck=function(str)\n local len = string.len(str);\n local pp = 0\n for i =1,len do\n local bi = string.byte(str, i);\n pp = bit:_and(bit:_xor(bi,pp) , 0xff)\n end\n local p0 = bit:_rshift(bit:_and(pp,0xf0),4)\n local p1 = bit:_and(pp,0x0f)\n return p0,p1\nend \n\n--字符串ascii->字符\ntoStrHex=function(hex)\n local len = string.len(hex)/2\n local str = ''\n for i =1,len do \n local bi = iota.hexToByte(hex,i-1,'B')\n local ascii =string.format("%c",bi)\n str=str..ascii\n end\n return str\nend INLINE 2020-09-29 09:32:22.401+08 2020-09-29 10:10:38.095+08 2020-09-29 \N
+139b0dba-58fe-464a-9c25-dd5b6dfd6ca6 321 \N 11123 1.0 d04b9fa6-4ef6-47e9-9604-ed752f9d5281 d04b9fa6-4ef6-47e9-9604-ed752f9d5281 f d04b9fa6-4ef6-47e9-9604-ed752f9d5281 Lua 12343434343 INLINE 2020-06-08 10:12:35.733+08 2020-06-08 10:12:35.733+08 2020-06-08 \N
+0bb6a5c8-bf18-41c3-97f1-50e844da6de1 chyk_0605 \N 1.0 90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0 90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0 f 90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0 Lua onData = function()\nend\n\nstart = function()\n log.debug('chya_0605 loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n log.debug('chya_0605 device=%s', json.encode(device))\n out = {\n type = 2,\n data = {},\n result = {}\n }\n local endian = 'B'\n local buff = ''\n local moduleNo\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = device.uplink.props.module\n --模块通道优先接口获取\n\n log.debug('chya_0605设备模块通道接口获取m=%s', moduleNo)\n else\n moduleNo = device.props.moduleId\n\n log.debug('chya_0605设备模块通道属性获取m=%s', moduleNo)\n end\n\tlocal request_asciiStr = '?'\n\tbuff = toHexStr(request_asciiStr)\n buff = buff .. moduleNo .. '574199'\n buff = iota.appendHexByte(buff, 0x0d, endian)\n buff = iota.appendHexByte(buff, 0x0a, endian)\n\n\t--ctx:asend(buff)\n ok, resp = ctx:ssend(buff, 50000)\n\n if ok then\n local ErrorCode = IsValidOut(resp)\n if ErrorCode then\n\t local dateTimeStr=string.sub(resp,5,18)\n\t\tlog.debug("chya_0605 dateTimeStr是:%s",dateTimeStr)\n\t\tlocal timenow = timeTounixtimestamp(dateTimeStr)\n log.debug('chya_0605 数据有效=%s', resp)\n allSubData = getAllDatas(resp)\n --发送指令\n local subdevices = device.dnlinks[1].devices\n\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do --插入16个通道\n \tlog.debug('chya_0605 child=%s', json.encode(child))\n channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\tif allSubData[channelNo]~=nil then\n \tlog.debug('chya_0605 解析通道%s数据', channelNo)\n \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo,timenow) ---插入数据\n \ttable.insert(out.data, result)\n \tend\n end\n end\n else\n log.debug('chya_0605 数据无效=%s', resp)\n out.result = {code = ercode, msg = erormsg}\n end\n else\n log.debug('chya_0605 ok=false')\n out.result = {code = '1002', msg = 'ok=false'}\n end\n\n local resultData = json.encode(out)\n log.debug('chya_0605 resultData=%s', resultData)\n ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n local DataList = {}\n local subDataArea = string.sub(hexStr, 19, -6)\n\tlog.debug('chya_0605 subDataArea=%s',subDataArea)\n local dataCount = string.len(subDataArea) / 14\n for i = 1, dataCount do\n local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 14 + 1, (i - 1) * 14 + 14)\n local channelStr = string.sub(singleChannelDataHex, 1, 2)\n local subChannel = tonumber(channelStr,16)\n local subData = string.sub(singleChannelDataHex, 3, 6)\n DataList[subChannel] = iota.hexToShort(subData, 0, 'B')/10\n \tlog.debug('chya_0605 getAllDatas DataList[%s]=%s',subChannel,DataList[subChannel])\n end\n return DataList\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr,timenow)\n log.debug('chya_0605 datatable=%s', json.encode(datatable))\n local subData = {\n type = 1,\n data = {},\n device = '',\n result = {}\n }\n local freq = datatable[subChannelId]\n log.debug('chya_0605 通道%s的频率是%s',subChannelId ,freq )\n if childDevice ~= nil then\n if childDevice.uplink.capabilities[1].formula.metaid == '9f84b4f7-7860-47a6-9dc9-f066fb873dff' then --振弦公式\n local k = tonumber(childDevice.uplink.capabilities[1].formula.props.K)\n\n local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n local Aj = tonumber(childDevice.uplink.capabilities[1].formula.props.Aj)\n\t\t\n\n log.debug('chya_0605 module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n if k ~= nil and f0 ~= nil and freq ~= nil then\n Phy = k * (freq ^ 2 - f0 ^ 2) /Aj\n end\n end\n log.debug('chya_0605 freq=%s,Phy=%s', freq, Phy)\n singleData = {\n data = {\n\t\t\t \n frequency= tonumber(string.format('%0.1f',freq)),\n physicalvalue= tonumber(string.format('%0.5f',Phy))\n\t\t\t\t\n },\n device = childDevice.id,\n type = 1,\n\t\t\ttime=timenow\n }\n end\n --end\n\n --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n if device.dnlinks ~= nil then\n for k, dnlink in pairs(device.dnlinks) do\n for v, subdevice in pairs(dnlink.devices) do\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n log.debug('chya_0605 has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('chya_0605 has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\nIsValidOut = function(checkdata)\n log.debug('chya_0605 开始校验数据=%s', checkdata)\n\n local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n if hexHeader ~= 0x47 then\n ercode = 1001\n erormsg = 'HexCMD False'\n log.debug('chya_0605 HexCMDFalse[%s]', hexHeader)\n return false\n end\n return true\n --crc\nend\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n local len = string.len(str)\n local hex = ''\n for i = 1, len do\n local bi = string.byte(str, i)\n hex = hex .. string.format('%02X', bi)\n end\n return hex\nend\ntimeTounixtimestamp=function(dateTimeStr)\n\tlog.debug("chya_0605 进入时间解析")\n\tlocal year_a=string.sub(dateTimeStr,1,4)\n log.debug("chya_0605 year_a是:%s",year_a)\n\tlocal month_a=string.sub(dateTimeStr,5,6)\n\t\n\tlocal day_a=string.sub(dateTimeStr,7,8)\n\n\tlocal hour_a=string.sub(dateTimeStr,9,10)\n\n\tlocal minute_a=string.sub(dateTimeStr,11,12)\n\t\n\tlocal second_a=string.sub(dateTimeStr,13,14)\n\n \n\n local year = tonumber(year_a)\n\tlog.debug("chya_0605 year是:%s",year)\n\tlocal month = tonumber(month_a)\n\tlog.debug("chya_0605 month是:%s",month)\n local day = tonumber(day_a)\n\tlog.debug("chya_0605 day是:%s",day)\n local hour = tonumber(hour_a)\n\tlog.debug("chya_0605 hour是:%s",hour)\n\tlocal minute = tonumber(minute_a)\n\tlog.debug("chya_0605 minute是:%s",minute)\n local second = tonumber(second_a)\n\tlog.debug("chya_0605 second是:%s",second)\n \n timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second})\n\tlocal recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n\tlog.debug("chya_0605 recordTime是:%s",recordTime)\n\treturn recordTime\nend\n INLINE 2020-06-05 15:01:36.65+08 2020-12-11 15:57:58.592+08 2020-06-05 \N
+e55f6c54-15a7-4a8e-ac30-a89edfe3d818 szwygc_DCS4 \N 1.0 38913139-1273-4b5a-9155-e4aff0fc89ee 38913139-1273-4b5a-9155-e4aff0fc89ee f 38913139-1273-4b5a-9155-e4aff0fc89ee Lua --字符串ascii->字符\nstart=function()\n --log.debug("szwygc_DCS4: start module %s, ", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n --log.debug("szwygc_DCS4: Data=%s",hex)\n\t--全局\n out={\n data ={},\n result = {},\n\t\ttype=2\n }\n\n local sData= HextoStr(hex)\n log.debug("szwygc_DCS4: sData=%s",sData)\n local spliteData = Split(sData,';')\n\tlocal moduleData = Split(spliteData[3],':') \n\n\tlocal moduleNo = moduleData[2]--模块号\n\n\tlocal spliteData1 = Split(sData,'START;')\n local spliteData2 = Split(spliteData1[2],';END')\n\t\n local spliteData3 = Split(spliteData2[1],';')\n\t \n\t local arrlength=table.getn(spliteData3)\n\t \n\t --log.debug("szwygc_DCS4: spliteData3=%s",json.encode(spliteData3))\n\t \n\t \n\tfor k, v in pairs(spliteData3) do\n\t\t--log.debug("szwygc_DCS4: k=%s,v=%s",k,v)\n\t\tlocal Phy\n\t\tlocal allData=Split(v,':')\n\t\tlocal type_sensor=string.sub(allData[1],1,2)\n\t\tlog.debug("szwygc_DCS4: type_sensor=%s v=%s",type_sensor,v)\n\t\tlocal type_param=string.sub(allData[1],4,5)\n\t \n\t\t\n\t\tif type_sensor=='ZX' and type_param == 'SZ' then \n\t\t\tlocal fre\n\t\t\tlocal temp\n\n\t\t\tfre = Split(spliteData3[k],':')\t\n\t\t\tlocal frequency=tonumber(fre[2])\n\t\t\tlocal channelNo=tonumber(string.sub(fre[1],6,-1)) \n\t\t\ttemp = Split(spliteData3[k+1],':')\n\t\t\tlocal temperature=tonumber(temp[2])\t\t\t\t\t\n\t\t\tlocal childDevice = getDeviceInfos(moduleNo,channelNo)\t\n log.debug('szwygc_DCS4 childDevice=%s',json.encode(childDevice)) \n\n\t\t\tif\tchildDevice~=nil then\n\t\t\t\tdeviceId=childDevice.id\n\t\t\t\tlocal K = childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\t\t\n\t\t\t\tlocal F0 = childDevice.uplink.capabilities[1].formula.props.F0\n\t\t\t\tlocal Aj = childDevice.uplink.capabilities[1].formula.props.Aj\n\t\t\t\t--local T0 = childDevice.uplink.capabilities[1].formula.props.T0\n\t\t\t\tif K ==nil or F0==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\n\t\t\t\telse\n\t\t\t\t\tPhy=K*(frequency^2 - F0^2)/Aj\n\t\t\t\tend \n\t\t\t\n\t\t\t\tlocal data1 = {\n\t\t\t\t\tdata={\n\t\t\t\t\t\tfrequency=frequency,\n\t\t\t\t\t\n\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1 \n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t--log.debug("szwygc_DCS4:(振弦) out=%s",json.encode(out))\n\t\t\telse\n\t\t\t\t--log.debug('szwygc_DCS4 子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\t\tend\n\t\telseif type_sensor=='ZX' and type_param == 'ZZ' then\n\t\n\n\n\t\telseif type_sensor=='CX' then\n\t\t\t--log.debug('szwygc_DCS4 Step into CX')\n\t\t\tlocal cexie=Split(spliteData3[arrlength],':')\n\t local cexieData=Split(cexie[2],',')\n\t\t\t--log.debug('szwygc_DCS4 cexieData=%s', json.encode(cexieData))\n\t\t\tfor kk, vv in pairs(cexieData) do\n\t\t\t\t--log.debug('szwygc_DCS4 模块号=%s,通道号=%s', moduleNo, kk)\n\t\t\t\tlocal childDevice = getDeviceInfos(moduleNo, kk+4)\n\t\t\t\tphysicalvalue = vv\n\t\t\t\t--log.debug('szwygc_DCS4 测斜physicalvalue=%s,通道号=%s', physicalvalue, kk)\n\t\t\t\tlocal deviceId\n\t\t\t\tif childDevice ~= nil then\n\t\t\t\t\tdeviceId = childDevice.id\n\t\t\t\t\t--log.debug('szwygc_DCS4:子设备原形childDevice=%s', json.encode(childDevice))\n\n \n local data1 = {\n data = {\n physicalvalue=physicalvalue\n },\n device = deviceId,\n type = 1\n }\n table.insert(out.data, data1)\n \n \n\t\t\t\telse\n\t\t\t\t\tlog.debug('szwygc_DCS4 子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\tend\n\t\t\tend\n\t end \n\tend \n\n local resultData =json.encode(out) --输出传递到平台上\n log.debug("szwygc_DCS4: result=%s",json.encode(out))\n ctx:notify(resultData)\n\tlocal returnTime=device.props.returnTime\n\tlocal unitType=device.props.unitType\n\tlocal ceMoudle=device.props.ceMoudle\n \tlocal cmd ='$SOUTH$;ZX_HC:' .. returnTime .. ';CX_LX:' .. unitType .. ';CX_SN:' .. ceMoudle .. ';END'\n\t--log.debug("szwygc_DCS4: cmd=%s",cmd)\n\tctx:asend(toHexStr(cmd))\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n--string split函数 分割相应的字符\nSplit=function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n if device.dnlinks[1].devices ~=nil then\n \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t moduleStrCheck=child.props.moduleId\n\t\t\t channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(channelStrCheck) == tonumber(channelNoId) then\n return child\n\t\t\tend\n \t\n\t\tend\n else\n log.debug("szwygc_DCS4: subdevices是nil")\n return nil\n end\nend\n\n INLINE 2020-06-12 09:22:47.278+08 2020-06-15 10:09:34.234+08 2020-06-12 \N
+778be798-daba-48ac-acb5-7107c728189c tjhttp_qj \N 1.0 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 f 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 Lua \nstart = function()\n log.debug('tjhttp_qj device=%s', json.encode(device))\n\tlog.debug('tjhttp_qj device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n\n log.debug('tjhttp_qj', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n \n log.debug('tjhttp_qj [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n\n\tlocal timeStamps=bodypkg['create_time']\n\tlocal timenow=unixtimestamp (timeStamps)\n\tlocal sensorid=bodypkg['id']\n \tlocal anglex=bodypkg['data']\n\tlocal angley=bodypkg['data1']\n\tlog.debug('tjhttp_qj 得到所有数据%s ', json.encode(allData))\n\t\n\t\n\t\n\tif tonumber(sensorid) == tonumber(moduleNo) then\n\tout={\n data={\n\t anglex=anglex,\n\t angley=angley\n },\n\t time=timenow\n\t}\n\tend\n\n \n log.debug('tjhttp_qj [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend\nunixtimestamp = function(datestr)\n \n local year = tonumber(string.sub(datestr,1,4))\n local month = tonumber(string.sub(datestr,6,7))\n local day = tonumber(string.sub(datestr,9,10))\n local hour = tonumber(string.sub(datestr,12,13))\n local minute = tonumber(string.sub(datestr,15,16))\n local second = tonumber(string.sub(datestr,18,19))\n --log.debug("soilDT14301 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n --log.debug("soilDT14301 timenum=%s",timenum)\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --log.debug("soilDT14301 recordTime=%s",recordTime)\n return recordTime\nend INLINE 2020-12-11 08:58:10.076+08 2020-12-12 13:55:13.804+08 2020-12-11 \N
+32333345-3fd9-4150-8f8e-27418047f280 td_http \N 1.0 256d53e2-0a91-4903-9753-736649588b98 256d53e2-0a91-4903-9753-736649588b98 f 256d53e2-0a91-4903-9753-736649588b98 Lua start = function()\n log.debug('td_http 设备原型=%s' ,json.encode(device))\n local req = {\n type = 'http',\n url = 'http://gtd.vp.cn/dataChart/queryShareDataList.do?username=%s&password=%s&idType=0&dataType=0&startTime=%s&endTime=%s&idCode=%s', \n method = 'post',\n\n }\n\treq.ContentType = 'application/json'\n\t\n local moduleNo=device.props.moduleNo\n\tlog.debug('td_http moduleNo=%s', moduleNo)\n\t\n\tlocal username=device.props.username\n\tlocal password=device.props.password\n\n\n\tlocal aa=os.time()\n\tlocal endTime = os.date('%Y-%m-%d%20%H:%M:%S', aa)\n log.debug('td_http: endTime=%s', endTime)\n local beginTimestr = aa-4200\n\tlocal startTime = os.date('%Y-%m-%d%20%H:%M:%S', beginTimestr)\n log.debug('td_http: startTime=%s', startTime)\n\t\n\t\n req.url=string.format(req.url,username,password,startTime,endTime,moduleNo)\n\tlog.debug('td_http url=%s', req.url)\n \n local ok, ack = ctx:ssend(req, 4000)\n\n if ack == nil then\n log.debug('td_http: ok=%s', ok)\n else\n log.debug('td_http: ok=%s,token=%s', ok, ack.body)\n end\n local out = {\n type = 2,\n data = {},\n result = {}\n }\n if not ok or ack == nil then\n out.result = {\n code = 1002,\n msg = 'timeout'\n }\n else --OK\n if ack.code == 200 and ack.body ~= '' then -- http应答\n local dataTable = json.decode(ack.body)\n \n log.debug('td_http ack=%s', ack.body)\n local dataList=dataTable.dataList\n\t\t\tfor k, v in pairs(dataList) do\n\t\t\t\tlocal channelNo=tonumber(string.sub(v.paraId,21,24),16)\n\t\t\t\tlocal sensortype=tonumber(string.sub(v.paraId,25,28),16)\n local serialnum=tonumber(string.sub(v.paraId,29,32),16)\n\t\t\t\tlocal timenow=unixtimestamp(v.collectTime)\n \n\t\t\t\tlocal paraValue=tonumber(v.paraValue)\n\t\t\t\t\n\t\t\t\t\t\tlocal childDevice = getDeviceInfo(moduleNo, channelNo,sensortype,serialnum)\n --\n if childDevice ~= nil then\n \n \n \n local data1 = {\n data = {\n physicalvalue = tonumber(paraValue)\n },\n device = childDevice.id,\n time = timenow,\n type = 1\n }\n table.insert(out.data, data1)\n \n\t\t\t\t\t\t\t\n\t\t\t\t\t\tend \n\n log.debug('td_http moudleid=%s data:%s', device.props.pointId, json.encode(out))\n end\n\n else\n log.debug('td_http: request data error:%s body:%s', ack.code, ack.body)\n end\n end\n ctx:done(json.encode(out))\nend\n\nSleep = function(n)\n local t0 = os.clock()\n while os.clock() - t0 <= n do\n end\nend\nunixtimestamp = function(datestr)\n \n local year = tonumber(string.sub(datestr,1,4))\n local month = tonumber(string.sub(datestr,6,7))\n local day = tonumber(string.sub(datestr,9,10))\n local hour = tonumber(string.sub(datestr,12,13))\n local minute = tonumber(string.sub(datestr,15,16))\n local second = tonumber(string.sub(datestr,17,18))\n --log.debug("soilDT14301 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n --log.debug("soilDT14301 timenum=%s",timenum)\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --log.debug("soilDT14301 recordTime=%s",recordTime)\n return recordTime\nend\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId,sensortype,serialnum)\n if device.dnlinks[1].devices ~= nil then\n --log.debug("td_http 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n for index, child in pairs(device.dnlinks[1].devices) do\n -- log.debug("td_http:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n local moduleStrCheck\n local channelStrCheck\n\t\t\tlocal sensortypestr\n local serialnumstr\n\n moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n channelStrCheck = child.uplink.props.channel\n\t\t\tsensortypestr=child.uplink.props.sensortype\n serialnumstr=child.uplink.props.serialnum\n --log.debug('td_http 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n\n if tonumber(moduleStrCheck) == tonumber(moduleNoId) and tonumber(channelStrCheck) == tonumber(channelNoId) and tonumber(sensortypestr) == tonumber(sensortype) and tonumber(serialnumstr) == tonumber(serialnum) then\n log.debug('td_http: m=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n return child\n end\n end\n else\n log.debug('td_http: subdevices是nil')\n return nil\n end\nend\n\n INLINE 2020-12-31 13:37:23.227+08 2021-01-06 13:18:52.415+08 2020-12-31 \N
+864fa409-f305-4965-87cf-3465fe026979 cdaj_lxwy \N 1.0 8d49238d-6e0e-421c-adaf-f7472ec0b50e 8d49238d-6e0e-421c-adaf-f7472ec0b50e f 8d49238d-6e0e-421c-adaf-f7472ec0b50e Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \nstart=function()\n log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''--采集数据命令\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0xaa, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x02, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) \n\t \n\n \n ok,resp=ctx:ssend(buff,4000)\n\n local result="{}"\n if ok then\n\t\n\t\t\tresult = unmarshall(resp)\n\t\n\n end\n ctx:done(result)\nend\n\nunmarshall=function(hex)\n --print("LUA: Unmarshall: data is ", hex)\n -- var_dump(ctx,3,"")\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\t\n\n if (string.len(hex)==18) then\n local length = iota.hexToFloat(hex,3,'L')\n\t\t\t\n out.data = {\n length=length\n }\n \n else\n local message = 'Invalid Msg, len='\n out.result = {code=1001,msg=message}\n out.data = {}\n end\n return json.encode(out)\nend\n \n\n\n \n\n INLINE 2020-08-18 08:54:29.899+08 2020-08-18 09:01:06.837+08 2020-08-18 \N
+3aae5959-6db3-4c8b-8017-95c853c8a965 jxzy_gas_1104 \N 江西制药 手提式多合一通讯协议 NH3 C2H5OH VOC PM 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --F:\\SVN\\202005项目\\江西制药\\手提式多合一通信协议-山盾科技20200522(NH3 C2H5OH VOC PM).doc\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "jxzy_gas_1104", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\t\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x00, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x0c, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("jxzy_gas_1104 SSend error!")\n end\n ctx:done(result)\nend\n\n--01030000045cf\n--010318000000003dccd46b3effff1a3f806b693f1999253f800016a1db\n \n\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local NH3 = iota.hexToFloat(hex,3,'B') --氨气\n local C2H5OH = iota.hexToFloat(hex,7,'B') --乙醇\n\t\tlocal VOC = iota.hexToFloat(hex,11,'B') --挥发性有机化合物\n\t\tlocal OU = iota.hexToFloat(hex,15,'B') --臭气\n\t\tlocal PM10 = iota.hexToFloat(hex,19,'B') --pm10\n\t\tlocal PM25 = iota.hexToFloat(hex,23,'B') --pm2.5\n \n out.data = {\n\t\t\tNH3=tonumber(string.format('%0.2f',NH3)),\n\t\t\tC2H5OH=tonumber(string.format('%0.2f',C2H5OH)),\n\t\t\tVOC=tonumber(string.format('%0.2f',VOC)),\n\t\t\tOU=tonumber(string.format('%0.2f',OU)),\n\t\t\tPM10=tonumber(string.format('%0.2f',PM10)),\n\t\t\tPM25=tonumber(string.format('%0.2f',PM25))\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('jxzy_gas_1104 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 29 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('jxzy_gas_1104 数据校验通过')\n return true\n--crc\nend INLINE 2020-05-28 10:43:30.669+08 2020-06-05 15:07:22.736+08 2020-05-28 \N
+71fdedfb-633e-47df-b552-16c71d98a38e tt \N 校验协议,测试用的 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start=function()\nlocal hex='514e3d32303230303432303230353233393930313b53543d32313b434e3d323036313b50573d3132333435363b4d4e3d6e63786e6863643b466c61673d393b43503d26264461746154696d653d32303230303432303230303030303b7732313031312d4176673d302e303430342c7732313031312d466c61673d4e2626'\nlocal re=checkCRC16_ANSI(hex)\nlog.debug("tt_ansi 计算结果8201==%s",re)\n \n local out={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t} \n out.data.crc=re\n\t ctx:done(json.encode(out))\n end\n\nfunction checkCRC16_ANSI(buff)\n local len=string.len(buff)/2\n local crc16=0xffff\n for i = 1, len, 1 do\n crc16=math.modf(crc16/256)\n local buff_i_str=string.sub(buff,2*i-1,2*i)\n local buff_i=tonumber(buff_i_str,16)\n crc16=bit.bxor(crc16, buff_i)\n for j = 1, 8, 1 do\n local byte_bit=crc16%2\n if byte_bit==1 then\n crc16=bit.bxor(math.modf(crc16/2), 0xa001)\n else\n crc16=math.modf(crc16/2)\n end\n end\n\n\n end\n return string.format("%04x",crc16)\nend INLINE 2020-04-21 23:54:00.263+08 2020-06-09 08:58:58.08+08 2020-04-21 \N
+04e02398-2db0-408b-80c3-399c705ceed7 shxb_laser_9555 \N 1.0 9ea59fd2-e55b-4853-a447-0911d3b8b8dd 9ea59fd2-e55b-4853-a447-0911d3b8b8dd f 9ea59fd2-e55b-4853-a447-0911d3b8b8dd Lua --// \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shxb_laser_9555", device.moduleId or "[nil]")\n local endian = 'B'\n local buff=''\n local errout={\n data ={},\n result = {}\n }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shxb_laser_9555 设备模块通道 接口获取 m=%s json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x94, endian)\n buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC16\n ok,resp=ctx:ssend(buff,15000)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo)\n else\n log.debug("shxb_laser_9555 SSend error!")\n end\n ctx:done(result)\nend\n\n--01030400000B10FCCF\n--moduleId=1 \n--2.832\n\nunmarshall=function(hex,moduleStr)\n local out={\n data ={},\n result = {}\n }\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local length = iota.hexToUInt(hex,3,'B')/10000.0\n \n \n out.data = {\n physicalvalue= tonumber(string.format('%0.4f',length))\n\t\t\t--physicalvalue\t=length\n }\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n log.debug('shxb_laser_9555 开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 9 then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n\tif iota.hexToUInt(data,3,'B') == 0xffffffff then\n errcode = 1001\n errormsg = '采样错误' \n return false\n end\n\t\n log.debug('shxb_laser_9555 数据校验通过')\n return true\n--crc\nend\n\n\n\t\n \n INLINE 2018-06-07 14:15:36.077+08 2020-06-22 14:45:25.617+08 2018-06-07 \N
+62fa51b4-81bf-46a7-9c06-607eb1b34f3d fs-gnss \N GNSS 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --[[\n测试数据\n{\n "type":"http",\n "code":200,\n "body":"{\\"data\\":[{\\"pointId\\":8005,\\"recordTime\\":1516101950000,\\"x\\":2498030.7828,\\"y\\":506126.4067,\\"z\\":90.6906},{\\"pointId\\":8005,\\"recordTime\\":1516147175000,\\"x\\":2498030.7607,\\"y\\":506126.3922,\\"z\\":90.7774}]}"\n}\n]]--\nstart=function()\n --log.debug("fs_gnss start moudleid=%s", device.props.pointId or "nil")\n --local apiname="findmm.record.queryByPointId"\n\tlocal req = {\n type= "http",\n url=device.uplink.props.url.."%s/data?startTime=%s&endTime=%s",\n \t--url="http://218.3.150.108:7003/gnss/%s/data?startTime=%s&endTime=%s", \n \tmethod="get",\n \tcontent="text/html",\n header={},\n }\n local param={\n pointId= tonumber(device.props.pointId),\n pageNo=1, \n pageSize=1, \n }\n local beginTime=tostring(stringToTime(device.props.beginTime)*1000)\n local r1,ok = redis.get(device.id.."_endTime")\n if ok and r1~=nil then\n beginTime=r1 -- 1200000\n end\n local endTime=os.time()*1000\n\n req.url=string.format(req.url,device.props.pointId,beginTime,endTime)\n --log.debug("fs_gnss moudleid=%s request url=%s",device.props.pointId,req.url)\n \n local ok,ack=ctx:ssend(req,4000)\n\n if ack==nil then\n log.debug("fs_gnss moudleid=%s result=%s,ack= nil",device.props.pointId,ok)\n else\n log.debug("fs_gnss moudleid=%s result=%s,ack=%s",device.props.pointId,ok,json.encode(ack))\n end\n\n local out={\n type = 2,\n data ={},\n result = {}\n }\n if not ok or ack==nil then\n out.result={\n code=1002,\n msg="timeout",\n }\n else --OK\n if ack.code==200 and ack.body ~="" then -- http应答\n qx=json.decode(ack.body) -- 有数据\n --log.debug("fs_gnss ack=%s",ack.body)\n local items = #qx.data or 0\n --log.debug("fs_gnss totalItems=%d", items)\n\t\t\tlocal data1 ={}\n if items > 0 then\n for i=1,items,1 do\n local item= qx.data[i]\n data1 = {\n data={\n x=item.x*1000 or 0,\n y=item.y*1000 or 0,\n z=item.z*1000 or 0,\n },\n device=device.id,\n \t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(item.recordTime)/1000)),\n type=1 \n }; \n table.insert(out.data,data1)\n\t\t\t\t\t--log.debug("fs_gnss moudleid=%s set beginTime = %s , endtime = %s",device.props.pointId,beginTime,item.recordTime)\n\t\t\t\t\tif tonumber(beginTime) < tonumber(item.recordTime) then\n\t\t\t\t\t\tbeginTime = item.recordTime\n\t\t\t\t\t\t--log.debug("fs_gnss moudleid=%s Replace beginTime = %s ",device.props.pointId,beginTime)\n\t\t\t\t\tend\n end\n\t\t\t\t\n log.debug("fs_gnss moudleid=%s out:%s",device.props.pointId,json.encode(out))\n\t\t\t\t--log.debug("fs_gnss moudleid=%s set lasttime ok key=%s,value=%s",device.props.pointId,device.id.."_endTime",beginTime)\n\t\t\t\tif redis.set(device.id.."_endTime", tostring(beginTime)) then\n\t\t\t\t\tlog.debug("fs_gnss moudleid=%s redis set beginTime = %s ",device.props.pointId,tostring(beginTime))\n\t\t\t\tend\n\t\t\t\t\n\t\t\t\t--log.debug("fs_gnss step redis moudleid=%s ",device.props.pointId)\n\t\t\t\tlocal disport = device.props.disport\n\t\t\t\tlog.debug("fs_gnss ack disport=%s",disport)\n\n\t\t\t\tif disport~=nil then\n\t\t\t\t\t-------上报江西地灾平台-------\n\t\t\t\t\tlocal title= "L1_GP_1"\n\t\t\t\t\tlocal req = {\n\t\t\t\t\t\t\ttype= "http",\n\t\t\t\t\t\t\turl="http://171.34.52.5:10021/api/devices/datapoints?type=1",\n\t\t\t\t\t\t\tmethod="post",\n\t\t\t\t\t\t\tContentType="application/json",\n\t\t\t\t\t\t\theader={},\n\t\t\t\t\t\t}\n\t\t\t\t\tlocal x = data1.data.x or 0\n\t\t\t\t\tlocal y = data1.data.y or 0\n\t\t\t\t\tlocal z = data1.data.z or 0\n\t\t\t\t\tlog.debug("fs_gnss x=%s y :%s z %s",x,y,z)\n\t\t\t\t\tlocal bodystr = '{"'..disport..'":{"'..title..'":"'..tostring(x)..','..tostring(y)..','..tostring(z)..'"}}'\n\t\t\t\t\t--log.debug("fs_gnss bodystr :%s",bodystr)\n\t\t\t\t\tlocal apikey = device.props.password\n\t\t\t\t\tbodystr = '{"deviceId":"'..disport..'","apikey":"'..apikey..'","data":'..bodystr..'}'\n\t\t\t\t\tlog.debug("fs_gnss bodystr2 :%s",bodystr)\n\t\t\t\t\treq.body = bodystr\n\t\t\t\t\tlocal ok,ack=ctx:ssend(req,4000)\n\t\t\t\t\tlog.debug("fs_gnss ack disaster=%s",ack.body)\n\t\t\t\tend\n\t\t\t\tctx:done(json.encode(out))\n else\n log.debug("fs_gnss moudleid=%s has not new data",device.props.pointId)\n end\n else\n log.debug("fs_gnss moudleid=%s request data error:%s body:%s",device.props.pointId,ack.code,ack.body) \n end\n end\nend\n \nstringToTime=function( timeString ) --yyyyMMddHHmmss to 时间戳\n local yyyy = tonumber(string.sub(timeString , 1, 4)) \n local MM = tonumber(string.sub(timeString , 5, 6)) \n local DD = tonumber(string.sub(timeString , 7, 8))\n local HH = tonumber(string.sub(timeString , 9, 10))\n local mm = tonumber(string.sub(timeString , 11, 12))\n local ss = tonumber(string.sub(timeString , 13, 14))\n return os.time({year = yyyy, month = MM, day =DD, hour =HH, min =mm, sec = ss}) \nend \n\n INLINE 2018-03-05 11:51:31.783+08 2021-02-19 16:58:07.136+08 2018-03-05 \N
+213fe261-1b26-496d-adb3-4f84b6f2852c fs_trwsd_1166 \N 套牌 深圳欧速电子 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//201806项目\\OSA-2W 土壤温湿度传感器.pdf\nstart=function()\n \tlocal endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 3, endian) -- 1: 指令: 0x03 = 采集\n buff=iota.appendHexWord(buff, 0 ,endian) -- 2: 温湿度\n\tbuff=iota.appendHexWord(buff, 2 ,endian) -- 2:寄存器个数\n\tbuff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n log.debug(string.format("fs_trwsd_1166 out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n ctx:done(result)\nend\n\n\n--02030400ef0087b8a4\n--"humidity": 13.5,\n--"temperature": 23.9\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \tlocal Temp= iota.hexToShort(hex,3,'B')/10\n local humidy = iota.hexToShort(hex,5,'B')/10\n \n out.data = {\n temperature=Temp,\n \thumidity = humidy\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('fs_trwsd_1166 开始校验数据 %s',data)\n if data == nil or string.len(data)/2~=9 then\n errormsg = string.gormat('Data is nil or invalid length=[%s]',string.len(data))\n errcode = 1002\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n return false\n end\n if tonumber(moduleNo_check) ~= tonumber(string.sub(data,1,2)) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('fs_trwsd_1166 数据校验通过')\n return true\n--crc\nend\n\nonData=function()\nend INLINE 2020-06-10 13:39:40.858+08 2020-08-06 13:40:47.643+08 2020-06-10 \N
+f6592048-0f23-403e-ae55-9f80fb9155e2 shzr_621 \N 1.0 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f 8d2f03c7-32a2-42e4-befc-7dde5c965472 Lua --D:\\SVN\\201812项目\\20181221新增项目资料\\3 东北大学弓长岭露天矿--林邦杰\\水准仪协议说明书V1.2-2.pdf\nstart=function()\n log.debug("start %s, ctx=%s", "shzr_621.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 4, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 0, endian) \n buff=iota.appendHexByte(buff, 4, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("shzr_621,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '采集超时'} \n\t log.debug("shzr_621 m=%s, ok is false",moduleNo)\n\t ctx:done(json.encode(errout))\n\tend\nend\n--020400000004f1fa\n--02040842C8000041C8000072AE\n--"pressure": 100\n--temperature:25\nunmarshall=function(hex,moduleNoStr)\n log.debug("shzr_621 m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n local pressure =iota.hexToFloat(hex,3,'B')\n\t\tlocal temperature =iota.hexToFloat(hex,7,'B');\n out.data = { \n pressure=string.format("%0.3f",pressure),\n\t\t\ttemperature=string.format("%0.2f",temperature)\n };\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("shzr_621 m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n if data == nil or string.len(data)/2 ~= 13 then\n errormsg = string.format('无效的数据长度=%s≠%s',string.len(data)/2,13)\n errcode = 1001\n return false\n end\n \n local dataModule=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataModule) then\t\n errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n errcode = 1004\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2020-08-21 10:27:33.36+08 2020-08-21 10:27:33.36+08 2020-08-21 \N
+d35f3584-07e6-467e-8226-709572429d2d fs_laser_9509 \N Modbus统一通信协议-激光 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua --//02 协议分析/2017-01/ModBus统一通信协议.xls\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "fs_laser_9509", device.uplink.props.module or "[nil]")\n local endian = 'B'\n local buff=''\n buff=iota.appendHexWord(buff, 0x02, endian) \t\n \tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_laser_9509 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_laser_9509 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n \t-- local moduleNo=device.props.moduleId or device.uplink.props.module\n\tlog.debug("fs_laser_9509 moduleNo=%s 接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n buff=iota.appendHexWord(buff,moduleNo, endian) -- 2: 模块号\n buff=iota.appendHexByte(buff, 1, endian) \t-- 3: 指令: 0x01 = 采集\n\tbuff=iota.appendHexByte(buff, 0x2E, endian) -- 4: 指令: 是否加热,设置量程等 目前设置为0\n buff=iota.appendHexCrc(buff, endian ,0) \t-- 5: CRC\n\n ok,resp=ctx:ssend(buff,60000)\n log.debug('fs_laser_9509:发送数据=%s',buff)\n local result='{}'\n if ok then\n result = unmarshall(resp,moduleNo) \n \tlog.debug('fs_laser_9509:接收数据=%s',resp)\n else\n\t log.debug('fs_laser_9509:数据采集失败')\n end\n ctx:done(result)\nend\n\n\n\n--0002042C812E003D947D8141C900009EF77809000000000000000004CA\n--module=1068\n--"distance": 0.073,\n--"temperature": 25.12\nunmarshall=function(hex,moduleStr)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n \n local Distance = iota.hexToFloat(hex,7,'B',4);\n local Temp = iota.hexToFloat(hex,11,'B',2);\n out.data = {\n distance =Distance,\n length=Distance,--统一输出用\n temperature=Temp\n };\n\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n log.debug('fs_laser_9509:开始校验数据=%s',data)\n if data == nil or string.len(data)/2 ~= 29 then\n errormsg = 'Data is nil or invalid'\n errcode = 1002\n return false\n end\n \n if iota.hexToByte(data,4,'B') ~= 0x81 then\n errcode = 1003\n errormsg = 'Hex CMD False ' \n return false\n end\n \t local moduleNo_Data=tostring(iota.hexToShort(data,2,'B'))\n if moduleNo_check ~= moduleNo_Data then\t\n errormsg = string.format('数据的模块号与传感器不匹配%s[%s]',moduleNo_Data,moduleNo_check)\n errcode = 1004\n return false\n end\n log.debug('数据校验通过')\n return true\n--crc\nend\n \n\n\n \n\n INLINE 2018-01-26 16:18:31.368+08 2020-09-14 11:12:17.511+08 2018-01-26 \N
+1f1ee91e-0fdf-4bed-a761-937743c6a82a tidxhttp \N 1.0 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 f 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 Lua \nstart = function()\n log.debug('tjhttp device=%s', json.encode(device))\n\tlog.debug('tjhttp device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n\n log.debug('tjhttp', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n \n log.debug('tjhttp [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n\n\tlocal timeStamps=bodypkg['create_time']\n\n\tlocal sensorid=bodypkg['id']\n local physicalvalue=bodypkg['data']\n\n\tlocal timenow=unixtimestamp (timeStamps)\n\t\n\t\n\t\n\tif tonumber(sensorid) == tonumber(moduleNo) then\n \n \n \n \nout={\n data={\n\tphysicalvalue\t=physicalvalue\t\n },\n\t time=timenow\n\t}\n\tend\n\n \n log.debug('tjhttp [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\nunixtimestamp = function(datestr)\n \n local year = tonumber(string.sub(datestr,1,4))\n local month = tonumber(string.sub(datestr,6,7))\n local day = tonumber(string.sub(datestr,9,10))\n local hour = tonumber(string.sub(datestr,12,13))\n local minute = tonumber(string.sub(datestr,15,16))\n local second = tonumber(string.sub(datestr,18,19))\n --log.debug("soilDT14301 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n --log.debug("soilDT14301 timenum=%s",timenum)\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --log.debug("soilDT14301 recordTime=%s",recordTime)\n return recordTime\nend\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend INLINE 2020-12-11 10:15:47.87+08 2020-12-12 14:00:38.72+08 2020-12-11 \N
+ec25ae41-67c2-444f-966d-c5f90c23d25f bst_gxwd \N 1.0 dc9a58ac-add9-4e6b-8b9b-36a0b4866d47 dc9a58ac-add9-4e6b-8b9b-36a0b4866d47 f dc9a58ac-add9-4e6b-8b9b-36a0b4866d47 Lua --//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} --设备信息\n protocol=> {} --协议信息\n interface=> {} --接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n\nstart=function()\n\t--log.debug("start load yx_1401 moudle = %s ",device.uplink.props.module)\n log.debug("bst_gxwd alldevice = %s", json.encode(device))\n local endian = 'B'\n local buff=''\n local out={\n data ={},\n result = {},\n type=2\n }\n \n\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n\tlog.debug("bst_gxwd subdevices=%s,",json.encode(subdevices))\n\tif subdevices ~=nil then\n \tfor index,child in pairs(subdevices) do \n \t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channelid)\n\t\t\t\tlog.debug("bst_gxwd 子设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t moduleNo=child.props.moduleId\n\t\t\t channelNo=child.props.channelId \n\t\t\t log.debug("bst_gxwd 子设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n\t\t\tlocal registersNum=\t\t\n\t\t\tlocal buff='1e0000000006'\t\t \n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian) -- 2: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x04, endian) -- 1: 指令: 0x01 = 采集\n\t\t -- 1: 通道号\n\t\t\tbuff=iota.appendHexByte(buff, 0x03, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0xe8, endian)\n\t\t\tbuff=iota.appendHexWord(buff, endian ,0)\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\t--log.debug("bst_gxwd module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tlocal result='{}'\n if ok then \n\t\t\t result = unmarshall(resp,child,tostring(moduleNo),tostring(channelNo))--解析单条数据\n\t\t\t table.insert(out.data,result)\n\t\t\t\t--log.debug("bst_gxwd out=%s ",json.encode(out))\n\t\t\telse\n local errorSubData={\n data ={},\n device=child.id,\n type=1 \n }\n errorSubData.result = {code=1001,msg='通道采集超时'} \n \t\ttable.insert(out.data,errorSubData)\n\t\t\t log.debug("bst_gxwd module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id) \n\t\t\tend\n\t\t\t--log.debug('bst_gxwd 111111')\n end \n\t\t--log.debug('bst_gxwd 22222')\n \n end\n ctx:done(json.encode(out))\nend\n\n\n--000A000181016F0044E59D5D43BA104741CF000094A8 moduleId=1 channelID=1\n--000A0FA681096F0044E59D5D43BA104741CF00009659 moduleId=4006 channelID=9 原始值 frequency=1836.918 temp=25.875 \nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\nlog.debug("bst_gxwd subDevice=%s",json.encode(subDevice))\n local subData={\n data ={},\n\t\tdevice=subDevice.id,\n type=1 \n }\n\t\n\t--local subModuleId=module\n\t--local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n log.debug("bst_gxwd module=%s,channel=%s [%s] recv=[%s].",subModuleId,subChannelId,subDevice.id,hex)\n if ErrorCode then \n\t\tlocal freState=iota.hexToByte(hex,7,'B')%16\n\t\tlocal tempState=iota.hexToByte(hex,7,'B')-16\n\t\t\n\t\tif freState ~= 0 or tempState ~= 0 then\n\t\t\tif freState ~=0 then\n\t\t\t\tif tempState ~=0 then\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE_TEMPWIRE'\n\t\t\t\terrcode = 140103\n\t\t\t\tlog.debug('bst_gxwd ERR_VIBRW_FREWIRE_TEMPWIRE. module=%s,channel=%s ',subModuleId,subChannelId)\t\t\t \n\t\t\t\tend\t\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE'\n\t\t\t\terrcode = 140101\n\t\t\t\t\n\t\t\tend\t\t\t\t\t\t\n\t\t\terrormsg = 'ERR_VIBRW_TEMPWIRE'\n\t\t\terrcode = 140102\n\t\tend\n\t\t\n\t\tlocal freq=iota.hexToFloat(hex,8,'B',3)\n\t\tlocal am=iota.hexToFloat(hex,12,'B',3)\n local temp = iota.hexToFloat(hex,16,'B',3)\n --log.debug("bst_gxwd module=%s,channel=%s [%s] [freq=%s,am=%s,temp=%s].",subModuleId,subChannelId,subDevice.id,freq,am,temp) \n\t\tlocal Phy=0\n\t\t--for index,child in pairs(subDevice.uplink.capabilities) do \n --if child.capabilityMetaId == "97be25b3-75df-4137-a479-22343213fe74" then --振弦公式\n\t\t\t\tlocal k = tonumber(subDevice.uplink.capabilities[1].formula.props.K )\n\t\t\t\tlocal kt = tonumber(subDevice.uplink.capabilities[1].formula.props.Kt )\n\t\t\t\tlocal f0 = tonumber(subDevice.uplink.capabilities[1].formula.props.Fo )\n\t\t\t\tlocal t0 = tonumber(subDevice.uplink.capabilities[1].formula.props.To)\n log.debug("bst_gxwd module=%s,channel=%s [%s] formula params :k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",subModuleId,subChannelId,subDevice.id,k,kt,f0,t0,freq,temp,am)\n\t\t\t if k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\tlog.debug("bst_gxwd channel=%s,Phy=%s",subChannelId,Phy)\n\t\t\t\tend\n\t\t--end\n\t\t--end\n\t\tsubData.data={\n\t\t\t\t\tfrequency=freq,\n\t\t\t\t\ttemperature=temp,\n\t\t\t\t\tam=am,\n \tphysicalvalue=Phy\n\t\t\t\t\t}\n\t\t\t\t\tlog.debug("bst_gxwd subData=%s",json.encode(subData)) \n\telse\n subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\n\nIsValid=function(data,moduleId,channelId)\n if data == nil or string.len(data)/2 ~= 22 then\n errormsg = 'Data is nil or invalid length'\n errcode = 1001\n\t\tlog.debug('bst_gxwd : Data is nil or invalid length. module=%s channel=%s recv = %s',moduleId,channelId,data)\n return false\n end\n if iota.hexToByte(data,4,'B') == 0xc0 then\n errcode = 1001\n errormsg = 'Modbus Error Code ' \n\t\tlog.debug('bst_gxwd : Modbus Error Code = %s. module=%s channel=%s recv = %s',iota.hexToByte(data,5,'B'),moduleId,channelId,data)\n return false\n end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,2,'B'))\n\tif moduleId~= moduleStr then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n\t\tlog.debug('bst_gxwd : module error [errmodule=%s]. module=%s channel=%s recv = %s',moduleStr,moduleId,channelId,data)\n return false\n end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,5,'B'))\n\tif(channelStr=='0') then\n\t channelStr='1'\n\tend\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('bst_gxwd : channel error [errchannel=%s]. module=%s channel=%s recv = %s',channelStr,moduleId,channelId,data)\n\t\treturn false\n\tend\n return true\nend\n INLINE 2020-08-26 14:05:20.792+08 2020-08-26 14:05:20.792+08 2020-08-26 \N
+f4cc72f0-1d7e-4554-8d1f-041c9f267dee shzr_rn100 \N 1.0 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f 8d2f03c7-32a2-42e4-befc-7dde5c965472 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "shzr_rn100.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("shzr_rn100 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("shzr_rn100 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 3, endian) -- 1: 指令: 0x03 = 采集\n\tbuff=iota.appendHexWord(buff, 0x00, endian) -- 2: 0x00 起始地址低位 寄存器数据高位\n\t \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x05, endian) -- 2: 0x02 起始地址低位 寄存器数据高位\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000) --发送指令\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\n local speed\t=iota.hexToShort(hex,3,'B')/100\n\t local direction\t=iota.hexToShort(hex,5,'B')\n local temperature = iota.hexToShort(hex,7,'B')/10\n\t\tlocal humidity\t = iota.hexToShort(hex,9,'B')/10\n\t\tlocal pressure\t=iota.hexToShort(hex,11,'B')/10\n\n \n out.data = {\n\t\tspeed=speed,\n\t\tdirection=direction,\n temperature=temperature,\n\t\t\thumidity=humidity,\n\t\t\tpressure=pressure\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('shzr_rn100开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shzr_rn100数据校验通过')\n return true\n--crc\nend\n\n INLINE 2020-06-11 11:19:17.086+08 2020-06-11 17:29:41.183+08 2020-06-11 \N
+4ad803b7-f013-49f7-9df4-e04967d22021 shzr_rn110 \N 1.0 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f 8d2f03c7-32a2-42e4-befc-7dde5c965472 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "shzr_rn110.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("shzr_rn110 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("shzr_rn110 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 3, endian) -- 1: 指令: 0x03 = 采集\n\tbuff=iota.appendHexWord(buff, 0x00, endian) -- 2: 0x00 起始地址低位 寄存器数据高位\n\t\n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x03, endian) -- 2: 0x02 起始地址低位 寄存器数据高位\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000) --发送指令\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\n -- local scale = 1000000.00;\n --print("parsing data", hex)\n local temperature = iota.hexToShort(hex,3,'B')/10\n\t\tlocal humidity\t = iota.hexToShort(hex,5,'B')/10\n\t\tlocal pressure\t=iota.hexToShort(hex,7,'B')/10\n\n \n out.data = {\n temperature=temperature,\n\t\t\thumidity=humidity,\n\t\t\tpressure=pressure\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('shzr_rn110开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shzr_rn110数据校验通过')\n return true\n--crc\nend\n\n INLINE 2020-06-11 10:48:30.559+08 2020-06-11 17:19:32.647+08 2020-06-11 \N
+19a4d417-0852-4a3a-b445-995ba3718d47 shzr_rn640 \N 1.0 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f 8d2f03c7-32a2-42e4-befc-7dde5c965472 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug("load script %s, moduleId=%s", "shzr_rn640.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("shzr_rn640 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("shzr_rn640 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 3, endian) -- 1: 指令: 0x03 = 采集\n\tbuff=iota.appendHexByte(buff, 0x00, endian) -- 2: 0x00 起始地址低位 寄存器数据高位\n\tbuff=iota.appendHexByte(buff, 0x15, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x02, endian) -- 2: 0x02 起始地址低位 寄存器数据高位\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000) --发送指令\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n print(string.format("out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\n local length\t\t=iota.hexToInt(hex,3,'B')/10000\n\t\n \n out.data = {\n\t\tlength\t=length\t \t,\n\t\t\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('shzr_rn640开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shzr_rn640数据校验通过')\n return true\n--crc\nend\n\n INLINE 2020-06-11 11:35:54.668+08 2020-06-11 17:45:40.058+08 2020-06-11 \N
+c308aa59-7c0a-4460-b041-d36f3cd25a45 rtu_disaster_mop \N 1.0 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 f 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 Lua --地灾设备信息Topic发布\n-- 下发 采集仪 配置 topic = devmodule.."_setdevconfig"\n-- 下发 传感器 配置 topic =devmodule.."/ch/"..value.module\nstart=function()\n --log.debug("rtu_disaster_mop start , ctx=")\n\tlocal linkcnt = #(device.dnlinks)--遍历sensors,分配到4个channel\n\tlocal tableconfig_1 = {}\n\tlocal tableconfig_2 = {}\n\tlocal tableconfig_3 = {}\n\tlocal tableconfig_4 = {}\n\tlocal sencnt = #(device.dnlinks)\n\tif sencnt > 0 then \n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n\t\t\t\tif subdevice ~= nil then\n\t\t\t\t\tlocal ch = tonumber(subdevice.uplink.props.channel)\n\t\t\t\t\tlocal sentype = subdevice.uplink.props.type\n\t\t\t\t\tlocal sen_type = "000"\n\t\t\t\t\tif sentype == "地表裂缝计" then\n\t\t\t\t\t\tsen_type = "101"\n\t\t\t\t\telseif sentype == "墙裂缝计" then\n\t\t\t\t\t\tsen_type = "102"\n\t\t\t\t\telseif sentype == "加速度计" then\n\t\t\t\t\t\tsen_type = "103"\n\t\t\t\t\telseif sentype == "泥位计" then\n\t\t\t\t\t\tsen_type = "104"\n\t\t\t\t\telseif sentype == "预警喇叭" then\n\t\t\t\t\t\tsen_type = "105"\n\t\t\t\t\telseif sentype == "雨量计" then\n\t\t\t\t\t\tsen_type = "201"\n\t\t\t\t\telseif sentype == "土壤含水率" then\n\t\t\t\t\t\tsen_type = "202"\n\t\t\t\t\telseif sentype == "裂缝计" then\n\t\t\t\t\t\tsen_type = "203"\n\t\t\t\t\telseif sentype == "GNSS结果数据" then\n\t\t\t\t\t\tsen_type = "204"\n\t\t\t\t\telseif sentype == "GNSS" then\n\t\t\t\t\t\tsen_type = "205"\n\t\t\t\t\telseif sentype == "倾角计" then\n\t\t\t\t\t\tsen_type = "206"\n\t\t\t\t\telseif sentype == "水压力" then\n\t\t\t\t\t\tsen_type = "207"\n\t\t\t\t\telseif sentype == "次声" then\n\t\t\t\t\t\tsen_type = "208"\n\t\t\t\t\telseif sentype == "土压力计" then\n\t\t\t\t\t\tsen_type = "209"\n\t\t\t\t\telseif sentype == "振弦式应力计" then\n\t\t\t\t\t\tsen_type = "210"\n\t\t\t\t\telseif sentype == "地表位移" then\n\t\t\t\t\t\tsen_type = "211"\n\t\t\t\t\telseif sentype == "深部位移" then\n\t\t\t\t\t\tsen_type = "212"\n\t\t\t\t\telseif sentype == "倾斜仪" then\n\t\t\t\t\t\tsen_type = "213"\n\t\t\t\t\telseif sentype == "地下水水位" then\n\t\t\t\t\t\tsen_type = "24"\n\t\t\t\t\telseif sentype == "多点位移" then\n\t\t\t\t\t\tsen_type = "215"\n\t\t\t\t\telseif sentype == "渗压计" then\n\t\t\t\t\t\tsen_type = "216"\n\t\t\t\t\telseif sentype == "流速仪" then\n\t\t\t\t\t\tsen_type = "217"\n\t\t\t\t\telseif sentype == "气温" then\n\t\t\t\t\t\tsen_type = "218"\n\t\t\t\t\telseif sentype == "TDR变形计" then\n\t\t\t\t\t\tsen_type = "219"\n\t\t\t\t\telseif sentype == "泉水流量" then\n\t\t\t\t\t\tsen_type = "220"\n\t\t\t\t\telseif sentype == "沉降仪" then\n\t\t\t\t\t\tsen_type = "221"\n\t\t\t\t\telseif sentype == "钻孔测斜仪" then\n\t\t\t\t\t\tsen_type = "222"\t\t\t\t\n\t\t\t\t\telseif sentype == "土壤温湿度计" then\n\t\t\t\t\t\tsen_type = "223"\t\t \n\t\t\t\t\tend\n\t\t\t\t\tlocal sencon = {\n\t\t\t\t\t\tmodule = subdevice.uplink.props.module,\n\t\t\t\t\t\tchannel = tostring(subdevice.uplink.props.channel),\n\t\t\t\t\t\ttype = sen_type,\n\t\t\t\t\t\tsample = tostring(subdevice.uplink.props.sample),\n\t\t\t\t\t\tupload = tostring(subdevice.uplink.props.upload),\n\t\t\t\t\t\tplus = tostring(subdevice.uplink.props.plus),\n\t\t\t\t\t\tthreshold = tostring(subdevice.uplink.props.threshold),\n\t\t\t\t\t\tupperlimit = tostring(subdevice.uplink.props.upperlimit),\n\t\t\t\t\t\tlowerlimit = tostring(subdevice.uplink.props.lowerlimit),\n\t\t\t\t\t\tcp1 = tostring(subdevice.uplink.props.cp1),\n\t\t\t\t\t\tcp2 = tostring(subdevice.uplink.props.cp2),\n\t\t\t\t\t\tcp3 = tostring(subdevice.uplink.props.cp3),\n\t\t\t\t\t\tcp4 = tostring(subdevice.uplink.props.cp4)\n\t\t\t\t\t}\n\t\t\t\t\tif ch == 1 then\n\t\t\t\t\t\ttable.insert(tableconfig_1,sencon)\n\t\t\t\t\telseif ch == 2 then\n\t\t\t\t\t\ttable.insert(tableconfig_2,sencon)\n\t\t\t\t\telseif ch == 3 then\n\t\t\t\t\t\ttable.insert(tableconfig_3,sencon)\n\t\t\t\t\telseif ch == 4 then\n\t\t\t\t\t\ttable.insert(tableconfig_4,sencon)\n\t\t\t\t\tend\n\t\t\t\tend\n end\n end\n\tend\n\n\t--构成采集仪配置\n\tlocal alarm = "0"\n\tlocal gnss = "0"\n\tif device.props.alarm == "连接" then\n\t\talarm = "1"\t\n\tend\n\tif device.props.gnss == "连接" then\n\t\tgnss = "1"\t\n\tend\t\n\tlocal cmd = "$cmd=setworkmode&mode="..tostring(device.props.mode).."&GNSS="..gnss.."&AV_ALARM="..alarm.."_"..device.props.alarmchannel\n\tlocal devmodule = device.props.moduleid\n\tlocal r1,ok = redis.get(device.id.."_rtudevset")\n\tif ok and r1~=nil then\n\t\tlog.debug("rtu_disaster_mop [%s] ok=%s,r1=%s",devmodule,ok,r1)\n\t\tif r1 ~= tostring(device.props.mode) then\n\t\t\tlocal topic = devmodule.."_setdevconfig"\n\t\t\tlog.debug("rtu_disaster_mop [%s] topic=[%s],_setdevconfig send cmd =%s",devmodule ,topic,cmd)\n\t\t\tlocal okdev, ack = ctx:asend({type="mqtt",payload=cmd,topic = topic }) \n\t\t\tctx:sleep(1)\n\t\t\tif okdev then\n\t\t\t\tlocal crc = tostring(device.props.mode)\n\t\t\t\tredis.set(device.id.."_rtudevset", tostring(crc))\n\t\t\tend\n\t\tend\n\telse --第一次下发\n\t\tlocal topic = devmodule.."_setdevconfig"\n\t\tlog.debug("rtu_disaster_mop [%s] topic=[%s],_setdevconfig send cmd =%s",devmodule ,topic,cmd)\n\t\tlocal okdev_first, ack_first = ctx:asend({type="mqtt",payload=cmd,topic=topic }) \n\t\tctx:sleep(1)\n\t\tif okdev_first then\n\t\t\tlocal crc = tostring(device.props.mode)\n\t\t\tredis.set(device.id.."_rtudevset", tostring(crc))\n\t\tend\n\tend\n\t\n\t--传感器下发\n\tlog.debug("rtu_disaster_mop tableconfig_1 =%d, tableconfig_2 =%d tableconfig_3 =%d tableconfig_4 =%d ",#(tableconfig_1),#(tableconfig_2),#(tableconfig_3),#(tableconfig_4))\n\tGenratecmd(tableconfig_1,tableconfig_2,tableconfig_3,tableconfig_4)\t\nend\n\n\n\nGenratecmd = function(tableconfig_1,tableconfig_2,tableconfig_3,tableconfig_4)\t\n\tlocal devmodule = device.props.moduleid\n\tif #(tableconfig_1) > 0 then\t\t\t\n\t\tlocal count = #(tableconfig_1)\n\t\t----获取配置,判断是否下发\n\t\tlocal strdevice= toHexStr(json.encode(tableconfig_1))\n\t\tstrdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n\t\tlocal crc=string.sub(strdevice,-4,-1)\t\n\t\t----轮询下发\n\t\tlocal index = 0\n\t\tfor i,value in pairs(tableconfig_1) do \t\t\t\n\t\t\tlocal cmd = "$cmd=setsensor&sensor_num="\n\t\t\tindex = index + 1\n \t\tcmd = cmd..tostring(index)\n\t\t\tlocal senid = value.channel.."_"..value.module.."_"..value.type\n\t\t\tlocal cpcmd = value.cp1..","..value.cp2..","..value.cp3..","..value.cp4\n\t\t\tcmd = cmd..",{sensor_id="..senid.."&sample_intv="..value.sample.."&upload_intv="..value.upload.."&plus_intv="..value.plus.."&threshold="..value.threshold.."&upper_limit="..value.upperlimit.."&lower_limit="..value.lowerlimit.."&cp="..cpcmd.."}"\n\t\t\t---------------------------------------------------------------\n\t\n\t\t\tlocal topic =devmodule.."/ch/"..value.module\n\t\t\tlocal r1,ok1 = redis.get(device.id.."_rtuchset_1")\n\t\t\tif ok1 and r1~=nil then\t\t\n\t\t\t\tif r1 ~= crc then --配置有修改\n\t\t\t\t\tlog.debug("rtu_disaster_mop tableconfig_1 topic =%s cmd =%s",topic, cmd)\n\t\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic }) \n\t\t\t\t\tctx:sleep(1)\n\t\t\t\tend\n\t\t\telse --第一次配置下发\n\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic }) \t\n\t\t\tend\n\t\tend\n\t\t---记录\n\t\tredis.set(device.id.."_rtuchset_1", tostring(crc))\n\tend\n\tif #(tableconfig_2) > 0 then\t\t\t\n\t\tlocal count = #(tableconfig_2)\n\t\t----获取配置,判断是否下发\n\t\tlocal strdevice= toHexStr(json.encode(tableconfig_2))\n\t\tstrdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n\t\tlocal crc=string.sub(strdevice,-4,-1)\t\n\t\t----轮询下发\n\t\tlocal index = 0\n\t\tfor i,value in pairs(tableconfig_2) do \t\t\t\n\t\t\tlocal cmd = "$cmd=setsensor&sensor_num="\n\t\t\tindex = index + 1\n \t\tcmd = cmd..tostring(index)\n\t\t\tlocal senid = value.channel.."_"..value.module.."_"..value.type\n\t\t\tlocal cpcmd = value.cp1..","..value.cp2..","..value.cp3..","..value.cp4\n\t\t\tcmd = cmd..",{sensor_id="..senid.."&sample_intv="..value.sample.."&upload_intv="..value.upload.."&plus_intv="..value.plus.."&threshold="..value.threshold.."&upper_limit="..value.upperlimit.."&lower_limit="..value.lowerlimit.."&cp="..cpcmd.."}"\n\t\t\t---------------------------------------------------------------\n\t\n\t\t\tlocal topic =devmodule.."/ch/"..value.module\n\t\t\tlocal r1,ok1 = redis.get(device.id.."_rtuchset_2")\t\t\t\n\t\t\tif ok1 and r1~=nil then\t\t\n\t\t\t\tif r1 ~= crc then --配置有修改\n\t\t\t\t\tlog.debug("rtu_disaster_mop tableconfig_2 topic =%s cmd =%s",topic, cmd)\n\t\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic }) \n\t\t\t\t\tctx:sleep(1)\n\t\t\t\tend\n\t\t\telse --第一次配置下发\n\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic }) \t\n\t\t\t\tctx:sleep(1)\n\t\t\tend\n\t\tend\n\t\t---记录\n\t\tredis.set(device.id.."_rtuchset_2", tostring(crc))\n\tend\n\tif #(tableconfig_3) > 0 then\t\t\t\t\n\t\tlocal count = #(tableconfig_3)\n\t\t----获取配置,判断是否下发\n\t\tlocal strdevice= toHexStr(json.encode(tableconfig_3))\n\t\tstrdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n\t\tlocal crc=string.sub(strdevice,-4,-1)\t\n\t\t----轮询下发\n\t\tlocal index = 0\n\t\tfor i,value in pairs(tableconfig_3) do \n\t\t\tlocal cmd = "$cmd=setsensor&sensor_num="\t\n\t\t\tindex = index + 1\t\t\t\n\t\t\tcmd = cmd..tostring(index)\n\t\t\tlocal senid = value.channel.."_"..value.module.."_"..value.type\n\t\t\tlocal cpcmd = value.cp1..","..value.cp2..","..value.cp3..","..value.cp4\n\t\t\tcmd = cmd..",{sensor_id="..senid.."&sample_intv="..value.sample.."&upload_intv="..value.upload.."&plus_intv="..value.plus.."&threshold="..value.threshold.."&upper_limit="..value.upperlimit.."&lower_limit="..value.lowerlimit.."&cp="..cpcmd.."}"\n\t\t\t---------------------------------------------------------------\n\t\n\t\t\tlocal topic =devmodule.."/ch/"..value.module\n\t\t\tlocal r1,ok1 = redis.get(device.id.."_rtuchset_3")\n\t\t\t\n\t\t\tif ok1 and r1~=nil then\t\t\n\t\t\t\tif r1 ~= crc then --配置有修改\n\t\t\t\t\tlog.debug("rtu_disaster_mop tableconfig_3 topic =%s cmd =%s",topic, cmd)\n\t\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic }) \n\t\t\t\t\tctx:sleep(1)\n\t\t\t\tend\n\t\t\telse --第一次配置下发\n\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic }) \t\n\t\t\t\tctx:sleep(1)\n\t\t\tend\n\t\tend\n\t\t---记录\n\t\tredis.set(device.id.."_rtuchset_3", tostring(crc))\n\tend\n\tif #(tableconfig_4) > 0 then\t\t\t\t\n\t\tlocal count = #(tableconfig_4)\n\t\t----获取配置,判断是否下发\n\t\tlocal strdevice= toHexStr(json.encode(tableconfig_4))\n\t\tstrdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n\t\tlocal crc=string.sub(strdevice,-4,-1)\t\n\t\t----轮询下发\n\t\tlocal index = 0\n\t\tfor i,value in pairs(tableconfig_4) do \t\t\n\t\t\tlocal cmd = "$cmd=setsensor&sensor_num="\t\n\t\t\tindex = index + 1\n\t\t\tcmd = cmd..tostring(index)\n \t\tlog.debug("rtu_disaster_mop tableconfig_4 cmd =%s", cmd)\n\t\t\tlocal senid = value.channel.."_"..value.module.."_"..value.type\n\t\t\tlocal cpcmd = value.cp1..","..value.cp2..","..value.cp3..","..value.cp4\n\t\t\tcmd = cmd..",{sensor_id="..senid.."&sample_intv="..value.sample.."&upload_intv="..value.upload.."&plus_intv="..value.plus.."&threshold="..value.threshold.."&upper_limit="..value.upperlimit.."&lower_limit="..value.lowerlimit.."&cp="..cpcmd.."}"\n\t\t\t---------------------------------------------------------------\n\t\n\t\t\tlocal topic =devmodule.."/ch/"..value.module\n\t\t\tlocal r1,ok1 = redis.get(device.id.."_rtuchset_4")\n\t\t\tif ok1 and r1~=nil then\t\t\n\t\t\t\tif r1 ~= crc then --配置有修改\n\t\t\t\t\tlog.debug("rtu_disaster_mop tableconfig_4 topic =%s cmd =%s",topic, cmd)\n\t\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic }) \n\t\t\t\t\tctx:sleep(1)\n\t\t\t\tend\n\t\t\telse --第一次配置下发\n\t\t\t\tlocal ok ack = ctx:ssend({type="mqtt",payload=cmd,topic=topic },1) \t\n\t\t\t\tctx:sleep(1)\n\t\t\tend\n\t\tend\n\t\t---记录\n\t\tredis.set(device.id.."_rtuchset_4", tostring(crc))\n\tend\nend\n\nonData=function(hex)\n\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend INLINE 2020-08-28 09:22:55.026+08 2020-08-28 09:22:55.026+08 2020-08-28 \N
+62d525af-9d57-4b02-a2e8-8fac8d6bc432 bjdh_sf \N 1.0 24ba1243-7e9a-4449-891c-e85657f257b5 24ba1243-7e9a-4449-891c-e85657f257b5 f 24ba1243-7e9a-4449-891c-e85657f257b5 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug(" load script %s, moduleId=%s", " bjdh_sf.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug(" bjdh_sf 设备模块通道 接口获取 m=%s,c=%s json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\t\n\t\tlog.debug(" bjdh_sf 设备模块通道 属性获取 m=%s,c=%s 接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n\tlog.debug(" bjdh_sf buff=%s",buff)\n buff=buff.."0400000002"\n\tlog.debug(" bjdh_sf bufff=%s",buff)\n buff=iota.appendHexCrc(buff, "L",0) -- 2: CRC\n\tlog.debug(" bjdh_sf buff2=%s",buff)\n ok,resp=ctx:ssend(buff,15000) --发送指令\n --local result="{}"\n if ok then\n\tlog.debug(" bjdh_sf aaaaa")\n result = unmarshall(resp)\n log.debug(" bjdh_sf result0=%s",result)\n -- print(string.format("out=%s,data=%s",resp, result))\n else\n log.debug(" bjdh_sf cccc")\n end\n\tlog.debug(" bjdh_sf result1=%s",result)\n\n ctx:done(result)\nend\n\n\nunmarshall=function(hex)\n \tlocal out={\n --type = 1,\n data ={},\n result = {}\n }\n\tlog.debug(" bjdh_sf vvvv")\n local ErrorCode = IsValid(hex)\n if ErrorCode then \n\t\tlog.debug("bjdh_sf there")\n local temph = iota.hexToByte(hex,3,'B')\n\t\tlog.debug("bjdh_sf temph=%s",temph)\n\t\tlocal templ = iota.hexToByte(hex,4,'B')\n\t\tlog.debug("bjdh_sf templ=%s",templ)\n\t\tlocal tempu= iota.hexToUShort(hex,3,'B')\n\t\tlocal temp\n\t\tif temph==0xFF then\n\t\t\tlog.debug("bjdh_sf temph=0xFF")\n\t\t\t temp=(tempu-65535-1)/100\n\t\telse\n\t\t\t temp = (temph*256+templ)/100\n\t\t\tlog.debug("bjdh_sf temph~=0xFF")\n\t\t\tlog.debug("bjdh_sf tempp=%s",temp)\n\t\tend\n\t\tlog.debug("bjdh_sf temp=%s",temp)\n\t\tlocal caph = iota.hexToByte(hex,5,'B')\n\t\tlocal capl = iota.hexToByte(hex,6,'B')\n\t\tlocal cap =(caph*256+capl)/100\n\t\tlocal data=''\n\t\tlog.debug("bjdh_sf cap=%s",cap)\n out.data = {\n capacity=cap,\n\t\t\ttemperature=temp\n }\n\t\tlog.debug("bjdh_sf data=%s",data)\n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data)\n log.debug(' bjdh_sf 开始校验数据')\n\tif string.len(data)/2 ~=9 then\n\t\tlocal message = 'Invalid Msg, len='\n\t\tout.result = {code=1001,msg=message}\n\t\t return false\t\n\tend\n if iota.hexToByte(data,1,'B') ~= 0x04 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n log.debug(' bjdh_sf 数据校验通过')\n return true\n--crc\nend\n\n INLINE 2020-09-15 08:49:26.411+08 2020-11-19 17:34:06.29+08 2020-09-15 \N
+1d9bdf0c-3623-425f-9d86-cb286fd007f0 tj_sz \N 1.0 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 f 5dfa1ffb-543a-43a7-9de1-30f0303e05d1 Lua \nstart = function()\n log.debug('tj_sz device=%s', json.encode(device))\n\tlog.debug('tj_sz device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n --\n --\n local moduleNo = device.uplink.props.id --模块\n\n log.debug('tj_sz', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n \n log.debug('tj_sz [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n\n\tlocal timeStamps=bodypkg['create_time']\n\n\tlocal sensorid=bodypkg['id']\n local physicalvalue=bodypkg['data']\n\n\tlocal timenow=unixtimestamp (timeStamps)\n\t\n\t\n\t\n\tif tonumber(sensorid) == tonumber(moduleNo) then\n \n \n \n \nout={\n data={\n\tphysicalvalue\t=physicalvalue\t,\n _acq_number=timenow\n },\n\t time=timenow\n\t}\n\tend\n\n \n log.debug('tj_sz [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\nunixtimestamp = function(datestr)\n \n local year = tonumber(string.sub(datestr,1,4))\n local month = tonumber(string.sub(datestr,6,7))\n local day = tonumber(string.sub(datestr,9,10))\n local hour = tonumber(string.sub(datestr,12,13))\n local minute = tonumber(string.sub(datestr,15,16))\n local second = tonumber(string.sub(datestr,18,19))\n\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n --log.debug("soilDT14301 timenum=%s",timenum)\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n --log.debug("soilDT14301 recordTime=%s",recordTime)\n return recordTime\nend\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend INLINE 2020-12-14 14:30:33.707+08 2020-12-15 09:41:14.884+08 2020-12-14 \N
+84e7b49c-247b-446c-a505-0ed6ab5de6e4 shzr_cm11 \N 1.0 8d2f03c7-32a2-42e4-befc-7dde5c965472 8d2f03c7-32a2-42e4-befc-7dde5c965472 f 8d2f03c7-32a2-42e4-befc-7dde5c965472 Lua --require "functions" -- 公共函数\n--[[\n 可用函数包:\n log: 日志\n convertor: 转换\n conn: 链接\n 全局变量:\n ctx: (只读)\n device => {} //设备信息\n protocol=> {} //协议信息\n interface=> {} //接口信息\n ssend: 同步发送数据\n asend: 异步发送数据\n done: 完成处理.\n notify: 通知结果\n]] \n--//协议参考文档: Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n \tlog.debug("load script %s, device=%s", "shzr_cm11.lua",json.encode(device))\n \tlocal endian = 'B'\n local buff=''\n\tlocal moduleNo\n\tlocal G\n\tlocal T0\n\tlocal R0\n\tlocal K\n\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\n\t\tG=device.props.G\n\t T0=device.props.T0\n\t R0=device.props.R0\n\t K=device.props.K\n\t\tlog.debug("shzr_cm11 设备模块通道 接口获取 m=%s,G=%s,T0=%s,R0=%s,K=%s,json.encode(moduleNo)=%s moduleId=%s ",moduleNo,G,T0,R0,K,json.encode(moduleNo),device.props.moduleId)\n\t\n\t\n buff=iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n buff=iota.appendHexByte(buff, 0x03, endian) --1: CMD 4\n buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x02, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) -- 2: CRC\n\n ok,resp=ctx:ssend(buff,15000) --发送指令\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo,G,T0,R0,K)\n print(string.format("shzr_cm11 out=%s,data=%s",resp, result))\n else\n --print("SSend error!")\n end\n -- ctx:asend("hello")\n ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr,G,T0,R0,K)\n \tlocal out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleStr)\n if ErrorCode then \n\n \n local freq= iota.hexToShort(hex,3,'B')/10\n\t\tlocal dResistance = iota.hexToShort(hex,5,'B')\n local A=1.4051\n\t\tlocal B=2.369\n\t\tlocal C=1.019\n\t\tlocal temp = 1 / (A * math.pow(10, -3) + B * math.pow(10, -4) * math.log(dResistance) + C * math.pow(10, -7) * math.pow(math.log(dResistance), 3)) - 273.2\n\t\tlocal r1=freq^2/1000\n\t\tlocal phy=G*(r1-R0)+K*(temp-T0)\n\n out.data = {\n frequency= freq,\n\t\t temperature= tonumber(string.format('%0.1f',temp)),\n\t\t\tphysicalvalue\t= tonumber(string.format('%0.2f',phy))\n\t\t\n\t\t\n\t\t\t\n };\n \n else\n out.result = {code=errcode,msg=errormsg} \n end\n return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n log.debug('shzr_cm11开始校验数据')\n if data == nil then\n errormsg = 'Data is nil or invalid'\n errcode = 1001\n return false\n end\n \n if iota.hexToByte(data,1,'B') ~= 0x03 then \n errcode = 1001\n errormsg = 'Hex CMD False ' \n return false\n end\n if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n errormsg = 'Invalid acq moduleId'\n errcode = 1004\n return false\n end\n log.debug('shzr_cm11数据校验通过')\n return true\n--crc\nend\n\n INLINE 2020-06-10 16:56:35.465+08 2020-06-11 15:47:48.63+08 2020-06-10 \N
+dad80a20-fe99-4fd7-951b-b7a4ea37a225 cxmnt \N 1.0 c9989314-4834-479b-bbdc-009a686b21c3 c9989314-4834-479b-bbdc-009a686b21c3 f c9989314-4834-479b-bbdc-009a686b21c3 Lua start=function()\n log.debug("cxmnt : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n if data ~=nil then\n log.debug("cxmnt : devices data =%s",data)\n ParseData(data) \n else\n log.error("cxmnt : recvd content is nil")\n end\nend\n\n\nfunction ParseData(data)\n local out={\n data ={},\n result = {},\n type=2\n }\n if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then --振动数据\n log.debug("cxmnt : 振动数据 data =%s",data)\n local package=iota.hexToShort(data,8,'L')\n local packagecount=iota.hexToShort(data,10,'L')\n local datpackage=string.sub(data,41,-9)\n local moduleid=iota.hexToShort(data,16,'L')\n\n local req1 =''\n local req2 =''\n local req =''\n req1=iota.appendHexByte(req1, 01 , 'L') -- 0-3 压缩协议 4-7 协议版本\n req1=iota.appendHexByte(req1, 0x02 , 'L')\n req1=iota.appendHexWord(req1, 0x0007 , 'L')\n req1=iota.appendHexWord(req1, 0x0000 , 'L')\n \n req2=iota.appendHexWord(req2, package , 'L')\n req2=iota.appendHexWord(req2, packagecount , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n req2=iota.appendHexWord(req2, moduleid , 'L')\n req2=iota.appendHexWord(req2, 0x0000 , 'L')\n local checkdat=req1..req2\n local checksum=HeadCheckSum(checkdat)\n req=req1\n req=iota.appendHexWord(req, checksum , 'L')\n req=req..req2\n req=iota.appendHexWord(req, package , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=iota.appendHexByte(req, 0 , 'L')\n req=req..'00000000'\n req=iota.appendHexCrc(req, 'L' ,0) --校验\n local crc16=string.sub(req,-4,-1)\n req=string.sub(req,1,-13)\n req=req..crc16\n req=iota.appendHexByte(req, 0 , 'L') \n req=iota.appendHexByte(req, 0xfa , 'L') \n log.debug("cxmnt: datfileback: %s", req)\n ctx:asend(req, 20000)\n\n if package==packagecount then\n local r1,ok = redis.get(device.id.."_mpzd")\n log.debug("cxmnt: 解析dat:r1= %s", r1)\n ParseFileDat(r1)\n else\n if package==1 then\n local firstpackage=string.sub(datpackage,-80,-1)\n redis.set(device.id.."_mpzd", firstpackage)\n log.debug("cxmnt: 接收dat:datpackage= %s", firstpackage)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据首包'\n }\n }\n ctx:notify(json.encode(re))\n else\n local r1,ok = redis.get(device.id.."_mpzd")\n log.debug("cxmnt: 接收dat:r1= %s package=%s", r1,package)\n local data=r1..datpackage\n redis.set(device.id.."_mpzd", data)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '振动数据'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n end\n else \n\t \n\t -- 非振动数据\n if string.sub(data,13,16)=='8a00' then\n local rtumodule=iota.hexToShort(data,3,'B')\n local power =iota.hexToByte(data,13,'B')\n log.debug("cxmnt: 剩余电量: %s", power)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\tlog.debug("cxmnt: 版本固件: %s", ver)\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\t\t\tredis.set(device.id.."_version", tostring(ver))\t\t\t\n\n local strdevice= toHexStr(json.encode(device))\n strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n local crc=string.sub(strdevice,-4,-1)\n log.debug("cxmnt : devices crc =%s",crc)\n local r1,ok = redis.get(device.id.."_mpset")\n if ok and r1~=nil then\n if crc == r1 then\n log.debug("cxmnt : 配置无修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 0, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("cxmnt: 苏醒帧返回: %s", req)\n ctx:asend(req, 20000)\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置无修改'\n }\n }\n ctx:notify(json.encode(re))\n else\n log.debug("cxmnt : 配置有修改")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("cxmnt: 苏醒帧返回: %s", req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n else\n log.debug("cxmnt : 配置初次配置")\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0A01, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0014, 'B') --数据区长度\n req=iota.appendHexWord(req, os.date("%Y"), 'B') -- 年\n req=iota.appendHexByte(req, os.date("%m"), 'B') \n req=iota.appendHexByte(req, os.date("%d"), 'B') \n req=iota.appendHexByte(req, os.date("%H"), 'B') \n req=iota.appendHexByte(req, os.date("%M"), 'B') \n req=iota.appendHexWord(req, os.date("%S"), 'B') --秒\n req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n req=iota.appendHexByte(req, 1, 'B') -- 是否下发\n req=iota.appendHexByte(req, 0, 'B') --是否等待升级\n req=iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n req=iota.appendHexByte(req, tonumber(htime), 'B') --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B') --指定分钟\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("cxmnt: 苏醒帧返回: %s", req)\n ctx:asend(req, 20000)\n redis.set(device.id.."_mpset", tostring(crc))\n ctx:sleep(2)\n Deploy() --配置\n end\n end\n \n if string.sub(data,13,16)=='8a02' then\n log.debug("cxmnt : 设备休眠")\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '设备休眠'\n }\n }\n ctx:notify(json.encode(re))\n end\n \n local rtumodule=iota.hexToShort(data,3,'B')\n if string.sub(data,13,16)=='8601' then\n local time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\tlog.debug("cxmnt r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver=r1\n\t\t\t\tlog.debug("cxmnt r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\tlog.debug("cxmnt powerstr=%s",powerstr)\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} \n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time \n\t\t\t}\n\t\t\ttable.insert(out.data,rst)\n local isover=iota.hexToByte(data,25,'B') --尾包\n local datalength=0\n local firststart=27\n for i=1,sensorCount,1 do\n firststart=firststart+datalength\n local sensorType=iota.hexToByte(data,firststart,'B')\n local module=iota.hexToShort(data,firststart+3,'B')\n local channel=iota.hexToByte(data,firststart+2,'B')\n datalength=iota.hexToByte(data,firststart+1,'B')+6\n if sensorType==0 then --振弦\n local childDevice=getZxDeviceInfo(module,channel)\n local rst = {\n data={\n frequency = iota.hexToFloat(data,firststart+12,'B'),\n am = iota.hexToFloat(data,firststart+16,'B'),\n temperature = iota.hexToFloat(data,firststart+20,'B')\t\t\t\t\t\n },\n device=childDevice.id,\n type=1,\n time=time \n }\n table.insert(out.data,rst)\n end\n if sensorType==1 then --485\n local childDevice=getDeviceInfo(module,channel)\n local protocalCode=iota.hexToShort(data,firststart+6,'B')\n if protocalCode==1503 or protocalCode==1502 then --测斜\n\t\t\t\t\tlog.debug("cxmnt: 测斜: %s", protocalCode)\n \t\tlog.debug("cxmnt: 测斜: %s, deviceid: %s", module,childDevice.id)\n local rst = {\n data={\n anglex = iota.hexToFloat(data,firststart+12,'B'),\n angley = iota.hexToFloat(data,firststart+16,'B'),\n temperature = iota.hexToFloat(data,firststart+20,'B')\n },\n device=childDevice.id,\n type=1,\n time=time \n }\t\t\t\t\t\n table.insert(out.data,rst)\n\t\t\t\t\t\tlog.debug("cxmnt: 测斜: %s", json.encode(out))\n end\n \n if protocalCode==9102 then --裂缝\n local childDevice=getDeviceInfo(module,channel)\n local rst = {\n data={\n length = iota.hexToFloat(data,firststart+12,'B')\n },\n device=childDevice.id,\n type=1,\n time=time \n }\n table.insert(out.data,rst)\n end\n \n if protocalCode==1102 then --温湿度\n local childDevice=getDeviceInfo(module,channel)\n local rst = {\n data={\n temperature = iota.hexToFloat(data,firststart+12,'B'),\n humidity = iota.hexToFloat(data,firststart+16,'B') \n },\n device=childDevice.id,\n type=1,\n time=time \n }\n table.insert(out.data,rst)\n end\n \n if protocalCode==9002 then --压差\n local childDevice=getDeviceInfo(module,channel)\n local rst = {\n data={\n physicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n frequency = iota.hexToFloat(data,firststart+16,'B'),\n temperature = iota.hexToFloat(data,firststart+20,'B')\n },\n device=childDevice.id,\n type=1,\n time=time \n }\n table.insert(out.data,rst)\n end\n\t\t\t\t\tif protocalCode==9030 then --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509 then --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992 then --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time \n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\t\t\n end\n end \n log.debug("cxmnt: dataresult: %s", json.encode(out))\n local req =''\n req=iota.appendHexByte(req, 0xfe, 'B') --帧头\n req=iota.appendHexWord(req, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n req=iota.appendHexWord(req, rtumodule , 'B') --模块号\n req=iota.appendHexByte(req, 0x01, 'B') --命令源\n req=iota.appendHexWord(req, 0x0601, 'B') --指令\n req=iota.appendHexWord(req, 0x0000, 'B') --消息ID\n req=iota.appendHexWord(req, 0x0000, 'B') --数据区长度\n req=iota.appendHexCrc(req, 'B' ,0) --校验\n req=iota.appendHexByte(req, 0xef, 'B') --帧尾 \n log.debug("cxmnt: databack: %s", req)\n ctx:asend(req, 20000)\n ctx:notify(json.encode(out)) \n end\n end\nend\n\nfunction Deploy()\n local total=totalSensors()\n log.debug("cxmnt : totalSensors =%s",total)\n local over=0\n local onepag=0\n local totallength=3\n local buff=''\n \n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n over=over+1\n onepag=onepag+1\n if subdevice.props.sensortype=='zx' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x00, 'B') --传感器类型\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n local settingvib = tonumber(colgain) + tonumber(incentive) * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n log.debug("cxmnt : settingvib =%s",settingvib)\n buff=iota.appendHexByte(buff, settingvib, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexByte(buff, subdevice.uplink.props.k, 'B') --振弦采集参数\n buff=iota.appendHexWord(buff, subdevice.uplink.props.f0, 'B') --振弦频率初值\n buff=iota.appendHexByte(buff, 0x00, 'B') --上传频谱ID\n buff=iota.appendHexByte(buff, 0x01, 'B') --采集选项\n end \n if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd' then \n totallength=totallength+18 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x01, 'B') --传感器类型\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n local setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n log.debug("cxmnt : setting =%s",setting)\n buff=iota.appendHexByte(buff, setting, 'B') --选项1 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x05, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B') --协议号\n buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B') --模块号\n buff=iota.appendHexByte(buff, 0x01, 'B') --子通道号\n end\n if subdevice.props.sensortype =='zd' then \n totallength=totallength+31 \n buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号 \n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n buff=iota.appendHexWord(buff, 0x0000, 'B') --传感器id \n buff=iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n buff=iota.appendHexByte(buff, 0x04, 'B') --传感器类型\n buff=iota.appendHexByte(buff, 0x00, 'B') --选项1\n buff=iota.appendHexByte(buff, 0x05, 'B') --选项2\n buff=iota.appendHexByte(buff, 0x01, 'B') --选项3\n buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n buff=iota.appendHexByte(buff, 0x12, 'B') --长度\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B') --定时采样间隔\n buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B') --定时采样时长\n buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B') --加速度触发采样时长\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B') --采样频率\n --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B') --滤波频率\n\n buff=iota.appendHexWord(buff, 0x42c8, 'B')\n buff=iota.appendHexWord(buff, 0x0000, 'B')\n buff=iota.appendHexWord(buff, 0x4248, 'B')\n buff=iota.appendHexWord(buff, 0x0000, 'B')\n local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n buff=iota.appendHexByte(buff, trigger1, 'B') --触发加速度\n buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B') --加速度范围\n buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B') --滞后点数\n\n end\n if over==8 or onepag==total then \n local buffhead=''\n buffhead=iota.appendHexByte(buffhead, 0xfe, 'B') --帧头\n buffhead=iota.appendHexWord(buffhead, 0x000b, 'B') --设备号:0x0B,多通道数据采集系统\n buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B') --模块号\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --命令源\n buffhead=iota.appendHexWord(buffhead, 0x0306, 'B') --指令\n buffhead=iota.appendHexWord(buffhead, 0x0000, 'B') --消息ID\n buffhead=iota.appendHexWord(buffhead, totallength, 'B') --数据区长度\n if onepag==total then\n buffhead=iota.appendHexByte(buffhead, 0x01, 'B') --尾包\n else\n buffhead=iota.appendHexByte(buffhead, 0x00, 'B') --尾包\n end\n buffhead=iota.appendHexByte(buffhead, total, 'B') --采集指令总通道指令个数\n buffhead=iota.appendHexByte(buffhead, over, 'B') --该分包通道指令个数\n buff=buffhead..buff\n buff=iota.appendHexCrc(buff, endian ,0) --校验\n buff=iota.appendHexByte(buff, 0xef, 'B') --帧尾\n local ok, ack = ctx:ssend(buff, 20000)\n log.debug("cxmnt : deploy back =%s",ack)\n buff=''\n if over==8 then\n over=0\n end\n totallength=3\n if onepag==total then\n log.debug("cxmnt 配置下发完成")\n local re = {\n result = nil,\n type = 1,\n data = {\n ack = '配置下发完成'\n }\n }\n ctx:notify(json.encode(re))\n end\n end \n end\n end \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n log.debug("cxmnt has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("cxmnt has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n if device.dnlinks ~= nil then\n --local subdevices = device.dnlinks[1].devices\n for i,dnlink in pairs(device.dnlinks) do \n for j,subdevice in pairs(dnlink.devices) do\n if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then \n return subdevice\n end \n end\n end\n log.debug("cxmnt has no device module=%s channel=%s",moduleid,channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug("cxmnt has no subdevices.")\n return nil -- 没有子设备\n end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n log.debug("cxmnt : dat content =%s", dathex)\n local out={\n data ={},\n result = {},\n type=2\n }\n local offset = 0\n local t = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local l = iota.hexToShort(dathex,offset,'B')\n offset = offset + 2\n local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n offset = offset + 1\n local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n offset = offset + 1\n local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n if subdevice ~= nil then\n offset = offset + 2\n local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n offset = offset + 4\n local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n offset = offset + 4\n local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n offset = offset + 1\n local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n offset = offset + 1\n local year = iota.hexToByte(dathex,offset,'B')+2000\n offset = offset + 1\n local mon = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local day = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local hour = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local min = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n local sec = iota.hexToByte(dathex,offset,'B')\n offset = offset + 1\n offset = offset + 12\n local Ldata = iota.hexToInt(dathex,offset,'B')\n offset = offset + 4\n log.debug("cxmnt deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n local floatcount = (string.len(dathex)/2-40)/4\n log.debug("cxmnt begin parse")\n local vols = {}\n\t\tlocal mean = 0\n for i= 1, floatcount do\n offset=40+(i-1)*4 \n vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n log.debug("cxmnt finish parse")\n \n local rst = {\n data={\n _data_type='vib',\n physicalvalue=vols,\n sampleFreq=samplefreq,\n filterFreq=filterfreq,\n gainAmplifier=gainamplifier,\n triggerType=triggertype,\n version=version\n },\n device=subdevice.id,\n type=1,\n time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec})) \n }\n table.insert(out.data,rst)\n \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power") --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\tlog.debug("cxmnt r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version") --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver=r1\n\t\t\tlog.debug("cxmnt r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("cxmnt powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t} \n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time \n\t\t}\n\t\ttable.insert(out.data,rstd)\n\t\tlog.debug("cxmnt cloudvibrate=%s",json.encode(out))\n ctx:notify(json.encode(out))\n else\n log.debug("cxmnt not found device module=%s channel=%s",deviceId,channel)\n end\nend\n\nfunction totalSensors()\n local sensorcnt=0\n for i,dnlink in pairs(device.dnlinks) do \n sensorcnt = #(dnlink.devices) + sensorcnt \n end\n return sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n local len = string.len(str);\n local hex='';\n for i =1,len do\n local bi = string.byte(str, i);\n hex=hex..string.format("%02X",bi);\n end\n return hex;\nend \n\nfunction HeadCheckSum(data)\n local sum=0\n local len = string.len(data)\n log.debug("cxmnt: len: %s", len)\n for i =1,len,4 do \n local te=tonumber(string.sub(data,i,i+3) ,16)\n log.debug("cxmnt: te: %s", te)\n sum = sum+ tonumber(te)\n end\n log.debug("cxmnt: sum: %s", sum)\n return 0xffff-sum\nend\n\n INLINE 2021-01-19 09:46:50.931+08 2021-01-19 09:46:50.931+08 2021-01-19 \N
+113b841e-f66a-4020-a065-95c8de705e15 hbss_zd \N 1.0 9f26c140-684e-41f5-80a9-b0c1f660b9f7 9f26c140-684e-41f5-80a9-b0c1f660b9f7 f 9f26c140-684e-41f5-80a9-b0c1f660b9f7 Lua \nstart=function()\n log.debug("start %s, ctx=%s", "hbss_zd.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n buff=iota.appendHexWord(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x83, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexByte(buff, 0x05, endian) \n\tbuff=iota.appendHexByte(buff, 0x06, endian) \n buff=iota.appendHexByte(buff, 0x07, endian) \n\tbuff=iota.appendHexByte(buff, 0x08, endian)\n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("hbss_zd,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '超时'} \n\t ctx:done(json.encode(errout))\n\tend\nend\n\n\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("hbss_zd m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local temp1 =iota.hexToByte(hex,9,'B')\n log.debug("hbss_zd temp1=%s",temp1)\n local temp2 =iota.hexToByte(hex,10,'B')\n log.debug("hbss_zd temp2=%s",temp2)\n local temp =(temp1+temp2)*0.0625\n\n \n\t\tlocal accelerationx =iota.hexToShort(hex,11,'B')\n\t\tlocal accelerationy =iota.hexToShort(hex,13,'B')\n\t\tlocal accelerationz =iota.hexToShort(hex,15,'B')\n \n out.data = { \n temperature\t=temp,\n\t\t\taccelerationx=accelerationx,\n\t\t\taccelerationy=accelerationy,\n\t\t\taccelerationz=accelerationz\n\t\t\t}\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("hbss_zd m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n\tlocal checkLen=string.len(data)/2\n if data == nil or checkLen~= 19 then\n errormsg = string.format('无效的数据长度=%s≠19',checkLen)\n errcode = 1002\n return false\n end\n \n return true\n--crc\nend\n\n \n\n INLINE 2020-12-22 08:39:27.797+08 2020-12-22 15:36:37.659+08 2020-12-22 \N
+4b0fa613-30cd-4b22-b50e-87974bd2ba1a acyq \N 1.0 7471567c-43bd-422d-9d05-9742a9a517c5 7471567c-43bd-422d-9d05-9742a9a517c5 f 7471567c-43bd-422d-9d05-9742a9a517c5 Lua onData = function()\nend\n\nstart = function()\n log.debug('acyq loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n log.debug('acyq device=%s', json.encode(device))\n out = {\n type = 2,\n data = {},\n result = {}\n }\n local endian = 'B'\n local buff = ''\n local moduleNo\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = device.uplink.props.module\n --模块通道优先接口获取\n\n log.debug('acyq 设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n else\n moduleNo = device.props.moduleId\n\n log.debug('acyq 设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n end\n\n buff = iota.appendHexByte(buff, moduleNo, endian)\n\tbuff = buff .. '0300640021'\n buff=iota.appendHexCrc(buff, 'L' ,0)\n \n ok, resp = ctx:ssend(buff, 15000)\n\n if ok then\n local ErrorCode = IsValidOut(resp,moduleNo)\n if ErrorCode then\n log.debug('acyq 数据有效=%s', resp)\n allSubData = getAllDatas(resp)\n --发送指令\n local subdevices = device.dnlinks[1].devices\n\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do --插入16个通道\n \tlog.debug('acyq child=%s', json.encode(child))\n channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t\n \tlog.debug('acyq 解析通道%s数据', channelNo)\n \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n \ttable.insert(out.data, result)\n \t\n end\n end\n else\n log.debug('acyq 数据无效=%s', resp)\n out.result = {code = ercode, msg = erormsg}\n end\n else\n log.debug('acyq ok=false')\n out.result = {code = '1002', msg = 'ok=false'}\n end\n\n local resultData = json.encode(out)\n log.debug('acyq resultData=%s', resultData)\n ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n local DataList = {}\n local subDataArea = string.sub(hexStr, 7, -5)\n \n for i = 1, 17 do\n local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 4 + 1, (i - 1) * 4 + 4)\n \n DataList[i] = iota.hexToUShort(singleChannelDataHex, 0, 'B')/10\n \tlog.debug('acyq getAllDatas DataList[%s]=%s',i,DataList[i])\n end\n return DataList\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n log.debug('acyq datatable=%s', json.encode(datatable))\n local subData = {\n type = 1,\n data = {},\n device = '',\n result = {}\n }\n local freq = datatable[subChannelId]\n local temp = datatable[17]\n if childDevice ~= nil then\n if childDevice.uplink.capabilities[1].formula.metaid == '21d229f6-5f74-405a-a06e-1f7dc84dbcb3' then\n local k = tonumber(childDevice.uplink.capabilities[1].formula.props.K)\n\n local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n\t\t\tlocal kt = tonumber(childDevice.uplink.capabilities[1].formula.props.Kt)\n\t\t\tlocal t0 = tonumber(childDevice.uplink.capabilities[1].formula.props.To)\n log.debug('acyq module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s,kt=%s,temp=%s', moduleNoStr, subChannelId, childDevice.id, k, f0, freq,kt,temp)\n --log.debug('acyq module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil and freq ~= nil and temp ~= nil then\n Phy = k * (freq ^ 2 - f0 ^ 2)+ kt * (temp - t0) \n end\n end\n\t\t log.debug('acyq freq=%s,Phy=%s', freq, Phy)\n singleData = {\n data = {\n\t\t\t temperature=temp,\n frequency = freq,\n physicalvalue = Phy\n },\n device = childDevice.id,\n type = 1\n }\n end\n --end\n\n --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n if device.dnlinks ~= nil then\n for k, dnlink in pairs(device.dnlinks) do\n for v, subdevice in pairs(dnlink.devices) do\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n log.debug('acyq has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('acyq has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\nIsValidOut = function(checkdata,deviceModule)\n log.debug('acyq 开始校验数据=%s', checkdata)\n\tlocal dataModule= iota.hexToByte(checkdata,0,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('acyqa module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("acyq [%s] %s",deviceModule,errormsg)\n return false\n end\n\n \n return true\n --crc\nend INLINE 2020-12-16 17:24:15.987+08 2020-12-17 09:29:31.662+08 2020-12-16 \N
+ba7f2cc2-0e6e-47f7-913b-feccd613654e acyq_zx32 \N 1.0 7471567c-43bd-422d-9d05-9742a9a517c5 7471567c-43bd-422d-9d05-9742a9a517c5 f 7471567c-43bd-422d-9d05-9742a9a517c5 Lua onData = function()\nend\n\nstart = function()\n log.debug('acyq_zx32 loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n log.debug('acyq_zx32 device=%s', json.encode(device))\n out = {\n type = 2,\n data = {},\n result = {}\n }\n local endian = 'B'\n local buff = ''\n local moduleNo\n if json.encode(device.uplink.props) ~= 'null' then\n moduleNo = device.uplink.props.module\n --模块通道优先接口获取\n\n log.debug('acyq_zx32 设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n else\n moduleNo = device.props.moduleId\n\n log.debug('acyq_zx32 设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n end\n\n buff = iota.appendHexByte(buff, moduleNo, endian)\n\tbuff = buff .. '0300640021'\n buff=iota.appendHexCrc(buff, 'L' ,0)\n \n ok, resp = ctx:ssend(buff, 15000)\n\n if ok then\n local ErrorCode = IsValidOut(resp,moduleNo)\n if ErrorCode then\n log.debug('acyq_zx32 数据有效=%s', resp)\n allSubData = getAllDatas(resp)\n --发送指令\n local subdevices = device.dnlinks[1].devices\n\n if subdevices ~= nil then\n for index, child in pairs(subdevices) do --插入16个通道\n \tlog.debug('acyq_zx32 child=%s', json.encode(child))\n channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t\n \tlog.debug('acyq_zx32 解析通道%s数据', channelNo)\n \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n \ttable.insert(out.data, result)\n \t\n end\n end\n else\n log.debug('acyq_zx32 数据无效=%s', resp)\n out.result = {code = ercode, msg = erormsg}\n end\n else\n log.debug('acyq_zx32 ok=false')\n out.result = {code = '1002', msg = 'ok=false'}\n end\n\n local resultData = json.encode(out)\n log.debug('acyq_zx32 resultData=%s', resultData)\n ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n local DataList = {}\n local subDataArea = string.sub(hexStr, 7, -5)\n \n for i = 1, 33 do\n local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 4 + 1, (i - 1) * 4 + 4)\n \n DataList[i] = iota.hexToUShort(singleChannelDataHex, 0, 'B')/10\n \tlog.debug('acyq_zx32 getAllDatas DataList[%s]=%s',i,DataList[i])\n end\n return DataList\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n log.debug('acyq_zx32 datatable=%s', json.encode(datatable))\n local subData = {\n type = 1,\n data = {},\n device = '',\n result = {}\n }\n local freq = datatable[subChannelId]\n local temp = datatable[33]\n if childDevice ~= nil then\n if childDevice.uplink.capabilities[1].formula.metaid == '61c4b4b9-028e-4788-8af4-c97e1084d1c8' then\n local k = tonumber(childDevice.uplink.capabilities[1].formula.props.K)\n\n local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n\t\t\tlocal kt = tonumber(childDevice.uplink.capabilities[1].formula.props.Kt)\n\t\t\tlocal t0 = tonumber(childDevice.uplink.capabilities[1].formula.props.To)\n log.debug('acyq_zx32 module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s,kt=%s,temp=%s', moduleNoStr, subChannelId, childDevice.id, k, f0, freq,kt,temp)\n --log.debug('acyq_zx32 module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil and freq ~= nil and temp ~= nil then\n Phy = k * (freq ^ 2 - f0 ^ 2)+ kt * (temp - t0) \n end\n end\n\t\t log.debug('acyq_zx32 freq=%s,Phy=%s', freq, Phy)\n singleData = {\n data = {\n\t\t\t temperature=temp,\n frequency = freq,\n physicalvalue = Phy\n },\n device = childDevice.id,\n type = 1\n }\n end\n --end\n\n --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n if device.dnlinks ~= nil then\n for k, dnlink in pairs(device.dnlinks) do\n for v, subdevice in pairs(dnlink.devices) do\n if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n return subdevice\n end\n end\n end\n log.debug('acyq_zx32 has no device module=%s channel=%s', moduleid, channel)\n return nil -- 没有找到匹配的传感器\n else\n log.debug('acyq_zx32 has no subdevices.')\n return nil -- 没有子设备\n end\nend\n\nIsValidOut = function(checkdata,deviceModule)\n log.debug('acyq_zx32 开始校验数据=%s', checkdata)\n\tlocal dataModule= iota.hexToByte(checkdata,0,'B')\n if (deviceModule~=tostring(dataModule)) then\n errormsg = string.format('acyq_zx32 module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n errcode = 1001\n log.debug("acyq_zx32 [%s] %s",deviceModule,errormsg)\n return false\n end\n\n \n return true\n --crc\nend INLINE 2020-12-16 16:44:50.509+08 2020-12-17 09:29:52.877+08 2020-12-16 \N
+0b7198e4-94bf-46f6-a467-d5d3c514267e fs_airclear_0901 \N 飞尚自研空气净化器协议mqtt 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n log.debug('home_airclear_0901 device=%s', json.encode(device))\n --onData('')\nend\n\nlocal binCache = {}\n\n--receiveStr='{ "params": { "CurrentTemperature": 32.899999999999999, "CurrentHumidity": 60, "PM25Level": 6, "TVOC": 3, "WindSpeed": 5, "ChildLockSwitch": 1, "IonsSwitch": 1, "PowerSwitch": 1 } }'\nonData = function(mq_body)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n local receiveStr = mq_body.payload\n log.debug('home_airclear_0901 receiveStr=%s', receiveStr)\n --解析数据\n local dataObject = json.decode(receiveStr)\n if dataObject ~= nil then\n --判断数据源 是appProxy 还是 device\n --设备数据类型\n -- code:0x01 设备信息上报\n -- code:0x02 心跳上报\n -- code:0x03 周期上报 设备数据与状态\n -- code:0x04 报警上报\n -- code:0x05 时间同步上报\n if dataObject.from == 'device' then\n if dataObject.code == 3 then\n if dataObject.params ~= nil then\n out.data.temperature = dataObject.params.TEMP\n out.data.humidity = dataObject.params.HUMI\n out.data.pm1 = dataObject.params.PM1_0\n out.data.pm25 = dataObject.params.PM2_5\n out.data.pm10 = dataObject.params.PM10\n out.data.ch2o = dataObject.params.CH2O --甲醛\n out.data.tvoc = dataObject.params.TVOC\n\n out.data.powerlock = dataObject.params.power --电源开关\n out.data.windgear = dataObject.params.wind --风速挡位 0:自动,1:1档,2:2档,3:3档, 4:4档\n out.data.timcnt = dataObject.params.timcnt --定时个数\n out.data.uvlock = dataObject.params.UV --UV杀菌灯开关 1:打开 0:关闭\n out.data.NegativeO2lock = dataObject.params['-O2'] --负氧离子开关状态 1:打开 0:关闭\n out.data.humilock = dataObject.params.humista --加湿器开关状态 1:打开 0:关闭\n out.data.humigear = dataObject.params.humigear -- 加湿器挡位 1:L1 2:L2 3:L3 4:L4\n out.data.wchargelock = dataObject.params.wcharge --无线充电开关 1:打开 0:关闭\n out.data.childlock = dataObject.params.chlock --童锁开关状态1:打开 0:关闭\n else\n log.debug('home_airclear_0901 dataObject.params =nil')\n end\n\n sendMsgToTopic(dataObject, 'app')\n ackToDevice(dataObject)\n elseif dataObject.code == 5 then --时间同步 服务器\n local timeNow = getTime()\n dataObject.from = 'server'\n dataObject.cmd = 64011\n dataObject.params = {}\n dataObject.params.date = timeNow\n --数据发送到appProxy 周期上报的数据 code= 0x03和\n sendMsgToTopic(dataObject, 'device')\n elseif dataObject.code == 13 then --远程升级触发后,设备回应 要第几包,平台按需发送\n --升级文件流 缓存,拆解成多个小包\n -- binCache.buff = dataObject.params.binBuff\n -- binCache.size = string.len(binCache.buff)\n -- binCache.params = getPackageList(binCache.buff)\n log.debug('home_airclear_0901 平台收到 设备升级 回应,准备下发升级包')\n\n --设备拒绝升级,则把消息转给app\n if dataObject.params.sign == 1 then\n dataObject.result=1\n sendMsgToTopic(dataObject, 'app')\n else\n dataObject.from = 'server'\n dataObject.cmd = 523\n local frameIndex = dataObject.params.frame\n dataObject.params = {}\n dataObject.params.frame = frameIndex\n local appendCrc16 = iota.appendHexCrc(binCache.buff, 'L', 0)\n local crc16 = string.sub(appendCrc16, -4, -1)\n dataObject.params.crc16 = tonumber(crc16, 16)\n dataObject.params.bin = binCache.params.subList[frameIndex]\n dataObject.params.len = string.len(dataObject.params.bin)\n --数据发送到appProxy 周期上报的数据 code= 0x03和\n sendMsgToTopic(dataObject, 'device')\n end\n end\n elseif dataObject.from == 'app' then --appproxy 转发的websocket消息\n if dataObject.code == 13 then --远程升级 app接口触发mq升级通知\n log.debug('home_airclear_0901 平台收到 app升级 通知,准备 通知 设备')\n --升级文件流 缓存,拆解成多个小包\n binCache.buff = dataObject.params.binBuff\n binCache.params = getPackageList(binCache.buff)\n\n dataObject.from = 'server'\n dataObject.type = 257\n dataObject.cmd = 523\n dataObject.params = {}\n dataObject.params.type = 1\n dataObject.params.count = binCache.params.count\n dataObject.params.size = binCache.params.size\n --数据发送到appProxy 周期上报的数据 code= 0x03和\n sendMsgToTopic(dataObject, 'device')\n end\n else\n log.debug('home_airclear_0901 非法数据 =%s', receiveStr)\n end\n else\n log.debug('home_airclear_0901 dataObject =nil')\n end\n\n local resultData = json.encode(out) --输出传递到平台上\n log.debug('home_airclear_0901 result=%s', json.encode(out))\n if next(out.data) ~= nil or next(out.result) ~= nil then\n ctx:notify(resultData)\n end\nend\n\n--升级文件流 拆解成 1024 长度单位的小包\ngetPackageList = function(allPackageStr)\n local packageParams = {subList = {}}\n local len = string.len(allPackageStr)\n local count = len / 1024\n local packageCount = math.ceil(count)\n packageParams.size = len\n packageParams.count = packageCount\n\n for i = 1, packageCount, 1 do\n local start_index = (i - 1) * 1024 + 1\n local end_index = start_index + 1024 -- 如果 越界,lua自动取实际的 结束索引\n local subPackage = string.sub(allPackageStr, start_index, end_index)\n --最后一包判断长度是否是 4的倍数 不足写0x1A\n if i == packageCount then\n repeat\n local subPackage_len = string.len(subPackage) / 4\n local min_subPackage_len = math.floor(subPackage_len)\n local diff_value = subPackage_len - min_subPackage_len\n if diff_value > 0 then\n subPackage = subPackage .. '1A' --最大1024,必须是4的整数倍,不足写0x1A\n end\n until (diff_value == 0)\n end\n packageParams.subList[i] = subPackage\n end\n return packageParams\nend\n\nsendMsgToTopic = function(msg, msgTo)\n local topic\n if msgTo == 'app' then\n --将指令发送到 appProxy的topic\n topic = msg.ID .. '_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个,代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n elseif msgTo == 'device' then\n topic = msg.ID .. '_device_rece'\n end\n local msgStr = json.encode(msg)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n log.debug('home_airclear_0901 [%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', msg.ID, topic, msgStr, ok, ack)\nend\n\nackToDevice = function(rawDataObject)\n local topic = rawDataObject.ID .. '_device_rece'\n rawDataObject.from = 'server'\n rawDataObject.cmd = 64011\n rawDataObject.params = 'null'\n rawDataObject.result = 0\n local msgStr = json.encode(rawDataObject)\n local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n log.debug(\n 'home_airclear_0901 服务器 应答 设备 [%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s',\n rawDataObject.ID,\n topic,\n msgStr,\n ok,\n ack\n )\nend\n\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\ngetTime = function()\n local timenum = os.time()\n local dateStr = os.date('%Y-%m-%d %H:%M:%S', timenum)\n --空气净化器最后还要带 周几下去\n -- 2018-4-28 16:10:12\n local datelist = Split(dateStr, ' ')\n local datebegin = Split(datelist[1], '-')\n local dateend = Split(datelist[2], ':')\n local year = tonumber(datebegin[1])\n local month = tonumber(datebegin[2])\n local day = tonumber(datebegin[3])\n\n local week = getWeek_comm(year, month, day)\n local recordTime = string.format('%s %s', dateStr, week)\n return recordTime\nend\n\n--获取星期几\nfunction getWeek_comm(y, m, d)\n if m == 1 or m == 2 then\n m = m + 12\n y = y - 1\n end\n local m1, _ = math.modf(3 * (m + 1) / 5)\n local m2, _ = math.modf(y / 4)\n local m3, _ = math.modf(y / 100)\n local m4, _ = math.modf(y / 400)\n\n local iWeek = (d + 2 * m + m1 + y + m2 - m3 + m4) % 7\n local weekTab = {\n ['0'] = 1,\n ['1'] = 2,\n ['2'] = 3,\n ['3'] = 4,\n ['4'] = 5,\n ['5'] = 6,\n ['6'] = 0 --周日是 0\n }\n return weekTab[tostring(iWeek)]\nend INLINE 2020-09-01 11:26:02.151+08 2020-09-09 17:12:15.528+08 2020-09-01 \N
+82a3c5f5-d951-4702-9359-77faffd51db3 hs_qj \N 1.0 01fdd48b-2211-42be-9e66-b2a76c84567d 01fdd48b-2211-42be-9e66-b2a76c84567d f 01fdd48b-2211-42be-9e66-b2a76c84567d Lua \nstart=function()\n log.debug("start %s, ctx=%s", "hs_qj.lua",json.encode(ctx.device))\n\t\n local endian = 'B'\n local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n buff=iota.appendHexByte(buff,moduleNo, endian) \n buff=iota.appendHexByte(buff, 0x03, endian) \n buff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x01, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n buff=iota.appendHexByte(buff, 0x04, endian) \n buff=iota.appendHexCrc(buff, 'L' ,0) \n\n log.debug("hs_qj,m=%s, send=%s",moduleNo,buff)\n ok,resp=ctx:ssend(buff,15000)\n local result="{}"\n if ok then\n result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n else\n\t --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t errout.result = {code = 1001, msg = '超时'} \n\t ctx:done(json.encode(errout))\n\tend\nend\n\n\n\nunmarshall=function(hex,moduleNoStr)\n log.debug("hs_qj m=%s, recv =%s",moduleNoStr,hex)\n local out={\n type = 1,\n data ={},\n result = {}\n }\n\n local ErrorCode = IsValid(hex,moduleNoStr)\n if ErrorCode then\n \n local anglex =iota.hexToFloat(hex,3,'B')\n\t\tlocal angley =iota.hexToFloat(hex,7,'B')\n \n out.data = { \n anglex=anglex,\n\t\t\tangley\t=angley\n\t\t\t}\n else\n out.result = {code=errcode,msg=errormsg} \n end\n log.debug("hs_qj m=%s,data=%s",moduleNoStr,json.encode(out))\n return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n\tlocal checkLen=string.len(data)/2\n if data == nil or checkLen~= 13 then\n errormsg = string.format('无效的数据长度=%s≠13',checkLen)\n errcode = 1002\n return false\n end\n local dataModule=iota.hexToByte(data,0,'B')\n if tostring(moduleCheck) ~= tostring(dataModule) then\t\n errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n errcode = 1003\n return false\n end\n return true\n--crc\nend\n\n \n\n INLINE 2020-12-21 16:58:26.456+08 2020-12-21 17:04:39.857+08 2020-12-21 \N
+2a36b97c-3cf6-4a5e-a331-d00b21babbac hzyy_9020 \N 1.0 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 f 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 Lua \nstart = function()\n --log.debug('hzyy_9020 device=%s', json.encode(device))\n\t--log.debug('hzyy_9020 device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n \n local moduleNo = device.uplink.props.id --模块\n\n log.debug('hzyy_9020', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n \n log.debug('hzyy_9020 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n local sn=bodypkg['sn']\n\tlocal timeStamps=tonumber(bodypkg['stamp'])\n\tlocal timenow=os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamps)\n\tlog.debug('hzyy_9020 [%s] 时间戳', tonumber(timeStamps))\n local deep_disp_x=tonumber(bodypkg['deep_disp_x'])\n\tlocal deep_disp_y=tonumber(bodypkg['deep_disp_y'])\n\tlocal deep_disp_z=tonumber(bodypkg['deep_disp_z'])\n\n\n\t\n\t\n\tif tonumber(sn) == tonumber(moduleNo) then\n\tout={\n data={\n\t xlength=deep_disp_x,\n\t ylength=deep_disp_y,\n\t zlength=deep_disp_z\n },\n\t time=timenow\n\t}\n\tend\n\n\t\n log.debug('hzyy_9020 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend INLINE 2021-01-27 13:53:33.767+08 2021-01-28 08:45:10.669+08 2021-01-27 \N
+8b4200a6-9a48-45e4-8fc2-5e1fe6f756c1 hzyy_PTYYPS2010 \N 1.0 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 f 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 Lua \nstart = function()\n --log.debug('hzyy_PTYYPS2010 device=%s', json.encode(device))\n\t--log.debug('hzyy_PTYYPS2010 device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n \n local moduleNo = device.uplink.props.id --模块\n\n log.debug('hzyy_PTYYPS2010', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n \n log.debug('hzyy_PTYYPS2010 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n local sn=bodypkg['sn']\n\tlocal timeStamps=tonumber(bodypkg['stamp'])\n\tlocal timenow=os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamps)\n\tlog.debug('hzyy_PTYYPS2010 [%s] 时间戳', tonumber(timeStamps))\n local surface_disp_x=tonumber(bodypkg['surface_disp_x'])\n\tlocal surface_disp_y=tonumber(bodypkg['surface_disp_y'])\n\tlocal surface_disp_z=tonumber(bodypkg['surface_disp_z'])\n\n\t\n\t\n\tif tonumber(sn) == tonumber(moduleNo) then\n\tout={\n data={\n\t x=surface_disp_x,\n\t y=surface_disp_y,\n\t z=surface_disp_z\n },\n\t time=timenow\n\t}\n\tend\n\n\t\n log.debug('hzyy_PTYYPS2010 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend INLINE 2021-01-27 13:51:34.683+08 2021-01-28 08:58:50.638+08 2021-01-27 \N
+21edfabe-f147-4b03-8f4f-11b3c2c7ca9b hyzz_1014 \N 1.0 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 f 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 Lua \nstart = function()\n --log.debug('hzyy_1014 device=%s', json.encode(device))\n\t--log.debug('hzyy_1014 device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n \n local moduleNo = device.uplink.props.id --模块\n\n log.debug('hzyy_1014', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n \n log.debug('hzyy_1014 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n local sn=bodypkg['sn']\n\tlocal timeStamps=tonumber(bodypkg['stamp'])\n\tlocal timenow=os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamps)\n\tlog.debug('hzyy_1014 [%s] 时间戳', tonumber(timeStamps))\n local rainfall=tonumber(bodypkg['rainfall'])\n\tlocal daily_rainfall=tonumber(bodypkg['daily_rainfall'])\n\t\n\n\n\t\n\t\n\tif tonumber(sn) == tonumber(moduleNo) then\n\tout={\n data={\n\t rainfall=rainfall,\n\t daily_rainfall=daily_rainfall\n },\n\t time=timenow\n\t}\n\tend\n\n\t\n log.debug('hzyy_1014 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend INLINE 2021-01-28 09:37:24.734+08 2021-01-28 09:37:24.734+08 2021-01-28 \N
+8f65f84a-9034-41ca-a6ea-dba981e7f031 hzyy_1010 \N 1.0 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 f 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 Lua \nstart = function()\n --log.debug('hzyy_1010 device=%s', json.encode(device))\n\t--log.debug('hzyy_1010 device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n \n local moduleNo = device.uplink.props.id --模块\n\n log.debug('hzyy_1010', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n \n log.debug('hzyy_1010 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n local sn=bodypkg['sn']\n\tlocal timeStamps=tonumber(bodypkg['stamp'])\n\tlocal timenow=os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamps)\n\tlog.debug('hzyy_1010 [%s] 时间戳', tonumber(timeStamps))\n local crack_width=tonumber(bodypkg['crack_width'])\n\n\t\n\n\n\t\n\t\n\tif tonumber(sn) == tonumber(moduleNo) then\n\tout={\n data={\n\t length=crack_width\n\t\n },\n\t time=timenow\n\t}\n\tend\n\n\t\n log.debug('hzyy_1010 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend INLINE 2021-01-28 09:41:08.598+08 2021-01-28 09:41:08.598+08 2021-01-28 \N
+37f02599-3f46-4f8a-ba94-dc6515a792d4 hzyy_1016 \N 1.0 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 f 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 Lua \nstart = function()\n --log.debug('hzyy_1016 device=%s', json.encode(device))\n\t--log.debug('hzyy_1016 device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n \n local moduleNo = device.uplink.props.id --模块\n\n log.debug('hzyy_1016', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n \n log.debug('hzyy_1016 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n local sn=bodypkg['sn']\n\tlocal timeStamps=tonumber(bodypkg['stamp'])\n\tlocal timenow=os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamps)\n\tlog.debug('hzyy_1016 [%s] 时间戳', tonumber(timeStamps))\n local soil_moisture=tonumber(bodypkg['soil_moisture'])\n\n\t\n\n\n\t\n\t\n\tif tonumber(sn) == tonumber(moduleNo) then\n\tout={\n data={\n\t soil_moisture=soil_moisture\n },\n\t time=timenow\n\t}\n\tend\n\n\t\n log.debug('hzyy_1016 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend INLINE 2021-01-28 09:57:28.926+08 2021-01-28 10:03:50.931+08 2021-01-28 \N
+210c09d0-3125-4f4a-964c-c9889116f99e hzyy_9050 \N 1.0 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 f 1c2a6d1f-3ebd-47dd-80b6-db55d55982d8 Lua \nstart = function()\n --log.debug('hzyy_9050 device=%s', json.encode(device))\n\t--log.debug('hzyy_9050 device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n local out = {\n data = {},\n result = {},\n type = 1\n }\n \n local moduleNo = device.uplink.props.id --模块\n\n log.debug('hzyy_9050', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n local bodydataStr = httpbody.Body\n\t\n \n log.debug('hzyy_9050 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n local sn=bodypkg['sn']\n\tlocal timeStamps=tonumber(bodypkg['stamp'])\n\tlocal timenow=os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamps)\n\tlog.debug('hzyy_9050 [%s] 时间戳', tonumber(timeStamps))\n local mud_level=tonumber(bodypkg['mod_level'])\n\n\t\n\n\n\t\n\t\n\tif tonumber(sn) == tonumber(moduleNo) then\n\tout={\n data={\n\t length=mud_level\n\t\n },\n\t time=timenow\n\t}\n\tend\n\n\t\n log.debug('hzyy_9050 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n ack = {type = 'http', code = 200, body ='OK'}\n ctx:asend(ack)\nend INLINE 2021-01-28 09:48:18.837+08 2021-01-29 13:47:04.683+08 2021-01-28 \N
+30e579ff-ba81-471e-9de7-6f0063c049c4 FS-RTU-Disaster \N 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n --log.debug("fs_rtu_data , device=%s=%s",json.encode(device))\nend\n\ngetJson = function(rawStr)\n local startIndex = string.find(rawStr, '{', 1)\n local str = string.sub(rawStr, startIndex, -1)\n str = string.gsub(str, '=', ':')\n str = string.gsub(str, ';', ',')\n return str\nend\n\ngetValue = function(rawStr)\n rawStr = string.gsub(rawStr, ':', '')\n\trawStr = string.gsub(rawStr, '"', '')\n\trawStr = string.gsub(rawStr, '{', '')\n\trawStr = string.gsub(rawStr, '}', '')\n return rawStr\nend\n\nonData = function(hex)\n --log.debug('fs_rtu_data , device=%s', json.encode(device))\n log.debug('fs_rtu_data payload=%s', hex.payload)\n --全局\n out = {\n data = {},\n result = {},\n type = 2\n }\n\tlocal jsonstr = getJson(hex.payload)\n\t--log.debug('fs_rtu_data jsonstr=%s', jsonstr)\n\tlocal Index = string.find(jsonstr, ':', 1)\n\tlocal modulestr = string.sub(jsonstr, 3, Index-2)\n\tlocal datastr = string.sub(jsonstr, Index+1, -1)\n\t--log.debug('fs_rtu_data datastr=%s', datastr)\n\tlocal datas = Split(datastr,'},')\n\tlocal channel = "1"\n\tlocal datetime=os.date("%Y-%m-%dT%H:%M:%S+08:00")\n\n\tfor key,value in pairs(datas) do\n\t\tlog.debug('fs_rtu_data value %s=%s', key,value)\n\t\tlocal state = string.find(value, '_ZT_', 1)\n\t\tlog.debug('fs_rtu_data ZT=%s', state)\n\t\tif state ~= nil then\n\t\t\tlocal states = Split(value,'},')\n\t\t\tfor i,v in pairs(states) do\t\t\t\t\n\t\t\t\tlocal temps = Split(v,':')\n\t\t\t\tlocal title = getValue(temps[1])\n\t\t\t\tlocal jdata = string.sub(v, 1, -2)\n\t\t\t\tlocal jsons = json.decode(jdata)\n\t\t\t\tfor i,v in pairs(jsons) do\n\t\t\t\t\tpowerstr = v.battery_dump_energy\n\t\t\t\t\tver = v.sw_version\n\t\t\t\t\tlog.debug('fs_rtu_data power %s ver %s', powerstr,ver)\n\t\t\t\tend\n\t\t\t\tlocal devinfo = Split(title,'_')\n\t\t\t\tchannel = devinfo[3]\n\t\t\t\tlocal rstd = {\n\t\t\t\t\tdata={\n\t\t\t\t\t\t_data_type='diag',\n\t\t\t\t\t\tR={\n\t\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnode = {\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\t\t\t\t\n\t\t\t\t\tdevice=device.id,\n\t\t\t\t\ttype=1,\n\t\t\t\t\ttime=datetime \n\t\t\t\t}\t\t\n\t\t\t\ttable.insert(out.data,rstd)\n\t\t\t\t\n\t\t\tend\t\t\n\t\telse\n\t\t\tlog.debug('fs_rtu_data value=%s', value)\n\t\t\tlocal values = Split(value,',"')\t\t\t\n\t\t\tfor i,v in pairs(values) do\n\t\t\t\tlog.debug('fs_rtu_data data_v=%s', v)\n\t\t\t\tlocal temps = Split(v,'":')\n\t\t\t\tlocal title = getValue(temps[1])\n\t\t\t\tlocal devinfo = Split(title,'_')\n\t\t\t\tchannel = devinfo[3]\n\t\t\t\tvv = getValue(temps[2])\n\n\t\t\t\t\n\t\t\t\tif #(temps)==3 then --历史数据\t\t\t\t\n\t\t\t\t\tlocal dates = string.sub(temps[2], 3, -6)\n\t\t\t\t\tlog.debug('fs_rtu_data dates %s',dates)\n\t\t\t\t\tdatetime = unixtimestamp(dates)\n\t\t\t\t\tlog.debug('fs_rtu_data datetime %s',datetime)\n\t\t\t\t\tlog.debug('fs_rtu_data temps[3] %s',temps[3])\n\t\t\t\t\tvv = getValue(temps[3])\n\t\t\t\tend\n\t\t\t\tlocal type = devinfo[2]\t\t\t\t\n\t\t\t\tlocal module =modulestr..type\n\t\t\t\tlog.debug('fs_rtu_data module=%s,channel =%s', module,channel)\n\t\t\t\tlocal subdevice = getDeviceInfo(module,channel)\n\t\t\t\tlog.debug('fs_rtu_data subdevice=%s', json.encode(subdevice))\n\t\t\t\t\n\t\t\t\tif type == "QJ" then\n\t\t\t\t\tlocal value = Split(vv,',')\n\t\t\t\t\tlog.debug('fs_rtu_data count=%s', tostring(#(value)))\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tx = value[1],\n\t\t\t\t\t\ty = value[2],\n\t\t\t\t\t\tz = value[3],\n\t\t\t\t\t\tangle = value[4],\n\t\t\t\t\t\ttrend = value[5]\n\t\t\t\t\t}\n\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\telseif type == "LF" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tdisplacement = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\n\t\t\t\telseif type == "GP" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tdisplacement = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "SW" then --深部位移 测斜GG\n\t\t\t\t\tlocal value = Split(vv,',')\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tanglex = value[1],\n\t\t\t\t\t\tangley = value[2]\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "JS" then\n\t\t\t\t\tlocal value = Split(vv,',')\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tgx = value[1],\n\t\t\t\t\t\tgy = value[2],\n\t\t\t\t\t\tgz = value[3]\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "ZD" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tdisplacement = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "YL" and devinfo[1] == "L2" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tdisplacement = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "TY" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tphysicalvalue = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "CS" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tdisplacement = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "DS" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tdisplacement = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "YL" and devinfo[1] == "L3" then --雨量\n\t\t\t\t\tlocal value = Split(vv,',')\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tphysicalvalue = value[1]\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\t\n\t\t\t\telseif type == "QW" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\ttemperature = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\t\t\n\t\t\t\telseif type == "TW" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\ttemperature = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "HS" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\twaterrate = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\t\t\n\t\t\t\telseif type == "NW" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\twaterlevel = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\t\t\n\t\t\t\telseif type == "SY" then\n\t\t\t\t\tlocal value = Split(vv,',')\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\twaterlevel = value[1],\n\t\t\t\t\t\ttemperature = value[2]\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\tend\n\t\t\t\ttable.insert(out.data,rst)\n\t\t\tend\n\t\tend\n\t\t\n\n\tend\n local resultData = json.encode(out) --输出传递到平台上\n log.debug('fs_rtu_data result_out=%s', json.encode(out))\n ctx:notify(resultData)\nend\n\nGenrateTimeSet = function()\n local cmd = '$cmd=settime&time=' .. tostring(os.date('%Y-%m-%d %H:%M:%S'))\n devmodule = device.props.moduleid\n local r1, ok = redis.get(device.id .. '_settime')\n if ok and r1 ~= nil then\n log.debug('fs_rtu_data tiem crc=%s ,r1=%s', tostring(os.date('%Y-%m-%d')), r1)\n if r1 ~= tostring(os.date('%Y-%m-%d')) then\n local topic = devmodule .. '_settime'\n local okdev, ack = ctx:asend({type = 'mqtt', payload = cmd, topic = topic})\n if okdev then\n local crc = os.date('%Y-%m-%d')\n redis.set(device.id .. '_settime', tostring(crc))\n end\n end\n else --第一次下发\n local topic = devmodule .. '_settime'\n local okdev_first, ack_first = ctx:asend({type = 'mqtt', payload = cmd, topic = topic})\n if okdev_first then\n local crc = os.date('%Y-%m-%d')\n redis.set(device.id .. '_settime', tostring(crc))\n end\n end\nend\n\n\n--字符串ascii->字符\ntoStrHex = function(hex)\n local len = string.len(hex) / 2\n local str = ''\n for i = 1, len do\n local bi = iota.hexToByte(hex, i - 1, 'B')\n local ascii = string.format('%c', bi)\n str = str .. ascii\n end\n return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n local nFindStartIndex = 1\n local nSplitIndex = 1\n local nSplitArray = {}\n while true do\n local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n if not nFindLastIndex then\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n break\n end\n nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n nSplitIndex = nSplitIndex + 1\n end\n return nSplitArray\nend\n\n--获取采集仪下面的通道信息\nfunction getDeviceInfo(module, channel)\n local resensor = nil\n if device.dnlinks ~= nil then\n --log.debug("fsidaufile =%s:deviceInfo=%s",filename,json.encode(device))\n for i, link in pairs(device.dnlinks) do\n --log.debug("fsidaufile: = %s link=%s",filename,json.encode(link))\n for j, subdevice in pairs(link.devices) do\n --log.debug("fs_rtu_data module = %s sensor=%s",module,json.encode(subdevice))\n if subdevice.uplink.props.module == module and subdevice.uplink.props.channel == channel then\n --log.debug("fsidaufile:= %s final_sensor %s=%s",filename,subdevice.uplink.props.sensorid,sensorId)\n resensor = subdevice\n end\n end\n end\n end\n return resensor\nend\n\nunixtimestamp = function(dateStr)\n -- 2018-4-28 16:10:12\n local dateStr = string.sub(dateStr, 1, -2)\n local datelist = Split(dateStr, 'T')\n --log.debug('fs_rtu_data datelist[1]= %s ', datelist[1])\n local datebegin = Split(datelist[1], '-')\n local dateend = Split(datelist[2], ':')\n local year = tonumber(datebegin[1])\n log.debug('fs_rtu_data year= %s ', year)\n local month = tonumber(datebegin[2])\n local day = tonumber(datebegin[3])\n local hour = tonumber(dateend[1]) + 8\n local minute = tonumber(dateend[2])\n local second = tonumber(dateend[3])\n timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n log.debug('fs_rtu_data recordTime= %s ', recordTime)\n return recordTime\nend INLINE 2021-02-03 09:33:11.518+08 2021-02-24 17:46:01.467+08 2021-02-03 \N
+5bb196bf-cd42-4ba7-a01f-33e961f6510e fs_peopleCounDKQ_987 \N 道肯奇 1.0 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 f ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8 Lua start = function()\n \nend\n\nonData = function(hex)\n local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n local result = protocol_decode(hex, moduleNo)\n --判断是否快到0点 清空计数\n --mayClear(moduleNo)\n log.debug('fs_peopleCounter_987 result=%s', result)\n ctx:notify(result)\nend\n\nfunction mayClear(moduleNo)\n local hourNow = tonumber(os.date('%H'))\n local minuteNow = tonumber(os.date('%M'))\n if hourNow >= 23 or minuteNow > 30 then --23点30后清空数据\n local clearBuff = protocol_encode(moduleNo)\n ctx:asend(clearBuff)\n log.debug('fs_peopleCounter_987 清空指令=%s', clearBuff)\n end\nend\n\nfunction protocol_encode(moduleNoStr)\n local BE = 'B'\n local buff = '63'\n buff = iota.appendHexByte(buff, moduleNoStr, BE) --\n buff = iota.appendHexByte(buff, 0x02, BE) --\n buff = iota.appendHexByte(buff, 0x07, BE)\n buff = iota.appendHexByte(buff, 0x00, BE)--00 全部清空 \n buff = buff .. CS8(1, buff)\n buff = iota.appendHexByte(buff, 0x0d, BE)\n return buff\n --63 00 02 07 00 f7 0d\nend\n\n-- returns: 结果, 原始值, 计算后值\n--正确回复 aaff00141a4531303937333830352003250830300006000700c0\n--原始数据 --"inCount": 6,\n-- "outCount": 7\nfunction protocol_decode(hex, moduleNoCheck)\n local data = hex\n --存储结果\n local out = {\n type = 1,\n data = {},\n result = {}\n }\n log.debug(data)\n --判断数据有效性\n local ErrorCode = IsValid(hex, moduleNoCheck)\n if ErrorCode then\n\n local inCount = iota.hexToUShort(hex,20,'B') --getCount(inBytesStr) -- :进人数\n local outCount = iota.hexToUShort(hex,22,'B') -- :出人数\n\n\n out.data = {\n inCount = inCount,\n outCount = outCount,\n stayCount = inCount - outCount\n }\n else\n out.result = {code = errcode, msg = errormsg}\n end\n return json.encode(out)\nend\n\nIsValid = function(data, deviceModule)\n log.debug('fs_peopleCounter_987 开始校验 data=%s', data)\n local dataLen = string.len(data) / 2\n if data == nil or dataLen ~= 26 then\n errormsg = string.format('数据长度无效=%s≠22', dataLen)\n errcode = 1002\n return false\n end\n if iota.hexToByte(data, 4, 'B') ~= 0x1a then\n errormsg = 'CMD is not right'\n errcode = 1003\n return false\n end\n local dataModule = iota.hexToByte(data, 1, 'B')\n if tonumber(deviceModule) ~= dataModule then\n errormsg = string.format('无效的模块号=%s≠%s', dataModule, deviceModule)\n errcode = 1004\n return false\n end\n return true\nend\n\n--校验和8\nCS8 = function(start, buff)\n local lcr = 0\n for i = start, string.len(buff) / 2 - 1 do\n lcr = lcr + tonumber(string.sub(buff, 1 + 2f * i, 2 * (i + 1)), 16)\n end\n local value =bit.band(lcr, 0xff)\n return string.format('%02x',value)\nend\n\ngetCount = function(bytes_8)\n local bytes_len = string.len(bytes_8) / 2\n local count = 0\n for i = 0, bytes_len - 1, 1 do\n local num = tonumber(string.sub(bytes_8, -2 * i - 2, -2 * i - 1))\n count = count + num * math.pow(10, i)\n end\n return count\nend INLINE 2021-02-04 15:44:37.97+08 2021-02-22 11:12:22.085+08 2021-02-04 \N
+\.
+
+
+--
+-- Data for Name: Recharge; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Recharge" (id, out_trade_no, fee, "oldBalance", "newBalance", time_start, time_end, "payChannel", "paymentState", transaction_id, bank_type, openid, product_id, "createdAt", "updatedAt", "accountId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: Resource; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Resource" (id, name, "desc", type, key, "createBy", "createdAt", "updatedAt", "resourceGroupId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: ResourceGroup; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."ResourceGroup" (id, name, "desc", "createBy", "createdAt", "updatedAt") FROM stdin;
+\.
+
+
+--
+-- Data for Name: ResourceOperationType; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."ResourceOperationType" (name, "desc", type, "createdAt", "updatedAt", "resourceTypeKey") FROM stdin;
+所有 protocol.* 2017-08-12 17:07:00.344+08 2017-08-12 17:07:00.344+08 Protocol
+查看 protocol.view 2017-08-12 17:07:00.35+08 2017-08-12 17:07:00.35+08 Protocol
+修改 protocol.update 2017-08-12 17:07:00.354+08 2017-08-12 17:07:00.354+08 Protocol
+删除 protocol.delete 2017-08-12 17:07:00.356+08 2017-08-12 17:07:00.356+08 Protocol
+所有 interface.* 2017-08-12 17:07:00.359+08 2017-08-12 17:07:00.359+08 Interface
+查看 interface.view 2017-08-12 17:07:00.361+08 2017-08-12 17:07:00.361+08 Interface
+修改 interface.update 2017-08-12 17:07:00.365+08 2017-08-12 17:07:00.365+08 Interface
+删除 interface.delete 2017-08-12 17:07:00.368+08 2017-08-12 17:07:00.368+08 Interface
+所有 device.* 2017-08-12 17:07:00.371+08 2017-08-12 17:07:00.371+08 Device
+查看 device.view 2017-08-12 17:07:00.374+08 2017-08-12 17:07:00.374+08 Device
+修改 device.update 2017-08-12 17:07:00.376+08 2017-08-12 17:07:00.376+08 Device
+删除 device.delete 2017-08-12 17:07:00.379+08 2017-08-12 17:07:00.379+08 Device
+所有 thing.* 2017-08-12 17:07:00.382+08 2017-08-12 17:07:00.382+08 Thing
+查看 thing.view 2017-08-12 17:07:00.384+08 2017-08-12 17:07:00.384+08 Thing
+修改 thing.update 2017-08-12 17:07:00.388+08 2017-08-12 17:07:00.388+08 Thing
+删除 thing.delete 2017-08-12 17:07:00.39+08 2017-08-12 17:07:00.39+08 Thing
+所有 deploy.* 2017-08-12 17:07:00.393+08 2017-08-12 17:07:00.393+08 Deploy
+查看 deploy.view 2017-08-12 17:07:00.397+08 2017-08-12 17:07:00.397+08 Deploy
+修改 deploy.update 2017-08-12 17:07:00.399+08 2017-08-12 17:07:00.399+08 Deploy
+\.
+
+
+--
+-- Data for Name: ResourceType; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."ResourceType" (name, type, "desc", model, "nameField", "idField", "descField", key, url, "createdAt", "updatedAt", shareable) FROM stdin;
+协议 Protocol 协议资源 ProtocolMeta name id desc protocols meta/protocols 2017-08-12 17:07:00.321+08 2017-08-12 17:07:00.321+08 t
+接口 Interface 接口资源 InterfaceMeta name id desc interfaces meta/interfaces 2017-08-12 17:07:00.323+08 2017-08-12 17:07:00.323+08 t
+设备 Device 设备资源 DeviceMeta name id desc devices meta/devices 2017-08-12 17:07:00.327+08 2017-08-12 17:07:00.327+08 t
+Things Thing Thing资源 Thing name id desc things things 2017-08-12 17:07:00.332+08 2017-08-12 17:07:00.332+08 t
+Deploy Deploy 设备布设 Thing name id desc things things 2017-08-12 17:07:00.338+08 2017-08-12 17:07:00.338+08 t
+规则 Rule 规则 Rule name id desc rules rules 2017-08-12 17:07:00.341+08 2017-08-12 17:07:00.341+08 f
+\.
+
+
+--
+-- Data for Name: Role; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Role" (id, name, "desc", "createBy", "createdAt", "updatedAt") FROM stdin;
+\.
+
+
+--
+-- Data for Name: Rule; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Rule" (id, name, "desc", flow, "createBy", "belongTo", investor, public, enable, release, "createdAt", "updatedAt") FROM stdin;
+\.
+
+
+--
+-- Data for Name: Scheme; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Scheme" (id, name, mode, "interval", unit, repeats, "beginTime", "endTime", "notifyMode", "capabilityNotifyMode", "createdAt", "updatedAt", "dimensionId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: ServicePackage; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."ServicePackage" (id, name, "serviceType", "desc", specification, price, "createdAt", "updatedAt") FROM stdin;
+9063f949-bcd9-40ec-a0cf-36607a41fc35 专业版 PROFESSIONAL 专业版 {"resources":{"interface":{"viewType":1,"available":true,"name":"接口","desc":"您可以创建多少个接口","quota":100,"unit":"个","extend":""},"protocol":{"viewType":1,"available":true,"name":"协议","desc":"您可以创建多少条协议","quota":100,"unit":"条","extend":""},"device":{"viewType":1,"available":true,"name":"设备","desc":"您可以创建多少个设备","quota":100,"unit":"个","extend":""},"thing":{"viewType":1,"available":true,"name":"Thing","desc":"","quota":100,"unit":"个","extend":""},"rule":{"viewType":1,"available":true,"name":"规则","desc":"您可以创建多少个规则","quota":100,"unit":"个","extend":""}},"server":{"times":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":500000,"unit":"次/月"},"frequency":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":100,"unit":"次/秒"},"s1":{"viewType":1,"available":true,"name":"工单响应","desc":"","quota":60,"unit":"分钟","extend":"内"},"s2":{"viewType":2,"available":true,"name":"5×10技术支持","desc":""},"s3":{"viewType":2,"available":true,"name":"5×10客户服务"}}} 999900 2017-08-12 17:07:00.505+08 2017-08-12 17:07:00.505+08
+0e63fe1b-20db-4bf5-802e-37a260efd075 企业版 CUSTOMIZED 企业版 {"resources":{"interface":{"viewType":1,"available":true,"name":"接口","desc":"您可以创建多少个接口","quota":1000,"unit":"个","extend":""},"protocol":{"viewType":1,"available":true,"name":"协议","desc":"您可以创建多少条协议","quota":1000,"unit":"条","extend":""},"device":{"viewType":1,"available":true,"name":"设备","desc":"您可以创建多少个设备","quota":1000,"unit":"个","extend":""},"thing":{"viewType":1,"available":true,"name":"Thing","desc":"","quota":1000,"unit":"个","extend":""},"rule":{"viewType":1,"available":true,"name":"规则","desc":"您可以创建多少个规则","quota":1000,"unit":"个","extend":""}},"server":{"times":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":2000000,"unit":"+次/月"},"frequency":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":200,"unit":"+次/秒"},"s1":{"viewType":1,"available":true,"name":"工单响应","desc":"","quota":15,"unit":"分钟","extend":"内"},"s2":{"viewType":2,"available":true,"name":"7×10技术支持","desc":""},"s3":{"viewType":2,"available":true,"name":"7×10客户服务"}}} 5999900 2017-08-12 17:07:00.508+08 2017-08-12 17:07:00.508+08
+41916745-25aa-4430-a208-b989702d4866 免费版 FREE 免费版 {"resources":{"interface":{"viewType":1,"available":true,"name":"接口","desc":"您可以创建多少个接口","quota":5,"unit":"个","extend":""},"protocol":{"viewType":1,"available":true,"name":"协议","desc":"您可以创建多少条协议","quota":5,"unit":"条","extend":""},"device":{"viewType":1,"available":true,"name":"设备","desc":"您可以创建多少个设备","quota":5,"unit":"个","extend":""},"thing":{"viewType":1,"available":true,"name":"Thing","desc":"","quota":5,"unit":"个","extend":""},"rule":{"viewType":1,"available":true,"name":"规则","desc":"您可以创建多少个规则","quota":5,"unit":"个","extend":""}},"server":{"times":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":10000,"unit":"次/月"},"frequency":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":5,"unit":"次/秒"},"s1":{"viewType":1,"available":true,"name":"工单响应","desc":"","quota":24,"unit":"小时","extend":"内"},"s2":{"viewType":2,"available":false,"name":"一对一技术支持","desc":""},"s3":{"viewType":2,"available":false,"name":"一对一客户服务"}}} 0 2017-08-12 17:07:00.5+08 2017-08-12 17:07:00.5+08
+2a08af80-dbb2-4f25-90cd-6b4ff9b8411c 基础版 BASIC 基础版 {"resources":{"interface":{"viewType":1,"available":true,"name":"接口","desc":"您可以创建多少个接口","quota":20,"unit":"个","extend":""},"protocol":{"viewType":1,"available":true,"name":"协议","desc":"您可以创建多少条协议","quota":20,"unit":"条","extend":""},"device":{"viewType":1,"available":true,"name":"设备","desc":"您可以创建多少个设备","quota":20,"unit":"个","extend":""},"thing":{"viewType":1,"available":true,"name":"Thing","desc":"","quota":20,"unit":"个","extend":""},"rule":{"viewType":1,"available":true,"name":"规则","desc":"您可以创建多少个规则","quota":20,"unit":"个","extend":""}},"server":{"times":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":50000,"unit":"次/月"},"frequency":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":15,"unit":"次/秒"},"s1":{"viewType":1,"available":true,"name":"工单响应","desc":"","quota":24,"unit":"小时","extend":"内"},"s2":{"viewType":2,"available":false,"name":"一对一技术支持","desc":""},"s3":{"viewType":2,"available":false,"name":"一对一客户服务"}}} 99900 2017-08-12 17:07:00.503+08 2017-08-12 17:07:00.503+08
+\.
+
+
+--
+-- Data for Name: SubUser; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."SubUser" (id, dependent, enable, "createdAt", "updatedAt", "parentId", "userId") FROM stdin;
+\.
+
+
+--
+-- Name: SubUser_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public."SubUser_id_seq"', 829, true);
+
+
+--
+-- Data for Name: TestCase; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."TestCase" (id, name, "desc", annotations, "deviceProperties", "capabilityProperties", "interfaceProperties", "formulaProperties", "deviceCapabilityId", "createdAt", "updatedAt", "thingId", "testSuiteId", param) FROM stdin;
+\.
+
+
+--
+-- Data for Name: TestCaseAssert; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."TestCaseAssert" (id, type, operator, value, expect, index, "createdAt", "updatedAt", "testCaseId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: TestCaseExecutionRecord; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."TestCaseExecutionRecord" (id, result, "taskId", "startedAt", "endedAt", elapsed, log, data, "createdAt", "updatedAt", "testCaseId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: TestCaseInput; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."TestCaseInput" (id, value, index, "createdAt", "updatedAt", "testCaseId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: TestSuite; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."TestSuite" (id, name, "desc", annotations, "createdAt", "updatedAt", "thingId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: Thing; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."Thing" (id, name, "desc", image, lng, lat, "createBy", "belongTo", investor, enable, release, public, "createdAt", "updatedAt") FROM stdin;
+\.
+
+
+--
+-- Data for Name: User; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."User" (id, username, password, type, email, mobile, "actEmail", gravatar, key, secret, "createdAt", "updatedAt", "isAdmin", "deletedAt") FROM stdin;
+77804162-837d-4ff9-96c0-beb8e8888f8e iota 35d4da11e2589bf03821ec777ddfe53761fa9b70 Master admin@iota.com \N f \N 7447858021aa925555373b85a54d997cb24c8bb8 87317f5c340398c09cbd130970d1923a6895a26c 2021-03-03 16:11:13.364+08 2021-03-03 16:11:13.364+08 f \N
+\.
+
+
+--
+-- Data for Name: UserApp; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."UserApp" (id, name, key, secret, platform, "extInfo", "createdAt", "updatedAt", "userId") FROM stdin;
+5fcad599-d516-4345-b2a9-b01e8bc29dcc fscloud 0e42afe6e71055cea25fc0083d816426c5867b89 35e0adf0a30345a3104a06bb8a648400d94a9c20 Web \N 2021-03-03 16:14:08.211+08 2021-03-03 16:14:08.211+08 77804162-837d-4ff9-96c0-beb8e8888f8e
+\.
+
+
+--
+-- Data for Name: UserGroup; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."UserGroup" (id, name, "desc", "createBy", "createdAt", "updatedAt") FROM stdin;
+\.
+
+
+--
+-- Data for Name: UserGroupUser; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."UserGroupUser" (id, type, accept, "invitedCode", enable, "createdAt", "updatedAt", "userId", "userGroupId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: UserNotice; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."UserNotice" (id, "createdAt", "updatedAt", "userId", "noticeId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: UserOAuth2; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."UserOAuth2" (id, platform, "openId", "createdAt", "updatedAt", "userId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: WorkOrder; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."WorkOrder" (id, title, "desc", status, "operatorId", "operatorName", email, mobile, "createdAt", "updatedAt", "workOrderTypeId", "userId") FROM stdin;
+\.
+
+
+--
+-- Data for Name: WorkOrderType; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public."WorkOrderType" (id, name, key, "desc", "createdAt", "updatedAt") FROM stdin;
+1 账号 account 2017-08-12 17:07:00.529+08 2017-08-12 17:07:00.529+08
+\.
+
+
+--
+-- Name: WorkOrderType_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public."WorkOrderType_id_seq"', 1, true);
+
+
+--
+-- Name: Accessory Accessory_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Accessory"
+ ADD CONSTRAINT "Accessory_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: AccountServicePackage AccountServicePackage_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."AccountServicePackage"
+ ADD CONSTRAINT "AccountServicePackage_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: Account Account_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Account"
+ ADD CONSTRAINT "Account_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: AlertCategory AlertCategory_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."AlertCategory"
+ ADD CONSTRAINT "AlertCategory_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: AlertDefinition AlertDefinition_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."AlertDefinition"
+ ADD CONSTRAINT "AlertDefinition_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: AlertEventType AlertEventType_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."AlertEventType"
+ ADD CONSTRAINT "AlertEventType_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: Authorization Authorization_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Authorization"
+ ADD CONSTRAINT "Authorization_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: CapabilityCategory CapabilityCategory_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CapabilityCategory"
+ ADD CONSTRAINT "CapabilityCategory_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: CapabilityFormula CapabilityFormula_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CapabilityFormula"
+ ADD CONSTRAINT "CapabilityFormula_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: CapabilityMetaInterface CapabilityMetaInterface_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CapabilityMetaInterface"
+ ADD CONSTRAINT "CapabilityMetaInterface_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: CapabilityMeta CapabilityMeta_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CapabilityMeta"
+ ADD CONSTRAINT "CapabilityMeta_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: CapabilityProperty CapabilityProperty_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CapabilityProperty"
+ ADD CONSTRAINT "CapabilityProperty_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: CompanyCertification CompanyCertification_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CompanyCertification"
+ ADD CONSTRAINT "CompanyCertification_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: Dashboard Dashboard_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Dashboard"
+ ADD CONSTRAINT "Dashboard_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: DeviceCapability DeviceCapability_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceCapability"
+ ADD CONSTRAINT "DeviceCapability_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: DeviceCertification DeviceCertification_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceCertification"
+ ADD CONSTRAINT "DeviceCertification_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: DeviceInterface DeviceInterface_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceInterface"
+ ADD CONSTRAINT "DeviceInterface_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: DeviceMetaInterface DeviceMetaInterface_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceMetaInterface"
+ ADD CONSTRAINT "DeviceMetaInterface_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: DeviceMeta DeviceMeta_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceMeta"
+ ADD CONSTRAINT "DeviceMeta_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: DeviceProperty DeviceProperty_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceProperty"
+ ADD CONSTRAINT "DeviceProperty_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: Device Device_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Device"
+ ADD CONSTRAINT "Device_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: DimensionCapability DimensionCapability_deviceCapabilityId_dimensionId_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DimensionCapability"
+ ADD CONSTRAINT "DimensionCapability_deviceCapabilityId_dimensionId_key" UNIQUE ("deviceCapabilityId", "dimensionId");
+
+
+--
+-- Name: DimensionCapability DimensionCapability_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DimensionCapability"
+ ADD CONSTRAINT "DimensionCapability_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: Dimension Dimension_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Dimension"
+ ADD CONSTRAINT "Dimension_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: FeedBack FeedBack_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."FeedBack"
+ ADD CONSTRAINT "FeedBack_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: FilteredResource FilteredResource_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."FilteredResource"
+ ADD CONSTRAINT "FilteredResource_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: FormulaMeta FormulaMeta_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."FormulaMeta"
+ ADD CONSTRAINT "FormulaMeta_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: FormulaProperty FormulaProperty_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."FormulaProperty"
+ ADD CONSTRAINT "FormulaProperty_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: InterfaceMeta InterfaceMeta_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."InterfaceMeta"
+ ADD CONSTRAINT "InterfaceMeta_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: InterfaceProperty InterfaceProperty_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."InterfaceProperty"
+ ADD CONSTRAINT "InterfaceProperty_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: InterfaceType InterfaceType_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."InterfaceType"
+ ADD CONSTRAINT "InterfaceType_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: LayoutLink LayoutLink_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."LayoutLink"
+ ADD CONSTRAINT "LayoutLink_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: LayoutNode LayoutNode_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."LayoutNode"
+ ADD CONSTRAINT "LayoutNode_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: Layout Layout_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Layout"
+ ADD CONSTRAINT "Layout_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: Migrations Migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Migrations"
+ ADD CONSTRAINT "Migrations_pkey" PRIMARY KEY (name);
+
+
+--
+-- Name: NoticeType NoticeType_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."NoticeType"
+ ADD CONSTRAINT "NoticeType_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: Notice Notice_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Notice"
+ ADD CONSTRAINT "Notice_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: OperationRecord OperationRecord_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."OperationRecord"
+ ADD CONSTRAINT "OperationRecord_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: Order Order_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Order"
+ ADD CONSTRAINT "Order_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: Permission Permission_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Permission"
+ ADD CONSTRAINT "Permission_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: PersonCertification PersonCertification_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."PersonCertification"
+ ADD CONSTRAINT "PersonCertification_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: PropertyType PropertyType_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."PropertyType"
+ ADD CONSTRAINT "PropertyType_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: ProtocolCertification ProtocolCertification_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."ProtocolCertification"
+ ADD CONSTRAINT "ProtocolCertification_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: ProtocolMeta ProtocolMeta_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."ProtocolMeta"
+ ADD CONSTRAINT "ProtocolMeta_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: Recharge Recharge_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Recharge"
+ ADD CONSTRAINT "Recharge_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: ResourceGroup ResourceGroup_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."ResourceGroup"
+ ADD CONSTRAINT "ResourceGroup_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: ResourceOperationType ResourceOperationType_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."ResourceOperationType"
+ ADD CONSTRAINT "ResourceOperationType_pkey" PRIMARY KEY (type);
+
+
+--
+-- Name: ResourceType ResourceType_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."ResourceType"
+ ADD CONSTRAINT "ResourceType_pkey" PRIMARY KEY (type);
+
+
+--
+-- Name: Resource Resource_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Resource"
+ ADD CONSTRAINT "Resource_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: Role Role_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Role"
+ ADD CONSTRAINT "Role_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: Rule Rule_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Rule"
+ ADD CONSTRAINT "Rule_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: Scheme Scheme_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Scheme"
+ ADD CONSTRAINT "Scheme_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: ServicePackage ServicePackage_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."ServicePackage"
+ ADD CONSTRAINT "ServicePackage_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: SubUser SubUser_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."SubUser"
+ ADD CONSTRAINT "SubUser_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: TestCaseAssert TestCaseAssert_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."TestCaseAssert"
+ ADD CONSTRAINT "TestCaseAssert_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: TestCaseExecutionRecord TestCaseExecutionRecord_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."TestCaseExecutionRecord"
+ ADD CONSTRAINT "TestCaseExecutionRecord_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: TestCaseInput TestCaseInput_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."TestCaseInput"
+ ADD CONSTRAINT "TestCaseInput_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: TestCase TestCase_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."TestCase"
+ ADD CONSTRAINT "TestCase_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: TestSuite TestSuite_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."TestSuite"
+ ADD CONSTRAINT "TestSuite_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: Thing Thing_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Thing"
+ ADD CONSTRAINT "Thing_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: UserApp UserApp_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."UserApp"
+ ADD CONSTRAINT "UserApp_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: UserGroupUser UserGroupUser_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."UserGroupUser"
+ ADD CONSTRAINT "UserGroupUser_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: UserGroupUser UserGroupUser_userId_userGroupId_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."UserGroupUser"
+ ADD CONSTRAINT "UserGroupUser_userId_userGroupId_key" UNIQUE ("userId", "userGroupId");
+
+
+--
+-- Name: UserGroup UserGroup_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."UserGroup"
+ ADD CONSTRAINT "UserGroup_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: UserNotice UserNotice_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."UserNotice"
+ ADD CONSTRAINT "UserNotice_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: UserOAuth2 UserOAuth2_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."UserOAuth2"
+ ADD CONSTRAINT "UserOAuth2_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: User User_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."User"
+ ADD CONSTRAINT "User_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: WorkOrderType WorkOrderType_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."WorkOrderType"
+ ADD CONSTRAINT "WorkOrderType_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: WorkOrder WorkOrder_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."WorkOrder"
+ ADD CONSTRAINT "WorkOrder_pkey" PRIMARY KEY (id);
+
+
+--
+-- Name: DeviceCapability_capabilityMetaId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "DeviceCapability_capabilityMetaId_fkey_index" ON public."DeviceCapability" USING btree ("capabilityMetaId");
+
+
+--
+-- Name: DeviceCapability_deviceId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "DeviceCapability_deviceId_fkey_index" ON public."DeviceCapability" USING btree ("deviceId");
+
+
+--
+-- Name: DeviceCapability_deviceInterfaceId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "DeviceCapability_deviceInterfaceId_fkey_index" ON public."DeviceCapability" USING btree ("deviceInterfaceId");
+
+
+--
+-- Name: DeviceCapability_protocolMetaId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "DeviceCapability_protocolMetaId_fkey_index" ON public."DeviceCapability" USING btree ("protocolMetaId");
+
+
+--
+-- Name: DeviceInterface_deviceId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "DeviceInterface_deviceId_fkey_index" ON public."DeviceInterface" USING btree ("deviceId");
+
+
+--
+-- Name: DeviceInterface_deviceMetaInterfaceId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "DeviceInterface_deviceMetaInterfaceId_fkey_index" ON public."DeviceInterface" USING btree ("deviceMetaInterfaceId");
+
+
+--
+-- Name: Device_deviceMetaId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "Device_deviceMetaId_fkey_index" ON public."Device" USING btree ("deviceMetaId");
+
+
+--
+-- Name: Device_thingId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "Device_thingId_fkey_index" ON public."Device" USING btree ("thingId");
+
+
+--
+-- Name: DimensionCapability_deviceCapabilityId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "DimensionCapability_deviceCapabilityId_fkey_index" ON public."DimensionCapability" USING btree ("deviceCapabilityId");
+
+
+--
+-- Name: DimensionCapability_dimensionId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "DimensionCapability_dimensionId_fkey_index" ON public."DimensionCapability" USING btree ("dimensionId");
+
+
+--
+-- Name: Dimension_thingId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "Dimension_thingId_fkey_index" ON public."Dimension" USING btree ("thingId");
+
+
+--
+-- Name: LayoutLink_fromDeviceInterfaceId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "LayoutLink_fromDeviceInterfaceId_fkey_index" ON public."LayoutLink" USING btree ("fromDeviceInterfaceId");
+
+
+--
+-- Name: LayoutLink_fromLayoutNodeId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "LayoutLink_fromLayoutNodeId_fkey_index" ON public."LayoutLink" USING btree ("fromLayoutNodeId");
+
+
+--
+-- Name: LayoutLink_parentLinkId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "LayoutLink_parentLinkId_fkey_index" ON public."LayoutLink" USING btree ("parentLinkId");
+
+
+--
+-- Name: LayoutLink_toDeviceInterfaceId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "LayoutLink_toDeviceInterfaceId_fkey_index" ON public."LayoutLink" USING btree ("toDeviceInterfaceId");
+
+
+--
+-- Name: LayoutLink_toLayoutNodeId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "LayoutLink_toLayoutNodeId_fkey_index" ON public."LayoutLink" USING btree ("toLayoutNodeId");
+
+
+--
+-- Name: LayoutNode_deviceId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "LayoutNode_deviceId_fkey_index" ON public."LayoutNode" USING btree ("deviceId");
+
+
+--
+-- Name: LayoutNode_layoutId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "LayoutNode_layoutId_fkey_index" ON public."LayoutNode" USING btree ("layoutId");
+
+
+--
+-- Name: Layout_thingId_fkey_index; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX "Layout_thingId_fkey_index" ON public."Layout" USING btree ("thingId");
+
+
+--
+-- Name: Accessory Accessory_workOrderId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Accessory"
+ ADD CONSTRAINT "Accessory_workOrderId_fkey" FOREIGN KEY ("workOrderId") REFERENCES public."WorkOrder"(id) ON UPDATE CASCADE ON DELETE SET NULL;
+
+
+--
+-- Name: AccountServicePackage AccountServicePackage_accountId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."AccountServicePackage"
+ ADD CONSTRAINT "AccountServicePackage_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES public."Account"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: AccountServicePackage AccountServicePackage_servicePackageId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."AccountServicePackage"
+ ADD CONSTRAINT "AccountServicePackage_servicePackageId_fkey" FOREIGN KEY ("servicePackageId") REFERENCES public."ServicePackage"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: Account Account_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Account"
+ ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: AlertDefinition AlertDefinition_alertCategoryId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."AlertDefinition"
+ ADD CONSTRAINT "AlertDefinition_alertCategoryId_fkey" FOREIGN KEY ("alertCategoryId") REFERENCES public."AlertCategory"(id) ON DELETE CASCADE;
+
+
+--
+-- Name: AlertDefinition AlertDefinition_alertEventTypeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."AlertDefinition"
+ ADD CONSTRAINT "AlertDefinition_alertEventTypeId_fkey" FOREIGN KEY ("alertEventTypeId") REFERENCES public."AlertEventType"(id) ON DELETE CASCADE;
+
+
+--
+-- Name: Authorization Authorization_resourceGroupId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Authorization"
+ ADD CONSTRAINT "Authorization_resourceGroupId_fkey" FOREIGN KEY ("resourceGroupId") REFERENCES public."ResourceGroup"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: Authorization Authorization_roleId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Authorization"
+ ADD CONSTRAINT "Authorization_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES public."Role"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: Authorization Authorization_userGroupId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Authorization"
+ ADD CONSTRAINT "Authorization_userGroupId_fkey" FOREIGN KEY ("userGroupId") REFERENCES public."UserGroup"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: CapabilityFormula CapabilityFormula_capabilityId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CapabilityFormula"
+ ADD CONSTRAINT "CapabilityFormula_capabilityId_fkey" FOREIGN KEY ("capabilityId") REFERENCES public."DeviceCapability"(id) ON DELETE CASCADE;
+
+
+--
+-- Name: CapabilityFormula CapabilityFormula_formulaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CapabilityFormula"
+ ADD CONSTRAINT "CapabilityFormula_formulaId_fkey" FOREIGN KEY ("formulaId") REFERENCES public."FormulaMeta"(id) ON DELETE CASCADE;
+
+
+--
+-- Name: CapabilityMetaInterface CapabilityMetaInterface_capabilityMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CapabilityMetaInterface"
+ ADD CONSTRAINT "CapabilityMetaInterface_capabilityMetaId_fkey" FOREIGN KEY ("capabilityMetaId") REFERENCES public."CapabilityMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: CapabilityMetaInterface CapabilityMetaInterface_deviceMetaInterfaceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CapabilityMetaInterface"
+ ADD CONSTRAINT "CapabilityMetaInterface_deviceMetaInterfaceId_fkey" FOREIGN KEY ("deviceMetaInterfaceId") REFERENCES public."DeviceMetaInterface"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: CapabilityMeta CapabilityMeta_capabilityCategoryId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CapabilityMeta"
+ ADD CONSTRAINT "CapabilityMeta_capabilityCategoryId_fkey" FOREIGN KEY ("capabilityCategoryId") REFERENCES public."CapabilityCategory"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: CapabilityMeta CapabilityMeta_deviceMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CapabilityMeta"
+ ADD CONSTRAINT "CapabilityMeta_deviceMetaId_fkey" FOREIGN KEY ("deviceMetaId") REFERENCES public."DeviceMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: CapabilityMeta CapabilityMeta_protocolMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CapabilityMeta"
+ ADD CONSTRAINT "CapabilityMeta_protocolMetaId_fkey" FOREIGN KEY ("protocolMetaId") REFERENCES public."ProtocolMeta"(id) ON UPDATE CASCADE ON DELETE SET NULL;
+
+
+--
+-- Name: CapabilityProperty CapabilityProperty_capabilityMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CapabilityProperty"
+ ADD CONSTRAINT "CapabilityProperty_capabilityMetaId_fkey" FOREIGN KEY ("capabilityMetaId") REFERENCES public."CapabilityMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: CapabilityProperty CapabilityProperty_propertyTypeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CapabilityProperty"
+ ADD CONSTRAINT "CapabilityProperty_propertyTypeId_fkey" FOREIGN KEY ("propertyTypeId") REFERENCES public."PropertyType"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: CompanyCertification CompanyCertification_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."CompanyCertification"
+ ADD CONSTRAINT "CompanyCertification_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE SET NULL;
+
+
+--
+-- Name: Dashboard Dashboard_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Dashboard"
+ ADD CONSTRAINT "Dashboard_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON DELETE CASCADE;
+
+
+--
+-- Name: DeviceCapability DeviceCapability_capabilityMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceCapability"
+ ADD CONSTRAINT "DeviceCapability_capabilityMetaId_fkey" FOREIGN KEY ("capabilityMetaId") REFERENCES public."CapabilityMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: DeviceCapability DeviceCapability_deviceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceCapability"
+ ADD CONSTRAINT "DeviceCapability_deviceId_fkey" FOREIGN KEY ("deviceId") REFERENCES public."Device"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: DeviceCapability DeviceCapability_deviceInterfaceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceCapability"
+ ADD CONSTRAINT "DeviceCapability_deviceInterfaceId_fkey" FOREIGN KEY ("deviceInterfaceId") REFERENCES public."DeviceInterface"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: DeviceCapability DeviceCapability_protocolMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceCapability"
+ ADD CONSTRAINT "DeviceCapability_protocolMetaId_fkey" FOREIGN KEY ("protocolMetaId") REFERENCES public."ProtocolMeta"(id) ON UPDATE CASCADE ON DELETE SET NULL;
+
+
+--
+-- Name: DeviceCertification DeviceCertification_deviceMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceCertification"
+ ADD CONSTRAINT "DeviceCertification_deviceMetaId_fkey" FOREIGN KEY ("deviceMetaId") REFERENCES public."DeviceMeta"(id) ON DELETE CASCADE;
+
+
+--
+-- Name: DeviceCertification DeviceCertification_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceCertification"
+ ADD CONSTRAINT "DeviceCertification_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON DELETE CASCADE;
+
+
+--
+-- Name: DeviceInterface DeviceInterface_deviceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceInterface"
+ ADD CONSTRAINT "DeviceInterface_deviceId_fkey" FOREIGN KEY ("deviceId") REFERENCES public."Device"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: DeviceInterface DeviceInterface_deviceMetaInterfaceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceInterface"
+ ADD CONSTRAINT "DeviceInterface_deviceMetaInterfaceId_fkey" FOREIGN KEY ("deviceMetaInterfaceId") REFERENCES public."DeviceMetaInterface"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: DeviceMetaInterface DeviceMetaInterface_deviceMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceMetaInterface"
+ ADD CONSTRAINT "DeviceMetaInterface_deviceMetaId_fkey" FOREIGN KEY ("deviceMetaId") REFERENCES public."DeviceMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: DeviceMetaInterface DeviceMetaInterface_interfaceMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceMetaInterface"
+ ADD CONSTRAINT "DeviceMetaInterface_interfaceMetaId_fkey" FOREIGN KEY ("interfaceMetaId") REFERENCES public."InterfaceMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: DeviceMeta DeviceMeta_vendorId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceMeta"
+ ADD CONSTRAINT "DeviceMeta_vendorId_fkey" FOREIGN KEY ("vendorId") REFERENCES public."CompanyCertification"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: DeviceProperty DeviceProperty_deviceMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceProperty"
+ ADD CONSTRAINT "DeviceProperty_deviceMetaId_fkey" FOREIGN KEY ("deviceMetaId") REFERENCES public."DeviceMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: DeviceProperty DeviceProperty_propertyTypeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DeviceProperty"
+ ADD CONSTRAINT "DeviceProperty_propertyTypeId_fkey" FOREIGN KEY ("propertyTypeId") REFERENCES public."PropertyType"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: Device Device_deviceMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Device"
+ ADD CONSTRAINT "Device_deviceMetaId_fkey" FOREIGN KEY ("deviceMetaId") REFERENCES public."DeviceMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: Device Device_thingId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Device"
+ ADD CONSTRAINT "Device_thingId_fkey" FOREIGN KEY ("thingId") REFERENCES public."Thing"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: DimensionCapability DimensionCapability_deviceCapabilityId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DimensionCapability"
+ ADD CONSTRAINT "DimensionCapability_deviceCapabilityId_fkey" FOREIGN KEY ("deviceCapabilityId") REFERENCES public."DeviceCapability"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: DimensionCapability DimensionCapability_dimensionId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."DimensionCapability"
+ ADD CONSTRAINT "DimensionCapability_dimensionId_fkey" FOREIGN KEY ("dimensionId") REFERENCES public."Dimension"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: Dimension Dimension_thingId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Dimension"
+ ADD CONSTRAINT "Dimension_thingId_fkey" FOREIGN KEY ("thingId") REFERENCES public."Thing"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: FormulaMeta FormulaMeta_deviceMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."FormulaMeta"
+ ADD CONSTRAINT "FormulaMeta_deviceMetaId_fkey" FOREIGN KEY ("deviceMetaId") REFERENCES public."DeviceMeta"(id) ON DELETE CASCADE;
+
+
+--
+-- Name: FormulaProperty FormulaProperty_formulaMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."FormulaProperty"
+ ADD CONSTRAINT "FormulaProperty_formulaMetaId_fkey" FOREIGN KEY ("formulaMetaId") REFERENCES public."FormulaMeta"(id) ON DELETE CASCADE;
+
+
+--
+-- Name: FormulaProperty FormulaProperty_propertyTypeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."FormulaProperty"
+ ADD CONSTRAINT "FormulaProperty_propertyTypeId_fkey" FOREIGN KEY ("propertyTypeId") REFERENCES public."PropertyType"(id) ON DELETE CASCADE;
+
+
+--
+-- Name: InterfaceMeta InterfaceMeta_interfaceTypeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."InterfaceMeta"
+ ADD CONSTRAINT "InterfaceMeta_interfaceTypeId_fkey" FOREIGN KEY ("interfaceTypeId") REFERENCES public."InterfaceType"(id) ON UPDATE CASCADE ON DELETE SET NULL;
+
+
+--
+-- Name: InterfaceProperty InterfaceProperty_interfaceMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."InterfaceProperty"
+ ADD CONSTRAINT "InterfaceProperty_interfaceMetaId_fkey" FOREIGN KEY ("interfaceMetaId") REFERENCES public."InterfaceMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: InterfaceProperty InterfaceProperty_propertyTypeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."InterfaceProperty"
+ ADD CONSTRAINT "InterfaceProperty_propertyTypeId_fkey" FOREIGN KEY ("propertyTypeId") REFERENCES public."PropertyType"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: LayoutLink LayoutLink_fromDeviceInterfaceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."LayoutLink"
+ ADD CONSTRAINT "LayoutLink_fromDeviceInterfaceId_fkey" FOREIGN KEY ("fromDeviceInterfaceId") REFERENCES public."DeviceInterface"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: LayoutLink LayoutLink_fromLayoutNodeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."LayoutLink"
+ ADD CONSTRAINT "LayoutLink_fromLayoutNodeId_fkey" FOREIGN KEY ("fromLayoutNodeId") REFERENCES public."LayoutNode"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: LayoutLink LayoutLink_parentLinkId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."LayoutLink"
+ ADD CONSTRAINT "LayoutLink_parentLinkId_fkey" FOREIGN KEY ("parentLinkId") REFERENCES public."LayoutLink"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: LayoutLink LayoutLink_toDeviceInterfaceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."LayoutLink"
+ ADD CONSTRAINT "LayoutLink_toDeviceInterfaceId_fkey" FOREIGN KEY ("toDeviceInterfaceId") REFERENCES public."DeviceInterface"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: LayoutLink LayoutLink_toLayoutNodeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."LayoutLink"
+ ADD CONSTRAINT "LayoutLink_toLayoutNodeId_fkey" FOREIGN KEY ("toLayoutNodeId") REFERENCES public."LayoutNode"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: LayoutNode LayoutNode_deviceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."LayoutNode"
+ ADD CONSTRAINT "LayoutNode_deviceId_fkey" FOREIGN KEY ("deviceId") REFERENCES public."Device"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: LayoutNode LayoutNode_layoutId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."LayoutNode"
+ ADD CONSTRAINT "LayoutNode_layoutId_fkey" FOREIGN KEY ("layoutId") REFERENCES public."Layout"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: Layout Layout_thingId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Layout"
+ ADD CONSTRAINT "Layout_thingId_fkey" FOREIGN KEY ("thingId") REFERENCES public."Thing"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: Notice Notice_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Notice"
+ ADD CONSTRAINT "Notice_type_fkey" FOREIGN KEY (type) REFERENCES public."NoticeType"(id) ON UPDATE CASCADE;
+
+
+--
+-- Name: OperationRecord OperationRecord_workOrderId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."OperationRecord"
+ ADD CONSTRAINT "OperationRecord_workOrderId_fkey" FOREIGN KEY ("workOrderId") REFERENCES public."WorkOrder"(id) ON UPDATE CASCADE ON DELETE SET NULL;
+
+
+--
+-- Name: Order Order_accountId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Order"
+ ADD CONSTRAINT "Order_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES public."Account"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: Order Order_servicePackageId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Order"
+ ADD CONSTRAINT "Order_servicePackageId_fkey" FOREIGN KEY ("servicePackageId") REFERENCES public."ServicePackage"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: Permission Permission_operationTypeKey_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Permission"
+ ADD CONSTRAINT "Permission_operationTypeKey_fkey" FOREIGN KEY ("operationTypeKey") REFERENCES public."ResourceOperationType"(type) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: Permission Permission_resourceTypeKey_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Permission"
+ ADD CONSTRAINT "Permission_resourceTypeKey_fkey" FOREIGN KEY ("resourceTypeKey") REFERENCES public."ResourceType"(type) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: Permission Permission_roleId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Permission"
+ ADD CONSTRAINT "Permission_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES public."Role"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: PersonCertification PersonCertification_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."PersonCertification"
+ ADD CONSTRAINT "PersonCertification_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE SET NULL;
+
+
+--
+-- Name: ProtocolCertification ProtocolCertification_protocolMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."ProtocolCertification"
+ ADD CONSTRAINT "ProtocolCertification_protocolMetaId_fkey" FOREIGN KEY ("protocolMetaId") REFERENCES public."ProtocolMeta"(id) ON DELETE CASCADE;
+
+
+--
+-- Name: ProtocolCertification ProtocolCertification_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."ProtocolCertification"
+ ADD CONSTRAINT "ProtocolCertification_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON DELETE CASCADE;
+
+
+--
+-- Name: ProtocolMeta ProtocolMeta_vendorId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."ProtocolMeta"
+ ADD CONSTRAINT "ProtocolMeta_vendorId_fkey" FOREIGN KEY ("vendorId") REFERENCES public."CompanyCertification"(id) ON DELETE CASCADE;
+
+
+--
+-- Name: Recharge Recharge_accountId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Recharge"
+ ADD CONSTRAINT "Recharge_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES public."Account"(id) ON UPDATE CASCADE ON DELETE SET NULL;
+
+
+--
+-- Name: ResourceOperationType ResourceOperationType_resourceTypeKey_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."ResourceOperationType"
+ ADD CONSTRAINT "ResourceOperationType_resourceTypeKey_fkey" FOREIGN KEY ("resourceTypeKey") REFERENCES public."ResourceType"(type) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: Resource Resource_resourceGroupId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Resource"
+ ADD CONSTRAINT "Resource_resourceGroupId_fkey" FOREIGN KEY ("resourceGroupId") REFERENCES public."ResourceGroup"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: Scheme Scheme_dimensionId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."Scheme"
+ ADD CONSTRAINT "Scheme_dimensionId_fkey" FOREIGN KEY ("dimensionId") REFERENCES public."Dimension"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: SubUser SubUser_parentId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."SubUser"
+ ADD CONSTRAINT "SubUser_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: SubUser SubUser_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."SubUser"
+ ADD CONSTRAINT "SubUser_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: TestCaseAssert TestCaseAssert_testCaseId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."TestCaseAssert"
+ ADD CONSTRAINT "TestCaseAssert_testCaseId_fkey" FOREIGN KEY ("testCaseId") REFERENCES public."TestCase"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: TestCaseExecutionRecord TestCaseExecutionRecord_testCaseId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."TestCaseExecutionRecord"
+ ADD CONSTRAINT "TestCaseExecutionRecord_testCaseId_fkey" FOREIGN KEY ("testCaseId") REFERENCES public."TestCase"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: TestCaseInput TestCaseInput_testCaseId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."TestCaseInput"
+ ADD CONSTRAINT "TestCaseInput_testCaseId_fkey" FOREIGN KEY ("testCaseId") REFERENCES public."TestCase"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: TestCase TestCase_testSuiteId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."TestCase"
+ ADD CONSTRAINT "TestCase_testSuiteId_fkey" FOREIGN KEY ("testSuiteId") REFERENCES public."TestSuite"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: TestCase TestCase_thingId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."TestCase"
+ ADD CONSTRAINT "TestCase_thingId_fkey" FOREIGN KEY ("thingId") REFERENCES public."Thing"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: TestSuite TestSuite_thingId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."TestSuite"
+ ADD CONSTRAINT "TestSuite_thingId_fkey" FOREIGN KEY ("thingId") REFERENCES public."Thing"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: UserApp UserApp_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."UserApp"
+ ADD CONSTRAINT "UserApp_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE SET NULL;
+
+
+--
+-- Name: UserGroupUser UserGroupUser_userGroupId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."UserGroupUser"
+ ADD CONSTRAINT "UserGroupUser_userGroupId_fkey" FOREIGN KEY ("userGroupId") REFERENCES public."UserGroup"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: UserGroupUser UserGroupUser_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."UserGroupUser"
+ ADD CONSTRAINT "UserGroupUser_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: UserNotice UserNotice_noticeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."UserNotice"
+ ADD CONSTRAINT "UserNotice_noticeId_fkey" FOREIGN KEY ("noticeId") REFERENCES public."Notice"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: UserNotice UserNotice_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."UserNotice"
+ ADD CONSTRAINT "UserNotice_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+
+--
+-- Name: UserOAuth2 UserOAuth2_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."UserOAuth2"
+ ADD CONSTRAINT "UserOAuth2_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE SET NULL;
+
+
+--
+-- Name: WorkOrder WorkOrder_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."WorkOrder"
+ ADD CONSTRAINT "WorkOrder_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE SET NULL;
+
+
+--
+-- Name: WorkOrder WorkOrder_workOrderTypeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public."WorkOrder"
+ ADD CONSTRAINT "WorkOrder_workOrderTypeId_fkey" FOREIGN KEY ("workOrderTypeId") REFERENCES public."WorkOrderType"(id) ON UPDATE CASCADE ON DELETE SET NULL;
+
+--
+-- PostgreSQL database dump complete
+--
+
diff --git a/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动redis/local-redis.yaml b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动redis/local-redis.yaml
new file mode 100644
index 0000000..b06384b
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/baseImage_yamls/启动redis/local-redis.yaml
@@ -0,0 +1,54 @@
+apiVersion: apps/v1 #指定API版本标签
+kind: Deployment #定义资源的类型/角色,deployment为控制器,service,endpoints
+metadata: #定义资源的元数据信息
+ name: redis-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: yamlredis-d
+spec:
+ replicas: 1 #定义副本数量
+ selector: #定义选择器
+ matchLabels: #匹配上边的标签
+ app: yamlredis-d #名称
+ template: #定义模板
+ metadata:
+ labels:
+ app: yamlredis-d
+ spec:
+ containers: #定义容器信息
+ - name: yamlredis #容器名,与标签名要相同
+ image: repository.anxinyun.cn/base-images/redis:5-1.21-04-13 #容器使用的镜像以及版本
+ imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfNotPresent 表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
+ command: ["/bin/sh","-c","redis-server --protected-mode 'no' --appendonly yes"] #启动容器的运行命令,将覆盖容器中的Entrypoint,对应Dockefile中的ENTRYPOINT
+ ports:
+ - containerPort: 6379 #定义容器的对外端口
+ volumeMounts:
+ - name: vol-data #挂载设备的名字,与volumes[*].name 需要对应
+ mountPath: /data # 容器的数据目录
+ - name: vol-log #挂载设备的名字,与volumes[*].name 需要对应
+ mountPath: /logs # 容器的数据目录
+ volumes: # volumes和container处于同一层级,别搞错了
+ - name: vol-data
+ hostPath:
+ path: /home/anxinlocal/redisdata # 宿主机目录
+ - name: vol-log
+ hostPath:
+ path: /home/anxinlocal/redislogs # 宿主机目录
+
+---
+apiVersion: v1 #指定API版本标签
+kind: Service #定义资源的类型/角色,Deployment为控制器,Service,endpoints
+metadata: #定义资源的元数据信息
+ name: redis-service #定义资源的名称,在同一个namespace空间中必须是唯一的
+ namespace: lk #默认default
+ labels: #定义资源标签
+ app: redis-s
+spec:
+ selector:
+ app: yamlredis-d #deployment标签
+ type: NodePort
+ ports:
+ - protocol: TCP
+ port: 6379 # 集群内访问
+ targetPort: 6379 #集群内 容器内端口
+ nodePort: 30379 #集群外访问 范围30000-32767
diff --git a/本地化下沉-打包/offline离线安装脚本/fetch-images.sh b/本地化下沉-打包/offline离线安装脚本/fetch-images.sh
new file mode 100644
index 0000000..ee44e30
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/fetch-images.sh
@@ -0,0 +1,49 @@
+#!/bin/bash
+images=(
+ k8s.gcr.io/pause:3.1=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1
+ gcr.io/google_containers/defaultbackend:1.4=registry.cn-hangzhou.aliyuncs.com/google_containers/defaultbackend:1.4
+ k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1=registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
+ k8s.gcr.io/heapster-influxdb-amd64:v1.3.3=registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-influxdb-amd64:v1.3.3
+ k8s.gcr.io/heapster-amd64:v1.5.2=registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-amd64:v1.5.2
+ k8s.gcr.io/heapster-grafana-amd64:v4.4.3=registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-grafana-amd64:v4.4.3
+ #1.22 microk8s版本 metrics-server
+ k8s.gcr.io/metrics-server/metrics-server:v0.5.0=registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.5.0
+ #1.21 microk8s版本 metrics-server
+ #k8s.gcr.io/metrics-server-amd64:v0.3.6=registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
+ #kube-system/calico-node 离线安装需要
+ docker.io/calico/cni:v3.19.1=docker.io/calico/cni:v3.19.1
+ docker.io/calico/pod2daemon-flexvol:v3.19.1=docker.io/calico/pod2daemon-flexvol:v3.19.1
+ docker.io/calico/node:v3.19.1=docker.io/calico/node:v3.19.1
+ #kube-system/calico-kube-controllers离线安装需要
+ docker.io/calico/kube-controllers:v3.17.3=docker.io/calico/kube-controllers:v3.17.3
+ #kube-system/dashboard-metrics-scraper离线安装需要
+ docker.io/kubernetesui/metrics-scraper:v1.0.6=docker.io/kubernetesui/metrics-scraper:v1.0.6
+ #kube-system/kubernetes-dashboard离线安装需要
+ docker.io/kubernetesui/dashboard:v2.2.0=docker.io/kubernetesui/dashboard:v2.2.0
+ #kube-system/coredns离线安装需要
+ docker.io/coredns/coredns:1.8.0=docker.io/coredns/coredns:1.8.0
+)
+
+OIFS=$IFS # 保存旧值
+
+imagelist=()
+imageindex=1
+for image in ${images[*]}; do
+ IFS='='
+ set $image
+ echo "准备拉取 $2"
+ microk8s.ctr image pull $2
+ if [ $1 != $2 ]; then
+ microk8s.ctr image tag $2 $1
+ microk8s.ctr image rm $2
+ fi
+
+ imagelist[imageindex]=$1
+ imageindex=$((imageindex + 1))
+ echo "拉取成功"
+ IFS=$OIFS # 还原旧值
+done
+echo "${imagelist[*]}"
+microk8s.ctr image export ./dashboardAndCalicoImages.tar ${imagelist[*]}
+
+#return 0
diff --git a/本地化下沉-打包/offline离线安装脚本/loopDirToFindYamlOrTar.sh b/本地化下沉-打包/offline离线安装脚本/loopDirToFindYamlOrTar.sh
new file mode 100644
index 0000000..6db175a
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/loopDirToFindYamlOrTar.sh
@@ -0,0 +1,30 @@
+#! /bin/bash
+find_list=()
+index=0
+function read_dir() {
+
+ for file in $(ls $1); do
+ local path=$1"/"$file
+ if [ -d $path ]; then #注意此处之间一定要加上空格,否则会报错
+ read_dir $path $2
+ else
+ #echo $path #在此处处理文件即可
+ extendname=${file##*.}
+ if [ "$extendname" == "$2" ]; then
+
+ find_list[index]="$path"
+ echo "找到${2}文件:${find_list[index]}"
+ index=$((index + 1))
+ # else
+ # echo "$file不匹配 $2"
+
+ fi
+ fi
+ done
+ #echo "数组元素个数为: ${#find_list[*]}"
+}
+#读取第一个参数
+
+read_dir $1 $2
+echo "c-数组元素个数为: ${#find_list[*]}"
+return 0
diff --git a/本地化下沉-打包/offline离线安装脚本/make-app-tar.sh b/本地化下沉-打包/offline离线安装脚本/make-app-tar.sh
new file mode 100644
index 0000000..d9b1a25
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/make-app-tar.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+#所有app镜像
+images=(
+ repository.anxinyun.cn/anxinyun/smislocal-alarm:6.21-03-18=repository.anxinyun.cn/anxinyun/smislocal-alarm:6.21-03-18
+ repository.anxinyun.cn/local/config_center:latest=repository.anxinyun.cn/local/config_center:latest
+ repository.anxinyun.cn/anxinyun/api:137.21-08-17=repository.anxinyun.cn/anxinyun/api:137.21-08-17
+ repository.anxinyun.cn/anxinyun/console-web:75.21-06-10=repository.anxinyun.cn/anxinyun/console-web:75.21-06-10
+ repository.anxinyun.cn/anxinyun/project:latest=repository.anxinyun.cn/anxinyun/project:latest
+ repository.anxinyun.cn/local/et:latest=repository.anxinyun.cn/local/et:latest
+ repository.anxinyun.cn/iota/dac:28.21-04-14=repository.anxinyun.cn/iota/dac:28.21-04-14
+ repository.anxinyun.cn/iota/prometheus:latest=repository.anxinyun.cn/iota/prometheus:latest
+ repository.anxinyun.cn/anxin/iota-proxy:latest=repository.anxinyun.cn/anxin/iota-proxy:latest
+ repository.anxinyun.cn/iota/web-console-api:50.21-05-24=repository.anxinyun.cn/iota/web-console-api:50.21-05-24
+ repository.anxinyun.cn/anxinyun/py.rpc:dragon.32=repository.anxinyun.cn/anxinyun/py.rpc:dragon.32
+ repository.anxinyun.cn/local/report-client:12.21-10-28=repository.anxinyun.cn/local/report-client:12.21-10-28
+)
+
+OIFS=$IFS # 保存旧值
+imagelist=()
+imageindex=1
+for image in ${images[*]}; do
+ IFS='='
+ set $image
+ echo "准备拉取 $2"
+ microk8s.ctr image pull $2
+ if [ $1 != $2 ]; then
+ microk8s.ctr image tag $2 $1
+ microk8s.ctr image rm $2
+ fi
+ imagelist[imageindex]=$1
+ imageindex=$((imageindex + 1))
+ echo "拉取成功"
+ tempname=${2##*/}
+ echo "tempname=$tempname"
+ newtarname=${tempname/:/-}
+ echo "tar存储镜像 $newtarname"
+ microk8s.ctr image export "./${newtarname}.tar" $1
+ IFS=$OIFS # 还原旧值
+done
+
+echo "${imagelist[*]}"
+#microk8s.ctr image export ./baseImages.tar ${imagelist[*]} #全部导入一个tar
+#microk8s.ctr image export ./emqx:4.3.5.tar docker.io/emqx/emqx:4.3.9 # emqx导出问题?先用docker导出
+#docker save -o emqx-4.3.9.tar docker.io/emqx/emqx:4.3.9
+return 0
diff --git a/本地化下沉-打包/offline离线安装脚本/make-base-tar.sh b/本地化下沉-打包/offline离线安装脚本/make-base-tar.sh
new file mode 100644
index 0000000..b499953
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/make-base-tar.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+#所有app镜像
+images=(
+ docker.io/emqx/emqx:4.3.9=docker.io/emqx/emqx:4.3.9
+ repository.anxinyun.cn/base-images/es:6.8.2-3.21-04-21=repository.anxinyun.cn/base-images/es:6.8.2-3.21-04-21
+ repository.anxinyun.cn/base-images/kibana:6.8.2=repository.anxinyun.cn/base-images/kibana:6.8.2
+ repository.anxinyun.cn/base-images/kafka-alpine:2.11-1.21-04-19=repository.anxinyun.cn/base-images/kafka-alpine:2.11-1.21-04-19
+ repository.anxinyun.cn/base-images/pg:12-1.21-04-14=repository.anxinyun.cn/base-images/pg:12-1.21-04-14
+ repository.anxinyun.cn/base-images/adminer:latest=repository.anxinyun.cn/base-images/adminer:latest
+ repository.anxinyun.cn/base-images/redis:5-1.21-04-13=repository.anxinyun.cn/base-images/redis:5-1.21-04-13
+)
+
+OIFS=$IFS # 保存旧值
+imagelist=()
+imageindex=1
+for image in ${images[*]}; do
+ IFS='='
+ set $image
+ echo "准备拉取 $2"
+ microk8s.ctr image pull $2
+ echo "拉取成功"
+ if [ $1 != $2 ]; then
+ microk8s.ctr image tag $2 $1
+ microk8s.ctr image rm $2
+ fi
+ imagelist[imageindex]=$1
+ imageindex=$((imageindex + 1))
+ tempname=${2##*/}
+ echo "tempname=$tempname"
+ newtarname=${tempname/:/-}
+ echo "存储镜像文件名 $newtarname"
+ microk8s.ctr image export "./${newtarname}.tar" $1
+ IFS=$OIFS # 还原旧值
+done
+
+echo "${imagelist[*]}"
+#microk8s.ctr image export ./baseImages.tar ${imagelist[*]} #全部导入一个tar
+#microk8s.ctr image export ./emqx:4.3.5.tar docker.io/emqx/emqx:4.3.9 # emqx导出问题?先用docker导出
+#docker save -o emqx-4.3.9.tar docker.io/emqx/emqx:4.3.9
+return 0
diff --git a/本地化下沉-打包/offline离线安装脚本/microk8s离线包/readme.txt b/本地化下沉-打包/offline离线安装脚本/microk8s离线包/readme.txt
new file mode 100644
index 0000000..922f034
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/microk8s离线包/readme.txt
@@ -0,0 +1,4 @@
+microk8s_2551.assert
+microk8s_2551.snap
+
+包含上述2个microk8s安装文件
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/offline离线安装脚本.sh b/本地化下沉-打包/offline离线安装脚本/offline离线安装脚本.sh
new file mode 100644
index 0000000..3cd6ffd
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/offline离线安装脚本.sh
@@ -0,0 +1,182 @@
+#!/bin/bash
+#microk8s v1.22.2
+
+sudo snap ack ./microk8s离线包/microk8s_2551.assert
+sudo snap install ./microk8s离线包/microk8s_2551.snap --classic
+
+if [ $? != 0 ]; then
+ echo "------1-- microk8s 安装失败 code=$?---------"
+ echo "------1-- microk8s 准备退出 ---------"
+ exit 0
+fi
+
+microk8s.kubectl create namespace lk
+
+dashboardAndCalicoImages_path="./dashboardAndCalicoImages.tar"
+if [ ! -f "$dashboardAndCalicoImages_path" ]; then
+ echo "---------$dashboardAndCalicoImages_path dashboard组件包不存在,退出安装"
+ exit 0
+fi
+
+echo "准备导入 dashboard 组件 镜像"
+microk8s.ctr --namespace k8s.io image import "$dashboardAndCalicoImages_path"
+
+
+sleep 5s
+
+echo "------2-- 组件 准备启动 (这步耗时较久,请等待)---------"
+microk8s status --wait-ready && microk8s enable dashboard
+
+token=$(microk8s kubectl -n kube-system get secret | grep default-token | cut -d " " -f1)
+microk8s kubectl -n kube-system describe secret $token >dashboard_token.txt
+
+sleep 5s
+
+microk8s enable dns
+
+echo "------2-- 组件 启动完成 ---------"
+
+echo "-------- 本地化 基础进程 开始拉取 ---------"
+
+#es 挂载数据路径
+mkdir -p /home/anxinlocal/esdata
+chmod 777 /home/anxinlocal/esdata
+#webapi 报表模板路径
+mkdir -p /home/anxinlocal/static
+#pg 挂载数据路径
+mkdir -p /home/anxinlocal/pgdata
+
+#-----------------------------------base----------------------------
+#判断tar 目录是否存在
+baseImages_tarDir="./baseImage_tars"
+if [ ! -d "$baseImages_tarDir" ]; then
+ echo "---------$baseImages_tarDir base组件包不存在,退出安装"
+ exit 0
+fi
+
+find_list=()
+# shellcheck source=/dev/null
+source ./loopDirToFindYamlOrTar.sh $baseImages_tarDir "tar"
+echo "find_list文件个数为: ${#find_list[*]}"
+
+#导入 base 镜像
+echo "------3--执行 base 镜像拉取 shell脚本 ---------"
+echo "准备导入 baseImages 组件 镜像"
+for item in ${find_list[*]}; do
+ echo "------3--开始 导入 压缩包 ${item} ---------"
+ microk8s.ctr image import "$item"
+ sleep 2s
+done
+
+
+
+#判断tar 目录是否存在
+baseImage_yamls="./baseImage_yamls"
+if [ ! -d "$baseImage_yamls" ]; then
+ echo "---------$baseImage_yamls base组件yaml包不存在,退出安装"
+ exit 0
+fi
+
+
+#启动 base pod
+find_list=()
+# shellcheck source=/dev/null
+source ./loopDirToFindYamlOrTar.sh $baseImage_yamls "yaml"
+echo "f-yaml文件个数为: ${#find_list[*]}"
+
+for item in ${find_list[*]}; do
+ echo "------3-开始拉取base镜像pod ${item} ---------"
+ microk8s.kubectl apply -f ${item}
+ sleep 5s
+done
+
+
+
+#-----------------------------------pg 和 es----------------------------
+
+echo "准备执行pg创建库脚本"
+#测试用
+pgpodname=$(microk8s.kubectl get pod -n lk | grep pg-deployment- | awk '{print $1}')
+echo " pod名称 $pgpodname"
+
+#测试用
+echo "------4--开始执行数据库脚本 ---------"
+#pg数据库 脚本
+#microk8s.kubectl -n lk logs "$(microk8s.kubectl get pod -n lk | grep pg-deployment- | awk '{print $1}')"
+
+microk8s.kubectl exec -i "$pgpodname" -n lk -- psql -U postgres <./$baseImage_yamls/启动pg数据库/pgscript/create_db.sql
+sleep 5s
+microk8s.kubectl exec -i "$pgpodname" -n lk -- psql -U postgres -d iota <./$baseImage_yamls/启动pg数据库/pgscript/iota_create.sql
+sleep 5s
+microk8s.kubectl exec -i "$pgpodname" -n lk -- psql -U postgres -d axy <./$baseImage_yamls/启动pg数据库/pgscript/axy_schema.sql
+sleep 5s
+microk8s.kubectl exec -i "$pgpodname" -n lk -- psql -U postgres -d axy <./$baseImage_yamls/启动pg数据库/pgscript/axy_data.sql
+sleep 5s
+
+#microk8s.kubectl exec -i pg-deployment-6b5dbdc447-l7qqk -n lk -- psql -U postgres -f script/create_db.sql
+
+echo "------4--开始创建es索引 ---------"
+source ./$baseImage_yamls/启动ES和kibana/初始化ES索引/init_es_index.sh
+echo "------4--结束创建es索引 ---------"
+
+#kafka pod地址 存入hosts
+sed -i "1i $(microk8s.kubectl -n lk get pod -o wide | grep kafka-deployment- | awk '{print $6,$1}') " /etc/hosts
+echo "------4--查看hosts ---------"
+cat /etc/hosts
+
+
+
+
+
+
+#-----------------------------------app----------------------------
+#判断tar 目录是否存在
+appImages_tarDir="./appImage_tars"
+if [ ! -d "$appImages_tarDir" ]; then
+ echo "---------$appImages_tarDir app组件包不存在,退出安装"
+ exit 0
+fi
+
+find_list=()
+# shellcheck source=/dev/null
+source ./loopDirToFindYamlOrTar.sh $appImages_tarDir "tar"
+echo "find_list文件个数为: ${#find_list[*]}"
+
+#导入 base 镜像
+echo "------5--执行 app 镜像拉取 shell脚本 ---------"
+echo "准备导入 appImages 组件 镜像"
+for item in ${find_list[*]}; do
+ echo "------5--开始 导入 压缩包 ${item} ---------"
+ microk8s.ctr image import "$item"
+ sleep 2s
+done
+
+
+#判断tar 目录是否存在
+appImage_yamls="./appImage_yamls"
+if [ ! -d "$appImage_yamls" ]; then
+ echo "---------$appImage_yamls app组件yaml包不存在,退出安装"
+ exit 0
+fi
+
+#启动 app pod
+find_list=()
+# shellcheck source=/dev/null
+source ./loopDirToFindYamlOrTar.sh $appImage_yamls "yaml"
+echo "f-yaml文件个数为: ${#find_list[*]}"
+
+for item in ${find_list[*]}; do
+ echo "------6--开始拉取base镜像pod ${item} ---------"
+ microk8s.kubectl apply -f ${item}
+ sleep 5s
+done
+
+
+
+
+
+echo "------7-- 本地化 进程 部署完成 开始使用 ---------"
+
+cat dashboard_token.txt
+
+#microk8s.kubectl edit svc -n kube-system kubernetes-dashboard
\ No newline at end of file
diff --git a/本地化下沉-打包/offline离线安装脚本/readme.txt b/本地化下沉-打包/offline离线安装脚本/readme.txt
new file mode 100644
index 0000000..d2e84ad
--- /dev/null
+++ b/本地化下沉-打包/offline离线安装脚本/readme.txt
@@ -0,0 +1,5 @@
+dashboardAndCalicoImages.tar
+
+fetch-images.sh 脚本执行 后存入当前文件夹
+
+